Команда ls: примеры использования и опции

By | 05/06/2013
 

terminalКоманда ls – вероятно наиболее используемая команда в любой UNIX-системе. Её предназначение – вывод информации о файлах и каталогах. Дополнительные опции команды позволяют получить более подробную информацию и сортировать её определённым образом.

Далее будут приведены примеры опций и примеры их использования.

-R Рекурсивно обойти встретившиеся подкаталоги.
-a Вывести список всех файлов (без этой опции не выводятся скрытые файлы, имена которых начинаются с точки).
-d Если аргумент является каталогом, то выводить только его имя, а не содержимое. Часто используется с флагом -l для получения сведений о состоянии каталога.
-C Вывод в несколько колонок с сортировкой по колонкам.
-x Вывод в несколько колонок с сортировкой по строкам.
-m Вывод в свободном формате, имена файлов разделяются запятыми.
-l Вывод в длинном формате: перед именами файлов выдается режим доступа, количество ссылок на файл, имена владельца и группы, размер в байтах и время последней модификации (см. ниже). Если файл является специальным, то в поле размера выводится старший и младший номера устройства.
-n То же, что и -l, но идентификаторы владельца и группы выводятся в виде чисел, а не в виде имен.
-o То же, что и -l, но идентификатор группы не выводится.
-g То же, что и -l, но идентификатор владельца не выводится.
-r Изменить порядок сортировки на обратный алфавитный или, при наличии флага -t, сначала выводить более старые файлы.
-t Имена файлов сортируются не по алфавиту, а по времени (сначала идут самые свежие файлы). По умолчанию используется время последнего изменения. См. также флаги -u и -c.
-u Вместо времени последнего изменения использовать время последнего доступа для сортировки (с флагом -t) или для вывода (с флагом -l).
-c Вместо времени последнего изменения использовать время последней модификации описателя файла (т.е. время создания файла, изменения режима доступа к нему и т.п.) для сортировки (с флагом -t) или для вывода (с флагом -l).
-p Если файл является каталогом, то выдавать после его имени символ /.
-F Если файл является каталогом, то выдавать после его имени символ /; если файл является выполняемым, то выдавать после его имени символ *.
-b Выдавать непечатные символы, входящие в имя файла, в восьмеричном виде (ddd).
-q Выдавать непечатные символы, входящие в имя файла, в виде символа ?.
-i Выдавать в первой колонке номера описателей файлов.
-s Выдавать размер файлов в блоках (включая косвенные блоки).
-f Рассматривать каждый аргумент как каталог и выводить его содержимое. Этот флаг отменяет флаги -l, -t, -s, -r и включает флаг -a. Сортировка имен файлов не производится; имена выдаются в таком порядке, в каком они перечислены в каталоге.

Теперь несколько примеров наиболее полезных опций.

Вывести список только каталогов:

# ls -d -1 /home/setevoy/*/
/home/setevoy/Desktop/
/home/setevoy/Downloads/
/home/setevoy/Dropbox/
/home/setevoy/Images/
/home/setevoy/Soft/
/home/setevoy/Temp/
/home/setevoy/VirtualBox VMs/

То же самое, но с использованием “длинного” (полного) вывода о каталогах:

# ls -dl /home/setevoy/*/
drwxr-xr-x  2 setevoy setevoy 4096 May  6 10:22 /home/setevoy/Desktop/
drwxr-xr-x  2 setevoy setevoy 4096 May  5 10:38 /home/setevoy/Downloads/
drwx—— 16 setevoy setevoy 4096 May  6 07:40 /home/setevoy/Dropbox/
drwxr-xr-x  2 setevoy setevoy 4096 May  5 12:00 /home/setevoy/Images/
drwxr-xr-x  2 setevoy setevoy 4096 May  5 18:29 /home/setevoy/Soft/
drwxrwxr-x  2 setevoy setevoy 4096 May  5 20:15 /home/setevoy/Temp/
drwxrwxr-x  4 setevoy setevoy 4096 May  5 19:09 /home/setevoy/VirtualBox VMs/

Ключ -l весьма полезен, так как позволяет проверять владельца и права на файлы/каталоги:

