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

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

ls — это команда Linux и других Unix-подобных систем, которая выводит в терминал список файлов и каталогов. Без аргументов она показывает содержимое текущего каталога, а с указанным путем — содержимое заданной папки. Имя расшифровывается как list (список).

Ниже разберу, что показывает ls, как читать вывод в подробном формате ls -l, какие флаги нужны чаще всего (-l, -a, -h, -t, -S, -R и другие) и как они комбинируются. Все примеры команд можно скопировать и запустить в терминале.

Что делает ls и как ее запустить

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

mkdir demo && cd demo
touch report.txt notes.md data.csv
ls

Вывод (имена отсортированы по алфавиту):

data.csv
notes.md
report.txt

По умолчанию ls показывает только обычные файлы и каталоги и не выводит служебные детали — права, размер, дату. Скрытые файлы (те, чье имя начинается с точки) она тоже не показывает без специального флага.

Можно передать путь — тогда ls выведет содержимое именно этого каталога, не переходя в него:

ls /etc

Если вместо каталога указать конкретный файл, команда просто покажет его имя (а с флагом -l — и подробности о нем).

Как читать вывод ls -l

Флаг -l (long, подробный формат) — главный флаг ls. Он выводит по одной строке на файл с правами доступа, владельцем, размером и датой изменения:

ls -l

Строка для файла выглядит примерно так (владелец, дата и размер зависят от системы):

-rw-r--r-- 1 anna developers 2048 Sep 16 12:30 report.txt

Разберу поля слева направо:

  • -rw-r--r-- — тип и права доступа (10 символов, о них ниже);
  • 1 — число жестких ссылок на файл;
  • anna — владелец файла;
  • developers — группа-владелец;
  • 2048 — размер в байтах;
  • Sep 16 12:30 — дата и время последнего изменения содержимого;
  • report.txt — имя.

Первые 10 символов — это тип файла и права доступа. Первый символ задает тип, остальные девять делятся на три группы по три:

  • символ 1 — тип: - обычный файл, d каталог, l символическая ссылка, c или b — устройства, p — именованный канал (FIFO), s — сокет;
  • символы 2-4 — права владельца (rwx: чтение, запись, выполнение);
  • символы 5-7 — права группы;
  • символы 8-10 — права всех остальных.

То есть -rw-r--r-- читается так: обычный файл; владелец может читать и писать (rw-), группа только читать (r--), остальные тоже только читать (r--). Прочерк на месте буквы означает, что права нет.

Важная деталь: время в выводе -l — это время последнего изменения содержимого файла (mtime), а не время создания. У каталога размер в байтах относится к самой записи каталога, а не к суммарному объему вложенных файлов.

Основные флаги ls

Флаги можно комбинировать: например, ls -l -a и ls -la — одно и то же. Ниже сведены те, что нужны чаще всего.

Флаг Что делает
-l Подробный формат: права, владелец, размер, дата
-a, --all Показать все, включая скрытые файлы и записи . и ..
-A, --almost-all Как -a, но без . и ..
-h, --human-readable Размеры в удобных единицах (K, M, G); работает вместе с -l
-t Сортировать по времени изменения, новые сверху
-S Сортировать по размеру, крупные сверху
-r, --reverse Обратный порядок сортировки
-R, --recursive Рекурсивно обойти все вложенные каталоги
-F, --classify Добавить к именам метки типа: / каталог, * исполняемый, @ ссылка
-i, --inode Показать номер inode (индексного дескриптора)
-d, --directory Показать сам каталог, а не его содержимое
-1 По одному имени в строке
--color=auto Подсветка имен цветом (auto, always или never)

Длинные варианты вроде --all и --human-readable доступны в GNU coreutils (стандартный ls в Linux). Короткие однобуквенные флаги (-a, -l, -h) работают и в Linux, и в macOS.

Примеры использования ls

Скрытые файлы: -a и -A

Файлы, чье имя начинается с точки (например, .config), по умолчанию не видны. Флаг -a показывает их вместе с записями . (текущий каталог) и .. (родительский). Флаг -A делает то же, но без этих двух записей:

mkdir demo && cd demo
touch visible.txt .config
ls
echo "--- ls -a ---"
ls -a
echo "--- ls -A ---"
ls -A

Вывод:

visible.txt
--- ls -a ---
.
..
.config
visible.txt
--- ls -A ---
.config
visible.txt

Человекочитаемые размеры: -lh

Само по себе -l показывает размер в байтах, что неудобно для больших файлов. Флаг -h вместе с -l переводит размеры в килобайты, мегабайты и гигабайты:

ls -lh /var/log

Вместо 10485760 в колонке размера появится 10M. Флаг -h работает только вместе с -l (или другими форматами, где виден размер), сам по себе он на вывод не влияет.

Метки типов: -F

Флаг -F дописывает к именам символ-подсказку: / для каталога, * для исполняемого файла, @ для символической ссылки. По списку сразу видно, где папка, а где программа:

