Заметки на полях

Материал из Rosalab Wiki
Версия от 13:56, 10 декабря 2023; Noname (обсуждение | вклад) (2: дополнение)

Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

"$" — символ приглашения, означает что терминал готов принять команду от имени непривилегированного пользователя, т.е. не root.
"#" — означает что команду необходимо выполнять от пользователя root.

Источники: 1, 2


Содержание

1

aria2c

Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60

--summary-interval=<SEC>

Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).

--max-overall-download-limit


btrfs

Создание резервной копии снимка btrfs

Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only

# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main
# sync
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst

Восстановление из снимка будет производиться как-то так:

# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path
# sync

ubuntu-wiki: btrfs#снимки

Дефрагментация

# btrfs fi defrag -r /mnt

Перебалансировка системы

# btrfs balance start /mnt

ubuntu-wiki: балансировка


cdemu

удалить виртуальное cd/dvd-rom устройство

$ cdemu remove-device

добавить виртуальное cd/dvd-rom устройство

$ cdemu add-device


chattr — изменение атрибутов файлов

# chattr +i /path/to/file
# chattr -i /path/to/file

атрибут +i запрещает любое изменение, переименование и удаление файла/каталога, -i — разрешает.


dmsetup

После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ. В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1. Чтобы все вернуть, как было, нужно выполнить:

$ sudo dmsetup ls             - чтобы увидеть список таких носителей
$ sudo dmsetup remove_all     - чтобы удалить их


exiftool

Установить

$ sudo dnf in perl-Image-ExifTool

Удалить все метаданные у всех .jpg изображений в текущей директории

$ exiftool -all= *.jpg


ext4

Дефрагментация

$ sudo e4defrag -c /    # анализ корневого раздела
$ sudo e4defrag /       # дефрагментация корневого раздела

Уменьшить размер зарезервированного места

$ sudo tune2fs -m 0.1 /dev/sda1


ffmpeg

Изменить контейнер видеоролика и добавить метаданные

$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"
Примечание
Если title и comment существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.


find

найти исполняемые файлы с шаблоном *.zip

$ find /path -type f -perm /a=x -name '*.zip'

найти исполняемые файлы и напечатать

$ find /path -type f -perm /a=x

найти исполняемые файлы и сделать неисполняемыми

$ find /path -type f -perm /a=x -exec chmod -x '{}' \;

найти все файлы и напечатать

$ find /path -type f -print

найти все файлы и вывести их кол-во

$ find /path -type f -print | wc -l

найти файлы по шаблону и показать их суммарный размер

$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'

найти все файлы, подсчитать хеш-сумму и записать результат в файл

$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums

найти файлы по шаблону и удалить их

$ find /path -type f -name "*.directory" -exec rm {} \;

найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)

$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'

не учитывать регистр при поиске

$ find /path -type f -iname '*name-file*' 

рекурсивный расчет контрольных сумм файлов каталога

$ find /path -type f -print0 | xargs --null md5sum

исключить из поиска определенную директорию

$ find . -type f -not -path './dir/*' -iname name

найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid

# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/

Печатать имена файлов без ./

$ find . -printf '%P\n'


grep

Показать 20 символов после искомой фразы

$ grep -oE "искомая фраза.{20}" file.txt
$ grep -oE ".{0}искомая фраза.{20}" file.txt
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt

Показать 20 символов до искомой фразы

$ grep -oE ".{20}искомая фраза" file.txt
$ grep -oE ".{20}искомая фраза.{0}" file.txt
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt

Показать 20 символов до и после искомой фразы

$ grep -oE ".{20}искомая фраза.{20}" file.txt
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt

Несколько альтернативных паттернов в регулярном выражении

$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'

Подсчет кол-ва строк

посчитать все строки в т.ч. и пустые
$ echo -en 'line 1\n\n\nline4' | grep -c ""
не считать пустые строки
$ echo -en 'line 1\n\n\nline4' | grep -c .


handbrake

Показать список пресетов

$ handbrake -z

Конвертировать видео используя пресет

$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv


KDE

Отключение открытия Меню запуска приложений клавишей Super (Windows)

$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""


mediainfo

Показать значение конкретного поля

$ mediainfo --Output='General;%Comment%' file_name
$ mediainfo --Output='Video;%Width%' file_name
$ mediainfo --Output='Video;%Width%x%Height%' file_name
$ mediainfo --Output='Video;%Width%\n%Height%' file_name

Показать «Имя файла :: Продолжительность :: Битрейт файла»

