Полезные команды Linux: различия между версиями
Comminux (обсуждение | вклад) Описание теперь над командой |
Comminux (обсуждение | вклад) м Фикс категории |
||
| (не показано 67 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ. | В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ. | ||
== Базовые команды == | == Файловые операции == | ||
=== Базовые команды === | |||
Создать символическую ссылку | |||
<code>ln -s /original/path/to/file /path/to/symlink</code> | |||
=== Общие команды === | |||
Запустить команду pwd -P в текущем каталоге и в поддиректориях. | Запустить команду pwd -P в текущем каталоге и в поддиректориях. | ||
| Строка 22: | Строка 16: | ||
Переименовать кириллические файлы в каталоге | Переименовать кириллические файлы в каталоге | ||
< | <pre>find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp1252 -t cp850 | iconv -f cp866 )"' sh {} \;</pre> | ||
=== Права доступа === | === Права доступа === | ||
| Строка 49: | Строка 43: | ||
Низкоуровневое форматирование накопителя. | Низкоуровневое форматирование накопителя. | ||
<code>sudo dd if=/dev/zero of=/dev/sdb bs=1M</code> | <code>sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress</code> | ||
Принудительно обновить таблицу разделов. | Принудительно обновить таблицу разделов. | ||
| Строка 60: | Строка 54: | ||
<code>tar -cf archive.tar file1 file2</code> | <code>tar -cf archive.tar file1 file2</code> | ||
Создать tar архив и исключить добавление отдельного файла. | |||
<code>tar --exclude='file3' -cf archive.tar file1 file2</code> | |||
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым. | |||
<code>tar -cf site1.tar -C /var/www/ site</code> | |||
Создать tar архив с Gzip сжатием. | Создать tar архив с Gzip сжатием. | ||
| Строка 76: | Строка 78: | ||
Посмотреть содержимое Zip архива | Посмотреть содержимое Zip архива | ||
<code>unzip -l | <code>unzip -l archive.zip</code> | ||
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива | |||
<code>unzip -Z1 archive.zip | xargs -I {} rm -v "{}"</code> | |||
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов. | Посмотреть содержимое Zip архива с кириллическими именами в названии файлов. | ||
| Строка 90: | Строка 96: | ||
<code>tar -xf archive.tar -C ~/folder</code> | <code>tar -xf archive.tar -C ~/folder</code> | ||
Другие возможные tar команды собраны здесь: | |||
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/ | |||
Распаковать zip архив в требуемую директорию. | |||
<code>unzip archive.zip -d ~/folder</code> | |||
==== Модификация архива ==== | |||
Добавить новый файл в tar архив. | |||
<code>tar -rvf archive.tar newfile</code> | |||
Удалить файл из tar архива. | |||
<code>tar --delete -f archive.tar file1</code> | |||
=== Portable Document Format (PDF) === | === Portable Document Format (PDF) === | ||
| Строка 134: | Строка 158: | ||
=== Видео === | === Видео === | ||
==== FFmpeg ==== | ==== FFmpeg ==== | ||
Конвертировать аудиодорожку видео в формат MP3. | |||
<code>ffmpeg -i filename.mp4 filename.mp3</code> | |||
Сделать копию видео в формате mp4. | |||
<code>ffmpeg -i example.mkv -c copy example.mp4</code> | |||
Кодировать видео с наложением субтитров (Создание хардсаба). | Кодировать видео с наложением субтитров (Создание хардсаба). | ||
< | <pre>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</pre> | ||
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной. | Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной. | ||
< | <pre>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</pre> | ||
Вырезать отрезок видео в выбранном диапазоне времени. | |||
<code>ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4</code> | |||
==== MKVToolNix ==== | ==== MKVToolNix ==== | ||
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры. | Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры. | ||
< | <pre>mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass</pre> | ||
==== yt-dlp ==== | |||
Cкачать плейлист YT с названием плейлиста в качестве имени папки | |||
<pre>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</pre> | |||
== Сетевые команды == | == Сетевые команды == | ||
| Строка 175: | Строка 217: | ||
=== Настройка файрвола === | === Настройка файрвола === | ||
==== UFW - Uncomplicated Firewall ==== | ==== UFW - Uncomplicated Firewall ==== | ||
Используется по умолчанию в Ubuntu. | Используется по умолчанию в Ubuntu. | ||
| Строка 189: | Строка 232: | ||
<code>sudo ufw insert 1 deny from 52.185.71.28 to any</code> | <code>sudo ufw insert 1 deny from 52.185.71.28 to any</code> | ||
== Базы данных == | |||
==== MariaDB ==== | |||
Подключиться к серверу MariaDB. | |||
<code>mariadb -u root -p</code> | |||
Проверка подключения к базе данных. | |||
<code>mariadb -u db_user -p -D db_name</code> | |||
Экспортировать базу данных. | |||
<code>mariadb-dump -u db_user -p db_name > backup.sql</code> | |||
Импортировать базу данных из резервной копии. Необходимо, чтобы база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]]. | |||
<code>mariadb -u db_user -p new_db < backup.sql</code> | |||
{{Примечание|Если при импорте будет возникать ошибка ERROR at line 1: Unknown command '\-'., то требуется дополнительное действие: https://habr.com/ru/articles/824490/}} | |||
==== PostgreSQL ==== | |||
Дамп всех баз данных в один файл | |||
<code>postgres pg_dumpall > postgres_databases.sql</code> | |||
== Виртуализация == | == Виртуализация == | ||
| Строка 196: | Строка 265: | ||
<code>sudo docker buildx build --platform=linux/amd64 .</code> | <code>sudo docker buildx build --platform=linux/amd64 .</code> | ||
Создать новый контейнер в фоне и дать ему определенное имя. | |||
<code>sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1</code> | |||
Отобразить список всех контейнеров. | Отобразить список всех контейнеров. | ||
| Строка 216: | Строка 289: | ||
<code>sudo docker container rm container_id</code> | <code>sudo docker container rm container_id</code> | ||
Удалить контейнеры с данными по наименованию образа, от которого они были созданы. | |||
<code>sudo docker container rm $(docker ps -a -q --filter "ancestor=containrrr/watchtower")</code> | |||
Удалить образ. | Удалить образ. | ||
| Строка 221: | Строка 298: | ||
<code>sudo docker rmi image_id</code> | <code>sudo docker rmi image_id</code> | ||
== | Удалить все неактивные образы из системы. | ||
<code>sudo docker rmi $(docker images -q)</code> | |||
Показать пути к файловым системам используемых контейнеров. | |||
<code>sudo docker inspect $(sudo docker ps -qa) | jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"'</code> | |||
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров. | |||
<code>sudo docker system prune -a -f</code> | |||
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower]. | |||
<pre>docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200</pre> | |||
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки. | |||
<pre>docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug</pre> | |||
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения. | |||
<pre>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</pre> | |||
Изменить политику перезапуска для существующего контейнера. | |||
<code>docker update --restart unless-stopped open-webui</code> | |||
== Обслуживание компьютера == | |||
=== Очистка кэша === | |||
<code>ccache -C</code> | |||
Очистить ccache кэш. | |||
<code>trizen -Scc</code> | |||
Очистить trizen кэш. | |||
== Пакетные менеджеры == | |||
=== Composer === | |||
Создать новый проект. | |||
<code>composer create-project laravel/laravel example-site</code> | |||
Установить необходимые зависимости в существующий проект. | |||
<code>composer install</code> | |||
Запустить скрипт dev, определенный в composer.json проекта. | |||
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения. | |||
<code>composer run dev</code> | |||
=== pacman === | |||
<code>pacman -q</code> | |||
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR. | |||
<code>rm /var/lib/pacman/db.lck</code> | |||
Удалить файл блокировки базы данных pacman. | |||
== Системы сборки == | |||
=== Scons === | |||
<code>scons -c</code> | |||
Очистить scons кэш. | |||
== Android == | |||
=== Android Debug Bridge (adb) === | |||
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий. | |||
<code>adb backup -noapk com.unciv.app -f unciv-data.ab</code> | |||
Получить список приложений, которые могут читать последний элемент в буфере обмена. | |||
<code>adb shell cmd appops query-op READ_CLIPBOARD allow</code> | |||
Запретить доступ к буферу обмена. | |||
<code>adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore</code> | |||
== Bash == | |||
=== Служебные символы === | |||
Запуск скрипта через эквивалент команды <code>source</code>. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через <code>echo</code> и регулярные выражения ($). | |||
<code>. environment.sh</code> | |||
== EFI - менеджер загрузки == | |||
=== efibootmgr === | === efibootmgr === | ||
==== Восстановление загрузочной записи ==== | ==== Восстановление загрузочной записи ==== | ||
| Строка 241: | Строка 408: | ||
<code>efibootmgr -o 0,1,2</code> | <code>efibootmgr -o 0,1,2</code> | ||
== | == Git == | ||
=== | === Работа с репозиториями === | ||
Инициализировать структуру Git репозитория. | |||
<code>git init</code> | |||
Добавить файл README.md в индекс существующего репозитория. | |||
<code>git add README.md</code> | |||
Осуществить коммит изменений с выбранным заголовком. | |||
<code>git commit -m 'Initial commit'</code> | |||
Добавить удаленный репозиторий. | |||
<code>git remote add origin <GIT_URL_HERE></code> | |||
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке. | |||
<code>git push -u origin main</code> | |||
Показать адреса удаленных репозиториев. | |||
<code>git remote -v</code> | |||
Изменить адрес удаленного репозитория. | |||
<code>git remote set-url origin <NEW_GIT_URL_HERE></code> | |||
=== Ветвление === | |||
Создать новую ветку. | |||
<code>git branch branch_name</code> | |||
Переключиться на требуемую ветвь. | |||
<code>git checkout branch_name</code> | |||
Создать новую ветвь и переключиться на неё в одной команде. | |||
<code>git checkout -b branch_name</code> | |||
Удалить локальную ветку. | |||
<code>git branch -d branch_name</code> | |||
Удалить удаленную ветку. | |||
<code>git push -d origin branch_name</code> | |||
Загрузить удаленную ветку в новую для этого локальную ветвь. | |||
<code>git fetch gitea master:fork</code> | |||
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь. | |||
<code>git push gitea fork:master</code> | |||
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки. | |||
<pre>git fetch origin pull/103781/head:pr-103781 | |||
git checkout pr-103781</pre> | |||
Удалить все ветви, которых больше нет на удалённом репозитории. | |||
<code>git fetch --prune</code> | |||
=== Подмодули === | |||
Инициализация, получение и извлечение всех существующих вложенных подмодулей. | |||
<code>git submodule update --init --recursive</code> | |||
=== Bare репозиторий === | |||
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории: | |||
<pre>branches config description FETCH_HEAD HEAD hooks info objects packed-refs refs</pre> | |||
Для конвертации bare репозитория в "нормальное" состояние, требуется выполнить следующие действия: | |||
<pre>git config core.bare false | |||
mkdir .git | |||
mv * .git/ | |||
git reset --hard</pre> | |||
=== SOPS === | |||
SOPS - простой и удобный инструмент для управления секретами. | |||
Зашифровать файл. | |||
<pre>sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP "public key: \K(.*)") --in-place ./secret.yaml</pre> | |||
Расшифровать файл. | |||
<pre>sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP "public key: \K(.*)") --in-place ./secret.yaml</pre> | |||
== systemd == | |||
=== journalctl === | |||
<code>sudo journalctl -u act_runner.service</code> | |||
Показать все сообщения для определенного сервиса. | |||
== X11-сервер == | |||
Включение возможности изменения раскладки клавиатуры через Alt + Shift. | |||
<code>setxkbmap -layout us,ru -option grp:alt_shift_toggle</code> | |||
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]). | |||
<code>xrandr --output eDP1 --dpi 135.09</code> | |||
Удаленно запустить приложение на основном дисплее. | |||
<code> | <code>DISPLAY=:0 anydesk</code> | ||
[[Категория:Руководства]] | [[Категория:Руководства]] | ||