Как работает ls в Linux
Содержание
- Перечисление файлов по имени
- Перечисление файлов в обратном порядке
- Перечисление файлов по расширению файла
- Перечисление только каталогов
- Перечисление файлов по размеру
- Перечисление файлов по владельцу
- Перечисление файлов по возрасту
- Перечисление файлов по группе
- Перечисление файлов по дате доступа
- Перечисление нескольких файлов в строке
- Добавление глубины к вашим поискам
- Выбор между ls и find
- Заключение
Команды Linux могут предоставлять детали о файлах и показывать варианты настройки списка файлов, а также позволяют заглядывать в файловую систему так глубоко, как вам нужно.
Существует множество способов перечисления файлов и отображения информации о них в системах Linux. Этот пост рассматривает ряд команд, которые предоставляют детали о файлах и предлагают варианты настройки вашего списка файлов в соответствии с вашими потребностями.
Большинство команд перечисляют файлы в отдельных каталогах, в то время как другие позволяют заглядывать в файловую систему так глубоко, как вам нужно.
Основной командой для перечисления файлов, конечно же, является ls. Однако эта команда имеет множество параметров для поиска и перечисления именно тех файлов, которые вы хотите видеть. К тому же, всегда есть команда find для помощи в очень специфических поисках файлов.
Перечисление файлов по имени
Самый простой способ перечислить файлы по имени - это просто использовать команду ls
. Перечисление файлов по имени (в алфавитно-цифровом порядке) является настройкой по умолчанию. Вы можете выбрать ls
(без деталей) или ls -l
(много деталей), чтобы определить, какой вид вы предпочитаете.
$ ls | head -6 report_2023.pdf Meeting_Summary_2023.pdf project_plan.pdf Quarterly_Review_20230315.pdf data_archive.tar.gz scripts $ ls -l | head -6 -rw-rw-r-- 1 user group 20567 Jan 12 2023 report_2023.pdf -rw-rw-r-- 1 user group 157000 Feb 23 2023 Meeting_Summary_2023.pdf -rw-rw-r-- 1 user group 47291 Mar 03 2023 project_plan.pdf -rw-rw-r-- 1 user group 88476 Apr 15 2023 Quarterly_Review_20230315.pdf -rw-rw-r-- 1 user group 10243550 May 08 11:20 data_archive.tar.gz drwxrwxr-x 4 user group 4096000 Jun 17 09:47 scripts
Для постраничного просмотра вашего списка выведите результат команды ls
в команду more
.
more
- это команда в Unix и Linux, которая используется для постраничного просмотра текста. Когда вы "передаёте вывод команды ls команде more" (используя символ pipe |
), вы позволяете просматривать результаты команды ls
по одному экрану за раз.
ls | more
Это полезно, когда у вас много файлов в каталоге, и вы хотите просмотреть список постепенно, а не весь сразу.
Перечисление файлов в обратном порядке
$ ls -r $ ls -lr
Чтобы перечислить файлы в обратном порядке по имени, добавьте параметр -r
(reverse). Это будет похоже на переворачивание обычного списка вверх тормашками.
Перечисление файлов по расширению файла
Команда ls не анализирует типы файлов по содержимому, а работает с именами файлов. Однако существует параметр команды, который может перечислять файлы по расширению. Если добавить параметр -X
, ls будет сортировать файлы по имени в пределах каждой категории расширений. Например, сначала будут перечислены файлы без расширений (в алфавитно-цифровом порядке), за ними следуют файлы с расширениями, такими как .1, .bz2, .c и так далее.
Перечисление только каталогов
По умолчанию команда ls
показывает как файлы, так и каталоги. Если вы хотите перечислить только каталоги, можно использовать параметр -d
. В результате вы получите список вроде этого:
$ ls -d */ 1/ backups/ modules/ projects/ templates/ 2/ html/ patches/ public/ videos/ bin/ new/ private/ save/
Перечисление файлов по размеру
Если вы хотите перечислить файлы в порядке размера, добавьте параметр -S
. Однако обратите внимание, что этот параметр фактически не покажет вам размеры (вместе с другими деталями файла), если вы не добавите также параметр -l
(расширенный список). При перечислении файлов по размеру обычно полезно видеть, что команда делает то, что вы просили. Заметьте, что по умолчанию показываются самые большие файлы вначале. Добавьте параметр -r
, чтобы изменить это (например, ls -lSr
).
$ ls -lS total 959492 -rw-rw-r-- 1 shs shs 357679381 Sep 19 2019 sav-linux-free-9.tgz -rw-rw-r-- 1 shs shs 103270400 Apr 16 17:38 bigfile -rw-rw-r-- 1 shs shs 79117862 Oct 5 2019 Nessus-8.7.1-ubuntu1110_amd64.deb
Перечисление файлов по владельцу
Если вы хотите перечислить файлы по владельцу (например, в общей директории), вы можете передать вывод команды ls
c sort
и выбрать столбец владельца, добавив -k3
для сортировки по третьему полю.
$ ls -l | sort -k3 | more total 56 -rw-rw-r-- 1 dory shs 0 Aug 23 12:27 tasklist drwx------ 2 gdm gdm 4096 Aug 21 17:12 tracker-extract-files.121 srwxr-xr-x 1 root root 0 Aug 21 17:12 ntf_listenerc0c6b8b4567 drwxr-xr-x 2 root root 4096 Aug 21 17:12 hsperfdata_root ^ |
Фактически, вы можете сортировать по любому полю таким образом (например, по году). Просто будьте осторожны, чтобы добавить «n» – -k5n
– если вы сортируете по полю, которое является числовым, иначе сортировка будет в алфавитно-цифровом порядке. Этот метод сортировки полезен также для сортировки содержимого файлов, а не только для перечисления файлов.
Перечисление файлов по возрасту
Используйте параметр -t
, чтобы перечислить файлы в порядке возраста - насколько они новы. Добавьте параметр -r
, чтобы получить в конце списка файлы, которые были обновлены последними. Я использую этот псевдоним, чтобы показать список файлов, которые я обновил последними:
$ alias recent='ls -ltr | tail -8'
Обратите внимание, что время изменения и модификации файла - это разные вещи. Параметры -c
(изменение) и -t
(модификация) не всегда дадут одинаковые результаты. Если вы изменяете права доступа к файлу и ничего больше, -c
поместит этот файл в верхнюю часть вывода ls
, в то время как -t
не сделает этого. Если вас интересует разница, посмотрите на вывод команды stat
.
$ stat ckacct File: ckacct Size: 200 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 829041 Links: 1 Access: (0750/-rwxr-x---) Uid: ( 1000/ shs) Gid: ( 1000/ shs) Access: 2020-08-20 16:10:11.063015008 -0400 Modify: 2020-08-17 07:26:34.579922297 -0400 Change: 2020-08-24 09:36:51.699775940 -0400 Birth: -
Перечисление файлов по группе
Чтобы сортировать файлы по связанным группам, вы можете передать вывод из расширенного списка на команду sort
и указать ей сортировать по четвёртому столбцу.
$ ls -l | sort -k4
Перечисление файлов по дате доступа
Чтобы перечислить файлы по дате доступа (сначала наиболее недавно доступные), используйте параметры -ltu
. Параметр «u» обеспечивает порядок списка "по дате доступа".
$ ls -ltu total 959500 -rwxr-x--- 1 shs shs 200 Aug 24 09:42 ckacct
Перечисление нескольких файлов в строке
Иногда более компактный список файлов более подходит для текущей задачи. Команда ls
также имеет параметры для этого. Чтобы перечислить файлы на как можно меньшем количестве строк, вы можете использовать --format=comma
для разделения имен файлов запятыми, как в этой команде:
$ ls --format=comma 1, 10, 11, 12, 124, 13, 14, 15, 16pgs-landscape.pdf, 16pgs.pdf, 17, 18, 19, 192.168.0.4, 2, 20, 2018-12-23_OoS_2.pdf, 2018-12-23_OoS.pdf, 20190512_OoS.pdf, '2019_HOHO_application working.pdf' …
Предпочитаете пробелы? Используйте --format=across
.
$ ls --format=across z* z zip zipfiles zipfiles1.bat zipfiles2.bat zipfiles3.bat zipfiles4.bat zipfiles.bat zoom_amd64.deb zoomap.pdf zoom-mtg
Добавление глубины к вашим поискам
Хотя команда ls обычно перечисляет файлы в одном каталоге, вы можете выбрать вместо этого рекурсивный список файлов, используя параметр -R
, погружаясь на всю глубину каталогов:
$ ls -R zzzzz | grep -v "^$" zzzzz: zzzz zzzzz/zzzz: zzz zzzzz/zzzz/zzz: zz zzzzz/zzzz/zzz/zz: z zzzzz/zzzz/zzz/zz/z: sleeping
В качестве альтернативы, вы можете использовать команду find
с указанием ограниченной или неограниченной глубины. В этой команде мы указываем команде find
искать только в трёх уровнях каталогов:
$ find zzzzz -maxdepth 3 zzzzz zzzzz/zzzz zzzzz/zzzz/zzz zzzzz/zzzz/zzz/zz
Выбор между ls и find
Когда вам нужно перечислить файлы, соответствующие очень узкому списку требований, команда find
, вероятно, является более подходящим инструментом, чем ls
.
В отличие от ls
, команда find
ищет как можно глубже, если вы не ограничите её. У неё также есть много других параметров и команда -exec
, которая позволяет вам предпринять какое-то конкретное действие, когда вы найдёте искомые файлы.
Заключение
Команда ls имеет множество параметров для перечисления файлов. Изучите их. Возможно, вы найдёте несколько, которые вам понравятся.