$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name
Примечание

%Duration/String3% Показывает время в формате "00:01:02.333"
%Duration/String2% Показывает время в формате "0 h 1 min 2 s"
%Duration/String1% Показывает время в формате "0 h 1 min 2 s 333 ms"

$ mediainfo --Help-Output

Показать список доступных полей

$ mediainfo --Info-Parameters
Примечание
--Inform делает тоже самое, что и --Output. Скорее всего первое является алиасом для второго.


minidlna

1. Сначала необходимо установить пакет minidlna.
2. Потом нужно добавить в файл /etc/minidlna.conf под #media_dir=/opt:

media_dir=A,/home/username/Музыка
media_dir=V,/home/username/Видео
media_dir=P,/home/username/Изображения

3. А после выполнить команду

$ sudo systemctl start minidlna.service


postgresql. psql

Установка

$ sudo dnf install postgresql postgresql-contrib postgresql-server

Запуск сервера postgresql

$ sudo systemctl start postgresql12.service

Создание базы данных

$ sudo su postgres
psql
CREATE USER test_user WITH password '123456qwerty';
CREATE DATABASE test_database OWNER test_user;

Удаление базы данных

DROP DATABASE test_db;

Показывать номера строк при выводе в less

$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc

Вывести данные таблицы с конвертированием unixtime

select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;

Вывести данные таблицы и отразить дату и время в конкретном часовом поясе

select col1, to_char(col2_with_datetime AT TIME ZONE 'Time_Zone_Name', 'YYYY.MM.DD hh24:mi') as col2_with_datetime, col3, col4 from table;

Имена временных зон можно узнать в документации postgresql.


qemu

Установка

$ sudo dnf install qemu qemu-kvm

Проверить загрузочную флешку в qemu

$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb

virt-manager

Virt-Manager не может подключиться к QEMU/KVM

Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога  

Чтобы решить эту проблему нужно запустить libvirtd:

$ sudo systemctl start libvirtd


rsync и ssh

Загрузка на удаленную машину

$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/
  • -a — Режим архивирования
  • -v — Выводить подробную информацию о процессе копирования
  • -zz — Сжимать файлы перед передачей
  • -e — Использовать другой транспорт
  • --bwlimit — Ограничение скорости KBytes в секунду
  • --progress — Выводить прогресс передачи файла
  • --dry-run — Показать, что скопируется
  • -c — Проверка контрольных сумм для файлов
  • -b — Создание резервной копии
  • -u — Не перезаписывать более новые файлы
  • --delete — Удалять файлы которых нет в источнике
  • --exclude — Исключить файлы по шаблону
  • --include — Не исключать файлы по шаблону
  • -P — эквивалент для --partial --progress

Загрузка с удаленной машины

$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file

Отправить только файлы из текущей директории в /output/dir/

$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/
Примечание
В rsync параметр --delete не работает вместе с --no-recursive поэтому исключать директории нужно с помощью программы find и параметра --exclude-from у rsync


Примечание
rsync работает быстрее, чем scp


ssh

Отправить сообщение на экран пользователя

Смотрим какой дисплей использует пользователь

$ who
  user       tty1         date (:0)
  user       pts/0        date (:0)
  :0

логинимся под тем пользователем

$ su user

отправляем сообщение

$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"

Список подключенных сеансов

$ netstat -tnpa | grep 'ESTABLISHED.*sshd'
$ ps auxwww | grep sshd:

sshfs

$ sudo mkdir -v -m 755 /media/remote
$ sshfs -C -p 123 user@host:/home /media/remote/
$ fusermount -u /media/remote


sed

Несколько паттернов в регулярном выражении

$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'

Текст в нижний регистр

$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'

Текст в верхний регистр

$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'

Сделать первую букву каждого слова большой (titlecase)

$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"


tput

tput bold            # Включить жирность
tput dim             # Затемнить текст
tput smul            # Включить подчеркивание
tput rmul            # Отключить подчеркивание
tput rev             # Поменять цвет текста на цвет фона
tput setaf 1-255     # Установить цвет текста
tput setab 1-255     # Установить фон текста
tput sgr0            # Вернуть к значениям по умолчанию
tput blink           # мигающий текст


uuencode/uudecode, xxd

Преобразовать двоичный файл в текстовую форму

uuencode -m input-file set-file-name >output-file
xxd -p input-file >output-file

Преобразовать текст в двоичный файл

