На главную

Справочники

Справочник Linux-команд

find, grep, sed, awk, tar, rsync и systemctl — с пояснениями и подстановкой ваших путей.

Подставить свои значения

Значения подставляются прямо в команды — копируйте и вставляйте в терминал.

Показано 122 из 122 команд.

Поиск файлов — find

Условия складываются по «и»; -o даёт «или», скобки экранируются: \( … \).

  • find . -name "*.log"

    Файлы по имени с учётом регистра.

  • find . -iname "*readme*"

    То же без учёта регистра.

  • find . -type d -name node_modules -prune -o -type f -print

    Обойти каталог целиком: -prune отсекает ветку до входа в неё.

  • find . -type f -size +100M

    Файлы больше 100 МБ. +/- — больше/меньше, без знака — ровно.

  • find . -mtime -1

    Изменённые за последние сутки. -mmin -30 — за полчаса.

  • find . -type f -newer file.txt

    Изменённые позже указанного файла.

  • find . -type f -empty -delete

    Удалить пустые файлы. -delete идёт последним аргументом.

  • find . -type f -perm 0777

    Файлы с ровно такими правами. -perm -0002 — где есть запись для всех.

  • find . -type f -print0 | xargs -0 grep -l "TODO"

    Передать список в другую команду безопасно для имён с пробелами.

  • find . -type f -exec chmod 644 {} +

    + собирает аргументы пачками, \; вызывает команду на каждый файл.

  • find . -maxdepth 1 -type l

    Символические ссылки только на верхнем уровне.

  • find . -type f -printf "%s\t%p\n" | sort -rn | head

    Топ самых больших файлов (GNU find).

Поиск по содержимому — grep

  • grep -rn "текст" .

    Рекурсивно, с номерами строк.

  • grep -rni --include="*.js" "todo" .

    Без учёта регистра, только в нужных файлах.

  • grep -rl "текст" .

    Только имена файлов, где нашлось.

  • grep -c "ERROR" file.txt

    Сколько строк совпало.

  • grep -v "^#" file.txt | grep -v "^$"

    Конфиг без комментариев и пустых строк.

  • grep -A 3 -B 3 "ERROR" file.txt

    Контекст: три строки после и три до. -C 3 — с обеих сторон.

  • grep -E "warn|error|fatal" file.txt

    Расширенная регулярка: | без экранирования.

  • grep -P "\d{3}-\d{2}" file.txt

    Perl-регулярки: \d, \s, ленивые квантификаторы (GNU grep).

  • grep -o "https\?://[^ ]*" file.txt

    Печатать только совпавший кусок, а не всю строку.

  • grep -F -f patterns.txt file.txt

    Искать буквальные строки списком из файла.

  • grep -w "id" file.txt

    Только целое слово: «id» найдётся, «uuid» — нет.

  • zgrep "ERROR" /var/log/syslog.2.gz

    Поиск прямо в gzip-логе, без распаковки.

Правка текста — sed

GNU sed: -i без аргумента. На macOS (BSD) нужно -i '' — иначе первый аргумент съест суффикс копии.

  • sed 's/было/стало/' file.txt

    Заменить первое вхождение в каждой строке, вывести в консоль.

  • sed 's/было/стало/g' file.txt

    g — все вхождения в строке.

  • sed -i.bak 's/было/стало/g' file.txt

    Заменить в файле, сохранив копию .bak. Так работает и в GNU, и в BSD.

  • sed 's|/old/path|/new/path|g' file.txt

    Разделитель — любой символ: с путями удобнее |.

  • sed -n '10,20p' file.txt

    Напечатать строки с 10 по 20. -n гасит автопечать.

  • sed -n '/начало/,/конец/p' file.txt

    Кусок между двумя шаблонами.

  • sed '/^#/d' file.txt

    Удалить строки-комментарии.

  • sed '3i\новая строка' file.txt

    Вставить строку перед третьей; a — после.

  • sed -E 's/([0-9]+)-([0-9]+)/\2-\1/' file.txt

    Группы в расширенной регулярке, обратные ссылки \1 \2.

  • sed '$!N;s/\n/ /' file.txt

    Склеить строки попарно.

