Введение
Давайте не будем вдаваться в элементарные подробности терминологии - что такое файловая система и тому подобное. Скажу лишь, что статья подготовлена для новичков и специалистов, желающих обновить свои знания. Я постарался написать коротко и по сути. Всего частей будет 11.
📁 Файловая система
👤 Пользователи и группы
🔐 Права доступа
⚙️ Процессы и система
🌐 Сеть
📋 Логи и мониторинг
🛡️ Hardening и безопасность
📦 Пакеты и обновления
🔧 Скриптинг и автоматизация
🔑 Криптография и сертификаты
🧩 Контейнеры (Linux-уровень)
Структура файловой системы
/ ├── etc # конфигурации системы и приложений ├── var # переменные данные: логи, кэш, очереди ├── proc # состояние ядра и процессов ├── sys # устройства и драйверы ├── tmp # временные файлы ├── home # домашние директории пользователей ├── root # домашняя директория суперпользователя ├── dev # файлы устройств ├── usr # программы и библиотеки ├── bin # базовые утилиты (symlink на /usr/bin) ├── sbin # команды администрирования (symlink на /usr/sbin) ├── opt # сторонний софт ├── run # runtime-данные процессов ├── mnt # точки ручного монтирования └── boot # файлы загрузчика и ядро
Корневой каталог / - вершина всей иерархии. Всё остальное монтируется внутрь него. Рассмотрим ключевые каталоги подробнее.
/etc
От et cetera или Editable Text Configuration - здесь хранятся конфигурационные файлы всей системы. Настройки служб, сетевых параметров, пользователей - всё сюда. Важные файлы: /etc/passwd (пользователи), /etc/fstab (монтирование файловых систем), /etc/hosts (локальный DNS), /etc/ssh/sshd_config (настройки SSH-сервера).
/var
От variable - данные, которые постоянно меняются в процессе работы: логи (/var/log), почтовые очереди (/var/mail), спулеры (/var/spool), данные веб-серверов (/var/www). Именно сюда смотреть в первую очередь при диагностике проблем.
/proc
Виртуальная файловая система - файлы здесь не хранятся на диске, а генерируются ядром в реальном времени. Предоставляет информацию о запущенных процессах и состоянии ядра. Примеры: /proc/cpuinfo - информац��я о процессоре, /proc/meminfo - память, /proc/1/ - данные процесса с PID 1.
/sys
Ещё одна виртуальная ФС - интерфейс к устройствам и драйверам ядра. Позволяет читать и изменять параметры ядра и оборудования на лету. Широко используется при работе с сетевыми интерфейсами, дисками и другим железом.
/tmp
Временные файлы. Любой пользователь может создавать файлы здесь. Содержимое обычно очищается при перезагрузке или по таймеру (через systemd-tmpfiles). Не храните здесь ничего важного.
/home
Домашние каталоги обычных пользователей. Каждый пользователь получает свой подкаталог - /home/username. Здесь хранятся личные файлы, конфиги программ (скрытые папки вида .config, .ssh), документы.
/root
Домашний каталог суперпользователя. Намеренно вынесен отдельно от /home - для безопасности и доступности даже при проблемах с монтированием /home.
/dev
Файлы устройств - интерфейсы к аппаратному обеспечению. /dev/sda - первый жёсткий диск, /dev/sda1 - его первый раздел, /dev/null - «чёрная дыра» для ненужного вывода, /dev/zero - источник нулевых байт, /dev/random и /dev/urandom - генераторы случайных данных.
Навигация по файловой системе
ls - просмотр содержимого каталога
ls (от list) выводит список файлов и подкаталогов. Без аргументов показывает текущий каталог.
ls # Содержимое текущего каталога ls /etc # Содержимое /etc ls -l # Подробный список: права, владелец, размер, дата ls -a # Все файлы, включая скрытые (начинающиеся с точки) ls -lh # Подробный список с читаемым размером (KB, MB, GB) ls -lt # Сортировка по времени изменения (новые сверху) ls -lS # Сортировка по размеру (большие сверху) ls -R # Рекурсивный вывод всех вложенных каталогов ls -ld /etc # Информация о самом каталоге, а не его содержимом
Флаги можно комбинировать. ls -lah - пожалуй, самая частая комбинация в работе: подробный список, скрытые файлы, читаемые размеры.
cd - смена текущего каталога
cd (от change directory) - основа навигации.
cd /etc # Перейти в /etc (абсолютный путь) cd logs # Перейти в подкаталог logs (относительный путь) cd .. # На уровень вверх cd ../.. # На два уровня вверх cd ~ # В домашний каталог текущего пользователя cd # То же самое, что cd ~ cd - # В предыдущий каталог (удобно для переключения между двумя) cd /var/log # Абсолютный путь от корня
cd -- очень удобная команда когда нужно быстро переключаться между двумя каталогами.
pwd - текущий рабочий каталог
pwd (от print working directory) выводит абсолютный путь к тому месту, где вы сейчас находитесь.
pwd # Вывод: /home/username/projects
pwd -P # Показать реальный путь без symlink'ов pwd -L # Показать логический путь (по умолчанию)
find - поиск файлов и каталогов
find - мощный инструмент для поиска по имени, типу, размеру, правам, времени изменения и многому другому. Ищет рекурсивно в указанной директории.
# Поиск по имени find . -name "*.log" # Все .log файлы в текущем каталоге find /etc -name "hosts" # Файл hosts в /etc find / -name "*.conf" 2>/dev/null # Все .conf файлы на всей системе, без ошибок # Поиск по типу find /var -type f # Только файлы (не каталоги) find /etc -type d # Только каталоги find /dev -type l # Только символические ссылки # Поиск по размеру find / -size +100M # Файлы больше 100 MB find /tmp -size -1k # Файлы меньше 1 KB # Поиск по времени find /var/log -mtime -1 # Изменялись за последние 24 часа find /tmp -atime +7 # Не открывались более 7 дней # Поиск по правам и владельцу find / -perm 777 # Файлы с правами 777 find /home -user username # Файлы конкретного пользователя # Поиск + действие find /tmp -name "*.tmp" -delete # Найти и удалить find /var/log -name "*.log" -exec ls -lh {} \; # Найти и выполнить команду
locate - быстрый поиск по базе данных
locate ищет не на диске в реальном времени, а по заранее собранной базе данных - поэтому работает значительно быстрее find. Минус: база не знает о файлах, созданных после последнего обновления.
locate passwd # Найти все пути, содержащие "passwd" locate -i readme # Поиск без учёта регистра locate -c "*.conf" # Подсчитать количество совпадений locate -l 10 "*.log" # Вывести максимум 10 результатов sudo updatedb # Обновить базу данных вручную
В Ubuntu/Debian
locateустанавливается отдельно:sudo apt install mlocate. База обновляется автоматически через cron, обычно раз в сутки.
tree - дерево каталогов
tree визуализирует структуру каталогов в виде дерева - удобно для быстрого обзора проекта или системной директории.
tree # Дерево текущего каталога tree /etc # Дерево /etc tree -L 2 # Ограничить глубину 2 ��ровнями tree -L 3 /var # /var на 3 уровня вглубь tree -a # Включая скрытые файлы tree -d # Только каталоги, без файлов tree -f # Показывать полные пути tree -h # Показывать размер файлов tree -I "node_modules" # Исключить каталог из вывода
Установка:
sudo apt install tree
Работа с файлами и каталогами
cp - копирование
cp (от copy) копирует файлы и каталоги.
cp file.txt copy.txt # Копировать файл cp file.txt /tmp/ # Скопировать в другой каталог cp file1.txt file2.txt /tmp/ # Скопировать несколько файлов cp -r dir1 dir2 # Копировать каталог рекурсивно cp -r dir1/ /backup/ # Копировать содержимое dir1 в /backup cp -p file.txt copy.txt # Сохранить права, владельца и временные метки cp -u source.txt dest.txt # Копировать только если source новее dest cp -v file.txt /tmp/ # Подробный вывод (verbose) cp -i file.txt existing.txt # Спросить перед перезаписью
mv - перемещение и переименование
mv (от move) - и перемещение, и переименование делается одной командой.
mv old.txt new.txt # Переименовать файл mv file.txt /tmp/ # Переместить файл в /tmp mv file.txt /tmp/newname.txt # Переместить и переименовать одновременно mv dir1 dir2 # Переименовать каталог mv *.log /var/archive/ # Переместить все .log файлы mv -i file.txt existing.txt # Спросить перед перезаписью mv -u source.txt dest.txt # Переместить только если source новее mv -v file.txt /tmp/ # Verbose-режим
rm - удаление
rm (от remove) удаляет файлы и каталоги.
Удалённые через
rmфайлы не попадают в корзину. Восстановление возможно, но сложно и не гарантировано.rm -rf- особо опасная команда, требует максимального внимания.
rm file.txt # Удалить файл rm file1.txt file2.txt # Удалить несколько файлов rm *.tmp # Удалить все .tmp файлы rm -i file.txt # Запросить подтверждение rm -r directory/ # Удалить каталог рекурсивно rm -rf directory/ # Принудительное рекурсивное удаление без запроса rm -v file.txt # Verbose-режим - показывать что удаляется
mkdir - создание каталогов
mkdir (от make directory) создаёт новые каталоги.
mkdir new_dir # Создать каталог mkdir dir1 dir2 dir3 # Создать несколько каталогов mkdir -p parent/child/grandchild # Создать всю цепочку, если не существует mkdir -m 755 secure_dir # Создать с указанными правами mkdir -v new_dir # Verbose-режим
touch - создание файлов и обновление временных меток
touch создаёт пустой файл, если он не существует, или обновляет временные метки у существующего.
touch file.txt # Создать пустой файл touch file1.txt file2.txt # Создать несколько файлов touch -m file.txt # Обновить только время модификации touch -a file.txt # Обновить только время доступа touch -t 202501011200 file.txt # Установить конкретное время (YYYYMMDDhhmm)
ln - создание ссылок
ln (от link) создаёт жёсткие или символические ссылки.
Жёсткая ссылка (hard link) указывает на тот же inode, что и оригинал. Удаление исходного файла не уничтожает данные - они доступны через ссылку. Не работает между разными файловыми системами и не может ссылаться на каталоги.
Символическая ссылка (symlink) - указатель на путь к файлу или каталогу. Аналог ярлыка в Windows. Работает между ФС и с каталогами. При удалении оригинала ссылка становится битой.
ln file.txt hardlink.txt # Жёсткая ссылка ln -s file.txt symlink.txt # Символическая ссылка на файл ln -s /etc/nginx/nginx.conf ~/nginx.conf # Symlink с абсолютным путём ln -s /var/www /srv/web # Символическая ссылка на каталог ln -sf new_target.txt existing_link.txt # Перезаписать существующий symlink ls -la symlink.txt # Видно что это ссылка и куда ведёт
stat - подробная информация о файле
stat выводит полную информацию о файле: размер, тип, inode, права доступа, владелец, три временные метки.
stat file.txt # Вывод: # File: file.txt # Size: 1024 Blocks: 8 IO Block: 4096 regular file # Device: 8,1 Inode: 131074 Links: 1 # Access: (0644/-rw-r--r--) Uid: (1000/username) Gid: (1000/username) # Access: 2026-02-25 10:00:00 # Modify: 2026-02-24 15:30:00 # Change: 2026-02-24 15:30:00 stat /etc # Информация о каталоге stat -f file.txt # Информация о файловой системе, на которой лежит файл stat --format="%n %s %U" # Форматированный вывод: имя, размер, владелец
Три временные метки:
Access - последнее чтение файла
Modify - последнее изменение содержимого
Change - последнее изменение метаданных (права, владелец)
file - определение типа файла
file анализирует содержимое файла и определяет его тип - независимо от расширения.
file document.pdf # Выведет: PDF document, version 1.6 file /bin/bash # Выведет: ELF 64-bit LSB executable... file archive.tar.gz # Выведет: gzip compressed data... file image.png # Выведет: PNG image data, 1920 x 1080... file script.sh # Выведет: Bourne-Again shell script... file unknown_file # Полезно когда расширение неизвестно или отсутствует file * # Определить тип всех файлов в текущем каталоге file -i document.pdf # MIME-тип вместо текстового описания
Просмотр содержимого файлов
cat - вывод содержимого файла
cat (от concatenate) выводит содержимое одного или нескольких файлов. Лучше всего подходит для коротких файлов.
cat file.txt # Вывести содержимое файла cat file1.txt file2.txt # Объединить и вывести два файла cat -n file.txt # С номерами строк cat -A file.txt # Показать спецсимволы ($ в конце строк, ^I для табуляции) cat -s file.txt # Сжать несколько пустых строк в одну cat /dev/null > file.txt # Очистить файл (обнулить) cat > newfile.txt # Создать файл и писать в него вручную (Ctrl+D для завершения)
less - постраничный просмотр
less - интерактивный просмотрщик для больших файлов. Не загружает весь файл в память, поэтому отлично работает с гигантскими логами.
less /var/log/syslog less +F /var/log/syslog # Открыть в режиме отслеживания (как tail -f) less -N file.txt # С номерами строк less -S file.txt # Без переноса длинных строк
Управление внутри less:
Клавиша | Действие |
|---|---|
| Следующая страница |
| Предыдущая страница |
| Начало файла |
| Конец файла |
| Поиск вперёд |
| Поиск назад |
| Следующее совпадение |
| Предыдущее совпадение |
| Выход |
more - упрощённый постраничный просмотр
more - предшественник less, умеет только прокручивать вперёд. Использовать less предпочтительнее, но more гарантированно есть на любой Unix-системе.
more /etc/passwd more -5 file.txt # Показывать по 5 строк
head - первые строки файла
head по умолчанию выводит первые 10 строк файла.
head file.txt # Первые 10 строк head -n 20 file.txt # Первые 20 строк head -n -5 file.txt # Все строки, кроме последних 5 head -c 100 file.txt # Первые 100 байт head -q file1.txt file2.txt # Несколько файлов без заголовков
tail - последние строки файла
tail по умолчанию выводит последние 10 строк.
tail file.txt # Последние 10 строк tail -n 20 file.txt # Последние 20 строк tail -n +5 file.txt # Все строки, начиная с 5-й tail -c 200 file.txt # Последние 200 байт
tail -f - отслеживание файла в реальном времени
Флаг -f (от follow) держит файл открытым и выводит новые строки по мере их появления. Незаменим для мониторинга логов.
tail -f /var/log/syslog # Следить за системным логом tail -f /var/log/nginx/access.log # Следить за логом nginx tail -fn 50 /var/log/auth.log # Последние 50 строк + слежение tail -f file1.log file2.log # Следить за несколькими файлами
Ctrl+Cдля выхода из режима слежения. Если хотите следить за файлом даже после его ротации (пересоздания) - используйтеtail -F(заглавная F).
Поиск внутри файлов
grep - поиск текста по шаблону
grep (от global regular expression print) ищет строки по шаблону в файлах или потоке данных. Одна из самых используемых команд в Linux.
grep "error" /var/log/syslog # Строки содержащие "error" grep -i "warning" file.txt # Без учёта регистра grep -n "root" /etc/passwd # С номерами строк grep -c "error" /var/log/syslog # Подсчитать количество совпадений grep -v "debug" app.log # Инвертировать: строки БЕЗ "debug" grep -l "TODO" *.py # Только имена файлов с совпадениями grep -w "root" /etc/passwd # Только целые слова (не "rootdir") grep -A 3 "error" file.log # 3 строки после совпадения (After) grep -B 2 "error" file.log # 2 строки до совпадения (Before) grep -C 2 "error" file.log # По 2 строки до и после (Context)
grep -r - рекурсивный поиск
grep -r "function_name" . # Во всех файлах текущего каталога grep -r "TODO" /home/user/project # В конкретном проекте grep -rl "api_key" . # Только имена файлов рекурсивно grep -r --include="*.py" "import" . # Только в .py файлах grep -r --exclude="*.log" "error" . # Исключить .log файлы grep -r --exclude-dir=".git" "fix" . # Исключить каталог
grep -E - расширенные регулярные выражения
-E (или egrep) включает поддержку расширенного синтаксиса регулярных выражений.
grep -E "(error|fail|critical)" /var/log/syslog # ИЛИ grep -E "^root" /etc/passwd # Строки, начинающиеся с "root" grep -E "bash$" /etc/passwd # Строки, заканчивающиеся на "bash" grep -E "[0-9]{1,3}\.[0-9]{1,3}" file.txt # IP-адреса (упрощённо) grep -E "^$" file.txt # Пустые строки grep -E "https?://" file.txt # http или https ссылки
awk - обработка и извлечение полей
awk - язык для построчной обработки текста. Особенно силён при работе с табличными данными, логами и файлами с разделителями.
Базовая модель: awk 'условие { действие }' файл. По умолчанию разделитель - пробел/tab, поля: $1, $2, ..., $NF (последнее поле), $0 - вся строка.
# /etc/passwd: user:x:uid:gid:info:home:shell awk -F: '{print $1}' /etc/passwd # Имена всех пользователей awk -F: '{print $1, $3}' /etc/passwd # Имя и UID awk -F: '$3 >= 1000 {print $1}' /etc/passwd # Только обычные пользователи (UID ≥ 1000) awk -F: '{print $1": "$7}' /etc/passwd # Форматированный вывод # Работа с пробельным разделителем awk '{print $1}' access.log # Первое поле (напр. IP в логе nginx) awk 'NR==5' file.txt # Вывести только 5-ю строку awk 'NR>=5 && NR<=10' file.txt # Строки с 5 по 10 # Встроенные переменные awk '{print NR": "$0}' file.txt # Добавить номера строк awk 'END{print NR}' file.txt # Подсчитать количество строк awk '{sum += $1} END {print "Сумма:", sum}' numbers.txt # Сложить числа из первого столбца # BEGIN и END блоки awk 'BEGIN{print "=== Пользователи ==="} -F: {print $1} END{print "=== Конец ==="}' /etc/passwd
sed - потоковый редактор
sed (от stream editor) обрабатывает текст построчно - заменяет, удаляет, вставляет, фильтрует. По умолчанию не изменяет исходный файл, а выводит результат в stdout.
# Замена sed 's/old/new/' file.txt # Заменить первое вхождение в каждой строке sed 's/old/new/g' file.txt # Заменить все вхождения (global) sed 's/old/new/gi' file.txt # Без учёта регистра sed 's/root/admin/g' /etc/passwd # Пример с реальным файлом # Редактирование файла "на месте" sed -i 's/old/new/g' file.txt # Изменить файл (осторожно!) sed -i.bak 's/old/new/g' file.txt # Изменить файл, сохранив backup .bak # Удаление строк sed '/^#/d' config.txt # Удалить все комментарии (строки с #) sed '/^$/d' file.txt # Удалить пустые строки sed '5d' file.txt # Удалить 5-ю строку sed '2,4d' file.txt # Удалить строки 2-4 # Вывод конкретных строк sed -n '5p' file.txt # Вывести только 5-ю строку sed -n '5,10p' file.txt # Строки 5-10 sed -n '/error/p' file.txt # Строки содержащие "error" # Добавление строк sed '3a\Новая строка после 3-й' file.txt # Добавить после строки 3 sed '1i\Заголовок' file.txt # Добавить перед строкой 1
В следующей части - пользователи и группы: создание, управление, /etc/passwd, /etc/shadow, sudo и всё что с этим связано. а пока держите Linux Cheatsheet — Файловая система
Навигация
Команда | Описание |
|---|---|
| Показать текущий каталог |
| Перейти в каталог |
| На уровень вверх |
| В домашний каталог |
| В предыдущий каталог |
| Содержимое текущего каталога |
| Подробный список (права, владелец, размер) |
| Включая скрытые файлы |
| Подробно + скрытые + читаемый размер |
| Сортировка по времени изменения |
| Сортировка по размеру |
| Рекурсивный вывод |
| Дерево каталогов |
| Дерево на 2 уровня вглубь |
| Только каталоги |
| Включая скрытые |
Поиск файлов
Команда | Описание |
|---|---|
| Поиск по имени |
| Только файлы |
| Только каталоги |
| Только символические ссылки |
| Файлы больше 100 MB |
| Не изменялись более 7 дней |
| Изменялись за последний час |
| Файлы с правами 777 |
| Файлы конкретного пользователя |
| Найти и удалить |
| Быстрый поиск по базе данных |
| Поиск без учёта регистра |
| Обновить базу данных locate |
Работа с файлами и каталогами
Команда | Описание |
|---|---|
| Создать пустой файл |
| Создать каталог |
| Создать вложенные каталоги |
| Копировать файл |
| Копировать каталог рекурсивно |
| Копировать с сохранением метаданных |
| Переименовать файл |
| Переместить файл |
| Удалить файл |
| Удалить каталог рекурсивно |
| Принудительное удаление без подтверждения |
| Создать жёсткую ссылку |
| Создать символическую ссылку |
| Подробная информация о файле |
| Определить тип файла |
Просмотр содержимого
Команда | Описание |
|---|---|
| Вывести содержимое файла |
| С номерами строк |
| Постраничный просмотр (интерактивный) |
| С номерами строк |
| Постраничный просмотр (упрощённый) |
| Первые 10 строк |
| Первые 20 строк |
| Последние 10 строк |
| Последние 20 строк |
| Слежение за файлом в реальном времени |
| Слежение с учётом ротации файла |
Поиск внутри файлов
Команда | Описание |
|---|---|
| Поиск строк по шаблону |
| Без учёта регистра |
| С номерами строк |
| Подсчитать совпадения |
| Инвертировать (строки БЕЗ шаблона) |
| Только имена файлов с совпадениями |
| Только целые слова |
| 3 строки после совпадения |
| 2 строки до совпадения |
| По 2 строки до и после |
| Рекурсивный поиск |
| Рекурсивно, только имена файлов |
| Расширенные регулярные выражения |
| Строки начинающиеся с "root" |
| Строки заканчивающиеся на "bash" |
| Вывести первый столбец |
| Разделитель двоеточие |
| Вывести только 5-ю строку |
| Подсчитать строки |
| Заменить все вхождения |
| Заменить в самом файле |
| Заменить с созданием backup |
| Удалить пустые строки |
| Удалить строки с комментариями |
| Вывести строки 5-10 |
Базовые команды терминала
Команда | Описание |
|---|---|
| Очистить терминал |
| История команд |
| Поиск по истории |
| Повторить последнюю команду |
| Выполнить команду №5 из истории |
| Прервать текущую команду |
| Приостановить процесс |
| Очистить терминал (как clear) |
| Поиск по истории команд |
| Перейти в начало строки |
| Перейти в конец строки |
| Удалить строку до курсора |
| Автодополнение |
| Документация по команде |
| Краткая справка |
| Путь к исполняемому файлу |
| Вывести текст |
| Выйти из терминала / сессии |
Статья доступна на Хабе opensophy: https://hub.opensophy.com/docs/linux-filesystem/
Статьи, блоги и документации в первую очередь выходят и обновляются на Хабе с указанием автора и соавторов.
