Кладовочка

О разном, чтобы было под рукой онлайн

Шпаргалка Linux: основные команды

Файловая система

pwd                       # текущая директория
ls -la                    # список файлов с правами и скрытыми
cd /path                  # перейти в директорию
cd -                      # вернуться в предыдущую
mkdir -p a/b/c            # создать цепочку директорий
rm -rf dir                # удалить директорию рекурсивно
cp -r src dest            # копировать директорию
mv old new                # переместить/переименовать
ln -s target link         # символическая ссылка
df -h                     # свободное место на дисках
du -sh dir                # размер директории
tree -L 2                 # дерево директорий на 2 уровня

Просмотр файлов

cat file                  # вывести файл
less file                 # листать (q — выход, / — поиск)
head -20 file             # первые 20 строк
tail -f file              # следить за логом в реальном времени
wc -l file                # количество строк
nl file                   # строки с номерами
file mystery              # определить тип файла
bat file                  # cat с подсветкой (нужен bat)

Права доступа

chmod 755 script.sh       # rwxr-xr-x
chmod +x script.sh        # добавить execute
chown user:group file     # сменить владельца
umask 022                 # маска по умолчанию

# Цифры прав: r=4, w=2, x=1
# 755 = rwx(7) r-x(5) r-x(5) = владелец:всё, остальные:чтение+запуск
# 644 = rw-r--r-- = владелец:чтение+запись, остальные:только чтение
# 600 = rw------- = только владелец

Поиск

# find
find . -name "*.log"                 # по имени
find . -type f -size +10M            # файлы > 10MB
find . -mtime -7                      # изменённые за 7 дней
find . -name "*.tmp" -delete          # найти и удалить
find . -type f -exec chmod 644 {} \;  # выполнить команду

# locate (построен на базе, быстрее find)
locate nginx.conf
sudo updatedb                         # обновить базу locate

# grep
grep -r "TODO" src/                   # рекурсивный поиск
grep -i "error" log                   # игнорировать регистр
grep -v "debug" log                   # исключить строки
grep -c "ERROR" log                   # подсчитать
grep -B2 -A3 "panic" log              # контекст: 2 строки до, 3 после
grep -E "err(or|or)" log              # regex (расширенный)

Текст и потоки

# Пайпы и редиректы
cmd1 | cmd2                           # pipe: вывод cmd1 → ввод cmd2
cmd > file                            # перезаписать файл
cmd >> file                           # дописать в файл
cmd 2>&1 | tee file.log               # stdout+stderr в файл и на экран
cmd < input.txt                       # читать из файла

# sed (потоковый редактор)
sed 's/old/new/' file                 # замена первого вхождения
sed 's/old/new/g' file                # глобальная замена
sed -i 's/old/new/g' file             # замена на месте
sed '/pattern/d' file                 # удалить строки с pattern
sed -n '5,10p' file                   # строки с 5 по 10

# cut / sort / uniq
cut -d',' -f1,3 file.csv              # колонки 1 и 3 CSV
sort -n file                          # числовая сортировка
sort -t',' -k2 file.csv               # сортировка CSV по 2-й колонке
uniq -c                               # подсчёт дубликатов (после sort!)
sort | uniq -c | sort -rn             # топ по частоте

# xargs
find . -name "*.log" | xargs rm      # удалить все найденные
cat urls.txt | xargs -I {} curl {}   # curl для каждого URL
ls *.jpg | xargs -P4 -I{} convert {} {}.png  # параллельно (4 процесса)

Процессы

ps aux                     # все процессы
ps aux | grep nginx        # найти процесс
top                        # интерактивный мониторинг
htop                       # улучшенный top
kill PID                   # завершить процесс
kill -9 PID                # принудительно
pkill -f pattern           # убить по имени/паттерну
bg / fg                    # фон / передний план
jobs                       # список фоновых задач

# systemd
systemctl status nginx     # статус сервиса
systemctl start/stop/restart nginx
systemctl enable nginx     # автозапуск
journalctl -u nginx -f     # логи сервиса

