Подсказки (Tips)
root password
# Если забыли пароль root, кроме восстановления # с live-flash есть такой вариант, # если юзер в sudoers $ sudo -u root passwd # Потом вводим новый пароль, подтверждаем.
Read more
man su; man sudo; man passwd
if else
# Разберём простым примером. $ ZP=10000 # зарплата рублей в месяц $ CRDT=5000 # ежемесячный платёж по кредиту $ EAT=15000 # ежемесячные расходы (ком-лка, еда...) $ RES=$((ZP-EAT)) $ if (( "$RES" < "$CRDT" )); then \ echo "Чувак, ты в жопе. Кредит платить нечем."; \ else echo "Чувак, признавайся, ты ограбил банк???"; fi
Read more
man bash
diff patch
# Вывести только различия файлов $ diff -q 1.sh 2.sh # Вывести в 2 колонки $ diff -y 1.sh 2.sh | less # Создать патч $ diff -u 1.sh 2.sh > crack # Применить патч в новый файл $ patch 1.sh -i crack -o newfile.sh # Создать патч для каталога $ diff -ruN original edit > crack # Применить патч принудительно # -pl - кол-во игнор. подкаталогов $ patch -pl -f -d original < crack # Отменить патч -r $ patch -r -pl -f -d original < crack
Read more
man diff && man patch
XDG_CURRENT_DESKTOP
# Переменная окружения, которая принимают # своё значения только при запуске X-Window. # Определяется в Gnome, KDE, XFCE4, как минимум. # Чтобы определить доступен ли X-Window: $ if [ -z "$XDG_CURRENT_DESKTOP" ]; \ then echo "X достуен"; \ else echo "Текущая сессия в чистом терминале"; \ fi # Это нужно в тех случаях, когда скрипт # планируется исполнять как локально, # так и через SSH.
Read more
wiki.archlinux.org/index.php/Environment_variables
pkexec
# sudo для X-Windows (KDE, Gnome, XFCE4 и т.д.) $ pkexec --user root ls # Выйдет предложение ввести пароль юзера без терминала
Read more
man pkexec
zenity
# Поможет сделать графический интерфейс из скрипта bash # Это из категории dialog и xdialog. К примеру, зададим # вопрос пользователю, и отреагируем соответственно: $ if zenity --question --text="Вы согласны, что Linux крут?"; \ then echo "Да"; else echo "Нет"; fi # Появится диалоговое окно с нашим текстом вопроса. # Если нажмём "Yes", в терминале выйдет "Да". # zenity способен на простые диалоговые окна, которые # избавляют от необходимости открывать терминал для # простых, ежедневных, рутинных задач.
Read more
man zenity
ntp systemd-timesyncd
# При рассинхронизации времени в компе $ sudo timedatectl set-ntp true # Это заставит синхронизироваться. # Чтобы узнать текущее состояние службы $ timedatectl status
Read more
wiki.archlinux.org/index.php/Systemd-timesyncd
pacman
# Избавляемся от ненужных зависимостей # и ошибок при обновлении ------------------------------------------ #!/bin/bash error_list=$(pacman -Qdt | cut -d " " -f1) for i in ${error_list[*]} do pacman -Rns $i --noconfirm done pacman -Syyu --noconfirm mkinitcpio -P grub-mkconfig -o /boot/grub/grub.cfg
Read more
https://wiki.archlinux.org/index.php/Pacman
gksu pkexec
# В Ubuntu Bionic 18.04 нет gksu # Вместо gksu надо использовать # pkexec $ pkexec command params
sshfs fuse
# Монтируем/размонтируем директории с удалённых машин по SSH. # Debian: $ sudo aptitude install sshfs fuse-utils # Arch/Manjaro: $ sudo pacman -S sshfs fuse # Далее создадим точку монтирования с нужными правами $ sudo mkdir /home/Z; sudo chown "$USER":"$USER" /home/Z # Скрипт ~/.local/bin/Rdrive будет монтировать, если в # директории /home/Z будет пусто. И размонтирует, если файлы есть. ------------------------------------------------------------------ #!/bin/bash F=$(ls /home/Z/) if [[ -z $F ]]; then sshfs RUSER@RMACHINE:/home/user /home/Z else fusermount3 -u /home/Z fi
Read more
https://wiki.archlinux.org/index.php/SSHFS
VirtualBox
# Иногда приходится выключить виртуалки, чтобы перезагрузить машину после # обновления ядра, к примеру. Но удалённо, по SSH, не каждый знает, как это # сделать. Да и запомнить сложно. Узнаём список виртуалок: $ VBoxManage list vms "XP" {00xx00x0-90f8-4603-897c-x0000000000x} "Debian" {xx00xx00-3759-43e5-be49-x0000000000x} # Скриптанём, немножечко. ~/.local/bin/VMcontrol.sh ---------------------------------------------------- #!/bin/bash case $1 in start) VBoxManage startvm --type headless Debian VBoxManage startvm --type headless XP;; stop) VBoxManage controlvm Debian acpipowerbutton VBoxManage controlvm XP acpipowerbutton;; kill) VBoxManage controlvm Debian poweroff VBoxManage controlvm XP poweroff;; *) echo "Usage: VMc start|stop";; esac
Read more
https://www.virtualbox.org/manual/ch08.html
aria2c
# aria2 - пакет присутствует в популярных дистрах Linux. # Позволяет скачивать файлы в несколько потоков. # следующий скрипт позволяет не вспоминая опций запустить # загрузк в 10 потоков, с возможностью докачки частично скачанного # файла, в директорию ~/Загрузки/ ------------------------------------------------ ~/.local/bin/a2 ------------------------------------------------ #!/bin/bash if [[ -z $1 ]] then echo -e "\e[31;1mUsage: a2 https://url\e[0m" exit fi B=$(basename $1) aria2c -c -j 10 -o "~/Загрузки/$B" $1 echo -e "\e[32;mСохранёно в ~/Загрузки/$B\e[0m"
Read more
man aria2
iconv
# Утилита перекодировки. Позволяет перекодировать, # к примеру, из WINDOWS-1251 в UTF-8, но не только. $ iconv -f WINDOWS-1251 -t UTF-8 -o ./utf-8.txt windows1251.txt # -f Исходная кодировка # -t Результирующая кодировка # -o file Выходной файл. Без этой опции выхлоп в STDOUT
Read more
man iconv
shred
# Абсолютное удаление файла с полным изменением # содержимого секторов, где хранился файл. # Традиционно удалить файл, без затирания: $ shred file2del.txt # Затереть и удалить: $ shred -u file2del.txt # Перезатереть 20 раз и удалить (имеет смысл для # блинных дисков): $ shred -u -n 20 file2del.txt
Read more
man shred
AUR
# Большинство пользователей семейства Archlinux используют помощники # установки из AUR (yay, pamac, aurman...). Мало кто задумывается, # что установка из AUR очень проста без помощников. К тому же, # ни что не мешает сделать скрипт. Пример ручной установки из AUR $ git clone https://aur.archlinux.org/yandex-browser-beta.git $ cd yandex-browser-beta $ makepkg -sri # Оскриптуем это. ~/.local/bin/aur.sh ------------------- #!/bin/bash git clone "https://aur.archlinux.org/$1.git" cd "$1"; cat PKGBUILD echo "Продолжаем установку? [y/N]"; read -rn 1 Q if [[ "$Q" == "y" ]]; then makepkg -sri; fi -------------------
Read more
wiki.archlinux.org/index.php/Arch_User_Repository
ccrypt
# Шифрует файл, основан на шифре Риндаэля (Rijndael). $ yay ccrypt # Archlinux $ sudo apt install ccrypt # Ubuntu $ ls test.file $ ccencrypt test.file Enter encryption key: Enter encryption key: (repeat) # encryption key - это ключ шифра $ ls test.file.cpt $ ccdecrypt test.file Enter decryption key: $ ls test.file
Read more
http://ccrypt.sourceforge.net/
sed awk
# Полезные регулярки для конвееров # Удаляем пустые строки $ awk "!/^$/{print $0}" # Удаляем пробелы в начале строки $ sed "s/^[ \t]*//" # Вывести из всей строки определённое слово. # от положения .* зависит какая часть найденного будет выведена # Добавьте .* в начало и конец искомого слова, только оно и выйдет $ sed -n '/Intel/{s/.*Intel/Intel/;s/ .*$//;p}' $ sed -n '/Intel/{s/Intel.*/Intel/;s/ .*$//;p}' $ sed -n '/Intel/{s/.*Intel.*/Intel/;s/ .*$//;p}' # Вывести искомое слово, задав разделитель $ awk '/Intel/' RS=" "
Read more
man sed; man awk
var
# Ещё полезности с переменными $ tits="arse" $ arse="cheese" $ echo "${!tits}" cheese $ eval echo $`echo "$tits"` cheese $ eval echo $(echo "$tits") arse
Read more
man bash
Xrestart
# Иногда X наглухо виснет и не реагирует. # В VK подсказали ещё несколько лайф-хаков. # Для тех у кого не lightdm $ sudo systemctl restart display-manager # Кроме того, существуют сочетания клавиш. # Вот несколько вариантов: SysRq+Alt+R # Перехват управления мышь/клавиатура SysRq+Alt+K # Убивает процессы в текущем TTY SysRq+Alt+E # SIGTERM всем процессам кроме init
Read more
https://ru.wikipedia.org/wiki/SysRq
Xrestart
# Иногда X наглухо виснет и не реагирует. # Можно переключиться в TTY и ребутнуть его. # Нажимаем CTRL+ALT+F2, вводим логин и пароль, выполняем: # Archlinux/Manjaro $ sudo systemctl restart lightdm # Debian (и подобные) может отличаться $ sudo service lightdm restart # X перезагрузится и предложит ввести пароль. # Или сразу войдёт в систему, если настроен автовход.
Read more
https://wiki.archlinux.org/index.php/LightDM
rhvoice
# Заставим комп разговаривать. Для Archlinux есть в AUR пакеты $ yay rhvoice-git и rhvoice-dictionary-git. # Для других систем можно собрать из github $ exo-open --launch WebBrowser \ https://github.com/Olga-Yakovleva/RHVoice # Послушаем Анну $ echo "Привет мир! Меня зовут Анна." | RHVoice-test -p Anna # Доступны 4 голоса: Anna, Irina, Elena и Aleksandr # Послушаем Александра. $ echo "Привет мир! Меня зовут Александр." | RHVoice-test -p Aleksandr # Можно озвучивать и файлы. Не только стандартный вывод.
Read more
RHVoice --help
Видео по этой подсказке
pidof
# Один из вариантов оповещения о запущенных/незапущенных # сервисах на сервере. Добавляется в .bashrc .bashrc -------------------------------------------------------- . . . RED='\033[32m'; BLACK='\033[0m'; GREEN='\033[0;32m' PIDS=("apache2" "postgresql") # перечисляем процессы for P in ${PIDS[*]}; do if [ "$(pidof ${P})" ] then echo -e "${P} [$GREEN OK $BLACK]" else echo -e "${P} [$RED FAIL $BLACK]" fi done . . . --------------------------------------------------------
Read more
man pidof
whatis
# Подскажет, что за команда $ whatis dd dd (1) - convert and copy a file $ whatis mc mc (1) - Визуальная оболочка для Unix-подобных систем. $ whatis ls ls (1) - list directory contents # Если установлен переводчик translate-shell $ whatis ls | trans -b ls (1) - список содержимого каталога
Read more
man whatis
Подсказки nixscript
# Как искать нужную подсказку? Примерно так: В ВК через браузер $ exo-open --launch WebBrowser https://vk.com/nixscript/hwinfo # Обычно подсказки с хештегом, здесь указан "hwinfo". # На стене nixscript, можно поиском по стене. # В самом верху ленты постов слева, есть маленький значок лупы. # Нажмите на неё, впишите ключевое слово и нажмите Enter на # клавиатуре. # На сайте через браузер. $ exo-open --launch WebBrowser https://nixscript.ru/tips # Затем CTRL+F и в поле поиска вводите ключевое слово. # На сайте через терминал. $ curl https://nixscript.ru/sh?tips # Весь список подсказок $ curl https://nixscript.ru/sh?tips=hwinfo # Подсказка по # команде hwinfo.
hwinfo
# hwinfo выдаёт информацию об устройствах. # К примеру полная информация о беспроводной сети $ hwinfo --wlan # краткая сводка по всем устройсвам $ hwinfo --short # кратко о дисках $ hwinfo --short --storage --block # только sda $ hwinfo --short --block --only /dev/sda # Полная информация о всех устройствах выльется в очень длинный список. # Лучше сохранить в файл $ hwinfo >hwinfo.txt # или запускать через less/more $ hwinfo | less
Read more
hwinfo --help
Видео по этой подсказке
git
# Клонируем репозиторий на свой комп $ git clone https://github.com/nixscript/cheat.sh_plus_trans.git # теперь он в cheat.sh_plus_trans. Идём туда и смотрим что там $ cd cheat.sh_plus_trans; ls cheat.sh _config.yml LICENSE Makefile README.md # Можем править файлы $ echo -e "\nGo to [nixscript.ru/tips](https://nixscript.ru/tips) \ for get some tips! " >>README.md # Фиксируем изменения и коммитим $ git add . $ git commit -m "Add link to nixscript.ru/tips" # Пушим (отправляем) изменения в репозиторий на github.com $ git push Username for 'https://github.com': grigruss Password for 'https://grigruss@github.com': ... To https://github.com/nixscript/cheat.sh_plus_trans.git 1340b3c..5158395 master -> master
Read more
man git
Видео по этой подсказке
paste
# paste выводит строки из двух файлов в одну, # благодаря чему легко сравнивать различия. # Подготовим два файла. $ for ((i=1; i<=3; i++)); do echo "$i файл слева" >>left.txt; done $ for ((i=1; i<=3; i++)); do echo "$i файл справа" >>right.txt; done # Теперь выведем оба файла командой paste $ paste left.txt right.txt 1 файл слева 1 файл справа 2 файл слева 2 файл справа 3 файл слева 3 файл справа
Read more
man paste
Видео по этой подсказке
lsblk
# Информативный и довольно простой способ # посмотреть информацию о дисках $ lsblk -o NAME,SIZE,UUID,TYPE,MOUNTPOINT NAME SIZE UUID TYPE MOUNTPOINT sda 119,2G disk ├─sda1 300M 32B6-E2D4 part /boot/efi ├─sda2 110,2G 59b5f972-0e61-4e0e-808e-0cc35788ffb3 part / └─sda3 8,8G 6d60518f-131a-4783-b88b-1a0ad8d1e3a8 part [SWAP] sdb 223,6G disk └─sdb1 223,6G c957588b-94f1-4bce-96d6-1fc897a26728 part /mnt/240 # Как видите, всё красиво скомпановано.
Read more
man lsblk
Видео по этой подсказке
fdisk
# Выясняем, что за диски у нас есть. # Сначала получим список устройств $ ls -1 /dev/sd? /dev/sda /dev/sdb # Теперь посмотрим какие разделы есть на диске "sda" $ sudo fdisk -l /dev/sda ... Устр-во начало Конец Секторы Размер Тип /dev/sda1 4096 618495 614400 300M EFI /dev/sda2 618496 231612850 230994355 110,2G Файловая система Linux /dev/sda3 231612851 250067789 18454939 8,8G Linux своп # на диске "sdb" $ sudo fdisk -l /dev/sdb ... Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип /dev/sdb1 2048 468860927 468858880 223,6G 83 Linux # Куда примонтирован "sdb" $ mount | grep /dev/sdb /dev/sdb1 on /mnt/240 type ext4 (rw,noatime,discard)
Read more
man fdisk
Видео по этой подсказке
free
# Ещё один способ добывать нужные данные # Загоняем нужное в переменную "memory" $ memory=$(free | awk 'NR==2{printf "%sMB / %sMB (%.2f%%)\n", $3,$2,$3*100/$2}') # и пользуемся $ echo "$memory" 3074MB / 7895MB (38.94%)
Read more
man free; man awk
Видео по этой подсказке
free
# Получаем объём используемой оперативной памяти # в текущую секунду. $ free -m | awk '/Mem/{print "MEM_USED:" $3 "Mb"}' free: Multiple unit options doesn't make sense. # Упс! Похоже алиас стоит... $ alias alias egrep='egrep --colour=auto' alias fgrep='fgrep --colour=auto' alias free='free -m' # Вот он. alias grep='grep --colour=auto' alias more='less' # Корректируем команду $ free | awk '/Mem/{print "MEM_USED:" $3 "Mb"}' MEM_USED:2880Mb # Готово!
Read more
man free; man awk
nixscript.ru
# Чтобы получить список имеющихся статей: $ curl https://nixscript.ru/sh?md # Получить конкретную статью из списка, добавьте знак равно и ID статьи $ curl https://nixscript.ru/sh?md=svg1 # Получить список подсказок (Tips): $ curl https://nixscript.ru/sh?tips # Получить подсказки по ключевому слову: $ curl https://nixscript.ru/sh?tips=ssh # Установить клиент nixscript.ru локально: $ mkdir ~/.local/bin $ wget -O ~/.local/bin/ns.sh https://nixscript.ru/dl/ns.sh $ chmod +x ~/.local/bin/ns.sh # Если путь ~/.local/bin не прописан в $PATH: $ if ! echo $PATH | grep '$HOME/.local/bin'; \ then echo "export PATH='$PATH:$HOME/.local/bin'" >>~/.bashrc; \ echo "Ок. Путь прописали."; else \ echo -e "Путь прописан:\n\t$PATH"; fi
Read more
curl https://nixscript.ru/sh?help
Видео по этой подсказке
find awk
# VK@alesc: Эта команда позволяет мне узнать продолжительность # видео обучающего курса в сумме. Мб кому еще пригодится. # VK@alesc: This command allows me to find out the duration of # the training video in total. Mb someone else will come in handy. $ find . -regex '.*\.\(avi\|mp4\|flv\|mkv\|mpg\|mpeg\|mov\)' \ -type f -exec mediainfo —Inform="General;%Duration%" \ {} \; | awk '{s+=$1} END {print s/60/60/1000}' # Выводит сумму продолжительности видео в текущей папке # и подпапках в часах. # Displays the sum of the duration of the video in the current # folder and subfolders in hours.
Read more
man find; man awk
ffmpeg
# Пишем с экрана. Запуск из терминала. # Record display video. Launch from terminal. $ echo 'pcm.!default { type pulse } ctl.!default { type pulse }' >~/.asoundrc # Без звука (No sound) $ ffmpeg -f x11grab -y -rtbufsize 100M -s 1920x1080 -framerate 30 \ -probesize 10M -draw_mouse 1 -i :0.0 -c:v libx264 -r 30 -preset ultrafast \ -tune zerolatency -crf 25 -pix_fmt yuv420p "$(date +%Y-%m-%d_%H:%M:%S).mp4" # Со звуком mp3 (With mp3 sound) $ ffmpeg -f alsa -i default -c:a libmp3lame -acodec mp3 -f x11grab -y \ -rtbufsize 100M -s 1920x1080 -framerate 30 -probesize 10M -draw_mouse 1 \ -i :0.0 -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 \ -pix_fmt yuv420p "$(date +%Y-%m-%d_%H:%M:%S).mp4" # Список кодеков (List of codecs) $ ffmpeg -codecs
Read more
man ffmpeg
Видео по этой подсказке
ssh-keygen
# Генерируем ключ, настраиваем ~/.ssh/config # и прописываем ключ на удалённой машине. # Generate key, add settings into ~/.ssh/config # and send the key on to remote.comp $ ssh-keygen -t rsa -b 4096 -C "$(whoami)@$(hostname)" $ echo "Host remote.comp" >>~/.ssh/config $ echo "HostName 192.168.1.2" >>~/.ssh/config $ echo "Port 8022" >>~/.ssh/config $ echo "User login" >>~/.ssh/config $ ssh-copy-id remote.comp # Connection after that $ ssh remote.comp $ sftp://remote.comp
Read more
man ssh; man ssh-keygen; man ssh-copy-id
Видео по этой подсказке
xrandr
# Узнаем разрешение экрана $ xrandr -q Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767 DP1 disconnected (normal left inverted right x axis y axis) HDMI1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 1020mm x 570mm 1920x1080 60.00*+ 50.00 59.94 30.00 25.00 24.00 29.97 23.98 1920x1080i 60.00 50.00 59.94 1600x1200 60.00 ... # Много лишнего ... $ xrandr -q | grep '\*' 1920x1080 60.00*+ 50.00 59.94 30.00 25.00 24.00 29.97 23.98 # Много лишнего ... $ xrandr -q | grep '\*' | cut -d ' ' -f1,2,3,4 1920x1080 # Лишние пробелы ... $ xrandr -q | grep '\*' | cut -d ' ' -f1,2,3 $ xrandr -q | grep '\*' | cut -d ' ' -f4 1920x1080 # Готово!
Read more
man xrandr; man grep; man cut
recordmydesktop
# Капризная, но удобная утилита # записи видео с экрана. $ sudo apt install recordmydesktop # Debian $ sudo pacman -S recordmydesktop # Archlinux # Запись FullHD без панели $ recordmydesktop -y 33 --height 1047 --width 1920 -o test # Прервать запись - Ctrl+C # Сразу начнёт конвертировать в OGV и сохранит в ./test.ogv # Требует больше оперативки и много места на диске.
Read more
man recordmydesktop
shellcheck
# Если хотите, чтобы скрипт работал # без ошибок на большинстве дистрибутивов # пользуйтесь shellcheck. Это проверка # синтаксиса. Установка: $ pacman -S shellcheck # Archlinux $ apt-get install shellcheck # Debian # Проверка скрипта: $ shellcheck script.sh
Read more
https://github.com/koalaman/shellcheck
SECONDS
# $SECONDS - кол-во секунду с момента # запуска shell. # Узнаем кол-во секунд на промежутке времени: $ echo "$SECONDS" 1949 $ etime="$SECONDS" # Спустя время ... $ echo $((SECONDS-etime)) 60 # Прошло 60 секунд.
Read more
man bash
substring
# Обрезаем строку $ VAR="abcde" $ echo "${VAR:0}" abcde $ echo "${VAR:2:2}" cd $ echo "${VAR:-3}" abcde $ echo "${VAR: -3}" cde $ echo "${VAR:(-4)}" bcde
Read more
man bash
Проверяем скрипт на безопасность
# 'source' и '.' могут быть опасны скриптах, поэтому прежде чем # запускать незнакомый скрипт, взятый с неизвестного источника, # стоит проверить его на вредность. И так скрипт: $ cat script.sh #!/bin/bash source "./test.txt" . "./test.txt" # . работает как source echo "ok"; . "./test.txt" _test_func "Раз" "Два" # Проверим его $ grep -E '(\. |source)' script.sh | grep -v -E '#.*(\. |source)' source "./test.txt" . "./test.txt" echo "ok"; . "./test.txt" # Таким образом, мы видим только те строки, в которых может быть # явная опасность. Но и этого может быть недостаточно.
source
# Позволяет выполнять список команд из # любого файла, в котором они перечислены. $ echo "echo -e \"Проверка\"" >test.txt $ source test.txt Проверка
Read more
man source
{}
# Замена подстроки $ V="1a2b3c4d%;&9" $ echo "${V//[0-9]/}" abcd%;& $ echo "${V//[^0-9]/}" 12349 $ echo "${V//[0-9a-z]/}" %;& $ echo "${V//[^0-9a-z]/}" 1a2b3c4d9
Read more
lynx /usr/share/doc/bash/bash.html
{}
# Замена подстроки $ V="Абыр валГ" $ echo "${V//А/а}" абыр валГ $ V="#Абыр #валГ" $ echo "${V//#/}" Абыр валГ $ echo "${V//#/&}" &Абыр &валГ
Read more
lynx /usr/share/doc/bash/bash.html
cheat.sh
# Переводчик подсказок cheat.sh # Производит запрос "curl cht.sh/cmd", переводит комментарии # на язык локали и выдаёт в stdout $ wget -O ~/.local/bin/cheat.sh \ https://github.com/nixscript/cheat.sh_plus_trans/raw/master/cheat.sh $ chmod +x ~/.local/bin/cheat.sh # С подсвеченными комментариями $ cheat.sh ls # Без подсветки $ cheat.sh -T ls
Read more
https://github.com/nixscript/cheat.sh_plus_trans
let
# Чётное ли число? (thank's vk@disable_enable) $ let 6%2 || echo Yes Yes # Increment and decrement $ VAR=0; let VAR++; echo $VAR 1 $ VAR=0; let VAR--; echo $VAR -1 $ VAR=0; let ++VAR; echo $VAR 1 $ VAR=0; let --VAR; echo $VAR -1
Read more
man let
tee
# Запись выхлопа команды в файл $ ls | tee flist.txt Видео Документы ... # Добавить выхлоп в конец того же файла $ ls -a | tee -a flist.txt . .. .bash_history .bash_logout ...
Read more
man tee
ku-ku
#!/bin/bash # Часы с кукушкой. Добавьте в CRON. GIF="$HOME/Изображения/ku-ku.gif" AUDIO="$HOME/Музыка/ku-ku.mp3" GIFVIEW="viewnior" # Программа просмотра изображений APLAYER="mpg123" # mpg123 - самый удобный проигрыватель $APLAYER "$AUDIO" & # Звук дольше соображает sleep 1 $GIFVIEW "$GIF" & # Открываем гифку sleep 3 pkill "$GIFVIEW" # Закрываем гифку через 3 сек. # Звук прибивать не надо. Сам затихнет.
bg
# Перевод заданий в фоновый режим. # Переводит указанные задания в фоновый режим, # как если бы они были запущены с «&». # Если задание не указано, используются данные # текущего задания. # Переводим процесс в фон во время выполнения $ find / -type f -name *.txt ... ^Z $ bg $
Read more
man bg
DE
# Делаем backup настроек DE. # Укажите путь и сохраните этот код в конец ~/.xinitrc $ BCKP="/path/to/backup" # путь архивов # Определяем дату удаления старого архива $ RMD=$(($(date +%s)-(60*60*24*7))) $ RMD=$(date --date="@$RMD" +%Y-%m-%d) # Удаляем старый архив $ rm -f "$BCKP/$RMD.tar.zst" # Создаём свежий backup. Определяем текущую дату $ DN=$(date +%Y-%m-%d) $ tar -cf "$BCKP/$DN.tar" ~/.config # Архивируем и удаляем лишнее $ zstd -19 "$BCKP/$DN.tar; rm -f "$BCKP/$DN.tar" # Если нет zstd, замените zstd -19 на gzip -9
Read more
man date; man tar; man zstd
DE
# Сбрасываем DE по-умолчанию после # сбоя или кривых рук. $ mv ~/.config ~/.config.old # и перевходим в систему. # Чтобы безвозвратно удалить глючные настройки $ rm -rf ~/.config
Read more
wiki.archlinux.org/index.php/Desktop_environment
cht.sh
# Tips (Linux, языки программирования и т.д.) $ curl cht.sh # Установить клиент: $ mkdir ~/bin $ curl https://cht.sh/:cht.sh > ~/bin/cht.sh $ chmod +x ~/bin/cht.sh # или установит глобально (для все юзеров): $ curl https://cht.sh/:cht.sh | sudo tee /usr/local/bin/cht.sh $ chmod +x /usr/local/bin/cht.sh # Usage: $ cht.sh ls $ cht.sh --shell php file_put_contents $ cht.sh --shell sql insert ...
Read more
https://github.com/chubin/cheat.sh
PackageQuery
# Ищем явно установленные пакеты в Archlinux $ su $ pacman -Qe accountsservice 0.6.55-1 acpi 1.7-2 acpid 2.0.32-1 ... # Ищем пакеты из AUR $ pamac list -i | grep "AUR" browsh 1.6.4-1 AUR 11,0 MB virtualbox-ext-oracle 6.0.14-1 AUR 14,3 MB yandex-browser-beta 19.9.3.358_1-2 AUR 228,9 MB
Read more
man pacman; pamac --help
CmdLine
# Избавляемся от номера версии в названии пакета $ echo "package-name-ver123.456s78ion-9" \ | rev | cut -d "-" -f3-9 | rev package-name
Read more
man bash
until
until ping -c 3 ya.ru do echo 'О чёрт, всё ещё не работает.' # 5min done echo 'Ok, работает.'
Read more
https://habr.com/ru/post/52871/
notify-send
#!/bin/bash # Проверка доступности сайта с выводом уведомления while [ 1 == 1 ] do if ping -c 3 nixscript.ru then notify-send -u critical -i ~/images/icon.png \ 'PING ПРОШЁЛ УСПЕШНО' exit else notify-send -i ~/images/icon.png \ 'Пока недоступен...' sleep 300 fi done
Read more
notify-send --help
HISTTIMEFORMAT
$ history 503 history 504 history | head -n 3 505 history $ export HISTTIMEFORMAT="%F %T " $ history 505 2019-11-06 10:12:15 history 506 2019-11-06 10:12:53 export HISTTIMEFORMAT="%F %T " 507 2019-11-06 10:12:57 history
Read more
man history
ssh
# Local machine $ du -sh ~/ 84G /home/user/ # Remote machine $ ssh remote@192.168.0.5 du -sh ~/ 120G /home/remote/
Read more
man ssh
var
$ var="nixscript" $ echo ${var^} Nixscript $ echo ${var^^} NIXSCRIPT $ var="NIXSCRIPT" $ echo ${var,} nIXSCRIPT $ echo ${var,,} nixscript $ var="NixScript" $ echo ${var~} nixScript $ echo ${var~~} nIXsCRIPT
Read more
man bash
apt (Debian)
# Обновление одной командой # Update/upgrade by one command $ su $ apt update && apt upgrade
Read more
man bash; man apt
zstd
# ZStandart $ tar -cf archive.tar local/dir # -1 без сжатия, быстро # -19 максимальное сжатие, медленно $ zstd -19 archive.tar $ rm archive.tar
Read more
man zstd
{}
$ ls file.txt $ mv file.{txt,doc} $ ls file.doc
Read more
man bash
ssh-copy-id
# Установка публичного ключа SSH на # удалённый компьютер # Для генерации ключа - 'ssh-keygen'. $ ssh-copy-id -p 22 login@remote.comp # Если настроен ~/.ssh/config, всё проще $ ssh-copy-id remote.comp
Read more
man ssh-copy-id
ssh-keygen
# Генерация ключа SSH $ ssh-keygen # Ключ 4096 bit RSA $ ssh-keygen -b 4096 -t rsa # По-умолчанию сохранит в ~/.ssh/id_rsa # и ~/.ssh/id_rsa.pub # Предложит указать другой путь.
Read more
man ssh-keygen
~/.ssh/config
Host remote.comp # Любое слово HostName 192.168.0.3 # IP или домен Port 8022 # Если 22, строка не нужна User login # Логин пользователя
Read more
man ssh
rsync
# Необходимый минимум # Туда $ rsync -avz local/src remote.com:/dest/ # Сюда $ rsync -avz remote.comp:/dest/src local/ # Туда, с удалением того, чего нету здесь $ rsync -avz --delete local/src \ remote.comp:/dest/
Read more
man rsync
chsh
# Change shell $ su $ chsh -s /bin/bash userlogin
Read more
man chsh
Inkscape
# inkscape использует python2 # При сохранении в оптимизированный svg # выдаёт ошибку. Решается установкой # библиотек python2 $ su $ pacman -Syu python2-lxml python2-scour
Read more
man inkscape
sendmail
$ (echo "Subject:Hi"; echo "Body mail";) \ | sendmail recepient@mail.ru
Read more
man sendmail; man bash
bash history
# Чтобы команда не хранилась в .bash_history # сделай это: $ HISTCONTROL="ignorespace:erasedups" $ echo "export HISTCONTROL='$HISTCONTROL'" \ >>.bashrc # Теперь, если команду начать с пробела # она не сохранится в .bash_history
Read more
man bash; man history
bc
# Calculate with float $ bc <<< "scale=4; (20+5)/2" 12.5000 $ bc <<< "scale=2; 3/2" 1.50
Read more
man bc
ffmpeg for yandex-browser-beta
# For Archlinux, Manjaro etc. $ su $ pacman -Syu opera-ffmpeg-codecs $ ln -s \ /usr/lib/opera/lib_extra/libffmpeg.so \ /opt/yandex/browser-beta/libffmpeg.so
Read more
man pacman; man ln
chmod
# Смена прав на файлы рекурсивно $ find ./ -type f -exec chmod 644 {} + # Смена прав на директории рекурсивно $ find ./ -type d -exec chmod 755 {} +
Read more
man chmod; man find
alsa (archlinux manjaro)
# Если звук при включении не работает $ cat /proc/asound/modules 0 snd_hda_intel $ echo "option snd_hda_intel index=0" \ > /etc/modprobe.d/alsa-base.conf
Read more
https://wiki.archlinux.org
stat
# Узнать подробности о файле $ stat /home $ stat -f /home
Read more
man stat
du
# Полный размер директории $ du -hs /home/user 100G /home/user
Read more
man du
pacman
# Если pacman заблокирован $ su $ rm -f /var/lib/pacman/db.lck
Read more
man pacman
$!
# Переменная '!' вернёт ID последнего # запущенного процесса $ sshd &[1] 1380 $ lastpid=$! $ echo $lastpid 1380 $ kill $lastpid
Read more
man bash
visudo
# Проверка синтаксиса /etc/sudoers $ su $ visudo
Read more
man visudo
HIER(7) Linux Programmer's Manual
hier - description of the filesystem hierarchy hier - Описание иерархии файловой системы
Read more
man 7 hier
rev
$ rev 12345 54321 revers strings sgnirts sreverпереворот строк кортс торовереп ^C
Read more
man rev
head tail
# 2 first rows from file $ head -n 2 file.txt 1 row 2 row # 2 last rows from file $ tail -n 2 file.txt 3 row 4 row
Read more
man head; man tail
seq
# generates a sequence of numbers # with a given step $ seq 3 1 2 3 $ seq 4 7 4 5 6 7
Read more
man seq
id
$ id -un grigruss $ whoami grigruss
Read more
man id; man whoami
tr
# Замена символов $ echo 'Str' Str
Read more
man tr
cut
$ date | cut -d ' -f4,5 08:58:49 MSK
Read more
man cut
convert
# Вывод списка доступных шрифтов $ convert -list font
Read more
man convert
Caddyfile
... rewrite { if {path} not_match ^\/img\/ r ^/(.*) to {path} /index.php?pages={1}} ...
Read more
https://caddyserver.com/docs
mapfile
# Read array of lines from stdout $ mapfile -t CHTSH < <(cht.sh ls) $ echo ${CHTSH[3]} # List directory contents. $ echo ${CHTSH[5]} # List files one per line: $ echo ${SHTSH[8]} #List all files, including hidden files:
Read more
help mapfile
select
$ select T in 'second' \ do echo "$T"; done 1) first 2) second #? 2 second #? 1 first #? ^C
Read more
help select
sed
$ echo 'some text' some text $ echo 's%^%-%; s%$%=%'-some text=
Read more
man sed
svgo
# Optimize SVG code # Install npm at first $ su $ npm install -g svgo $ svgo pict.svg pict.svg: Done in 485 ms! 62.839 KiB - 48.7% = 32.229 KiB
Read more
https://github.com/svg/svgo
js metrics-window
> window.innerWidth > window.innerHeight > element.clientWidth > element.clientHeight
Read more
https://learn.javascript.ru/metrics-window
bash ls grep wc sed cut
# Number of files $ ls -l | grep '^-' | wc | \ sed -e 's/^[ ]*//' | \ cut -d ' -f1 9
Read more
man bash
bash
# Range random from 1 to 10 $ echo 5 3 $ echo 4 7 $ echo 2 4 ...
Read more
man bash
date
$ date +%Y-%m-%d_%H:%M:%S 2019.05.19_22:38:42 $ date +%d-%m-%Y_%H:%M:%S 19.05.2019_22:38:43 ...
Read more
man date