Перейти к основному содержимому

Работа с файлами, каталогами и процессами

Разработчику Архитектору

Файловая система и каталоги

Что такое файловая система

Файловая система — это метод организации хранения данных на носителе информации, обеспечивающий упорядоченное размещение файлов и каталогов.

В системах семейства UNIX файловая система имеет древовидную структуру, где корневой элемент обозначается символом / (слэш). Все остальные файлы и директории находятся под этим корневым элементом.

Каталог (или директория) — это специальная запись в файловой системе, содержащая ссылки на другие файлы и каталоги. Каталог позволяет группировать связанные данные, упрощая их поиск и управление ими. Каждый файл в системе имеет уникальный путь, состоящий из последовательности имен каталогов, ведущих от корня к целевому файлу.

Путь к файлу может быть абсолютным или относительным. Абсолютный путь начинается с корневого каталога / и описывает полный маршрут до файла. Относительный путь описывает расположение файла относительно текущей рабочей директории.

/home/user/documents/report.txt

Это абсолютный путь, указывающий на файл report.txt, находящийся в директории documents внутри домашней директории пользователя user.

documents/report.txt

Это относительный путь, указывающий на тот же файл, если текущая рабочая директория — /home/user.

Иерархическая структура UNIX

Стандартная файловая система UNIX имеет четкую иерархию, где каждый каталог выполняет определенную функцию:

КаталогНазначение
/Корневой каталог, начало всей структуры
/binБинарные исполняемые файлы, необходимые для работы системы
/bootФайлы, необходимые для загрузки ядра системы
/devСпециальные файлы устройств (устройства ввода-вывода)
/etcКонфигурационные файлы системы
/homeДомашние директории обычных пользователей
/libБиблиотеки, необходимые для выполнения программ из /bin и /usr/bin
/lost+foundКаталог для восстановления поврежденных файлов при проверке диска
/mediaТочки монтирования съемных носителей
/mntТочки монтирования временных файловых систем
/optДополнительные пакеты программного обеспечения сторонних производителей
/procПсевдофайловая система, предоставляющая информацию о процессах и ядре
/rootДомашняя директория суперпользователя root
/runИнформация о состоянии системы во время работы
/sbinСистемные бинарные файлы, предназначенные для администраторов
/srvДанные сервисов, предоставляемых системой
/sysПсевдофайловая система, предоставляющая информацию об оборудовании
/tmpВременные файлы, очищаемые при перезагрузке
/usrПользовательские программы и данные
/varПеременные данные, такие как логи, базы данных, спам-фильтры

Символы пути и специальные обозначения

Bash использует специальные символы для упрощения работы с путями:

  • . (точка) — обозначает текущую директорию;
  • .. (две точки) — обозначает родительскую директорию;
  • ~ (тильда) — обозначает домашнюю директорию текущего пользователя;
  • $HOME — переменная окружения, содержащая путь к домашней директории;
  • / (слэш) — разделитель элементов пути.

Пример использования специальных символов:

cd .. # Перейти в родительскую директорию
cd ../.. # Перейти в директорию выше родительской
cd ~/docs # Перейти в директорию docs внутри домашней директории
cd ./script # Перейти в директорию script внутри текущей директории

Операции с файлами и каталогами

Создание каталогов

Команда mkdir (make directory) создает новые каталоги. Она поддерживает создание нескольких директорий одновременно и рекурсивное создание вложенных структур.

mkdir project
mkdir -p project/src/project/tests

Первая команда создает один каталог project в текущей директории. Вторая команда создает всю цепочку каталогов project/src/project/tests, создавая отсутствующие промежуточные уровни благодаря флагу -p (parents).

Удаление каталогов

Команда rmdir удаляет только пустые каталоги. Для удаления непустых директорий используется команда rm с флагом -r (recursive).

rmdir empty_folder
rm -rf unwanted_directory

