Заметки на полях — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(ssh)
м (ffmpeg: дополнение)
 
(не показано 75 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
{{Таинственные знаки "Доллар" и "Решетка"}}
 +
<br />
 +
 
= 1 =
 
= 1 =
  
Строка 4: Строка 7:
  
 
== aria2c ==
 
== aria2c ==
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60
+
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===
 +
--summary-interval=0
 +
0 запрещает вывод. По умолчанию 60.
  
    --summary-interval=<SEC>
+
=== Задать максимальную общую скорость загрузки ===
 
+
--max-overall-download-limit=1M
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).
+
По умолчанию 0, т.е. неограниченно.
 
+
    --max-overall-download-limit
+
  
  
Строка 19: Строка 22:
 
=== Создание резервной копии снимка btrfs ===
 
=== Создание резервной копии снимка btrfs ===
  
Создаем read-only снимок - send требует, чтобы отправляемый снимок был read-only
+
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only
 
+
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main
    # btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main
+
# sync
    # sync
+
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst
    # 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
    # zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path
+
# sync
    # 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 fi defrag -r /mnt
  
 
=== Перебалансировка системы ===
 
=== Перебалансировка системы ===
  
    # btrfs balance start /mnt
+
# btrfs balance start /mnt
  
 +
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]
  
 
<!-- C -->
 
<!-- C -->
  
 
== cdemu ==
 
== cdemu ==
удалить виртуальное cd/dvd-rom устройство
+
=== Удалить виртуальное cd/dvd-rom устройство ===
 +
$ cdemu remove-device
  
    $ cdemu remove-device
+
=== Добавить виртуальное cd/dvd-rom устройство ===
 +
$ cdemu add-device
  
добавить виртуальное cd/dvd-rom устройство
 
  
    $ cdemu add-device
+
== chattr ==
 +
=== Запретить изменение, переименование и удаление файла ===
 +
# chattr +i /path/to/file
 +
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}
  
 
+
=== Снять запрет ===
== chattr - изменение атрибутов файлов ==
+
# chattr -i /path/to/file
    # chattr +i /path/to/file
+
    # chattr -i /path/to/file
+
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' - разрешает.
+
  
  
Строка 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 ls            - чтобы увидеть список таких носителей
+
$ sudo dmsetup remove_all    - чтобы удалить их
    $ sudo dmsetup remove_all    - чтобы удалить их
+
  
  
Строка 73: Строка 75:
  
 
== exiftool ==
 
== exiftool ==
Удалить метаданные фото
+
=== Установка ===
    $ exiftool -all= *
+
$ sudo dnf in perl-Image-ExifTool
  
    В росе нужно установить пакет perl-Image-ExifTool
+
=== Удаление всех метаданных ===
 +
Удалить все метаданные у всех .jpg изображений в текущей директории
 +
$ exiftool -all= *.jpg
  
  
 
== ext4 ==
 
== ext4 ==
Дефрагментация
+
=== Дефрагментация ===
 +
$ sudo e4defrag -c /    # анализ корневого раздела
 +
$ sudo e4defrag /      # дефрагментация корневого раздела
  
    $ sudo e4defrag -c /   # анализ корневого раздела
+
=== Уменьшение размера зарезервированного места ===
    $ sudo e4defrag /       # дефрагментация корневого раздела
+
$ sudo tune2fs -m 0.1 /dev/sda1
  
Уменьшить размер зарезервированного места
 
  
    $ sudo tune2fs -m 0.1 /dev/sda1
+
<!-- F -->
  
 +
== ffmpeg ==
  
<!-- F -->
+
=== Извлечь аудио из видеофайла ===
 +
Если нет желания заморачиваться
 +
$ ffmpeg -i video.mp4 -vn output.mp3
  
== find ==
+
Если нужно изъять дорожку без конвертирования
найти исполняемые файлы с шаблоном *.zip
+
$ ffmpeg -i video.mp4
  
    $ find /path -type f -perm /a=x -name '*.zip'
