Как перечислить директории в Linux: полное руководство для начинающих и системных администраторов
Работа в Linux часто ощущается как навигация по огромной библиотеке. Вместо полок у вас есть директории (папки), а вместо книг — файлы. Независимо от того, являетесь ли вы опытным системным администратором, разработчиком или любопытным новичком, только начинающим работу, овладение основами навигации по файловой системе является обязательным. Один из самых критических фундаментальных навыков — знание того, как эффективно и точно выводить список директорий.
Это руководство проведет вас через все практические методы для вывода списка директорий в Linux, объясняет сильные стороны и ограничения каждого подхода и показывает вам точно, когда использовать какой инструмент — включая использование в скриптах и производственных серверных окружениях.
Почему листинг директорий важен
На персональном компьютере вы можете время от времени просматривать папку "Документы" или "Загрузки" через графический интерфейс. На 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не спускаться в поддиректории, а выводить сами записи директории.*/— шаблон glob оболочки, который соответствует всем директориям (и символическим ссылкам на директории) в текущей папке.
Список директорий с подробной информацией
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 — включая те, которые работают на выделенных серверах — вы также можете использовать:
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 |
Лучшие практики для производственных серверных сред
При работе на живом сервере — будь то учетная запись Shared Web Hosting или полностью управляемый VPS — помните об этих принципах:
- Всегда проверяйте скрытые директории при аудитах безопасности. Директории, такие как
.ssh/,.git/,.env/и.config/, часто содержат конфиденциальные учетные данные, ключи и файлы конфигурации. Используйтеfindс-mindepth 1, чтобы убедиться, что они отображаются в вашем выводе.
- Используйте
findво всех скриптах, никогдаls. Парсинг выводаls— это хорошо известный антипаттерн в shell-скриптинге. Командаfindдетерминирована, независима от локали и корректно обрабатывает граничные случаи.
- Комбинируйте
findс-execдля массовых операций. Например, для списка размеров директорий:
find . -mindepth 1 -maxdepth 1 -type d -exec du -sh {} ;- Используйте
tree -d -L 2при подключении. Когда вы впервые подключаетесь по SSH к незнакомому серверу, быстрыйtree -d -L 2из/var/www/или/home/дает вам мгновенный обзор структуры.
- Тщательно ограничивайте разрешения. Знание того, какие директории существуют — это только часть картины. Регулярно проверяйте разрешения директорий с помощью
ls -ld */, чтобы выявить неправильно настроенные директории с доступом для всех.
Практический пример: аудит каталога веб-сервера
Предположим, вы только что развернули новое приложение на Linux VPS. Вот практический рабочий процесс, объединяющий команды, описанные в этом руководстве:
# Navigate to the web root
cd /var/www/
# Quick visual check of top-level directories
ls -ld */
# Full audit including hidden directories
find . -mindepth 1 -maxdepth 1 -type d
# Visual map of the project structure (2 levels deep)
tree -d -L 2
# Check disk usage per directory
find . -mindepth 1 -maxdepth 1 -type d -exec du -sh {} ;Этот рабочий процесс занимает менее минуты и дает вам полную картину структуры каталогов вашего веб-сервера, разрешений и потребления дискового пространства — необходимые знания для любого администратора, управляющего VPS с cPanel или пользовательским стеком Linux.
Заключение
Список каталогов — один из самых фундаментальных навыков Linux, но выбранный вами метод имеет большее значение, чем думают большинство новичков. Вот краткое резюме ключевых выводов:
ls -d */идеален для быстрых интерактивных проверок — но он игнорирует скрытые каталоги и не подходит для написания скриптов.find . -mindepth 1 -maxdepth 1 -type d— золотой стандарт для надежного, портативного и безопасного для скриптов списка каталогов, включающего скрытые записи.tree -dбесценен для визуализации сложных структур и их представления другим.- Избегайте
ls -l | grep "^d"— это хрупко, зависит от локали и не имеет преимуществ передfind.
Независимо от того, управляете ли вы конфигурациями в среде Dedicated Servers, развертываете веб-приложения или просто впервые исследуете новую машину Linux, овладение этими командами сэкономит вам время, предотвратит дорогостоящие ошибки и даст вам уверенность в навигации по любой файловой системе с точностью.
Командная строка — это не барьер, это суперсила. И все начинается с того, чтобы точно знать, где вы находитесь и что вас окружает.
на всех хостинговых услугах