Linux Cheatsheet
Сначала — три алгоритма «если это → то это» для самых частых пожаров, потом команды по задачам.
🚨 «Сервис не работает» — локализация за 4 шага
1. Жив ли процесс? →
systemctl status nginx
❌ failed
смотри последние строки статуса +
✅ active
journalctl -u nginx -n 50 --no-pager — там почти всегда написана причина (кривой конфиг, занятый порт, нет прав). Конфиг проверь до рестарта: nginx -t.процесс жив — иди к шагу 2.
2. Слушает ли порт? →
ss -tlnp | grep :80
❌ нет
сервис жив, но не открыл порт: смотри его конфиг (listen), может занял другой процесс —
✅ 127.0.0.1
ss -tlnp | grep :80 покажет, кто.слушает только localhost — снаружи недоступен «по дизайну». Нужно наружу → правь listen на 0.0.0.0.
3. Отвечает ли локально? →
curl -s -o /dev/null -w "%{http_code}\n" localhost:80
❌ 5xx/висит
болеет приложение, не доступ: логи приложения, место на диске (шаг ниже!), память (
✅ 200
free -h, OOM: dmesg | grep -i oom).локально всё работает → снаружи мешает файрвол/облачная Security Group — алгоритм №4 в шпаргалке по сетям.
🚨 «Кончилось место / диск полон»
1. Правда полон? Где? →
df -h
100% на /
ищи, кто съел:
место есть
sudo du -xh / --max-depth=2 2>/dev/null | sort -rh | head -15. Обычные обжоры: /var/log (логи), /var/lib/docker (образы!), кэши, дампы.а запись падает «No space left»? Кончились inode:
df -i (миллион мелких файлов). Или файл удалили, а процесс держит: sudo lsof +L1 | head — рестартни держателя.2. Чистим правильно (не rm по живому!)
логи
docker
sudo journalctl --vacuum-size=500M; большие *.log сначала truncate -s 0 (не rm — процесс может держать файл!), настрой logrotate.docker system df — посмотреть; docker system prune -a — вычистить неиспользуемое (аккуратно: удалит незапущенные образы).🚨 «Сервер тормозит» — CPU, память или диск?
1. Что перегружено? →
top (или htop): смотри load average, %CPU, строку wa
CPU 100%
кто: первая строка в top по %CPU. Один процесс жрёт всё → его логи/рестарт; много мелких → смотри, не майнер ли/забытый цикл. load average выше числа ядер (
wa высокий
nproc) = очередь есть.(iowait) — тормозит ДИСК, а не CPU:
iostat -x 2 (util ~100% = диск в полке), кто пишет: sudo iotop -o. Частая причина — swap (см. ниже).2. Память? →
free -h: смотри available и Swap used
swap растёт
памяти не хватает, система «пережёвывает» диск — вот и тормоза. Кто ест:
памяти полно
ps aux --sort=-%mem | head. Проверь, не убивал ли ядро процессы: dmesg | grep -i oom.(не пугайся маленького free при большом available — это кэш, так и надо). Значит смотри сеть/приложение: может, «тормозит» вовсе не сервер — алгоритм №3 сетей.
Навигация
pwd # где я
ls -lah # подробно + скрытые + human size
ls -lt # сортировка по времени
cd /var/log
cd ~ # домой
cd - # в предыдущую
tree -L 2 # дерево 2 уровня глубины
Файлы и директории
mkdir -p a/b/c # создать цепочку
touch file
cp -r src/ dst/ # копирование (-r для дир)
mv old new # переименование
rm -rf dir/ # ⚠️ удаление
ln -s /target /link # symlink
stat file # детально о файле
file file.bin # тип файла
Просмотр
cat file
less file # /pattern для поиска, q выход
head -n 20 file
tail -n 50 file
tail -f /var/log/syslog # live
zless / zcat # для .gz
journalctl -u service -f # для systemd журналов
Поиск
# grep
grep "ERROR" file
grep -i "error" file # case insensitive
grep -n "WARN" file # line numbers
grep -rn "TODO" src/ # рекурсивно
grep -v "INFO" file # инвертировать
grep -A 3 -B 1 "panic" file # контекст: 3 после, 1 до
grep -E "error|warn" file # regex
# find
find . -name "*.log"
find /var -mtime +30 -type f # старше 30 дней
find . -size +100M # больше 100 MB
find . -name "*.tmp" -delete
find . -type f -exec chmod 644 {} +
find /etc -type d -name "ssl*"
Текстовая обработка
awk '{print $1, $3}' file # колонки 1 и 3
awk -F: '{print $1}' /etc/passwd # custom разделитель
awk '$3 > 100' file # фильтр
sed 's/old/new/g' file # замена
sed -i 's/old/new/g' file # in-place
sed -n '10,20p' file # строки 10-20
cut -d: -f1 /etc/passwd # только usernames
sort file
sort -rn -k 2 file # по 2 колонке, обратно, числовая
uniq -c file # с подсчётом
wc -l file # строки
tr 'a-z' 'A-Z' # uppercase
xargs # передача аргументов
Pipes и перенаправление
cmd | other # pipe
cmd > file # stdout перезапись
cmd >> file # stdout append
cmd 2> err.log # stderr
cmd > out 2>&1 # оба
cmd &> out # bash короткая форма
cmd < input # stdin
cmd 2> /dev/null # выкинуть ошибки
Права
chmod 755 file # rwxr-xr-x
chmod +x file # +execute
chmod -R 644 dir/ # рекурсивно
chown user:group file
chown -R nginx:nginx /var/www
umask 022 # маска по умолчанию
# SUID, SGID, sticky
chmod u+s file # SUID
chmod g+s dir # SGID
chmod +t /tmp # sticky bit
Процессы
ps aux # все процессы
ps -ef --forest # дерево
pgrep -f "python app" # PID по подстроке
pkill -f "python app" # убить по подстроке
top
htop # лучше
btop # ещё лучше
kill 1234 # SIGTERM
kill -9 1234 # SIGKILL
kill -HUP 1234 # reload config
nice -n 10 cmd # пониженный приоритет
ionice -c 3 cmd # I/O идл-класс
nohup cmd & # фоном, не убивать при logout
disown # отвязать от shell
systemd
systemctl status nginx
systemctl start/stop/restart/reload nginx
systemctl enable --now nginx # auto-start + start
systemctl disable nginx
systemctl list-units --type=service --state=running
systemctl daemon-reload # после редактирования unit
journalctl -u nginx # логи сервиса
journalctl -fu nginx # follow
journalctl --since "1 hour ago"
journalctl --since today --until "1 hour ago"
journalctl -p err # только errors
journalctl -k # kernel log
Ресурсы
free -h # память
df -h # диск по разделам
df -i # inodes (!)
du -sh /var/log/* # размер директорий
du -sh /var/log/ | sort -h
ncdu /var # интерактивно
uptime # load average
vmstat 1 5 # vm/cpu/io
iostat -x 1 # disk I/O
mpstat 1 # CPU per core
sar -u 1 # из sysstat
lsof -i :80 # что слушает порт
lsof -p 1234 # открытые файлы процесса
lsof +D /var/log # кто работает в директории
dmesg | tail # kernel messages
Сеть
ip a # адреса
ip r # routes
ip n # ARP
hostname -I # все IP
ss -tlnp # TCP listen + processes
ss -tan # все TCP
ss -uan # UDP
ss -s # summary
ping -c 4 host
mtr host # traceroute + ping
dig domain.com
dig +trace domain.com # полный путь
dig domain.com MX
nslookup domain.com
curl -v https://api.com
curl -I https://api.com # только headers
curl -o file https://... # скачать
nc -zv host 443 # порт открыт?
nc -l 9999 # listen для теста
tcpdump -i eth0 port 80
tcpdump -A 'tcp port 80'
SSH
ssh user@host
ssh -p 2222 -i ~/.ssh/key user@host
ssh-keygen -t ed25519 -C "comment"
ssh-copy-id user@host
# Туннели
ssh -L 5432:rds.internal:5432 bastion # local forward
ssh -R 8080:localhost:3000 server # remote forward
ssh -D 1080 server # SOCKS proxy
# rsync — лучше scp
rsync -avzP src/ user@host:/dst/
rsync -avzP --delete src/ user@host:/dst/ # синк с удалением
Архивы
tar -czf archive.tar.gz dir/
tar -xzf archive.tar.gz
tar -tzf archive.tar.gz # список содержимого
zip -r archive.zip dir/
unzip archive.zip
Пакеты (Ubuntu/Debian)
sudo apt update # обновить индексы
sudo apt upgrade -y # обновить пакеты
sudo apt install nginx
sudo apt remove nginx
sudo apt purge nginx # + конфиги
apt list --installed | grep ^a
apt-cache search "keyword"
dpkg -l # все пакеты
dpkg -L nginx # файлы пакета
which command # где бинарь
Окружение
env
echo $PATH
export VAR=value
unset VAR
export PATH=$PATH:/new/dir
alias ll='ls -alh'
alias k=kubectl
unalias ll
Полезные сочетания горячих клавиш
| Сочетание | Действие |
|---|---|
| Ctrl+R | Reverse search в истории |
| Ctrl+L | Clear |
| Ctrl+A / Ctrl+E | В начало / в конец строки |
| Ctrl+U / Ctrl+K | Удалить до начала / до конца |
| Ctrl+W | Удалить слово назад |
| Alt+. | Вставить последний аргумент |
| !! | Повторить последнюю команду |
| !sudo | Последняя команда с sudo |