Первая команда удалит каталог empty_folder, если он пуст. Вторая команда удалит каталог unwanted_directory вместе со всем его содержимым без дополнительных подтверждений благодаря флагу -f (force). Будьте осторожны с этой командой, так как удаление необратимо.

Переименование и перемещение

Команда mv (move) используется для переименования файлов и каталогов, а также для их перемещения в другие директории.

mv old_name.txt new_name.txt
mv file.txt /home/user/documents/
mv folder1 folder2

Первая команда переименует файл old_name.txt в new_name.txt. Вторая команда переместит файл file.txt в директорию documents. Третья команда переименует каталог folder1 в folder2.

Копирование файлов и каталогов

Команда cp (copy) создает копии файлов и каталогов. Для копирования директорий требуется использование флага -r (recursive).

cp source.txt backup.txt
cp -r source_dir backup_dir
cp -r source_dir /home/user/documents/

Первая команда копирует файл source.txt в файл backup.txt. Вторая команда копирует весь каталог source_dir в backup_dir. Третья команда копирует содержимое source_dir в директорию documents.

Просмотр содержимого каталога

Команда ls (list) выводит список файлов и каталогов в текущей директории или указанном пути.

ls
ls -l
ls -a
ls -lh
ls -R

Первая команда выводит краткий список файлов. Вторая команда показывает подробную информацию о каждом файле (права доступа, владелец, размер, дата изменения). Третья команда показывает скрытые файлы (те, которые начинаются с точки). Четвертая команда показывает размеры файлов в удобочитаемом формате (КБ, МБ, ГБ). Пятая команда рекурсивно выводит содержимое всех вложенных каталогов.

Смена рабочей директории

Команда cd (change directory) меняет текущую рабочую директорию.

cd /home/user
cd ..
cd ~
cd -

Первая команда переходит в директорию /home/user. Вторая команда переходит в родительскую директорию. Третья команда переходит в домашнюю директорию. Четвертая команда возвращает в предыдущую директорию.

Создание и редактирование файлов

Команда touch создает пустой файл или обновляет метаданные существующего файла (время изменения).

touch new_file.txt
touch file1.txt file2.txt file3.txt

Первая команда создает файл new_file.txt. Вторая команда создает три файла сразу.

Редактирование файлов можно выполнять с помощью текстовых редакторов, таких как nano, vim или emacs.

nano document.txt
vim config.ini

Эти команды открывают соответствующие файлы в указанных редакторах.


Управление правами доступа и владением

Права доступа в UNIX

Каждый файл и каталог в системе UNIX имеют набор прав доступа, определяющих, кто и какие действия может выполнять с объектом. Права делятся на три категории:

  1. Владелец (owner) — пользователь, создавший файл;
  2. Группа (group) — группа пользователей, к которой принадлежит файл;
  3. Остальные (others) — все остальные пользователи системы.

Для каждой категории существуют три типа прав:

  • Чтение (read, r) — возможность читать содержимое файла или перечислять содержимое каталога;
  • Запись (write, w) — возможность изменять содержимое файла или создавать/удалять файлы в каталоге;
  • Исполнение (execute, x) — возможность запускать файл как программу или переходить в каталог.

Права отображаются в виде десятизначной строки, например: -rw-r--r--.

СимволЗначение
-Обычный файл
dКаталог
lСсылка
cПосимвольное устройство
bБлочное устройство
sСокет
rПраво чтения
wПраво записи
xПраво исполнения
sSet UID/GID бит
tSticky бит

Пример интерпретации прав -rwxr-xr--:

  • Владелец имеет права на чтение, запись и исполнение (rwx);
  • Группа имеет права на чтение и исполнение (r-x);
  • Остальные имеют только право на чтение (r--).

Изменение прав доступа

Команда chmod (change mode) изменяет права доступа к файлам и каталогам. Она поддерживает два синтаксиса: символический и числовой.

Символический синтаксис использует буквы для обозначения категорий и операций:

