Урок 5 из 8 · 25 мин · обновлено

Как устроен Linux: файлы, права, процессы и службы

Как устроена файловая система Linux и где что лежит, как работают пользователи, группы и права доступа rwx, что такое процессы и как их смотреть и останавливать, как управлять службами через systemctl и где читать журналы.

Одно дерево папок

В Windows есть диски C:, D:. В Linux — одно дерево, которое начинается с корня /. Все диски и устройства подключаются в его ветки.

Папка Что там
/etc настройки системы и служб
/home домашние папки пользователей: /home/anna
/root домашняя папка администратора
/var/log журналы — логи системы и программ
/var/www часто — файлы сайтов
/tmp временные файлы, обычно очищаются при перезагрузке
/usr/bin программы

Знать это дерево нужно, чтобы сразу понимать, где искать: сломался веб-сервер — смотрим его настройки в /etc и журналы в /var/log.

Пользователи и группы

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

  • root — администратор с полными правами. Под ним можно сломать что угодно одной командой, поэтому постоянно под root не работают.
  • Обычный пользователь работает со своими файлами, а для административных действий использует sudo.
Терминал
whoami                     # под каким пользователем я работаю
id                         # мои группы
sudo adduser ivan          # создать пользователя
sudo usermod -aG sudo ivan # дать пользователю право использовать sudo

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

Команда ls -l показывает права:

Текст
-rw-r--r-- 1 anna staff  1024 окт 21 10:00 report.txt
drwxr-x--- 2 anna staff  4096 окт 21 10:00 private

Первый символ: - — файл, d — папка. Дальше три тройки прав:

  • владелец — anna;
  • группа — staff;
  • остальные — все прочие.

Буквы: r — читать, w — изменять, x — выполнять файл или входить в папку. Прочерк — права нет. Файл report.txt: владелец читает и пишет, остальные только читают. Папка private: владелец всё, группа может войти и прочитать, остальные — ничего.

Права меняют командой chmod:

Терминал
chmod u+x backup.sh     # владельцу — право запускать
chmod o-r report.txt    # остальным — убрать право чтения
chmod 640 report.txt    # числом: rw- для владельца, r-- для группы, --- для остальных

В числовой записи r = 4, w = 2, x = 1, а цифры складывают: 6 = 4 + 2 — чтение и запись.

Процессы

Каждая запущенная программа — процесс со своим номером, PID.

Терминал
ps aux             # все процессы
top                # процессы в реальном времени: кто грузит процессор и память, выход — q
kill 1234          # попросить процесс с номером 1234 завершиться
kill -9 1234       # завершить принудительно, если не слушается

Службы и журналы

Служба — программа, которая работает в фоне постоянно: веб-сервер, SSH, база данных. В большинстве современных дистрибутивов ими управляет systemd:

Терминал
sudo systemctl status nginx    # состояние службы
sudo systemctl start nginx     # запустить
sudo systemctl stop nginx      # остановить
sudo systemctl restart nginx   # перезапустить, например после изменения настроек
sudo systemctl enable nginx    # запускать автоматически при загрузке
journalctl -u nginx            # журнал службы
journalctl -u nginx -f         # журнал в реальном времени

Когда служба не работает, порядок почти всегда такой: systemctl status — что с ней, journalctl — почему.

Попробуйте сами. Создайте скрипт hello.sh, который выводит дату и имя пользователя. Попробуйте запустить его, посмотрите на ошибку, дайте право на выполнение и запустите снова. Затем закройте доступ к скрипту для всех, кроме себя.

Решение
Терминал
cd ~
echo 'echo "Сейчас: $(date), пользователь: $(whoami)"' > hello.sh
./hello.sh            # Permission denied — нет права на выполнение
ls -l hello.sh        # -rw-r--r-- — права x нет
chmod u+x hello.sh
./hello.sh            # теперь работает
chmod 700 hello.sh    # rwx для владельца, ничего для остальных
ls -l hello.sh        # -rwx------

Ошибка Permission denied — одна из самых частых в Linux. Первым делом проверяйте права командой ls -l и пользователя — командой whoami.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Где в Linux обычно лежат файлы настроек системы и служб?

  2. Что означает запись -rw-r----- у файла?

  3. Служба nginx должна запускаться автоматически после перезагрузки сервера. Какая команда?