Колонки и суммы — awk

  • awk '{print $1, $3}' file.txt

    Первая и третья колонки; $0 — вся строка, NF — число колонок.

  • awk -F: '{print $1}' /etc/passwd

    Свой разделитель полей.

  • awk '{sum += $2} END {print sum}' file.txt

    Сумма колонки.

  • awk '{a[$1]++} END {for (k in a) print a[k], k}' file.txt | sort -rn

    Частоты значений первой колонки — топ IP в логе.

  • awk 'NR > 1' file.txt

    Пропустить заголовок CSV.

  • awk '$3 > 100 {print}' file.txt

    Фильтр по числовому условию.

  • awk 'length > 80' file.txt

    Строки длиннее 80 символов.

  • awk '!seen[$0]++' file.txt

    Убрать дубли, сохранив порядок (sort -u порядок теряет).

  • awk 'BEGIN {OFS=","} {$1=$1; print}' file.txt

    Перебить разделитель вывода: пробелы → запятые.

Архивы — tar, zip, gzip

Мнемоника tar: «c» create, «x» extract, «t» list, «f» file, «v» verbose, «z» gzip, «j» bzip2, «J» xz.

  • tar -czf archive.tar.gz .

    Упаковать каталог с gzip-сжатием.

  • tar -xzf archive.tar.gz

    Распаковать в текущий каталог.

  • tar -xzf archive.tar.gz -C /target/dir

    Распаковать в указанный каталог.

  • tar -tzf archive.tar.gz

    Посмотреть содержимое, ничего не распаковывая.

  • tar -czf archive.tar.gz --exclude=node_modules --exclude=.git .

    Упаковать без мусора.

  • tar -xzf archive.tar.gz --strip-components=1

    Убрать лишний верхний каталог из архива.

  • zip -r archive.zip . -x "*.git*"

    ZIP рекурсивно с исключением.

  • unzip -l archive.zip

    Список файлов в ZIP.

  • gzip -9 file.txt

    Сжать файл на месте (исходник исчезает); gunzip — обратно.

  • tar -czf - . | ssh user@server "cat > backup.tar.gz"

    Упаковать и отправить по SSH без промежуточного файла.

Копирование — rsync, scp

Косая черта в конце источника значит «содержимое каталога», без неё — «сам каталог».

  • rsync -avh --progress ./ user@server:/target/

    Синхронизировать содержимое каталога с прогрессом.

  • rsync -avhn --delete ./ /backup/

    Пробный прогон (-n): показать, что будет сделано, и ничего не делать.

  • rsync -avh --delete ./ /backup/

    Зеркало: лишнее в приёмнике удаляется.

  • rsync -avh --exclude="node_modules" --exclude=".git" ./ /backup/

    Синхронизация без тяжёлых каталогов.

  • rsync -avz -e "ssh -p 2222 -i ~/.ssh/key" ./ user@server:/target/

    Свой порт и ключ SSH.

  • rsync -avh --partial --append-verify big.iso user@server:/target/

    Докачать прерванный перенос большого файла.

  • scp -r . user@server:/target/

    Разовое копирование каталога по SSH.

  • scp user@server:/remote/file.log .

    Забрать файл с сервера себе.

Процессы и нагрузка

  • ps aux --sort=-%mem | head

    Топ процессов по памяти; -%cpu — по процессору.

  • pgrep -af node

    Найти процессы по имени вместе с командной строкой.

  • pkill -f "node server.js"

    Убить по совпадению всей команды, а не только имени.

  • kill -TERM 1234

    Вежливая просьба завершиться; -KILL — если не слышит.

  • top -o %MEM

    Живой список процессов, отсортированный по памяти.

  • htop

    То же удобнее: дерево, фильтр, убийство по F9.

  • uptime

    Средняя нагрузка за 1, 5 и 15 минут.

  • lsof -i :3000

    Кто занял порт.

  • lsof -p 1234

    Какие файлы держит процесс.

  • nohup command > out.log 2>&1 &

    Запустить в фоне так, чтобы пережило выход из сессии.

  • strace -p 1234 -f -e trace=openat

    Подсмотреть системные вызовы живого процесса.

