Гайд для новичков: структура файлов в Linux
-
В Linux все — это файлы. Понимание структуры файловой системы критично для системного администратора, разработчика и даже обычного пользователя. Это позволит вам:
- Находить нужные программы и конфигурации
- Правильно устанавливать ПО
- Разбираться в ошибках и логах
- Не случайно удалить что-то важное
- Безопасно работать с системой
Корневой каталог (/)
Linux использует иерархическую структуру, начинающуюся с единственного корня —
/. Это отличие от Windows, где несколько дисков (C:, D:) с собственными корнями.ls /Вы увидите примерно такое:
bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr varКаждый из этих каталогов имеет строго определённое предназначение. Давайте разберёмся в каждом.
Основные директории
/bin — исполняемые файлы (бинарники) для пользователей
Предназначение: команды, необходимые всем пользователям системы для базовой работы.
Примеры команд:
ls /bin # Вы увидите: # bash cat chmod cp date echo grep kill ln ls mkdir more mv ps pwd rm sed sh sort tar touch unameПримеры использования:
# Эти команды находятся в /bin: ls /home # программа ls cp file1.txt file2.txt # программа cp mkdir new_folder # программа mkdir cat file.txt # программа catПочему это нужно: Если система не загружается в GUI, вы сможете загрузиться в минималистичный режим и использовать эти команды для восстановления.
/sbin — системные команды (super user binary)
Предназначение: команды для администратора (root), необходимые для управления системой.
Примеры команд:
ls /sbin # Вы увидите команды, требующие прав администратора: # ifconfig iptables fdisk mkfs mount reboot shutdown useradd usermod visudoПримеры использования:
# Команды, требующие sudo: sudo shutdown -h now # выключить компьютер sudo reboot # перезагрузка sudo fdisk -l # просмотр дисков sudo useradd newuser # создать пользователяПочему это нужно: Система разделяет «обычные» и «админские» команды для безопасности. Обычный пользователь не должен случайно выключить сервер.
/home — домашние директории пользователей
Предназначение: личные файлы каждого пользователя системы.
Структура:
/home/ ├── alice/ │ ├── Documents/ │ ├── Downloads/ │ ├── Pictures/ │ ├── .bashrc │ ├── .ssh/ │ └── projects/ └── bob/ ├── Documents/ ├── .bashrc └── work/Примеры работы:
# Кто я? whoami # alice # Где моя домашняя директория? pwd # /home/alice # Или сокращённо через переменную: echo $HOME # /home/alice # Символ ~ представляет домашнюю директорию: cd ~ # перейти в /home/alice cd ~/Documents # перейти в /home/alice/DocumentsВажные скрытые файлы (начинаются с точки):
# Показать скрытые файлы: ls -la ~ # Вы увидите: # .bashrc — конфигурация bash-шелла # .bash_history — история команд # .ssh/ — SSH-ключи для доступа на серверы # .gitconfig — конфигурация Git # .config/ — конфигурации приложенийПочему это нужно: Каждый пользователь изолирован друг от друга. Ваши файлы в
/home/aliceне видны пользователюbob./root — домашняя директория администратора
Предназначение: домашняя папка пользователя root (администратора).
# Если вы root: pwd # /root # Если вы обычный пользователь, вы не можете туда заходить: ls /root # ls: cannot open directory '/root': Permission denied # Но под sudo сможете: sudo ls /rootПочему это нужно: root — это особый пользователь с полными правами. Его файлы держат отдельно от
/home./etc — конфигурационные файлы
Предназначение: конфигурации системы и приложений. Это текстовые файлы, которые управляют поведением программ и системы.
Примеры конфигов:
ls /etc | head -20 # Вы увидите: # bash.bashrc — конфиги bash для всех пользователей # fstab — какие диски монтировать при загрузке # hostname — имя компьютера # hosts — локальная таблица DNS # passwd — данные пользователей # shadow — хэши паролей (только для root) # ssh/ — конфиги SSH-сервера # nginx/ — конфиги веб-сервера nginx # postgresql/ — конфиги PostgreSQL # cron.d/ — расписание автоматических задачПримеры работы:
# Посмотреть имя компьютера: cat /etc/hostname # mycomputer # Посмотреть таблицу DNS: cat /etc/hosts # 127.0.0.1 localhost # ::1 localhost # 192.168.1.100 mycomputer # Посмотреть данные пользователей (без паролей): cat /etc/passwd # root:x:0:0:root:/root:/bin/bash # postgres:x:116:120:PostgreSQL administrator:/var/lib/postgresql:/bin/bash # alice:x:1000:1000:Alice User:/home/alice:/bin/bash # Посмотреть, какие диски монтированы: cat /etc/fstab # UUID=abc123 / ext4 defaults 0 0 # UUID=def456 /boot ext4 defaults 0 0 # UUID=ghi789 /home ext4 defaults 0 0Конфигурирование сервисов:
# Конфиг PostgreSQL: cat /etc/postgresql/15/main/postgresql.conf | grep max_connections # max_connections = 100 # Конфиг SSH-сервера: cat /etc/ssh/sshd_config | grep Port # Port 22 # Конфиг Nginx: cat /etc/nginx/nginx.confПочему это нужно: Если программа работает неправильно, ответ часто находится в
/etc. Например, если веб-сайт не открывается, проверьте конфиг nginx в/etc/nginx/./var — переменные данные (logs, cache, databases)
Предназначение: данные, которые меняются во время работы системы: логи, кэши, очереди писем, временные базы данных.
Структура:
ls /var # Основные директории: # log/ — логи приложений # cache/ — кэшированные данные # tmp/ — временные файлы # spool/ — очереди (писем, заданий на печать) # lib/ — данные баз данных (PostgreSQL, MySQL) # run/ — информация о запущенных процессах (PID-файлы)Примеры логов:
# Логи системы: sudo tail -f /var/log/syslog # основной системный лог (Ubuntu/Debian) sudo tail -f /var/log/messages # основной системный лог (RHEL/CentOS/Fedora) # Логи Nginx: sudo tail -f /var/log/nginx/access.log # кто заходил на сайт sudo tail -f /var/log/nginx/error.log # ошибки веб-сервера # Логи PostgreSQL: sudo tail -f /var/log/postgresql/postgresql.log # Логи SSH (попытки входа): sudo tail -f /var/log/auth.log # попытки входа (Ubuntu/Debian) sudo tail -f /var/log/secure # попытки входа (Fedora/CentOS)Работа с логами:
# Посмотреть последние 20 строк: sudo tail -n 20 /var/log/nginx/error.log # Смотреть логи в реальном времени: sudo tail -f /var/log/nginx/access.log # Найти ошибки за последний час: sudo grep "error" /var/log/nginx/error.log | tail -50 # Посчитать неудачные попытки SSH за день: sudo grep "Failed password" /var/log/auth.log | wc -lДанные приложений:
# Где хранит данные PostgreSQL: ls -la /var/lib/postgresql/ # Где хранит кэш приложений: ls -la /var/cache/ # Где находятся PID-файлы запущенных сервисов: ls -la /var/run/ # или ls -la /run/Почему это нужно: Когда что-то ломается, вы идёте в
/var/logи читаете, что произошло. Свободное место на диске часто занимают старые логи в/var/log./usr — программы и библиотеки для пользователей
Предназначение: большинство установленных программ, библиотек и документации.
Структура:
ls /usr # Основные директории: # bin/ — исполняемые файлы программ # sbin/ — системные команды (требуют права администратора) # lib/ — библиотеки, необходимые программам # include/ — заголовочные файлы для разработчиков # share/ — данные, не зависящие от архитектуры (документация, иконки) # local/ — программы, установленные вручнуюПримеры:
# Где находится Python: which python3 # /usr/bin/python3 # Где находится Node.js: which node # /usr/bin/node # Где находятся библиотеки Node.js: ls /usr/lib/node_modules/ # npm @angular @types webpack ... # Где находятся библиотеки C: ls /usr/lib/x86_64-linux-gnu/ | head # libc.so.6 libpthread.so.0 libssl.so.1.1 ... # Где находится документация: ls /usr/share/doc/ | head # adduser apt base-files bash curl git ... # Программы, установленные локально (вручную): ls /usr/local/bin/Почему это нужно: Когда вы устанавливаете программу через
aptилиyum, она идёт в/usr. Программы, которые вы компилируете сами, обычно идут в/usr/local./lib и /lib64 — системные библиотеки
Предназначение: критически важные библиотеки, необходимые для работы системы и программ из
/binи/sbin.# Посмотреть содержимое: ls /lib | head # libc.so.6 libc-2.31.so libm.so.6 libpthread.so.0 ... # Это динамические библиотеки — они загружаются программами во время запускаПочему это нужно: Это стандартная C-библиотека и другие критические компоненты. Без них система не будет работать.
/tmp — временные файлы
Предназначение: временные файлы, которые приложения и пользователи создают во время работы.
# Создать временный файл: echo "temporary data" > /tmp/myfile.txt # Посмотреть: cat /tmp/myfile.txt # temporary data # Очистить /tmp (обычно происходит при перезагрузке): sudo rm -rf /tmp/*Важно: файлы в
/tmpчасто удаляются при перезагрузке. Не сохраняйте там важные данные.Почему это нужно: Когда установщик программы или скрипт нужно что-то распаковать, он использует
/tmp./dev — устройства (диски, USB, консоли)
Предназначение: специальные файлы, которые представляют физические устройства.
# Посмотреть содержимое: ls /dev | head # Основные устройства: # sda, sdb — жёсткие диски # sda1, sda2 — разделы на дисках # null — чёрная дыра (всё, что туда пишут, удаляется) # zero — источник нулевых байт # urandom — источник случайных чисел # tty — текущая консоль пользователя # pts/0, pts/1 — виртуальные терминалы (при SSH)Примеры использования:
# Посмотреть все диски: lsblk # NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT # sda 8:0 0 500G 0 disk # ├─sda1 8:1 0 512M 0 part /boot # ├─sda2 8:2 0 200G 0 part / # └─sda3 8:3 0 299.5G 0 part /home # Получить случайные числа: head -c 100 /dev/urandom | od -An -tx1 # «Удалить» данные (отправить в никуда): echo "this will disappear" > /dev/null cat /dev/null # Посмотреть, кто вы (текущий TTY): tty # /dev/pts/0Почему это нужно: Если вам нужно отформатировать диск, вы работаете с
/dev/sda1, а не с буквой диска, как в Windows./boot — файлы загрузки ядра
Предназначение: ядро Linux и файлы, необходимые для загрузки системы.
ls /boot # Вы увидите: # vmlinuz-5.15.0-56-generic — ядро Linux # initrd.img-5.15.0-56-generic — начальный RAM-диск # grub/ — конфиг загрузчика GRUBПочему это нужно: Если загрузчик сломана, система не загрузится. Это критический раздел.
/proc и /sys — информация о системе (виртуальные файловые системы)
Предназначение: информация о запущенных процессах и параметрах ядра.
Примеры:
# Информация о процессоре: cat /proc/cpuinfo | head -20 # Информация о памяти: cat /proc/meminfo # MemTotal: 8000000 kB # MemFree: 4000000 kB # MemAvailable: 5500000 kB # Информация о конкретном процессе (PID 1234): ls /proc/1234/ # cmdline environ fd maps mem status ... # Информация о загруженных модулях ядра: cat /proc/modules # Информация об обновления ядра: cat /proc/sys/kernel/hostname # mycomputerПочему это нужно:
/proc— это способ получить информацию о системе прямо из ядра. Это не физические файлы, а интерфейс к ядру./mnt и /media — точки монтирования
Предназначение: директории, где вы монтируете (подключаете) диски и USB-накопители.
# Вставить USB-накопитель и монтировать его: sudo mount /dev/sdb1 /mnt/usb # Теперь содержимое USB доступно в /mnt/usb: ls /mnt/usb # file1.txt file2.txt ... # Отмонтировать: sudo umount /mnt/usbПочему это нужно: Linux не использует буквы (D:, E:) для дополнительных накопителей. Вместо этого диски монтируются в определённые директории.
/opt — дополнительные программы
Предназначение: программы и приложения, установленные вручную или от третьих сторон (не через менеджер пакетов).
# Примеры: ls /opt # Может быть: # google/ — браузер Google Chrome # mongodb/ — база данных MongoDB (если установлена вручную) # my_app/ — какая-то дополнительная программаПочему это нужно: Это альтернатива
/usr/localдля больших приложений./srv — данные сервисов
Предназначение: данные, которые обслуживают веб-приложения и сервисы.
# Примеры: ls /srv # Может быть: # www/ — содержимое веб-сайтов # ftp/ — файлы FTP-сервера # git/ — Git-репозиторииПочему это нужно: Если вы хостите веб-сайт, его файлы могут находиться в
/srv/www.Полная иерархия в одной таблице
Директория Предназначение Примеры /Корневая директория — /binКоманды для всех ls, cp, bash, cat /sbinКоманды для администратора shutdown, reboot, fdisk /homeДомашние папки пользователей /home/alice, /home/bob /rootДомашняя папка root конфиги root /etcКонфигурации систем и приложений nginx, ssh, postgresql, fstab /varПеременные данные логи, кэши, базы данных /usrПрограммы и библиотеки пользователей python, node, npm, man-страницы /libСистемные библиотеки libc, libpthread /tmpВременные файлы временные данные приложений /devФайлы устройств sda (диски), tty (консоли) /bootФайлы загрузки ядро Linux, GRUB /procИнформация о процессах информация от ядра /sysИнформация о системе и ядре параметры ядра /mntТочки монтирования USB, внешние диски /mediaАвтоматические монтирования USB (автомонтирование) /optДополнительные программы proprietary applications /srvДанные сервисов содержимое веб-сайтов Практические примеры
Пример 1: Установка программы и её поиск
# Установить Git: sudo apt install git # или sudo yum install git # Где он находится: which git # /usr/bin/git # Где находится конфиг Git: cat ~/.gitconfig # в домашней директории # Где находятся скрытые настройки Git: ls ~/.config/git/Пример 2: Разбираемся с ошибкой веб-сервера
# Nginx не запускается. Проверяем конфиг: sudo nginx -t # nginx: configuration syntax is ok # Читаем логи ошибок: sudo tail -f /var/log/nginx/error.log # 2024/01/09 22:30:15 [emerg] 12345#0: bind() to 0.0.0.0:80 failed # — Не может занять порт 80. Что-то уже его использует. # Проверяем, что слушает на 80: sudo netstat -tlnp | grep :80 # или sudo ss -tlnp | grep :80Пример 3: Освобождаем место на диске
# Диск переполнен. Где больше всего файлов? du -sh /* # 10G /home # 5.2G /var # 3.1G /usr # 1.5G /opt # /var занимает много места — логи? du -sh /var/* # 4.5G /var/log # Какие логи самые большие: du -sh /var/log/* | sort -hr | head # 3.2G /var/log/nginx # 1.0G /var/log/postgresql # Очистить старые логи Nginx (оставляем последние 100 MB): sudo sh -c 'tail -c 100M /var/log/nginx/access.log > /var/log/nginx/access.log.tmp && mv /var/log/nginx/access.log.tmp /var/log/nginx/access.log' # Или использовать logrotate (встроенный инструмент): sudo logrotate -f /etc/logrotate.d/nginxПример 4: Работа с конфигурацией SSH
# Где находятся SSH-ключи: ls ~/.ssh/ # authorized_keys — какие ключи может использовать другие пользователи для входа # id_rsa — ваш приватный ключ # id_rsa.pub — ваш публичный ключ # config — конфиг SSH-клиента # known_hosts — ключи серверов, к которым вы подключались # Конфиг SSH-сервера: sudo cat /etc/ssh/sshd_config | grep -E "^[^#]" | head # Port 22 # PermitRootLogin no # PasswordAuthentication no # PubkeyAuthentication yes # Перезагрузить SSH-сервер после изменения конфига: sudo systemctl restart sshdПример 5: Проблема с монтированием диска
# Хотим автоматически монтировать диск при загрузке: # Сначала узнаём UUID: sudo blkid # /dev/sda1: UUID="abcd1234-5678-90ef-ghij-klmnopqrstuv" TYPE="ext4" # Редактируем /etc/fstab: sudo nano /etc/fstab # Добавляем строку: # UUID=abcd1234-5678-90ef-ghij-klmnopqrstuv /mnt/storage ext4 defaults 0 2 # Проверяем: mount -a # смонтировать всё, что описано в fstab df -h # посмотреть смонтированные дискиБезопасность: что нельзя трогать
Никогда не удаляйте и не изменяйте:
/bin,/sbin,/lib— система не будет работать/boot— система не загрузится/dev— не будет доступа к диску и периферии/etc/passwd,/etc/shadow— потеряете доступ к системе/sys,/proc— это виртуальные файловые системы, они только для чтения
Будьте осторожны с:
/etc— изменения в конфигах могут сломать сервисы/var/lib— данные баз данных/home— персональные данные пользователей
Используйте резервные копии перед изменением:
# Перед редактированием конфига: sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup # Если что-то сломалось: sudo mv /etc/nginx/nginx.conf.backup /etc/nginx/nginx.confПолезные команды для исследования
# Показать полную иерархию директорий: tree /home -L 2 # Показать дисковое пространство по директориям: du -sh /home/* /var/* /usr/* # Показать все смонтированные файловые системы: df -h # Найти все файлы больше 100 MB: find / -type f -size +100M 2>/dev/null # Найти все файлы, изменённые за последний день: find /home -type f -mtime -1 # Показать размер каждой директории: du -sh /home /var /usr /opt # Посчитать количество файлов в директории: find /home -type f | wc -lЗаключение
Структура файлов в Linux логична и согласована:
- Системные команды —
/binи/sbin - Пользовательские данные —
/home - Конфигурации —
/etc - Логи и переменные данные —
/var - Программы и библиотеки —
/usr - Временные файлы —
/tmp - Оборудование —
/dev
Постепенно, при работе с Linux, вы автоматически запомните, где искать нужные вам файлы. Главное — понимать логику расположения, а не заучивать наизусть.
© 2024 - 2025 ExLends, Inc. Все права защищены.