Глиф Учебники

Урок 3. Файлы и папки в терминале, права доступа

Курс «Ubuntu» · урок 3 из 8 · 5 минут чтения

В Linux одно общее дерево папок, и начинается оно с корня — папки /. Букв дисков, как C: и D: в Windows, нет: второй диск или флешка тоже появляются папкой внутри этого дерева.

Главные папки

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

Свои файлы держите в домашней папке: там у вас полные права, и sudo не нужен.

Пути

Путь — адрес файла в дереве папок.

/ home etc var usr tmp media текущая папка ivan .. log ivan Документы флешка отчёт.txt абсолютный /home/ivan/ Документы/отчёт.txt — от корня / относительный Документы/отчёт.txt — от текущей папки
Абсолютный путь к файлу отчёт.txt начинается с корня /, относительный — с текущей папки /home/ivan, а .. ведёт в папку уровнем выше.

Файлы и папки, имя которых начинается с точки (.bashrc, .ssh), — скрытые: в них обычно лежат настройки. ls их не показывает, ls -a — показывает. Расширение в имени (.txt) в Linux не обязательно: файлы без расширения — обычное дело, особенно у программ и настроек.

Посмотреть

Bash
ls -l
ls -la ~
cat notes.txt
less /etc/services
head -n 5 /etc/passwd
tail -f app.log

Знак * заменяет любые символы: ls *.txt — все файлы с окончанием .txt в текущей папке.

Создать, скопировать, перенести

Bash
mkdir projects
mkdir -p projects/site/css
touch projects/notes.txt
cp projects/notes.txt projects/notes-copy.txt
cp -r projects projects-backup
mv projects/notes-copy.txt projects/old-notes.txt
mv projects/old-notes.txt projects-backup/

cp и mv без предупреждения заменяют файл с тем же именем в месте назначения. Ключ -i заставляет их спрашивать: cp -i notes.txt projects-backup/.

Редактор nano

Текстовые файлы удобно править прямо в терминале, редактором nano:

Bash
nano notes.txt

Внизу экрана — подсказки; знак ^ в них означает Ctrl. Сохранить — Ctrl+O и Enter, выйти — Ctrl+X. Системные файлы открывайте через sudo: sudo nano /etc/hosts, иначе сохранить изменения не получится.

Удалить

Bash
rm notes.txt
rmdir empty-folder
rm -r projects-backup

rm удаляет файлы, rmdir — пустую папку, rm -r — папку со всем содержимым.

У терминала нет корзины: rm удаляет сразу и навсегда. rm -rf к тому же ничего не спрашивает. Одна опечатка — и пропадает всё: rm -rf ~/ tmp (лишний пробел) вместо rm -rf ~/tmp удалит всё в домашней папке. Перед удалением посмотрите тот же путь через ls, а при сомнениях пишите rm -ri — команда спросит про каждый файл. Шаблоны со * тоже сначала проверяйте через ls.

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

У каждого файла есть владелец (пользователь) и группа. Права задаются для трёх сторон: владельца (u, user), группы (g, group) и всех остальных (o, others). Самих прав три:

ПравоДля файлаДля папки
r — чтениечитать содержимоевидеть список файлов
w — записьменять содержимоесоздавать и удалять файлы в ней
x — выполнениезапускать как программузаходить в папку

Права видны в начале строки ls -l, например -rw-r--r-- 1 ivan ivan 1520 … — дальше идут дата изменения и имя файла. Первые десять знаков читаются так:

ЧастьЗначение
-тип: - — файл, d — папка, l — ссылка
rw-владелец может читать и писать
r--группа может только читать
r--остальные могут только читать

После числа ссылок (1) — владелец и группа: ivan ivan.

Права числом

Каждое право — число: r = 4, w = 2, x = 1. Права одной стороны — их сумма: rwx = 7, rw- = 6, r-x = 5, r-- = 4, --- = 0. Три цифры подряд — владелец, группа и остальные:

ЧислоПраваГде встречается
644rw-r--r--обычные файлы
755rwxr-xr-xпапки и программы
600rw-------секретные файлы: ключи, пароли
700rwx------личные папки, например ~/.ssh
- rw- r-- r-- 1 ivan ivan 1520 … notes.txt тип владелец (u) ivan группа (g) ivan остальные (o) все прочие - r w - r - - r - - - файл d папка 4 + 2 + 0 4 + 0 + 0 4 + 0 + 0 числом 6 4 4 r = 4 w = 2 x = 1 - = 0
Права -rw-r--r-- делятся на тип файла и три тройки — владельца, группы и остальных, а сумма r = 4, w = 2 и x = 1 в каждой тройке даёт число 644.

chmod — изменить права

Bash
chmod 644 notes.txt
chmod 600 secret.txt
chmod +x backup.sh
chmod g-w,o-r report.txt

Как это выглядит:

Терминал
$ touch notes.txt
$ stat -c '%A %a %n' notes.txt
-rw-rw-r-- 664 notes.txt
$ chmod 640 notes.txt
$ stat -c '%A %a %n' notes.txt
-rw-r----- 640 notes.txt

stat -c '%A %a %n' печатает права буквами, числом и имя файла. Новые файлы обычного пользователя в Ubuntu получают права 664, новые папки — 775.

Скрипт запускается, только если у него есть право x: после chmod +x backup.sh его можно запустить командой ./backup.sh.

Для папок сайта обычно ставят 755, для файлов — 644. chmod -R 755 сделал бы исполняемыми все файлы подряд, поэтому папки и файлы разделяют командой find:

Bash
find site -type d -exec chmod 755 {} +
find site -type f -exec chmod 644 {} +

Первая команда ставит 755 всем папкам внутри site (вместе с ней самой), вторая — 644 всем файлам.

chown — сменить владельца

Bash
sudo chown ivan notes.txt
sudo chown ivan:www-data notes.txt
sudo chown -R ivan:ivan /mnt/data

Формат — владелец:группа. -R меняет владельца у папки и у всего, что внутри. Отдать файл другому пользователю может только администратор, поэтому нужен sudo.

Не ставьте права 777 (все могут всё): любая программа и любой пользователь компьютера смогут изменить или подменить файл. И не запускайте sudo chmod -R или sudo chown -R для системных папок (/, /usr, /etc): права системных файлов собьются, и перестанет работать даже sudo.

Частые ошибки

Коротко

Проверьте себя

1. Чем mv отличается от cp?
2. Какие права даёт chmod 640 report.txt?
3. Что значит буква d в начале строки ls -l?
4. Что делает команда rm -r old?