Полезные команды Linux
В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.
Файловые операции
Базовые команды
Создать символическую ссылку
ln -s /original/path/to/file /path/to/symlink
Общие команды
Запустить команду pwd -P в текущем каталоге и в поддиректориях.
find . -type d -exec sh -c 'cd -P -- "{}" && pwd -P' \;
Переименовать кириллические файлы в каталоге
find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp1252 -t cp850 | iconv -f cp866 )"' sh {} \;
Права доступа
Изменить владельца и группу для файла.
chown username:usergroup file.txt
Показать режима доступа файла или папки в восьмеричной системе счисления Октал.
stat -c %a file.txt
Оценка использования пространства накопителя
Общий отчёт об использовании пространства файловой системы.
df -h /
Информация об использовании файлами и директориями пространства файловой системы.
du -h file.bin
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.
du -ahx . | sort -rh | head -10
Форматирование накопителя
Низкоуровневое форматирование накопителя.
sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress
Принудительно обновить таблицу разделов.
sudo partprobe
Архивы
Создание
Создать tar архив.
tar -cf archive.tar file1 file2
Создать tar архив и исключить добавление отдельного файла.
tar --exclude='file3' -cf archive.tar file1 file2
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.
tar -cf site1.tar -C /var/www/ site
Создать tar архив с Gzip сжатием.
tar -czf archive.tar.gz file1 file2
Создать tar архив с Bz2 сжатием.
tar -cjf archive.tar.bz2 file1 file2
Просмотр содержимого
Посмотреть содержимое tar архива.
tar -tf archive.tar
Посмотреть содержимое Zip архива
unzip -l archive.zip
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива
unzip -Z1 archive.zip | xargs -I {} rm -v "{}"
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.
unzip -l Архив.zip | grep -aEv '^Archive:' | iconv -f iso8859-1 -t cp850 | iconv -f cp866
Распаковка
Распаковать tar архив в текущую директорию.
tar -xf archive.tar
Распаковать tar архив в требуемую директорию.
tar -xf archive.tar -C ~/folder
Другие возможные tar команды собраны здесь:
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/
Распаковать zip архив в требуемую директорию.
unzip archive.zip -d ~/folder
Модификация архива
Добавить новый файл в tar архив.
tar -rvf archive.tar newfile
Удалить файл из tar архива.
tar --delete -f archive.tar file1
Portable Document Format (PDF)
Склеить несколько pdf файлов в один.
pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf
Разрезать pdf по листам.
pdftoppm Input.pdf outputname -png
Изображения
ExifTool
Прочитать EXIF атрибуты.
exiftool 1.jpg
Удалить все EXIF атрибуты.
exiftool -all= 2.jpg
ImageMagick
Изменить размер изображения
convert 3.jpg -resize 128x128 1.png
Перевернуть изображение
convert 4.jpg -rotate 90 2.jpg
Конвертировать изображение в pdf файл
convert 5.jpg Result.pdf
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.
convert 6.jpg -background white -page a4 Output.pdf
SANE
Получить изображение со сканера или МФУ.
scanimage --format=png --output-file test.png --progress
Видео
FFmpeg
Конвертировать аудиодорожку видео в формат MP3.
ffmpeg -i filename.mp4 filename.mp3
Сделать копию видео в формате mp4.
ffmpeg -i example.mkv -c copy example.mp4
Кодировать видео с наложением субтитров (Создание хардсаба).
ffmpeg -i "Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv" -vf subtitles="02.ass" -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.
ffmpeg -i "Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv" -vf subtitles="03.ass" -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4
Вырезать отрезок видео в выбранном диапазоне времени.
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4
MKVToolNix
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.
mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass
yt-dlp
Cкачать плейлист YT с названием плейлиста в качестве имени папки
yt-dlp -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /"path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s" --embed-chapters https://youtube.com/playlist?list=xyz
Сетевые команды
Отобразить информацию о сетевых соединениях.
netstat -na
Импорт OpenVPN профиля в NetworkManager.
nmcli connection import type openvpn file ~/VPNs/name.ovpn
Послать Wake-on-LAN пакет на удаленную машину.
wol 00:00:00:00:00:00 -h example.com -p 9
Оптимизированная передача изображения с удаленного X сервера.
ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.
sudo grep -r '"-" "-"' /var/log/nginx
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites
wget -r -k -l 2 -p -E -nc http://site.com/
Настройка файрвола
UFW - Uncomplicated Firewall
Используется по умолчанию в Ubuntu.
Отобразить список активных правил в файрволе UFW.
sudo ufw status numbered
Удалить 7-е правило.
sudo ufw delete 7
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.
sudo ufw insert 1 deny from 52.185.71.28 to any
Базы данных
MariaDB
Подключиться к серверу MariaDB.
mariadb -u root -p
Проверка подключения к базе данных.
mariadb -u db_user -p -D db_name
Экспортировать базу данных.
mariadb-dump -u db_user -p db_name > backup.sql
Импортировать базу данных из резервной копии. Необходимо, чтобы база данных была создана перед импортом.
mariadb -u db_user -p new_db < backup.sql
PostgreSQL
Дамп всех баз данных в один файл
postgres pg_dumpall > postgres_databases.sql
Виртуализация
Контейнеры
Docker
Собрать новый образ из Dockerfile, расположенного в текущей директории.
sudo docker buildx build --platform=linux/amd64 .
Создать новый контейнер в фоне и дать ему определенное имя.
sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1
Отобразить список всех контейнеров.
sudo docker ps -a
Отобразить список загруженных или собранных образов.
sudo docker images
Открыть bash сессию в запущенном контейнере
sudo docker exec -it container_id bash
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.
sudo docker run -it image_id bash
Удалить контейнер с данными.
sudo docker container rm container_id
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.
sudo docker container rm $(docker ps -a -q --filter "ancestor=containrrr/watchtower")
Удалить образ.
sudo docker rmi image_id
Удалить все неактивные образы из системы.
sudo docker rmi $(docker images -q)
Показать пути к файловым системам используемых контейнеров.
sudo docker inspect $(sudo docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"'
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.
sudo docker system prune -a -f
Автоматическое обновление требуемого образа каждые 12 часов при помощи nickfedor/watchtower.
docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200
Ручное обновление требуемого образа при помощи nickfedor/watchtower в режиме отладки.
docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.
docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main
Изменить политику перезапуска для существующего контейнера.
docker update --restart unless-stopped open-webui
Обслуживание компьютера
Очистка кэша
ccache -C
Очистить ccache кэш.
trizen -Scc
Очистить trizen кэш.
Пакетные менеджеры
Composer
Создать новый проект.
composer create-project laravel/laravel example-site
Установить необходимые зависимости в существующий проект.
composer install
Запустить скрипт dev, определенный в composer.json проекта. Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.
composer run dev
pacman
pacman -q
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.
rm /var/lib/pacman/db.lck
Удалить файл блокировки базы данных pacman.
Системы сборки
Scons
scons -c
Очистить scons кэш.
Android
Android Debug Bridge (adb)
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.
adb backup -noapk com.unciv.app -f unciv-data.ab
Получить список приложений, которые могут читать последний элемент в буфере обмена.
adb shell cmd appops query-op READ_CLIPBOARD allow
Запретить доступ к буферу обмена.
adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore
Bash
Служебные символы
Запуск скрипта через эквивалент команды source. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через echo и регулярные выражения ($).
. environment.sh
EFI - менеджер загрузки
efibootmgr
Восстановление загрузочной записи
Обычно восстановление загрузочной записи загрузчика systemd-boot требуется после обновления прошивки (BIOS) материнской платы.
efibootmgr -c -d /dev/sdX -p Y -l "\EFI\systemd\systemd-bootx64.efi" -L "Linux Boot Manager"
Очистка и сортировка загрузочных записей
Отобразить очередь загрузки.
efibootmgr
Удалить 4-ую запись из очереди загрузки.
efibootmgr -b 4 -B
Изменить порядок загрузки.
efibootmgr -o 0,1,2
Git
Работа с репозиториями
Инициализировать структуру Git репозитория.
git init
Добавить файл README.md в индекс существующего репозитория.
git add README.md
Осуществить коммит изменений с выбранным заголовком.
git commit -m 'Initial commit'
Добавить удаленный репозиторий.
git remote add origin <GIT_URL_HERE>
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.
git push -u origin main
Показать адреса удаленных репозиториев.
git remote -v
Изменить адрес удаленного репозитория.
git remote set-url origin <NEW_GIT_URL_HERE>
Ветвление
Создать новую ветку.
git branch branch_name
Переключиться на требуемую ветвь.
git checkout branch_name
Создать новую ветвь и переключиться на неё в одной команде.
git checkout -b branch_name
Удалить локальную ветку.
git branch -d branch_name
Удалить удаленную ветку.
git push -d origin branch_name
Загрузить удаленную ветку в новую для этого локальную ветвь.
git fetch gitea master:fork
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.
git push gitea fork:master
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.
git fetch origin pull/103781/head:pr-103781 git checkout pr-103781
Удалить все ветви, которых больше нет на удалённом репозитории.
git fetch --prune
Подмодули
Инициализация, получение и извлечение всех существующих вложенных подмодулей.
git submodule update --init --recursive
Bare репозиторий
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:
branches config description FETCH_HEAD HEAD hooks info objects packed-refs refs
Для конвертации bare репозитория в "нормальное" состояние, требуется выполнить следующие действия:
git config core.bare false mkdir .git mv * .git/ git reset --hard
SOPS
SOPS - простой и удобный инструмент для управления секретами.
Зашифровать файл.
sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP "public key: \K(.*)") --in-place ./secret.yaml
Расшифровать файл.
sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP "public key: \K(.*)") --in-place ./secret.yaml
systemd
journalctl
sudo journalctl -u act_runner.service
Показать все сообщения для определенного сервиса.
X11-сервер
Включение возможности изменения раскладки клавиатуры через Alt + Shift.
setxkbmap -layout us,ru -option grp:alt_shift_toggle
Установить DPI для подключенного дисплея/монитора (Подсчитать DPI можно тут).
xrandr --output eDP1 --dpi 135.09
Удаленно запустить приложение на основном дисплее.
DISPLAY=:0 anydesk