# ls -l
total 32
drwxr-xr-x 2 root root 4096 Aug 23  2012 bin
drwxr-xr-x 2 root root 4096 Aug 23  2012 etc
drwxr-xr-x 2 root root 4096 Aug 23  2012 games
drwxr-xr-x 2 root root 4096 Aug 23  2012 include
drwxr-xr-x 4 root root 4096 May  5 11:13 lib
lrwxrwxrwx 1 root root    9 May  5 10:22 man -> share/man
drwxr-xr-x 2 root root 4096 Aug 23  2012 sbin
drwxr-xr-x 7 root root 4096 Aug 23  2012 share
drwxr-xr-x 2 root root 4096 Aug 23  2012 src

Для вывода информации о скрытых файлах (начинаются с точки) используйте ключ -a:

# ls -la
ls: cannot access .gvfs: Permission denied
total 524
drwxr-xr-x 37 setevoy setevoy   4096 May  6 21:20 .
drwxr-xr-x  3 root    root      4096 May  5 10:25 ..
drwx——  3 setevoy setevoy   4096 May  5 10:39 .adobe
-rw——-  1 root    root       517 May  5 11:53 .bash_history
-rw-r–r–  1 setevoy setevoy    220 May  5 10:25 .bash_logout
-rw-r–r–  1 setevoy setevoy    133 May  5 11:52 .bashrc
drwx—— 17 setevoy setevoy   4096 May  5 18:29 .cache
drwxrwxr-x  3 setevoy setevoy   4096 May  5 10:54 .compiz-1
drwx—— 20 setevoy setevoy   4096 May  6 10:38 .config
drwx——  3 setevoy setevoy   4096 May  5 10:38 .dbus

Про ошибку с .gvfs можно почитать в статье ls: cannot access .gvfs: Permission denied.

Кратко остановимся на обозначениях прав доступа и обозначениях файлов/каталогов. Первый символ:

d – файл является каталогом;
b – файл является специальным блочным файлом;
c – файл является специальным символьным файлом;
p – файл является именованным каналом;
– обычный файл.

Далее следуют три группы символов, обозначающих права доступа – r (read), w (write), x (execute) – чтение, запись в файл/каталог и выполнение соответственно. Тема прав доступа в UNIX весьма обширна, поэтому сейчас не будем вдаваться в подробности.

Открыть для редактирования последний редактировавшийся файл:

# nano file1.txt
# nano file2.txt
# nano `ls -t | head -1`

Обычный вывод ls без ключей выводит все файлы/каталоги одной строкой. Что бы вывести их в колонку – выполняем:

# ls -1
Desktop
Downloads
Dropbox
file1.txt
file2.txt
Images
Soft
Temp
VirtualBox VMs

Ключ -h используется для вывода информации о размере в “человекоудобном” виде, т.е. в Kb, Mb, Gb:

# ls -lh
total 36K
drwxr-xr-x  2 setevoy setevoy 4.0K May  6 10:22 Desktop
drwxr-xr-x  2 setevoy setevoy 4.0K May  5 10:38 Downloads
drwx—— 16 setevoy setevoy 4.0K May  6 07:40 Dropbox
-rw-r–r–  1 root    root       2 May  6 21:06 file1.txt
-rw-r–r–  1 root    root       2 May  6 21:06 file2.txt
drwxr-xr-x  2 setevoy setevoy 4.0K May  5 12:00 Images
drwxr-xr-x  2 setevoy setevoy 4.0K May  5 18:29 Soft
drwxrwxr-x  2 setevoy setevoy 4.0K May  5 20:15 Temp
drwxrwxr-x  4 setevoy setevoy 4.0K May  5 19:09 VirtualBox VMs

Отсортировать файлы/каталоги по их размеру, начиная с самого большого:

# ls -lS /var/log/
total 4152
-rw-r–r– 1 root              root 1823273 May  6 19:46 dpkg.log
-rw-r—– 1 syslog            adm   825505 May  6 08:05 syslog.1
-rw-r—– 1 syslog            adm   589203 May  6 19:25 kern.log
-rw-r–r– 1 root              root   47105 Aug 23  2012 bootstrap.log
-rw-r–r– 1 root              root   37440 May  6 19:46 aptitude
-rw-r–r– 1 root              root   20584 May  6 07:39 pm-powersave.log
-rw-r—– 1 root              adm    14329 May  5 11:38 dmesg.1.gz
-rw-r–r– 1 root              root    6167 May  6 07:39 kdm.log
drwxr-xr-x 2 root              root    4096 May  5 10:25 apt
-rw-r—– 1 root              adm       31 Aug 23  2012 boot
-rw-r—– 1 syslog            adm        0 May  5 10:38 ufw.log

