Секреты Терминала. Часть 2: Просмотр папок

TerminalСегодня мы продолжаем недавно начатый цикл о премудростях Терминала Mac OS X. В прошлый раз мы рассказали о том, как посредством командной строки перейти в нужную папку. Теперь самое время поговорить о том, как можно ознакомиться с содержимым папки. Хотя сегодняшний урок будет посвящён всего одной команде — ls, но вы увидите, как много дополнительных полезных параметров она имеет. Кроме того, мы вернёмся к разговору о перемещении по папкам и рассмотрим пару важных особенностей Терминала.

Итак, следующей важнейшей командой Терминала является команда просмотра содержимого каталога:

ls

ls — не что иное, как сокращение от английского слова «list». В интерфейсе командной строки не может быть и речи о привычном Finder, и его главные функции выполняют команды cd и ls. Введённая без параметров команда ls покажет вам названия всех видимых файлов и папок внутри текущего каталога:

term21Но такой сжатой информации вам хватит отнюдь не всегда. Именно на этот случай к команде ls припасено почти три десятка дополнительных параметров. Мы расскажем про самые полезные из них.

ls -1

Выводит содержимое папки столбиком (на одну строку — один объект).

ls -a

Покажет все объекты внутри папки, даже те, у которых имя начинается с точки (например .DS_Store), которые всегда скрываются в Finder.

ls -F

Помечает выводимые объекты в зависимости от их типа. В конце названий папок появится слэш, тех файлов, которые можно запустить прямо из Терминала — звёздочка, у ярлыков — собака (@):

term22

Важное отступление: если диск вашего Мака отформатирован по умолчанию, то для Терминала нет разницы, в каком регистре клавиатуры вы вводите имена файлов: например, папки Downloads, downloads, DOWNLOADS и даже DoWnLoAdS — это одно и то же. Но зато для Терминала важно, в каком регистре вы вводите параметры команд. Например, для команды ls параметры -F и -f, -A и -a, -L и -l — абсолютно разные. Никогда не забывайте об этом, потому что это может привести к неожиданным и непредсказуемым результатам.

ls -G

Показывает файлы в цвете. Имена папок посинеют, а исполняемых файлов — покраснеют:

term23

ls -h

покажет размер файлов в человекочитаемом формате. Большие объёмы будут представлены в соответствующих величинах, например, размер песни будет указан в мегабайтах, а какой-то документ будет в килобайтах. Размер папок будет показан непривычно. Будет посчитан размер файла папки. Папка — это файл, который содержит информацию о других файлах, вот, чем больше файлов в папке, тем больше будет указан размер. Но это ни в коем случае не размер содержимого, не стоит пугаться ;)

ls -l

Пожалуй, это самый полезный параметр. Он показывает подробную информацию по каждому объекту:

term24Слева показаны права доступа к объекту (это тема нашего следующего разговора), затем цифра, показывающая количество вложенных объектов (для простых файлов там всегда будет стоять единица), затем идут имена владельца и группы владельцев (поговорим о этом заодно с правами доступа), затем — размер объекта в байтах. Справа будут показаны дата изменения и имя файла (папки).

ls -m

Выводит имена всех объектов одной сплошной строкой через запятую. В большой папке разобрать что-то после ввода такой команды становится невозможно.

ls -n

Даёт тот же результат, что и ls -l, но вместо имён владельца и группы будут стоять их цифровые коды. Зачем это нужно, расскажем в следующей нашей беседе.

ls -R

Покажет содержимое не только самой папки, но и каждой подпапки в ней.

ls -r

Сортирует содержимое папки по имени в обратном порядке.

ls -s

Сортирует содержимое папки по размеру.

ls -t

Сортирует содержимое папки по дате последнего изменения.

ls -X

Отсортирует файлы по суффиксу. .gif окажется выше, чем .jpg, к примеру.

Заметим, что вы можете комбинировать разные параметры, печатая их слитно. Вот что даст команда:

ls -aFGlr

term25

И последнее на сегодня: по умолчанию ls показывает содержимое текущей папки. Но если после параметров ввести через пробел путь к папке или файлу, то сведения будут показаны только по этому объекту. Например,

ls -l /

покажет вам подробную информацию по содержимому корневой папки диска.

Продолжаем:

ls *тут имя директории* — покажет содержимое указанной директории без перемещения к ней. Имена указываются так же, как уже было рассмотрено в предыдущем разделе. Можно указать относительный или же абсолютный путь. Мы можем увидеть содержимое папки внутри данного каталога или же где-то далеко в файловой системе, указав путь абсолютный. Перемещения при этом не произойдёт.
Мы можем использовать маски имен файлов, чтобы показать именно те типы, которые мы хотим. К примеру, ls dir/*.jpg покажет нам все картинки в директории dir, лежащей там, где мы находимся, мы также можем пройтись по всему домашнему каталогу, используя опцию рекурсивного прохода для данной команды. В данном примере звёздочка заменяет сколь угодно длинную последовательность символов. Мы просто говорим, что там может быть что угодно, хоть ничего, но потом обязательно должен быть суффикс .jpg. Можем ставить вопросительный значок, показывая, что на этом месте должен быть именно один символ, не больше, не меньше. Например, ls 19?.jpg покажет нам все jpg-картинки в данной директории в диапазоне имён он 190 до 199. Так можно по дате искать фотографии, так как многие фотоаппараты в имя файла вкладывают дату, а не просто порядковый номер. Мы можем писать даже что-то вроде [0-3], подставляя эту конструкцию в имя файла, таким образом говоря, что вот в этом месте должны стоять цифры из этого диапазона. Это напоминает ранние регулярки до эпохи Perl.

Подытожим. Команда ls может выводить не просто список файлов, а именно тот список, который мы желаем от неё получить. Мы можем говорить что именно и откуда именно нам показать, а комбинация этих опций иногда позволяет заменить этой командой команду find, а ещё можно попутно что-то делать с найденными файлами, используя последовательность команд и передавая вывод одной на вход другой.

В общем случае, каждый символ, предворённый обратной косой чертой теряет свою суть. Так, \* больше не значит «все файлы в данной директории», теперь это — файл с именем, состоящим из одного символа звёздочки. Не следует так именовать файлы, но если встретятся, то мы можем к нему обратиться таким способом, не заключая в кавычки всю строку, это как альтернатива. Вообще говоря, многие и с пробелами писать не рекомендуют, однако уже те времена прошли, автодополнение по кнопке Tab прекрасно и само без нас окружит «проблемное» имя кавычками или обратными косыми чертами.

Запомните ещё одну важнейшую особенность Терминала. Как вы знаете, файлы и папки вполне могут иметь в своих именах пробел. Если вы введёте что-то вроде:

cd Новая папка

то Терминал любезно напишет вам, что объекта с именем «Новая» не существует. Он будет считать именем папки всё, что указано до первого пробела. Чтобы обойти это ограничение, есть два способа:

1) ввести название папки или файла с пробелом в имени в кавычки

cd ‘Новая папка’

2) перед пробелом поставить обратный слэш:

cd Новая\ папка

В следующий раз мы поговорим о важнейшей особенности Mac OS и всех *nix-систем — правах доступа и владельцах, потому что очень часто именно они вызывают много мелких (и не очень) неприятностей.