linux nav

ls

Список файлов и директорий в указанном каталоге

Описание

ls (от list) — одна из самых часто используемых команд Unix/Linux. Она выводит содержимое директорий: имена файлов, поддиректорий, символических ссылок и специальных файлов. Команда существует с первых версий Unix начала 1970-х годов и в GNU/Linux реализована в пакете coreutils.

По умолчанию ls скрывает «точечные» файлы (имена которых начинаются с .) — это принятое соглашение Unix для скрытых конфигурационных файлов. Вывод без флагов даёт простой список имён, отсортированных по алфавиту. С флагами можно получить подробную информацию: права доступа, владельца, размер, дату изменения и многое другое.

ls используется ежедневно — для ориентирования в файловой системе, проверки прав, поиска последних изменённых файлов, подтверждения результатов операций копирования/удаления. Знание ключевых флагов позволяет значительно ускорить работу в терминале.

Синтаксис

ls [ОПЦИИ]... [ФАЙЛ/ДИРЕКТОРИЯ]...

Компоненты команды:

# Примеры базового синтаксиса ls # текущая директория ls /etc # конкретный путь ls -l /var/log # подробный список /var/log ls ~/Documents ~/Desktop # несколько путей сразу ls *.py # glob-паттерн: все .py файлы

Флаги и опции

Флаг Описание
-l Подробный (long) формат: права, число ссылок, владелец, группа, размер, дата, имя
-a Показывать все файлы, включая скрытые (начинающиеся с .), а также . и ..
-A Как -a, но без . и .. (almost all)
-h Человекочитаемые размеры файлов (K, M, G) — используется вместе с -l
-R Рекурсивный вывод: показывать содержимое всех вложенных поддиректорий
-t Сортировка по времени последнего изменения (сначала новые)
-r Обратный порядок сортировки (reverse)
-S Сортировка по размеру файла (сначала большие)
-1 Выводить по одному файлу в строке (удобно для скриптов)
-d Показывать директории как объекты, не их содержимое
-F Добавлять символ к имени: / — директория, * — исполняемый, @ — символическая ссылка
-i Показывать inode-номер каждого файла
--color Цветной вывод (по типу файла). Значения: auto, always, never
-n Как -l, но вместо имён владельца/группы выводит числовые UID/GID

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

Подробный список с читаемыми размерами

Самая частая комбинация флагов — показывает всё о файлах в удобном виде.

ls -lh
# -rw-r--r-- 1 user group 4.2K Jun 10 14:22 report.txt
# drwxr-xr-x 3 user group 4.0K Jun  9 10:01 data/

Показать скрытые файлы

Полный список директории, включая конфиги вроде .bashrc, .gitignore.

ls -la
ls -lA  # без . и ..

# drwxr-xr-x  5 user group  160 Jun 10 .
# drwxr-xr-x 42 user group 1.3K Jun  8 ..
# -rw-r--r--  1 user group  220 Jun  8 .bash_logout
# -rw-r--r--  1 user group 3.5K Jun  8 .bashrc

Последние изменённые файлы

Быстро найти, что изменялось совсем недавно.

ls -lt        # по времени, новые вверху
ls -ltr       # по времени, старые вверху (удобно в логах)
ls -lt | head -10  # только 10 последних

Сортировка по размеру

Найти самые большие файлы в директории.

ls -lSh         # по размеру, с читаемыми единицами
ls -lShr        # по размеру, маленькие вверху
# для рекурсии лучше du:
du -sh * | sort -hr | head -10

Проверка директорий как объектов

Посмотреть права и метаданные самой директории, а не её содержимого.

ls -ld /etc
ls -ld ~/projects/
# drwxr-xr-x 2 user group 4096 Jun 10 /etc

Использование в скриптах

Перебрать файлы определённого типа или получить список без лишнего.

# Список файлов по одному (без лишних столбцов)
ls -1 *.log

# Проверить, есть ли файл (через exit code)
if ls /tmp/myfile.lock 2>/dev/null; then
  echo "Lock exists"
fi

Советы и предупреждения

Алиасы ls в интерактивной работе
Большинство дистрибутивов добавляют алиасы в ~/.bashrc: ll='ls -alF', la='ls -A', l='ls -CF'. Проверьте свои через alias | grep ls. Если нужных нет — добавьте в ~/.bashrc сами.
Расшифровка строки прав в -l выводе
Строка вида -rwxr-xr--: первый символ — тип (- файл, d директория, l ссылка); затем три тройки (rwx) для владельца, группы, остальных. r=чтение (4), w=запись (2), x=выполнение (1).
ls в скриптах: ловушка с пробелами в именах
Никогда не парсите вывод ls в скриптах для получения списка файлов — имена с пробелами и спецсимволами сломают логику. Используйте for f in *.txt, find или mapfile + find -print0.
Различие ls на macOS и Linux
На macOS ls — это BSD-версия, которая не поддерживает некоторые GNU-флаги (--color, --group-directories-first и др.). Для GNU-совместимости на macOS установите brew install coreutils и используйте gls.