Осотрировать файлы/каталоги по дате последней модификации, новые – в конце списка:

# ls -rtl /var/log/
total 4152
drwx—— 2 speech-dispatcher root    4096 Feb  6  2012 speech-dispatcher
drwxr-xr-x 2 root              root    4096 Mar 12  2012 unattended-upgrades

drwxr-xr-x 2 root              root    4096 Aug 10  2012 dist-upgrade

-rw-r–r– 1 root              root   47105 Aug 23  2012 bootstrap.log

-rw-r–r– 1 root              root    2990 May  5 19:20 fontconfig.log

-rw-r—– 1 syslog            adm    60874 May  6 21:14 syslog

Что бы вывести новые в начале списка – используйте комбинацию опций без ключа -r:

#  ls -tl /var/log/

То же самое, но сортировать по дате последнего доступа к файлу, а не дате его модификации, используйте ключ -u:

#  ls -tlu /var/log/

Вывести список файлов/каталогов, разделённый на 5 колонок, разделённых на всю ширину окна:

# ls /usr/local | pr -T5 -W$COLUMNS
bin                                            games                                          lib                                            sbin                                           src
etc                                            include                                        man                                            share

Добавлять символ обозначения принадлежности файла/каталога – каталог (/), исполняемый файл (*), FIFO (|), символьная ссылка (@), сокеты семейства AF_UNIX (=):

# ls -F -1
Desktop/
Downloads/
Dropbox/
file1
file1.txt
file2
file2.txt
file3
file4.txt@
Images/
Soft/
Temp/
VirtualBox VMs/

Впрочем, ту же информацию выводит и ls -l – первый символ d для каталогов (directory) и ->; для ссылок:

# ls -l
total 36
drwxr-xr-x  2 setevoy setevoy 4096 May  6 10:22 Desktop

lrwxrwxrwx  1 root    root       9 May  6 21:20 file4.txt -> file1.txt

Выводить список через запятую:

# ls -m
Desktop, Downloads, Dropbox, file1, file1.txt, file2, file2.txt, file3, file4.txt, Images, Soft, Temp, VirtualBox VMs

Вывести список рекурсивно, включая подкаталоги и их содержимое:

# ls -R
.:
Desktop
Downloads
Dropbox
Images
Soft
Temp
VirtualBox VMs

./Desktop:
PDF-Viewer.desktop
PDF-Viewer.lnk

./Downloads:

./Dropbox:
172210-1920×1080.jpg
271027-1366×768.jpg

Остортировать файлы/каталоги в обратном алфавитном порядке:

# ls -r
VirtualBox VMs  Temp  Soft  Images  file4.txt  file3  file2.txt  file2  file1.txt  file1  Dropbox  Downloads  Desktop

Вывести информацию о номерах inode файлов и каталогов:

# ls -i -1
2368762 Desktop
1969746 Downloads
1987155 Dropbox
1987223 file1
1969890 file1.txt
1987865 file2
1969805 file2.txt
1987866 file3
1987863 file4.txt
1969751 Images
2141585 Soft
2368300 Temp
2141811 VirtualBox VMs

Вывести информацию о пользователе/группе в виде UID и GID, вместо символьных имён:

# ls -n
total 36
drwxr-xr-x  2 1000 1000 4096 May  6 10:22 Desktop
drwxr-xr-x  2 1000 1000 4096 May  5 10:38 Downloads
drwx—— 16 1000 1000 4096 May  6 07:40 Dropbox
-rw-r–r–  1    0    0    0 May  6 21:10 file1
-rw-r–r–  1    0    0    2 May  6 21:06 file1.txt
-rw-r–r–  1    0    0    0 May  6 21:10 file2
-rw-r–r–  1    0    0    2 May  6 21:06 file2.txt
-rw-r–r–  1    0    0    0 May  6 21:10 file3
lrwxrwxrwx  1    0    0    9 May  6 21:20 file4.txt -> file1.txt
drwxr-xr-x  2 1000 1000 4096 May  5 12:00 Images
drwxr-xr-x  2 1000 1000 4096 May  5 18:29 Soft
drwxrwxr-x  2 1000 1000 4096 May  5 20:15 Temp
drwxrwxr-x  4 1000 1000 4096 May  5 19:09 VirtualBox VMs