Как работает ls в Linux

Команды 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 имеет множество параметров для перечисления файлов. Изучите их. Возможно, вы найдёте несколько, которые вам понравятся.

Написать комментарий