Работа с файлами, каталогами и процессами
Файловая система и каталоги
Что такое файловая система
Файловая система — это метод организации хранения данных на носителе информации, обеспечивающий упорядоченное размещение файлов и каталогов.
В системах семейства 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 имеют набор прав доступа, определяющих, кто и какие действия может выполнять с объектом. Права делятся на три категории:
- Владелец (owner) — пользователь, создавший файл;
- Группа (group) — группа пользователей, к которой принадлежит файл;
- Остальные (others) — все остальные пользователи системы.
Для каждой категории существуют три типа прав:
- Чтение (read,
r) — возможность читать содержимое файла или перечислять содержимое каталога; - Запись (write,
w) — возможность изменять содержимое файла или создавать/удалять файлы в каталоге; - Исполнение (execute,
x) — возможность запускать файл как программу или переходить в каталог.
Права отображаются в виде десятизначной строки, например: -rw-r--r--.
| Символ | Значение |
|---|---|
- | Обычный файл |
d | Каталог |
l | Ссылка |
c | Посимвольное устройство |
b | Блочное устройство |
s | Сокет |
r | Право чтения |
w | Право записи |
x | Право исполнения |
s | Set UID/GID бит |
t | Sticky бит |
Пример интерпретации прав -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 удалены."
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История развития оболочек представляет собой непрерывный процесс эволюции технологий. Каждая новая версия решала конкретные проблемы своих предшественников и добавляла новые возможности. Стандартные утилиты командной строки включают — Файловые операции — ls, cd, mkdir, rm, cp, mv, chmod, chown, Текстовая обработка — cat, grep, sed, awk, sort, uniq, cut, head, tail, Системная… Примеры переменных окружения — HOME — домашняя директория пользователя, PATH — список директорий для поиска исполняемых файлов, USER — имя текущего пользователя, PWD — текущая рабочая директория Кавычки, точки, запятые, скобки и прочие знаки препинания. Язык Bash предоставляет богатый набор средств для управления логикой выполнения скрипта. Эти конструкции позволяют принимать решения на основе условий и повторять действия многократно. Оболочка… Встроенная команда — это функция, реализованная непосредственно внутри процесса интерпретатора командной строки. Оболочка выполняет такие команды без создания отдельного дочернего процесса. Код… Подстановка значений — это механизм, при котором оболочка заменяет имя переменной на её фактическое значение перед выполнением команды. Существует несколько способов расширения переменных, каждый из… Bash — это язык командной оболочки, который обеспечивает взаимодействие пользователя с операционной системой. Его главная сила заключается не только в выполнении отдельных команд, но и в возможности… Локальная переменная в Bash — это переменная, чья область видимости ограничена телом функции. Такая переменная не влияет на глобальные переменные с тем же именем, существующие вне функции.… Обработка ошибок в Bash базируется на нескольких основных подходах. Выбор метода зависит от контекста задачи и требований к надежности скрипта. Программа htop представляет собой улучшенную версию стандартной утилиты top. Она предлагает графический интерфейс с возможностью прокрутки списка процессов, цветового кодирования и интерактивного… Гайд по установке и настройке с написанием первой программы и её запуском.История оболочки Bash
Экосистема скриптов и автоматизации на Bash
Основы языка Bash
Синтаксис и специальные символы в Bash
Ключевые слова и зарезервированные конструкции
Встроенные команды и функции оболочки
Переменные и подстановка значений
Условные операторы и циклы в Bash
Функции и локальные переменные
Обработка ошибок и коды возврата
Популярные утилиты и примеры скриптов
Первая программа на Bash