chmod u+r file.txt # Добавить право чтения владельцу
chmod g-w file.txt # Убрать право записи группе
chmod o+x script.sh # Добавить право исполнения остальным
chmod a=rwx directory # Дать всем права чтения, записи и исполнения

Числовой синтаксис использует цифры для обозначения прав:

  • 4 — чтение (r);
  • 2 — запись (w);
  • 1 — исполнение (x);
  • Комбинация цифр дает сумму прав (например, 7 = 4+2+1 = rwx).
chmod 755 script.sh # Владелец: rwx, Группа: r-x, Остальные: r-x
chmod 644 document.txt # Владелец: rw-, Группа: r--, Остальные: r--
chmod 700 private_file # Только владелец имеет полный доступ

Изменение владельца и группы

Команда chown (change owner) изменяет владельца файла, а команда chgrp (change group) изменяет группу файла.

chown user:group file.txt
chown -R admin /var/www
chgrp developers project/

Первая команда устанавливает владельцем пользователя user, а группой — group. Вторая команда рекурсивно меняет владельца всех файлов в директории /var/www на admin. Третья команда меняет группу директории project на developers.


Поиск и фильтрация файлов

Поиск файлов по имени

Команда find — мощный инструмент для поиска файлов и каталогов по различным критериям.

find . -name "*.txt"
find /home -type f -size +10M
find /var/log -mtime -7
find /opt -user root -perm 755

Первая команда ищет все файлы с расширением .txt в текущей директории и ее поддиректориях. Вторая команда находит файлы размером более 10 МБ в директории /home. Третья команда находит файлы, измененные менее 7 дней назад в директории /var/log. Четвертая команда находит файлы, принадлежащие пользователю root с правами доступа 755 в директории /opt.

Фильтрация результатов поиска

Результаты поиска можно фильтровать и обрабатывать с помощью других команд.

find . -name "*.log" | xargs rm
find . -type d -empty -delete
find /tmp -name "temp_*" -exec ls -la {} \;

Первая команда находит все файлы с расширением .log и удаляет их. Вторая команда находит все пустые каталоги и удаляет их. Третья команда находит файлы, начинающиеся с temp_ в директории /tmp, и выводит их подробную информацию.

Поиск содержимого файлов

Команда grep ищет текст внутри файлов.

grep "error" *.log
grep -r "function" /src
grep -i "warning" /var/log/syslog
grep -n "TODO" code.py

Первая команда ищет строку error во всех файлах с расширением .log в текущей директории. Вторая команда рекурсивно ищет слово function в директории /src. Третья команда ищет слово warning в файле /var/log/syslog без учета регистра. Четвертая команда ищет слово TODO в файле code.py и показывает номера строк, где оно встречается.


Управление процессами

Что такое процесс

Процесс — это экземпляр выполняющейся программы. Каждая программа, запущенная в системе, становится процессом, который получает уникальный идентификатор (PID). Процессы могут взаимодействовать друг с другом, потреблять ресурсы системы (процессорное время, память, дисковое пространство) и управляться оператором.

Просмотр активных процессов

Команда ps (process status) отображает информацию о процессах.

ps aux
ps -ef
ps -u username
ps -p PID

Первая команда показывает все процессы всех пользователей с подробной информацией. Вторая команда показывает все процессы в формате, удобном для обработки скриптами. Третья команда показывает процессы конкретного пользователя. Четвертая команда показывает информацию о процессе с указанным PID.

Мониторинг процессов в реальном времени

Команда top отображает процессы в режиме реального времени с возможностью сортировки и фильтрации.

top
top -u username
top -H -p PID

Первая команда запускает интерфейс мониторинга со всеми процессами. Вторая команда фильтрует вывод по конкретному пользователю. Третья команда показывает только потоки (threads) указанного процесса.

Команда htop — улучшенная версия top с цветным интерфейсом и поддержкой мыши.

htop

Управление процессами

Команда kill отправляет сигналы процессам для их остановки или изменения поведения.

