Секреты Терминала. Часть 2: Просмотр папок
Сегодня мы продолжаем недавно начатый цикл о премудростях Терминала Mac OS X. В прошлый раз мы рассказали о том, как посредством командной строки перейти в нужную папку. Теперь самое время поговорить о том, как можно ознакомиться с содержимым папки. Хотя сегодняшний урок будет посвящён всего одной команде — ls, но вы увидите, как много дополнительных полезных параметров она имеет. Кроме того, мы вернёмся к разговору о перемещении по папкам и рассмотрим пару важных особенностей Терминала.
Итак, следующей важнейшей командой Терминала является команда просмотра содержимого каталога:
ls
ls — не что иное, как сокращение от английского слова «list». В интерфейсе командной строки не может быть и речи о привычном Finder, и его главные функции выполняют команды cd и ls. Введённая без параметров команда ls покажет вам названия всех видимых файлов и папок внутри текущего каталога:
Но такой сжатой информации вам хватит отнюдь не всегда. Именно на этот случай к команде ls припасено почти три десятка дополнительных параметров. Мы расскажем про самые полезные из них.
ls -1
Выводит содержимое папки столбиком (на одну строку — один объект).
ls -a
Покажет все объекты внутри папки, даже те, у которых имя начинается с точки (например .DS_Store), которые всегда скрываются в Finder.
ls -F
Помечает выводимые объекты в зависимости от их типа. В конце названий папок появится слэш, тех файлов, которые можно запустить прямо из Терминала — звёздочка, у ярлыков — собака (@):
Важное отступление: если диск вашего Мака отформатирован по умолчанию, то для Терминала нет разницы, в каком регистре клавиатуры вы вводите имена файлов: например, папки Downloads, downloads, DOWNLOADS и даже DoWnLoAdS — это одно и то же. Но зато для Терминала важно, в каком регистре вы вводите параметры команд. Например, для команды ls параметры -F и -f, -A и -a, -L и -l — абсолютно разные. Никогда не забывайте об этом, потому что это может привести к неожиданным и непредсказуемым результатам.
ls -G
Показывает файлы в цвете. Имена папок посинеют, а исполняемых файлов — покраснеют:
ls -h
покажет размер файлов в человекочитаемом формате. Большие объёмы будут представлены в соответствующих величинах, например, размер песни будет указан в мегабайтах, а какой-то документ будет в килобайтах. Размер папок будет показан непривычно. Будет посчитан размер файла папки. Папка — это файл, который содержит информацию о других файлах, вот, чем больше файлов в папке, тем больше будет указан размер. Но это ни в коем случае не размер содержимого, не стоит пугаться ;)
ls -l
Пожалуй, это самый полезный параметр. Он показывает подробную информацию по каждому объекту:
Слева показаны права доступа к объекту (это тема нашего следующего разговора), затем цифра, показывающая количество вложенных объектов (для простых файлов там всегда будет стоять единица), затем идут имена владельца и группы владельцев (поговорим о этом заодно с правами доступа), затем — размер объекта в байтах. Справа будут показаны дата изменения и имя файла (папки).
ls -m
Выводит имена всех объектов одной сплошной строкой через запятую. В большой папке разобрать что-то после ввода такой команды становится невозможно.
ls -n
Даёт тот же результат, что и ls -l, но вместо имён владельца и группы будут стоять их цифровые коды. Зачем это нужно, расскажем в следующей нашей беседе.
ls -R
Покажет содержимое не только самой папки, но и каждой подпапки в ней.
ls -r
Сортирует содержимое папки по имени в обратном порядке.
ls -s
Сортирует содержимое папки по размеру.
ls -t
Сортирует содержимое папки по дате последнего изменения.
ls -X
Отсортирует файлы по суффиксу. .gif
окажется выше, чем .jpg
, к примеру.
Заметим, что вы можете комбинировать разные параметры, печатая их слитно. Вот что даст команда:
ls -aFGlr
И последнее на сегодня: по умолчанию 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-систем — правах доступа и владельцах, потому что очень часто именно они вызывают много мелких (и не очень) неприятностей.