+
Внизу ищем строку '''Stream ...: Audio:'''
  
найти исполняемые файлы и напечатать
+
Если там mp3, то
 +
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3
  
    $ find /path -type f -perm /a=x
+
Если opus
 +
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus
  
найти исполняемые файлы и сделать неисполняемыми
+
Если aac
 +
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac
  
    $ find /path -type f -perm /a=x -exec chmod -x '{}' \;
+
=== Изменить контейнер видеоролика и добавить метаданные ===
 +
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"
  
найти все файлы и напечатать
+
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}
  
    $ find /path -type f -print
+
=== Обрезать аудио ===
 +
Начало
 +
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3
  
найти все файлы и вывести их кол-во
+
Конец
 +
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3    # т.е. сохранить 11 минут и 5 секунд.
  
    $ find /path -type f -print | wc -l
+
=== Превратить аудио в видео с одной картинкой ===
 +
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4
  
найти файлы по шаблону и показать их суммарный размер
+
{{Простое примечание|
 +
-c:a copy — если не нужно конвертировать аудио.<br />
 +
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.
 +
}}
  
    $ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'
+
=== Сохранить видео без аудио ===
 +
$ 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 -print0 | xargs --null md5sum > /tmp/listsums
+
'''Найти исполняемые файлы и напечатать'''
 +
$ find /path -type f -perm /a=x
  
найти файлы по шаблону и удалить их
+
'''Найти исполняемые файлы и сделать неисполняемыми'''
 +
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;
  
    $ find /path -type f -name "*.directory" -exec rm {} \;
+
'''Найти все файлы и напечатать'''
 +
$ find /path -type f -print
  
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)
+
'''Найти все файлы и вывести их кол-во'''
 +
$ find /path -type f -print | wc -l
  
    $ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'
+
'''Найти файлы по шаблону и показать их суммарный размер'''
 +
$ 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 -iname '*name-file*'
+
'''Найти файлы по шаблону и удалить их'''
 +
$ 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 -print0 | xargs --null md5sum
+
'''Не учитывать регистр при поиске'''
 +
$ find /path -type f -iname '*name-file*'
  
исключить из поиска определенную директорию
+
'''Рекурсивный расчет контрольных сумм файлов каталога'''
 +
$ find /path -type f -print0 | xargs --null md5sum
  
    $ find . -type f -not -path './dir/*' -iname name
+
'''Исключить из поиска определенную директорию'''
 +
$ find . -type f -not -path './dir/*' -iname name
  
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid
+
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''
 +
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000
 +
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;
  
    # 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
  
find и rsync
 
  
    $ find . -type d -printf "%P\n" | rsync -avn --delete --exclude-from=- . ../output_dir/
+
<!-- G -->
  
т.к. параметр **--delete** не работает с **--no-recursive** исключать директории нужно с помощью программы **find** и параметра **--exclude-from**
+
== grep ==
 +
=== Показать 20 символов после искомой фразы ===
 +
$ grep -oE "искомая фраза.{20}" file.txt
 +
$ grep -oE ".{0}искомая фраза.{20}" file.txt
  
    $ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/
+
$ 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 .
  
  
<!-- G -->
 
 
<!-- 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 -->
  
== minidlna ==
+
== mediainfo ==
1. Сначала необходимо установить пакет minidlna.<br />
+
'''Показать значение конкретного поля'''
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':
+
$ mediainfo --Output='General;%Comment%' file_name        # Комментарий
 +
$ mediainfo --Output='Video;%Width%' file_name            # Ширина видео
 +
$ mediainfo --Output='Video;%Width%x%Height%' file_name    # Ширина и Высота видео. В качестве разделителя используется "x".
  
      media_dir=A,/home/username/Музыка
+
'''Получить список доступных полей'''
      media_dir=V,/home/username/Видео
+
$ mediainfo --Info-Parameters
      media_dir=P,/home/username/Изображения
+
  
3. А после выполнить команду
+
'''Получить справку по параметру --Output'''
 +
$ mediainfo --Help-Output
  
      $ sudo systemctl start minidlna.service