kill PID
kill -9 PID
killall process_name
pkill -u username

Первая команда отправляет сигнал SIGTERM процессу с указанным PID, что является стандартным способом завершения процесса. Вторая команда отправляет сигнал SIGKILL, который принудительно завершает процесс без возможности обработки. Третья команда завершает все процессы с указанным именем. Четвертая команда завершает все процессы, принадлежащие указанному пользователю.

Запуск процессов в фоне

Процессы можно запускать в фоновом режиме, добавляя амперсанд & в конец команды.

sleep 100 &
python script.py &

Эти команды запускают процессы в фоне, позволяя продолжать работу в терминале.

Для управления фоновыми процессами используются команды:

jobs # Показать список фоновых процессов
fg %1 # Вернуть процесс №1 на передний план
bg %1 # Продолжить выполнение процесса №1 в фоне
ctrl+z # Приостановить процесс
kill %1 # Завершить фоновый процесс

Планировщик задач cron

Система cron позволяет планировать выполнение задач в определенное время.

Редактирование расписания задач:

crontab -e

Формат записи расписания:

минута час день_месяца месяц день_недели команда

Примеры расписаний:

0 * * * * /usr/bin/backup.sh # Выполнять каждую минуту
30 2 * * * /usr/bin/cleanup.sh # Выполнять ежедневно в 02:30
0 0 1 * * /usr/bin/monthly.sh # Выполнять 1-го числа каждого месяца
0 8 * * 1-5 /usr/bin/workday.sh # Выполнять в будние дни в 08:00
*/5 * * * * /usr/bin/check.sh # Выполнять каждые 5 минут

Установка и удаление задач:

crontab -l # Показать текущее расписание
crontab -r # Удалить текущее расписание

Перенаправление ввода-вывода и конвейеры

Перенаправление вывода

Команды позволяют перенаправлять вывод в файлы или другие команды.

command > output.txt # Перенаправить вывод в файл (заменить содержимое)
command >> output.txt # Перенаправить вывод в файл (добавить в конец)
command < input.txt # Прочитать ввод из файла
command 2> error.log # Перенаправить ошибки в файл
command > output.txt 2>&1 # Перенаправить вывод и ошибки в один файл

Конвейеры (pipes)

Конвейер | передает вывод одной команды на вход другой.

ps aux | grep python
cat log.txt | grep error | wc -l
ls -la | sort -k9
find . -name "*.txt" | xargs cat

Первая команда находит все процессы Python. Вторая команда считает количество строк с ошибкой в логе. Третья команда сортирует список файлов по девятому полю. Четвертая команда читает содержимое всех найденных текстовых файлов.

Использование переменных окружения

Переменные окружения хранят информацию о системе и среде выполнения.

echo $HOME
echo $PATH
echo $USER
export MY_VAR="значение"
MY_VAR="значение" command

Первые три команды выводят значения переменных окружения. Четвертая команда создает новую переменную MY_VAR с постоянным значением. Пятая команда создает переменную только для выполнения конкретной команды.


Практические примеры скриптов

Пример 1: Резервное копирование

#!/bin/bash

SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup/documents"
DATE=$(date +%Y-%m-%d)
BACKUP_FILE="documents_${DATE}.tar.gz"

if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
fi

tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" "$SOURCE_DIR"
echo "Резервная копия создана: ${BACKUP_FILE}"

Пример 2: Мониторинг свободного места

#!/bin/bash

THRESHOLD=90

USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')

if [ "$USAGE" -gt "$THRESHOLD" ]; then
echo "Внимание! Занято больше ${THRESHOLD}% места!"
df -h /
else
echo "Свободного места достаточно."
fi

Пример 3: Автоматическое удаление старых файлов

#!/bin/bash

DIR="/tmp/cache"
DAYS=7

find "$DIR" -type f -mtime +$DAYS -exec rm -v {} \;
echo "Старые файлы в $DIR удалены."

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).