Как перечислить директории в Linux: полное руководство для начинающих и системных администраторов
Работа в Linux часто напоминает навигацию по огромной библиотеке. Вместо полок у вас есть директории (папки), а вместо книг — файлы. Независимо от того, являетесь ли вы опытным системным администратором, разработчиком или любопытным новичком, только начинающим работу, овладение основами навигации по файловой системе является обязательным. Один из наиболее критических фундаментальных навыков — знание того, как эффективно и точно выводить список директорий.
Это руководство проведет вас через все практические методы вывода списка директорий в Linux, объяснит сильные и слабые стороны каждого подхода и покажет вам точно, когда использовать какой инструмент — включая использование в скриптах и production-окружениях серверов.
Почему вывод списка директорий имеет значение
На персональном компьютере вы можете время от времени просматривать папку “Документы” или “Загрузки” через графический интерфейс. На Linux-сервере же директории находятся в центре почти каждой административной задачи, которую вы будете выполнять:
- Системное администрирование: Быстро проверьте, что находится в
/etc/,/var/log/или/usr/local/bin/. - Веб-хостинг: Найдите и управляйте папками проектов в
/var/www/или/home/. - Разработка программного обеспечения: Определите директории контроля версий и окружения, такие как
.git/или.venv/. - Аудит безопасности: Подтвердите точно, что установлено, настроено и запущено в системе.
- Автоматизация и скриптинг: Надежно перечислите директории для использования в shell-скриптах и cron-заданиях.
Если вы не можете эффективно выводить список директорий, вы всегда будете чувствовать себя дезориентированным — особенно в удаленной среде VPS Hosting, где нет графического файлового менеджера, на который можно было бы положиться.
Метод 1: Команда ls — быстро и просто
Команда ls — это инструмент по умолчанию для отображения содержимого директории. Это первая команда, которую изучает большинство пользователей Linux, и не без причины: она быстрая, удобочитаемая и доступна в каждой Unix-подобной системе.
Базовое использование
lsЭто выводит список всех скрытых файлов и директорий в текущей рабочей директории.
Вывести список только директорий
ls -d */Вот что делает каждая часть:
-d— Указываетlsне спускаться в поддиректории, а выводить сами записи директории.*/— Шаблон глоба оболочки, который соответствует всем директориям (и символическим ссылкам на директории) в текущей папке.
Вывести список директорий с подробной информацией
ls -ld */Добавление -l дает вам формат длинного списка, который включает:
- Разрешения файлов
- Количество жестких ссылок
- Владельца и группу
- Размер файла
- Временную метку последнего изменения
Пример вывода:
drwxr-xr-x 3 root root 4096 Jun 10 14:22 backups/
drwxr-xr-x 5 www-data www-data 4096 Jun 12 09:15 html/
drwxr-xr-x 2 deploy deploy 4096 Jun 11 18:03 logs/Ограничение: скрытые директории исключены
Глоб */ не соответствует скрытым директориям — тем, имена которых начинаются с точки (.), таким как .git/, .ssh/ или .config/. Это важное предостережение, особенно в средах, чувствительных к безопасности.
Когда использовать ls -d */: Быстрые интерактивные проверки, когда вам нужны только видимые директории и вам не требуется надежность скриптинга.
Метод 2: Команда find — мощная и надежная
Команда find — это выбор профессионала для перечисления директорий. В отличие от ls, она предназначена для программного использования, поддерживает рекурсивный обход, включает скрытые директории по умолчанию и ведет себя последовательно на разных дистрибутивах Linux и локалях.
Вывести список всех директорий рекурсивно
find . -type d.— Начните с текущей директории.-type d— Соответствует только записям директорий (не файлам, символическим ссылкам или другим типам).
Это рекурсивно выведет список каждой директории на каждом уровне глубины под вашим текущим местоположением.
Вывести список только директорий верхнего уровня (портативный метод)
find . -mindepth 1 -maxdepth 1 -type d-mindepth 1— Исключает саму текущую директорию (.) из результатов.-maxdepth 1— Предотвращает рекурсию за пределы непосредственных потомков.
Это наиболее портативный и надежный способ вывести список только прямых поддиректорий текущей папки, и он работает одинаково на системах GNU/Linux, macOS и BSD.
Альтернатива для систем GNU/Linux
На большинстве современных дистрибутивов Linux — включая те, которые работают на Dedicated Servers — вы также можете использовать:
find . -maxdepth 1 -type dОбратите внимание, что это включит . в вывод. Используйте -mindepth 1 вместе с -maxdepth 1 для его чистого исключения.
Включить скрытые директории
Поскольку find не полагается на shell-глобы, она автоматически включает скрытые директории:
find . -mindepth 1 -maxdepth 1 -type dЭто покажет .git/, .ssh/, .config/ и любые другие директории с префиксом точки вместе с видимыми.
Использовать find в скриптах
find — это правильный инструмент для shell-скриптинга, потому что:
- Она безопасно обрабатывает имена файлов с пробелами и специальными символами.
- На нее не влияют параметры локали или конфигурации цветов терминала.
- Она производит последовательный, анализируемый вывод.
Пример: цикл по всем директориям верхнего уровня
find . -mindepth 1 -maxdepth 1 -type d | while read -r dir; do
echo "Processing: $dir"
doneКогда использовать find: Всякий раз, когда вам нужны включенные скрытые директории, рекурсивные результаты или надежный вывод для скриптинга и автоматизации.
Метод 3: Команда tree — визуальные карты директорий
Команда tree отображает визуальную иерархическую карту структуры вашей директории. Она не установлена по умолчанию на всех дистрибутивах, но чрезвычайно полезна для документации, адаптации и понимания сложных макетов проектов.
Установить tree
Debian/Ubuntu:
sudo apt install treeCentOS/RHEL/AlmaLinux:
sudo yum install treeВывести список только директорий (без файлов)
tree -dОграничить глубину, чтобы избежать перегруженного вывода
tree -d -L 2-d— Показать только директории.-L 2— Ограничить отображение 2 уровнями глубины.
Пример вывода:
.
├── backups
│ └── daily
├── html
│ ├── assets
│ └── uploads
└── logsВключить скрытые директории
tree -d -aКогда использовать tree: Визуализация структур проектов, написание документации или изучение незнакомого макета сервера в первый раз.
Метод 4: Почему вам следует избегать ls -l | grep "^d"
Вы иногда встретите этот паттерн, предлагаемый в Интернете:
ls -l | grep "^d"Идея состоит в том, чтобы отфильтровать вывод длинного списка ls для отображения только строк, начинающихся с d — что указывает на директорию. Хотя это выглядит умно, это принципиально хрупко и должно быть избегнуто в любом серьезном контексте:
| Проблема | Объяснение |
|---|---|
| Чувствительность к локали | Некоторые локали или конфигурации терминала изменяют формат вывода ls -l, нарушая паттерн grep. |
| Коды цветов | Если ls выводит коды экранирования ANSI для цветов, паттерн ^d может не совпадать. |
| Скрытые директории | Не показаны, как и с ls -d */. |
| Символические ссылки | Символические ссылки, указывающие на директории, показываются как l, а не d, поэтому они молча исключаются. |
| Ненадежность скриптинга | Анализ вывода ls в скриптах явно не рекомендуется в лучших практиках shell-скриптинга. |
Используйте find вместо этого. Она специально разработана для этой задачи и избегает всех вышеперечисленных проблем.
Краткая справка: выбор правильного метода
| Цель | Лучшая команда |
|---|---|
| Быстрая интерактивная проверка (только видимые директории) | ls -d */ |
| Подробный список с разрешениями | ls -ld */ |
| Директории верхнего уровня, включая скрытые | find . -mindepth 1 -maxdepth 1 -type d |
| Все директории рекурсивно | find . -type d |
| Визуальная структура дерева | tree -d |
| Использование в shell-скрипте | find . -mindepth 1 -maxdepth 1 -type d |
Лучшие практики для production-окружений серверов
При работе на live-сервере — будь то учетная запись Shared Web Hosting или полностью управляемый VPS — помните об этих принципах:
- Всегда проверяйте скрытые директории при аудите безопасности. Директории, такие как
.ssh/,.git/,.env/и.config/, часто содержат чувствительные учет
