Программирование и IT
Команды Linux
Терминал Linux устроен одинаково у всех дистрибутивов: имя команды, ключи, объекты. Ниже — шесть таблиц по областям работы, в каждой по строке на команду и пример вызова, который можно набрать и сразу увидеть результат.
В этой статье
Как читать строку команды#
Любой вызов складывается из трёх частей: имя программы, ключи и аргументы.
Ключи бывают короткие (-l) и длинные (--long); короткие слипаются, поэтому
ls -l -a и ls -la — одно и то же. Аргументы — то, над чем работаем: пути,
имена процессов, адреса.
Две команды выручают, когда ключ забыт:
Ещё одна привычка экономит часы: клавиша Tab дописывает имена файлов и команд,
стрелка вверх поднимает предыдущий вызов, Ctrl+C прерывает зависшую
программу, Ctrl+D закрывает ввод.
Права суперпользователя нужны не всегда. Правило простое: своё домашнее
хозяйство — без sudo, системные каталоги и службы — с sudo. Если команда
из шпаргалки отвечает Permission denied, это и есть подсказка.
Файлы и каталоги#
| Команда | Что делает | Пример |
|---|---|---|
pwd |
печатает путь текущего каталога | pwd |
ls |
перечисляет содержимое каталога | ls -lh /var/log |
cd |
переходит в каталог | cd ~/projects |
mkdir |
создаёт каталог | mkdir -p src/api/v1 |
cp |
копирует файл или дерево | cp -r src backup |
mv |
переносит и переименовывает | mv notes.txt archive/ |
rm |
удаляет | rm -r build |
touch |
создаёт пустой файл | touch README.md |
cat |
выводит файл целиком | cat /etc/hostname |
less |
листает файл постранично | less /var/log/syslog |
head / tail |
первые и последние строки | tail -n 50 app.log |
tail -f |
показывает дописываемые строки | tail -f app.log |
Ключ -p у mkdir создаёт всю цепочку каталогов разом и молчит, если каталог
уже есть. Ключ -h у ls печатает размеры в килобайтах и мегабайтах вместо
голых байтов. У rm восстановления нет: корзины в терминале не существует,
поэтому перед rm -r полезно выполнить тот же путь через ls.
Три сокращения пути экономят набор: ~ — домашний каталог, . — текущий,
.. — родительский. cd - возвращает туда, где ты был до последнего
перехода.
Права доступа#
У каждого файла три набора прав — для владельца, группы и всех остальных,
и в каждом наборе три бита: чтение (4), запись (2), выполнение (1). Отсюда
привычные числа: 7 = 4+2+1 (всё), 6 = 4+2 (чтение и запись), 4 — только
чтение.
| Команда | Что делает | Пример |
|---|---|---|
chmod |
меняет права | chmod 644 notes.txt |
chmod +x |
делает файл исполняемым | chmod +x deploy.sh |
chown |
меняет владельца и группу | sudo chown www-data:www-data site |
ls -l |
показывает права строкой | ls -l notes.txt |
id |
печатает твои uid, gid и группы | id |
sudo |
выполняет команду от суперпользователя | sudo systemctl restart nginx |
chmod 644 — это rw-r--r--: владелец читает и пишет, остальные только
читают. Для каталога бит выполнения означает право войти внутрь, поэтому у
каталогов обычно 755, а не 644. Права 777 не нужны почти никогда: если
они «чинят» проблему, настоящая причина — неверный владелец.
Процессы#
| Команда | Что делает | Пример |
|---|---|---|
ps aux |
снимок всех процессов системы | ps aux | grep nginx |
top |
живая таблица нагрузки | top |
kill |
посылает процессу сигнал завершения | kill 4821 |
kill -9 |
убивает процесс безусловно | kill -9 4821 |
pkill |
убивает по имени | pkill -f "python app.py" |
jobs / fg / bg |
задачи текущей оболочки | bg %1 |
systemctl status |
состояние службы | systemctl status nginx |
journalctl |
журнал служб | journalctl -u nginx -n 100 |
Обычный kill просит процесс закрыться аккуратно — дописать файл, отпустить
порт. kill -9 не оставляет такой возможности, поэтому это последнее
средство, а не первое. Запустить долгую программу в фоне можно символом & в
конце строки, вернуть на передний план — командой fg.
Сеть#
| Команда | Что делает | Пример |
|---|---|---|
ip a |
адреса сетевых интерфейсов | ip a |
ping |
проверяет доступность узла | ping -c 4 example.com |
curl |
делает HTTP-запрос из терминала | curl -i https://example.com |
wget |
скачивает файл | wget https://example.com/file.zip |
ss -tulpn |
открытые порты и кто их держит | sudo ss -tulpn |
dig |
спрашивает DNS об имени | dig example.com |
ssh |
вход на удалённую машину | ssh user@10.0.0.5 |
scp |
копирование файла по ssh | scp dump.sql user@10.0.0.5:/tmp/ |
Ключ -c 4 у ping останавливает проверку после четырёх пакетов — иначе она
идёт бесконечно. ss -tulpn под sudo показывает имя процесса, занявшего
порт: это первая команда, когда сервис отвечает «address already in use».
Что именно возвращает curl и как читать коды ответов, разобрано в статье
что такое API.
Пакеты#
| Команда | Дистрибутивы | Пример |
|---|---|---|
apt |
Debian, Ubuntu | sudo apt update && sudo apt install git |
apt remove |
Debian, Ubuntu | sudo apt remove git |
dnf |
Fedora, RHEL | sudo dnf install git |
pacman |
Arch | sudo pacman -S git |
apt list --installed |
Debian, Ubuntu | apt list --installed | grep python |
df / du |
везде | df -h и du -sh ~/Downloads |
apt update обновляет список доступных пакетов, apt upgrade — сами пакеты;
путать их — типичная ошибка первой недели. df -h показывает свободное место
по разделам, du -sh каталог — сколько занимает одна папка. Когда место
кончилось, эта пара находит виновника за два вызова.
Поиск файлов и текста#
| Команда | Что делает | Пример |
|---|---|---|
find |
ищет файлы по имени, размеру, дате | find . -name "*.log" -mtime -1 |
grep |
ищет строку внутри файлов | grep -rn "TODO" src/ |
grep -i |
поиск без учёта регистра | grep -i error app.log |
which |
показывает путь до программы | which python3 |
wc -l |
считает строки | wc -l access.log |
sort / uniq |
сортировка и свёртка повторов | sort ips.txt | uniq -c |
У grep ключ -r означает «зайти во все подкаталоги», -n — «показать номер
строки». Шаблон поиска — это регулярное выражение, и знание его синтаксиса
превращает grep в отдельный инструмент: разбор классов, кванторов и якорей —
в статье про регулярные выражения.
Отдельная сила терминала — конвейер |: вывод одной команды становится вводом
следующей. Классическая связка для разбора журнала выглядит так:
| | | | |
Читается справа налево по смыслу: выбрать строки с кодом 500, взять из каждой
первое поле (адрес), сгруппировать одинаковые, посчитать, отсортировать по
убыванию, показать начало списка.
Частые ошибки#
Пробел в пути без кавычек. cd Мои файлы попробует перейти в каталог
«Мои». Правильно — cd "Мои файлы".
rm -rf с переменной. Если переменная окажется пустой, путь $DIR/ станет
просто /. Проверяй значение через echo перед удалением.
Копирование каталога без -r. cp src dst на каталоге ответит
omitting directory; для дерева нужен cp -r.
Правка системного файла без резервной копии. Перед sudo nano /etc/…
делай sudo cp /etc/файл /etc/файл.bak.
Отрабатывать команды безопаснее в одноразовом контейнере, чем на рабочей
системе: там любую ошибку отменяет перезапуск — см.
что такое Docker.
План по этапам
- Освоить перемещениеПройти по дереву каталогов через pwd, ls -la и cd, не пользуясь файловым менеджером.
- Разобрать праваСоздать файл, посмотреть ls -l, поменять права на 600 и 755 и объяснить каждую букву в выводе.
- Найти процесс и портЗапустить долгую программу, найти её через ps aux, завершить через kill, проверить порт через ss -tulpn.
- Собрать конвейерИз журнала выбрать строки grep, посчитать wc -l и сгруппировать через sort | uniq -c.
- Написать шпаргалку своими словамиВыписать двадцать команд, которыми реально пользовались за неделю, с примером на каждую.
Начать изучать эту тему у себя
План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.
Проверь себя
1.Какая команда печатает путь текущего каталога?
2.Какая команда покажет свободное место на разделах в понятных единицах?
3.Права 644 в числовой записи — это сумма битов чтения (4) и записи (2) у владельца. Какое число задаёт полный набор прав rwx для владельца?
4.Какой ключ grep заставляет искать во всех подкаталогах?
Источники
-
Руководства GNU CoreutilsПервоисточник по ls, cp, sort и остальным базовым командамбесплатно
-
Документация UbuntuРазделы про apt, права и службы на русском и английскомбесплатно
-
StepikБесплатные курсы по основам Linux с проверяемыми заданиямибесплатно
Было полезно?