С чего начать: терминал и устройство команды
Терминал - текстовый способ управлять компьютером. В нём вы пишете команды, а система их выполняет. Для разработчика это ежедневный инструмент: серверы почти всегда работают на Linux без графического интерфейса, Docker и Git удобнее всего использовать из консоли, а многие ошибки видно только в логах.
Где взять терминал:
- Ubuntu и другие дистрибутивы - сочетание Ctrl+Alt+T или поиск "Терминал" в меню.
- Windows 10/11 - подсистема WSL. В PowerShell от администратора выполните
wsl --install, после перезагрузки появится Ubuntu. Все команды из статьи в ней работают. - macOS - приложение Terminal. Большинство команд совпадает, отличаются некоторые флаги.
Любая команда устроена одинаково: команда -опции аргументы. Например, в ls -l /etc команда ls, опция -l (подробный вывод), аргумент /etc (какую папку показать). Короткие опции можно склеивать: ls -la равно ls -l -a. Длинные пишутся через два дефиса: --help.
Горячие клавиши, которые экономят часы:
- Tab - автодополнение имён команд и файлов, двойной Tab показывает варианты;
- стрелка вверх - предыдущая команда, Ctrl+R - поиск по истории;
- Ctrl+C - прервать выполнение, Ctrl+L - очистить экран;
- Ctrl+Shift+C / Ctrl+Shift+V - копировать и вставить в большинстве терминалов Linux.
Навигация по файловой системе: pwd, ls, cd
В Linux нет дисков C: и D:. Всё растёт из одного корня /. Важные папки: /home/имя - ваши файлы, /etc - настройки системы, /var/log - логи, /tmp - временные файлы, /usr/bin - программы.
pwd # где я сейчас
ls # что в текущей папке
ls -la # подробно, включая скрытые файлы (начинаются с точки)
ls -lh /var/log # размеры в понятном виде: K, M, G
cd projects # перейти в папку projects
cd .. # на уровень выше
cd ~ # в домашнюю папку (или просто cd)
cd - # вернуться в предыдущую папку
Пути бывают абсолютные и относительные. Абсолютный начинается с / и работает откуда угодно: /home/anna/projects. Относительный считается от текущей папки: projects/site. Символ ~ заменяет путь к домашней папке, точка . - текущая папка, две точки .. - родительская.
Регистр букв важен: Projects и projects - две разные папки. Пробелы в именах приходится экранировать или брать путь в кавычки, поэтому в именах файлов лучше использовать дефис или подчёркивание.
Работа с файлами: mkdir, touch, cp, mv, rm
mkdir notes # создать папку
mkdir -p app/src/utils # создать всю цепочку папок сразу
touch todo.txt # создать пустой файл
cp todo.txt backup.txt # копировать файл
cp -r app app_copy # копировать папку целиком
mv backup.txt old/ # переместить в папку old
mv old.txt new.txt # переименовать
rm new.txt # удалить файл
rm -r app_copy # удалить папку с содержимым
rm -i *.log # удалять с подтверждением каждого файла
Звёздочка * - шаблон "любые символы": *.log означает все файлы с расширением .log. Перед удалением по шаблону проверьте, что под него попадает: ls *.log.
В Linux нет корзины для команды rm: удалённое из терминала не восстановить штатными средствами. Особенно опасна связка rm -rf с переменной или пробелом в пути: rm -rf / tmp вместо rm -rf /tmp попытается снести корень системы. Пока нет привычки, используйте rm -i и всегда перечитывайте путь перед Enter.
Просмотр и редактирование: cat, less, head, tail, nano
cat file.txt- вывести файл целиком. Удобно для коротких файлов.less /var/log/syslog- постраничный просмотр. Пробел - страница вниз,/текст- поиск,q- выход.head -n 20 file.txt- первые 20 строк.tail -n 50 app.log- последние 50 строк.tail -f app.log- следить за файлом в реальном времени. Незаменимо при отладке сервера, выход по Ctrl+C.wc -l file.txt- посчитать строки.
Для правки файлов прямо в терминале новичку проще всего nano: nano config.txt, подсказки по клавишам внизу экрана, Ctrl+O сохраняет, Ctrl+X выходит. Редактор vim мощнее, но требует привычки. Если случайно в него попали, нажмите Esc, наберите :q! и Enter, чтобы выйти без сохранения. Vim иногда открывается сам, например при git commit без сообщения; как этого избежать, описано в шпаргалке по Git.
Поиск, конвейеры и перенаправление вывода
grep ищет строки по тексту, find ищет файлы по имени и свойствам:
grep "error" app.log # строки со словом error
grep -i "error" app.log # без учёта регистра
grep -rn "TODO" src/ # рекурсивно по папке, с номерами строк
find . -name "*.py" # все Python-файлы от текущей папки
find /var/log -size +100M # файлы больше 100 МБ
which python3 # где лежит программа
Сила терминала в комбинации простых команд. Вертикальная черта | (pipe) передаёт вывод одной команды на вход другой:
ps aux | grep nginx # найти процессы nginx
cat access.log | grep " 404 " | wc -l # сколько раз был код 404
history | tail -n 20 # последние 20 команд
Перенаправление пишет вывод в файл: > перезаписывает, >> дописывает в конец. ls -la > list.txt сохранит список файлов, echo "done" >> log.txt добавит строку. Ошибки идут в отдельный поток, их перенаправляют через 2>: find / -name "*.conf" 2>/dev/null скроет сообщения "Permission denied". Для сложных шаблонов поиска пригодятся регулярные выражения: grep их понимает.
Права доступа: chmod, chown, sudo
Каждый файл в Linux имеет владельца, группу и набор прав. Посмотреть их можно через ls -l:
-rwxr-xr-- 1 anna dev 1240 Oct 24 10:15 deploy.sh
Первый символ - тип (- файл, d папка). Дальше три тройки: права владельца (rwx), группы (r-x) и всех остальных (r--). Буквы означают: r - чтение, w - запись, x - выполнение (для папки - право в неё войти).
Права часто задают числами: r = 4, w = 2, x = 1, сумма даёт цифру для каждой тройки.
| Число | Права | Когда используют |
|---|---|---|
| 755 | rwxr-xr-x | Скрипты и папки: владелец всё, остальные читают и запускают |
| 644 | rw-r--r-- | Обычные файлы: владелец правит, остальные читают |
| 600 | rw------- | Секреты: SSH-ключи, файлы с паролями |
| 700 | rwx------ | Личные папки, например ~/.ssh |
| 777 | rwxrwxrwx | Почти никогда: всем можно всё, дыра в безопасности |
chmod +x deploy.sh # разрешить запуск
./deploy.sh # запустить скрипт из текущей папки
chmod 600 ~/.ssh/id_ed25519 # закрыть ключ от всех
sudo chown anna:dev file # сменить владельца и группу
sudo apt update # выполнить команду от имени администратора
sudo запускает команду с правами root и спрашивает ваш пароль. Если что-то не работает из-за прав, не лечите это через chmod 777 или sudo перед каждой командой. Разберитесь, кому принадлежит файл и кому нужен доступ.
Процессы, память, диск и сеть
Процессы и ресурсы
ps aux # все процессы
top # живой список, выход q (удобнее htop, если установлен)
kill 12345 # завершить процесс по PID
kill -9 12345 # убить принудительно, если обычный kill не помог
df -h # свободное место на дисках
du -sh * # сколько весит каждая папка в текущей
free -h # оперативная память
uname -a # версия ядра
cat /etc/os-release # какой дистрибутив
Пакеты
В Ubuntu и Debian программы ставятся через apt: sudo apt update обновляет список пакетов, sudo apt upgrade обновляет установленное, sudo apt install htop ставит программу, sudo apt remove htop удаляет. В Fedora аналог - dnf, в Arch - pacman.
Сеть
ping -c 4 ya.ru # есть ли связь
curl -I https://example.com # заголовки ответа сайта
wget https://example.com/file.zip # скачать файл
ssh user@203.0.113.10 # подключиться к серверу
scp report.pdf user@203.0.113.10:~/ # скопировать файл на сервер
ss -tlnp # какие порты слушают программы
Команда curl -I показывает код ответа сервера; что значат 200, 301 или 502, разобрано в статье о кодах ответов HTTP.
Шпаргалка: 20 команд Linux на каждый день
| Команда | Назначение |
|---|---|
pwd | Показать текущую папку |
ls -la | Список файлов, включая скрытые |
cd путь | Перейти в папку |
mkdir -p путь | Создать папки |
touch файл | Создать пустой файл |
cp -r откуда куда | Копировать |
mv откуда куда | Переместить или переименовать |
rm -r путь | Удалить безвозвратно |
cat / less | Прочитать файл |
tail -f файл | Следить за логом |
nano файл | Отредактировать файл |
grep -rn текст путь | Найти текст в файлах |
find . -name шаблон | Найти файлы |
chmod / chown | Права и владелец |
sudo команда | Выполнить как администратор |
ps aux / top | Процессы |
kill PID | Завершить процесс |
df -h / du -sh | Место на диске |
sudo apt install пакет | Установить программу |
ssh user@host | Подключиться к серверу |
Если забыли синтаксис, есть три способа подсказки: man команда открывает полное руководство, команда --help выводит краткую справку, а утилита tldr (ставится отдельно) показывает несколько самых частых примеров. Освоив терминал, переходите к контейнерам по гайду Docker для начинающих. Остальные материалы по теме собраны в разделе Linux.