uudecode -o output-file input-file
xxd -p -r input-file >output-file

чтобы преобразовать stdin нужно использовать xxd с параметром -ps


virtualbox

Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:

$ sudo usermod -a -G vboxusers $USER

Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [1]

Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf

$ sudo usermod -a -G vboxsf $USER


yakuake

Добавить действия в дельфине

Чтобы в дельфине в контекстное меню добавить действия «Запустить в Yakuake» и «Открыть Yakuake в этой папке» надо сделать следующее:

$ git clone https://github.com/aplatanado/yakuake-session.git
$ sudo cp yakuake-session /usr/bin
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/

Удалить из yakuake кнопку закрытия программы

Нужно закомментировать в файле title.skin выбранной темы блок QuitButton. В ConfigButton значению x присвоить 30, а в FocusButton — 53. Скины yakuake в Росе находятся в каталоге /usr/share/yakuake/skins

Запуск программ в Yakuake при старте KDE

$ qdbus org.kde.yakuake /yakuake/sessions runCommand rtorrent # запуск команды rtorrent в текущей сессии
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в добавленной сессии


zsh

Установка

$ sudo dnf install zsh

Установка oh-my-zsh

$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Чтобы сделать zsh шеллом по умолчанию нужно выполнить:

$ sudo usermod -s /bin/zsh $USER (Роса)
$ sudo usermod -s /usr/bin/zsh $USER (ubuntu)

Псевдонимы расширения (suffix aliases) Эти псевдонимы позволяют расширить команду вида name.ext до program name.ext. Например, если в файле конфигурации прописать:

alias -s avi=mplayer
alias -s mpg=mplayer

команда movie.avi будет расширена до mplayer movie.avi

В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш alt+h.

7z

Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)

$ 7z a -mhe=on -p test.7z /directory/file


2

Брать данные из буфера, а не передавать их программе вручную

Например ссылку можно передавать yt-dlp так:

$ yt-dlp -f 22 -s "$(xsel -o)"     # -s  - симулировать загрузку

или wget:

$ wget --spider "$(xsel -o)"     # --spider  - показать размер файла на сервере

Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить

$ xsel -o | wc -l


Видеть результат выполнения команды на экране, и одновременно писать его в файл

Для этого необходимо воспользоваться командой tee:

$ some_command parameters | tee -a /tmp/logfile.txt

Или

$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log

Воспроизвести записанное с помощью script можно так:

$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4    # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.

Выполнить команду и сделать скриншот её вывода

$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png


Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена

$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png


Запись свободного места нулями

$ cat /dev/zero >/path/file
$ dd if=/dev/zero of=/path/file bs=4M  #или bs=4M-20M


Запуск простого файлового вебсервера

ruby

$ ruby -run -ehttpd $HOME/files -p8000

python3

$ python3 -m http.server 8000 -d $HOME/files

python2

$ python2 -m SimpleHTTPServer 8000    # Текущая директория


Изменить разрешение экрана

$ xrandr -s 1366x768
$ xrandr -s 800x600


Информация по пользовательским скриптам

Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:

  • сами скрипты класть в /usr/local/bin/
  • иконки (если необходимы) в /usr/local/share/icons/name-script/
  • desktop файлы в /usr/local/share/applications/name-script

Если для одного то в:

  • скрипты в ~/bin или в $PATH добавить ~/.local/bin
  • иконки в ~/.local/share/icons/
  • desktop файлы в ~/.local/share/applications/


Комбинации клавиш в терминале

  • ctrl+l — очистить экран (bash, zsh)
  • ctrl+a — перейти в начало строки (bash, zsh)
  • ctrl+e — перейти в конец строки (bash, zsh)
  • ctrl+u — вырезать все слева от курсора (bash, zsh удаляет всю строку)
  • ctrl+k — вырезать все справа от курсора (bash, zsh)
  • ctrl+w — вырезать слово слева от курсора (bash, zsh)
  • ctrl+y — вставить вырезанный текст (bash, zsh)
  • ctrl+d — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)
  • ctrl+r — поиск по ранее запущенным командам (bash, zsh)
  • ctrl+shift+- — отменить последнее действие (bash, zsh)
  • ctrl+x+e — открыть текстовый редактор для изменения введенной строки (bash, zsh)
  • alt+u — перевести текст после курсора в верхний регистр (bash, zsh)
  • alt+d — удалить слово после курсора (bash, zsh)
  • alt+backspace — удалить слово перед курсором (bash, zsh)
  • alt+. — вставить последний аргумент из предыдущей команды (bash, zsh)


