ls
Список файлов и директорий в указанном каталоге
Описание
ls (от list) — одна из самых часто используемых команд Unix/Linux. Она выводит содержимое
директорий: имена файлов, поддиректорий, символических ссылок и специальных файлов. Команда существует с
первых версий Unix начала 1970-х годов и в GNU/Linux реализована в пакете coreutils.
По умолчанию ls скрывает «точечные» файлы (имена которых начинаются с .) — это
принятое соглашение Unix для скрытых конфигурационных файлов. Вывод без флагов даёт простой список имён,
отсортированных по алфавиту. С флагами можно получить подробную информацию: права доступа, владельца, размер,
дату изменения и многое другое.
ls используется ежедневно — для ориентирования в файловой системе, проверки прав, поиска
последних изменённых файлов, подтверждения результатов операций копирования/удаления. Знание ключевых
флагов позволяет значительно ускорить работу в терминале.
Синтаксис
Компоненты команды:
- ls — сама команда.
- [ОПЦИИ] — флаги, меняющие формат вывода или выборку файлов. Несколько коротких флагов можно объединять:
ls -la=ls -l -a. - [ФАЙЛ/ДИРЕКТОРИЯ] — путь к директории или файлу (можно несколько через пробел). Если не указан — выводится содержимое текущей директории.
Флаги и опции
| Флаг | Описание |
|---|---|
-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
Советы и предупреждения
Большинство дистрибутивов добавляют алиасы в
~/.bashrc: ll='ls -alF',
la='ls -A', l='ls -CF'. Проверьте свои через alias | grep ls.
Если нужных нет — добавьте в ~/.bashrc сами.
Строка вида
-rwxr-xr--: первый символ — тип (- файл, d директория,
l ссылка); затем три тройки (rwx) для владельца, группы, остальных.
r=чтение (4), w=запись (2), x=выполнение (1).
Никогда не парсите вывод
ls в скриптах для получения списка файлов — имена с пробелами и
спецсимволами сломают логику. Используйте for f in *.txt, find или
mapfile + find -print0.
На macOS
ls — это BSD-версия, которая не поддерживает некоторые GNU-флаги (--color,
--group-directories-first и др.). Для GNU-совместимости на macOS установите
brew install coreutils и используйте gls.