Как да изброите директориите в Linux: Пълно ръководство за начинаещи и системни администратори
Работата в Linux често се чувства като навигация в огромна библиотека. Вместо рафтове, имате директории (папки), а вместо книги, имате файлове. Независимо дали сте опитен системен администратор, разработчик или любопитен начинаещ, който тепърва започва, овладяването на основите на навигацията в файловата система е задължително. Един от най-критичните основни умения е знанието как да изброите директориите ефективно и точно.
Това ръководство ви провежда през всеки практичен метод за изброяване на директориите в Linux, обяснява силните и слабите страни на всеки подход и показва точно кога да използвате кой инструмент — включително при скриптване и в производствени сървърни среди.
Защо изброяването на директориите е важно
На персоналния компютър може да разглеждате папката “Documents” или “Downloads” чрез графичен интерфейс. На Linux сървър обаче директориите са в сърцето на почти всяка административна задача, която ще извършите:
- Системна администрация: Бързо одитирайте какво се намира в /etc, /var или /home.
- Уеб хостинг: Намерете и управлявайте папките на проекти под /var/www или /home/user/public_html.
- Разработка на софтуер: Идентифицирайте директориите за контрол на версиите и среди като .git или .venv.
- Одит на сигурност: Потвърдете точно какво е инсталирано, конфигурирано и работи на системата.
- Автоматизация и скриптване: Надеждно изброявайте директориите за използване в shell скриптове и cron задачи.
Ако не можете да изброите директориите ефективно, винаги ще се чувствате дезориентирани — особено в отдалечена VPS хостинг среда, където няма графичен файлов мениджър, на който да разчитате.
Метод 1: Командата ls — Бързо и просто
Командата ls е инструментът по подразбиране за показване на съдържанието на директория. Това е първата команда, която научават повечето потребители на Linux, и по добра причина: тя е бърза, четима за хората и налична на всяка Unix-подобна система.
Основна употреба
ls
Това изброява всички скрити и видими файлове и директории в текущата работна директория.
Изброяване само на директориите
ls -d */
Ето какво прави всяка част:
- -d — Казва на ls да не слиза в поддиректориите, а да изброи самите записи на директориите.
- */ — Шаблон на shell glob, който съответства на всички директории (и символни връзки към директории) в текущата папка.
Изброяване на директориите с подробна информация
ls -ld */
Добавянето на -l дава дълъг формат на изброяване, който включва:
- Разрешения на файлове
- Брой твърди връзки
- Собственик и група
- Размер на файла
- Последна времева печат на модификация
Пример на изход:
drwxr-xr-x 2 user group 4096 Jan 15 10:30 Documents
drwxr-xr-x 3 user group 4096 Jan 14 09:15 Downloads
drwxr-xr-x 2 user group 4096 Jan 10 14:45 Pictures
Ограничение: Скритите директории са изключени
Глобът */ не съответства на скритите директории — тези, чиито имена започват с точка (.), като .config, .ssh или .bashrc. Това е важно предупреждение, особено в среди, чувствителни към сигурност.
Кога да използвате ls: Бързи интерактивни проверки, където имате нужда само от видими директории и не изискате надеждност при скриптване.
Метод 2: Командата find — Мощна и надеждна
Командата find е избор на професионалци за изброяване на директориите. За разлика от ls, тя е предназначена за програмна употреба, поддържа рекурсивно преминаване, включва скритите директории по подразбиране и се държи последователно в различните дистрибуции на Linux и локали.
Изброяване на всички директории рекурсивно
find . -type d
- . — Начало от текущата директория.
- -type d — Съответства само на записи на директориите (не на файлове, символни връзки или други типове).
Това ще изброи рекурсивно всяка директория на всяко ниво на дълбочина под вашето текущо местоположение.
Изброяване само на директориите на най-горното ниво (преносим метод)
find . -maxdepth 1 -type d ! -name .
- ! -name . — Изключва самата текущата директория (.) от резултатите.
- -maxdepth 1 — Предотвратява рекурсията отвъд непосредствените деца.
Това е най-преносимият и надежден начин да изброите само преките поддиректории на текущата папка и работи идентично на GNU/Linux, macOS и BSD системи.
Алтернатива за GNU/Linux системи
На повечето съвременни дистрибуции на Linux — включително тези, работещи на Dedicated Servers — можете също да използвате:
find . -maxdepth 1 -type d
Имайте предвид, че това ще включи . самата в изхода. Използвайте ! -name . заедно с -maxdepth 1 за да го изключите чисто.
Включване на скритите директории
Тъй като find не разчита на shell глобове, автоматично включва скритите директории:
find . -maxdepth 1 -type d ! -name .
Това ще покаже .config, .ssh, .bashrc и всички други директории с префикс точка заедно с видимите.
Използване на find в скриптове
find е правилният инструмент за shell скриптване, защото:
- Безопасно обработва имена на файлове със пространства и специални символи.
- Не е засегнат от настройките на локала или конфигурациите на цветовете на терминала.
- Произвежда последователен, анализируем изход.
Пример: Цикъл над всички директории на най-горното ниво
find . -maxdepth 1 -type d ! -name . | while read dir; do
echo “Processing: $dir”
done
Кога да използвате find: Всеки път, когато имате нужда от включени скритите директории, рекурсивни резултати или надежден изход за скриптване и автоматизация.
Метод 3: Командата tree — Визуални карти на директориите
Командата tree визуализира йерархична карта на вашата структура на директориите. Не е инсталирана по подразбиране на всички дистрибуции, но е изключително полезна за документация, въвеждане и разбиране на сложни оформления на проекти.
Инсталиране на tree
Debian/Ubuntu:
sudo apt-get install tree
CentOS/RHEL/AlmaLinux:
sudo yum install tree
Изброяване само на директориите (без файлове)
tree -d
Ограничаване на дълбочината, за да избегнете преливащия се изход
tree -d -L 2
- -d — Показва само директориите.
- -L 2 — Ограничава показването до 2 нива дълбочина.
Пример на изход:
.
├── Documents
├── Downloads
├── Pictures
└── Projects
├── website
└── api
Включване на скритите директории
tree -d -a
Кога да използвате tree: Визуализиране на структури на проекти, писане на документация или изследване на неизвестна оформка на сървър за първи път.
Метод 4: Защо трябва да избегнете ls | grep ^d
Понякога ще срещнете този шаблон, предложен онлайн:
ls -l | grep ^d
Идеята е да филтрирате дълго-изброяващия изход на ls, за да покажете само редове, които започват с d — което показва директория. Докато това изглежда умно, то е фундаментално крехко и трябва да се избягва в всеки сериозен контекст:
| Проблем | Обяснение |
|---|---|
| Чувствителност към локала | Някои локали или конфигурации на терминала променят формата на изхода на ls, разбивайки шаблона ^d. |
| Цветни кодове | Ако ls издава ANSI цветни кодове за избягване, шаблонът ^d може да не съответства. |
| Скритите директории | Не се показват, точно както при ls -d */. |
| Символни връзки | Символни връзки, сочещи към директории, показват като l, не d, така че са мълчаливо изключени. |
| Недостатъчност при скриптване | Анализирането на изхода на ls в скриптове е изрично обезкуражено в най-добрите практики на shell скриптване. |
Използвайте find вместо това. Тя е специално предназначена за тази задача и избягва всички горепосочени проблеми.
Бърз справочник: Избор на правилния метод
| Цел | Най-добра команда |
|---|---|
| Бърза интерактивна проверка (само видими директории) | ls -d */ |
| Подробно изброяване с разрешения | ls -ld */ |
| Директории на най-горното ниво, включително скритите | find . -maxdepth 1 -type d ! -name . |
| Всички директории рекурсивно | find . -type d |
| Визуална структура на дърво | tree -d |
| Използване в shell скрипт | find . -maxdepth 1 -type d ! -name . |
Най-добри практики за производствени сървърни среди
Когато работите на активен сървър — независимо дали е Shared Web Hosting акаунт или напълно управляван VPS — имайте предвид тези принципи:
- Винаги проверявайте скритите директории при одити на сигурност. Директориите като .ssh, .aws, .env и .git често съдържат чувствителни удостоверения, ключове и конфигурационни файлове. Използвайте find с -type d, за да гарантирате, че се появяват в вашия изход.
- Използвайте find в всички скриптове, никога ls. Анализирането на изхода на ls е добре известен антишаблон при shell скриптване. Командата find е детерминирана, независима от локала и обработва граничните случаи грациозно.
- Комбинирайте find с du за масови операции. Например, за да изброите размерите на директориите:
find . -maxdepth 1 -type d ! -name . -exec du -sh {} ;
- Използвайте tree при въвеждане. Когато първо SSH в неизвестен сървър, бързо tree от /var/www или /home дава вам моментален преглед на структурата.
- Ограничавайте разрешенията внимателно. Знанието какви директории съществуват е само част от картината. Редовно одитирайте разрешенията на директориите с ls -ld, за да хванете неправилно конфигурирани директории, достъпни за всички.
Практичен пример: Одит на директория на уеб сървър
Предположим, че сте наскоро развили ново приложение на Linux VPS. Ето практичен работен процес
