Заметки на полях — различия между версиями
Noname (обсуждение | вклад) (→Узнать дату установки ОС Linux из свойств файловой системы (ext4)) |
Noname (обсуждение | вклад) м (→ffmpeg: дополнение) |
||
(не показано 77 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | {{Таинственные знаки "Доллар" и "Решетка"}} | ||
+ | <br /> | ||
+ | |||
= 1 = | = 1 = | ||
Строка 4: | Строка 7: | ||
== aria2c == | == aria2c == | ||
− | Задать интервал в секундах до вывода сообщения о прогрессе загрузки | + | === Задать интервал в секундах до вывода сообщения о прогрессе загрузки === |
+ | --summary-interval=0 | ||
+ | 0 запрещает вывод. По умолчанию 60. | ||
− | + | === Задать максимальную общую скорость загрузки === | |
− | + | --max-overall-download-limit=1M | |
− | Задать максимальную общую скорость загрузки | + | По умолчанию 0, т.е. неограниченно. |
− | + | ||
− | + | ||
Строка 19: | Строка 22: | ||
=== Создание резервной копии снимка btrfs === | === Создание резервной копии снимка btrfs === | ||
− | Создаем read-only | + | Создаем 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 | |
− | + | ||
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки] | [https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки] | ||
Строка 34: | Строка 35: | ||
=== Дефрагментация === | === Дефрагментация === | ||
− | + | # btrfs fi defrag -r /mnt | |
=== Перебалансировка системы === | === Перебалансировка системы === | ||
− | + | # btrfs balance start /mnt | |
+ | [https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка] | ||
<!-- C --> | <!-- C --> | ||
== cdemu == | == cdemu == | ||
− | + | === Удалить виртуальное cd/dvd-rom устройство === | |
− | + | $ cdemu remove-device | |
− | + | ||
− | + | === Добавить виртуальное cd/dvd-rom устройство === | |
+ | $ cdemu add-device | ||
− | |||
+ | == chattr == | ||
+ | === Запретить изменение, переименование и удаление файла === | ||
+ | # chattr +i /path/to/file | ||
+ | {{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}} | ||
− | == | + | === Снять запрет === |
− | + | # chattr -i /path/to/file | |
− | + | ||
− | + | ||
Строка 62: | Строка 65: | ||
== dmsetup == | == dmsetup == | ||
− | После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ. | + | После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ. |
− | В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1. | + | В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1. |
Чтобы все вернуть, как было, нужно выполнить: | Чтобы все вернуть, как было, нужно выполнить: | ||
− | + | $ sudo dmsetup ls - чтобы увидеть список таких носителей | |
− | + | $ sudo dmsetup remove_all - чтобы удалить их | |
− | + | ||
Строка 73: | Строка 75: | ||
== exiftool == | == exiftool == | ||
− | + | === Установка === | |
− | + | $ sudo dnf in perl-Image-ExifTool | |
− | + | === Удаление всех метаданных === | |
+ | Удалить все метаданные у всех .jpg изображений в текущей директории | ||
+ | $ exiftool -all= *.jpg | ||
== ext4 == | == ext4 == | ||
− | Дефрагментация | + | === Дефрагментация === |
+ | $ sudo e4defrag -c / # анализ корневого раздела | ||
+ | $ sudo e4defrag / # дефрагментация корневого раздела | ||
− | + | === Уменьшение размера зарезервированного места === | |
− | + | $ sudo tune2fs -m 0.1 /dev/sda1 | |
− | |||
− | + | <!-- F --> | |
+ | == ffmpeg == | ||
− | + | === Извлечь аудио из видеофайла === | |
+ | Если нет желания заморачиваться | ||
+ | $ ffmpeg -i video.mp4 -vn output.mp3 | ||
− | + | Если нужно изъять дорожку без конвертирования | |
− | + | $ ffmpeg -i video.mp4 | |
− | + | Внизу ищем строку '''Stream ...: Audio:''' | |
− | + | Если там mp3, то | |
+ | $ ffmpeg -i video.mp4 -vn -c:a copy output.mp3 | ||
− | + | Если opus | |
+ | $ ffmpeg -i video.mp4 -vn -c:a copy output.opus | ||
− | + | Если aac | |
+ | $ ffmpeg -i video.mp4 -vn -c:a copy output.aac | ||
− | + | === Изменить контейнер видеоролика и добавить метаданные === | |
+ | $ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4" | ||
− | + | {{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}} | |
− | + | === Обрезать аудио === | |
+ | Начало | ||
+ | $ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3 | ||
− | + | Конец | |
+ | $ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд. | ||
− | + | === Превратить аудио в видео с одной картинкой === | |
+ | $ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4 | ||
− | + | {{Простое примечание| | |
+ | -c:a copy — если не нужно конвертировать аудио.<br /> | ||
+ | <nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио. | ||
+ | }} | ||
− | + | === Сохранить видео без аудио === | |
+ | $ ffmpeg -i video.mp4 -an -c:v copy output.mp4 | ||
− | + | == 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 {} \; | ||
− | + | '''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет 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 '{}' \; | ||
− | + | '''Найти в текущей директории файлы и показать их названия без ./''' | |
− | + | $ find . -maxdepth 1 -type f -printf '%P\n' | sort | |
− | |||
− | + | <!-- G --> | |
− | + | == 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 | ||
+ | |||
+ | === Показать по 2 строки до и после найденного вхождения === | ||
+ | $ grep -A2 -B2 "искомая фраза" 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 . | ||
− | |||
<!-- H --> | <!-- H --> | ||
+ | |||
+ | == handbrake == | ||
+ | === Показать список пресетов === | ||
+ | $ handbrake -z | ||
+ | |||
+ | === Конвертировать видео используя пресет === | ||
+ | $ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv | ||
+ | |||
+ | |||
<!-- I --> | <!-- I --> | ||
<!-- J --> | <!-- J --> | ||
+ | |||
+ | == jq == | ||
+ | '''Отформатировать json и сохранить в новом файле''' | ||
+ | jq -M . old.json >new.json # -M - монохромный текст | ||
+ | |||
+ | '''Показать отформатированный и колоризированный json''' | ||
+ | jq -C . file-name.json | less | ||
+ | |||
<!-- K --> | <!-- K --> | ||
+ | |||
+ | == KDE == | ||
+ | |||
+ | === Отключение открытия Меню запуска приложений клавишей Super (Windows) === | ||
+ | |||
+ | $ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta "" | ||
+ | |||
+ | |||
<!-- L --> | <!-- L --> | ||
<!-- M --> | <!-- M --> | ||
+ | |||
+ | == mediainfo == | ||
+ | '''Показать значение конкретного поля''' | ||
+ | $ mediainfo --Output='General;%Comment%' file_name # Комментарий | ||
+ | $ mediainfo --Output='Video;%Width%' file_name # Ширина видео | ||
+ | $ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x". | ||
+ | |||
+ | '''Получить список доступных полей''' | ||
+ | $ mediainfo --Info-Parameters | ||
+ | |||
+ | '''Получить справку по параметру --Output''' | ||
+ | $ mediainfo --Help-Output | ||
+ | |||
+ | '''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»''' | ||
+ | $ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name | ||
+ | $ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' * | ||
+ | |||
+ | {{Простое примечание| | ||
+ | '''%Duration%''' Показывает время в миллисекундах<br /> | ||
+ | '''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /> | ||
+ | '''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /> | ||
+ | '''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''" | ||
+ | }} | ||
+ | |||
+ | |||
+ | {{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}} | ||
+ | |||
== minidlna == | == minidlna == | ||
− | + | === Установка === | |
− | + | $ sudo dnf in minidlna | |
− | + | === Расшаривание директорий === | |
− | + | В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем: | |
− | + | media_dir=A,/home/username/Музыка | |
+ | media_dir=V,/home/username/Видео | ||
+ | media_dir=P,/home/username/Изображения | ||
− | + | === Запуск === | |
+ | $ sudo systemctl start minidlna.service | ||
− | + | === Автозапуск === | |
+ | $ sudo systemctl enable minidlna.service | ||
Строка 179: | Строка 296: | ||
<!-- O --> | <!-- O --> | ||
<!-- P --> | <!-- P --> | ||
− | |||
− | == | + | == 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_database; | ||
+ | |||
+ | === Показывать номера строк при выводе в 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; | ||
+ | |||
+ | Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql]. | ||
+ | |||
+ | |||
+ | <!-- Q --> | ||
+ | |||
+ | == qemu == | ||
+ | === Установка === | ||
+ | $ sudo dnf install qemu qemu-kvm | ||
+ | |||
+ | === Проверка загрузочной флешки === | ||
+ | $ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb | ||
=== virt-manager === | === virt-manager === | ||
Virt-Manager не может подключиться к QEMU/KVM | Virt-Manager не может подключиться к QEMU/KVM | ||
− | + | Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога | |
− | + | ||
Чтобы решить эту проблему нужно запустить libvirtd: | Чтобы решить эту проблему нужно запустить libvirtd: | ||
− | + | $ sudo systemctl start libvirtd | |
− | + | ||
Строка 203: | Строка 346: | ||
== rsync и ssh == | == rsync и ssh == | ||
+ | |||
=== Загрузка на удаленную машину === | === Загрузка на удаленную машину === | ||
− | + | $ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/ | |
− | * -a | + | * '''-a''' — Режим архивирования |
− | * -v | + | * '''-v''' — Выводить подробную информацию о процессе копирования |
− | * -zz | + | * '''-zz''' — Сжимать файлы перед передачей |
− | * -e | + | * '''-e''' — Использовать другой транспорт |
− | * --bwlimit | + | * '''--bwlimit''' — Ограничение скорости KBytes в секунду |
− | * --progress | + | * '''--progress''' — Выводить прогресс передачи файла |
− | * --dry-run | + | * '''--dry-run''' — Показать, что скопируется |
− | * -c | + | * '''-c''' — Проверка контрольных сумм для файлов |
− | * -b | + | * '''-b''' — Создание резервной копии |
− | * -u | + | * '''-u''' — Не перезаписывать более новые файлы |
− | * --delete | + | * '''--delete''' — Удалять файлы которых нет в источнике |
− | * --exclude | + | * '''--exclude''' — Исключить файлы по шаблону |
− | * --include | + | * '''--include''' — Не исключать файлы по шаблону |
− | * -P | + | * '''-P''' — эквивалент для --partial --progress |
− | === | + | === Скачивание с удаленной машины === |
− | + | $ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file | |
− | rsync работает быстрее, чем scp | + | === Отправить только файлы из текущей директории в /output/dir/ === |
+ | $ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/ | ||
+ | $ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/ | ||
+ | |||
+ | {{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}} | ||
+ | |||
+ | |||
+ | {{Простое примечание|rsync работает быстрее, чем scp}} | ||
<!-- S --> | <!-- S --> | ||
+ | |||
+ | == 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" | ||
+ | |||
+ | |||
<!-- T --> | <!-- T --> | ||
== tput == | == tput == | ||
− | + | tput bold # Включить жирность | |
− | + | tput dim # Затемнить текст | |
− | + | tput smul # Включить подчеркивание | |
− | + | tput rmul # Отключить подчеркивание | |
− | + | tput rev # Поменять цвет текста на цвет фона | |
− | + | tput setaf 1-255 # Установить цвет текста | |
− | + | tput setab 1-255 # Установить фон текста | |
− | + | tput sgr0 # Вернуть к значениям по умолчанию | |
− | + | tput blink # мигающий текст | |
Строка 244: | Строка 438: | ||
== uuencode/uudecode, xxd == | == 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 === |
− | + | $ echo -n "Hello world." | xxd -ps | |
− | + | 48656c6c6f20776f726c642e | |
− | + | $ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo | |
− | + | Hello world. | |
− | + | ||
Строка 260: | Строка 456: | ||
== virtualbox == | == virtualbox == | ||
− | Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой: | + | === USB === |
+ | Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /> | ||
+ | Это можно сделать либо через графический интерфейс системы, либо в терминале командой: | ||
+ | $ sudo usermod -a -G vboxusers $USER | ||
− | + | Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org] | |
− | + | === Общие папки === | |
− | + | Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf''' | |
− | Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf | + | $ sudo usermod -a -G vboxsf $USER |
− | + | ||
− | + | ||
Строка 276: | Строка 473: | ||
== yakuake == | == yakuake == | ||
− | === | + | === Добавление действий в контекстное меню ФМ Dolphin === |
− | + | После выполнения этих команд: | |
+ | $ 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" и "Открыть Yakuake в этой папке". | |
− | + | ||
− | + | ||
− | === | + | === Удаление из yakuake кнопки закрытия программы === |
− | Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''. | + | Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''. |
− | В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' | + | В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''. |
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins''' | Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins''' | ||
− | + | === Запуск программ в Yakuake при старте KDE === | |
− | + | $ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии | |
− | + | $ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии | |
− | + | $ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии | |
− | + | ||
Строка 298: | Строка 495: | ||
== zsh == | == 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 /usr/bin/zsh $USER | ||
− | + | === Варианты PROMPT === | |
+ | 1: | ||
+ | [Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь | ||
+ | » команды вводятся на новой строке | ||
+ | добавляем в '''~/.zshrc''' строку | ||
+ | export PROMPT=$'$FG[237]${(l.COLUMNS..-.)}%{$reset_color%}$FG[032][%n %D{%m.%d %H:%M}] %~$(git_prompt_info)$(hg_prompt_info) \n$FG[105]%(!.#.»)%{$reset_color%} ' | ||
+ | Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем | ||
+ | NEWLINE=$'\n' | ||
− | + | 2: | |
+ | [Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке | ||
+ | Добавляем в '''~/.zshrc''' | ||
+ | export PROMPT='$FG[237]${(l.COLUMNS..-.)}%{$reset_color%}$FG[032][%n %D{%m.%d %H:%M}] %(4~|%-1~/.../%2d|%3~)$(git_prompt_info)$(hg_prompt_info) $FG[105]%(!.#.»)%{$reset_color%} ' | ||
+ | Подробности тута: https://stackoverflow.com/a/50696779/19807992 | ||
− | + | === Открытие ман-страницы указанной программы комбинацией клавиш === | |
− | + | Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.). | |
+ | |||
+ | === Псевдонимы расширения (suffix aliases) === | ||
+ | Если в '''~/.zshrc''' прописать: | ||
+ | alias -s mp4=smplayer | ||
+ | команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''. | ||
== 7z == | == 7z == | ||
− | Создание архива с паролем и скрытым содержимым (содержимое можно | + | === Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) === |
+ | $ 7z a -mhe=on -p test.7z /directory/file | ||
− | |||
= 2 = | = 2 = | ||
Строка 321: | Строка 537: | ||
<!-- А --> | <!-- А --> | ||
<!-- Б --> | <!-- Б --> | ||
+ | |||
+ | == Брать данные из буфера, а не передавать их программе вручную == | ||
+ | Например ссылку можно передавать yt-dlp так: | ||
+ | $ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку | ||
+ | |||
+ | или wget: | ||
+ | $ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере | ||
+ | |||
+ | Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить | ||
+ | $ xsel -o | wc -l | ||
+ | |||
+ | Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так | ||
+ | $ xsel -o | sort | ||
+ | |||
<!-- В --> | <!-- В --> | ||
== Видеть результат выполнения команды на экране, и одновременно писать его в файл == | == Видеть результат выполнения команды на экране, и одновременно писать его в файл == | ||
Для этого необходимо воспользоваться командой tee: | Для этого необходимо воспользоваться командой 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 | ||
Строка 341: | Строка 580: | ||
== Запись свободного места нулями == | == Запись свободного места нулями == | ||
− | + | $ 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 | ||
+ | |||
+ | или | ||
+ | $ sudo dnf in python3-twisted | ||
+ | $ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000" | ||
+ | |||
+ | '''python2''' | ||
+ | $ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория | ||
Строка 348: | Строка 602: | ||
== Изменить разрешение экрана == | == Изменить разрешение экрана == | ||
− | + | $ xrandr -s 1366x768 | |
− | + | $ xrandr -s 800x600 | |
== Информация по пользовательским скриптам == | == Информация по пользовательским скриптам == | ||
− | Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по: | + | Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по: |
* сами скрипты класть в '''/usr/local/bin/''' | * сами скрипты класть в '''/usr/local/bin/''' | ||
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/''' | * иконки (если необходимы) в '''/usr/local/share/icons/name-script/''' | ||
* desktop файлы в '''/usr/local/share/applications/name-script''' | * desktop файлы в '''/usr/local/share/applications/name-script''' | ||
− | Если для одного то в: | + | Если для одного то в: |
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin''' | * скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin''' | ||
* иконки в '''~/.local/share/icons/''' | * иконки в '''~/.local/share/icons/''' | ||
Строка 367: | Строка 621: | ||
== Комбинации клавиш в терминале == | == Комбинации клавиш в терминале == | ||
− | * '''ctrl+l''' | + | * '''ctrl+l''' — очистить экран (bash, zsh) |
− | * '''ctrl+a''' | + | * '''ctrl+a''' — перейти в начало строки (bash, zsh) |
− | * '''ctrl+e''' | + | * '''ctrl+e''' — перейти в конец строки (bash, zsh) |
− | * '''ctrl+u''' | + | * '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку) |
− | * '''ctrl+k''' | + | * '''ctrl+k''' — вырезать все справа от курсора (bash, zsh) |
− | * '''ctrl+w''' | + | * '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh) |
− | * '''ctrl+y''' | + | * '''ctrl+y''' — вставить вырезанный текст (bash, zsh) |
− | * '''ctrl+d''' | + | * '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh) |
− | * '''ctrl+r''' | + | * '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh) |
− | * '''ctrl+shift+-''' | + | * '''ctrl+shift+-''' — отменить последнее действие (bash, zsh) |
− | * '''ctrl+x+e''' | + | * '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh) |
+ | |||
+ | * '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh) | ||
+ | * '''alt+d''' — удалить слово после курсора (bash, zsh) | ||
+ | * '''alt+backspace''' — удалить слово перед курсором (bash, zsh) | ||
+ | * '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh) | ||
− | |||
− | |||
− | |||
− | |||
== Коды завершения программ == | == Коды завершения программ == | ||
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /> | Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /> | ||
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /> | В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /> | ||
− | + | $? | |
== Конвертировать все .odt в директории в .pdf == | == Конвертировать все .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'''.<br /> | ||
+ | Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''. | ||
+ | |||
+ | '''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''. | ||
<!-- Л --> | <!-- Л --> | ||
Строка 399: | Строка 670: | ||
== Настройка swappiness == | == Настройка 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 указывает размер используемого дискового кэша.<br /> | ||
+ | Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /> | ||
+ | Если HDD, то наибольшую отзывчивость можно получить при установке 1000 | ||
+ | }} | ||
Строка 416: | Строка 690: | ||
== Отправить весь вывод команды в /dev/null == | == Отправить весь вывод команды в /dev/null == | ||
− | + | $ command >/dev/null 2>&1 | |
== Отключение темы Plymouth в Росе == | == Отключение темы Plymouth в Росе == | ||
+ | |||
==== <=2016.1 ==== | ==== <=2016.1 ==== | ||
Строка 425: | Строка 700: | ||
==== 2021.1 ==== | ==== 2021.1 ==== | ||
− | Нужно в '''/etc/default/grub''' ''' | + | Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить. |
+ | |||
+ | == Отключение истории 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 | |
+ | |||
+ | |||
+ | == Получить суммарную длительность всех mp3 в директории == | ||
+ | $ ms=0; for FILE in *.mp3; do let "ms+=$(mediainfo --Inform='General;%Duration%' "$FILE")"; done; let "s=ms/1000" ; echo "$(( $s/3600 )):$(( $s/60%60 )):$(( $s%60%60 )).$(( $ms%1000 )) :: $s s." | ||
Строка 447: | Строка 741: | ||
Продолжить выполнение можно следующим образом: | Продолжить выполнение можно следующим образом: | ||
− | + | $ jobs | |
смотрим номер приостановленной задачи | смотрим номер приостановленной задачи | ||
− | + | $ fg N | |
вместо N номер нужной задачи | вместо N номер нужной задачи | ||
Строка 457: | Строка 751: | ||
== Получить прогресс выполнения dd == | == Получить прогресс выполнения 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 сек. | |
Строка 465: | Строка 759: | ||
== Распаковать rpm-пакет в терминале == | == Распаковать rpm-пакет в терминале == | ||
− | + | $ rpm2cpio pkg-name.rpm | cpio -idm | |
<!-- С --> | <!-- С --> | ||
− | == Сделать | + | == Сделать "Да" ответом по умолчанию в dnf == |
− | + | $ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf | |
− | + | ||
− | == | + | == Сделать снимок с веб-камеры из терминала == |
+ | $ 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 == |
− | + | '''Снимок экрана''' | |
+ | $ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png" | ||
+ | |||
+ | '''Снимок области''' | ||
+ | $ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png" | ||
== Собрать расширение из исходного кода для firefox == | == Собрать расширение из исходного кода для firefox == | ||
− | + | $ 7z a ../extension-name.xpi * -r | |
− | Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое. | + | Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое. |
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/ | Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/ | ||
− | == | + | == Сделать vim редактором по умолчанию в терминале == |
− | + | В R12 сначала надо удалить пакет '''nano-as-default-editor'''. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Установить vim редактором по умолчанию для всех пользователей | ||
+ | $ echo "EDITOR=vim" | sudo tee -a /etc/environment | ||
<!-- Т --> | <!-- Т --> | ||
Строка 511: | Строка 800: | ||
== Управление сервисами == | == Управление сервисами == | ||
− | + | '''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 == | == Узнать DE == | ||
− | + | $ echo $XDG_CURRENT_DESKTOP | |
− | + | $ echo $DESKTOP_SESSION | |
− | + | $ wmctrl -m | |
== Управление группами в линукс == | == Управление группами в линукс == | ||
− | '''drakuser''' | + | '''drakuser''' — Гуй в kde (может и в других de)<br /> |
− | '''usermod''' | + | '''usermod''' — инструмент в терминале |
== Удаление пароля пользователя == | == Удаление пароля пользователя == | ||
− | + | $ sudo passwd -d user | |
== Узнать дату создания или изменения файла == | == Узнать дату создания или изменения файла == | ||
− | + | $ stat -c %y file --- время модификации | |
− | + | $ stat -c %w file --- время создания, если поддерживается ФС | |
== Удалить запись из истории в zsh == | == Удалить запись из истории в zsh == | ||
− | + | $ LC_ALL=C sed -i '/$1/d' $HISTFILE | |
== Убить все процессы пользователя == | == Убить все процессы пользователя == | ||
− | + | $ pgrep -u $USER | xargs kill -9 | |
− | + | $ pkill -9 -u $USER | |
== Узнать дату установки ОС Linux из свойств файловой системы == | == Узнать дату установки ОС Linux из свойств файловой системы == | ||
− | + | $ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created | |
+ | |||
+ | {{Простое примечание|В ext4 точно работает. В других фс не знаю.}} | ||
− | |||
== Узнать точную версию sata диска == | == Узнать точную версию sata диска == | ||
− | + | $ sudo smartctl -a /dev/sda | grep SATA | |
Строка 567: | Строка 857: | ||
<!-- Ю --> | <!-- Ю --> | ||
<!-- Я --> | <!-- Я --> | ||
− | |||
<!-- A --> | <!-- A --> | ||
<!-- B --> | <!-- B --> | ||
== backups (резервные копии) == | == backups (резервные копии) == | ||
+ | |||
=== Создание рез. копии с помощью squashfs === | === Создание рез. копии с помощью squashfs === | ||
Делаем бэкап раздела sdd1 | Делаем бэкап раздела 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 | |
Текущая версия на 16:04, 23 марта 2024
Содержание
- 1 1
- 1.1 aria2c
- 1.2 btrfs
- 1.3 cdemu
- 1.4 chattr
- 1.5 dmsetup
- 1.6 exiftool
- 1.7 ext4
- 1.8 ffmpeg
- 1.9 find
- 1.10 grep
- 1.11 handbrake
- 1.12 jq
- 1.13 KDE
- 1.14 mediainfo
- 1.15 minidlna
- 1.16 postgresql. psql
- 1.16.1 Установка
- 1.16.2 Запуск сервера postgresql
- 1.16.3 Создание базы данных
- 1.16.4 Удаление базы данных
- 1.16.5 Показывать номера строк при выводе в less
- 1.16.6 Вывести данные таблицы с конвертированием времени из unixtime
- 1.16.7 Вывести данные таблицы и отразить дату и время в конкретном часовом поясе
- 1.17 qemu
- 1.18 rsync и ssh
- 1.19 ssh
- 1.20 sed
- 1.21 tput
- 1.22 uuencode/uudecode, xxd
- 1.23 virtualbox
- 1.24 yakuake
- 1.25 zsh
- 1.26 7z
- 2 2
- 2.1 Брать данные из буфера, а не передавать их программе вручную
- 2.2 Видеть результат выполнения команды на экране, и одновременно писать его в файл
- 2.3 Выполнить команду и сделать скриншот её вывода
- 2.4 Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена
- 2.5 Запись свободного места нулями
- 2.6 Запуск простого файлового вебсервера
- 2.7 Изменить разрешение экрана
- 2.8 Информация по пользовательским скриптам
- 2.9 Комбинации клавиш в терминале
- 2.10 Коды завершения программ
- 2.11 Конвертировать все .odt в директории в .pdf
- 2.12 Конвертировать все .odt в директории в .txt
- 2.13 Конвертировать все .doc и docx в директории в .txt
- 2.14 Конвертировать fb2 в epub или docx
- 2.15 Настройка swappiness
- 2.16 Отправить весь вывод команды в /dev/null
- 2.17 Отключение темы Plymouth в Росе
- 2.18 Отключение истории bash
- 2.19 Показать смонтированные ФС
- 2.20 Показать только скрытые каталоги и файлы
- 2.21 Посмотреть открытые порты
- 2.22 Посмотреть информацию о релизе дистрибутива
- 2.23 Получить суммарную длительность всех mp3 в директории
- 2.24 Приостановка выполнения команды в терминале
- 2.25 Получить прогресс выполнения dd
- 2.26 Распаковать rpm-пакет в терминале
- 2.27 Сделать "Да" ответом по умолчанию в dnf
- 2.28 Сделать снимок с веб-камеры из терминала
- 2.29 Создание снимков экрана с помощью команды import
- 2.30 Собрать расширение из исходного кода для firefox
- 2.31 Сделать vim редактором по умолчанию в терминале
- 2.32 Управление сервисами
- 2.33 Узнать DE
- 2.34 Управление группами в линукс
- 2.35 Удаление пароля пользователя
- 2.36 Узнать дату создания или изменения файла
- 2.37 Удалить запись из истории в zsh
- 2.38 Убить все процессы пользователя
- 2.39 Узнать дату установки ОС Linux из свойств файловой системы
- 2.40 Узнать точную версию sata диска
- 2.41 backups (резервные копии)
1
aria2c
Задать интервал в секундах до вывода сообщения о прогрессе загрузки
--summary-interval=0
0 запрещает вывод. По умолчанию 60.
Задать максимальную общую скорость загрузки
--max-overall-download-limit=1M
По умолчанию 0, т.е. неограниченно.
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
Дефрагментация
# btrfs fi defrag -r /mnt
Перебалансировка системы
# btrfs balance start /mnt
cdemu
Удалить виртуальное cd/dvd-rom устройство
$ cdemu remove-device
Добавить виртуальное cd/dvd-rom устройство
$ cdemu add-device
chattr
Запретить изменение, переименование и удаление файла
# chattr +i /path/to/file
Пока не будет изменен атрибут файла, все его только читать могут, даже рут.
Снять запрет
# chattr -i /path/to/file
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 video.mp4 -vn output.mp3
Если нужно изъять дорожку без конвертирования
$ ffmpeg -i video.mp4
Внизу ищем строку Stream ...: Audio:
Если там mp3, то
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3
Если opus
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus
Если aac
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac
Изменить контейнер видеоролика и добавить метаданные
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"
Если title и comment существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.
Обрезать аудио
Начало
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3
Конец
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.
Превратить аудио в видео с одной картинкой
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4
-c:a copy — если не нужно конвертировать аудио.
-af "atempo=1.5" — если нужно увеличить скорость аудио.
Сохранить видео без аудио
$ ffmpeg -i video.mp4 -an -c:v copy output.mp4
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 '{}' \;
Найти в текущей директории файлы и показать их названия без ./
$ find . -maxdepth 1 -type f -printf '%P\n' | sort
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
Показать по 2 строки до и после найденного вхождения
$ grep -A2 -B2 "искомая фраза" 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
jq
Отформатировать json и сохранить в новом файле
jq -M . old.json >new.json # -M - монохромный текст
Показать отформатированный и колоризированный json
jq -C . file-name.json | less
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 # Ширина и Высота видео. В качестве разделителя используется "x".
Получить список доступных полей
$ mediainfo --Info-Parameters
Получить справку по параметру --Output
$ mediainfo --Help-Output
Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name $ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *
%Duration% Показывает время в миллисекундах
%Duration/String3% Показывает время в формате "00:01:02.333"
%Duration/String2% Показывает время в формате "0 h 1 min 2 s"
%Duration/String1% Показывает время в формате "0 h 1 min 2 s 333 ms"
--Inform делает тоже самое, что и --Output. Скорее всего первое является алиасом для второго.
minidlna
Установка
$ sudo dnf in minidlna
Расшаривание директорий
В файл /etc/minidlna.conf под #media_dir=/opt добавляем:
media_dir=A,/home/username/Музыка media_dir=V,/home/username/Видео media_dir=P,/home/username/Изображения
Запуск
$ sudo systemctl start minidlna.service
Автозапуск
$ sudo systemctl enable 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_database;
Показывать номера строк при выводе в 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
Проверка загрузочной флешки
$ 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/
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/ $ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --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
$ echo -n "Hello world." | xxd -ps 48656c6c6f20776f726c642e $ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo Hello world.
virtualbox
USB
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers.
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:
$ sudo usermod -a -G vboxusers $USER
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта virtualbox.org
Общие папки
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf
$ sudo usermod -a -G vboxsf $USER
yakuake
Добавление действий в контекстное меню ФМ Dolphin
После выполнения этих команд:
$ 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" и "Открыть Yakuake в этой папке".
Удаление из yakuake кнопки закрытия программы
Нужно закомментировать в файле title.skin выбранной темы блок QuitButton. В ConfigButton значению x присвоить 30, а в FocusButton — 53. Скины yakuake в Росе находятся в каталоге /usr/share/yakuake/skins
Запуск программ в Yakuake при старте KDE
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии $ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии $ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии
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 /usr/bin/zsh $USER
Варианты PROMPT
1:
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь » команды вводятся на новой строке
добавляем в ~/.zshrc строку
export PROMPT=$'$FG[237]${(l.COLUMNS..-.)}%{$reset_color%}$FG[032][%n %D{%m.%d %H:%M}] %~$(git_prompt_info)$(hg_prompt_info) \n$FG[105]%(!.#.»)%{$reset_color%} '
Если вдруг ввод команд не на новой строке, то в строке указанной выше после hg_prompt_info меняем \n на ${NEWLINE} и над этой строкой размещаем
NEWLINE=$'\n'
2:
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке
Добавляем в ~/.zshrc
export PROMPT='$FG[237]${(l.COLUMNS..-.)}%{$reset_color%}$FG[032][%n %D{%m.%d %H:%M}] %(4~|%-1~/.../%2d|%3~)$(git_prompt_info)$(hg_prompt_info) $FG[105]%(!.#.»)%{$reset_color%} '
Подробности тута: https://stackoverflow.com/a/50696779/19807992
Открытие ман-страницы указанной программы комбинацией клавиш
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).
Псевдонимы расширения (suffix aliases)
Если в ~/.zshrc прописать:
alias -s mp4=smplayer
команда file_name.mp4 будет расширена до smplayer file_name.mp4.
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
Список ссылок для этой страницы сортировал так
$ xsel -o | sort
Видеть результат выполнения команды на экране, и одновременно писать его в файл
Для этого необходимо воспользоваться командой 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
или
$ sudo dnf in python3-twisted $ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"
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 в GRUB_CMDLINE_LINUX_DEFAULT quiet заменить на verbose, splash=silent удалить.
Отключение истории 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
Получить суммарную длительность всех mp3 в директории
$ ms=0; for FILE in *.mp3; do let "ms+=$(mediainfo --Inform='General;%Duration%' "$FILE")"; done; let "s=ms/1000" ; echo "$(( $s/3600 )):$(( $s/60%60 )):$(( $s%60%60 )).$(( $ms%1000 )) :: $s s."
Приостановка выполнения команды в терминале
Приостановка делается сочетанием клавиш 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
Сделать "Да" ответом по умолчанию в dnf
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf
Сделать снимок с веб-камеры из терминала
$ 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
Снимок экрана
$ 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