+
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''
 +
$ 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'''"
 +
}}
  
<!-- N -->
 
<!-- O -->
 
<!-- P -->
 
  
== postgresql. psql. ==
+
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}
Установка
+
  
    $ sudo dnf install postgresql postgresql-contrib postgresql-server
 
  
Запуск сервера postgresql
+
== minidlna ==
 +
=== Установка ===
 +
$ sudo dnf in minidlna
  
    $ sudo systemctl start postgresql12.service
+
=== Расшаривание директорий ===
 +
В файл '''/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 su postgres
+
=== Автозапуск ===
    psql
+
$ sudo systemctl enable minidlna.service
    CREATE USER test_user WITH password '123456qwerty';
+
    CREATE DATABASE test_database OWNER test_user;
+
  
Удаление базы данных
 
  
    DROP DATABASE test_db;
+
<!-- N -->
 +
<!-- O -->
 +
<!-- P -->
  
Показывать номера строк при выводе в less
+
== postgresql. psql ==
 +
=== Установка ===
 +
$ sudo dnf install postgresql postgresql-contrib postgresql-server
  
    $ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc
+
=== Запуск сервера postgresql ===
 +
$ sudo systemctl start postgresql12.service
  
Вывести данные таблицы с конвертированием unixtime
+
=== Создание базы данных ===
 +
$ sudo su postgres
 +
psql
 +
CREATE USER test_user WITH password '123456qwerty';
 +
CREATE DATABASE test_database OWNER test_user;
  
    select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;
+
=== Удаление базы данных ===
 +
DROP DATABASE test_database;
  
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе
+
=== Показывать номера строк при выводе в less ===
 +
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc
  
    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;
+
=== Вывести данные таблицы с конвертированием времени из 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].
 
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].
Строка 218: Строка 329:
  
 
== qemu ==
 
== qemu ==
Установка
+
=== Установка ===
 +
$ sudo dnf install qemu qemu-kvm
  
    $ sudo dnf install qemu qemu-kvm
+
=== Проверка загрузочной флешки ===
 
+
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb
Проверить загрузочную флешку в qemu
+
 
+
    $ 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»: Нет такого файла или каталога   
    Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога   
+
  
 
Чтобы решить эту проблему нужно запустить libvirtd:
 
Чтобы решить эту проблему нужно запустить libvirtd:
 
+
$ sudo systemctl start libvirtd
    $ sudo systemctl start libvirtd
+
  
  
Строка 239: Строка 346:
  
 
== rsync и ssh ==
 
== rsync и ssh ==
 +
 
=== Загрузка на удаленную машину ===
 
=== Загрузка на удаленную машину ===
    $ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/
+
$ 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     – Ограничение скорости KBytes в секунду
+
* '''--bwlimit''' — Ограничение скорости KBytes в секунду
* --progress     – Выводить прогресс передачи файла
+
* '''--progress''' — Выводить прогресс передачи файла
* --dry-run     – Показать, что скопируется
+
* '''--dry-run''' — Показать, что скопируется
* -c             – Проверка контрольных сумм для файлов
+
* '''-c''' — Проверка контрольных сумм для файлов
* -b             – Создание резервной копии
+
* '''-b''' — Создание резервной копии
* -u             – Не перезаписывать более новые файлы
+
* '''-u''' — Не перезаписывать более новые файлы
* --delete       – Удалять файлы которых нет в источнике
+
* '''--delete''' — Удалять файлы которых нет в источнике
* --exclude     – Исключить файлы по шаблону
+
* '''--exclude''' — Исключить файлы по шаблону
* --include     – Не исключать файлы по шаблону
+
* '''--include''' — Не исключать файлы по шаблону
* -P             – эквивалент для --partial --progress
+
* '''-P''' — эквивалент для --partial --progress
  
=== Загрузка с удаленной машины ===
+
=== Скачивание с удаленной машины ===
    $ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file
+
$ 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}}
  
  
Строка 265: Строка 380:
  
 
== ssh ==
 