# cron
crontab -l                 # показать cron-задания
crontab -e                 # редактировать
# Формат: мин час день месяц день_недели команда
30 2 * * * /backup.sh      # ежедневно в 2:30

Сеть

ping -c4 host              # пинг (4 пакета)
curl -I https://example.com # заголовки ответа
curl -X POST -d '{}' url   # POST запрос
wget url                    # скачать файл
scp file user@host:/path    # копировать на сервер
rsync -avz src/ dest/       # синхронизация

# Порты и соединения
ss -tlnp                    # открытые порты
lsof -i :80                 # кто слушает порт 80
netstat -an | grep ESTABLISHED  # активные соединения
nc -zv host 443             # проверить доступность порта

# DNS
dig example.com             # DNS-запрос
dig -x 1.2.3.4              # обратный DNS
nslookup example.com        # проще, чем dig
host example.com            # ещё проще

Диски и монтирование

lsblk                      # список блочных устройств
fdisk -l                   # таблица разделов
mount /dev/sdb1 /mnt       # примонтировать
umount /mnt                # отмонтировать
blkid                      # UUID устройств

# LVM
pvcreate /dev/sdb
vgcreate vg1 /dev/sdb
lvcreate -L 10G -n data vg1
lvextend -L +5G /dev/vg1/data

Архивация и сжатие

tar -czf archive.tar.gz dir/       # создать tar.gz
tar -xzf archive.tar.gz            # распаковать
tar -czf - dir/ | ssh host "tar -xzf - -C /dst"  # копировать через ssh
zip -r archive.zip dir/
unzip archive.zip
gzip file                           # сжать (file → file.gz)
gunzip file.gz                      # разжать

Информация о системе

uname -a                   # версия ядра
lsb_release -a             # версия дистрибутива
uptime                     # время работы
free -h                    # память
lscpu                      # процессор
lspci                      # PCI-устройства
dmidecode -t memory        # информация о RAM
ip addr                    # IP-адреса (вместо ifconfig)

Пользователи и группы

whoami                     # текущий пользователь
id                         # UID, GID, группы
sudo -i                    # root shell
useradd -m user            # создать пользователя
passwd user                # сменить пароль
usermod -aG sudo user      # добавить в группу sudo (админ)
groups user                # группы пользователя
last                       # последние логины

Переменные окружения

env                        # все переменные
echo $PATH                 # значение переменной
export VAR=value           # установить
export PATH="$PATH:/new/path"  # добавить в PATH

История команд

history                    # история
!123                       # выполнить команду 123
!!                         # последняя команда
!$                         # последний аргумент предыдущей команды
Ctrl+R                     # поиск по истории (интерактивный)

Продвинутые однострочники

# Найти 10 самых больших файлов
find . -type f -exec du -h {} \; | sort -rh | head -10

# Заменить текст во всех файлах рекурсивно
grep -rl "old" . | xargs sed -i 's/old/new/g'

# Убить процесс по имени
ps aux | grep "[p]rocess" | awk '{print $2}' | xargs kill

# Мониторинг использования памяти топ-процессов
ps aux --sort=-%mem | head -11

# Найти файлы, изменённые за последний час
find . -type f -mmin -60

# Создать цепочку директорий и перейти
mkdir -p a/b/c/d && cd $_

# Количество уникальных IP в access.log
awk '{print $1}' access.log | sort -u | wc -l

# Сумма размеров файлов по расширениям
ls -l *.txt | awk '{sum+=$5} END {print sum}'

Горячие клавиши терминала

Клавиши Действие
Ctrl+C Прервать процесс
Ctrl+D EOF (выход из shell)
Ctrl+Z Приостановить (bg для фона)
Ctrl+L Очистить экран
Ctrl+R Поиск по истории
Ctrl+A В начало строки
Ctrl+E В конец строки
Ctrl+U Удалить до начала строки
Ctrl+W Удалить слово слева
Alt+. Вставить последний аргумент

Другие шпаргалки: AWK, curl, Git