1. Права на файлы — строка ls -la
Запустите ls -la в любой директории. Первая колонка — строка из 10 символов:
-rwxr-xr-- 1 alice devs 1234 Jun 11 10:00 script.sh
drwxr-xr-x 2 alice devs 4096 Jun 11 09:00 mydir
Структура строки прав
| Позиция | Значение | Пример |
|---|---|---|
| Символ 1 | Тип файла: - файл, d директория, l симлинк |
- |
| Символы 2–4 | Права владельца (user): r w x | rwx |
| Символы 5–7 | Права группы (group): r w x | r-x |
| Символы 8–10 | Права остальных (others): r w x | r-- |
Типы прав
- r (Read) — чтение файла / просмотр списка директории
- w (Write) — запись в файл / создание/удаление файлов в директории
- x (Execute) — выполнение файла / переход в директорию (
cd) - - (minus) — право отсутствует
2. Специальные биты: SUID, SGID, sticky
Кроме rwx существуют три специальных бита — они меняют поведение при запуске или доступе к директории.
SUID (Set User ID)
Обозначается s вместо x у владельца: -rwsr-xr-x. Файл запускается с правами его владельца, а не того, кто запустил. Пример: /usr/bin/passwd — запускается с правами root, чтобы обновить /etc/shadow.
SGID (Set Group ID)
Обозначается s у группы: -rwxr-sr-x. Файлы, созданные в директории с SGID, наследуют группу директории — удобно для общих папок команды.
Sticky bit
Обозначается t у остальных: drwxrwxrwt. Только владелец файла может его удалить, даже если директория доступна для записи всем. Классический пример: /tmp.
ls -la /tmp
# drwxrwxrwt 10 root root 4096 Jun 11 10:00 /tmp
# ^ sticky bit
3. Цвета файлов в терминале
Команда ls --color (или просто ls с цветами по умолчанию) использует цвета для разных типов:
- Зелёный — исполняемые файлы (имеют бит x)
- Белый / серый — обычные файлы
- Синий — директории
- Голубой — символические ссылки (симлинки)
- Красный — архивы (.tar, .gz, .zip, .rpm)
4. chmod — числовой режим
Каждое право — это число: 4 = r, 2 = w, 1 = x. Сумма трёх чисел — права одной группы. Три цифры = права для владельца / группы / остальных.
| Число | rwx-запись | Значение |
|---|---|---|
| 7 | rwx | 4+2+1: чтение + запись + выполнение |
| 6 | rw- | 4+2: чтение + запись |
| 5 | r-x | 4+1: чтение + выполнение |
| 4 | r-- | 4: только чтение |
| 0 | --- | нет прав |
Типичные значения
chmod 755 script.sh # rwxr-xr-x: владелец всё; группа/остальные — читать+запускать
chmod 644 file.txt # rw-r--r--: владелец читает+пишет; остальные — только читают
chmod 600 private.key # rw-------: владелец читает+пишет; никто больше
chmod 700 mydir # rwx------: директория только для владельца
chmod -R 755 mydir # рекурсивно для всей директории
chmod 777 file даёт права на чтение, запись и исполнение всем пользователям системы. Это серьёзная дыра в безопасности. Никогда не применяйте chmod 777 к конфигурационным файлам, SSH-ключам, файлам на продакшн-сервере. Если хотите дать права только себе — используйте chmod 600 или chmod 700.Для приватного SSH-ключа используйте:
chmod 600 ~/.ssh/id_rsa
5. chmod — буквенный режим
Буквенный синтаксис: chmod КТО ДЕЙСТВИЕ ПРАВА файл
| КТО | ДЕЙСТВИЕ | ПРАВА |
|---|---|---|
u — владелец (user)g — группа (group)o — остальные (others)a — все (all) |
+ — добавить- — убрать= — установить точно |
r — чтениеw — записьx — выполнение |
chmod u+x script.sh # добавить владельцу право на выполнение
chmod go-w file.txt # убрать у группы и остальных право на запись
chmod a+x script.sh # добавить право выполнения всем
chmod +x script.sh # то же самое (a подразумевается)
chmod u=rw,go=r file.txt # точно установить: владелец rw, группа/остальные r
chmod o= file.txt # убрать все права у остальных
6. Bash-скрипты: shebang и структура
Bash-скрипт — текстовый файл с набором команд Bash (Bourne Again SHell). Расширение .sh необязательно, но помогает ориентироваться. Главное — первая строка скрипта.
Shebang
Первая строка #!/bin/bash называется shebang (или hashbang). Она сообщает системе, каким интерпретатором запускать файл. #! — специальная последовательность; /bin/bash — путь к интерпретатору.
Комментарии
Строка, начинающаяся с # (кроме shebang), является комментарием и игнорируется при выполнении.
Структура скрипта
script.sh
#!/bin/bash
# Это комментарий — игнорируется при выполнении
name="Andrew"
echo "Hello $name"
date
Переменные
Переменная объявляется без пробелов вокруг =: name="Andrew". Для чтения значения — добавить $ перед именем: $name.
7. Три способа запуска скрипта
# Способ 1: ./script.sh (из текущей директории — ПРАВИЛЬНЫЙ)
chmod +x script.sh
./script.sh
# Способ 2: полный путь (из любой директории)
chmod +x /path/to/script.sh
/path/to/script.sh
# Способ 3: bash script.sh (обходит права на выполнение — не требует chmod +x)
bash script.sh
bash script.sh запускает скрипт, даже если у него нет бита x. Это создаёт ложное ощущение, что скрипт работает — на самом деле вы вызываете интерпретатор, а не сам файл. В продакшн-окружении предпочтительны способы 1 и 2.
8. Смена владельца и группы
chown alice file.txt # сменить владельца
chown alice:devs file.txt # сменить владельца и группу
chgrp devs file.txt # сменить только группу
chown -R alice:devs mydir/ # рекурсивно
set -euo pipefail в начале bash-скрипта — современный best practice безопасности. -e прерывает выполнение при ошибке, -u запрещает необъявленные переменные, -o pipefail передаёт код ошибки через конвейер.
rm -rf путь удаляет файлы и директории необратимо, без корзины. Это одна из самых опасных команд Linux. Особая опасность — пустая переменная в пути: если переменная VAR не задана, команда rm -rf $VAR/data превращается в rm -rf /data и уничтожает системный каталог.Экстремальный пример:
rm -rf $VAR/ при пустом VAR → rm -rf / — удаление всей файловой системы. Всегда проверяйте путь перед Enter. Всегда проверяйте, что переменная не пуста.