== ssh ==
==== Отправить сообщение на экран пользователя ====
+
 
 +
=== Отправить сообщение на экран пользователя ===
 
Смотрим какой дисплей использует пользователь
 
Смотрим какой дисплей использует пользователь
  
    $ who
+
$ who
      user      tty1        date (:0)
+
  user      tty1        date (:0)
      user      pts/0        date (:0)
+
  user      pts/0        date (:0)
      :0
+
  :0
  
 
логинимся под тем пользователем
 
логинимся под тем пользователем
 +
$ su user
  
    $ su user
 
 
отправляем сообщение
 
отправляем сообщение
 +
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"
  
    $ export DISPLAY=:0 && kdialog --msgbox "Сообщение"
+
=== Список подключенных сеансов ===
  
==== Список подключенных сеансов ====
+
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'
 +
$ ps auxwww | grep sshd:
  
    $ netstat -tnpa | grep 'ESTABLISHED.*sshd'
+
=== sshfs ===
    $ 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
  
    $ sudo mkdir -v -m 755 /media/remote
+
 
    $ sshfs -C -p 123 user@host:/home /media/remote/
+
== sed ==
    $ fusermount -u /media/remote
+
=== Несколько паттернов в регулярном выражении ===
 +
$ 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"
  
  
Строка 295: Строка 424:
  
 
== tput ==
 
== tput ==
    tput bold            # Включить жирность
+
tput bold            # Включить жирность
    tput dim            # Затемнить текст
+
tput dim            # Затемнить текст
    tput smul            # Включить подчеркивание
+
tput smul            # Включить подчеркивание
    tput rmul            # Отключить подчеркивание
+
tput rmul            # Отключить подчеркивание
    tput rev            # Поменять цвет текста на цвет фона
+
tput rev            # Поменять цвет текста на цвет фона
    tput setaf 1-255    # Установить цвет текста
+
tput setaf 1-255    # Установить цвет текста
    tput setab 1-255    # Установить фон текста
+
tput setab 1-255    # Установить фон текста
    tput sgr0            # Вернуть к значениям по умолчанию
+
tput sgr0            # Вернуть к значениям по умолчанию
    tput blink          # мигающий текст
+
tput blink          # мигающий текст
  
  
Строка 309: Строка 438:
  
 
== uuencode/uudecode, xxd ==
 
== uuencode/uudecode, xxd ==
Преобразовать двоичный файл в текстовую форму
+
=== Преобразовать двоичный файл в текстовую форму ===
 +
$ uuencode -m input-file set-file-name >output-file
 +
$ xxd -p input-file >output-file
  
    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
    uudecode -o output-file input-file
+
48656c6c6f20776f726c642e
    xxd -p -r input-file >output-file
+
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo
 
+
Hello world.
чтобы преобразовать stdin нужно использовать xxd с параметром -ps
+
  
  
Строка 325: Строка 456:
  
 
== virtualbox ==
 
== virtualbox ==
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:
+
=== USB ===
 
+
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br />
    $ sudo usermod -a -G vboxusers $USER
+
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:
 
+
$ sudo usermod -a -G vboxusers $USER
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/]
+
  
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf
+
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]
  
    $ sudo usermod -a -G vboxsf $USER
+
=== Общие папки ===
 +
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''
 +
$ sudo usermod -a -G vboxsf $USER
  
  
Строка 341: Строка 473:
  
 
== yakuake ==
 
== yakuake ==
==== Добавить действия в дельфине ====
+
=== Добавление действий в контекстное меню ФМ Dolphin ===
Чтобы в дельфине в контекстное меню добавить действия "Запустить в 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/
  
    $ git clone https://github.com/aplatanado/yakuake-session.git
+
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".
    $ sudo cp yakuake-session /usr/bin
+
    $ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/
+
  
