У rm нет «корзины»: удалённые файлы не восстанавливаются стандартными средствами, а флаг -f отключает все подтверждения. Перед удалением каталога выполните ls по тому же пути и убедитесь, что путь верный. В интерактивной работе безопаснее rm -ri: команда спросит подтверждение по каждому объекту. Отдельная страховка — утилита trash-cli, которая перемещает файлы в корзину вместо безвозвратного удаления.
Основные команды Linux: шпаргалка для разработчика и администратора

Большинство облачных серверов администрируют через терминал: графического интерфейса на них нет, поэтому и логи просматривают, и сервисы перезапускают с помощью команд. Знание основных команд Linux помогает быстрее выполнять повседневные задачи и реже ошибаться при деплое, отладке и администрировании. В этой шпаргалке собрано более 70 команд, сгруппированных по задачам: навигация, работа с файлами, поиск, управление правами и процессами, работа с диском и архивами, сеть, SSH и перенаправление потоков.
Шпаргалка рассчитана на тех, кто работает с Linux нерегулярно и помнит логику команд, но забывает синтаксис. Все примеры приведены для Ubuntu 22.04 LTS. В Debian, CentOS/Rocky Linux и других дистрибутивах базовые утилиты работают так же; различия начинаются на уровне пакетных менеджеров и системных служб.
После подключения к новой машине инженер обычно проверяет текущий каталог и сведения о системе. Для этого пригодятся следующие команды Linux.
pwd # текущий каталог ls # содержимое каталога ls -la # подробный список, включая скрытые файлы ls -lh # размеры в удобном для чтения формате (K, M, G) cd /path/to/dir # перейти в каталог cd ~ # перейти в домашний каталог cd - # вернуться в предыдущий каталог cd .. # перейти на уровень выше whoami # текущий пользователь id # UID, GID и группы hostname # имя хоста uname -a # ядро, архитектура, дистрибутив uptime # время работы системы и средняя нагрузка date # текущая дата и время cal # календарь текущего месяца
Команда
cd -OLDPWDФлаги
lsls -lahШпаргалка: навигация
| Команда | Действие |
pwd | Текущий каталог |
ls -la | Подробный список файлов с правами доступа, включая скрытые файлы |
ls -lh | Размеры в K, M, G |
cd - | Возврат в предыдущий каталог |
uname -a | Ядро, архитектура, дистрибутив |
uptime | Время работы системы и средняя нагрузка |
id | UID, GID и группы пользователя |
Создание, копирование, перемещение, удаление и просмотр файлов — базовые операции в Linux. На них приходится половина повседневных задач на сервере.
# Создание touch file.txt # создать пустой файл или обновить время модификации mkdir dir # создать каталог mkdir -p dir/sub/deep # создать всю цепочку вложенных каталогов # Копирование и перемещение cp file.txt copy.txt # скопировать файл cp -r dir/ dir_backup/ # скопировать каталог рекурсивно cp -p file.txt copy.txt # скопировать с сохранением прав и временных меток mv file.txt newname.txt # переименовать файл mv file.txt /other/dir/ # переместить файл # Удаление rm file.txt # удалить файл rm -r dir/ # удалить каталог рекурсивно rm -rf dir/ # удалить каталог без подтверждений (осторожно) rmdir emptydir/ # удалить пустой каталог # Просмотр и редактирование cat file.txt # вывести содержимое целиком less file.txt # открыть для постраничного просмотра (q — выход) head -n 20 file.txt # вывести первые 20 строк tail -n 20 file.txt # вывести последние 20 строк tail -f /var/log/syslog # следить за новыми строками в файле nano file.txt # открыть файл в редакторе nano vim file.txt # открыть файл в vim (i — вставка, :wq — сохранить и выйти)
Флаг
-pmkdirmkdir -pДля просмотра файлов на сервере чаще всего нужны
tail -flesstail -fless/qШпаргалка: файлы и каталоги
| Задача | Команда |
| Создать цепочку каталогов | mkdir -p a/b/c |
| Скопировать каталог целиком | cp -r src/ dst/ |
| Скопировать файл с сохранением прав и временных меток | cp -p file copy |
| Переименовать или переместить | mv old new |
| Удалить каталог с подтверждением | rm -ri dir/ |
| Следить за логом в реальном времени | tail -f /var/log/syslog |
| Открыть большой файл для просмотра | less bigfile.log |
На сервере без IDE с глобальным поиском
grepfindgrepfind# grep — поиск по содержимому grep "error" /var/log/syslog # строки с error grep -i "error" file.txt # без учёта регистра grep -r "TODO" ./src/ # рекурсивно по каталогу grep -n "error" file.txt # с номерами строк grep -v "debug" file.txt # строки без debug grep -c "error" file.txt # только количество совпадений grep -E "error|warn" file.txt # расширенные регулярные выражения
Флаг
-E|grep "error\|warn"Флаги можно комбинировать:
grep -rni "timeout" /etc/nginx/timeout# find — поиск файлов find /home -name "*.log" # по имени find /var/log -name "*.log" -mtime -7 # изменённые за последние 7 дней find . -size +100M # файлы больше 100 МБ find . -type f -empty # пустые файлы find . -name "*.py" -exec wc -l {} \; # выполнить команду для каждого найденного файла
Команда
find-mtime-size-exec-size +100M -exec ls -lh {} \;# Подсчёт wc -l file.txt # количество строк wc -w file.txt # количество слов wc -c file.txt # размер в байтах # Сортировка и удаление дублей sort file.txt # отсортировать строки sort -r file.txt # отсортировать в обратном порядке sort -n numbers.txt # отсортировать числа sort -u file.txt # отсортировать строки и удалить дубли uniq file.txt # удалить соседние дубли uniq -c file.txt # посчитать вхождения
Частая ошибка — вызвать
uniqsortsort access.log | uniq -cuniq -c access.logШпаргалка: поиск
| Задача | Команда |
| Найти текст рекурсивно | grep -rn "text" ./dir/ |
| Посчитать совпадения | grep -c "error" file.log |
| Исключить строки | grep -v "debug" file.log |
| Найти файлы по маске | find . -name "*.conf" |
| Найти файлы крупнее 100 МБ | find . -size +100M |
| Найти файлы, изменённые за неделю | find . -mtime -7 |
| Посчитать частоту строк | sort file | uniq -c | sort -rn |
В Linux права доступа задаются для трёх категорий: владельца файла, группы и остальных пользователей. В выводе
ls -lrwx# Просмотр прав ls -l file.txt # -rw-r--r-- 1 user group 1234 Oct 13 09:00 file.txt # ^ тип файла (- обычный файл, d каталог, l символьная ссылка) # ^^^ права владельца (rw-) # ^^^ права группы (r--) # ^^^ права остальных (r--)
Команда
chmod# chmod — изменить права chmod 644 file.txt # rw-r--r--: читают все, изменяет только владелец chmod 755 script.sh # rwxr-xr-x: скрипт могут выполнять все chmod 600 private.key # rw-------: доступ только у владельца chmod +x script.sh # добавить право выполнения chmod -R 755 /var/www/ # изменить права рекурсивно по дереву каталогов # chown — изменить владельца chown user file.txt # сменить владельца chown user:group file.txt # сменить владельца и группу chown -R www-data /var/www/ # сменить владельца рекурсивно # sudo — выполнение с повышенными правами sudo command # выполнить команду от имени root sudo -i # открыть сессию root sudo -u user command # выполнить команду от имени другого пользователя
Символьная форма удобна, когда нужно добавить одно право, сохранив остальные:
chmod +x deploy.shТиповые режимы chmod
| Режим | Числовой | Применение |
rwx------ | 700 | Скрипты, доступные только владельцу |
rw------- | 600 | Приватные ключи SSH |
rwxr-xr-x | 755 | Каталоги и исполняемые файлы |
rw-r--r-- | 644 | Обычные файлы и конфигурация |
rwxrwxrwx | 777 | Не использовать в production |
Режим 777 разрешает запись и выполнение всем пользователям системы, включая тех, от имени которых работают веб-сервер и фоновые сервисы. В production такие права позволяют подменять файлы. Если приложение не работает без 777, причина почти всегда в неверно заданном владельце каталога. В этом случае нужно сменить владельца с помощью
chownКоманды для работы с процессами в Linux нужны, когда сервис не отвечает или на машине закончились ресурсы.
# Просмотр ps aux # показать все процессы системы ps aux | grep nginx # найти процессы nginx top # интерактивный мониторинг (q — выход) htop # улучшенный top, если установлен # Управление kill PID # отправить SIGTERM для штатного завершения kill -9 PID # отправить SIGKILL для принудительного завершения killall nginx # завершить все процессы с этим именем pkill -f "python app.py" # завершить процессы по части командной строки # Фоновый запуск command & # запустить команду в фоне jobs # показать фоновые задачи текущей сессии fg %1 # вернуть задачу 1 на передний план bg %1 # продолжить выполнение задачи 1 в фоне nohup command & # запустить команду с защитой от закрытия терминала disown %1 # отвязать задачу от терминала # Приоритет nice -n 10 command # запустить команду с пониженным приоритетом renice -n -5 PID # изменить приоритет запущенного процесса
По умолчанию
killkill -9kill PIDkill -9 PIDКоманда
nohupnohup.outШпаргалка: процессы
| Задача | Команда |
| Найти процесс по имени | ps aux | grep nginx |
| Следить за процессами в реальном времени | tophtop |
| Завершить процесс штатно | kill PID |
| Завершить процесс принудительно | kill -9 PID |
| Завершить процессы по шаблону командной строки | pkill -f "python app.py" |
| Запустить долгую задачу | nohup command & |
| Понизить приоритет | nice -n 10 command |
Разобраться с сообщением «No space left on device» помогают две команды:
dfdudf -h # занятое и свободное место по разделам df -h / # только корневой раздел du -sh /var/log/ # суммарный размер каталога du -sh * # размер каждого элемента в текущем каталоге du -h --max-depth=1 /var/ # размеры подкаталогов первого уровня lsblk # блочные устройства и разделы mount # смонтированные файловые системы free -h # оперативная память и swap
При переполнении диска начните с
df -hdu -h --max-depth=1 /var/Шпаргалка: диск и память
| Команда | Что показывает |
df -h | Свободное место по разделам |
du -sh dir/ | Размер одного каталога |
du -h --max-depth=1 /var/ | Размеры подкаталогов первого уровня |
lsblk | Диски и разделы |
free -h | Оперативную память и swap |
Команда
tarcxtzjJ# tar — основной инструмент tar -czf archive.tar.gz /path/to/dir/ # создать архив со сжатием gzip tar -czf archive.tar.gz -C /path dir/ # указать базовый каталог tar -xzf archive.tar.gz # распаковать архив tar -xzf archive.tar.gz -C /target/ # распаковать в заданный каталог tar -tzf archive.tar.gz # посмотреть содержимое без распаковки # Флаги tar: # c — create, x — extract, t — list # z — gzip (.gz), j — bzip2 (.bz2), J — xz (.xz) # f — файл архива, v — подробный вывод
Флаг
-Cpath/to/dirtar -tzf# zip/unzip — для передачи архивов на Windows zip archive.zip file1 file2 # создать ZIP-архив zip -r archive.zip dir/ # добавить каталог рекурсивно unzip archive.zip # распаковать архив unzip -l archive.zip # посмотреть содержимое # gzip/gunzip — для отдельных файлов gzip file.txt # сжать в file.txt.gz и удалить исходный файл gunzip file.txt.gz # распаковать файл gzip -k file.txt # сжать с сохранением исходного файла
Шпаргалка: архивы
| Задача | Команда |
| Создать .tar.gz | tar -czf arc.tar.gz dir/ |
| Распаковать .tar.gz | tar -xzf arc.tar.gz |
| Распаковать в каталог | tar -xzf arc.tar.gz -C /target/ |
| Посмотреть содержимое | tar -tzf arc.tar.gz |
| Сильнее сжать | tar -cJf arc.tar.xz dir/ |
| Сжать один файл | gzip -k file.txt |
| Создать архив для Windows | zip -r arc.zip dir/ |
Для сетевой диагностики на сервере используют утилиты из пакета iproute2. Команды
ifconfigrouteip# Информация об интерфейсах ip a # все интерфейсы и IP-адреса ip r # таблица маршрутизации ip link show # состояние интерфейсов # Проверка доступности ping -c 4 8.8.8.8 # отправить 4 пакета и завершить работу ping6 ::1 # проверить доступность по IPv6 traceroute example.com # проследить маршрут до хоста
# curl и wget curl https://example.com # выполнить GET-запрос curl -I https://example.com # получить только заголовки ответа curl -o file.zip https://example.com/f.zip # сохранить ответ в файл curl -X POST -H "Content-Type: application/json" \ -d '{"key":"value"}' https://api.example.com/endpoint wget https://example.com/file.zip # скачать файл
Команда
curl -I# Порты и соединения ss -tlnp # слушающие TCP-порты и процессы ss -ulnp # то же для UDP netstat -tlnp # устаревший аналог, встречается на старых машинах lsof -i :80 # процесс, который занимает порт 80 # DNS dig example.com # подробный DNS-ответ dig +short example.com # только адрес nslookup example.com # альтернатива dig host example.com # короткий DNS-запрос
Утилита
ssnetstat-t-u-l-n-pШпаргалка: сеть
| Задача | Команда |
| Посмотреть IP-адреса | ip a |
| Посмотреть таблицу маршрутизации | ip r |
| Проверить доступность хоста | ping -c 4 host |
| Проверить HTTP-код ответа | curl -I [https://host](https://host) |
| Посмотреть слушающие порты | ss -tlnp |
| Найти процесс, который занимает порт | lsof -i :80 |
| Узнать IP-адрес домена | dig +short example.com |
SSH — основной способ работы с облачной виртуальной машиной. Через него подключаются к серверу, передают файлы и пробрасывают порты.
# Подключение ssh user@host # подключиться через порт 22 по умолчанию ssh -p 2222 user@host # подключиться через нестандартный порт ssh -i ~/.ssh/mykey.pem user@host # указать приватный ключ # Генерация ключей ssh-keygen -t ed25519 -C "comment" # создать ключ Ed25519 ssh-keygen -t rsa -b 4096 # создать ключ RSA 4096 для совместимости # Копирование публичного ключа на сервер ssh-copy-id user@host # добавить ключ в authorized_keys ssh-copy-id -i ~/.ssh/mykey.pub user@host
Для новых ключей OpenSSH рекомендует Ed25519 как современную и безопасную альтернативу RSA. RSA 4096 остаётся запасным вариантом для старого оборудования и систем, которые не поддерживают Ed25519.
# Передача файлов scp file.txt user@host:/remote/path/ # скопировать файл на сервер scp user@host:/remote/file.txt ./local/ # скопировать файл с сервера scp -r dir/ user@host:/remote/ # скопировать каталог рекурсивно rsync -avz dir/ user@host:/remote/dir/ # синхронизировать каталог rsync -avz --delete dir/ user@host:/remote/ # удалить лишние файлы в целевом каталоге
Команда
scprsync-avz# SSH-туннели ssh -L 5432:localhost:5432 user@host # пробросить локальный порт ssh -N -f -L 8080:localhost:80 user@host # создать туннель в фоне, без интерактивной сессии
Команда
ssh -Lssh -L 5432:localhost:5432 user@hostlocalhost:5432-N-fШпаргалка: SSH
| Задача | Команда |
| Подключиться с ключом | ssh -i ~/.ssh/key user@host |
| Подключиться через нестандартный порт | ssh -p 2222 user@host |
| Создать ключ | ssh-keygen -t ed25519 -C "comment" |
| Добавить ключ на сервер | ssh-copy-id user@host |
| Скопировать каталог | scp -r dir/ user@host:/path/ |
| Синхронизировать каталог | rsync -avz dir/ user@host:/path/ |
| Пробросить порт БД | ssh -L 5432:localhost:5432 user@host |
Оболочка позволяет объединять простые утилиты для решения более сложных задач. Перенаправление записывает вывод команды в файл, а конвейер (pipe) передаёт его на вход следующей команде.
# Перенаправление вывода command > file.txt # записать stdout в файл с перезаписью command >> file.txt # дописать stdout в конец файла command 2> error.log # записать stderr в отдельный файл command > all.log 2>&1 # записать stdout и stderr в один файл # /dev/null — отбросить вывод command > /dev/null 2>&1
Оператор
>>>>># Конвейеры cat file.txt | grep "error" | wc -l # посчитать строки с error ps aux | grep nginx | grep -v grep # найти процессы nginx без самого grep ls -la | sort -k5 -rn | head -10 # вывести 10 самых больших файлов cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20 # топ IP-адресов # xargs find . -name "*.log" | xargs rm # удалить найденные файлы find . -name "*.py" | xargs grep "TODO" # найти TODO в найденных файлах # tee — вывод в файл и на экран одновременно command | tee output.log # Подстановка команд echo "Today is $(date +%Y-%m-%d)" FILES=$(ls *.txt)
Команда
xargsfindteeПодробнее о потоках ввода-вывода, переменных и написании собственных сценариев — в статье «Как работает bash: разбираемся в деталях».
Шпаргалка: перенаправление
| Конструкция | Что делает |
> | Записывает stdout в файл с перезаписью |
>> | Дописывает stdout в конец файла |
2> | Записывает stderr в файл |
2>&1 | Направляет stderr туда же, куда stdout |
| | Передаёт вывод следующей команде |
| tee file | Записывает вывод в файл и одновременно выводит на экран |
$(command) | Подставляет результат команды |
Bash хранит историю выполненных команд. Команда
history!!!Nhistory # показать всю историю команд history | grep ssh # найти команды с ssh в истории !42 # выполнить команду №42 из истории !! # повторить последнюю команду sudo !! # повторить последнюю команду с sudo !ssh # повторить последнюю команду, начинавшуюся с ssh
Конструкция
sudo !!sudoСочетание
Ctrl+Rreverse-i-searchCtrl+RГорячие клавиши Bash
| Сочетание | Действие |
Ctrl+R | Интерактивный поиск по истории |
Ctrl+C | Прервать выполнение |
Ctrl+Z | Приостановить задачу (вернуть — fg |
Ctrl+D | Выйти из оболочки или передать EOF |
Ctrl+L | Очистить экран, как clear |
Ctrl+A | Перейти в начало строки |
Ctrl+E | Перейти в конец строки |
Ctrl+W | Удалить слово перед курсором |
Ctrl+U | Удалить часть строки до курсора |
Tab | Дополнить ввод автоматически |
Tab Tab | Показать все варианты дополнения |
Классические утилиты есть в любом дистрибутиве, поэтому их нужно знать. Для повседневной работы можно установить современные альтернативы: они быстрее работают с большими репозиториями и выводят результаты в более удобном виде.
| Классика | Альтернатива | В чём разница |
ls | eza | Форк exa с цветовой разметкой, иконками и статусом Git |
cat | bat | Подсветка синтаксиса, нумерация строк и отображение изменений Git |
find | fd | Более простой синтаксис, высокая скорость и учёт .gitignore |
grep | ripgreprg | Рекурсивный поиск по умолчанию и пропуск файлов из .gitignore |
top | htop | Интерактивное управление процессами и наглядное отображение нагрузки |
du | dust | Наглядное отображение занятого места |
curl | httpiehttp | Удобный синтаксис запросов и форматирование JSON-ответов |
Например,
rg "error" /var/log/grep -r "error" /var/log/.gitignoreЧастые вопросы про основные команды Linux
Как отменить случайно запущенную команду?
Ctrl+CCtrl+Zkill %1killkill -9 PIDКак безопасно удалять файлы, чтобы случайно не стереть нужное?
Есть три способа снизить риск случайного удаления. Команда
rm -itrash-clitrash file.txtrm -rf dir/ls dir/rmКак найти, какой процесс занимает порт?
Выполните
sudo ss -tlnp | grep :80sudo lsof -i :80sudossnetstatЧем отличается > от >>?
Оператор
>>>>>Как выйти из vim?
Нажмите
Esc:q!Enter:wqnanoБолее 70 команд из этой шпаргалки покрывают почти все повседневные задачи администрирования. Регулярно понадобятся 20–30 из них: для навигации, просмотра логов, поиска, управления правами и процессами, работы с SSH. Остальные команды Linux запомнятся по мере появления задач.
Если пока забываете синтаксис, держите шпаргалку в соседней вкладке и практикуйтесь на машине, где не страшно ошибиться. Когда уверенно освоите базовые команды, переходите к написанию собственных сценариев на Bash.
Среду для практики можно подготовить за несколько минут: Cloud Servers в VK Cloud запускаются из готового образа Ubuntu или Debian с оплатой только за использованные ресурсы.
Почитать по теме
- Основные команды shell — краткий набор для первого знакомства с терминалом.
- Как работает bash: разбираемся в деталях — потоки ввода-вывода, переменные и написание сценариев.
Оставьте заявку, чтобы получить консультацию
Наши специалисты свяжутся с вами в ближайшее время и ответят на все вопросы.
Узнавайте о выходе новых статей в блоге первыми!
Будем держать в курсе новостей и облачных трендов


Почитать по теме

Как работает git reset: разница между soft, mixed и hard

Git rebase vs merge: в чём разница и когда что использовать


