Терминал становится понятнее, когда знакомы несколько основных идей: файлы, процессы, права доступа и небольшие программы, которые умеют работать вместе.
1. Осмотритесь
Linux — это ядро, на котором построено множество операционных систем. Дистрибутив объединяет ядро с утилитами, библиотеками, менеджером пакетов и нередко графической рабочей средой. У Ubuntu, Debian и Fedora много общих принципов, хотя команды администрирования могут различаться. Оболочка — программа, которая читает команды и запускает другие программы. Терминал — интерфейс, через который вы взаимодействуете с оболочкой.
Для начала узнайте, где вы находитесь и что лежит рядом. Эти команды показывают текущий каталог и его содержимое, ничего не меняя в файлах:
pwd
ls
ls -lah
pwd выводит рабочий каталог. ls перечисляет его содержимое; параметр -l добавляет подробности, -a включает имена, начинающиеся с точки, а -h делает размеры удобнее для чтения. Имя файла, начинающееся с точки, по соглашению скрывается при обычном просмотре. Это не делает сам файл закрытым или защищённым от чужого доступа.
Пути, начинающиеся с /, называются абсолютными. Остальные пути отсчитываются от текущего каталога. Обозначение . означает текущий каталог, .. — родительский, а ~ обычно раскрывается в путь к вашему домашнему каталогу. Команда cd /etc меняет каталог, cd .. поднимает на уровень выше, а cd возвращает домой. При этом меняется рабочее расположение оболочки, а не сами файлы на диске.
2. Прочитайте файл перед изменением
Файловая система образует единое дерево каталогов. Личные файлы обычно находятся внутри /home, системные настройки — в /etc, а изменяемые данные и журналы — в /var. Это принятые соглашения, а не гарантия для любого дистрибутива и приложения. Прежде чем редактировать незнакомый файл, выясните, кому он принадлежит, какая программа его использует и существует ли документированный способ проверить изменения.
file /etc/os-release
cat /etc/os-release
less /etc/services
head -n 20 /etc/services
file определяет предполагаемый тип содержимого. cat печатает файл целиком и удобен для коротких текстов. less позволяет просматривать длинный вывод; для выхода нажмите q. Не выводите в терминал произвольные двоичные файлы. Даже для чтения системного файла могут потребоваться права, а в другом дистрибутиве некоторые из приведённых путей могут отсутствовать.
3. Разберитесь с правами доступа
Подробный список файлов показывает владельца, группу и биты разрешений. Для обычного файла r разрешает чтение, w — запись, а x — выполнение. Для каталога значения похожи, но имеют другую практическую роль: чтение позволяет получить список имён, выполнение — проходить через каталог, а запись — изменять записи в нём при соблюдении остальных условий. Удаление файла обычно зависит от прав на родительский каталог, а не только от возможности записывать в сам файл.
Команда id показывает вашу учётную запись и членство в группах. Не пытайтесь устранить ошибку доступа, предоставляя всем полные права. Разрешения вроде 777 могут открыть файлы другим пользователям и службам. Сначала определите, какой именно учётной записи нужен доступ, и выдайте только необходимые разрешения. Аналогично, sudo запускает команду от другой учётной записи, обычно root. Это осознанное повышение привилегий, а не обязательный префикс перед каждой командой.
4. Проверьте процессы и ресурсы
Запущенная программа — это процесс. У процессов есть идентификаторы, они потребляют ресурсы и могут запускать дочерние процессы. Команда оболочки часто остаётся на переднем плане до своего завершения. Сочетание Ctrl + C посылает сигнал прерывания группе процессов переднего плана. Программа может самостоятельно обработать этот сигнал, поэтому немедленная остановка не гарантирована во всех случаях.
ps -ef
df -h
free -h
uptime
ps перечисляет процессы. df показывает использование пространства файловых систем, а free — состояние памяти в дистрибутивах, где эта утилита установлена. Linux использует свободную память под кеши, поэтому небольшое значение «free» само по себе не означает проблему; оценка доступной памяти часто полезнее. uptime показывает время работы системы и среднюю нагрузку. Нагрузка учитывает готовые к выполнению задачи и некоторые ожидающие задачи, поэтому не является прямым процентом загрузки процессора.
5. Объединяйте небольшие команды
Конвейер соединяет стандартный вывод одной программы со стандартным вводом другой. Например, ls /etc | head -n 10 показывает первые десять строк списка. У программ также есть стандартный поток ошибок для диагностических сообщений. Команда может вывести полезную ошибку даже при пустом обычном выводе. Код завершения обозначает успех или неудачу по правилам конкретной программы; ноль обычно означает успешное выполнение.
Заключайте имена с пробелами в кавычки и пользуйтесь дополнением по клавише Tab, чтобы реже ошибаться при наборе. Перенаправление оболочки с помощью > может обрезать существующий файл ещё до запуска команды. Освойте его в ненужном временном каталоге, прежде чем применять к ценным данным. Не вставляйте непонятную команду только потому, что она обещает исправить ошибку доступа или сетевую проблему.
6. Выработайте надёжную привычку
Читайте локальное руководство командой man ls или встроенную справку через ls --help, если она поддерживается. Выбирайте документацию для установленного у вас дистрибутива и его версии. Сначала изучайте состояние, затем меняйте что-то одно и проверяйте результат. Для конфигурации службы резервная копия и проверка синтаксиса полезнее повторных перезапусков в надежде, что всё само заработает.
Дальше свяжите локальные понятия с сетью: прочитайте, как взаимодействуют адреса, порты и протоколы.