==== Удалить из yakuake кнопку закрытия программы ====
+
=== Удаление из yakuake кнопки закрытия программы ===
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.
+
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' - '''53'''.
+
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.
 
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''
 
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''
  
==== Запуск программ в Yakuake при старте KDE ====
+
=== Запуск программ в Yakuake при старте KDE ===
    $ qdbus org.kde.yakuake /yakuake/sessions runCommand rtorrent # запуск команды rtorrent в текущей сессии
+
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop      # запуск команды htop в текущей сессии
 
+
$ qdbus org.kde.yakuake /yakuake/sessions addSession           # добавление новой сессии
    $ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии
+
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &"  # запуск программы qbittorrent в добавленной сессии  
    $ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в добавленной сессии
+
  
  
Строка 363: Строка 495:
  
 
== zsh ==
 
== zsh ==
Установка
+
=== Установка ===
 +
$ sudo dnf install zsh
  
    $ sudo dnf install zsh
+
=== Установка oh-my-zsh ===
 +
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
  
Установка oh-my-zsh
+
=== Установка zsh шеллом по умолчанию ===
 +
$ sudo usermod -s /usr/bin/zsh $USER
  
    $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
+
=== Варианты 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'
  
Чтобы сделать zsh шеллом по умолчанию нужно выполнить:
+
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
  
    $ sudo usermod -s /bin/zsh $USER (Роса)
+
=== Открытие ман-страницы указанной программы комбинацией клавиш ===
    $ sudo usermod -s /usr/bin/zsh $USER (ubuntu)
+
Нужно ввести имя программы и нажать 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
  
    $ 7z a -mhe=on -p test.7z /directory/file
 
  
 
= 2 =
 
= 2 =
Строка 386: Строка 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
    $ some_command parameters | tee -a /tmp/logfile.txt
+
  
 
Или
 
Или
 +
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log
  
    $ script /tmp/logfile.txt
+
Воспроизвести записанное с помощью 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
  
  
Строка 406: Строка 580:
  
 
== Запись свободного места нулями ==
 
== Запись свободного места нулями ==
    $ cat /dev/zero >/path/file
+
$ cat /dev/zero >/path/file
    $ dd if=/dev/zero of=/path/file bs=4M  #или bs=4M-20M
+
$ 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    # Расшаривается текущая директория
  
  
Строка 413: Строка 602:
  
 
== Изменить разрешение экрана ==
 
== Изменить разрешение экрана ==
    $ xrandr -s 1366x768
+
$ xrandr -s 1366x768
    $ xrandr -s 800x600
+
$ 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/'''
Строка 432: Строка 621:
  
 
== Комбинации клавиш в терминале ==
 
== Комбинации клавиш в терминале ==
* '''ctrl+l''' -- очистить экран (bash, zsh)
+
* '''ctrl+l''' — очистить экран (bash, zsh)
* '''ctrl+a''' -- перейти в начало строки (bash, zsh)
+
* '''ctrl+a''' — перейти в начало строки (bash, zsh)
* '''ctrl+e''' -- перейти в конец строки (bash, zsh)
+
* '''ctrl+e''' — перейти в конец строки (bash, zsh)
* '''ctrl+u''' -- вырезать все слева от курсора (bash, zsh удаляет всю строку)
+
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)
* '''ctrl+k''' -- вырезать все справа от курсора (bash, zsh)
+
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)
* '''ctrl+w''' -- вырезать слово слева от курсора (bash, zsh)
+
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)
* '''ctrl+y''' -- вставить вырезанный текст (bash, zsh)
+
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)
* '''ctrl+d''' -- если строка пуста - завершить текущий сеанс в терминале, иначе - удалить символ справа от курсора (bash, zsh)
+
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)
* '''ctrl+r''' -- поиск по ранее запущенным командам (bash, zsh)
+
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)
* '''ctrl+shift+-''' -- отменить последнее действие (bash, zsh)
+
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)
* '''ctrl+x+e''' -- открыть текстовый редактор для изменения введенной строки (bash, zsh)
+
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)
 +
 
 +
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)
 +
* '''alt+d''' — удалить слово после курсора (bash, zsh)
 +
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)
 +