mkdir demo && cd demo
mkdir logs
touch app.py run.sh
chmod +x run.sh
ls -F

Вывод:

app.py
logs/
run.sh*

Здесь logs/ — каталог, run.sh* — исполняемый файл, а app.py — обычный файл без метки.

Рекурсивный обход: -R

Флаг -R выводит содержимое каталога и всех вложенных папок:

mkdir -p project/src && cd project
touch main.py src/utils.py
ls -R

Вывод в Linux (GNU ls) выглядит так — каждый каталог со своим заголовком:

.:
main.py
src

./src:
utils.py

На больших деревьях вывод бывает объемным, поэтому -R обычно комбинируют с фильтрами или направляют в постраничный просмотр (ls -R | less). В macOS (BSD ls) заголовок верхнего уровня .: не печатается, а подкаталоги подписываются так же — формат зависит от реализации ls.

Сортировка по времени и размеру: -t, -S, -r

По умолчанию ls сортирует по имени. Флаг -t сортирует по времени изменения (новые сверху), -S — по размеру (крупные сверху). Флаг -r разворачивает любой порядок.

Частая комбинация — ls -ltr: подробный список, отсортированный по времени в обратном порядке. Самые свежие файлы оказываются внизу, у приглашения командной строки, где их удобно смотреть:

ls -ltr

А чтобы найти самые тяжелые файлы в каталоге, берут ls -lhS — подробный список с человекочитаемыми размерами, крупные сверху.

Номер inode: -i

Каждый файл в файловой системе имеет уникальный номер — inode (индексный дескриптор). Флаг -i выводит его перед именем:

ls -i

Перед каждым именем появится число, например 1835 report.txt. По номеру inode можно, в частности, отличать жесткие ссылки: у двух имен с одинаковым inode — один и тот же файл на диске.

Один каталог без содержимого: -d

Обычно ls somedir показывает содержимое каталога. Если нужны сведения о самом каталоге (например, его права), добавляют -d:

ls -ld /tmp

Без -d вывелся бы список файлов внутри /tmp, а с -d — одна строка про сам каталог /tmp.

Полезные комбинации на каждый день

Несколько сочетаний, которые стоит запомнить:

  • ls -la — подробный список со скрытыми файлами; самая частая команда при работе с конфигами и домашним каталогом;
  • ls -lh — подробный список с удобными размерами;
  • ls -ltr — по времени, свежие внизу; удобно смотреть, что менялось последним;
  • ls -lhS — крупные файлы сверху; помогает искать, что занимает место;
  • ls -1 — по одному имени в строке; удобно, когда вывод идет в другую команду (ls -1 | wc -l посчитает число файлов).

Где применяется ls на практике

ls — одна из первых команд, которую осваивают при работе в терминале Linux: с нее начинается навигация по файловой системе, проверка прав доступа перед изменением файлов, поиск логов и разбор, что занимает место на диске. Вместе с cd, cp, mv и rm она составляет базовый набор для повседневной работы администратора и разработчика.

Освойте тему на практике

Разобрать команды терминала, права доступа и работу с файловой системой Linux по шагам помогает курс Linux для начинающих в Otus. Посмотреть формат занятий и уровень, не оплачивая курс, можно на бесплатных вебинарах — там разбирают конкретные задачи и отвечают на вопросы.

Смежные темы: Что такое файл и папка: основные действия, Установка Linux с флешки, Скриптовые языки для админов и разработчиков.

FAQ

Чем отличаются флаги -a и -A?
Оба показывают скрытые файлы (те, что начинаются с точки). Разница в служебных записях: -a выводит еще . (текущий каталог) и .. (родительский), а -A их пропускает и показывает только реальные файлы.

Почему ls в скрипте выводит файлы в один столбец, а в терминале — в несколько?
Когда вывод идет не на экран, а в файл или другую команду, ls по умолчанию печатает по одному имени в строке — так результат проще обрабатывать. В интерактивном терминале включается многоколоночный вид под ширину окна.

Как посмотреть только каталоги в текущей папке?
Прямого флага «только каталоги» у ls нет. Обычно используют шаблон с завершающим слешем — ls -d */: он оставит в выводе только вложенные каталоги.

Выводы

  • ls выводит список файлов и каталогов; без аргументов — для текущего каталога, с путем — для указанного.
  • Флаг -l дает подробный формат: первые 10 символов — тип файла и права (три группы rwx для владельца, группы и остальных), дальше число ссылок, владелец, группа, размер, дата и имя.
  • Скрытые файлы показывают флаги -a (с записями . и ..) и -A (без них); удобные размеры — -h вместе с -l.
  • Сортировку задают -t (по времени), -S (по размеру) и -r (обратный порядок); рекурсивный обход — -R.
  • Флаги свободно комбинируются: ls -la, ls -lh, ls -ltr, ls -lhS покрывают большинство повседневных задач.
OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)