Одно дерево
Первое, что удивляет пришедших из Windows, — в Linux нет букв дисков. Вся файловая система — одно дерево, и растёт оно из корня, который обозначается одной косой чертой: /. Второй диск, флешка, сетевая папка тоже становятся ветками этого же дерева — их подключают в какую-то папку, обычно внутри /media или /mnt.
Главные папки у всех дистрибутивов почти одинаковы, и их стоит знать в лицо:
/home— домашние папки людей: у пользователя anna это/home/anna. Здесь ваши файлы, и здесь вы можете всё;/etc— настройки системы и программ, обычные текстовые файлы;/var— меняющиеся данные, прежде всего журналы в/var/log;/tmp— временные файлы, которые могут исчезнуть при перезагрузке;/usr— установленные программы и их файлы;/root— домашняя папка администратора, не путать с корнем/.
Когда что-то сломалось, эта карта сразу подсказывает, куда смотреть: что программа делает — в её журнале в /var/log, как она настроена — в /etc.
Где я и что вокруг
Две команды отвечают на вопрос «где я и что вокруг».
pwd # где я: полный путь текущей папки
/home/anna/projects
ls # что здесь лежит
site notes.txt
ls без ключей показывает только имена. Самые полезные ключи:
-l— подробный вид: права, владелец, размер, дата;-a— показать и скрытые файлы, у которых имя начинается с точки;-h— размеры в понятных единицах: 4,0K, 12M, 1,5G.
Ключи можно склеивать: ls -lah — всё сразу.
ls -l
drwxr-xr-x 3 anna anna 4096 Sep 20 10:14 projects
-rw-r--r-- 1 anna anna 1820 Sep 24 09:02 notes.txt
-rw-r--r-- 1 anna anna 512 Sep 24 09:05 .bashrc
Как читать строку подробного вида. Первый знак — тип: d — папка, дефис — обычный файл. Дальше девять знаков прав (разберём в уроке про права), затем владелец, размер в байтах и дата последнего изменения, в конце — имя.
Ещё два вопроса «что вокруг» задают постоянно: сколько места занято и сколько осталось. На первый отвечает du -sh с именем папки — общий размер всего, что в ней лежит. На второй — df -h: список дисков с занятым и свободным местом. Когда сервер вдруг перестаёт записывать файлы, эти две команды — первое, что стоит набрать: чаще всего просто закончилось место, и обычно его съели журналы или забытые копии.
Пути
Чтобы сказать команде, с каким файлом работать, нужен путь. Путей два вида.
Абсолютный начинается с корня / и описывает дорогу от самого верха: /home/anna/projects/site. Он работает из любой папки — поэтому его пишут в скриптах и настройках.
Относительный начинается не с / и считается от текущей папки. Если вы в /home/anna, то projects/site ведёт туда же.
Три особых обозначения:
| Знак | Что значит | Пример |
|---|---|---|
. | текущая папка | ./start.sh |
.. | папка уровнем выше | cd .. |
~ | ваша домашняя папка | cd ~/projects |
Переход между папками — cd:
cd /etc # абсолютный путь
cd ~/projects # от домашней папки
cd .. # на уровень вверх
cd - # вернуться туда, где были до этого
cd # без аргумента — домой
Имена и файлы
Ещё несколько особенностей имён, которые сбивают с толку новичков.
Расширение — договорённость, а не правило. Linux не решает по окончанию .txt или .jpg, что внутри файла. Файл может называться вообще без расширения — так часто называют программы и скрипты. Узнать, что на самом деле внутри, помогает команда file:
file notes report start
notes: UTF-8 Unicode text
report: PDF document, version 1.7
start: Bourne-Again shell script, ASCII text executable
Пробелы в именах — неудобны. Оболочка делит строку по пробелам, поэтому ls мой отчёт.txt ищет два файла: «мой» и «отчёт.txt». Имя с пробелом берут в кавычки или экранируют обратной косой чертой. Удобнее вовсе не ставить пробелы: moy-otchet.txt или my_report.txt.
ls "мой отчёт.txt"
ls мой\ отчёт.txt
В Linux почти всё — файл. Настройки — текстовые файлы в /etc, журналы — файлы в /var/log, даже устройства и сведения о процессах показываются как файлы в особых папках /dev и /proc. Поэтому одни и те же команды чтения и поиска работают почти со всем — и это главная причина, по которой их стоит знать хорошо.