Введение
Давайте не будем вдаваться в элементарные подробности терминологии - что такое файловая система и тому подобное. Скажу лишь, что статья подготовлена для новичков и специалистов, желающих обновить свои знания. Я постарался написать коротко и по сути. Всего частей будет 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 устанавливается отдельно. Начиная с Ubuntu 22.04 рекомендуется plocate вместо устаревшего mlocate — он быстрее за счёт более эффективного формата индекса: sudo apt install plocate. Команда locate при этом остаётся той же. База обновляется автоматически через cron/systemd-timer, обычно раз в сутки.
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-режим
mkdir -p незаменим в скриптах: без него команда упадёт с ошибкой при повторном запуске, если каталог уже существует. Флаг решает обе задачи сразу — «если каталог уже есть, всё в порядке; иначе создай его и все промежуточные».
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 гарантированно есть на любой POSIX-совместимой системе.
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/
Статьи, блоги и документации в первую очередь выходят и обновляются на Хабе с указанием автора и соавторов.
Автор: opensophy