Диск и файловая система

  • df -h

    Свободное место по разделам.

  • df -i

    Свободные inode: место есть, а файл не создаётся — обычно это.

  • du -sh .

    Размер каталога одной строкой.

  • du -h --max-depth=1 . | sort -h

    Куда делось место: размеры вложенных каталогов по возрастанию.

  • ncdu .

    Интерактивный обход по размерам.

  • lsblk -f

    Диски, разделы, файловые системы и точки монтирования.

  • mount | column -t

    Что и куда смонтировано.

  • stat file.txt

    Размер, права, владелец и три времени: доступ, изменение, смена метаданных.

  • file file.txt

    Что это за файл на самом деле, по содержимому, а не по расширению.

  • truncate -s 0 file.txt

    Очистить растущий лог, не трогая дескриптор открывшего его процесса.

Права и владельцы

  • chmod 644 file.txt

    Владельцу чтение и запись, остальным чтение.

  • chmod 755 .

    Каталогу нужен x, иначе в него нельзя войти.

  • chmod -R u+rwX,go+rX,go-w .

    Заглавная X ставит x только каталогам и уже исполняемым файлам.

  • chown -R www-data:www-data .

    Сменить владельца и группу рекурсивно.

  • chmod g+s .

    setgid на каталог: новые файлы наследуют группу.

  • umask 022

    Маска прав по умолчанию для новых файлов текущей сессии.

  • sudo -u www-data -H bash -c "cmd"

    Выполнить команду от другого пользователя с его HOME.

  • getfacl file.txt

    Расширенные права ACL, когда обычных ugo не хватает.

Сеть с сервера

  • ss -tulpn

    Открытые порты и процессы за ними — замена netstat.

  • ip a

    Адреса интерфейсов; ip r — таблица маршрутов.

  • curl -I https://example.com

    Только заголовки ответа.

  • curl -sS -o /dev/null -w "%{http_code} %{time_total}\n" https://example.com

    Код ответа и время без тела.

  • dig +short example.com A

    Быстрый DNS-запрос; @8.8.8.8 — через конкретный резолвер.

  • traceroute example.com

    Где теряется путь до хоста; mtr — то же в динамике.

  • nc -zv server 443

    Проверить, открыт ли порт.

  • tcpdump -i any -n port 443 -c 20

    Двадцать пакетов по порту 443 без резолва имён.

  • ssh -L 5432:localhost:5432 user@server

    Пробросить удалённый порт к себе на локальный.

systemd и журналы

  • systemctl status nginx

    Состояние службы и последние строки её лога.

  • systemctl restart nginx

    Перезапуск; reload — перечитать конфиг без разрыва соединений.

  • systemctl enable --now nginx

    Включить автозапуск и сразу стартовать.

  • systemctl list-units --type=service --state=running

    Что сейчас работает.

  • systemctl list-timers

    Таймеры systemd — замена cron; когда следующий запуск.

  • systemctl daemon-reload

    Перечитать unit-файлы после правки.

  • journalctl -u nginx -f

    Живой лог службы.

  • journalctl -u nginx --since "1 hour ago" --no-pager

    Лог за час одним куском.

  • journalctl -p err -b

    Только ошибки с момента текущей загрузки.

  • journalctl --disk-usage && journalctl --vacuum-time=7d

    Сколько занимает журнал и как обрезать его до недели.

  • systemd-analyze blame

    Что дольше всех тормозит загрузку.

Мелочи, которые экономят минуты

  • tail -f file.txt | grep --line-buffered ERROR

    Живой лог с фильтром: без --line-buffered grep копит вывод в буфере.

  • watch -n 2 "df -h /"

    Повторять команду каждые две секунды.

  • sort file.txt | uniq -c | sort -rn | head

    Топ повторяющихся строк.

  • cut -d, -f1,3 file.txt

    Взять колонки из CSV без awk.

  • column -t -s, file.txt

    Выровнять CSV в читаемую таблицу.

  • xargs -P 4 -n 1 command < list.txt

    Выполнить команду для каждой строки в четыре потока.

  • tee file.txt | grep ERROR

    И записать в файл, и передать дальше по конвейеру.

  • !!

    Повторить предыдущую команду; sudo !! — её же от root.

  • cd -

    Вернуться в предыдущий каталог.

  • history | grep rsync

    Найти команду, которую точно уже набирали.

  • ln -s /real/path file.txt

    Символическая ссылка; -f перезапишет существующую.

  • date -u +"%Y-%m-%dT%H:%M:%SZ"

    Метка времени в UTC по ISO 8601.