http://wiki.rosalab.ru/ru/api.php?action=feedcontributions&user=Noname&feedformat=atom
Rosalab Wiki - Вклад участника [ru]
2024-03-29T00:12:24Z
Вклад участника
MediaWiki 1.26.4
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=21066
Заметки на полях
2024-03-23T13:04:58Z
<p>Noname: /* ffmpeg */ дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
=== Сохранить видео без аудио ===<br />
$ ffmpeg -i video.mp4 -an -c:v copy output.mp4<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<br />
== jq ==<br />
'''Отформатировать json и сохранить в новом файле'''<br />
jq -M . old.json >new.json # -M - монохромный текст<br />
<br />
'''Показать отформатированный и колоризированный json'''<br />
jq -C . file-name.json | less<br />
<br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_database;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
SELECT col1, to_timestamp(col2_with_unixtime) AS col2_with_datetime, col3, col4, col5 FROM table;<br />
SELECT col1, to_timestamp(col2_with_unixtime) AT TIME ZONE 'Time_Zone_Name' AS col2_with_datetime, col3, col4, col5 FROM table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать "Да" ответом по умолчанию в dnf ==<br />
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf<br />
<br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=21064
Заметки на полях
2024-03-14T04:58:11Z
<p>Noname: дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<br />
== jq ==<br />
'''Отформатировать json и сохранить в новом файле'''<br />
jq -M . old.json >new.json # -M - монохромный текст<br />
<br />
'''Показать отформатированный и колоризированный json'''<br />
jq -C . file-name.json | less<br />
<br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_database;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
SELECT col1, to_timestamp(col2_with_unixtime) AS col2_with_datetime, col3, col4, col5 FROM table;<br />
SELECT col1, to_timestamp(col2_with_unixtime) AT TIME ZONE 'Time_Zone_Name' AS col2_with_datetime, col3, col4, col5 FROM table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать "Да" ответом по умолчанию в dnf ==<br />
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf<br />
<br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%92%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA%D0%B0_Grub2&diff=21063
Восстановление загрузчика Grub2
2024-03-13T10:22:44Z
<p>Noname: </p>
<hr />
<div>'''Оригинал инструкции на форуме MIB (Mandriva International Backports):''' [http://mib.pianetalinux.org/forum/viewtopic.php?f=21&t=3899 How to reinstall Grub2 from a live ROSA Desktop Linux]<br />
<br />
----<br />
<br />
Рекомендации по восстановлению загрузочной записи {{Программа|Grub2}} в '''MBR''' следующие:<br />
<br />
1. Загружаемся с флешки или DVD в ''Live-режиме''.<br />
<br />
2. '''Запускаем графическую программу Gparted''' или Пишем в консоли от root-а:<br />
<br />
fdisk -l<br />
<br />
У нас выходит список разделов нашего жесткого диска (например):<br />
<br />
<pre><br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0x6e2792ad<br />
<br />
Устр-во Загр Начало Конец Блоки Id Система<br />
/dev/sda1 * 2048 51552584 25775268+ 7 HPFS/NTFS/exFAT<br />
/dev/sda2 51552585 100920329 24683872+ 83 Linux<br />
/dev/sda3 100920330 103089104 1084387+ 82 Linux своп / Solaris<br />
/dev/sda4 103090176 488396799 192653312 7 HPFS/NTFS/exFAT<br />
</pre><br />
<br />
Также можно найти раздел в графической программе Gparted.<br />
<br />
3. В данном примере '''sda''' это загрузочный диск, а '''sda2''' это корневой (/root) раздел нашей установленной системы РОСА. Поскольку в разных конфигурациях буква диска может различаться, то далее будем использовать sd'''X''' и sd'''XX''' соответственно для их обозначения.<br />
<br />
Дальше, надо примонтировать нужные разделы:<br />
<br />
sudo -i<br />
mkdir /chroot<br />
mount /dev/sd'''XX''' /chroot # В нашем примере sd'''XX''' - это sda2<br />
for i in dev sys proc etc/resolv.conf; do mount --bind -v /$i /chroot/$i;done<br />
<br />
Если после <br />
mount /dev/sd'''XX''' /chroot # В нашем примере sd'''XX''' - это sda2<br />
возникают ошибки и у вас файловая система BTRFS, то эта команда должна иметь дополнительный вид (указываем, какой подраздел монтировать):<br />
mount -o subvol=root /dev/sd'''XX''' /chroot # В нашем примере sd'''XX''' - это sda2<br />
<br />
4. Теперь надо сделать chroot в установленную систему.<br />
<br />
chroot /chroot<br />
<br />
5. Внутри chroot примонтируем все записи в /etc/fstab (например, раздел /boot/efi):<br />
<br />
mount -a<br />
<br />
6. Затем надо установить Grub2 в MBR.<br />
<br />
grub2-install /dev/sd'''X''' # В нашем примере sd'''X''' - это sda<br />
<br />
В Ubuntu, Debian grub2-install заменить на grub-install.<br />
<br />
7. После установки Grub2, нужно чтобы он нашел другие загрузочные записи на жестком диске (например Windows).<br />
Для этого дадим следующую команду:<br />
<br />
update-grub2<br />
В Ubuntu,Debian update-grub2 заменить на update-grub.<br />
<br />
8. Выходим из chroot и Live-режима и перегружаем компьютер. После перезагрузки, будет меню Grub2 со списком всех ваших ОС.<br />
<br />
exit<br />
sync<br />
reboot<br />
<br />
Также, для восстановления загрузчика grub2 можно воспользоваться небольшим скриптом grub2recovery. Его можно установить из репозитория contrib командой<br />
sudo dnf in grub2recovery<br />
<!-- или скачать по ссылке: https://forum.rosalinux.ru/download/file.php?id=12856 и rpm https://forum.rosalinux.ru/download/file.php?id=12855 <br> --><br />
О скрипте можно почитать на форуме: https://forum.rosalinux.ru/viewtopic.php?f=58&t=10649 <br><br />
<br />
''* Скрипт является разработкой сообщества и не является официальным приложением.''<br />
<br />
<br />
[[Категория:HOWTO]]<br />
[[en:Reinstall Grub2 from a live ROSA]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%92%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA%D0%B0_Grub2&diff=21062
Восстановление загрузчика Grub2
2024-03-13T10:14:46Z
<p>Noname: </p>
<hr />
<div>'''Оригинал инструкции на форуме MIB (Mandriva International Backports):''' [http://mib.pianetalinux.org/forum/viewtopic.php?f=21&t=3899 How to reinstall Grub2 from a live ROSA Desktop Linux]<br />
<br />
----<br />
<br />
Рекомендации по восстановлению загрузочной записи {{Программа|Grub2}} в '''MBR''' следующие:<br />
<br />
1. Загружаемся с флешки или DVD в ''Live-режиме''.<br />
<br />
2. '''Запускаем графическую программу Gparted''' или Пишем в консоли от root-а:<br />
<br />
fdisk -l<br />
<br />
У нас выходит список разделов нашего жесткого диска (например):<br />
<br />
<pre><br />
Units = sectors of 1 * 512 = 512 bytes<br />
Sector size (logical/physical): 512 bytes / 512 bytes<br />
I/O size (minimum/optimal): 512 bytes / 512 bytes<br />
Disk identifier: 0x6e2792ad<br />
<br />
Устр-во Загр Начало Конец Блоки Id Система<br />
/dev/sda1 * 2048 51552584 25775268+ 7 HPFS/NTFS/exFAT<br />
/dev/sda2 51552585 100920329 24683872+ 83 Linux<br />
/dev/sda3 100920330 103089104 1084387+ 82 Linux своп / Solaris<br />
/dev/sda4 103090176 488396799 192653312 7 HPFS/NTFS/exFAT<br />
</pre><br />
<br />
Также можно найти раздел в графической программе Gparted.<br />
<br />
3. В данном примере '''sda''' это загрузочный диск, а '''sda2''' это корневой (/root) раздел нашей установленной системы РОСА. Поскольку в разных конфигурациях буква диска может различаться, то далее будем использовать sd'''X''' и sd'''XX''' соответственно для их обозначения.<br />
<br />
Дальше, надо примонтировать нужные разделы:<br />
<br />
sudo -i<br />
mkdir /chroot<br />
mount /dev/sd'''XX''' /chroot # В нашем примере sd'''XX''' - это sda2<br />
for i in dev sys proc etc/resolv.conf; do mount --bind -v /$i /chroot/$i;done<br />
<br />
Если после <br />
mount /dev/sd'''XX''' /chroot # В нашем примере sd'''XX''' - это sda2<br />
возникают ошибки и у вас файловая система BTRFS, то эта команда должна иметь дополнительный вид (указываем, какой подраздел монтировать):<br />
mount -o subvol=root /dev/sd'''XX''' /chroot # В нашем примере sd'''XX''' - это sda2<br />
<br />
4. Теперь надо сделать chroot в установленную систему.<br />
<br />
chroot /chroot<br />
<br />
5. Внутри chroot примонтируем все записи в /etc/fstab (например, раздел /boot/efi):<br />
<br />
mount -a<br />
<br />
6. Затем надо установить Grub2 в MBR.<br />
<br />
grub2-install /dev/sd'''X''' # В нашем примере sd'''X''' - это sda<br />
<br />
В Ubuntu, Debian grub2-install заменить на grub-install.<br />
<br />
7. После установки Grub2, нужно чтобы он нашел другие загрузочные записи на жестком диске (например Windows).<br />
Для этого дадим следующую команду:<br />
<br />
update-grub2<br />
В Ubuntu,Debian update-grub2 заменить на update-grub.<br />
<br />
8. Выходим из chroot и Live-режима и перегружаем компьютер. После перезагрузки, будет меню Grub2 со списком всех ваших ОС.<br />
<br />
exit<br />
sync<br />
reboot<br />
<br />
Также, для восстановления загрузчика grub2 можно воспользоваться небольшим скриптом grub2recovery. Его можно установить из репозитория contrib командой<br />
sudo dnf in grub2recovery<br />
или скачать по ссылке: https://forum.rosalinux.ru/download/file.php?id=12856 и rpm https://forum.rosalinux.ru/download/file.php?id=12855 <br><br />
О скрипте можно почитать на форуме: https://forum.rosalinux.ru/viewtopic.php?f=58&t=10649 <br><br />
<br />
''Скрипт является разработкой сообщества и не является официальным приложением.''<br />
<br />
<br />
[[Категория:HOWTO]]<br />
[[en:Reinstall Grub2 from a live ROSA]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC&diff=21015
Список консольных программ
2024-02-17T11:35:36Z
<p>Noname: /* T */ дополнение</p>
<hr />
<div>== A ==<br />
'''a2p''' — конвертирует awk-скрипт в Perl-скрипт.<br /><br />
'''a2ps''' — форматирует текстовый файл для печати на Postscript-принтере.<br/><br />
'''access''' — проверяет, имеет ли вызывающая программа доступ к указанному файлу.<br /><br />
'''accton''' — используется администратором для включения/выключения ведения журнала действий пользователей (лог-файла). Регистрация активности пользователей сохраняется в заданном текстовом файле.<br /><br />
'''aclocal''' — автоматическое создание файлов aclocal.m4 на основе содержимого файлов configure.in.<br /><br />
'''acpi_available''' — проверяет, доступна ли подсистема ACPI или нет.<br /><br />
'''acpid''' — обеспечивает интеллектуальное управление питанием и используется для уведомления программ пользовательского пространства о событиях ACPI.<br /><br />
'''acpi''' — отображение состояния батареи и другой информации подсистемы ACPI (сокр. от «Advanced Configuration and Power Interface»).<br /><br />
'''ac''' — отображает статистику о времени подключения пользователей (в часах) на основе входов/выходов из системы.<br /><br />
'''addgroup''' — добавляет группу в систему.<br /><br />
'''addr2line''' — конвертирует адреса в имена файлов и номера строк.<br /><br />
'''adduser''' — добавляет нового пользователя в систему.<br /><br />
'''agetty''' — linux-версия getty, которая представляет собой Unix-программу, работающую на главном компьютере и управляющую физическими или виртуальными терминалами для обеспечения многопользовательского доступа.<br /><br />
'''agrep''' — ищет в файле записи, содержащие строки, которые точно или приблизительно соответствуют заданному шаблону.<br /><br />
'''alias''' — создание или удаление псевдонима для команды или серии команд.<br /><br />
'''alsactl''' — управление звуковым драйвером ALSA.<br/><br />
'''amixer''' — консольный микшер звуковой карты, работающей под управлением ALSA (сокр. от «Advanced Linux Sound Architecture» — набор драйверов и утилит для поддержки звука в Linux).<br /><br />
'''amp''' — проигрывает заданные MPEG аудио файлы, или (если вызывается с опцией -convert) распаковывает файл в wave формат.<br/><br />
'''aplay''' — консольный аудиоплеер для звуковых карт, работающих под управлением ALSA.<br /><br />
'''apm''' — запрос к подсистеме расширенного управления питанием (Advanced Power Management - APM) BIOS.<br/><br />
'''apropos''' — помогает пользователю найти команду по ключевому слову, связанному с ней. Показывает краткое описание команд, в которых присутствует искомое слово.<br /><br />
'''arch''' — отображает информацию об архитектуре компьютера.<br /><br />
'''aria2c''' — сверхбыстрая утилита загрузки.<br /><br />
'''arp''' — управление системным ARP-кэшем (сокр. от «Address Resolution Protocol»). Также позволяет создать его полный дамп.<br /><br />
'''ar''' — используется для создания, изменения и извлечения файлов из архивов.<br /><br />
'''aspell''' — используется в качестве средства проверки орфографии в Linux.<br /><br />
'''as''' — ассемблер проекта GNU; используется компилятором GCC.<br /><br />
'''atd''' — демон планировщика заданий, запускающий задания, поставленные в очередь с помощью команды at.<br /><br />
'''atq''' — отображает список отложенных заданий, запланированных пользователем.<br /><br />
'''atrm''' — удаление указанных заданий, добавленных через команду at. Чтобы удалить выбранное задание, необходимо передать команде его номер.<br /><br />
'''attr''' — расширенные атрибуты объектов xfs.<br /><br />
'''at''' — выполняет команды в заданное время.<br /><br />
'''autoconf''' — создание конфигурационных скриптов для пакетов с исходным кодом.<br /><br />
'''autoheader''' — создание файла шаблона операторов #define или любого другого заголовка шаблона.<br /><br />
'''automake''' — автоматическое создание makefile-ов (файлов, соответствующих стандартам кодирования GNU).<br /><br />
'''autoreconf''' — создание автоматически собираемого исходного кода для Unix-подобных систем.<br /><br />
'''autoupdate''' — обновление файла configure.in в системе Linux до более новой версии Autoconf.<br /><br />
'''awk''' — язык поиска и обработки шаблонов.<br /><br />
<br />
== B ==<br />
'''badblocks''' — поиск на диске сбойных блоков.<br /><br />
'''banner''' — вывод большими буквами строки ASCII-символов в стандартный вывод.<br /><br />
'''base64''' — base64 encode/decode data and print to standard output.<br /><br />
'''basename''' — удаляет информацию о каталоге и суффиксы из имен файлов, т.е. выводит имя файла с удалением всех компонентов каталога.<br /><br />
'''bash''' — запуск командной оболочки bash (сокр. от «Bourne Again Shell»). Данный шелл является стандартным интерпретатором в большинстве Linux-дистрибутивов.<br /><br />
'''batch''' — используется для считывания команд из стандартного ввода или указанного файла и их выполнения при разрешенном уровне нагрузки системы, т.е. когда средняя нагрузка падает ниже 1.5.<br /><br />
'''bc''' — консольный калькулятор.<br /><br />
'''bdiff''' — как и команда diff, применяется для поиска отличий, но в больших файлах.<br /><br />
'''bg''' — используется для восстановления на передний план задачи, выполняемой в фоновом режиме.<br /><br />
'''biff''' — система почтовых уведомлений для Unix, которая оповещает пользователя в командной строке о появлении новых писем.<br /><br />
'''bind''' — встроенная команда оболочки bash, которая используется для установки привязок клавиш и переменных Readline.<br /><br />
'''bison''' — генератор парсера, схожий с yacc.<br /><br />
'''break''' — используется для завершения выполнения циклов for, while и until.<br /><br />
'''builtin''' — выполняет встроенную команду оболочки. Используется тогда, когда вы хотите заменить встроенную команду оболочки некоторой функцией, но при этом вам нужна функциональность встроенной команды внутри самой функции.<br /><br />
'''bye''' — аналог команды exit, используется для завершения сессии или выхода из терминала.<br /><br />
'''bzcat''' — decompresses files to stdout.<br /><br />
'''bzcmp''' — вызов утилиты cmp для сжатых файлов формата .bzip.<br /><br />
'''bzdiff''' — сравнение сжатых файлов формата .bzip2.<br /><br />
'''bzgrep''' — поиск шаблона или выражения, но внутри сжатого файла формата .bzip2.<br /><br />
'''bzip2, bunzip2''' — сжатие и распаковка файлов.<br /><br />
'''bzip2recover''' — восстановление поврежденных bzip2 файлов.<br /><br />
'''bzless''' — похожая на команду bzmore, но имеет гораздо больше функций. bzless не нужно читать весь входной файл перед запуском, поэтому с большим файлом она запускается быстрее, чем текстовые редакторы (например, vi).<br /><br />
'''bzmore''' — это фильтр, который позволяет поэкранно просматривать как сжатые (.bzip2), так и простые текстовые файлы.<br /><br />
<br />
== C ==<br />
'''calendar''' — служба напоминаний.<br /><br />
'''cal''' — просмотр календаря определенного месяца или целого года. По умолчанию показывает календарь текущего месяца.<br /><br />
'''cancel''' — остановка вывода информации о работе задачи.<br /><br />
'''case''' — альтернатива нескольким операторам if/elif (когда используется одна переменная).<br /><br />
'''cat''' — считывает данные из файла и выдает их содержимое в качестве выходных данных. также способен объединять данные из нескольких файлов.<br /><br />
'''ccrypt''' — инструмент командной строки для шифрования и дешифрования данных.<br /><br />
'''cc''' — используется для компиляции кода языка Си и создания исполняемых файлов.<br /><br />
'''cd''' — изменение текущего рабочего каталога.<br /><br />
'''cdrecord''' — запись компакт дисков (в том числе и музыкальных) из образа диска.<br/><br />
'''cfdisk''' — утилита для просмотра и управления таблицей разделов диска.<br /><br />
'''chage''' — утилита для просмотра и изменения информации об истечении срока действия пароля пользователя.<br /><br />
'''chattr''' — изменение атрибутов файла в каталоге.<br /><br />
'''chcon''' — изменение контекста безопасности файла.<br/><br />
'''chdir''' — смена рабочей директории (аналог команды cd).<br /><br />
'''checkeq''' — процессор языка программирования для описания уравнений и проведения сравнений.<br /><br />
'''checknr''' — проверка nroff- и troff-файлов на ошибки.<br /><br />
'''chfn''' — позволяет легко изменить имя пользователя и другие детали.<br /><br />
'''chgrp''' — изменение группы, владеющей файлом или каталогом.<br /><br />
'''chkconfig''' — перечисление текущей информации о запуске служб или какой-либо конкретной службы, а также обновления настроек уровня запуска службы.<br /><br />
'''chmod''' — используется для управления разрешениями на заданный файл/каталог.<br /><br />
'''chown''' — изменение владельца файла или группы.<br /><br />
'''chpasswd''' — смена пароля одновременно для нескольких пользователей.<br /><br />
'''chroot''' — изменение корневого каталога.<br /><br />
'''chrt''' — управление атрибутами реального времени процесса.<br /><br />
'''chsh''' — изменение оболочки входа пользователя (текущего шелла).<br /><br />
'''chvt''' — переключение между различными доступными терминалами TTY (сокр. от «Teletypewriter»).<br /><br />
'''cksum''' — отображение и вычисление значения контрольной суммы файла или CRC (сокр. от «Cyclic Redundancy Check»), его размера в байтах и имени в стандартном выводе.<br /><br />
'''clear''' — очистка экрана терминала.<br /><br />
'''cmp''' — побайтовое сравнение двух файлов. Помогает выяснить, идентичны ли два сравниваемых файла или нет.<br /><br />
'''colcrt''' — форматирование вывода текстового процессора таким образом, чтобы его можно было просматривать на дисплеях с ЭЛТ (сокр. от «Электронно-Лучевая Трубка»).<br /><br />
'''colrm''' — удаляет выбранные столбцы из строк файла. Столбец определяется как один символ в строке. Входные данные считывается со стандартного входа. Результат записывается в стандартный вывод.<br /><br />
'''column''' — форматирование отображения содержимого файла в виде столбцов.<br /><br />
'''col''' — фильтрует переводы строк из входного потока.<br /><br />
'''comm''' — сравнивает два отсортированных файла построчно и записывает в стандартный вывод: строки, которые являются общими, и строки, которые являются уникальными.<br /><br />
'''compress''' — уменьшение размера файла. После сжатия файл приобретает расширение .Z.<br /><br />
'''continue''' — пропуск текущей итерации в циклах for, while и until.<br /><br />
'''cpio''' (сокр. от «copy in, copy out») — обработка архивных файлов, таких как *.cpio или *.tar. Данная команда может копировать файлы в архивы и из архивов.<br /><br />
'''cpp''' — автоматически используется компилятором Cи для преобразования вашей программы перед компиляцией.<br /><br />
'''cp''' — копирование файлов и каталогов.<br /><br />
'''crontab''' — список команд, которые вы хотите выполнять по регулярному расписанию, а также имя команды, используемой для управления этим списком.<br /><br />
'''cron''' — утилита, автоматизирующая выполнение запланированной задачи в заданное время.<br /><br />
'''csh''' — командный интерпретатор C Shell.<br /><br />
'''csplit''' — разделение любого файла на множество частей.<br /><br />
'''ctags''' — позволяет быстро получить доступ к файлам (например, быстро увидеть определение функции).<br /><br />
'''cupsd''' — планировщик подсистемы вывода CUPS (сокр. от «Common Unit Printing System»).<br /><br />
'''curl''' — утилита для передачи данных на сервер или с сервера с использованием любого из поддерживаемых протоколов.<br /><br />
'''cut''' — утилита для вывода заданной части строк каждого заданного файла.<br /><br />
'''cu''' — отправка сигнала через терминал другой системе.<br /><br />
'''cvs''' — хранение истории изменений файла. Всякий раз, когда файл поврежден или что-то идет не так, команда cvs помогает вернуться к предыдущей версии и восстановить наш файл.<br /><br />
<br />
== D ==<br />
'''date''' — отображение и установка системной даты и времени.<br /><br />
'''dc''' — вычисление арифметических выражений.<br /><br />
'''dd''' — утилита командной строки для Unix и Unix-подобных операционных систем, основной целью которой является конвертирование и копирование файлов.<br /><br />
'''declare''' — объявление переменных и функций, установка атрибутов и отображение их значений.<br /><br />
'''delgroup''' — удаление группы из системы.<br /><br />
'''deluser''' — удаление пользователя из системы.<br /><br />
'''depmod''' — формирование списка зависимостей модулей ядра и генерация соответствующих *.map-файлов.<br /><br />
'''deroff''' — удаляет из файлов nroff- и troff-конструкции.<br /><br />
'''df''' — отображение информации о доступном и использованном дисковом пространстве.<br /><br />
'''dhclient''' — утилита для работы с DHCP-протоколом (получение динамического IP-адреса, настройка сетевых интерфейсов и пр.).<br /><br />
'''diff3''' — построчное сравнения трех файлов.<br /><br />
'''diff''' — отображение различий в файлах путем их построчного сравнения.<br /><br />
'''dig''' — отображение информации о DNS (сокр. от «Domain Name System»).<br /><br />
'''dircmp''' — сравнение содержимого двух каталогов.<br /><br />
'''dircolors''' — настройка цветов для 'ls'.<br/><br />
'''dirname''' — удаление замыкающих слэшей (/) из пути к каталогу и вывод оставшейся части.<br /><br />
'''dirs''' — отображение списка сохраненных каталогов.<br /><br />
'''dir''' — перечисление содержимого каталога.<br /><br />
'''disable''' — деактивирует принтеры, отключая их от запросов на печать, отправляемых командой lp.<br /><br />
'''dnsdomainname''' — вывести или установить системное имя хоста.<br/><br />
'''dnsquery''' — послать запрос на сервер доменных имен через резолвер.<br/><br />
'''dmesg''' — выводит сообщения ядра во время начальной загрузки Linux или настраивает их буфер.<br /><br />
'''dmidecode''' — позволяет получить информацию об аппаратных компонентах системы, а также другую полезную информацию: характеристики процессора, оперативной памяти (DIMM), детали BIOS и т.д.<br /><br />
'''domainname''' — позволяет вывести или установить NIS/YP-доменное имя.<br /><br />
'''dosfsck''' — диагностирует файловую систему MS-DOS на наличие проблем и пытается их устранить.<br /><br />
'''dpost''' — конвертирование файлов из формата troff в PostScript.<br /><br />
'''dstat''' — обычно используется системными администраторами для получения информации о сетевых соединениях, устройствах ввода-вывода, процессоре и т.д.<br /><br />
'''dumpe2fs''' — дамп информации файловой системы ext2/ext3.<br /><br />
'''dumpkeys''' — выводит информацию о текущей раскладке клавиатуры.<br /><br />
'''dump''' — резервное копирование файловой системы на какое-либо запоминающее устройство.<br /><br />
'''du''' — отслеживание файлов и каталогов, которые занимают чрезмерное количество места на жестком диске.<br /><br />
'''djview''' — полноценная программа для просмотра файлов DjVu.<br/><br />
<br />
== E ==<br />
'''e2fsck''' — проверка файловых систем ext2/ext3/ext4.<br /><br />
'''echo''' — отображение текста/строки на экране, которые передаются в качестве аргумента.<br /><br />
'''edit''' — текстовый редактор (разновидность редактора для простых пользователей).<br /><br />
'''ed''' — запуск построчного текстового редактора с минималистичным интерфейсом.<br /><br />
'''egrep''' — обрабатывает шаблон как расширенное регулярное выражение и выводит строки, соответствующие шаблону.<br /><br />
'''eject''' — позволяет извлекать съемный носитель (обычно CD-ROM, дискету, ленту, JAZ- или ZIP-диск) с помощью программного обеспечения.<br /><br />
'''elm''' — интерактивная почтовая система.<br /><br />
'''emacs''' — редактор с простым пользовательским интерфейсом, в котором нет режима вставки. У него есть только режим редактирования.<br /><br />
'''enable''' — включение/выключение lp-принтеров.<br /><br />
'''env''' — вывод информации о переменных окружения. Также используется для запуска утилиты или команды в пользовательском окружении.<br /><br />
'''eqn''' — используется для описания сравнений.<br /><br />
'''ethtool''' — отображает или позволяет изменить настройки сетевой карты.<br /><br />
'''eval''' — команда воспринимает переданные ей аргументы как директивы оболочки.<br /><br />
'''evim''' — простой Vim, позволяет редактировать файл с помощью Vim в безрежимном режиме.<br/><br />
'''exec''' — используется для выполнения команды из самого bash.<br /><br />
'''exiftool''' — чтение и запись метаданных файлов.<br /><br />
'''exit''' — закрывает командный интерпретатор с состоянием N. Если N не указано, то состоянием выхода будет состояние последней выполненной команды.<br /><br />
'''expand''' — позволяет конвертировать табуляции в пробелы в файле, а когда файл не указан, то данные считываются со стандартного ввода.<br /><br />
'''expect''' — команда, работающая со скриптами, которые ожидают ввода данных от пользователя. Автоматизирует задачу, предоставляя входные данные.<br /><br />
'''expiry''' — проверяет и изменяет пароль согласно политике устаревания.<br/><br />
'''export''' — помечает переменные окружения, которые экспортируются в дочерние процессы.<br /><br />
'''expr''' — вычисляет заданное выражение и отображает результат.<br /><br />
'''ex''' — текстовый редактор в Linux, который также называется линейным режимом редактора vi.<br /><br />
<br />
== F ==<br />
'''false''' — ничего не делает, сообщает о безуспешном выполнении.<br/><br />
'''factor''' — вывод простых множителей заданных чисел (задаваемых как через командную строку, так и через стандартный ввод).<br /><br />
'''fc-cache''' — сканирует каталоги шрифтов (и создает их кэш), которые используют fontconfig для обработки шрифтов.<br /><br />
'''fc-list''' — используется для перечисления доступных шрифтов и стилей шрифтов. Список всех шрифтов можно отфильтровать и отсортировать, применив соответствующую опцию форматирования.<br /><br />
'''fc''' — используется для перечисления, редактирования или повторного выполнения команд, ранее введенных в интерактивную оболочку.<br /><br />
'''fdisk''' — диалоговая команда в Linux, используемая для создания и управления таблицей разделов диска.<br /><br />
'''fetchmail''' — прием почты с серверов POP, IMAP, ETRN, или ODMR.<br/><br />
'''ffmpeg''' — видеоконвертер.<br /><br />
'''fgrep''' — поиск строк в файле.<br /><br />
'''fg''' — перемещение фоновой задачи на передний план.<br /><br />
'''file''' — вывод типа файла.<br /><br />
'''findsmb''' — список всех машин, доступных по SMB-протоколу (сокр. от «Server Message Block»).<br /><br />
'''find''' — поиск файлов и каталогов.<br /><br />
'''finger''' — подробная информация обо всех пользователях, вошедших в систему.<br /><br />
'''fmt''' — утилита простого форматирования текста.<br /><br />
'''fold''' — оборачивает каждую строку во входной файл, чтобы соответствовать заданной ширине, и выводит её на стандартный вывод.<br /><br />
'''foreach''' — выполняет набор команд для каждого из элементов заданного массива.<br /><br />
'''for''' — используется для многократного выполнения набора команд для каждого элемента, присутствующего в списке.<br /><br />
'''free''' — отображение объема свободной и используемой памяти в системе.<br /><br />
'''fsck.fat''' — проверка и восстановление файловой системы MS-DOS.<br /><br />
'''fsck''' — проверка и восстановление файловой системы linux.<br /><br />
'''ftp''' — интерактивная утилита для доступа к FTP (сокр. от «File Transfer Protocol»).<br /><br />
'''function''' — создание функций или методов.<br /><br />
'''fun''' — рисование в терминале узоров различного типа.<br /><br />
'''fusermount''' — mount and unmount FUSE filesystems.<br /><br />
'''fuser''' — определение процессов, использующих файлы или сокеты.<br /><br />
<br />
== G ==<br />
'''gawk''' — GNU-версия awk.<br /><br />
'''gcc''' — используется для компиляции программ, написанных на языках C, C++, Objective-C и Objective-C++.<br /><br />
'''gdb''' — мощный отладчик для программ, написанных на C, C++, Ada, Fortran и пр.<br /><br />
'''ginstall''' — копирование файлов и установка атрибутов.<br/><br />
'''gendiff''' — утилита, помогающая создать diff-файл без ошибок.<br/><br />
'''getent''' — получение элементов из базы данных.<br /><br />
'''getfacl''' — получение списков контроля доступа к файлам.<br /><br />
'''getfattr''' — получить расширенные аттрибуты объектов файловой системы.<br /><br />
'''git''' — система управления версиями.<br /><br />
'''glxinfo''' — показать информацию о реализации GLX.<br /><br />
'''gpasswd''' — администрирование файлов /etc/group и /etc/shadow.<br /><br />
'''gpg''' — инструмент для шифрования и цифровой подписи.<br/><br />
'''gpgv''' — программа проверки подписей.<br/><br />
'''gprof''' — отображение данных по профилированию программы.<br /><br />
'''grep''' — поиск в файле определенного шаблона символов и вывод всех строк, содержащих этот шаблон.<br /><br />
'''grodvi''' — преобразует вывод groff в формат TeX dvi.<br/><br />
'''groff''' — front end приложение для системы форматирования документов groff.<br /><br />
'''groupadd''' — создание новой группы.<br /><br />
'''groupdel''' — удаление существующей группы.<br /><br />
'''groupmod''' — модификация или смена существующей группы.<br /><br />
'''groups''' — отображение списка групп, в которых состоит пользователь.<br /><br />
'''grpck''' — проверка целостности информации о группах, а именно: все записи в /etc/group и /etc/gshadow имеют правильный формат и содержат допустимые данные.<br /><br />
'''grpconv''' — преобразует пароли пользователей и групп в/из защищенную форму.<br /><br />
'''gs''' — команда вызывает Ghostscript — интерпретатор языка Adobe Systems PostScript и формата PDF (сокр. от «Portable Document Format»).<br /><br />
'''gunzip''' — сжатие или распаковка файлов.<br /><br />
'''gview''' — версия редактора vi с графическим интерфейсом. Запускается в новом окне.<br /><br />
'''gvim''' — синоним для команды gview.<br /><br />
'''gzexe''' — сжатие исполняемых файлов, а также их автоматическое распаковывание в момент выполнения.<br /><br />
'''gzip''' — сжатие файлов.<br /><br />
'''g++''' — используется для предварительной обработки, компиляции, сборки и линкинга исходного кода при создании исполняемого файла.<br /><br />
<br />
== H ==<br />
'''halt''' — указание аппаратному обеспечению компьютера остановить все исполняющиеся в данный момент процессы. Основное применение — перезагрузка или выключение системы.<br /><br />
'''hash''' — доступ к хэш-таблице недавно выполненных программ.<br /><br />
'''hdparm''' — получение информации о жестком диске, изменении интервалов записи, настроек DMA (сокр. от «Direct Memory Access»).<br /><br />
'''head''' — выводит N первых строк файла.<br /><br />
'''help''' — отображает информацию о встроенных командах оболочки.<br /><br />
'''hexdump''' — фильтр, который отображает указанные файлы или стандартный ввод, если файлы не указаны, в заданном пользователем формате.<br /><br />
'''history''' — отображает историю команд, которые были введены с момента начала сессии.<br /><br />
'''hostid''' — отображает числовой идентификатор текущего хоста.<br /><br />
'''hostnamectl''' — может использоваться для запроса и изменения имени хоста системы и связанных с ним параметров.<br /><br />
'''hostname''' — выдает или устанавливает имя компьютера.<br /><br />
'''host''' — утилита для работы с DNS-запросами.<br /><br />
'''htop''' — консольная утилита, которая позволяет пользователю интерактивно (в режиме реального времени) отслеживать список запущенных процессов.<br /><br />
'''hwclock''' — запрос и установка аппаратных часов (сокр. «RTC» от «Real-time clock»).<br /><br />
<br />
== I ==<br />
'''iconv''' — преобразование некоторого текста из одной кодировки в другую.<br /><br />
'''id''' — выводит информацию о текущем пользователе и группе.<br /><br />
'''ifconfig''' — конфигурирование сетевого интерфейса.<br /><br />
'''ifdown''' — отключает сетевой интерфейс.<br /><br />
'''ifquery''' — позволяет выбрать информацию о сетевом интерфейсе.<br /><br />
'''iftop''' — инструмент анализа сети, используемый системными администраторами для просмотра статистики, связанной с пропускной способностью канала передачи данных.<br /><br />
'''ifup''' — задействует (поднимает) сетевой интерфейс, позволяя ему передавать и получать данные.<br /><br />
'''imagemagick''' — набор программ для чтения и редактирования файлов множества графических форматов.<br /><br />
'''import''' — создание скриншота экрана (всего экрана или только его части) с последующим сохранением в файл.<br /><br />
'''info''' — позволяет читать документацию в формате info.<br /><br />
'''insmod''' — программа для активации модулей ядра.<br /><br />
'''install''' — копирует файлы и устанавливает атрибуты.<br /><br />
'''inxi''' — показывает информацию о системе.<br /><br />
'''iostat''' — мониторинг статистики I/O-операций для устройств и разделов.<br /><br />
'''iotop''' — отображение статистики работы процессов с дисками.<br /><br />
'''ipcrm''' — удаление IPC-ресурсов (сокр. от «Inter-Process Communication») и связанных с ними данных.<br /><br />
'''ipcs''' — вывод информации об IPC-ресурсах.<br /><br />
'''iptables-save''' — сохраняет текущие правила iptables в указанном файле.<br /><br />
'''iptables''' — настройка правил брандмауэра, входящего в состав ядра Linux.<br /><br />
'''ip''' — отображение и управление сетевыми подключениями, маршрутизацией и пр.<br /><br />
'''iwconfig''' — отображение параметров и статистики беспроводной связи, которые извлекаются из /proc/net/wireless.<br /><br />
'''iwlist''' — используется для отображения дополнительной информации от беспроводного сетевого интерфейса, не показываемой iwconfig.<br /><br />
<br />
== J ==<br />
'''jobs''' — отображение состояния заданий в текущей сессии.<br /><br />
'''join''' — утилита для соединения строк двух файлов на основе ключевого поля, присутствующего в обоих файлах.<br /><br />
'''journalctl''' — используется для просмотра логов, собранных systemd. systemd «собирает» логи в бинарном формате.<br /><br />
<br />
== K ==<br />
'''kernelversion''' — выводит основную версию ядра.<br/><br />
'''killall''' — посылает сигнал kill всем активным процессам.<br /><br />
'''kill''' — посылает процессу сигнал завершения работы.<br /><br />
'''ksh''' — командный интерпретатор (оболочка) Korn Shell.<br /><br />
<br />
== L ==<br />
'''last''' — отображение списка всех пользователей, вошедших и вышедших из системы с момента создания файла /var/log/wtmp.<br /><br />
'''lastb''' — отображение списка последних вошедших в систему пользователей.<br /><br />
'''ldd''' — отображение зависимостей разделяемых библиотек.<br /><br />
'''ld''' — редактор ссылок на библиотеки для объектов.<br /><br />
'''less''' — поэкранное чтение содержимого текстового файла.<br /><br />
'''let''' — вычисление арифметических выражений для переменных оболочки.<br /><br />
'''lexgrog''' — анализирует заголовочную информацию справочных страниц.<br/><br />
'''link''' — создание жесткой ссылки на файл.<br /><br />
'''ln''' — создание символьных ссылок между файлами.<br /><br />
'''locate''' — поиск файлов по имени.<br /><br />
'''login''' — вход в систему.<br /><br />
'''logname''' — отображает логин пользователя.<br /><br />
'''logout''' — аналог lo.<br /><br />
'''look''' — выводит строки, начинающиеся с заданной подстроки.<br /><br />
'''losetup''' — настройка и управление виртуальными loop-устройствами.<br /><br />
'''lo''' — завершает работу с командной оболочкой.<br /><br />
'''locale''' — выдаёт информацию о локали.<br/><br />
'''localedef''' — компилирует файлы определения локали.<br/><br />
'''lpq''' — просмотр очереди печати.<br/><br />
'''lpr''' — локальная печать.<br/><br />
'''lprm''' — команда удаления заданий из очереди.<br/><br />
'''lsblk''' — отображение сведений о блочных устройствах.<br /><br />
'''lsb_release -a''' — отображение информации о дистрибутиве.<br /><br />
'''lshw''' — генерация подробной информации об аппаратной конфигурации системы на основе файлов из каталога /proc.<br /><br />
'''lsmod''' — отображение модулей ядра Linux, которые в данный момент загружены.<br /><br />
'''lsof''' — отображает информацию о том, какие файлы используются тем или иным процессом.<br /><br />
'''lspci''' — отображает список всех устройств на шине PCI.<br /><br />
'''lsusb''' — отображение информации о USB-шинах и устройствах, подключенных к ним.<br /><br />
'''ls''' — отображение списка содержимого каталога.<br /><br />
'''lsattr''' — выводит атрибуты файла второй расширенной файловой системы Linux.<br/><br />
'''lynx''' — браузер.<br /><br />
'''lzcat''' — посмотреть содержимое файла, сжатого LZMA (сокр. от «Lempel-Ziv-Markov chain-Algorithm»).<br /><br />
'''lzma''' — сжать или распаковать файл по алгоритму LZMA.<br /><br />
'''lzop''' — сжимает или разжимает файлы.<br/><br />
<br />
== M ==<br />
'''mach''' — отображение информации о типе процессора.<br /><br />
'''mailq''' — сводка почтовых сообщений, поставленных в очередь для дальнейшей доставки.<br /><br />
'''mailx''' — интерактивная система обработки сообщений электронной почты.<br /><br />
'''make-ssh-known-hosts''' — создание файла ssh_known_hosts из данных DNS.<br/><br />
'''make''' — цель утилиты make состоит в том, чтобы автоматически определить, какие части большой программы должны быть перекомпилированы, и выдать команды для их перекомпиляции.<br /><br />
'''manconv''' — изменяет кодировку справочной страницы.<br/><br />
'''manpath''' — определяет путь поиска справочных страниц.<br/><br />
'''man-recode''' — изменяет кодировку справочных страниц.<br/><br />
'''man''' — отображение руководства пользователя по любой команде, которую мы можем запустить в терминале.<br /><br />
'''mc''' — файловый менеджер.<br /><br />
'''md5sum''' — проверка целостности данных с помощью алгоритма хеширования MD5.<br /><br />
'''memusagestat''' — генерирует график по данным профилирования памяти.<br/><br />
'''memusage''' — исследует использование памяти программы.<br/><br />
'''merge''' — слияние содержимого трех файлов.<br /><br />
'''mesg''' — отправка сообщений в другой терминал.<br /><br />
'''mkdir''' — создание одного или сразу нескольких каталогов.<br /><br />
'''mkfs''' — создание файловой системы в выбранном разделе.<br /><br />
'''mknod''' — создает специальные блочные или символьные файлы.<br/><br />
'''mkswap''' — создание файла (или раздела) подкачки (swap).<br /><br />
'''mkvextract''' — извлечение дорожки из файлов Matroska(TM) в другие файлы.<br/><br />
'''mkvinfo''' — запись информации об элементах в файлы Matroska(TM).<br/><br />
'''mkvmerge''' — упаковка потоков мультимедиа в файл Matroska(TM).<br/><br />
'''mkvpropedit''' — изменяет свойства существующих файлов Matroska(TM) без сложного ремультиплексирования.<br/><br />
'''mkvtoolnix-gui''' — графический интерфейс для mkvmerge(1), включающий редакторы глав и заголовков.<br/><br />
'''modeprobe''' — программа для загрузки и выгрузки модулей из ядра Linux.<br /><br />
'''modinfo''' — отображение информации о модуле ядра Linux.<br /><br />
'''more''' — поэкранный просмотр текстовых файлов в командной строке.<br /><br />
'''mount''' — примонтировать файловую систему в директорию.<br /><br />
'''mpstat''' — создание статистического отчета о работе процессора (или по каждому процессору, если их несколько).<br /><br />
'''mtrace''' — трактует журнал трассировки malloc.<br/><br />
'''mt''' — управление работой накопителя с магнитной лентой.<br /><br />
'''mv''' — перемещение внутри файловой системы одного или нескольких файлов, или каталогов из одного места в другое.<br /><br />
'''mysqldump''' — утилита для создания резервной копии базы данных MySQL.<br /><br />
'''mysql''' — программа для управления базой данных MySQL.<br /><br />
<br />
== N ==<br />
'''nc''' — мощная утилита, которая используется для решения различных задач, связанных с сетевыми TCP- и UDP-подключениями.<br /><br />
'''nethogs''' — Net top tool grouping bandwidth per process.<br /><br />
'''netstat''' — отображает различную информацию, связанную с сетью (например, сетевые соединения, таблицы маршрутизации, статистика интерфейса и пр.).<br /><br />
'''networkctl''' — Query the status of network links.<br /><br />
'''newgrp''' — предоставляет пользователю права новой группы на время.<br /><br />
'''newsbeuter''' — an RSS/Atom feed reader for text terminals.<br /><br />
'''nice''' — запуск программы с измененным приоритетом.<br /><br />
'''niscat''' — отображение таблиц и объектов NIS+.<br /><br />
'''nischmod''' — изменение прав доступа к объекту NIS+.<br /><br />
'''nischown''' — изменение владельца объекта NIS+.<br /><br />
'''nischttl''' — изменение значения времени жизни объекта NIS+.<br /><br />
'''nisdefaults''' — отображение заданных по умолчанию значений NIS+.<br /><br />
'''nistbladm''' — команда администрирования таблицы NIS+.<br /><br />
'''nisdomainname''' — вывести или установить системное имя хоста.<br/><br />
'''nl''' — печатает каждый ФАЙЛ на стандартный вывод, добавляя номера строк.<br /><br />
'''nmap''' — инструмент исследования сети и сканер безопасности/портов.<br /><br />
'''nmcli''' — управление NetworkManager-ом. Также может применяться для отображения состояния сетевого устройства, создания, редактирования, активации/деактивации и удаления сетевых подключений.<br /><br />
'''nohup''' — продолжить выполнение команды, когда сессия терминала будет завершена.<br /><br />
'''nroff''' — приложение для системы форматирования документов.<br /><br />
'''nslookup''' — инструмент сетевого администрирования, связанного с DNS.<br /><br />
<br />
== O ==<br />
'''od''' — преобразование содержимого входных данных в восьмеричный и другие форматы.<br /><br />
'''onintr''' — отображение информации об аппаратных прерываниях.<br /><br />
'''on''' — выполнение команды на удаленной системе, но с локальным окружением.<br /><br />
'''osec''' — выполняет контроль целостности системы.<br/><br />
<br />
== P ==<br />
'''pack''' — сжатие файлов по алгоритму Хаффмана.<br /><br />
'''pact''' — вывод содержимого сжатого текстового файла.<br /><br />
'''pagesize''' — отображение размера страницы в памяти.<br /><br />
'''parted''' — программа для разметки диска.<br /><br />
'''partprobe''' — информирование операционной системы об изменениях в таблице разделов.<br /><br />
'''passwd''' — изменение паролей учетных записей пользователей.<br /><br />
'''paste''' — соединение файлов (параллельным слиянием) путем вывода результирующих строк, состоящих из строк каждого указанного файла, разделенных табуляцией в качестве разделителя, в стандартный вывод.<br /><br />
'''pathchk''' — проверить правильность и портируемость имени файла.<br/><br />
'''pax''' — чтение и запись файловых архивов и копирование иерархий каталогов.<br /><br />
'''pdftk''' — простой редактор pdf.<br /><br />
'''perl''' — интерпретатор Perl-скриптов.<br /><br />
'''pgrep''' — позволяет находить идентификаторы процессов работающей программы на основе заданных критериев.<br /><br />
'''pg''' — фильтр для постраничного просмотра содержимого текстовых файлов.<br /><br />
'''pico''' — простой текстовый редактор в стиле Pine Composer.<br /><br />
'''pidof''' — определение идентификаторов процессов конкретной запущенной программы.<br /><br />
'''pine''' — программа для Интернет-новостей и электронной почты.<br /><br />
'''ping''' — проверка сетевого подключения между хостом и сервером/другим хостом.<br /><br />
'''pinky''' — команда поиска информации о пользователе, которая дает подробную информацию обо всех пользователях, вошедших в систему. В отличие от finger, применяя pinky, вы можете обрезать интересующую вас информацию.<br /><br />
'''pkexec''' — Выполнить команду от имени другого пользователя.<br/><br />
'''pkill''' — завершить процесс по его имени.<br /><br />
'''pmap''' — отображение информации об адресном пространстве процесса.<br /><br />
'''postconf''' — конфигурационный инструментарий Postfix.<br/><br />
'''postdrop''' — агент отправки почты Postfix.<br/><br />
'''postfix''' — программа управления почтовой системой Postfix.<br/><br />
'''postkick''' — подстегнуть службу Postfix.<br/><br />
'''postlock''' — блокирует почтовую папку и выполняет команду.<br/><br />
'''postlog''' — Postfix-совместимый инструментарий журналирования.<br/><br />
'''postsuper''' — суперинтендант Postfix.<br/><br />
'''poweroff''' — выключение системы.<br /><br />
'''preparetips5''' — Извлечение текста из файлов с полезными советами.<br/><br />
'''printenv''' — отображение переменных окружения.<br /><br />
'''printf''' — отображение отформатированных данных (числа, строки и пр.).<br /><br />
'''procmail''' — автономный обработчик почты.<br/><br />
'''prtstat''' — выводит статистику по процессу.<br/><br />
'''pr''' — преобразование текстовых файлов для вывода.<br /><br />
'''pstree''' — отображение дерева процессов.<br /><br />
'''ps''' — вывод информации об активных процессах.<br /><br />
'''ptx''' — составляет оглавление файла.<br/><br />
'''pvs''' — производит форматированный вывод информации о физических томах.<br /><br />
'''pwck''' — проверяет целостность файлов паролей.<br /><br />
'''pwd''' — отображает полный путь к текущему рабочему каталогу.<br /><br />
<br />
== Q ==<br />
'''qrencode''' — создает qr коды и сохраняет в виде картинки на диск.<br /><br />
'''quit''' — завершение сеанса командной оболочки.<br /><br />
<br />
== R ==<br />
'''ranlib''' — генерирует индекс к содержимому архива и сохраняет его в архиве.<br /><br />
'''rb''' — Получение файлов по протоколам XMODEM, YMODEM, ZMODEM.<br/><br />
'''rcp''' — копирование файлов с одного компьютера на другой.<br /><br />
'''readelf''' — получение информации о файлах формата ELF (сокр. от «Executable and Linkable Format»).<br /><br />
'''readlink''' — отображение значения символьной ссылки.<br /><br />
'''read''' — считывание строки со стандартного ввода.<br /><br />
'''reboot''' — перезагрузка системы.<br /><br />
'''redshift''' — изменяет цветовой профиль экрана в зависимости от времени суток.<br /><br />
'''red''' — запуск редактора ed в режиме прокрутки текста.<br /><br />
'''rename''' — переименование файлов.<br /><br />
'''repeat''' — повторять выполнение команды нужное количество раз.<br /><br />
'''replace''' — утилита замены строк в файлах.<br /><br />
'''reset''' — инициализация терминала. Полезно в тех ситуациях, когда завершившаяся программа оставила терминал в «ненормальном» состоянии.<br /><br />
'''restore''' — восстановление файлов из резервной копии, созданной с помощью dump.<br /><br />
'''rev''' — реверсивное изменение строк файла.<br /><br />
'''rlogin''' — удаленный вход в систему.<br /><br />
'''rmdir''' — удаление пустых каталогов.<br /><br />
'''rmmod''' — удаление модуля из ядра.<br /><br />
'''rm''' — удаление файлов, каталогов, символьных ссылок и пр.<br /><br />
'''route''' — используется для работы с IP-адресами и таблицей маршрутизации.<br /><br />
'''rpcgen''' — компилятор протокола RPC.<br/><br />
'''rpcinfo''' — отображает информацию об RPC (сокр. от «Remote Procedure Call»).<br /><br />
'''rpm''' — менеджер пакетов RPM.<br /><br />
'''rsh''' — удаленный командный интерпретатор.<br /><br />
'''rsync''' — позволяет синхронизировать файлы и каталоги между двумя местоположениями. Ведет себя почти так же, как rcp, но имеет гораздо больше опций и использует протокол удаленного обновления для значительного ускорения передачи файлов при обновлении целевого файла.<br /><br />
'''runcon''' — запуск команды с указанным контекстом безопасности.<br/><br />
'''rview''' — Vi IMproved (Улучшенный Vi), текстовый редактор для программистов.<br/><br />
'''rvim''' — Vi IMproved (Улучшенный Vi), текстовый редактор для программистов.<br/><br />
'''rx''' — Получение файлов по протоколам XMODEM, YMODEM, ZMODEM.<br/><br />
'''rz''' — Получение файлов по протоколам XMODEM, YMODEM, ZMODEM.<br/><br />
<br />
== S ==<br />
'''s2p''' — конвертер sed-скриптов в Perl.<br /><br />
'''sar''' — мониторинг ресурсов системы Linux, таких как: загрузка процессора, использование памяти, нагрузка на устройства ввода-вывода и т.д.<br /><br />
'''scp''' — безопасное копирование файлов между серверами.<br /><br />
'''screen''' — обеспечивает возможность запуска и использования нескольких сеансов оболочки из одной ssh-сессии.<br /><br />
'''scriptreplay''' — воспроизведение активности терминала, сохраненной с помощью команды script.<br /><br />
'''script''' — используется для записи всего, что происходит в терминале.<br /><br />
'''sdiff''' — находит различия между двумя файлами и объединяет их в интерактивном режиме.<br /><br />
'''sed''' — потоковый редактор для фильтрации и преобразования текста.<br /><br />
'''select, pselect''' — создание нумерованного меню, из которого пользователь может выбрать нужный параметр.<br /><br />
'''sendmail''' — отправка электронного письма.<br /><br />
'''sensors''' — мониторинг температуры и напряжения.<br /><br />
'''seq''' — генерирует последовательность чисел с заданным шагом.<br /><br />
'''service''' — утилита для запуска и управления службами.<br /><br />
'''sestatus''' — проверка того, включен ли SELinux (модуль безопасности Linux).<br /><br />
'''setfacl''' — настройка списков контроля доступа к файлам.<br /><br />
'''setsid''' — запуск программы в новом сеансе.<br /><br />
'''set''' — показывает весь набор переменных в окружении.<br /><br />
'''sfdisk''' — программа для разметки дисков.<br /><br />
'''sftp''' — клиент для передачи файлов по протоколу SFTP.<br /><br />
'''shift''' — сдвигает/перемещает аргументы командной строки на одну позицию влево.<br /><br />
'''showkey''' — отображает код каждой кнопки, нажимаемой на клавиатуре.<br /><br />
'''shred''' — переписывает несколько раз указанные файлы для того, чтобы сделать более трудоёмким процесс восстановления данных даже в случае использования специального оборудования для восстановления.<br /><br />
'''shuf''' — перемешивание строк в файле.<br /><br />
'''shutdown''' — безопасное выключение системы.<br /><br />
'''sh''' — командная оболочка Bourne Shell.<br /><br />
'''sleep''' — задержка на заданное количество времени.<br /><br />
'''slogin''' — псевдоним ssh-клиента, применяемый для удаленного вход в систему через ssh.<br /><br />
'''smartctl''' — Control and Monitor Utility for SMART Disks.<br /><br />
'''smbclient''' — ftp-подобный клиент для доступа к ресурсам SMB/CIFS.<br /><br />
'''sort''' — сортировка строк в текстовых файлах.<br /><br />
'''source''' — чтение и выполнение содержимого файла (обычно набора команд), передаваемого в качестве аргумента в текущем скрипте оболочки.<br /><br />
'''spell''' — проверка орфографии.<br /><br />
'''split''' — разделение больших файлов на более мелкие.<br /><br />
'''sha1sum''' — вычисляет и сверяет криптографические контрольные суммы по алгоритму SHA1 (устарел).<br/><br />
'''sshfs''' — позволяет смонтировать файловую систему удалённого сервера с помощью протокола ssh.<br /><br />
'''ssh''' — протокол, используемый для безопасного подключения к удаленному серверу/системе.<br /><br />
'''ssh-add''' — добавляет RSA- или DSA-идентификацию в аутентификационного агента.<br/><br />
'''ssh-agent''' — агент аутентификации.<br/><br />
'''ssh-copy-id''' — инсталлирует ваши файлы публичной идентификации на удаленной машине.<br/><br />
'''ssh-keygen''' — создание, обслуживание и преобразование аутентификационных ключей.<br/><br />
'''ssh-keyscan''' — собирает публичные ключи ssh.<br/><br />
'''ss''' — просмотр информации о сетевых подключениях.<br /><br />
'''startx''' — инициализация сессии X-сервера.<br /><br />
'''stat''' — отображение статистики файла или файловой системы.<br /><br />
'''stop''' — остановка фоновой задачи.<br /><br />
'''strace''' — один из самых мощных инструментов мониторинга и диагностики, позволяющий проводить трассировку системных вызовов и сигналов.<br /><br />
'''strip''' — позволяет удалить отладочную информацию из исполняемых файлов.<br /><br />
'''stty''' — отображает и устанавливает параметры терминала.<br /><br />
'''sudo''' — используется в качестве префикса некоторой команды, которую разрешено запускать только суперпользователю.<br /><br />
'''sum''' — вычисление контрольной суммы и подсчета блоков в файле.<br /><br />
'''su''' — авторизация от имени другого пользователя.<br /><br />
'''swapoff''' — отключает файл (или раздел) подкачки.<br /><br />
'''swapon''' — задействует файл (или раздел) подкачки.<br /><br />
'''sync''' — синхронизация данных на диске с данными в памяти.<br /><br />
'''systemctl''' — используется для проверки и контроля состояния systemd и управления службами.<br /><br />
'''sx''' — Передача файлов по протоколам XMODEM, YMODEM, ZMODEM.<br/><br />
'''sz''' — Передача файлов по протоколам XMODEM, YMODEM, ZMODEM.<br/><br />
<br />
== T ==<br />
'''tabs''' — останавливает работу вкладок в терминале.<br /><br />
'''tac''' — объединение и вывод файлов в обратном порядке.<br /><br />
'''tail''' — выводит N последних строк файлов.<br /><br />
'''talk''' — программа визуальной коммуникации, которая копирует строки с вашего терминала в терминал другого пользователя.<br /><br />
'''tar''' — используется для создания архива и извлечения архивированных файлов.<br /><br />
'''tcopy''' — копирование магнитной ленты.<br /><br />
'''tcpdump''' — консольный анализатор сетевого траффика.<br /><br />
'''tcsh''' — командный интерпретатор TENEX C Shell.<br /><br />
'''tee''' — считывает данные из стандартного устройства ввода и записывает их на стандартное устройство вывода или в файл.<br /><br />
'''telnet''' — используется для связи с другим хостом по протоколу TELNET (сокр. от «Teletype Network»).<br /><br />
'''terminfo''' — terminal capability data base.<br /><br />
'''test''' — проверяет типы файлов.<br /><br />
'''timex''' — время выполнения команды (с отображением более подробной информации).<br /><br />
'''time''' — выполняет команду и по её завершению отображает статистику о затраченных временных ресурсах на её исполнение.<br /><br />
'''timeout''' - запускает команду и завершает её по истечении заданного времени.<br /><br />
'''todos''' — конвертирование текстовых файлов Unix в формат DOS.<br /><br />
'''top''' — отображение и обновление информации о топе процессов CPU.<br /><br />
'''touch''' — используется для создания, изменения и модификации временных меток файла.<br /><br />
'''tput, reset''' — initialize a terminal or query terminfo database.<br /><br />
'''tracepath''' — отображает маршрут по сетевым узлам с MTU (сокр. от «Maximum Transmission Unit»).<br /><br />
'''traceroute''' — отображает маршрут, по которому пакет достигает хоста.<br /><br />
'''tree''' — список содержимого каталогов в древовидном формате.<br /><br />
'''truncate''' — удаляет все содержимое файла. Она не удаляет файл, а оставляет его как файл с нулевым байтом на диске. Если вы воспользуетесь командой усечения, права доступа к файлу и право собственности на него сохранятся.<br /><br />
'''tr''' — преобразование или удаление символов.<br /><br />
'''true''' — ничего не делает, всегда завершается успешно.<br/><br />
'''tsort''' — выполняет топологическую сортировку.<br/><br />
'''tty''' — отображает информацию, связанную с терминалом (имя файла терминала, подключенного к стандартному входу).<br /><br />
'''type''' — используется для описания того, как будет интерпретироваться каждый аргумент, если он будет использоваться в качестве имени команды.<br /><br />
<br />
== U ==<br />
'''umask''' — устанавливает маску прав для режима создания файла.<br /><br />
'''umount''' — позволяет размонтировать файловую систему.<br /><br />
'''unalias''' — удаление псевдонима.<br /><br />
'''uname''' — отображает информацию о системе.<br /><br />
'''uncompress''' — распаковка сжатого файла.<br /><br />
'''unexpand''' — преобразует каждый пробел в табуляцию, записывая результат в стандартный вывод.<br /><br />
'''uniq''' — отображает или пропускает повторяющиеся строки.<br /><br />
'''unix2dos''' — преобразует текстовый файл Unix в формат DOS.<br /><br />
'''unlink''' — удаление ссылки на файл.<br /><br />
'''unlzma''' — извлечение файлов из архива, сжатого командой lzma.<br /><br />
'''unpack''' — извлечение файлов из архива, сжатого командой pack.<br /><br />
'''unxz''' — распаковка .xz-архива.<br /><br />
'''unzip''' — распаковка .zip-архива.<br /><br />
'''uptime''' — выводит информацию о времени работы системы.<br /><br />
'''useradd''' — добавление учетных записей пользователей в вашу систему.<br /><br />
'''userdel''' — удаление учетной записи пользователя и связанных с ней файлов.<br /><br />
'''usermod''' — изменяет учётную запись пользователя.<br /><br />
'''username''' — получение имени пользователя.<br /><br />
'''users''' — отображение имен пользователей, вошедших в систему на данный момент.<br /><br />
<br />
== V ==<br />
'''vacation''' — автоответчик для электронной почты.<br /><br />
'''vdir''' - — отображение списка содержимого каталога.<br /><br />
'''vi''' — текстовый редактор.<br /><br />
'''vim''' — свободный текстовый редактор, созданный на основе более старого vi.<br /><br />
'''vimdiff''' — позволяет редактировать две или три версии файла с помощью Vim с отображением различий.<br/><br />
'''vimtutor''' — учебник по Vim.<br/><br />
'''vmstat''' — команда мониторинга производительности системы, предоставляющая информацию о процессах, памяти, файле подкачке, активности процессора и т.д.<br /><br />
'''vlock''' — программа для блокирования виртуальных консолей.<br/><br />
'''vnstat''' — используется системными администраторами для мониторинга параметров сети: загруженность каналов, входящий/исходящий трафик и пр.<br /><br />
<br />
== W ==<br />
'''wall''' — отображает в терминале сообщение для всех пользователей, вошедших в систему.<br /><br />
'''watch''' — используется для запуска и слежки за программой, отображая её вывод в терминал.<br /><br />
'''wc''' — определение количества строк, слов, байтов и символов в файлах.<br /><br />
'''wget''' — утилита для загрузки файлов из Интернета.<br /><br />
'''whatis''' — получение однострочного описания искомой команды.<br /><br />
'''whereis''' — отображает полный путь к исполняемому файлу программы (или к исходным файлам, если они присутствуют в системе).<br /><br />
'''which''' — поиск исполняемого файла, связанного с заданной командой, путем нахождения его в переменной окружения path.<br /><br />
'''whoami''' — отображает имя текущего пользователя.<br /><br />
'''whois''' — отображение доступной информации об Интернет-ресурсе (например, о сайте).<br /><br />
'''who''' — сообщает о всех зарегистрировавшихся в системе пользователях.<br /><br />
'''wipe''' — затирает каталоги так, что их содержимое, вроде как, нельзя будет потом восстановить.<br /><br />
'''write''' — позволяет пользователю коммуницировать с другими пользователями, копируя строки с одного терминала в другие.<br /><br />
'''w''' — отображает пользователей, вошедших в систему и их процессы.<br /><br />
<br />
== X ==<br />
'''xargs''' — преобразует входные данные, полученные от стандартного ввода, в аргументы команды.<br /><br />
'''xdg-open''' — используется для открытия файла или URL-адреса в предпочтительном приложении пользователя.<br /><br />
'''xfd''' — отображение всех символов шрифта X-сервера.<br /><br />
'''xinit''' — программа для инициализации системы X Window.<br/><br />
'''xhost''' — настройка прав доступа к X-серверу.<br /><br />
'''xkill''' — kill a client by its X resource.<br /><br />
'''xlsfonts''' — отображение всех шрифтов X-сервера.<br /><br />
'''xmlstarlet''' — command line XML/XSLT toolkit.<br /><br />
'''xmodmap''' — утилита для изменения раскладки клавиш клавиатуры и мыши в Xorg.<br /><br />
'''xrandr''' — настройка режимов работы с дисплеями (мониторами).<br /><br />
'''xrdb''' — управление базой данных ресурсов X-сервера.<br /><br />
'''xset''' — изменение значения переменной X-сервера.<br /><br />
'''xzcat''' — просмотр содержимого текстового файла, сжатого командой xz.<br /><br />
'''xz''' — сжатие файла в .xz-формат.<br /><br />
'''xxd''' — создаёт представление файла в виде шестнадцатеричных кодов или выполняет обратное преобразование.<br/><br />
<br />
== Y ==<br />
'''yacc''' — утилита, служащая стандартным генератором синтаксических анализаторов (парсеров) в Unix-системах.<br /><br />
'''yes''' — выводит строку несколько раз до тех пор, пока команде не будет послан сигнал kill.<br /><br />
'''ypdomainname''' — вывести или установить системное имя хоста.<br/><br />
'''yppasswd''' — изменение пароля базы данных NIS.<br /><br />
<br />
== Z ==<br />
'''zcat''' — отображение содержимого файла, сжатого командой zip.<br /><br />
'''zdiff''' — вызывает diff для файлов, сжатых командой gzip.<br /><br />
'''zdump''' — получение информации о часовом поясе.<br /><br />
'''zforce''' — присвоить расширение '.gz' всем архивам gzip.<br/><br />
'''zgrep''' — поиск выражений в заданном файле, даже если он сжат.<br /><br />
'''zipcloack''' — зашифровать .zip-файл.<br /><br />
'''zipinfo''' — вывести информацию о .zip-файле.<br /><br />
'''zipnote''' — просмотр и изменение комментариев к .zip-файлам.<br /><br />
'''zipsplit''' — объединение нескольких .zip-файлов.<br /><br />
'''zip''' — сжать файлы в архив.<br /><br />
'''znew''' — перепаковать .Z-файлы в .gz-файлы.<br/><br />
<br />
[[Категория:ROSA Server|ROSA Server]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B8%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B0&diff=21014
Краткие руководства
2024-02-17T07:48:13Z
<p>Noname: /* Прочее */ дополнение</p>
<hr />
<div>== Краткие руководства по работе с операционной системой ROSA Desktop. ==<br />
<!-- А --><br />
<!-- Б --><br />
*[[PAM lastlog| Блокирование неактивных учетных записей]]<br />
<br />
<!-- В --><br />
*[[Восстановление системы из chroot]]<br />
*[[Восстановление загрузчика Grub2| Восстановление загрузчика grub2]]<br />
*[[Восстановление забытого пароля Linux]]<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
*[[Добавляем действия в буфер обмена (klipper) plasma5| Добавление действий в буфер обмена plasma5]]<br />
<br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
*[[Запись скринкастов (видео с рабочего стола)]]<br />
<!-- И --><br />
*[[Инструкция по установке КриптоПро]]<br />
<br />
<!-- Й --><br />
<!-- К --><br />
*[[Как сохранить в файл вывод консоли]]<br />
*[[Как переименовать фото в соответствии с датой-временем файла или съёмки]]<br />
<br />
<!-- Л --><br />
*[[Локальная сборка ISO]]<br />
<br />
<!-- М --><br />
*[[Методы записи загрузочных образов ISO на USB flash]]<br />
<br />
<!-- Н --><br />
*[[2FA| Настройка многофакторной аутертификации в 2021.1]]<br />
*[[Использование nmcli| Настройка сети через nmcli]]<br />
*[[Настройка удаленного подключения к базе PostgreSQL]]<br />
<br />
<!-- О --><br />
*[[Образ rootfs| Образ rootfs. Запуск в контейнере. chroot. Установка системы вручную.]]<br />
<br />
<!-- П --><br />
*[[Перенос снапшотов(snapshots) btrfs на другой раздел в отдельном файле| Перенос снапшотов btrfs на другой раздел в отдельном файле]]<br />
*[[Блог:Точка Росы/Проверка контрольных сумм образов ROSA Desktop с помощью Checkisomd5| Проверка контрольных сумм образов ROSA Desktop с помощью checkisomd5]]<br />
<br />
<!-- Р --><br />
<!-- С --><br />
*[[Создание зашифрованного swap файла]]<br />
*[[Свой репозиторий| Создание своего репозитория пакетов]]<br />
*[[Проба компьютера| Создание пробы оборудования]]<br />
<br />
<!-- Т --><br />
<!-- У --><br />
*[[STM32CubeIDE|Установка STM32 CubeIDE]]<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Э --><br />
*[[Эксплуатация Docker]]<br />
*[[Эксплуатация Kubernetes]]<br />
<br />
<!-- Ю --><br />
<!-- Я --><br />
<br />
<br />
*[[Anaconda| anaconda - программа для установки операционной системы]]<br />
*[[Dnf| dnf - пакетный менеджер]]<br />
*[[Systemd| systemd - система инициализации и управления службами]]<br />
<br />
== Справочная информация ==<br />
*[[Источники образов росы]]<br />
*[[Пакеты и их источники (репозитории)]]<br />
*[[Политика выпуска ROSA Desktop]]<br />
*[[Ядро| Политика упаковки и сопровождения официальных ядер Linux в rosa2021.1]]<br />
*[[Форматы офисных документов и их различия]]<br />
*[[Шпаргалка по логическим операциям в bash]]<br />
<br />
== Прочее ==<br />
*[[Заметки на полях]]<br />
*[[Список консольных программ]]<br />
*[[Сборник ссылок на видео инструкции]]<br />
*[[Шаблоны LibreOffice Конструкторская документация]]<br />
*[[Шаблон скрипта для автоустановки программ из стандартных репозиториев росы]]<br />
<br /><br />
*[[QEMU - полезные советы]]<br />
<br /><br />
*[[Служебная:Все страницы | Все страницы вики]]<br />
*[[Служебная:Категории| Страницы по Категориям]]<br />
*[[Справка:Как править статьи]]<br />
[[Категория:Документация]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B2%D1%82%D0%BE%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC_%D0%B8%D0%B7_%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D1%85_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B5%D0%B2_%D1%80%D0%BE%D1%81%D1%8B&diff=21013
Шаблон скрипта для автоустановки программ из стандартных репозиториев росы
2024-02-17T07:40:49Z
<p>Noname: Новая страница</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br />
Для чего нужен подобный скрипт? А для упрощения себе жизни.<br /><br />
Можно после каждой установки/переустановки системы все программы вручную искать<br /><br />
и устанавливать в драгоре или в терминале с помощью днф, но зачем себя мучить и<br /><br />
тратить на это время, когда можно создать простейший скрипт, перечислить в нём<br /><br />
все необходимые пакеты, а потом просто поддерживать этот список в актуальном состоянии?<br /><br />
<br />
Вот шаблон такого скрипта:<br />
<br />
#!/usr/bin/bash<br />
list_packages=(''pkg-name1 pkg-name2 pkg-name3'')<br />
sudo dnf --refresh --assumeyes install ${list_packages[*]}<br />
<br />
Всё, что вам нужно это перечислить пакеты во второй строке внутри круглых скобок разделив их<br /><br />
пробелами. Обозвать скрипт можно как душе угодно. Запускать его можно будет так:<br />
$ bash /путь/имя_скрипта<br />
либо сделать его исполняемым и запускать уже так:<br />
$ /путь/имя_скрипта<br />
<br />
----------<br />
<br />
Рабочий пример:<br />
#!/usr/bin/bash<br />
<br />
list_packages=(smplayer mplayer qbittorrent crow-translate<br />
avidemux-qt mkvtoolnix handbrake clementine easytag timeshift<br />
simplescreenrecorder tree minidlna photorec qrencode neofetch<br />
inxi mediainfo)<br />
<br />
sudo dnf --refresh --assumeyes install ${list_packages[*]}<br />
<br />
----------<br />
<br />
Посмотреть историю установки программ:<br />
$ dnf history</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20989
Заметки на полях
2024-01-10T11:49:17Z
<p>Noname: /* Удаление базы данных */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_database;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
SELECT col1, to_timestamp(col2_with_unixtime) AS col2_with_datetime, col3, col4, col5 FROM table;<br />
SELECT col1, to_timestamp(col2_with_unixtime) AT TIME ZONE 'Time_Zone_Name' AS col2_with_datetime, col3, col4, col5 FROM table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать "Да" ответом по умолчанию в dnf ==<br />
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf<br />
<br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20988
Заметки на полях
2024-01-10T11:46:41Z
<p>Noname: /* postgresql. psql */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
SELECT col1, to_timestamp(col2_with_unixtime) AS col2_with_datetime, col3, col4, col5 FROM table;<br />
SELECT col1, to_timestamp(col2_with_unixtime) AT TIME ZONE 'Time_Zone_Name' AS col2_with_datetime, col3, col4, col5 FROM table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать "Да" ответом по умолчанию в dnf ==<br />
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf<br />
<br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20987
Заметки на полях
2024-01-10T11:37:23Z
<p>Noname: дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать "Да" ответом по умолчанию в dnf ==<br />
$ echo 'defaultyes=True' | sudo tee -a /etc/dnf/dnf.conf<br />
<br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20978
Заметки на полях
2023-12-30T10:43:29Z
<p>Noname: /* mediainfo */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%\n' *<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20961
Заметки на полях
2023-12-22T15:12:15Z
<p>Noname: /* Брать данные из буфера, а не передавать их программе вручную */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
Список ссылок для [[Сборник ссылок на видео инструкции|этой]] страницы сортировал так<br />
$ xsel -o | sort<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BD%D0%B8%D0%BA_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA_%D0%BD%D0%B0_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8&diff=20960
Сборник ссылок на видео инструкции
2023-12-22T13:45:15Z
<p>Noname: дополнение</p>
<hr />
<div>* Davinci Resolve в Роса ОС/Rosa Linux: [https://vk.com/video93917341_456239631 vk]<br />
* KdenLive. Базовый монтаж в Rosa Linux: [https://vk.com/video93917341_456239636 vk]<br />
* PostgreSQL в РОСА ОС Linux: [https://www.youtube.com/watch?v=mVyw0FjFL8k yt], [https://vk.com/video-191575932_456239086 vk], [https://rutube.ru/video/2e52703b44e713c675214589eec386e0/ rt]<br />
* Remmina - универсальный комбайн для удаленных подключений: [https://www.youtube.com/watch?v=tRVi-yVi5lc yt], [https://vk.com/video-191575932_456239045 vk], [https://rutube.ru/video/ea1e8998d40318f71beb98cd60fff333/ rt]<br />
* Timeshift - как Time Machine только для Linux: [https://www.youtube.com/watch?v=Eme6sJzk1vw yt], [https://vk.com/video-191575932_456239057 vk], [https://rutube.ru/video/d48a48decd1ca4906e68ad3bd5ea19a5/ rt]<br />
* Автоматизация задач в Linux с помощью crontab и таймеров systemd: [https://www.youtube.com/watch?v=KcTe_wkMQuc yt], [https://vk.com/video-191575932_456239059 vk], [https://rutube.ru/video/0d4338e0e88d4e628985c63609baa18b/ rt]<br />
* Безопасность в интернете для домохозяек: [https://www.youtube.com/watch?v=8dns28Ym9tM yt], [https://vk.com/video-191575932_456239027 vk], [https://rutube.ru/video/662f20b0b1d96f997bd7a292d1e45a11/ rt]<br />
* Восстановление системы РОСА ОС Linux [https://www.youtube.com/watch?v=-iDdXDhzhlk yt], [https://vk.com/video-191575932_456239053 vk], [https://rutube.ru/video/95c21db80d36318ff7cc538065b8ea16/ rt]<br />
* Децентрализованная синхронизация файлов между устройствами: [https://www.youtube.com/watch?v=TTIRLvcpvl4 yt], [https://vk.com/video-191575932_456239043 vk], [https://rutube.ru/video/02e99a153353e11698251ebe19cdcf51/ rt]<br />
* Запуск виртуальных машин в РОСА ОС Linux. QEMU-KVM: [https://www.youtube.com/watch?v=9qvzmcygMzQ yt], [https://vk.com/video-191575932_456239038 vk], [https://rutube.ru/video/65d8f150033f5153eaaf3551a902e602/ rt]<br />
* Защита личных данных и системы от стороннего доступа в Linux: [https://www.youtube.com/watch?v=zxolsKt7FUI yt], [https://vk.com/video-191575932_456239055 vk], [https://rutube.ru/video/620656d6b16d01710f9263a68e19d898/ rt]<br />
* Защитный бастион для учетных данных и паролей в Linux. KeePassXC: [https://www.youtube.com/watch?v=1xJ5EfS6iig yt], [https://vk.com/video-191575932_456239031 vk], [https://rutube.ru/video/91ed2da8b955d686b364dbd68b940c64/ rt]<br />
* Межсетевой экран. Зачем и как работает: [https://www.youtube.com/watch?v=Ovy-ncXN1xk yt], [https://vk.com/video-191575932_456239098 vk], [https://rutube.ru/video/5856eb7773f95be7f2e6fde0bde8bf18/ rt]<br />
* Настройка графического окружения РОСА ОС Linux: [https://www.youtube.com/watch?v=ft683HfFjZ4 yt], [https://vk.com/video-191575932_456239019 vk], [https://rutube.ru/video/4be160b04c0a64e58fa648bf40e6ac5a/ rt]<br />
* Обратный ssh туннель в ОС Linux (reverse-shell): [https://www.youtube.com/watch?v=MykzIMsKc2k yt], [https://vk.com/video-191575932_456239081 vk], [https://rutube.ru/video/9de49346eb3c232c896bfb653b99ff13/ rt]<br />
* Организация рабочего пространства РОСА ОС Linux. Комнаты KDE: [https://www.youtube.com/watch?v=Lj6WgyT4Bf8 yt], [https://vk.com/video-191575932_456239030 vk], [https://rutube.ru/video/d1d81064dd95001cbc3e217c398c1330/ rt]<br />
* Основные команды терминала РОСА ОС Linux: [https://www.youtube.com/watch?v=GUyot2sLnAU yt], [https://vk.com/video-191575932_456239032 vk], [https://rutube.ru/video/20135e6956f392b0995b5ead725814d1/ rt]<br />
* Офисные пакеты в РОСА ОС Linux: [https://www.youtube.com/watch?v=-OPBnG9iSkc yt], [https://vk.com/video-191575932_456239026 vk], [https://rutube.ru/video/c3d112498d965a15f578fa5d4f7d96d8/ rt]<br />
* Очень просто про фишинг и как от него защищаться: [https://www.youtube.com/watch?v=DiAo-0aNrNc yt], [https://vk.com/video-191575932_456239061 vk], [https://rutube.ru/video/2d00105478bf8bc23de8713a7232608d/ rt]<br />
* Переходим с Windows на РОСА ОС Linux: [https://www.youtube.com/watch?v=BUjg0vEVUIA yt], [https://vk.com/video-191575932_456239052 vk], [https://rutube.ru/video/47acd6312dc90309fd82271f8790f61b/ rt]<br />
* Подключение принтеров в РОСА ОС Linux: [https://www.youtube.com/watch?v=lcJHFQfE4ME yt], [https://vk.com/video-191575932_456239028 vk], [https://rutube.ru/video/95062400607bc890c002c45d0e3bcb51/ rt]<br />
* Подключение сетевых дисков в РОСА ОС Linux: [https://www.youtube.com/watch?v=_xqyZpkhx6I yt], [https://vk.com/video-191575932_456239035 vk], [https://rutube.ru/video/eb253ab2d44d6f5d0a84e5df18d914b3/ rt]<br />
* Пример простого взлома РОСА ОС: [https://vk.com/video-191575932_456239029 vk], [https://rutube.ru/video/5f0641886931fbfc74c8e9626ed4a7c1/ rt] (Посвящается тем, кто любит запускать неизвестные программы предлагаемые неизвестно кем в лс.)<br />
* Редакторы изображений в Роса ОС/Rosa Linux: [https://vk.com/video93917341_456239635 vk]<br />
* Свой Linux в кармане: [https://www.youtube.com/watch?v=UC9vVfle5Rs yt], [https://vk.com/video-191575932_456239050 vk], [https://rutube.ru/video/2d535e9a8ad98de84e4fc0b444d45580/ rt]<br />
* Свой карманный GitHub на РОСА ОС Linux c помощью Gogs: [https://www.youtube.com/watch?v=CbnzRMF2zKQ yt], [https://vk.com/video-191575932_456239042 vk], [https://rutube.ru/video/91b4656bf3469f7d25f45352ee2df6cc/ rt]<br />
* Создание загрузочной флешки: [https://vk.com/video93917341_456239637 vk]<br />
* Создание и управление RAID массивами в РОСА ОС Linux: [https://www.youtube.com/watch?v=MhfvLRiRPHk yt], [https://vk.com/video-191575932_456239062 vk], [https://rutube.ru/video/00edeac56585da931db2b5489d3208d5/ rt]<br />
* Убиваем зомби и лечим зависшую Plasma в РОСА ОС Linux: [https://www.youtube.com/watch?v=4-flWLJTXCE yt], [https://vk.com/video-191575932_456239039 vk], [https://rutube.ru/video/6d97a6e41b4a772f731edeb580446088/ rt]<br />
* Управление доступом в ОС Linux: [https://www.youtube.com/watch?v=V7oL3u_GNOg yt], [https://vk.com/video-191575932_456239074 vk], [https://rutube.ru/video/4fed9b4953e7ee14904bc60a63234597/ rt]<br />
* Управление ядрами, обновление ядра до 6.1: [https://youtu.be/duR54ZyaObY yt]<br />
* Установка Docker в РОСА ОС Linux: [https://www.youtube.com/watch?v=LMEu0ikl_QI yt], [https://vk.com/video-191575932_456239084 vk], [https://rutube.ru/video/765b992be9c07e0a32f4aa2d92688720/ rt]<br />
* Установка и настройка Flatpak в РОСА ОС: [https://www.youtube.com/watch?v=9OzqxxmHcqE yt], [https://vk.com/video-191575932_456239023 vk], [https://rutube.ru/video/f3ecbfe9d13b98261a234f294fb7c9a7/ rt]<br />
* Установка и настройка Яндекс.Диск в РОСА ОС Linux: [https://www.youtube.com/watch?v=4ntbhU4Cb70 yt], [https://vk.com/video-191575932_456239025 vk], [https://rutube.ru/video/9c490e4654df4f9cd25df4cab9f99ad2/ rt]<br />
* Установка приложений в РОСА ОС: [https://www.youtube.com/watch?v=WyTV14msLgc yt], [https://vk.com/video-191575932_456239024 vk], [https://rutube.ru/video/474ac1c63a2eeff7e54cab3947823ea7/ rt]<br />
* Установка РОСА ОС Linux: [https://www.youtube.com/watch?v=EoO4gArWpnA yt], [https://vk.com/video-191575932_456239021 vk], [https://rutube.ru/video/1bc340a923ba91b26c8da3fb7df37ea2/ rt]<br />
* Установка Роса ОС/Rosa Linux: [https://vk.com/video93917341_456239638 vk]<br />
* Шифрование файлов, каталогов, дисков и разделов в РОСА ОС Linux: [https://www.youtube.com/watch?v=jkDBgfJURCw yt], [https://vk.com/video-191575932_456239040 vk], [https://rutube.ru/video/a9a2c7825c1b662ab4054efd20a6e1de/ rt]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BD%D0%B8%D0%BA_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA_%D0%BD%D0%B0_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8&diff=20959
Сборник ссылок на видео инструкции
2023-12-22T13:21:51Z
<p>Noname: дополнение</p>
<hr />
<div>* Davinci Resolve в Роса ОС/Rosa Linux: [https://vk.com/video93917341_456239631 vk]<br />
* KdenLive. Базовый монтаж в Rosa Linux: [https://vk.com/video93917341_456239636 vk]<br />
* PostgreSQL в РОСА ОС Linux: [https://vk.com/video-191575932_456239086 vk], [https://rutube.ru/video/2e52703b44e713c675214589eec386e0/ rt]<br />
* Remmina - универсальный комбайн для удаленных подключений: [https://vk.com/video-191575932_456239045 vk], [https://rutube.ru/video/ea1e8998d40318f71beb98cd60fff333/ rt]<br />
* Timeshift - как Time Machine только для Linux: [https://vk.com/video-191575932_456239057 vk], [https://rutube.ru/video/d48a48decd1ca4906e68ad3bd5ea19a5/ rt]<br />
* Автоматизация задач в Linux с помощью crontab и таймеров systemd: [https://vk.com/video-191575932_456239059 vk], [https://rutube.ru/video/0d4338e0e88d4e628985c63609baa18b/ rt]<br />
* Безопасность в интернете для домохозяек: [https://vk.com/video-191575932_456239027 vk], [https://rutube.ru/video/662f20b0b1d96f997bd7a292d1e45a11/ rt]<br />
* Восстановление системы РОСА ОС Linux [https://vk.com/video-191575932_456239053 vk], [https://rutube.ru/video/95c21db80d36318ff7cc538065b8ea16/ rt]<br />
* Децентрализованная синхронизация файлов между устройствами: [https://vk.com/video-191575932_456239043 vk], [https://rutube.ru/video/02e99a153353e11698251ebe19cdcf51/ rt]<br />
* Запуск виртуальных машин в РОСА ОС Linux. QEMU-KVM: [https://vk.com/video-191575932_456239038 vk], [https://rutube.ru/video/65d8f150033f5153eaaf3551a902e602/ rt]<br />
* Защита личных данных и системы от стороннего доступа в Linux: [https://vk.com/video-191575932_456239055 vk], [https://rutube.ru/video/620656d6b16d01710f9263a68e19d898/ rt]<br />
* Защитный бастион для учетных данных и паролей в Linux. KeePassXC: [https://vk.com/video-191575932_456239031 vk], [https://rutube.ru/video/91ed2da8b955d686b364dbd68b940c64/ rt]<br />
* Межсетевой экран. Зачем и как работает: [https://vk.com/video-191575932_456239098 vk], [https://rutube.ru/video/5856eb7773f95be7f2e6fde0bde8bf18/ rt]<br />
* Настройка графического окружения РОСА ОС Linux: [https://vk.com/video-191575932_456239019 vk], [https://rutube.ru/video/4be160b04c0a64e58fa648bf40e6ac5a/ rt]<br />
* Обратный ssh туннель в ОС Linux (reverse-shell): [https://vk.com/video-191575932_456239081 vk], [https://rutube.ru/video/9de49346eb3c232c896bfb653b99ff13/ rt]<br />
* Организация рабочего пространства РОСА ОС Linux. Комнаты KDE: [https://vk.com/video-191575932_456239030 vk], [https://rutube.ru/video/d1d81064dd95001cbc3e217c398c1330/ rt]<br />
* Основные команды терминала РОСА ОС Linux: [https://vk.com/video-191575932_456239032 vk], [https://rutube.ru/video/20135e6956f392b0995b5ead725814d1/ rt]<br />
* Офисные пакеты в РОСА ОС Linux: [https://vk.com/video-191575932_456239026 vk], [https://rutube.ru/video/c3d112498d965a15f578fa5d4f7d96d8/ rt]<br />
* Очень просто про фишинг и как от него защищаться: [https://vk.com/video-191575932_456239061 vk], [https://rutube.ru/video/2d00105478bf8bc23de8713a7232608d/ rt]<br />
* Переходим с Windows на РОСА ОС Linux: [https://vk.com/video-191575932_456239052 vk], [https://rutube.ru/video/47acd6312dc90309fd82271f8790f61b/ rt]<br />
* Подключение принтеров в РОСА ОС Linux: [https://vk.com/video-191575932_456239028 vk], [https://rutube.ru/video/95062400607bc890c002c45d0e3bcb51/ rt]<br />
* Подключение сетевых дисков в РОСА ОС Linux: [https://vk.com/video-191575932_456239035 vk], [https://rutube.ru/video/eb253ab2d44d6f5d0a84e5df18d914b3/ rt]<br />
* Пример простого взлома РОСА ОС: [https://vk.com/video-191575932_456239029 vk], [https://rutube.ru/video/5f0641886931fbfc74c8e9626ed4a7c1/ rt] (Посвящается тем, кто любит запускать неизвестные программы предлагаемые неизвестно кем в лс.)<br />
* Редакторы изображений в Роса ОС/Rosa Linux: [https://vk.com/video93917341_456239635 vk]<br />
* Свой Linux в кармане: [https://vk.com/video-191575932_456239050 vk], [https://rutube.ru/video/2d535e9a8ad98de84e4fc0b444d45580/ rt]<br />
* Свой карманный GitHub на РОСА ОС Linux c помощью Gogs: [https://vk.com/video-191575932_456239042 vk], [https://rutube.ru/video/91b4656bf3469f7d25f45352ee2df6cc/ rt]<br />
* Создание загрузочной флешки: [https://vk.com/video93917341_456239637 vk]<br />
* Создание и управление RAID массивами в РОСА ОС Linux: [https://vk.com/video-191575932_456239062 vk], [https://rutube.ru/video/00edeac56585da931db2b5489d3208d5/ rt]<br />
* Убиваем зомби и лечим зависшую Plasma в РОСА ОС Linux: [https://vk.com/video-191575932_456239039 vk], [https://rutube.ru/video/6d97a6e41b4a772f731edeb580446088/ rt]<br />
* Управление доступом в ОС Linux: [https://vk.com/video-191575932_456239074 vk], [https://rutube.ru/video/4fed9b4953e7ee14904bc60a63234597/ rt]<br />
* Управление ядрами, обновление ядра до 6.1: [https://youtu.be/duR54ZyaObY yt]<br />
* Установка Docker в РОСА ОС Linux: [https://vk.com/video-191575932_456239084 vk], [https://rutube.ru/video/765b992be9c07e0a32f4aa2d92688720/ rt]<br />
* Установка и настройка Flatpak в РОСА ОС: [https://vk.com/video-191575932_456239023 vk], [https://rutube.ru/video/f3ecbfe9d13b98261a234f294fb7c9a7/ rt]<br />
* Установка и настройка Яндекс.Диск в РОСА ОС Linux: [https://vk.com/video-191575932_456239025 vk], [https://rutube.ru/video/9c490e4654df4f9cd25df4cab9f99ad2/ rt]<br />
* Установка приложений в РОСА ОС: [https://vk.com/video-191575932_456239024 vk], [https://rutube.ru/video/474ac1c63a2eeff7e54cab3947823ea7/ rt]<br />
* Установка РОСА ОС Linux: [https://vk.com/video-191575932_456239021 vk], [https://rutube.ru/video/1bc340a923ba91b26c8da3fb7df37ea2/ rt]<br />
* Установка Роса ОС/Rosa Linux: [https://vk.com/video93917341_456239638 vk]<br />
* Шифрование файлов, каталогов, дисков и разделов в РОСА ОС Linux: [https://vk.com/video-191575932_456239040 vk], [https://rutube.ru/video/a9a2c7825c1b662ab4054efd20a6e1de/ rt]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BD%D0%B8%D0%BA_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA_%D0%BD%D0%B0_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8&diff=20958
Сборник ссылок на видео инструкции
2023-12-22T12:50:07Z
<p>Noname: дополнение</p>
<hr />
<div>* PostgreSQL в РОСА ОС Linux: [https://vk.com/video-191575932_456239086 vk], [https://rutube.ru/video/2e52703b44e713c675214589eec386e0/ rt]<br />
* Remmina - универсальный комбайн для удаленных подключений: [https://vk.com/video-191575932_456239045 vk], [https://rutube.ru/video/ea1e8998d40318f71beb98cd60fff333/ rt]<br />
* Timeshift - как Time Machine только для Linux: [https://vk.com/video-191575932_456239057 vk], [https://rutube.ru/video/d48a48decd1ca4906e68ad3bd5ea19a5/ rt]<br />
* Автоматизация задач в Linux с помощью crontab и таймеров systemd: [https://vk.com/video-191575932_456239059 vk], [https://rutube.ru/video/0d4338e0e88d4e628985c63609baa18b/ rt]<br />
* Безопасность в интернете для домохозяек: [https://vk.com/video-191575932_456239027 vk], [https://rutube.ru/video/662f20b0b1d96f997bd7a292d1e45a11/ rt]<br />
* Восстановление системы РОСА ОС Linux [https://vk.com/video-191575932_456239053 vk], [https://rutube.ru/video/95c21db80d36318ff7cc538065b8ea16/ rt]<br />
* Децентрализованная синхронизация файлов между устройствами: [https://vk.com/video-191575932_456239043 vk], [https://rutube.ru/video/02e99a153353e11698251ebe19cdcf51/ rt]<br />
* Запуск виртуальных машин в РОСА ОС Linux. QEMU-KVM: [https://vk.com/video-191575932_456239038 vk], [https://rutube.ru/video/65d8f150033f5153eaaf3551a902e602/ rt]<br />
* Защита личных данных и системы от стороннего доступа в Linux: [https://vk.com/video-191575932_456239055 vk], [https://rutube.ru/video/620656d6b16d01710f9263a68e19d898/ rt]<br />
* Защитный бастион для учетных данных и паролей в Linux. KeePassXC: [https://vk.com/video-191575932_456239031 vk], [https://rutube.ru/video/91ed2da8b955d686b364dbd68b940c64/ rt]<br />
* Межсетевой экран. Зачем и как работает: [https://vk.com/video-191575932_456239098 vk], [https://rutube.ru/video/5856eb7773f95be7f2e6fde0bde8bf18/ rt]<br />
* Настройка графического окружения РОСА ОС Linux: [https://vk.com/video-191575932_456239019 vk], [https://rutube.ru/video/4be160b04c0a64e58fa648bf40e6ac5a/ rt]<br />
* Обратный ssh туннель в ОС Linux (reverse-shell): [https://vk.com/video-191575932_456239081 vk], [https://rutube.ru/video/9de49346eb3c232c896bfb653b99ff13/ rt]<br />
* Организация рабочего пространства РОСА ОС Linux. Комнаты KDE: [https://vk.com/video-191575932_456239030 vk], [https://rutube.ru/video/d1d81064dd95001cbc3e217c398c1330/ rt]<br />
* Основные команды терминала РОСА ОС Linux: [https://vk.com/video-191575932_456239032 vk], [https://rutube.ru/video/20135e6956f392b0995b5ead725814d1/ rt]<br />
* Офисные пакеты в РОСА ОС Linux: [https://vk.com/video-191575932_456239026 vk], [https://rutube.ru/video/c3d112498d965a15f578fa5d4f7d96d8/ rt]<br />
* Очень просто про фишинг и как от него защищаться: [https://vk.com/video-191575932_456239061 vk], [https://rutube.ru/video/2d00105478bf8bc23de8713a7232608d/ rt]<br />
* Переходим с Windows на РОСА ОС Linux: [https://vk.com/video-191575932_456239052 vk], [https://rutube.ru/video/47acd6312dc90309fd82271f8790f61b/ rt]<br />
* Подключение принтеров в РОСА ОС Linux: [https://vk.com/video-191575932_456239028 vk], [https://rutube.ru/video/95062400607bc890c002c45d0e3bcb51/ rt]<br />
* Подключение сетевых дисков в РОСА ОС Linux: [https://vk.com/video-191575932_456239035 vk], [https://rutube.ru/video/eb253ab2d44d6f5d0a84e5df18d914b3/ rt]<br />
* Пример простого взлома РОСА ОС: [https://vk.com/video-191575932_456239029 vk], [https://rutube.ru/video/5f0641886931fbfc74c8e9626ed4a7c1/ rt] (Посвящается тем, кто любит запускать неизвестные программы предлагаемые неизвестно кем в лс.)<br />
* Свой Linux в кармане: [https://vk.com/video-191575932_456239050 vk], [https://rutube.ru/video/2d535e9a8ad98de84e4fc0b444d45580/ rt]<br />
* Свой карманный GitHub на РОСА ОС Linux c помощью Gogs: [https://vk.com/video-191575932_456239042 vk], [https://rutube.ru/video/91b4656bf3469f7d25f45352ee2df6cc/ rt]<br />
* Создание и управление RAID массивами в РОСА ОС Linux: [https://vk.com/video-191575932_456239062 vk], [https://rutube.ru/video/00edeac56585da931db2b5489d3208d5/ rt]<br />
* Убиваем зомби и лечим зависшую Plasma в РОСА ОС Linux: [https://vk.com/video-191575932_456239039 vk], [https://rutube.ru/video/6d97a6e41b4a772f731edeb580446088/ rt]<br />
* Управление доступом в ОС Linux: [https://vk.com/video-191575932_456239074 vk], [https://rutube.ru/video/4fed9b4953e7ee14904bc60a63234597/ rt]<br />
* Установка Docker в РОСА ОС Linux: [https://vk.com/video-191575932_456239084 vk], [https://rutube.ru/video/765b992be9c07e0a32f4aa2d92688720/ rt]<br />
* Установка и настройка Flatpak в РОСА ОС: [https://vk.com/video-191575932_456239023 vk], [https://rutube.ru/video/f3ecbfe9d13b98261a234f294fb7c9a7/ rt]<br />
* Установка и настройка Яндекс.Диск в РОСА ОС Linux: [https://vk.com/video-191575932_456239025 vk], [https://rutube.ru/video/9c490e4654df4f9cd25df4cab9f99ad2/ rt]<br />
* Установка приложений в РОСА ОС: [https://vk.com/video-191575932_456239024 vk], [https://rutube.ru/video/474ac1c63a2eeff7e54cab3947823ea7/ rt]<br />
* Установка РОСА ОС Linux: [https://vk.com/video-191575932_456239021 vk], [https://rutube.ru/video/1bc340a923ba91b26c8da3fb7df37ea2/ rt]<br />
* Шифрование файлов, каталогов, дисков и разделов в РОСА ОС Linux: [https://vk.com/video-191575932_456239040 vk], [https://rutube.ru/video/a9a2c7825c1b662ab4054efd20a6e1de/ rt]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0:%D0%9A%D0%B0%D0%BA_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8&diff=20957
Справка:Как править статьи
2023-12-22T12:01:57Z
<p>Noname: /* Создание страниц */ дополнение</p>
<hr />
<div>[[Category:Справка]]<br />
<!-- требуется добавление категории: Справка --><br />
{{Заготовка}}<br />
<br />
[[Заглавная страница|Вики-система ОС ROSA Linux]] использует {{Программа|[http://www.mediawiki.org/wiki/MediaWiki/ru MediaWiki]}} — пакет свободного программного обеспечения, изначально разработанный для использования в Википедии. MediaWiki написан на [[PHP]] и включает в себя развитую систему для создания вики-сайтов. Более глубокую справочную информацию о MediaWiki вы сможете найти на страницах [[mw:Help:Contents/ru|Mediawiki:Помощь:Содержание]] и [[Wikipedia:ru:Википедия:Справка|Википедия:Справка]].<br />
<br />
Перед вами краткое руководство по редактированию [http://wiki.rosalab.ru wiki.rosalab.ru]. Прежде, чем начинать редактировать или создавать здесь страницы, пользователям необходимо познакомиться с общими характером, разметкой и стилем существующих статей. Необходимо старание, чтобы поддерживать качество и единый стиль вики-статей. Ознакомиться с кратким обзором общих стилевых особенностей вы можете на странице [[Справка:Чтение]]; более подробные правила оформления статей вы найдете на странице [[Справка:Стиль]].<br />
<br />
Для редактирования страниц Вы должны быть зарегистрированы. Перейдите по [[Служебная:Вход|ссылке]], чтобы войти или создать новый аккаунт. Для получения краткой справки о вики-разметке смотрите статью [[Cправка:Шпаргалка]]. Чтобы узнать, как вы можете помогать нам улучшать ROSAWiki, загляните на [[ROSA:Внесение вклада]].<br />
<br />
== Редактирование == <br />
<br />
Чтобы начать вносить изменения на странице, выберите вкладку "{{Меню|Править}}" наверху. Вы можете также редактировать конкретный раздел на странице, нажав на ссылку "{{Меню|править}}" справа от его заголовка. После этого появится страница ''Редактирование'', которая состоит из следующих элементов:<br />
<br />
* панель инструментов для редактирования (необязательно);<br />
* поле редактирования;<br />
* поле ''Описание изменений'';<br />
* ссылки ''Записать страницу'', ''Предварительный просмотр'', ''Внесенные изменения'' и ''Отменить''.<br />
<br />
Поле редактирования будет содержать '''викитекст''' текущей версии статьи или раздела — редактируемый исходный код, из которого сервер создает web-страницу. <br /><br />
<blockquote><br />
Чтобы выполнить редактирование:<br />
# Отредактируйте и форматируйте викитекст (подробнее об этом в разделе [[#Форматирование]]).<br />
# Кратко опишите ваши изменения в поле '''Описание изменений''' (например, "исправлена опечатка" или "добавлена ссылка на вики-страницу grub" (подробнее смотрите в [[Wikipedia:ru:Википедия:Описание изменений]])).<br />
# Старайтесь всегда использовать кнопку '''Предварительный просмотр''', чтобы проверить форматирование перед сохранением.<br />
# Если правка не вносит смысловые изменения в содержимое (например, вы исправили только форматирование), отметьте ее как незначительную, установив флажок [[Wikipedia:ru:Википедия:Малые изменения|Малое изменение]].<br />
# Сохраните изменения, нажав на кнопку {{Меню|"Записать страницу"}}. Если вы передумали вносить изменения, нажмите '''Отменить'''.<br />
{{Примечание|'''Все правки должны сопровождаться описаниями изменений.''' Описание изменений позволяет администраторам и другим редакторам легко определять спорные правки и вандализм.}}<br />
<br />
</blockquote><br />
=== Отмена правок ===<br />
<br />
Изменения должны улучшать содержимое страницы. Если какая-то правка наоборот, ухудшает содержимое или просто сделана по ошибке, следующие шаги помогут вам правильно ее отменить:<br /><br />
<blockquote><br />
Чтобы отменить правку:<br />
# Выберите вкладку {{Меню|"История"}} наверху страницы (рядом с вкладкой {{Меню|"Править"}}). Вы увидите список изменений на странице.<br />
# Найдите неверную правку и кликните по ссылке '''отменить''' напротив нее. Вы увидите предварительный просмотр, показывающий текущую версию (слева) и текст для сохранения (справа).<br />
# В поле описания изменений укажите причину, почему вы отменяете правку.<br />
# Если все правильно, нажмите на кнопку '''Записать страницу''' внизу страницы.<br />
<br />
После этого страница будет возвращена в изначальное состояние.<br />
</blockquote><br />
<br />
<br />
<br />
Иногда необходимо отменить сразу несколько последних правок за раз. Для этого:<br />
<br />
<blockquote><br />
# Выберите вкладку '''история''' наверху страницы (рядом с вкладкой '''править'''). Вы увидите список изменений на странице.<br />
# Найдите версию, до которой вы хотите отменить все изменения (то есть, последнюю ''хорошую'' версию). Нажмите на соответствующую ей временную метку. Вы увидите выбранную версию страницы.<br />
# Если все правильно, нажмите на вкладку '''править''' вверху страницы. Вы увидите предупреждение: '''Вы редактируете устаревшую версию данной страницы.'''<br />
# В поле описания изменений скопируйте временную метку версии (отображается наверху) и укажите причину, почему вы отменяете последние правки.<br />
# Теперь просто нажмите на кнопку '''Записать страницу''', чтобы откатить все изменения до выбранной версии.<br />
<br />
После отмены правок будет создана новая правка, которую вы сможете увидеть в истории изменений страницы.<br />
<br />
{{Примечание|'''Не редактируйте текст страницы при выполнении отмены правок!''' Сперва отмените изменения, а потом внесите необходимые исправления.}}<br />
</blockquote><br />
<br />
== Создание страниц ==<br />
<blockquote><br />
Прежде чем создавать новую страницу, пожалуйста, ответьте себе на следующие вопросы:<br />
<br />
# ''Относится ли ваша тема к GNU/Linux?'' Ненужные и бесполезные статьи будут удаляться.<br />
# ''Будет ли ваша тема интересна другим?'' Учитывайте не только то, о чем вы желаете написать, но и то, что другие хотели бы прочитать. Личные заметки должны находиться на вашей странице пользователя (либо на ее подстранице).<br />
# ''Достойна ли ваша тема новой страницы?'' Поищите похожие статьи. Если такая статья есть, подумайте о ее улучшении.<br />
# ''Будет ли ваш вклад существенным?'' Избегайте создания страниц-''заготовок'', если не планируете расширять их вскоре после этого.<br />
<br />
Создавая новую страницу, выберите подходящий '''заголовок''' и соответствующую '''категорию'''.<br />
</blockquote><br />
<br />
=== Из поля поиска ===<br />
Введите в поле поиска вики название новой страницы и нажмите Enter.<br /><br />
На странице результатов поиска появится ссылка "'''Создать страницу ... в этом вики-проекте!'''"<br />
<br />
=== С помощью URL ===<br />
Вы можете использовать URL вики для создания страницы.<br /><br />
URL статьи выглядит следующим образом:<br />
http://wiki.rosalab.ru/ru/index.php/Название_статьи<br />
<br />
Если вы замените "'''Название_статьи'''" на название страницы, которую хотите создать, то увидите чистую страницу с таким сообщением<br />
<blockquote>В настоящий момент текст на данной странице отсутствует. Вы можете найти упоминание данного названия в других статьях, найти соответствующие записи журналов или создать страницу с таким названием.</blockquote><br />
<br />
Нажмите на ссылку "'''создать страницу с таким названием'''".<br />
<br />
Или можете использовать такой URL, чтобы сразу перейти к редактированию новой страницы:<br />
http://wiki.rosalab.ru/ru/index.php?title=Название_новой_статьи&action=edit<br />
<br />
== Форматирование == <br />
<br />
Везде, где это возможно, форматирование текста производится при помощи вики-разметки, так что вам не придется изучать [[Wikipedia:ru:HTML|HTML]]. Для распространенных задач форматирования доступны [[шаблоны]] : подробнее смотрите на странице [[Справка:Шаблон]]. [[Справка:Шпаргалка]] резюмирует наиболее распространенные опции форматирования.<br /><br />
=== Заголовки и подзаголовки ===<br />
Заголовки и подзаголовки являются простым способом организовать содержимое статьи, они сильно улучшают удобство чтения и навигацию по статье. Если вы можете выделить в тексте несколько отдельных тем, разделите их, создав для каждой из них свой раздел.<br />
<br />
В вики-разметке предусмотрено 6 уровней разделов, которые позволяют упорядочить текст в иерархическую структуру и оформить для них блок оглавления со ссылками на разделы. Для содержимого статьи используйте заголовки начиная со второго уровня; они создаются следующим синтаксисом:<br />
<pre><br />
== Заголовок второго уровня ==<br />
<br />
=== Заголовок третьего уровня ===<br />
<br />
==== Заголовок четвертого уровня ====<br />
<br />
===== Заголовок пятого уровня =====<br />
<br />
====== Заголовок шестого уровня ======<br />
</pre><br />
{{Примечание|Не используйте заголовки первого уровня, они зарезервированы для заголовка статьи}}<br />
Если в статье имеется хотя бы три заголовка, автоматически будет сгенерирован блок оглавления.Если, по каким-то причинам, вы этого не желаете, поместите в начале статьи<br />
<pre><br />
__NOTOC__<br />
</pre><br />
<br />
=== Переносы строк ===<br />
Для разбиения текста на абзацы используется пустая строка в коде страницы. Текст без добавления пустой строки воспринимается как один абзац.<br />
<br />
{| width="79%" class="wikitable"<br />
! scope="col" width="40%" | викитекст<br />
! scope="col" width="40%" | результат<br />
|-<br />
|<br />
<pre><br />
абзацы разделенные <br />
без пустой строки<br />
будут восприниматься как<br />
сплошной текст<br />
</pre><br />
|<br />
абзацы разделенные <br />
без пустой строки<br />
будут восприниматься как<br />
сплошной текст<br />
|-<br />
|<br />
<pre><br />
Абзац номер один.<br />
<br />
Абзац номер два. </pre><br />
|<br />
Абзац номер один.<br />
<br />
Абзац номер два.<br />
|}<br />
<br />
=== Полужирный и курсив ===<br />
<br />
'''Полужирный''' шрифт, ''курсив'' и '''''полужирный курсив''''' добавляются путем заключения слова или фразы в два, три или пять апострофов ({{Источник| ' }})<br />
{| width="79%" class="wikitable"<br />
|-<br />
! викитекст !! результат<br />
|-<br />
| <pre>''Курсив'' </pre> || ''Курсив''<br />
|-<br />
| <pre>'''Полужирный''' </pre> || '''Полужирный'''<br />
|-<br />
| <pre>'''''Полужирный курсив''''' </pre> || '''''Полужирный курсив'''''<br />
|}<br />
<br />
=== Отступы ===<br />
<br />
Чтобы сделать отступ в тексте, поместите двоеточие ({{Источник|:}}) в начале строки. Чем больше двоеточий вы поставите, тем дальше текст на этой строке будет сдвинут. Новая строка отмечает окончание сдвинутого абзаца.<br />
{| width="79%" class="wikitable"<br />
|-<br />
! викитекст !! результат<br />
|-<br />
| <pre> Этот текст без отступа </pre> || Этот текст без отступа<br />
|-<br />
| <pre>:Этот текст с небольшим отступом </pre> || <br />
:Этот текст с небольшим отступом<br />
|-<br />
| <pre>::Этот текст с б'''о'''льшим отступом </pre> || <br />
::Этот текст с б'''о'''льшим отступом<br />
|}<br />
<br />
=== Cписки ===<br />
<br />
Не забывайте, что синтаксис wiki не поддерживает многострочные элементы списков: использование "Enter" в конце строки означает конец элемента списка. Чтобы начать с новой строки внутри элемента, используйте {{Источник|<nowiki><br></nowiki>}}<br />
<br />
==== Маркированные списки ====<br />
<br />
Маркированные списки не указывают наличие строгого порядка следования пунктов. Они используются главным образом для перечисления чего-либо и подходят в большинстве случаев.<br />
Чтобы вставить маркер, используйте звездочку {{Источник|(*)}}. Вы можете создавать вложенные списки, используя несколько звездочек {{Источник|(*)}}.<br />
{|border=1 width="79%" class="wikitable"<br />
!викитекст!!результат<br />
|-<br />
|<br />
<pre>* Первый пункт<br />
* Второй пункт<br />
** Подпункт<br />
* Третий пункт</pre><br />
|<br />
* Первый пункт<br />
* Второй пункт<br />
** Подпункт<br />
* Третий пункт<br />
|-<br />
|}<br />
<br />
==== Нумерованные списки ====<br />
Пунктам нумерованных списков присваиваются номера, таким образом обозначая, что порядок их следования важен.<br />
Чтобы создавать нумерованные списки, используйте знак номера или символ решетки {{Источник|(#)}}. Вы можете создавать вложенные списки, используя несколько таких символов {{Источник|#}}.<br />
{|border=1 width="79%" class="wikitable"<br />
!викитекст!!результат<br />
|-<br />
|<br />
<pre># Первый пункт<br />
# Второй пункт<br />
## Подпункт<br />
# Третий пункт </pre><br />
|<br />
# Первый пункт<br />
# Второй пункт<br />
## Подпункт<br />
# Третий пункт<br />
|-<br />
|<br />
<pre># Первый пункт<br />
# Второй пункт<br />
#* Первый подпункт<br />
* Второй подпункт<br />
# Третий пункт</pre><br />
|<br />
# Первый пункт<br />
# Второй пункт<br />
#* Подпункт<br />
# Третий пункт<br />
|-<br />
|}</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B8%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B0&diff=20952
Краткие руководства
2023-12-22T09:55:09Z
<p>Noname: /* Прочее */</p>
<hr />
<div>== Краткие руководства по работе с операционной системой ROSA Desktop. ==<br />
<!-- А --><br />
<!-- Б --><br />
*[[PAM lastlog| Блокирование неактивных учетных записей]]<br />
<br />
<!-- В --><br />
*[[Восстановление системы из chroot]]<br />
*[[Восстановление загрузчика Grub2| Восстановление загрузчика grub2]]<br />
*[[Восстановление забытого пароля Linux]]<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
*[[Добавляем действия в буфер обмена (klipper) plasma5| Добавление действий в буфер обмена plasma5]]<br />
<br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
*[[Запись скринкастов (видео с рабочего стола)]]<br />
<!-- И --><br />
*[[Инструкция по установке КриптоПро]]<br />
<br />
<!-- Й --><br />
<!-- К --><br />
*[[Как сохранить в файл вывод консоли]]<br />
*[[Как переименовать фото в соответствии с датой-временем файла или съёмки]]<br />
<br />
<!-- Л --><br />
*[[Локальная сборка ISO]]<br />
<br />
<!-- М --><br />
*[[Методы записи загрузочных образов ISO на USB flash]]<br />
<br />
<!-- Н --><br />
*[[2FA| Настройка многофакторной аутертификации в 2021.1]]<br />
*[[Использование nmcli| Настройка сети через nmcli]]<br />
*[[Настройка удаленного подключения к базе PostgreSQL]]<br />
<br />
<!-- О --><br />
*[[Образ rootfs| Образ rootfs. Запуск в контейнере. chroot. Установка системы вручную.]]<br />
<br />
<!-- П --><br />
*[[Перенос снапшотов(snapshots) btrfs на другой раздел в отдельном файле| Перенос снапшотов btrfs на другой раздел в отдельном файле]]<br />
*[[Блог:Точка Росы/Проверка контрольных сумм образов ROSA Desktop с помощью Checkisomd5| Проверка контрольных сумм образов ROSA Desktop с помощью checkisomd5]]<br />
<br />
<!-- Р --><br />
<!-- С --><br />
*[[Создание зашифрованного swap файла]]<br />
*[[Свой репозиторий| Создание своего репозитория пакетов]]<br />
*[[Проба компьютера| Создание пробы оборудования]]<br />
<br />
<!-- Т --><br />
<!-- У --><br />
*[[STM32CubeIDE|Установка STM32 CubeIDE]]<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Э --><br />
*[[Эксплуатация Docker]]<br />
*[[Эксплуатация Kubernetes]]<br />
<br />
<!-- Ю --><br />
<!-- Я --><br />
<br />
<br />
*[[Anaconda| anaconda - программа для установки операционной системы]]<br />
*[[Dnf| dnf - пакетный менеджер]]<br />
*[[Systemd| systemd - система инициализации и управления службами]]<br />
<br />
== Справочная информация ==<br />
*[[Источники образов росы]]<br />
*[[Пакеты и их источники (репозитории)]]<br />
*[[Политика выпуска ROSA Desktop]]<br />
*[[Ядро| Политика упаковки и сопровождения официальных ядер Linux в rosa2021.1]]<br />
*[[Форматы офисных документов и их различия]]<br />
*[[Шпаргалка по логическим операциям в bash]]<br />
<br />
== Прочее ==<br />
*[[Заметки на полях]]<br />
*[[Список консольных программ]]<br />
*[[Сборник ссылок на видео инструкции]]<br />
*[[Шаблоны LibreOffice Конструкторская документация]]<br />
<br /><br />
*[[QEMU - полезные советы]]<br />
<br /><br />
*[[Служебная:Все страницы | Все страницы вики]]<br />
*[[Служебная:Категории| Страницы по Категориям]]<br />
*[[Справка:Как править статьи]]<br />
[[Категория:Документация]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BD%D0%B8%D0%BA_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA_%D0%BD%D0%B0_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D0%B8&diff=20950
Сборник ссылок на видео инструкции
2023-12-22T09:53:51Z
<p>Noname: Новая страница</p>
<hr />
<div>* PostgreSQL в РОСА ОС Linux: [https://vk.com/video-191575932_456239086 vk], [https://rutube.ru/video/2e52703b44e713c675214589eec386e0/ rt]<br />
* Remmina - универсальный комбайн для удаленных подключений: [https://vk.com/video-191575932_456239045 vk], [https://rutube.ru/video/ea1e8998d40318f71beb98cd60fff333/ rt]<br />
* Timeshift - как Time Machine только для Linux: [https://vk.com/video-191575932_456239057 vk], [https://rutube.ru/video/d48a48decd1ca4906e68ad3bd5ea19a5/ rt]<br />
* Восстановление системы РОСА ОС Linux [https://vk.com/video-191575932_456239053 vk], [https://rutube.ru/video/95c21db80d36318ff7cc538065b8ea16/ rt]<br />
* Децентрализованная синхронизация файлов между устройствами: [https://vk.com/video-191575932_456239043 vk], [https://rutube.ru/video/02e99a153353e11698251ebe19cdcf51/ rt]<br />
* Запуск виртуальных машин в РОСА ОС Linux. QEMU-KVM: [https://vk.com/video-191575932_456239038 vk], [https://rutube.ru/video/65d8f150033f5153eaaf3551a902e602/ rt]<br />
* Настройка графического окружения РОСА ОС Linux: [https://vk.com/video-191575932_456239019 vk], [https://rutube.ru/video/4be160b04c0a64e58fa648bf40e6ac5a/ rt]<br />
* Организация рабочего пространства РОСА ОС Linux. Комнаты KDE: [https://vk.com/video-191575932_456239030 vk], [https://rutube.ru/video/d1d81064dd95001cbc3e217c398c1330/ rt]<br />
* Основные команды терминала РОСА ОС Linux: [https://vk.com/video-191575932_456239032 vk], [https://rutube.ru/video/20135e6956f392b0995b5ead725814d1/ rt]<br />
* Офисные пакеты в РОСА ОС Linux: [https://vk.com/video-191575932_456239026 vk], [https://rutube.ru/video/c3d112498d965a15f578fa5d4f7d96d8/ rt]<br />
* Переходим с Windows на РОСА ОС Linux: [https://vk.com/video-191575932_456239052 vk], [https://rutube.ru/video/47acd6312dc90309fd82271f8790f61b/ rt]<br />
* Подключение принтеров в РОСА ОС Linux: [https://vk.com/video-191575932_456239028 vk], [https://rutube.ru/video/95062400607bc890c002c45d0e3bcb51/ rt]<br />
* Подключение сетевых дисков в РОСА ОС Linux: [https://vk.com/video-191575932_456239035 vk], [https://rutube.ru/video/eb253ab2d44d6f5d0a84e5df18d914b3/ rt]<br />
* Пример простого взлома РОСА ОС: [https://vk.com/video-191575932_456239029 vk], [https://rutube.ru/video/5f0641886931fbfc74c8e9626ed4a7c1/ rt] (Посвящается тем, кто любит запускать неизвестные программы предлагаемые неизвестно кем в лс.)<br />
* Свой Linux в кармане: [https://vk.com/video-191575932_456239050 vk], [https://rutube.ru/video/2d535e9a8ad98de84e4fc0b444d45580/ rt]<br />
* Свой карманный GitHub на РОСА ОС Linux c помощью Gogs: [https://vk.com/video-191575932_456239042 vk], [https://rutube.ru/video/91b4656bf3469f7d25f45352ee2df6cc/ rt]<br />
* Создание и управление RAID массивами в РОСА ОС Linux: [https://vk.com/video-191575932_456239062 vk], [https://rutube.ru/video/00edeac56585da931db2b5489d3208d5/ rt]<br />
* Убиваем зомби и лечим зависшую Plasma в РОСА ОС Linux: [https://vk.com/video-191575932_456239039 vk], [https://rutube.ru/video/6d97a6e41b4a772f731edeb580446088/ rt]<br />
* Установка Docker в РОСА ОС Linux: [https://vk.com/video-191575932_456239084 vk], [https://rutube.ru/video/765b992be9c07e0a32f4aa2d92688720/ rt]<br />
* Установка и настройка Flatpak в РОСА ОС: [https://vk.com/video-191575932_456239023 vk], [https://rutube.ru/video/f3ecbfe9d13b98261a234f294fb7c9a7/ rt]<br />
* Установка и настройка Яндекс.Диск в РОСА ОС Linux: [https://vk.com/video-191575932_456239025 vk], [https://rutube.ru/video/9c490e4654df4f9cd25df4cab9f99ad2/ rt]<br />
* Установка приложений в РОСА ОС: [https://vk.com/video-191575932_456239024 vk], [https://rutube.ru/video/474ac1c63a2eeff7e54cab3947823ea7/ rt]<br />
* Установка РОСА ОС Linux: [https://vk.com/video-191575932_456239021 vk], [https://rutube.ru/video/1bc340a923ba91b26c8da3fb7df37ea2/ rt]<br />
* Шифрование файлов, каталогов, дисков и разделов в РОСА ОС Linux: [https://vk.com/video-191575932_456239040 vk], [https://rutube.ru/video/a9a2c7825c1b662ab4054efd20a6e1de/ rt]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=UGet&diff=20925
UGet
2023-12-21T16:50:36Z
<p>Noname: оформление</p>
<hr />
<div>'''Менеджер загрузок uGet''' <br />
<br />
Менеджер загрузок uGet имеет gtk интерфейс, поддерживает мультизагрузку, очереди, приостановку и возобновление закачки.<br />
<br />
<br />
[[Файл:Uget1.png|600px]]<br />
<br />
;Официальный сайт программы: https://github.com/ugetdm<br />
<br />
{{how-to-install|{{lc:{{PAGENAME}}}}}}<br />
<br />
{{Навигация|Разделы|[[Программы_ROSA_Linux|Все разделы]]&nbsp;-&nbsp;[[Программы_ROSA_Linux#p1|Сеть и Интернет]]}}<br />
[[Категория:Программы ROSA Linux|Aget]]<br />
[[Category:SoftwareDescriptions]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8:%D0%9A%D0%B0%D0%BA_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8/c000201&diff=20877
Обсуждение справки:Как править статьи/c000201
2023-12-19T15:46:31Z
<p>Noname: Новый комментарий от Noname: Раздел создания страниц требует дополнения. Способы создания не описаны. <!-- --></p>
<hr />
<div>Раздел создания страниц требует дополнения. Способы создания не описаны.<br />
{{wl-comment: }}</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%B8%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B0&diff=20876
Краткие руководства
2023-12-19T15:26:19Z
<p>Noname: /* Прочее */</p>
<hr />
<div>== Краткие руководства по работе с операционной системой ROSA Desktop. ==<br />
<!-- А --><br />
<!-- Б --><br />
*[[PAM lastlog| Блокирование неактивных учетных записей]]<br />
<br />
<!-- В --><br />
*[[Восстановление системы из chroot]]<br />
*[[Восстановление загрузчика Grub2| Восстановление загрузчика grub2]]<br />
*[[Восстановление забытого пароля Linux]]<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
*[[Добавляем действия в буфер обмена (klipper) plasma5| Добавление действий в буфер обмена plasma5]]<br />
<br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
*[[Запись скринкастов (видео с рабочего стола)]]<br />
<!-- И --><br />
*[[Инструкция по установке КриптоПро]]<br />
<br />
<!-- Й --><br />
<!-- К --><br />
*[[Как сохранить в файл вывод консоли]]<br />
*[[Как переименовать фото в соответствии с датой-временем файла или съёмки]]<br />
<br />
<!-- Л --><br />
*[[Локальная сборка ISO]]<br />
<br />
<!-- М --><br />
*[[Методы записи загрузочных образов ISO на USB flash]]<br />
<br />
<!-- Н --><br />
*[[2FA| Настройка многофакторной аутертификации в 2021.1]]<br />
*[[Использование nmcli| Настройка сети через nmcli]]<br />
*[[Настройка удаленного подключения к базе PostgreSQL]]<br />
<br />
<!-- О --><br />
*[[Образ rootfs| Образ rootfs. Запуск в контейнере. chroot. Установка системы вручную.]]<br />
<br />
<!-- П --><br />
*[[Перенос снапшотов(snapshots) btrfs на другой раздел в отдельном файле| Перенос снапшотов btrfs на другой раздел в отдельном файле]]<br />
*[[Блог:Точка Росы/Проверка контрольных сумм образов ROSA Desktop с помощью Checkisomd5| Проверка контрольных сумм образов ROSA Desktop с помощью checkisomd5]]<br />
<br />
<!-- Р --><br />
<!-- С --><br />
*[[Создание зашифрованного swap файла]]<br />
*[[Свой репозиторий| Создание своего репозитория пакетов]]<br />
*[[Проба компьютера| Создание пробы оборудования]]<br />
<br />
<!-- Т --><br />
<!-- У --><br />
*[[STM32CubeIDE|Установка STM32 CubeIDE]]<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Э --><br />
*[[Эксплуатация Docker]]<br />
*[[Эксплуатация Kubernetes]]<br />
<br />
<!-- Ю --><br />
<!-- Я --><br />
<br />
<br />
*[[Anaconda| anaconda - программа для установки операционной системы]]<br />
*[[Dnf| dnf - пакетный менеджер]]<br />
*[[Systemd| systemd - система инициализации и управления службами]]<br />
<br />
== Справочная информация ==<br />
*[[Источники образов росы]]<br />
*[[Пакеты и их источники (репозитории)]]<br />
*[[Политика выпуска ROSA Desktop]]<br />
*[[Ядро| Политика упаковки и сопровождения официальных ядер Linux в rosa2021.1]]<br />
*[[Форматы офисных документов и их различия]]<br />
*[[Шпаргалка по логическим операциям в bash]]<br />
<br />
== Прочее ==<br />
*[[Заметки на полях]]<br />
*[[Список консольных программ]]<br />
*[[Шаблоны LibreOffice Конструкторская документация]]<br />
<br /><br />
*[[QEMU - полезные советы]]<br />
<br /><br />
*[[Служебная:Все страницы | Все страницы вики]]<br />
*[[Служебная:Категории| Страницы по Категориям]]<br />
*[[Справка:Как править статьи]]<br />
[[Категория:Документация]]</div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20863
Заметки на полях
2023-12-17T11:41:49Z
<p>Noname: /* grep */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать по 2 строки до и после найденного вхождения ===<br />
$ grep -A2 -B2 "искомая фраза" file.txt <br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20860
Заметки на полях
2023-12-15T16:55:37Z
<p>Noname: /* 2 */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно выделить, скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями '''epub''', '''txt''', '''odt''', '''docx''', '''lit''', '''mobi''', '''azw''', '''azw3''', '''html''', '''prc''', '''rtf''', '''pdb''', '''pdf'''.<br /><br />
Чтобы использовать '''ebook-convert''' нужно установить '''calibre'''.<br />
<br />
'''fb2''' также можно конвертировать с помощью '''libreoffice'''. '''Файл''' -> '''Экспорт в''' -> '''Экспорт в epub'''.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
'''Временные изменения'''<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
'''Постоянные в /etc/sysctl.conf'''<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' '''quiet''' заменить на '''verbose''', '''splash=silent''' удалить.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в '''$HISTFILE'''.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ('''printf secret | sha256sum''') или работы с GPG ('''gpg -eaF secret-pubkey.asc'''), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
'''Снимок экрана'''<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
'''Снимок области'''<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
'''Rosa'''<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
'''Ubuntu'''<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20856
Заметки на полях
2023-12-15T15:01:49Z
<p>Noname: /* Узнать дату установки ОС Linux из свойств файловой системы */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
{{Простое примечание|В ext4 точно работает. В других фс не знаю.}}<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20855
Заметки на полях
2023-12-15T14:59:57Z
<p>Noname: /* 2 */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана с помощью команды import ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20854
Заметки на полях
2023-12-15T14:40:22Z
<p>Noname: /* 2 */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20853
Заметки на полях
2023-12-15T14:37:47Z
<p>Noname: оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20852
Заметки на полях
2023-12-15T14:32:37Z
<p>Noname: /* cdemu */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
=== Удалить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu remove-device<br />
<br />
=== Добавить виртуальное cd/dvd-rom устройство ===<br />
$ cdemu add-device<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20851
Заметки на полях
2023-12-15T14:30:16Z
<p>Noname: /* rsync и ssh */</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ rsync --dry-run -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
$ find . -type d -printf "%P\n" | rsync --dry-run -avn --delete --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20849
Заметки на полях
2023-12-15T14:22:36Z
<p>Noname: /* find */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
'''Найти исполняемые файлы с шаблоном *.zip'''<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
'''Найти исполняемые файлы и напечатать'''<br />
$ find /path -type f -perm /a=x<br />
<br />
'''Найти исполняемые файлы и сделать неисполняемыми'''<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
'''Найти все файлы и напечатать'''<br />
$ find /path -type f -print<br />
<br />
'''Найти все файлы и вывести их кол-во'''<br />
$ find /path -type f -print | wc -l<br />
<br />
'''Найти файлы по шаблону и показать их суммарный размер'''<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
'''Найти все файлы, получить их хеш-сумму и записать результат в файл'''<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
'''Найти файлы по шаблону и удалить их'''<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
'''Найти все файлы в текущем каталоге и получить все доступные [https://habr.com/ru/articles/443694/ ссылки из расширенных атрибутов] (необходимо установить пакет attr)'''<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
'''Не учитывать регистр при поиске'''<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
'''Рекурсивный расчет контрольных сумм файлов каталога'''<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
'''Исключить из поиска определенную директорию'''<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
'''Найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid'''<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
'''Найти в текущей директории файлы и показать их названия без ./'''<br />
$ find . -maxdepth 1 -type f -printf '%P\n' | sort<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20848
Заметки на полях
2023-12-15T13:57:51Z
<p>Noname: /* mediainfo */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
'''Показать значение конкретного поля'''<br />
$ mediainfo --Output='General;%Comment%' file_name # Комментарий<br />
$ mediainfo --Output='Video;%Width%' file_name # Ширина видео<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name # Ширина и Высота видео. В качестве разделителя используется "x".<br />
<br />
'''Получить список доступных полей'''<br />
$ mediainfo --Info-Parameters<br />
<br />
'''Получить справку по параметру --Output'''<br />
$ mediainfo --Help-Output<br />
<br />
'''Показать информацию в таком виде: «Имя файла :: Продолжительность :: Битрейт файла»'''<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20847
Заметки на полях
2023-12-15T13:36:32Z
<p>Noname: /* aria2c */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
=== Задать интервал в секундах до вывода сообщения о прогрессе загрузки ===<br />
--summary-interval=0<br />
0 запрещает вывод. По умолчанию 60.<br />
<br />
=== Задать максимальную общую скорость загрузки ===<br />
--max-overall-download-limit=1M<br />
По умолчанию 0, т.е. неограниченно.<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20846
Заметки на полях
2023-12-15T13:27:27Z
<p>Noname: /* chattr — изменение атрибутов файлов */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr ==<br />
=== Запретить изменение, переименование и удаление файла ===<br />
# chattr +i /path/to/file<br />
{{Простое примечание|Пока не будет изменен атрибут файла, все его только читать могут, даже рут.}}<br />
<br />
=== Снять запрет ===<br />
# chattr -i /path/to/file<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20845
Заметки на полях
2023-12-15T13:13:10Z
<p>Noname: /* 7z */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
=== Создание архива с паролем и скрытым содержимым (содержимое можно увидеть только после ввода пароля) ===<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20844
Заметки на полях
2023-12-15T13:11:28Z
<p>Noname: /* virtualbox */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
=== USB ===<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу '''vboxusers'''.<br /><br />
Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить '''VirtualBox Extension Pack''' с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds virtualbox.org]<br />
<br />
=== Общие папки ===<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу '''vboxsf'''<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20843
Заметки на полях
2023-12-15T12:54:26Z
<p>Noname: /* uuencode/uudecode, xxd */ оформление, дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
=== Преобразовать двоичный файл в текстовую форму ===<br />
$ uuencode -m input-file set-file-name >output-file<br />
$ xxd -p input-file >output-file<br />
<br />
=== Преобразовать обратно в двоичный файл ===<br />
$ uudecode -o output-file input-file<br />
$ xxd -p -r input-file >output-file<br />
<br />
=== Преобразовать stdin ===<br />
$ echo -n "Hello world." | xxd -ps<br />
48656c6c6f20776f726c642e<br />
$ echo -n "48656c6c6f20776f726c642e" | xxd -ps -r ; echo<br />
Hello world.<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20842
Заметки на полях
2023-12-15T12:43:31Z
<p>Noname: /* sed */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
=== Несколько паттернов в регулярном выражении ===<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
=== Текст в нижний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
=== Текст в верхний регистр ===<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
=== Сделать первую букву каждого слова большой (titlecase) ===<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20841
Заметки на полях
2023-12-15T12:40:45Z
<p>Noname: /* qemu */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
=== Установка ===<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
=== Проверка загрузочной флешки ===<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20840
Заметки на полях
2023-12-15T12:37:55Z
<p>Noname: /* postgresql. psql */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
=== Установка ===<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
=== Запуск сервера postgresql ===<br />
$ sudo systemctl start postgresql12.service<br />
<br />
=== Создание базы данных ===<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
=== Удаление базы данных ===<br />
DROP DATABASE test_db;<br />
<br />
=== Показывать номера строк при выводе в less ===<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
=== Вывести данные таблицы с конвертированием времени из unixtime ===<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
=== Вывести данные таблицы и отразить дату и время в конкретном часовом поясе ===<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20839
Заметки на полях
2023-12-15T12:32:07Z
<p>Noname: /* minidlna */ оформление, дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
=== Установка ===<br />
$ sudo dnf in minidlna<br />
<br />
=== Расшаривание директорий ===<br />
В файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''' добавляем:<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
=== Запуск ===<br />
$ sudo systemctl start minidlna.service<br />
<br />
=== Автозапуск ===<br />
$ sudo systemctl enable minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20838
Заметки на полях
2023-12-15T12:23:28Z
<p>Noname: /* handbrake */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
=== Показать список пресетов ===<br />
$ handbrake -z<br />
<br />
=== Конвертировать видео используя пресет ===<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20837
Заметки на полях
2023-12-15T12:21:39Z
<p>Noname: /* grep */ оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
=== Показать 20 символов после искомой фразы ===<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Показать 20 символов до искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
=== Показать 20 символов до и после искомой фразы ===<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
=== Несколько альтернативных паттернов в регулярном выражении ===<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
=== Подсчет кол-ва строк ===<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20836
Заметки на полях
2023-12-15T12:17:54Z
<p>Noname: оформление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
=== Установка ===<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
=== Удаление всех метаданных ===<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшение размера зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Скачивание с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
=== Отправить сообщение на экран пользователя ===<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
=== Список подключенных сеансов ===<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
=== sshfs ===<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
=== Добавление действий в контекстное меню ФМ Dolphin ===<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
=== Удаление из yakuake кнопки закрытия программы ===<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
=== Запуск программ в Yakuake при старте KDE ===<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
=== Установка ===<br />
$ sudo dnf install zsh<br />
<br />
=== Установка oh-my-zsh ===<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
=== Установка zsh шеллом по умолчанию ===<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
=== Варианты PROMPT ===<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
=== Открытие ман-страницы указанной программы комбинацией клавиш === <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
=== Псевдонимы расширения (suffix aliases) ===<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20835
Заметки на полях
2023-12-15T12:05:57Z
<p>Noname: /* ext4 */ обновление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
==== Установка ====<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
==== Удаление всех метаданных ====<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
== ext4 ==<br />
==== Дефрагментация ====<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
==== Уменьшение размера зарезервированного места ====<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
==== Добавить действия в контекстное меню ФМ Dolphin ====<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
==== Установка ====<br />
$ sudo dnf install zsh<br />
<br />
==== Установка oh-my-zsh ====<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
==== Установка zsh шеллом по умолчанию ====<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
==== Варианты PROMPT ====<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
==== Открытие ман-страницы указанной программы комбинацией клавиш ==== <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
==== Псевдонимы расширения (suffix aliases) ====<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20834
Заметки на полях
2023-12-15T12:04:22Z
<p>Noname: /* exiftool */ обновление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
==== Установка ====<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
==== Удаление всех метаданных ====<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшить размер зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
==== Добавить действия в контекстное меню ФМ Dolphin ====<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
==== Установка ====<br />
$ sudo dnf install zsh<br />
<br />
==== Установка oh-my-zsh ====<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
==== Установка zsh шеллом по умолчанию ====<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
==== Варианты PROMPT ====<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
==== Открытие ман-страницы указанной программы комбинацией клавиш ==== <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
==== Псевдонимы расширения (suffix aliases) ====<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20833
Заметки на полях
2023-12-15T11:49:48Z
<p>Noname: /* zsh */ обновление, дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
Установить<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшить размер зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
==== Добавить действия в контекстное меню ФМ Dolphin ====<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
==== Установка ====<br />
$ sudo dnf install zsh<br />
<br />
==== Установка oh-my-zsh ====<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
==== Установка zsh шеллом по умолчанию ====<br />
$ sudo usermod -s /usr/bin/zsh $USER<br />
<br />
==== Варианты PROMPT ====<br />
1:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /Полный/путь<br />
» команды вводятся на новой строке<br />
добавляем в '''~/.zshrc''' строку<br />
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%} '<br />
Если вдруг ввод команд не на новой строке, то в строке указанной выше после '''hg_prompt_info''' меняем '''\n''' на '''${NEWLINE}''' и над этой строкой размещаем<br />
NEWLINE=$'\n'<br />
<br />
2:<br />
[Имя_пользователя мм.дд ЧЧ:ММ] /home/.../последние/две директории » команды вводятся в той же строке<br />
Добавляем в '''~/.zshrc'''<br />
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%} '<br />
Подробности тута: https://stackoverflow.com/a/50696779/19807992<br />
<br />
==== Открытие ман-страницы указанной программы комбинацией клавиш ==== <br />
Нужно ввести имя программы и нажать Alt+H. Между именем программы и курсором не должно быть посторонних символов (пробелов, точек, запятых и т.п.).<br />
<br />
==== Псевдонимы расширения (suffix aliases) ====<br />
Если в '''~/.zshrc''' прописать:<br />
alias -s mp4=smplayer<br />
команда '''file_name.mp4''' будет расширена до '''smplayer file_name.mp4'''.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20831
Заметки на полях
2023-12-15T10:20:00Z
<p>Noname: /* yakuake */ обновление</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
Установить<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшить размер зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
==== Добавить действия в контекстное меню ФМ Dolphin ====<br />
После выполнения этих команд:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
В контекстном меню дельфина появятся действия "Запустить в Yakuake" и "Открыть Yakuake в этой папке".<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в текущей сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand " qbittorrent &" # запуск программы qbittorrent в добавленной сессии <br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
Установка<br />
$ sudo dnf install zsh<br />
<br />
Установка oh-my-zsh<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
Чтобы сделать zsh шеллом по умолчанию нужно выполнить:<br />
$ sudo usermod -s /bin/zsh $USER (Роса)<br />
$ sudo usermod -s /usr/bin/zsh $USER (ubuntu)<br />
<br />
Псевдонимы расширения (suffix aliases)<br />
Эти псевдонимы позволяют расширить команду вида name.ext до program name.ext. Например, если в файле конфигурации прописать:<br />
alias -s avi=mplayer<br />
alias -s mpg=mplayer<br />
команда movie.avi будет расширена до mplayer movie.avi<br />
<br />
В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш alt+h.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20829
Заметки на полях
2023-12-15T09:41:23Z
<p>Noname: /* mediainfo */ дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
Установить<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшить размер зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration%''' Показывает время в миллисекундах<br /><br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
<br />
==== Добавить действия в дельфине ====<br />
Чтобы в дельфине в контекстное меню добавить действия «Запустить в Yakuake» и «Открыть Yakuake в этой папке» надо сделать следующее:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand rtorrent # запуск команды rtorrent в текущей сессии<br />
<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в добавленной сессии<br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
Установка<br />
$ sudo dnf install zsh<br />
<br />
Установка oh-my-zsh<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
Чтобы сделать zsh шеллом по умолчанию нужно выполнить:<br />
$ sudo usermod -s /bin/zsh $USER (Роса)<br />
$ sudo usermod -s /usr/bin/zsh $USER (ubuntu)<br />
<br />
Псевдонимы расширения (suffix aliases)<br />
Эти псевдонимы позволяют расширить команду вида name.ext до program name.ext. Например, если в файле конфигурации прописать:<br />
alias -s avi=mplayer<br />
alias -s mpg=mplayer<br />
команда movie.avi будет расширена до mplayer movie.avi<br />
<br />
В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш alt+h.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20828
Заметки на полях
2023-12-15T09:34:34Z
<p>Noname: /* ffmpeg */ дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
Установить<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшить размер зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Обрезать аудио ===<br />
Начало<br />
$ ffmpeg -ss 00:01:27 -i audio.mp3 output_audio.mp3<br />
<br />
Конец<br />
$ ffmpeg -to 00:11:05 -i audio.mp3 output_audio.mp3 # т.е. сохранить 11 минут и 5 секунд.<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
<br />
==== Добавить действия в дельфине ====<br />
Чтобы в дельфине в контекстное меню добавить действия «Запустить в Yakuake» и «Открыть Yakuake в этой папке» надо сделать следующее:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand rtorrent # запуск команды rtorrent в текущей сессии<br />
<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в добавленной сессии<br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
Установка<br />
$ sudo dnf install zsh<br />
<br />
Установка oh-my-zsh<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
Чтобы сделать zsh шеллом по умолчанию нужно выполнить:<br />
$ sudo usermod -s /bin/zsh $USER (Роса)<br />
$ sudo usermod -s /usr/bin/zsh $USER (ubuntu)<br />
<br />
Псевдонимы расширения (suffix aliases)<br />
Эти псевдонимы позволяют расширить команду вида name.ext до program name.ext. Например, если в файле конфигурации прописать:<br />
alias -s avi=mplayer<br />
alias -s mpg=mplayer<br />
команда movie.avi будет расширена до mplayer movie.avi<br />
<br />
В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш alt+h.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname
http://wiki.rosalab.ru/ru/index.php?title=%D0%97%D0%B0%D0%BC%D0%B5%D1%82%D0%BA%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8F%D1%85&diff=20827
Заметки на полях
2023-12-13T10:51:31Z
<p>Noname: /* 2 */ дополнение</p>
<hr />
<div>{{Таинственные знаки "Доллар" и "Решетка"}}<br />
<br /><br />
<br />
= 1 =<br />
<br />
<!-- A --><br />
<br />
== aria2c ==<br />
Задать интервал в секундах до вывода сообщения о прогрессе загрузки. Установка 0 запрещает вывод. По умолчанию: 60<br />
--summary-interval=<SEC><br />
<br />
Задать максимальную общую скорость загрузки в байтах/сек. 0 значит неограниченно. Вы можете добавить K или M (1K = 1024, 1M = 1024K).<br />
--max-overall-download-limit<br />
<br />
<br />
<!-- B --><br />
<br />
== btrfs ==<br />
<br />
=== Создание резервной копии снимка btrfs ===<br />
<br />
Создаем read-only снимок — send требует, чтобы отправляемый снимок был read-only<br />
# btrfs subvolume snapshot -r /mnt/@ /mnt/ss/@-ss-date-main<br />
# sync<br />
# btrfs send /mnt/ss/@-ss-date-main | zstd -16 -T0 -vv -o /files/.backups/root-distr-date-main.btrfs.zst<br />
<br />
Восстановление из снимка будет производиться как-то так:<br />
# zstd -d /files/.backups/root-distr-date-main.btrfs.zst | btrfs receive /path<br />
# sync<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#снимки ubuntu-wiki: btrfs#снимки]<br />
<br />
=== Дефрагментация ===<br />
<br />
# btrfs fi defrag -r /mnt<br />
<br />
=== Перебалансировка системы ===<br />
<br />
# btrfs balance start /mnt<br />
<br />
[https://help.ubuntu.ru/wiki/btrfs#балансировка ubuntu-wiki: балансировка]<br />
<br />
<!-- C --><br />
<br />
== cdemu ==<br />
удалить виртуальное cd/dvd-rom устройство<br />
$ cdemu remove-device<br />
<br />
добавить виртуальное cd/dvd-rom устройство<br />
$ cdemu add-device<br />
<br />
<br />
== chattr — изменение атрибутов файлов ==<br />
# chattr +i /path/to/file<br />
# chattr -i /path/to/file<br />
атрибут '''+i''' запрещает любое изменение, переименование и удаление файла/каталога, '''-i''' — разрешает.<br />
<br />
<br />
<!-- D --><br />
<br />
== dmsetup ==<br />
После локальной сборки iso Росы (rosa2016.1) все не смонтированные носители дублируются в ФМ.<br />
В выводе команды lsblk эти носители имеют тип dm и имя osprober-linux-sda1.<br />
Чтобы все вернуть, как было, нужно выполнить:<br />
$ sudo dmsetup ls - чтобы увидеть список таких носителей<br />
$ sudo dmsetup remove_all - чтобы удалить их<br />
<br />
<br />
<!-- E --><br />
<br />
== exiftool ==<br />
Установить<br />
$ sudo dnf in perl-Image-ExifTool<br />
<br />
Удалить все метаданные у всех .jpg изображений в текущей директории<br />
$ exiftool -all= *.jpg<br />
<br />
<br />
== ext4 ==<br />
=== Дефрагментация ===<br />
$ sudo e4defrag -c / # анализ корневого раздела<br />
$ sudo e4defrag / # дефрагментация корневого раздела<br />
<br />
=== Уменьшить размер зарезервированного места ===<br />
$ sudo tune2fs -m 0.1 /dev/sda1<br />
<br />
<br />
<!-- F --><br />
<br />
== ffmpeg ==<br />
<br />
=== Извлечь аудио из видеофайла ===<br />
Если нет желания заморачиваться<br />
$ ffmpeg -i video.mp4 -vn output.mp3<br />
<br />
Если нужно изъять дорожку без конвертирования<br />
$ ffmpeg -i video.mp4<br />
<br />
Внизу ищем строку '''Stream ...: Audio:'''<br />
<br />
Если там mp3, то<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.mp3<br />
<br />
Если opus<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.opus<br />
<br />
Если aac<br />
$ ffmpeg -i video.mp4 -vn -c:a copy output.aac<br />
<br />
=== Изменить контейнер видеоролика и добавить метаданные ===<br />
$ ffmpeg -i "name-video.mkv" -codec copy -metadata title="New title" -metadata comment="New comment" "new-name-video.mp4"<br />
<br />
{{Простое примечание| Если '''title''' и '''comment''' существуют, то они будут перезаписаны. Если в исходном файле есть другие метаданные, то они скопируются в новый файл без изменений.}}<br />
<br />
=== Превратить аудио в видео с одной картинкой ===<br />
$ ffmpeg -loop 1 -i picture.jpg -i audio.mp3 -shortest output_video.mp4<br />
<br />
{{Простое примечание|<br />
-c:a copy — если не нужно конвертировать аудио.<br /><br />
<nowiki>-af "atempo=1.5"</nowiki> — если нужно увеличить скорость аудио.<br />
}}<br />
<br />
<br />
== find ==<br />
найти исполняемые файлы с шаблоном *.zip<br />
$ find /path -type f -perm /a=x -name '*.zip'<br />
<br />
найти исполняемые файлы и напечатать<br />
$ find /path -type f -perm /a=x<br />
<br />
найти исполняемые файлы и сделать неисполняемыми<br />
$ find /path -type f -perm /a=x -exec chmod -x '{}' \;<br />
<br />
найти все файлы и напечатать<br />
$ find /path -type f -print<br />
<br />
найти все файлы и вывести их кол-во<br />
$ find /path -type f -print | wc -l<br />
<br />
найти файлы по шаблону и показать их суммарный размер<br />
$ find /path -type f -name "Dana*" -print0 | xargs -0 du -ch | tail -n 1 | awk '{print $1}'<br />
<br />
найти все файлы, подсчитать хеш-сумму и записать результат в файл<br />
$ find /path -type f -print0 | xargs --null md5sum > /tmp/listsums<br />
<br />
найти файлы по шаблону и удалить их<br />
$ find /path -type f -name "*.directory" -exec rm {} \;<br />
<br />
найти все файлы в текущем каталоге и получить все доступные ссылки из расширенных аттрибутов (необходимо установить пакет attr)<br />
$ find . -maxdepth 1 -type f -print0 | xargs -0 getfattr -d | grep -e 'origin.url' | awk -F "\"" '{print $2}'<br />
<br />
не учитывать регистр при поиске<br />
$ find /path -type f -iname '*name-file*' <br />
<br />
рекурсивный расчет контрольных сумм файлов каталога<br />
$ find /path -type f -print0 | xargs --null md5sum<br />
<br />
исключить из поиска определенную директорию<br />
$ find . -type f -not -path './dir/*' -iname name<br />
<br />
найти все файлы и каталоги принадлежащие указанному uid и изменить uid и gid<br />
# find /path -uid 500 -print0 | xargs -0 chown -h 1000:1000<br />
# find /path -uid 500 -exec chown -h 1000:1000 '{}' \;<br />
<br />
$ rsync -avn --delete --exclude-from=<(find . -type d -printf "%P\n") . ../output_dir/<br />
<br />
Печатать имена файлов без ./<br />
$ find . -printf '%P\n'<br />
<br />
<br />
<!-- G --><br />
<br />
== grep ==<br />
Показать 20 символов после искомой фразы<br />
$ grep -oE "искомая фраза.{20}" file.txt<br />
$ grep -oE ".{0}искомая фраза.{20}" file.txt<br />
<br />
$ grep -oP "(искомая фраза)[^\n]{0,20}" file.txt<br />
$ grep -oP "[^\n]{0,0}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Показать 20 символов до искомой фразы<br />
$ grep -oE ".{20}искомая фраза" file.txt<br />
$ grep -oE ".{20}искомая фраза.{0}" file.txt<br />
<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,0}" file.txt<br />
<br />
Показать 20 символов до и после искомой фразы<br />
$ grep -oE ".{20}искомая фраза.{20}" file.txt<br />
$ grep -oP "[^\n]{0,20}(искомая фраза)[^\n]{0,20}" file.txt<br />
<br />
Несколько альтернативных паттернов в регулярном выражении<br />
$ echo "http://wiki.rosalab.ru/ru" | grep -E -- '^http(s|)://|\.ru|\.com|\.net|\.org'<br />
<br />
Подсчет кол-ва строк<br />
посчитать все строки в т.ч. и пустые<br />
$ echo -en 'line 1\n\n\nline4' | grep -c ""<br />
<br />
не считать пустые строки<br />
$ echo -en 'line 1\n\n\nline4' | grep -c .<br />
<br />
<br />
<!-- H --><br />
<br />
== handbrake ==<br />
Показать список пресетов<br />
$ handbrake -z<br />
<br />
Конвертировать видео используя пресет<br />
$ handbrake -Z "H.265 MKV 720p30" -i name_video.mp4 -o name_video.mkv<br />
<br />
<br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<br />
== KDE ==<br />
<br />
=== Отключение открытия Меню запуска приложений клавишей Super (Windows) ===<br />
<br />
$ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta ""<br />
<br />
<br />
<!-- L --><br />
<!-- M --><br />
<br />
== mediainfo ==<br />
Показать значение конкретного поля<br />
$ mediainfo --Output='General;%Comment%' file_name<br />
$ mediainfo --Output='Video;%Width%' file_name<br />
$ mediainfo --Output='Video;%Width%x%Height%' file_name<br />
$ mediainfo --Output='Video;%Width%\n%Height%' file_name<br />
<br />
Показать «Имя файла :: Продолжительность :: Битрейт файла»<br />
$ mediainfo --Inform='General;%CompleteName% :: %Duration/String3% :: %BitRate/String%' file_name<br />
<br />
{{Простое примечание|<br />
'''%Duration/String3%''' Показывает время в формате "'''00:01:02.333'''"<br /><br />
'''%Duration/String2%''' Показывает время в формате "'''0 h 1 min 2 s'''"<br /><br />
'''%Duration/String1%''' Показывает время в формате "'''0 h 1 min 2 s 333 ms'''"<br />
}}<br />
<br />
$ mediainfo --Help-Output<br />
<br />
Показать список доступных полей<br />
$ mediainfo --Info-Parameters<br />
<br />
{{Простое примечание|'''--Inform''' делает тоже самое, что и '''--Output'''. Скорее всего первое является алиасом для второго.}}<br />
<br />
<br />
== minidlna ==<br />
1. Сначала необходимо установить пакет minidlna.<br /><br />
2. Потом нужно добавить в файл '''/etc/minidlna.conf''' под '''#media_dir=/opt''':<br />
media_dir=A,/home/username/Музыка<br />
media_dir=V,/home/username/Видео<br />
media_dir=P,/home/username/Изображения<br />
<br />
3. А после выполнить команду<br />
$ sudo systemctl start minidlna.service<br />
<br />
<br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<br />
== postgresql. psql ==<br />
Установка<br />
$ sudo dnf install postgresql postgresql-contrib postgresql-server<br />
<br />
Запуск сервера postgresql<br />
$ sudo systemctl start postgresql12.service<br />
<br />
Создание базы данных<br />
$ sudo su postgres<br />
psql<br />
CREATE USER test_user WITH password '123456qwerty';<br />
CREATE DATABASE test_database OWNER test_user;<br />
<br />
Удаление базы данных<br />
DROP DATABASE test_db;<br />
<br />
Показывать номера строк при выводе в less<br />
$ echo "\setenv PAGER 'less -S'" | tee -a ~/.psqlrc<br />
<br />
Вывести данные таблицы с конвертированием unixtime<br />
select col1, to_timestamp(col2_with_unixtime) as col2_with_datetime, col3, col4, col5 from table;<br />
select col1, to_timestamp(col2_with_unixtime) at time zone 'Time_Zone_Name' as col2_with_datetime, col3, col4, col5 from table;<br />
<br />
Вывести данные таблицы и отразить дату и время в конкретном часовом поясе<br />
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;<br />
<br />
Имена временных зон можно узнать в документации [https://www.postgresql.org/docs/8.1/datetime-keywords.html postgresql].<br />
<br />
<br />
<!-- Q --><br />
<br />
== qemu ==<br />
Установка<br />
$ sudo dnf install qemu qemu-kvm<br />
<br />
Проверить загрузочную флешку в qemu<br />
$ sudo qemu-system-x86_64 -enable-kvm -m 1024 -usb /dev/sdb<br />
<br />
=== virt-manager ===<br />
Virt-Manager не может подключиться к QEMU/KVM<br />
Не удалось подключить сокет к «/var/run/libvirt/virtqemud-sock»: Нет такого файла или каталога <br />
<br />
Чтобы решить эту проблему нужно запустить libvirtd:<br />
$ sudo systemctl start libvirtd<br />
<br />
<br />
<!-- R --><br />
<br />
== rsync и ssh ==<br />
<br />
=== Загрузка на удаленную машину ===<br />
$ rsync -av -zz -e "ssh -p 123" --progress --dry-run /local/folder/ user@host:/remote/forlder/<br />
* '''-a''' — Режим архивирования<br />
* '''-v''' — Выводить подробную информацию о процессе копирования<br />
* '''-zz''' — Сжимать файлы перед передачей<br />
* '''-e''' — Использовать другой транспорт<br />
* '''--bwlimit''' — Ограничение скорости KBytes в секунду<br />
* '''--progress''' — Выводить прогресс передачи файла<br />
* '''--dry-run''' — Показать, что скопируется<br />
* '''-c''' — Проверка контрольных сумм для файлов<br />
* '''-b''' — Создание резервной копии<br />
* '''-u''' — Не перезаписывать более новые файлы<br />
* '''--delete''' — Удалять файлы которых нет в источнике<br />
* '''--exclude''' — Исключить файлы по шаблону<br />
* '''--include''' — Не исключать файлы по шаблону<br />
* '''-P''' — эквивалент для --partial --progress<br />
<br />
=== Загрузка с удаленной машины ===<br />
$ rsync -avP -zz -e "ssh -p 123" user@host:/remote/forlder/file /local/folder/file<br />
<br />
=== Отправить только файлы из текущей директории в /output/dir/ ===<br />
$ find . -type d -printf "%P\n" | rsync -avn --delete --dry-run --exclude-from=- . /output/dir/<br />
<br />
{{Простое примечание|В rsync параметр '''--delete''' не работает вместе с '''--no-recursive''' поэтому исключать директории нужно с помощью программы '''find''' и параметра '''--exclude-from''' у '''rsync'''}}<br />
<br />
<br />
{{Простое примечание|rsync работает быстрее, чем scp}}<br />
<br />
<br />
<!-- S --><br />
<br />
== ssh ==<br />
<br />
==== Отправить сообщение на экран пользователя ====<br />
Смотрим какой дисплей использует пользователь<br />
<br />
$ who<br />
user tty1 date (:0)<br />
user pts/0 date (:0)<br />
:0<br />
<br />
логинимся под тем пользователем<br />
$ su user<br />
<br />
отправляем сообщение<br />
$ export DISPLAY=:0 && kdialog --msgbox "Сообщение"<br />
<br />
==== Список подключенных сеансов ====<br />
<br />
$ netstat -tnpa | grep 'ESTABLISHED.*sshd'<br />
$ ps auxwww | grep sshd:<br />
<br />
==== sshfs ====<br />
<br />
$ sudo mkdir -v -m 755 /media/remote<br />
$ sshfs -C -p 123 user@host:/home /media/remote/<br />
$ fusermount -u /media/remote<br />
<br />
<br />
== sed ==<br />
Несколько паттернов в регулярном выражении<br />
$ echo -e 'fjecfe.mp4\nehjncej.mkv\nejfefe.mp3\nefehwdj.webm\nenjdnw.txt' | sed 's/\(.mp4\|.mkv\|.webm\)/.7z/'<br />
<br />
Текст в нижний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\L\1/'<br />
<br />
Текст в верхний регистр<br />
$ echo -n "TEXT" | sed -e 's/\(.*\)/\U\1/'<br />
<br />
Сделать первую букву каждого слова большой (titlecase)<br />
$ echo -n "TEXT" | sed "s/.*/\L&/; s/[a-zа-я']*/\u&/g"<br />
<br />
<br />
<!-- T --><br />
<br />
== tput ==<br />
tput bold # Включить жирность<br />
tput dim # Затемнить текст<br />
tput smul # Включить подчеркивание<br />
tput rmul # Отключить подчеркивание<br />
tput rev # Поменять цвет текста на цвет фона<br />
tput setaf 1-255 # Установить цвет текста<br />
tput setab 1-255 # Установить фон текста<br />
tput sgr0 # Вернуть к значениям по умолчанию<br />
tput blink # мигающий текст<br />
<br />
<br />
<!-- U --><br />
<br />
== uuencode/uudecode, xxd ==<br />
Преобразовать двоичный файл в текстовую форму<br />
uuencode -m input-file set-file-name >output-file<br />
xxd -p input-file >output-file<br />
<br />
Преобразовать текст в двоичный файл<br />
uudecode -o output-file input-file<br />
xxd -p -r input-file >output-file<br />
<br />
чтобы преобразовать stdin нужно использовать xxd с параметром -ps<br />
<br />
<br />
<!-- V --><br />
<br />
== virtualbox ==<br />
Для подключения в виртуальной машине портов USB необходимо добавить пользователя хост-системы в группу vboxusers. Это можно сделать либо через графический интерфейс системы, либо в терминале командой:<br />
$ sudo usermod -a -G vboxusers $USER<br />
<br />
Для включения режима USB 2.0 и USB 3.0 необходимо установить VirtualBox Extension Pack с сайта [https://www.virtualbox.org/wiki/Download_Old_Builds]<br />
<br />
Для работы с общими папками необходимо внести пользователя гостевой системы в группу vboxsf<br />
$ sudo usermod -a -G vboxsf $USER<br />
<br />
<br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<br />
== yakuake ==<br />
<br />
==== Добавить действия в дельфине ====<br />
Чтобы в дельфине в контекстное меню добавить действия «Запустить в Yakuake» и «Открыть Yakuake в этой папке» надо сделать следующее:<br />
$ git clone https://github.com/aplatanado/yakuake-session.git<br />
$ sudo cp yakuake-session /usr/bin<br />
$ cp ServiceMenus/yakuakehere.desktop ServiceMenus/yakuakerun.desktop ~/.local/share/kservices5/ServiceMenus/<br />
<br />
==== Удалить из yakuake кнопку закрытия программы ====<br />
Нужно закомментировать в файле '''title.skin''' выбранной темы блок '''QuitButton'''.<br />
В '''ConfigButton''' значению '''x''' присвоить '''30''', а в '''FocusButton''' — '''53'''.<br />
Скины yakuake в Росе находятся в каталоге '''/usr/share/yakuake/skins'''<br />
<br />
==== Запуск программ в Yakuake при старте KDE ====<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand rtorrent # запуск команды rtorrent в текущей сессии<br />
<br />
$ qdbus org.kde.yakuake /yakuake/sessions addSession # добавление новой сессии<br />
$ qdbus org.kde.yakuake /yakuake/sessions runCommand htop # запуск команды htop в добавленной сессии<br />
<br />
<br />
<!-- Z --><br />
<br />
== zsh ==<br />
Установка<br />
$ sudo dnf install zsh<br />
<br />
Установка oh-my-zsh<br />
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"<br />
<br />
Чтобы сделать zsh шеллом по умолчанию нужно выполнить:<br />
$ sudo usermod -s /bin/zsh $USER (Роса)<br />
$ sudo usermod -s /usr/bin/zsh $USER (ubuntu)<br />
<br />
Псевдонимы расширения (suffix aliases)<br />
Эти псевдонимы позволяют расширить команду вида name.ext до program name.ext. Например, если в файле конфигурации прописать:<br />
alias -s avi=mplayer<br />
alias -s mpg=mplayer<br />
команда movie.avi будет расширена до mplayer movie.avi<br />
<br />
В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш alt+h.<br />
<br />
== 7z ==<br />
Создание архива с паролем и скрытым содержимым (содержимое можно увидить только после ввода пароля)<br />
$ 7z a -mhe=on -p test.7z /directory/file<br />
<br />
<br />
= 2 =<br />
<br />
<!-- А --><br />
<!-- Б --><br />
<br />
== Брать данные из буфера, а не передавать их программе вручную ==<br />
Например ссылку можно передавать yt-dlp так:<br />
$ yt-dlp -f 22 -s "$(xsel -o)" # -s - симулировать загрузку<br />
<br />
или wget:<br />
$ wget --spider "$(xsel -o)" # --spider - показать размер файла на сервере<br />
<br />
Если программа выполнила некую работу и есть желание узнать сколько она выдала строк, то этот вывод нужно скопировать и выполнить<br />
$ xsel -o | wc -l<br />
<br />
<!-- В --><br />
<br />
== Видеть результат выполнения команды на экране, и одновременно писать его в файл ==<br />
Для этого необходимо воспользоваться командой tee:<br />
$ some_command parameters | tee -a /tmp/logfile.txt<br />
<br />
Или<br />
$ script --timing=/tmp/terminal-timing.log /tmp/terminal.log<br />
<br />
Воспроизвести записанное с помощью script можно так:<br />
$ scriptreplay /tmp/terminal-timing.log /tmp/terminal.log 4 # цифра в конце команды означает скорость воспроизведения. 1 - оригинальная.<br />
<br />
== Выполнить команду и сделать скриншот её вывода ==<br />
$ inxi -Fc 0 | convert label:@- /tmp/screenshot.png<br />
<br />
<br />
== Выполнить команду, сделать скриншот её вывода и добавить его в буфер обмена ==<br />
$ neofetch --stdout | convert label:@- /tmp/screenshot.png && xclip -selection clipboard -target image/png -i /tmp/screenshot.png<br />
<br />
<br />
<!-- Г --><br />
<!-- Д --><br />
<!-- Е --><br />
<!-- Ё --><br />
<!-- Ж --><br />
<!-- З --><br />
<br />
== Запись свободного места нулями ==<br />
$ cat /dev/zero >/path/file<br />
$ dd if=/dev/zero of=/path/file bs=4M #или bs=4M-20M<br />
<br />
<br />
== Запуск простого файлового вебсервера ==<br />
'''ruby'''<br />
$ ruby -run -ehttpd $HOME/files -p8000<br />
<br />
'''python3'''<br />
$ python3 -m http.server 8000 -d $HOME/files<br />
<br />
или<br />
$ sudo dnf in python3-twisted<br />
$ twistd3 -n --pidfile= web --path $HOME/files/ --port "tcp:port=8000"<br />
<br />
'''python2'''<br />
$ python2 -m SimpleHTTPServer 8000 # Расшаривается текущая директория<br />
<br />
<br />
<!-- И --><br />
<br />
== Изменить разрешение экрана ==<br />
$ xrandr -s 1366x768<br />
$ xrandr -s 800x600<br />
<br />
<br />
== Информация по пользовательским скриптам ==<br />
Если нужно чтобы скрипты были доступны сразу нескольким пользователям их нужно раскладывать по:<br />
* сами скрипты класть в '''/usr/local/bin/'''<br />
* иконки (если необходимы) в '''/usr/local/share/icons/name-script/'''<br />
* desktop файлы в '''/usr/local/share/applications/name-script'''<br />
Если для одного то в:<br />
* скрипты в '''~/bin''' или в '''$PATH''' добавить '''~/.local/bin'''<br />
* иконки в '''~/.local/share/icons/'''<br />
* desktop файлы в '''~/.local/share/applications/'''<br />
<br />
<br />
<!-- Й --><br />
<!-- К --><br />
<br />
== Комбинации клавиш в терминале ==<br />
* '''ctrl+l''' — очистить экран (bash, zsh)<br />
* '''ctrl+a''' — перейти в начало строки (bash, zsh)<br />
* '''ctrl+e''' — перейти в конец строки (bash, zsh)<br />
* '''ctrl+u''' — вырезать все слева от курсора (bash, zsh удаляет всю строку)<br />
* '''ctrl+k''' — вырезать все справа от курсора (bash, zsh)<br />
* '''ctrl+w''' — вырезать слово слева от курсора (bash, zsh)<br />
* '''ctrl+y''' — вставить вырезанный текст (bash, zsh)<br />
* '''ctrl+d''' — если строка пуста — завершить текущий сеанс в терминале, иначе — удалить символ справа от курсора (bash, zsh)<br />
* '''ctrl+r''' — поиск по ранее запущенным командам (bash, zsh)<br />
* '''ctrl+shift+-''' — отменить последнее действие (bash, zsh)<br />
* '''ctrl+x+e''' — открыть текстовый редактор для изменения введенной строки (bash, zsh)<br />
<br />
* '''alt+u''' — перевести текст после курсора в верхний регистр (bash, zsh)<br />
* '''alt+d''' — удалить слово после курсора (bash, zsh)<br />
* '''alt+backspace''' — удалить слово перед курсором (bash, zsh)<br />
* '''alt+.''' — вставить последний аргумент из предыдущей команды (bash, zsh)<br />
<br />
<br />
== Коды завершения программ ==<br />
Нулевой код свидетельствует об успешном завершении, а ненулевой указывает на наличие ошибки<br /><br />
В большинстве интерпретаторов команд код завершения последней выполненной программы содержится в специальной переменной:<br /><br />
$?<br />
<br />
<br />
== Конвертировать все .odt в директории в .pdf ==<br />
$ libreoffice --headless --convert-to pdf *.odt<br />
<br />
<br />
== Конвертировать все .odt в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.odt<br />
<br />
<br />
== Конвертировать все .doc и docx в директории в .txt ==<br />
$ soffice --headless --convert-to txt:Text *.doc *.docx<br />
<br />
<br />
== Конвертировать fb2 в epub или docx ==<br />
$ ebook-convert "file name.fb2" "file name.epub"<br />
$ ebook-convert file_name.fb2 file_name.docx<br />
На вход можно подавать файлы с расширениями epub, txt, odt, docx, lit, mobi, azw, azw3, html, prc, rtf, pdb, pdf.<br /><br />
Чтобы использовать ebook-convert нужно установить calibre.<br />
<br />
fb2 также можно конвертировать с помощью libreoffice. Файл -> Экспорт в -> Экспорт в epub.<br />
<br />
<!-- Л --><br />
<!-- М --><br />
<!-- Н --><br />
<br />
== Настройка swappiness ==<br />
<br />
==== Временные изменения: ====<br />
$ cat /proc/sys/vm/swappiness<br />
$ sudo sysctl vm.swappiness=25<br />
$ sudo sysctl vm.vfs_cache_pressure=1000<br />
<br />
==== Постоянные в /etc/sysctl.conf: ====<br />
vm.swappiness=25<br />
vm.vfs_cache_pressure=1000<br />
<br />
{{Простое примечание|<br />
Параметр vm.vfs_cache_pressure указывает размер используемого дискового кэша.<br /><br />
Если Вы обладатель компьютера с SSD-накопителем, то для Вас будет актуально значение 50<br /><br />
Если HDD, то наибольшую отзывчивость можно получить при установке 1000<br />
}}<br />
<br />
<br />
<!-- О --><br />
<br />
== Отправить весь вывод команды в /dev/null ==<br />
$ command >/dev/null 2>&1<br />
<br />
<br />
== Отключение темы Plymouth в Росе ==<br />
<br />
==== <=2016.1 ====<br />
<br />
Чтобы отключить использование графической заставки при старте системы, необходимо удалить в файле '''/etc/default/grub''' в '''GRUB_CMDLINE_LINUX_DEFAULT''' параметры '''quiet''' и '''splash=silent'''.<br /><br />
<br />
==== 2021.1 ====<br />
Нужно в '''/etc/default/grub''' '''quiet''' и '''splash=silent''' заменить на '''plymouth.enable=0'''. Если хочется видеть строки загрузки, то '''splash=silent''' надо удалить, а вместо '''quiet''' поставить '''verbose'''.<br />
<br />
<br />
== Отключение истории bash ==<br />
Чтобы временно отключить историю, выполните:<br />
$ set +o history<br />
<br />
После этого вводимые команды не будут сохраняться в $HISTFILE.<br />
<br />
Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля (printf secret | sha256sum) или работы с GPG (gpg -eaF secret-pubkey.asc), не опасаясь, что секретный ключ будет сохранён на диск.<br />
<br />
Включить историю обратно можно командой<br />
$ set -o history<br />
<br />
<!-- П --><br />
<br />
== Показать смонтированные ФС ==<br />
$ findmnt --all<br />
<br />
<br />
== Показать только скрытые каталоги и файлы ==<br />
$ ls -A | grep "\."<br />
<br />
<br />
== Посмотреть открытые порты ==<br />
$ sudo lsof -Pni | grep LISTEN<br />
<br />
<br />
== Посмотреть информацию о релизе дистрибутива ==<br />
$ cat /etc/os-release<br />
<br />
<br />
== Получить суммарную длительность всех mp3 в директории ==<br />
$ 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."<br />
<br />
<br />
== Приостановка выполнения команды в терминале ==<br />
<br />
Приостановка делается сочетанием клавиш Ctrl+Z<br /><br />
Продолжить выполнение можно следующим образом:<br />
<br />
$ jobs<br />
<br />
смотрим номер приостановленной задачи<br />
<br />
$ fg N<br />
<br />
вместо N номер нужной задачи<br />
<br />
<br />
== Получить прогресс выполнения dd ==<br />
$ dd if=/dev/urandom of=/dev/null status=progress<br />
$ watch -n 5 pkill -x -USR1 dd<br />
$ watch -n 5 'sudo kill -USR1 $(pgrep ^dd)' # где -n 5 = 5 сек.<br />
<br />
<br />
<!-- Р --><br />
<br />
== Распаковать rpm-пакет в терминале ==<br />
$ rpm2cpio pkg-name.rpm | cpio -idm<br />
<br />
<br />
<!-- С --><br />
<br />
== Сделать снимок с веб-камеры из терминала ==<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 3 -f image2 'img%d.jpg'<br />
$ sudo ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -vframes 1 -f image2 img-$(date +%s).jpg<br />
<br />
<br />
== Создание снимков экрана из терминала ==<br />
<br />
Снимок экрана<br />
$ import -window root "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
Снимок области<br />
$ import "/files/Pictures/Screenshots/$(date +%F_%s-%N).png"<br />
<br />
<br />
== Собрать расширение из исходного кода для firefox ==<br />
$ 7z a ../extension-name.xpi * -r<br />
<br />
Если нужно пересобрать расширение с тем же названием необходимо удалить перед этим действием старое.<br />
<br />
Ссылка где можно подписать расширение для работы в ff: https://addons.mozilla.org/ru/developers/<br />
<br />
<br />
== Сделать vim редактором по умолчанию в терминале ==<br />
В R12 сначала надо удалить пакет '''nano-as-default-editor'''.<br />
<br />
Установить vim редактором по умолчанию для всех пользователей<br />
$ echo "EDITOR=vim" | sudo tee -a /etc/environment<br />
<br />
<!-- Т --><br />
<!-- У --><br />
<br />
== Управление сервисами ==<br />
<br />
==== Rosa ====<br />
# systemctl {enable|disable|start|stop|restart|status} name_service<br />
<br />
==== Ubuntu ====<br />
# service name_service {start|stop|restart|reload|force-reload|status}<br />
# systemctl {enable|disable} name_service<br />
<br />
<br />
== Узнать DE ==<br />
$ echo $XDG_CURRENT_DESKTOP<br />
$ echo $DESKTOP_SESSION<br />
$ wmctrl -m<br />
<br />
<br />
== Управление группами в линукс ==<br />
'''drakuser''' — Гуй в kde (может и в других de)<br /><br />
'''usermod''' — инструмент в терминале<br />
<br />
<br />
== Удаление пароля пользователя ==<br />
$ sudo passwd -d user<br />
<br />
<br />
== Узнать дату создания или изменения файла ==<br />
$ stat -c %y file --- время модификации<br />
$ stat -c %w file --- время создания, если поддерживается ФС<br />
<br />
<br />
== Удалить запись из истории в zsh ==<br />
$ LC_ALL=C sed -i '/$1/d' $HISTFILE<br />
<br />
<br />
== Убить все процессы пользователя ==<br />
$ pgrep -u $USER | xargs kill -9<br />
$ pkill -9 -u $USER<br />
<br />
<br />
== Узнать дату установки ОС Linux из свойств файловой системы ==<br />
$ sudo tune2fs -l $(df / | tail -1 | cut -f1 -d' ') | grep created<br />
<br />
В ext4 точно работает. В других фс не знаю.<br />
<br />
<br />
== Узнать точную версию sata диска ==<br />
$ sudo smartctl -a /dev/sda | grep SATA<br />
<br />
<br />
<!-- Ф --><br />
<!-- Х --><br />
<!-- Ц --><br />
<!-- Ч --><br />
<!-- Ш --><br />
<!-- Щ --><br />
<!-- Ы --><br />
<!-- Э --><br />
<!-- Ю --><br />
<!-- Я --><br />
<!-- A --><br />
<!-- B --><br />
<br />
== backups (резервные копии) ==<br />
<br />
=== Создание рез. копии с помощью squashfs ===<br />
Делаем бэкап раздела sdd1<br />
$ sudo mount /dev/sdd1 /mnt/sdd1<br />
$ sudo mksquashfs /mnt/sdd1 /home/user/name.squashfs<br />
<br />
Распаковываем на другой носитель<br />
$ sudo unsquashfs -f -d /mnt/sdс1 /home/user/name.squashfs<br />
<br />
<br />
<!-- C --><br />
<!-- D --><br />
<!-- E --><br />
<!-- F --><br />
<!-- G --><br />
<!-- H --><br />
<!-- I --><br />
<!-- J --><br />
<!-- K --><br />
<!-- L --><br />
<!-- M --><br />
<!-- N --><br />
<!-- O --><br />
<!-- P --><br />
<!-- Q --><br />
<!-- R --><br />
<!-- S --><br />
<!-- T --><br />
<!-- U --><br />
<!-- V --><br />
<!-- W --><br />
<!-- X --><br />
<!-- Y --><br />
<!-- Z --></div>
Noname