Утилиты CLI, информация о файлах: команда ls
Общая форма запуска команды ls
--
$ ls [options] names
где в качестве аргумента names
могут выступать имена файлов или каталогов в любом количестве. Команда эта имеет многочисленные опции, основные из которых мы и рассмотрим.
Начать с того, что команда ls
, данная без всяких опций, по умолчанию выводит только имена файлов, причем опуская т.н. dot-файлы, имена которых начинаются с точки (это -- некие аналоги скрытых файлов в MS DOS и Windows). Кроме того, если в качестве аргумента указано имя каталога (или аргумент не указан вообще, что подразумевает текущий каталог), из списка имен его файлов не выводятся текущий (.
) и родительский (..
) каталог.
Для вывода всех без исключения имен файлов (в том числе и скрытых) предназначена опция -a
. Смысл опции -A близок -- она выводит список имен всех файлов, за исключением символов текущего (.
) и родительского (..
) каталога.
Кроме имени, любой файл идентифицируется своим номером inode
. Для его вывода используется опция -i
:
$ ls -i 12144 content.html
и так далее. Как и многие другие, команда ls
обладает способностью рекурсивной обработки аргументов, для чего предназначена опция -R
, выводящая список имен файлов не только текущего каталога, но и всех вложенных подкаталогов:
$ ls -R unixforall: about/ apps/ diffimages/ distro/ signature.html sys/ anons/ content/ difftext/ gentoo/ statistics/ u4articles/ unixforall/about: about_lol.html about_lol.txt index.html unixforall/anons: anons_dc.html
Опция же -d
, напротив, запрещает вывод содержимого вложенных подкаталогов.
В выводе команды ls
по умолчанию имена файлов разных типов даются абсолютно одинаково. Для их визуального различия используется опция -F
, завершающая имена каталогов символом слэша, исполнимых файлов -- символом звездочки, символических ссылок -- "собакой"; имена регулярных файлов, не имеющих атрибута исполнения, никакого символа не включают:
$ ls -F dir1/ dir2/ dir3@ file1 file2* file3@
Другое средство для визуального различия типов файлов -- колоризация, для чего применяется опция -G
. Цвета шрифта, воспроизводящего имена, по умолчанию -- синий для каталогов, лиловый (magenta) для символических ссылок, красный -- исполнимых файлов, и так далее. Для файлов устройств, исполнимых файлов с атрибутом "суидности", каталогов, имеющих атрибут sticky
, дополнительно колоризуется и фон, на котором выводится шрифта, воспроизводящий их имена. Подробности можно посмотреть в секции ENVIRONMENT
man-страницы для команды ls
. Впрочем, колоризация работает не на всех типах терминалов (и не во всех командных оболочках).
По умолчанию команда ls
выводит список файлов в порядке ASCII-кодов первого символа имени. Однако есть возможность его сортировки в порядке времени модификации (-t
), изменения статуса (-c
) или времени доступа (-tu
), а также в порядке, обратном любому из перечисленных (-r
). Кроме того, опция -f
отменяет какую-либо сортировку списка вообще.
Информацию об объеме файлов можно получить, используя опцию -s
, выводящую для имени каждого файла его размер в блоках, а также суммарные объем всех выведенных файлов:
$ ls -s ../book total 822 656 book.html 4 content1.html 86 var_part2.html 24 command.html 38 part2.html 6 command.txt 8 shell_tmp.html
Добавление к опции -s
еще и опции -k
(то есть ls -sk
) выведет всю ту же информацию в килобайтах.
Как можно видеть из всех приведенных выше примеров, списки файлов по команде ls
выводится в многоколоночном виде (чему соответствует опция -C
, однако указывать ее нет необходимости -- многоколоночный вид принят для краткого формата по умолчанию). Но можно задать и одноколоночное представление списка посредством опции -1
:
$ ls -1 dir1 dir2 dir3 file1 file2 file3
До сих пор речь шла о кратком формате вывода команды ls
. Однако более информативным является т.н. длинный ее формат, вывод в котором достигается опцией -l
и автоматически влечет за собой одноколоночное представление списка:
$ ls -l total 8 drwxr-xr-x 2 alv alv 512 8 май 18:04 dir1 drwxr-xr-x 3 alv alv 512 8 май 17:43 dir2 lrwxr-xr-x 1 alv alv 4 9 май 07:59 dir3 -> dir2 -rw-r--r-- 1 alv alv 14 8 май 10:39 file1 -rwxr-xr-x 1 alv alv 30 9 май 08:02 file2 lrwxr-xr-x 1 alv alv 2 8 май 10:57 file3 -> f1
Можно видеть, что по умолчанию в длинном формате выводятся:
- сведения о типе файла (
-
-- регулярный файл,d
-- каталог,l
-- символическая ссылка,c
-- файл символьного устройства,b
-- файл блочного устройства) и атрибуты доступа для различных атрибутов принадлежности (о чем было сказано достаточно); - количество жестких ссылок на данный идентификатор
inode
; - имя пользователя -- владельца файла, и группы пользователей, которой файл принадлежит;
- размер файла в блоках;
- время модификации файла с точностью до месяца, дня, часа и минуты (в формате, принятом в данной
locale
); - имя файла и (для символических ссылок) имя файла-источника.
Однако это еще не все. Добавив к команде ls -l
еще и опцию -i
, можно дополнительно получить идентификатор inode
каждого файла, опция -n
заменит имя владельца и группу на их численные идентификаторы (UID и GUID, соответственно), а опция -T
выведет в поле времени модификации еще и годы, и секунды:
$ ls -linT total 8 694402 drwxr-xr-x 2 1000 1000 512 8 май 18:04:56 2002 dir1 694404 drwxr-xr-x 3 1000 1000 512 8 май 17:43:31 2002 dir2 673058 lrwxr-xr-x 1 1000 1000 4 9 май 07:59:08 2002 dir3 -> dir2 673099 -rw-r--r-- 1 1000 1000 14 8 май 10:39:38 2002 file1 673059 -rwxr-xr-x 1 1000 1000 30 9 май 08:02:23 2002 file2 673057 lrwxr-xr-x 1 1000 1000 2 8 май 10:57:07 2002 file3 -> f1
Разумеется, никто не запрещает использовать в длинном формате и опции визуализации (-F
и -G
), и опции сортировки (-r
, t
, tu
), и любые другие, за исключением опции -C
-- указание ее ведет к принудительному выводу списка в многоколоночной форме, что естественным образом подавляет длинный формат представления.
Я столь подробно остановился на описании команды ls
потому, что это -- основное средство визуализации файловых систем любого Unix, при умелом использовании ничуть не уступающее развитым файловым менеджерам (типа Midnight Commander или Konqueror) по своей выразительности и информативности. И отнюдь не требующее для достижения таковых вбивания руками многочисленных опций: со временем будет показано, что соответствующей настройкой последних можно добиться любого "умолчального" вывода команды ls
.
Содержание . .