В Linux нет привычных по Windows букв дисков (C:, D:) — вся файловая система представляет собой единое дерево, начинающееся с корня /. Даже разные физические диски и разделы просто монтируются (подключаются) в определённые точки этого дерева.
Расположение системных файлов стандартизировано документом FHS (Filesystem Hierarchy Standard) — это позволяет администратору или скрипту предсказуемо находить нужные файлы независимо от дистрибутива.
Каталог — это специальный файл, который хранит перечень имен файлов входящих в него.
Особые каталоги:
/) Корневой каталог — это единственный каталог который не входит ни в один другой каталог.~) Домашний каталог пользователя — у каждого пользователя свой домашний каталог (у суперпользователя — /root, у остальных пользователей — как правило это подкаталог в /home)..) Текущий рабочий каталог — у каждого процесса свой...) Родительский каталог — у каждого каталога свой.Путь к файлу:
/ (cd /)~ (cd ~/../../etc). (cd ./etc).. (cd ../../etc)cd etc)Для перемещения по файловой системе используйте команды:
pwd — показать текущий каталог (сокращение от path to working directory)cd — сменить текущий каталог (сокращение от change directory)ls — перечень файлов в каталоге (сокращение от list files)Ключевые директории верхнего уровня:
/bin, /sbin — Основные исполняемые файлы (в современных дистрибутивах часто симлинки на /usr/bin, /usr/sbin)/etc- Конфигурационные файлы системы и служб (текстовые, читаемые человеком)/home — Домашние директории пользователей/root — Домашняя директория суперпользователя root (отдельно от /home по историческим и практическим причинам)/var — Изменяемые данные: логи (/var/log), очереди, кэши, данные баз данных/usr — Основная часть пользовательского ПО и библиотек (несмотря на название, не имеет отношения к «users»)/opt — ПО сторонних производителей, устанавливаемое отдельно от системного пакетного менеджера/mnt, /media — Точки монтирования внешних и временных носителей/dev — Файлы устройств (следствие философии «всё есть файл»)/proc, /sys — Виртуальные файловые системы: информация о процессах и ядре в реальном времени, физически не хранятся на диске
/proc/cpuinfo — информация о процессоре/proc/meminfo — информация об ОЗУ/tmp — Временные файлы, обычно очищается при перезагрузке/run — Временные файлы текущего сеанса работыМонтирование (Mounting) — это процесс подключения изолированной файловой системы устройства (жесткого диска, флешки, сетевого диска) к единому дереву каталогов операционной системы Linux.
Точка монтирования (Mount point) — обычный, заранее созданный пустой каталог в существующем дереве файлов, через который открывается доступ к подключенному устройству.
Монтируемое устройство — логический раздел накопителя или образ, содержащий файловую систему (например, /dev/sdb1 — первый раздел на втором жестком диске).
Монтируемые устройства могут быть идентифицированы по:
/dev/sdb1)Монтирование файловой системы:
sudo mount [опции] <что_монтируем> <куда_монтируем>
Размонтирование файловой системы:
umount <точка монтирования / монтируемое устройство>
Часто используемые опции:
-o ro — смонтировать в режиме «только для чтения» (read-only).-o noexec — запретить запуск исполняемых файлов с этого носителя.-o noatime — отключить фиксацию времени чтения файлов (ускоряет работу, уменьшает износ SSD).-o loop — монтирование файлов-образов (в современных дистрибутивах можно не указывать)./etc/fstab — конфигурационный файл для подключаемых при загрузке файловых систем.
Типы файловых систем:
ext, ext2, ext3, ext4 — родная файловая система Linux.vfat, exfat, ntfs — файловые системы Windows.squashfs, f2fs, erofs — файловые системы Android.btrfs, zfs — файловые системы типа “Copy-on-Write”.Каждый файл в файловой системе Linux — это не «имя + содержимое», а связка двух отдельных сущностей:
Посмотреть номер inode: ls -i. Посмотреть подробные метаданные: stat <файл>.
Inode хранит:
touch).Помимо привычных обычных файлов и директорий, в Linux есть ещё несколько типов, которые видны, например, в первом символе вывода ls -l:
- — Обычный файлd — Директорияl — Символическая ссылкаb — Блочное устройство (диски)c — Символьное устройство (терминалы, /dev/null)s — Сокетp — Именованный канал (named pipe, FIFO)Жёсткая ссылка (hard link) — ещё одна запись в директории, указывающая на тот же самый inode, что и исходный файл. Следствия:
ls -l).Символическая ссылка (symlink) — отдельный файл, который содержит путь к другому файлу (похоже на «ярлык» в Windows). Особенности:
ln файл.txt hardlink.txt # жёсткая ссылка
ln -s файл.txt symlink.txt # символическая ссылка
unlink — отключение ссылки (в современных дистрибутивах можно использовать rm).
У каждого файла есть три категории субъектов и три вида прав:
Категории: владелец (user, u), группа-владелец (group, g), остальные (others, o).
Права:
r (read) — чтение содержимого файла / листинг директории;w (write) — изменение содержимого файла / создание-удаление файлов внутри директории;x (execute) — запуск файла как программы / вход в директорию (cd).Вывод ls -l показывает права строкой из 10 символов, например:
-rwxr-xr--
Первый символ — тип файла (см. таблицу выше), далее по три символа на владельца, группу и остальных.
Права можно задавать двумя способами:
Символьный: chmod u+x file, chmod g-w file, chmod o=r file
Восьмеричный (числовой): каждое право — это бит, сумма даёт число от 0 до 7:
r, 4 — право на чтение файлаw, 2 — право на изменение файлаx, 1 — право на запуск файла или вход в каталогНапример, rwxr-xr-- = владелец 4+2+1=7, группа 4+0+1=5, остальные 4+0+0=4 → chmod 754 file.
Частые комбинации: 644 (обычный файл: владелец читает/пишет, остальные только читают), 755 (исполняемый скрипт или директория), 600 (приватный файл, например SSH-ключ), 777 (все права всем — почти всегда признак неправильной настройки, а не решения проблемы).
chown user file — сменить владельца файла.chown user:group file — сменить владельца и группу одновременно.chgrp group file — сменить только группу.-R — рекурсивно применить к директории и всему содержимому.Важно: сменить владельца файла может только root (обычный пользователь не может «подарить» свой файл другому, чтобы не обходить дисковые квоты).
Помимо базовых rwx, существует три специальных бита, решающих конкретные практические задачи.
Когда установлен, программа при запуске выполняется с правами владельца файла, а не запустившего её пользователя. Классический пример — /usr/bin/passwd: обычный пользователь должен иметь возможность сменить свой пароль, что требует записи в /etc/shadow (доступной только root), поэтому passwd временно выполняется с правами root.
Обозначение: s вместо x в позиции владельца (rwsr-xr-x), восьмеричный вид — дополнительная цифра спереди: 4755.
Риск: SUID-бит на неаккуратно написанной программе — классический вектор эскалации привилегий, поэтому такие файлы стоит держать под особым контролем (find / -perm -4000 для поиска всех SUID-файлов в системе).
На исполняемом файле работает аналогично SUID, но для группы. На директории — более практичный кейс: все новые файлы, создаваемые внутри такой директории, автоматически наследуют группу-владельца директории, а не основную группу создавшего их пользователя. Полезно для общих рабочих папок нескольких пользователей.
Обозначение: s в позиции группы, восьмеричная цифра — 2.
Исторически заставлял ядро держать образ программы в памяти после завершения (актуально для очень старых систем, сегодня не используется по этому назначению). Современное применение — только на директориях: пользователь может удалить внутри такой директории только свои собственные файлы, даже если у него есть право записи в саму директорию. Классический пример — /tmp, куда пишут все пользователи системы.
Обозначение: t в позиции «остальные» (rwxrwxrwt), восьмеричная цифра — 1.
chmod 4755 файл # SUID
chmod 2775 директория # SGID
chmod 1777 директория # sticky bit
Классическая модель прав (владелец/группа/остальные) не позволяет выдать разные права нескольким разным пользователям или группам на один файл — только один владелец и одна группа. ACL (Access Control List) снимает это ограничение, позволяя добавить произвольное число дополнительных правил для конкретных пользователей и групп.
getfacl файл # посмотреть текущие ACL
setfacl -m u:ivan:rw файл # дать пользователю ivan права rw дополнительно
setfacl -m g:devops:rx файл # дать группе devops права rx
setfacl -x u:ivan файл # убрать конкретное правило
При наличии ACL в выводе ls -l после прав появляется знак + (rwxr-xr--+) — сигнал, что стандартных прав недостаточно для полной картины и нужно смотреть getfacl.
ACL — мощный, но более редко используемый инструмент; для большинства задач хватает классических прав и грамотного использования групп. Более тонкая настройка политик доступа (в том числе через ACL и PAM) — тема дополнительного курса по администрированию.
Философия Unix (Unix way) — это базовые принципов создания программного обеспечения, сформировавшийся в ходе разработки операционной системы Unix. Ее суть сводится к созданию простых, специализированных и модульных инструментов, которые можно легко комбинировать между собой.
Главный постулат Unix way сформулировал один из создателей системы, Питер Салус: «Пишите программы, которые делают что-то одно, но делают это хорошо. Пишите программы, которые работают вместе».
Принцип KISS (Keep It Simple, Stupid). Простота имеет приоритет над сложностью. Если задачу можно решить простым способом — её нужно решать просто, даже если это выглядит менее «технологично». Простые программы содержат меньше багов, их легче поддерживать и развивать.
Конвейер (pipe, |) передаёт вывод одной команды на вход другой — так строятся цепочки обработки данных:
cat access.log | grep "404" | wc -l # сколько строк с кодом 404
ps aux | grep nginx # найти процессы nginx
Перенаправление работает с файловыми дескрипторами:
| Оператор | Значение |
|---|---|
> |
Перенаправить stdout в файл (перезаписать) |
>> |
Перенаправить stdout в файл (дописать в конец) |
< |
Подать файл на stdin команды |
2> |
Перенаправить stderr (поток ошибок) отдельно от обычного вывода |
&> |
Перенаправить и stdout, и stderr вместе |
ls нет_такой_директории > out.txt 2> err.txt # обычный вывод и ошибки — в разные файлы
command > /dev/null 2>&1 # полностью подавить весь вывод команды
Огромная часть конфигурации и логов в Linux — обычный текст, поэтому умение быстро фильтровать и обрабатывать текст — базовый повседневный навык.
grep — поиск по содержимому.
grep "error" file.log # найти строки со словом error
grep -i "error" file.log # без учёта регистра
grep -r "TODO" ./src # рекурсивно по директории
grep -v "debug" file.log # инвертировать — показать строки БЕЗ слова
grep -c "error" file.log # посчитать количество совпадений
cut — вырезать подстроку.
cat /etc/passwd | cut -d: -f1
sort — сортировать строки.
uniq — убрать повторяющие строки.
head — показать заголовок файла.
tail — показать конец файла.
sed — потоковый редактор
Чаще всего используется для замены текста «на лету»:
sed 's/old/new/' file.txt # заменить первое вхождение в каждой строке
sed 's/old/new/g' file.txt # заменить все вхождения (global)
sed -i 's/old/new/g' file.txt # изменить файл на месте (-i)
awk — обработка структурированного текста по колонкам
awk воспринимает каждую строку как набор полей (по умолчанию разделённых пробелом) и позволяет обращаться к ним по номеру ($1, $2, …, $0 — вся строка):
awk '{print $1}' file.txt # вывести первую колонку
awk -F: '{print $1}' /etc/passwd # с явным разделителем — имена пользователей
awk '{print $NF}' file.txt # последнее поле в строке (NF — число полей)
Именно связка «конвейеры + grep/sed/awk» — то, что превращает Linux-терминал в мощный инструмент анализа логов и данных без написания отдельной программы.
Операции с файлами:
touch — обновление времени модификации файла / создание пустого файлаrm — удаление (-r, -f)cp — копирование (-r)mv — перемещение / переименование (-r)dd — низкоуровневое копирование данные файлов (для файлов устройств)file — определяет тип файлаstat — метаданные файлаОперации с каталогами:
pushd, popd — переход в другой каталог и возврат обратноmkdir — создание каталоговrmdir — удаление пустых каталоговtree — визуализация структуры, если установленdu -sh — размер директорииПросмотр файлов:
head — первые n строк файла (n=10)tail — последние n строк файла (n=10)less — программа просмотра текстовых файлов (more — старая программа просмотра файлов)Поиск файлов:
find — поиск файлов по критериямиwhich — поиск программы в PATHwhereis — поиск программы и относящихся к ней файловwhatis — информация что делает программаman — текстовая документация по программеinfo — текстовая документация по программеЖесткие и символические ссылки:
ln — создание жестких ссылокln -s — создание символических ссылокunlink — удаление символических ссылок (также можно через rm)Монтирование файловых систем:
mount — подключение файловой системы к дереву каталоговumount — отключение файловой системыchroot — временная смена корневого каталогаmc — файловый менеджер (напоминает Norton Commander)ranger — файловый менеджер (напоминает Finder)vifm — файловый менеджер с комбинациями клавиш из vinnn — файловый менеджерtree — просмотр дерева каталоговlocate — поиск файлов по имени в заранее созданной БД (updatedb — обновление БД с именами файлов)man hier, man chmod, man acl, man grep, man sed, man awk