Коды завершения программ

Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:

$?


Конвертировать все .odt в директории в .pdf

$ libreoffice --headless --convert-to pdf *.odt


Конвертировать все .odt в директории в .txt

$ soffice --headless --convert-to txt:Text *.odt


Конвертировать все .doc и docx в директории в .txt

$ soffice --headless --convert-to txt:Text *.doc *.docx


Конвертировать fb2 в epub или docx

$ ebook-convert "file name.fb2" "file name.epub"
$ ebook-convert file_name.fb2 file_name.docx

На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.
Чтобы использовать ebook-convert нужно установить calibre.

fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.


Настройка swappiness

Временные изменения:

$ cat /proc/sys/vm/swappiness
$ sudo sysctl vm.swappiness=25
$ sudo sysctl vm.vfs_cache_pressure=1000

Постоянные в /etc/sysctl.conf:

vm.swappiness=25
vm.vfs_cache_pressure=1000
Примечание

Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50
Если HDD, то наибольшую отзывчивость можно получить при установке 1000


Отправить весь вывод команды в /dev/null

$ command >/dev/null 2>&1


Отключение темы Plymouth в Росе

<=2016.1

Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле /etc/default/grub в GRUB_CMDLINE_LINUX_DEFAULT параметры quiet и splash=silent.

2021.1

Нужно в /etc/default/grub quiet и splash=silent заменить на plymouth.enable=0. Если хочется видеть строки загрузки, то splash=silent надо удалить, а вместо quiet поставить verbose.


Отключение истории bash

Чтобы временно отключить историю, выполните:

$ set +o history

После этого вводимые команды не будут сохраняться в $HISTFILE.

Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.

Включить историю обратно можно командой

$ set -o history


Показать смонтированные ФС

$ findmnt --all


Показать только скрытые каталоги и файлы

$ ls -A | grep "\."


Посмотреть открытые порты

$ sudo lsof -Pni | grep LISTEN


Посмотреть информацию о релизе дистрибутива

$ cat /etc/os-release


Приостановка выполнения команды в терминале

Приостановка делается сочетанием клавиш Ctrl+Z
Продолжить выполнение можно следующим образом:

$ jobs

смотрим номер приостановленной задачи

$ fg N

вместо N номер нужной задачи


Получить прогресс выполнения dd

$ dd if=/dev/urandom of=/dev/null status=progress
$ watch -n 5 pkill -x -USR1 dd
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)'    # где -n 5 = 5 сек.


Распаковать rpm-пакет в терминале

$ rpm2cpio pkg-name.rpm | cpio -idm


Сделать снимок с веб-камеры из терминала

$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg


Создание снимков экрана из терминала

Снимок экрана

$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"

Снимок области

$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"


Собрать расширение из исходного кода для firefox

$ 7z a ../extension-name.xpi * -r

Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.

Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/


Сделать vim редактором по умолчанию в терминале

В R12 сначала надо удалить пакет nano-as-default-editor.

Установить vim редактором по умолчанию для всех пользователей

$ echo "EDITOR=vim" | sudo tee -a /etc/environment


Управление сервисами

Rosa

# systemctl {enable|disable|start|stop|restart|status} name_service

Ubuntu

# service name_service {start|stop|restart|reload|force-reload|status}
# systemctl {enable|disable} name_service


Узнать DE

$ echo $XDG_CURRENT_DESKTOP
$ echo $DESKTOP_SESSION
$ wmctrl -m


Управление группами в линукс

drakuser — Гуй в kde (может и в других de)
usermod — инструмент в терминале


Удаление пароля пользователя

$ sudo passwd -d user


Узнать дату создания или изменения файла

$ stat -c %y file  --- время модификации
$ stat -c %w file  --- время создания, если поддерживается ФС


Удалить запись из истории в zsh

$ LC_ALL=C sed -i '/$1/d' $HISTFILE


Убить все процессы пользователя

$ pgrep -u $USER | xargs kill -9
$ pkill -9 -u $USER


Узнать дату установки ОС Linux из свойств файловой системы

$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created
В ext4 точно работает. В других фс не знаю.


Узнать точную версию sata диска

$ sudo smartctl -a /dev/sda | grep SATA


backups (резервные копии)

Создание рез. копии с помощью squashfs

Делаем бэкап раздела sdd1

$ sudo mount /dev/sdd1 /mnt/sdd1
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs

Распаковываем на другой носитель

$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs