Урок 3. Файлы и папки в терминале, права доступа
В Linux одно общее дерево папок, и начинается оно с корня — папки /. Букв дисков, как C: и D: в Windows, нет: второй диск или флешка тоже появляются папкой внутри этого дерева.
Главные папки
| Папка | Что в ней |
|---|---|
/home/ivan | домашняя папка пользователя ivan: документы, загрузки, настройки программ |
/root | домашняя папка администратора root |
/etc | настройки системы и программ — обычные текстовые файлы |
/var/log | журналы (логи) программ и системы |
/usr | установленные программы и их файлы |
/tmp | временные файлы, папка очищается при перезагрузке |
/media/ivan | флешки и диски, подключённые на рабочем столе |
/mnt | место для дисков, подключённых вручную |
Свои файлы держите в домашней папке: там у вас полные права, и sudo не нужен.
Пути
Путь — адрес файла в дереве папок.
- Абсолютный путь начинается с
/и работает откуда угодно:/home/ivan/Документы/отчёт.txt. - Относительный путь отсчитывается от текущей папки. Если вы в
/home/ivan, тот же файл —Документы/отчёт.txt. .— текущая папка,..— папка уровнем выше,~— домашняя папка.
Файлы и папки, имя которых начинается с точки (.bashrc, .ssh), — скрытые: в них обычно лежат настройки. ls их не показывает, ls -a — показывает. Расширение в имени (.txt) в Linux не обязательно: файлы без расширения — обычное дело, особенно у программ и настроек.
Посмотреть
ls -l
ls -la ~
cat notes.txt
less /etc/services
head -n 5 /etc/passwd
tail -f app.logls -l— подробный список: права, владелец, размер, дата;ls -lh— размеры в КБ и МБ.cat— выводит файл целиком, удобно для коротких файлов.less— листает длинный файл: стрелки, пробел, поиск/, выходq.headиtail— первые и последние строки файла.tail -fпоказывает новые строки по мере появления — так следят за журналом программы (выход —Ctrl+C).
Знак * заменяет любые символы: ls *.txt — все файлы с окончанием .txt в текущей папке.
Создать, скопировать, перенести
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/mkdir— создать папку; с ключом-p— сразу всю цепочку вложенных папок и без ошибки, если папка уже есть.touch— создать пустой файл.cp— скопировать файл; папку — с ключом-r, со всем содержимым.mv— перенести или переименовать: в Linux это одна и та же операция.
cp и mv без предупреждения заменяют файл с тем же именем в месте назначения. Ключ -i заставляет их спрашивать: cp -i notes.txt projects-backup/.
Редактор nano
Текстовые файлы удобно править прямо в терминале, редактором nano:
nano notes.txtВнизу экрана — подсказки; знак ^ в них означает Ctrl. Сохранить — Ctrl+O и Enter, выйти — Ctrl+X. Системные файлы открывайте через sudo: sudo nano /etc/hosts, иначе сохранить изменения не получится.
Удалить
rm notes.txt
rmdir empty-folder
rm -r projects-backuprm удаляет файлы, 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. Три цифры подряд — владелец, группа и остальные:
| Число | Права | Где встречается |
|---|---|---|
644 | rw-r--r-- | обычные файлы |
755 | rwxr-xr-x | папки и программы |
600 | rw------- | секретные файлы: ключи, пароли |
700 | rwx------ | личные папки, например ~/.ssh |
chmod — изменить права
chmod 644 notes.txt
chmod 600 secret.txt
chmod +x backup.sh
chmod g-w,o-r report.txt- Числом задаются права целиком:
chmod 644. - Буквами добавляют или убирают отдельное право:
+x— разрешить запуск,g-w— запретить группе запись,o-r— запретить остальным чтение.
Как это выглядит:
$ 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.txtstat -c '%A %a %n' печатает права буквами, числом и имя файла. Новые файлы обычного пользователя в Ubuntu получают права 664, новые папки — 775.
Скрипт запускается, только если у него есть право x: после chmod +x backup.sh его можно запустить командой ./backup.sh.
Для папок сайта обычно ставят 755, для файлов — 644. chmod -R 755 сделал бы исполняемыми все файлы подряд, поэтому папки и файлы разделяют командой find:
find site -type d -exec chmod 755 {} +
find site -type f -exec chmod 644 {} +Первая команда ставит 755 всем папкам внутри site (вместе с ней самой), вторая — 644 всем файлам.
chown — сменить владельца
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.
Частые ошибки
Permission deniedпри работе со своим файлом — посмотритеls -l: файл мог остаться за root после команды сsudo. Верните его себе:sudo chown ivan:ivan файл.Permission deniedпри запуске скрипта — у него нет праваx:chmod +x script.sh.No such file or directory— неверный путь. Проверьте, где вы (pwd), и набирайте имя через Tab.Directory not emptyуrmdir— в папке что-то есть. Посмотрите, что именно, и только потом решайте, удалять ли её черезrm -r.
Коротко
- Дерево папок начинается с
/; свои файлы — в/home/имя, настройки системы — в/etc. mkdir— папка,touch— файл,cp— копия,mv— перенос и переименование,rm— удаление навсегда.nano файл— редактор:Ctrl+Oсохраняет,Ctrl+Xвыходит.- Права —
r,w,xдля владельца, группы и остальных; числомr= 4,w= 2,x= 1. chmodменяет права,sudo chown— владельца;777и рекурсивные правки системных папок — нельзя.