* '''alt+.''' — вставить последний аргумент из предыдущей команды (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
+
$ 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'''.
  
 
<!-- Л -->
 
<!-- Л -->
Строка 464: Строка 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
+
$ cat /proc/sys/vm/swappiness
    vm.vfs_cache_pressure=1000
+
$ sudo sysctl vm.swappiness=25
 +
$ sudo sysctl vm.vfs_cache_pressure=1000
  
    Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.
+
'''Постоянные в /etc/sysctl.conf'''
    Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50
+
vm.swappiness=25
    Если HDD, то наибольшую отзывчивость можно получить при установке 1000
+
vm.vfs_cache_pressure=1000
 +
 
 +
{{Простое примечание|
 +
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br />
 +
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br />
 +
Если HDD, то наибольшую отзывчивость можно получить при установке 1000
 +
}}
  
  
Строка 481: Строка 690:
  
 
== Отправить весь вывод команды в /dev/null ==
 
== Отправить весь вывод команды в /dev/null ==
    $ command >/dev/null 2>&1
+
$ command >/dev/null 2>&1
  
  
 
== Отключение темы Plymouth в Росе ==
 
== Отключение темы Plymouth в Росе ==
 +
 
==== <=2016.1 ====
 
==== <=2016.1 ====
  
Строка 490: Строка 700:
  
 
==== 2021.1 ====
 
==== 2021.1 ====
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.
+
Нужно в '''/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
+
$ findmnt --all
 +
 
 +
 
 +
== Показать только скрытые каталоги и файлы ==
 +
$ ls -A | grep "\."
  
  
 
== Посмотреть открытые порты ==
 
== Посмотреть открытые порты ==
    $ sudo lsof -Pni | grep LISTEN
+
$ sudo lsof -Pni | grep LISTEN
  
  
 
== Посмотреть информацию о релизе дистрибутива ==
 
== Посмотреть информацию о релизе дистрибутива ==
    $ cat /etc/os-release
+
$ 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."
  
  
Строка 512: Строка 741:
 
Продолжить выполнение можно следующим образом:
 
Продолжить выполнение можно следующим образом:
  
    $ jobs
+
$ jobs
  
 
смотрим номер приостановленной задачи
 
смотрим номер приостановленной задачи
  
    $ fg N
+
$ fg N
  
 
вместо N номер нужной задачи
 
вместо N номер нужной задачи
Строка 522: Строка 751:
  
 
== Получить прогресс выполнения dd ==
 
== Получить прогресс выполнения dd ==
    $ dd if=/dev/urandom of=/dev/null status=progress
+
$ dd if=/dev/urandom of=/dev/null status=progress
    $ watch -n 5 pkill -x -USR1 dd
+
$ watch -n 5 pkill -x -USR1 dd
    $ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)'    # где -n 5 = 5 сек.
+
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)'    # где -n 5 = 5 сек.
  
  
Строка 530: Строка 759:
  
 
== Распаковать rpm-пакет в терминале ==
 
== Распаковать rpm-пакет в терминале ==
    rpm2cpio packege-name.rpm | cpio -idm
+
$ rpm2cpio pkg-name.rpm | cpio -idm
  
  
 
<!-- С -->
 
<!-- С -->
  
== Сделать снимок с веб-камеры из терминала ==
+
== Сделать "Да" ответом по умолчанию в dnf ==
    $ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'
+
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf
    $ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg
+
  
  
== Создание снимков экрана из терминала ==
+
== Сделать снимок с веб-камеры из терминала ==
 +
$ 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 -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"
  
Снимок области
+
'''Снимок области'''
    $ import "/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
