Иерархия файловой системы Linux (FHS). FHS (Filesystem Hierarchy Standard).
1. Основные принципы FHS
- Все есть файл: Устройства, процессы, конфигурация — все представлено как файлы.
- Конфигурация: В основном хранится в ASCII-текстовых файлах, что упрощает их чтение и редактирование.
- Чек на запись: Для быстрой проверки прав на запись в директории используй команду touch filename.
2. Критически важные директории (корень — /)
Директория |
Назначение |
Важность для кибербезопасности |
|---|---|---|
/etc |
Конфигурационные файлы. Содержит все системные настройки, включая базу данных пользователей (/etc/passwd), сетевые настройки и настройки служб. |
Критически важна! Редактирование этих файлов — основа администрирования. |
/home |
Домашние директории обычных пользователей. Каждый пользователь имеет здесь свою поддиректорию. |
Основное место для хранения личных данных. Обычный пользователь имеет право записи только в свой домашний каталог. |
/var |
Variable data (Изменяемые данные). Для файлов, которые часто меняются в процессе работы системы. |
Содержит логи (/var/log), кэш (/var/cache) и данные веб-серверов. |
/var/log |
Лог-файлы системы и приложений. |
Жизненно важна! Основной источник для расследования инцидентов и анализа безопасности. |
/usr |
Unix System Resources (Программные файлы). Содержит большую часть пользовательских программ и библиотек. |
Здесь находятся все исполняемые файлы (бинарники) и библиотеки (/usr/bin, /usr/sbin, /usr/lib). |
/usr/local |
Для установки локально скомпилированных или нестандартных программ. |
Важно для установки хакерских инструментов или скриптов, которые не входят в стандартный репозиторий. |
/tmp |
Временные файлы. Может быть очищена при перезагрузке. |
Всем разрешена запись! Часто используется как место для временного хранения файлов или эксплойтов. |
3. Директории исполняемых файлов и устройств
Директория |
Назначение |
Привилегии |
Примечание |
|---|---|---|---|
/bin |
Binaries (Бинарные файлы). Основные команды для обычных пользователей. |
Доступно всем. |
Часто является символической ссылкой на /usr/bin. |
/sbin |
System Binaries. Команды для системного администрирования. |
Требуют sudo (root-привилегии). |
Часто является символической ссылкой на /usr/sbin. |
/dev |
Devices (Устройства). Содержит файлы устройств, которые представляют аппаратное обеспечение (например, диски, порты). |
Файл /dev/sda представляет твой первый жесткий диск. |
|
/boot |
Файлы, необходимые для загрузки системы (включая ядро Linux — vmlinuz). |
Критически важна для загрузки ОС. |
|
/root |
Домашняя директория пользователя root. |
Доступен только root и тем, кто использует sudo. |
В твоем обучении кибербезопасности понимание, что /etc содержит все настройки, /var/log — все следы, а /tmp — это общедоступная свалка, будет иметь первостепенное значение при аудите систем и тестировании на проникновение.
LS: Список файлов и директорий
Команда ls (list) используется для просмотра содержимого директории. Она является незаменимой для навигации и аудита системы.
1. Основные опции LS
Опция |
Синтаксис |
Назначение |
|---|---|---|
Скрытые файлы |
ls −a (all) |
Показывает все файлы, включая скрытые (те, чьи имена начинаются с точки, например .bashrc). |
Длинный формат |
ls −l (long) |
Предоставляет подробный список, включая права доступа, количество ссылок, владельца, группу, размер и время изменения. |
Сортировка по времени |
ls −t (time) |
Сортирует файлы по времени последнего изменения, самые новые — вверху. |
Обратный порядок |
ls −r (reverse) |
Меняет порядок сортировки на обратный. |
2. Самая полезная комбинация
- LS -LRT: Эта комбинация (ls −lrt) используется для вывода подробного списка, отсортированного по времени (t), в обратном порядке (r), что помещает последний измененный файл в конец списка.
Комбинация |
Применение в безопасности |
|---|---|
ls −lrt /var/log |
Ключевой метод! Помогает быстро определить, какой файл журнала (log file) был изменен последним, что критически важно при расследовании инцидентов. |
3. Просмотр свойств директории
Если ты используешь ls −l /etc, ты увидишь содержимое директории /etc, а не её собственные свойства.
- Опция −d (directory):ls −ld /etc
- Назначение: Опция −d заставляет ls выводить свойства самой директории (например, ее права доступа, владельца), а не её содержимое.
- Важность: Это будет незаменимо при управлении правами доступа (permissions), поскольку права часто устанавливаются именно на директории, и тебе нужно видеть их текущие настройки.
Использование подстановочных знаков (wildcards), также известное как глоббинг (globbing), — это мощный инструмент, который многократно повышает эффективность работы в командной строке Linux, что критически важно для тебя, как для специалиста по кибербезопасности.
Подстановочные знаки (Wildcards) и глоббинг
Глоббинг (Globbing) — это процесс, при котором командная оболочка (shell) интерпретирует специальные символы в команде и подставляет вместо них имена файлов, соответствующих шаблону.
1. Основные подстановочные знаки
Символ |
Название |
Значение |
Пример |
|---|---|---|---|
***** |
Звездочка (Star) |
Любое количество любых символов (включая ноль). |
ls a∗ (показать все файлы, начинающиеся с «a») |
? |
Вопросительный знак |
Один одиночный любой символ. |
ls file? (показать file1, file2, но не file10) |
[ ] |
Квадратные скобки |
Один символ, который является одним из перечисленных символов или находится в указанном диапазоне. |
ls [nm]∗ (начинается с «n» или «m») |
[ — ] |
Диапазон в скобках |
Диапазон символов. |
ls [a-e]∗ (начинается с «a», «b», «c», «d» или «e») |
Примеры глоббинга
- ls b∗.?: Ищет файлы, начинающиеся с «b», за которыми следует любое количество символов, затем точка (.), а после точки — один любой символ. (Например, bash_completion.d)
- ls ab???: Ищет файлы, начинающиеся с «ab», за которыми следуют ровно три любых символа. (Итого, имя из пяти символов).
3. Диапазоны и группировка ({})
Фигурные скобки позволяют указать несколько строк для создания файлов или директорий в одной команде.
Синтаксис |
Назначение |
Пример |
|---|---|---|
Числовой диапазон |
Создание файлов с последовательной нумерацией. |
touch file{1..100} (создаст 100 файлов: file1,file2,…file100) |
Разделение запятыми |
Указание нескольких имен. |
mkdir data/{sales,accounts} (создаст две директории: data/sales и data/a |
ls b∗ показывает имена файлов, начинающихся с ‘b’, и содержимое директорий, начинающихся с ‘b’.
ls −d b∗ Только имена и свойства файлов и директорий, начинающихся с ‘b’.
Команда cp (Copy): Копирование файлов и директорий
Команда cp используется для копирования файлов и директорий. Базовый синтаксис: cp source destination.
1. Основной синтаксис и логика
Синтаксис |
Назначение |
|---|---|
cp file . |
Копирует file в текущую директорию (.). |
cp /etc/passwd mydir |
Опасно: Если mydir не существует, cp создаст файл с именем mydir и скопирует в него содержимое passwd. |
cp /etc/passwd mydir/ |
Безопасно: Слэш (/) в конце обязательно требует, чтобы mydir была директорией. Если mydir не существует или является файлом, команда завершится с ошибкой. |
Правило безопасности: Всегда добавляй слэш (/) в конце пути назначения, если ожидаешь, что это директория. Это предотвратит случайное создание файла вместо директории, что может привести к потере данных или ошибкам конфигурации.
2. Копирование директорий (рекурсия)
Для копирования директории и всего ее содержимого (включая все поддиректории и файлы) необходимо использовать рекурсивную опцию:
cp −R source_dir destination_dir
- −R (Recurse): Копирует рекурсивно (включая поддиректории).
- На заметку: В некоторых системах может использоваться строчная -r.
3. Копирование скрытых файлов
Копирование скрытых файлов (начинающихся с точки, например, .bashrc) требует особой внимательности:
Команда |
Что копирует |
|---|---|
cp ∗ /tmp |
Копирует все видимые файлы и директории. Пропускает скрытые файлы. |
cp .∗ /tmp |
Копирует все, что начинается с точки, включая специальные ссылки . (текущая директория) и .. (родительская директория), что обычно приводит к ошибке или нежелательному поведению. |
cp .∗ /tmp (с исключением) |
Наиболее корректный способ: Обычно используется cp .∗ target с последующим игнорированием ошибки о копировании . и … |
- Опция −a (archive): Используется для сохранения исходных свойств файлов (разрешений, владельца, временных меток) при копировании. *Сама по себе -a не решает проблему скрытых файлов с помощью .
Альтернатива для архивирования: Если тебе нужно полностью и безопасно скопировать всё содержимое директории (включая скрытые файлы, ссылки и права), лучше использовать утилиту tar (tape archiver), которая специально предназначена для архивации и копирования полных структур.
4. Права доступа
- Чтение источника: Ты можешь скопировать файл, только если у тебя есть права на чтение исходного файла. Попытка скопировать /etc/shadow (который читается только root) обычным пользователем приведет к Permission denied.
- Запись в назначение: У тебя должны быть права на запись в директорию назначения.
Основные команды для работы с директориями
1. Перемещение: cd и pwd
Команда |
Назначение |
|---|---|
pwd |
Print Working Directory. Показывает текущий абсолютный путь. |
cd |
Change Directory. Используется для смены текущей директории. |
cd /tmp |
Переход в директорию /tmp (использование абсолютного пути). |
cd data |
Переход в директорию data, находящуюся внутри текущей (использование относительного пути). |
2. Создание директорий: mkdir
Команда mkdir (make directory) используется для создания новых директорий.
Важные особенности:
- Права доступа (Permissions):
- Попытка создать директорию в корневой ФС (например, /files) без sudo приведет к Permission denied, так как обычный пользователь не имеет прав на запись в корень (/).
- Абсолютный путь (/files) vs. Относительный путь (data) — всегда следи, в какой части ФС ты пытаешься работать.
- Создание вложенных путей (−p):
- Если ты пытаешься создать директорию files/data, но директория files еще не существует, команда mkdir завершится ошибкой.
- Решение: Используй опцию −p (parents), чтобы автоматически создать все недостающие родительские директории в пути.mkdir −p files/data
- Проверка свойств директории:
- После создания используй ls −ld files (вместо ls -l files) для просмотра свойств самой директории (разрешений, владельца), а не её содержимого.
3. Удаление директорий: rmdir
Команда rmdir (remove directory) используется для удаления директорий.
Важные особенности:
- Только пустые директории: rmdir работает только в том случае, если директория полностью пуста.
- Удаление пути (−p): Ты можешь использовать −p для удаления родительских директорий, если они становятся пустыми после удаления их дочерних элементов:rmdir −p files/dataЭта команда сначала удалит data. Если после этого files станет пустой, она удалит и files.
- Удаление непустых директорий: Для удаления директории, которая не является пустой, используется команда rm −r (которую вы, вероятно, рассмотрите позже). rmdir безопаснее, так как предотвращает случайное удаление данных.
Пути к файлам (Pathnames)
В Linux ты можешь указать местоположение файла или директории двумя основными способами.
1. Абсолютный путь (Absolute Path)
Описание |
Обозначение |
Пример |
|---|---|---|
Путь, который всегда начинается от корневой директории (/). |
Всегда начинается со слэша (/). |
/var/log/messages |
Плюсы: |
Однозначность. Всегда ясно, на какой файл ты ссылаешься, независимо от того, в какой директории ты находишься. |
|
Совет: |
Рекомендуется использовать для важных операций (например, в скриптах), чтобы избежать путаницы и ошибок. |
2. Относительный путь (Relative Path)
Описание |
Обозначение |
Пример |
|---|---|---|
Путь, который отсчитывается от текущей рабочей директории (pwd). |
Не начинается со слэша (/). |
log/messages (сработает, если текущая директория — /var) |
Плюсы: |
Удобство и краткость. Требуется меньше набора текста. |
|
Совет: |
Используется для быстрой навигации и работы с файлами в непосредственной близости от текущего местоположения. |
3. Специальные обозначения в относительных путях
Обозначение |
Что Означает |
Пример (если pwd — /var/cache) |
|---|---|---|
. (точка) |
Текущая директория. |
cp file.txt . (копировать в текущую директорию) |
.. (две точки) |
Родительская директория (на один уровень выше). |
cp passwd .. (копировать файл на уровень /var) |
/ (тильда) |
Домашняя директория текущего пользователя. |
cd /documents (переход в /home/oxana/documents) |
4. Визуализация относительного пути
Предположим, ты находишься в директории: /var/cache/data
- .. переведет тебя в /var/cache
- ../log/messages
- .. переводит в /var/cache.
- ../ переводит из /var/cache в /var.
- log/messages ищет файл в /var/log/messages.
Команда mv (Move)
Команда mv используется для перемещения или переименования файлов и директорий.
1. Основное назначение
Действие |
Синтаксис |
Описание |
|---|---|---|
Переименование |
mv oldname newname |
Если директория назначения совпадает с исходной, mv просто переименовывает файл/директорию. |
Перемещение |
mv file destination/ |
Перемещает файл из текущего местоположения в destination/ (удаляет из старого и создает в новом). |
Ключевая особенность: Перемещение и переименование — это, по сути, одна и та же операция в рамках одной файловой системы.
2. Привилегии и логика перемещения
Перемещение файла — это не просто его копирование, а изменение его местоположения в файловой системе. Это требует определенных прав:
- Право на запись в директорию-источник: Чтобы забрать файл из исходной директории, тебе нужны права на запись (write permissions) в эту исходную директорию.
- Пример: Попытка mv /etc/passwd file завершится ошибкой Permission denied, потому что у обычного пользователя нет права на запись в директорию /etc, а следовательно, он не может удалить оттуда файл.
- Право на запись в директорию-назначение: Тебе также нужны права на запись в директорию, куда ты перемещаешь файл.
Удаление файлов и директорий (rm)
1. Удаление пустых директорий
- rmdir (remove directory): Используется только для удаления пустых директорий. Если директория содержит файлы или другие директории, rmdir выдаст ошибку.
2. Универсальное удаление (rm)
Команда rm (remove) используется для удаления файлов и директорий, которые не являются пустыми.
Команда |
Опция |
Назначение |
|---|---|---|
rm filename |
(Нет) |
Удаляет указанный файл. |
rm −i filename |
-i (interactive) |
Запрашивает подтверждение перед удалением каждого файла. Повышает защиту от случайного удаления. |
rm −f filename |
-f (force) |
Форсирует удаление, не запрашивая подтверждения. Используй осторожно! |
rm −r directory |
-r (recursive) |
Удаляет директорию вместе со всем ее содержимым (вложенными файлами и поддиректориями). Обязательно для непустых директорий. |
3. Самая опасная команда: rm −rf
Комбинация rm −rf является самой сильной командой для удаления, так как она рекурсивно удаляет все содержимое (-r) и делает это без запроса подтверждения (-f).
- Применение: Используется, когда ты абсолютно уверена в том, что удаляешь, и тебе нужно удалить непустую директорию.rm −rf target_dir
- Легендарная команда-убийца:sudo rm −rf / −−no−preserve−rootЭто команда, которую нельзя запускать.
- sudo дает права root.
- rm −rf удаляет рекурсивно и без подтверждения.
- / (слэш) указывает на корневую директорию — то есть всю файловую систему.
- −−no−preserve−root отключает встроенную защиту Linux, которая по умолчанию блокирует rm -rf /.
- Результат: Необратимое уничтожение всей операционной системы.
4. Полезные советы по работе в терминале
- Ctrl C: Универсальное сочетание клавиш для прерывания запущенной команды (например, для остановки rm -i file*).
- Ctrl U: Удаляет всю строку ввода, на которой находится курсор. Очень удобно, если ты вдруг начала набирать опасную команду вроде вышеуказанной.
—
Данный материал был переведён с английского в рамках курса Linux Foundation Certified System Administrator (LFCS): Unit 1

