С чего начать Первые шаги трек · 15 ступеней
Linux Labs

ls — содержимое каталога

5 мин Ubuntu 24.04 · GNU coreutils 9.4

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

Шпаргалка

11 команд Версия для печати
  • ls содержимое текущего каталога
  • ls /etc содержимое другого каталога
  • ls -l подробно: права, владелец, размер, время
  • ls -la подробно и со скрытыми (.bashrc и т. п.)
  • ls -lh размеры в K, M, G
  • ls -lt новые сверху
  • ls -ltr новые внизу — удобно для логов
  • ls -lS крупные сверху
  • ls -ld /var/log сам каталог, а не его содержимое
  • ls -R project рекурсивно, с подкаталогами
  • ls *.conf только подходящие под шаблон

Обзор

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

Длинный формат ls -l — главный способ посмотреть права и владельца:

text
student@ubuntu:~$ ls -l /etc/hostname /etc/hosts /etc/ssh/ssh_config
-rw-r--r-- 1 root root    7 Oct 18 09:12 /etc/hostname
-rw-r--r-- 1 root root  221 Oct 18 09:12 /etc/hosts
-rw-r--r-- 1 root root 1649 Apr  5  2024 /etc/ssh/ssh_config
student@ubuntu:~$ ls -ld /etc/ssh
drwxr-xr-x 4 root root 4096 Oct 18 09:12 /etc/ssh

Колонки слева направо: тип и права (- файл, d каталог, l ссылка), число жёстких ссылок, владелец, группа, размер в байтах, время изменения, имя. У файлов старше полугода вместо часов стоит год.

Имена с точкой в начале (.bashrc, .ssh) — скрытые: без -a их не видно. -a добавляет ещё . (сам каталог) и .. (родитель), -A — всё, кроме них.

Ключи

14

Короткие ключи склеиваются: ls -l -a -h и ls -lah — одно и то же. Полный список — man ls.

Ключ Что делает Пример
-l Длинный формат — тип, права, ссылки, владелец, группа, размер, время, имя. ls -l /etc
-a Показать скрытые имена (с точкой в начале), включая . и .. ls -la
-h С -l печатать размеры в K, M, G вместо байтов. ls -lh
-t Сортировать по времени изменения, новые сверху. ls -lt
-A Как -a, но без . и .. ls -A
-r Обратить порядок сортировки. ls -ltr
-S Сортировать по размеру, крупные сверху. ls -lS
-d Показать сам каталог, а не его содержимое. ls -ld /var/log
-R Обойти подкаталоги рекурсивно. ls -R project
-F Пометить тип значком — / каталог, * исполняемый, @ ссылка. ls -F
-i Печатать номер inode каждого файла. ls -i
-n Как -l, но владелец и группа — числами UID и GID. ls -n /home
-1 По одному имени в строке. ls -1
--group-directories-first Каталоги перед файлами. ls -l --group-directories-first

Ничего не найдено. Попробуй запрос короче.

Рецепты

5

Найти последний изменённый файл

bash
ls -lt /var/log | head -5         # пять самых свежих
ls -ltr /var/log                   # самые свежие — внизу, у приглашения

Посмотреть права на каталог, а не на файлы в нём

bash
ls -ld ~/.ssh                      # drwx------ ... /home/student/.ssh
ls -ld /tmp                        # drwxrwxrwt — бит t: общий каталог

Без -d команда покажет содержимое каталога, а права самого каталога останутся за кадром.

Только каталоги или только файлы

bash
ls -d */                           # каталоги текущего каталога
ls -p | grep -v /                  # всё, кроме каталогов
ls -F                              # / каталог, * исполняемый, @ ссылка

Числовые UID и GID вместо имён

bash
ls -n /home                        # 1000 1000 вместо student student

Помогает, когда файл остался от удалённого пользователя: вместо имени там и так будет число.

Короткие псевдонимы Ubuntu

В ~/.bashrc Ubuntu уже есть alias ll='ls -alF', alias la='ls -A' и alias l='ls -CF'. Что стоит за именем, покажет type ll.

Неполадки

6

ls: cannot access 'x': No such file or directory

Такого пути нет относительно текущего каталога. Проверь pwd, регистр букв (Notes и notes — разные имена) и допиши имя клавишей Tab — оболочка подставит только существующий путь. Подробнее о путях — paths.

ls: cannot open directory: Permission denied

Чтобы прочитать список, нужно право r на каталог, чтобы войти — x. Посмотри права самого каталога: ls -ld /root. Системные каталоги читай через sudo ls.

Файла нет в списке, хотя он точно есть

Имя начинается с точки — добавь -a. Или файл лежит глубже: ls -R либо find (find . -name 'имя*').

У каталога размер 4096, а внутри гигабайты

ls -l показывает размер записи каталога, а не его содержимого. Объём каталога целиком считает du -sh каталог — см. disk-usage.

Имя напечатано в кавычках: 'my file'

Так ls показывает имена с пробелами и спецсимволами, чтобы их можно было скопировать в команду. В самом имени кавычек нет. В команде такое имя бери в кавычки или допиши Tab.

Вывод ls разбирают в скрипте, и он ломается на пробелах

Вывод ls предназначен человеку. В сценариях перебирай файлы шаблоном оболочки (for f in *.log) или find с -print0.

См. также

  • files-basics — обзор базовых команд с файлами: что за чем идёт.
  • cd — перейти в каталог, который показал ls.
  • paths — абсолютные и относительные пути, ~, . и ...
  • permissions — как читать колонку прав rwxr-xr-x.
  • stat — все времена и права одного файла подробно.
  • disk-usage — сколько места занимает каталог целиком.
  • find — поиск файлов по всему дереву.
Загрузка…