ls — первая команда которую набирают в новом терминале. И одна из тех, которые знают поверхностно: ls и ls -la, и на этом всё. Между тем у неё больше двадцати флагов, несколько режимов сортировки и возможность показывать информацию в форматах которые удобно парсить скриптами. Разбираем по-настоящему.
Базовый вывод
Содержимое текущей директории:
ls
Содержимое конкретной директории:
ls /etc/nginx
Несколько директорий сразу:
ls /etc /var /tmp
По маске — только файлы с расширением .conf:
ls /etc/nginx/*.conf
Подробный вывод: флаг -l
Самый используемый режим — длинный формат:
ls -l
total 0
drwxr-xr-x 2 user user 6 Feb 28 14:25 dir1
-rw-r--r-- 1 user user 0 Feb 28 14:25 file1.txt
-rw-r--r-- 1 user user 12 Feb 28 14:25 file2.txt
Расшифровка каждого поля слева направо:
drwxr-xr-x— тип и права: первый символ тип (-файл,dдиректория,lсимлинк), остальные 9 — права для владельца, группы и остальных2— количество жёстких ссылокuser user— владелец и группа12— размер в байтахFeb 28 14:25— дата и время последнего измененияfile2.txt— имя
Скрытые файлы: флаг -a
Файлы и директории начинающиеся с точки Linux считает скрытыми. Обычный ls их не показывает:
ls -a
В выводе появятся .bashrc, .ssh, .config и другие. Всегда есть две записи: . (текущая директория) и .. (родительская).
Чтобы не показывать . и .., но видеть остальные скрытые:
ls -A
Читаемые размеры: флаг -h
Размер файла в байтах неудобно читать когда их миллионы. Флаг -h (human-readable) переводит в KB, MB, GB:
ls -lh
-rw-r--r-- 1 root root 2.8K Feb 01 nginx.conf
-rw-r--r-- 1 root root 1.4M Mar 05 access.log
Без -h второй файл показывался бы как 1468416 — не очень информативно.
Комбинации флагов
Самая полезная комбинация — все файлы включая скрытые, длинный формат, читаемые размеры:
ls -lah
Показать только директории:
ls -ld /etc/nginx/
-d показывает саму директорию как объект, а не её содержимое. Удобно чтобы быстро проверить права на папку.
Сортировка
По умолчанию ls сортирует по алфавиту. Есть альтернативы.
По времени изменения (свежие первыми):
ls -lt
По времени изменения (старые первыми):
ls -ltr
-r инвертирует любую сортировку — удобно с -t чтобы видеть самые старые файлы, или с -S чтобы найти самые маленькие.
По размеру (большие первыми):
ls -lS
По размеру (маленькие первыми):
ls -lSr
Рекурсивный вывод: флаг -R
Показать всё содержимое директории и всех вложенных поддиректорий:
ls -R /etc/nginx
На глубоких деревьях вывод становится огромным. Для навигации по дереву удобнее tree:
tree /etc/nginx
Если tree не установлен:
sudo apt-get install tree
Показать inode: флаг -i
Inode — уникальный числовой идентификатор файла в файловой системе. Полезен при работе с жёсткими ссылками и при диагностике:
ls -li
786435 -rw-r--r-- 1 root root 2893 Feb 01 nginx.conf
786436 -rw-r--r-- 1 root root 512 Feb 01 mime.types
Первая колонка — номер inode.
Сортировка по расширению: флаг -X
Сгруппировать файлы по расширению — удобно в директориях со смешанным содержимым:
ls -lX /var/www/html
Вывод без цвета и форматирования
На некоторых серверах ls настроен с алиасом ls --color=auto. При парсинге вывода в скриптах цветовые escape-последовательности ломают обработку. Отключить:
ls --color=never
Или явно вызвать без алиасов:
/bin/ls -l /path/
Показать только имена файлов: флаг -1
Один файл на строку без лишних колонок — удобно для скриптов и пайпов:
ls -1 /etc/nginx/
conf.d
mime.types
nginx.conf
sites-available
sites-enabled
Пайп в другую команду:
ls -1 /var/log/nginx/ | grep "access"
Шпаргалка
| Задача | Команда |
|---|---|
| Содержимое директории | ls /path/ |
| Подробный вывод | ls -l |
| Все файлы включая скрытые | ls -a |
| Скрытые без . и .. | ls -A |
| Читаемые размеры | ls -lh |
| Всё сразу | ls -lah |
| Права самой директории | ls -ld /path/ |
| По времени (свежие первые) | ls -lt |
| По времени (старые первые) | ls -ltr |
| По размеру (большие первые) | ls -lS |
| Рекурсивно | ls -R |
| С номером inode | ls -li |
| По расширению | ls -lX |
| Один файл на строку | ls -1 |