+
$ 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'''.
    $ echo "EDITOR=vim" | sudo tee -a /etc/environment
+
 
+
Если после перезагрузки сеанса нет изменений, то нужно искать в /etc/ файлы с переменной EDITOR
+
    $ find /etc/ -type f -exec grep -H "EDITOR" '{}' \;
+
 
+
В Росе 2021.1 есть два файла которые мешают сменить редактор:
+
    /etc/profile.d/10-nano-as-default-editor.sh
+
    /etc/profile.d/10-nano-as-default-editor.csh
+
 
+
их нужно удалить.
+
  
 +
Установить vim редактором по умолчанию для всех пользователей
 +
$ echo "EDITOR=vim" | sudo tee -a /etc/environment
  
 
<!-- Т -->
 
<!-- Т -->
Строка 576: Строка 800:
 
== Управление сервисами ==
 
== Управление сервисами ==
  
==== Rosa ====
+
'''Rosa'''
    # systemctl {enable|disable|start|stop|restart|status} name_service
+
# systemctl {enable|disable|start|stop|restart|status} name_service
  
==== Ubuntu ====
+
'''Ubuntu'''
    # service name_service {start|stop|restart|reload|force-reload|status}
+
# service name_service {start|stop|restart|reload|force-reload|status}
    # systemctl {enable|disable} name_service
+
# systemctl {enable|disable} name_service
  
  
 
== Узнать DE ==
 
== Узнать DE ==
    $ echo $XDG_CURRENT_DESKTOP
+
$ echo $XDG_CURRENT_DESKTOP
    $ echo $DESKTOP_SESSION
+
$ echo $DESKTOP_SESSION
    $ wmctrl -m
+
$ wmctrl -m
  
  
 
== Управление группами в линукс ==
 
== Управление группами в линукс ==
'''drakuser''' -- Гуй в kde (может и в других de)<br />
+
'''drakuser''' — Гуй в kde (может и в других de)<br />
'''usermod''' -- инструмент в терминале
+
'''usermod''' — инструмент в терминале
  
  
 
== Удаление пароля пользователя ==
 
== Удаление пароля пользователя ==
    $ sudo passwd -d user
+
$ sudo passwd -d user
  
  
 
== Узнать дату создания или изменения файла ==
 
== Узнать дату создания или изменения файла ==
    $ stat -c %y file  --- время модификации
+
$ stat -c %y file  --- время модификации
    $ stat -c %w file  --- время создания, если поддерживается ФС
+
$ stat -c %w file  --- время создания, если поддерживается ФС
  
  
 
== Удалить запись из истории в zsh ==
 
== Удалить запись из истории в zsh ==
    $ LC_ALL=C sed -i '/$1/d' $HISTFILE
+
$ LC_ALL=C sed -i '/$1/d' $HISTFILE
  
  
 
== Убить все процессы пользователя ==
 
== Убить все процессы пользователя ==
    $ pgrep -u $USER | xargs kill -9
+
$ pgrep -u $USER | xargs kill -9
    $ pkill -9 -u $USER
+
$ pkill -9 -u $USER
  
  
 
== Узнать дату установки ОС Linux из свойств файловой системы ==
 
== Узнать дату установки ОС Linux из свойств файловой системы ==
    $ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created
+
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created
 +
 
 +
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}
  
    В ext4 точно работает. В других фс не знаю.
 
  
 
== Узнать точную версию sata диска ==
 
== Узнать точную версию sata диска ==
    $ sudo smartctl -a /dev/sda | grep SATA
+
$ sudo smartctl -a /dev/sda | grep SATA
  
  
Строка 632: Строка 857:
 
<!-- Ю -->
 
<!-- Ю -->
 
<!-- Я -->
 
<!-- Я -->
 
 
<!-- A -->
 
<!-- A -->
 
<!-- B -->
 
<!-- B -->
  
 
== backups (резервные копии) ==
 
== backups (резервные копии) ==
 +
 
=== Создание рез. копии с помощью squashfs ===
 
=== Создание рез. копии с помощью squashfs ===
 
Делаем бэкап раздела sdd1
 
Делаем бэкап раздела sdd1
    $ sudo mount /dev/sdd1 /mnt/sdd1
+
$ sudo mount /dev/sdd1 /mnt/sdd1
    $ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs
+
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs
  
 
Распаковываем на другой носитель
 
Распаковываем на другой носитель
    $ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs
+
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs
  
  

Текущая версия на 16:04, 23 марта 2024

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

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


Содержание

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

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


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