logo

nixscript

Keep it simple, stupid !

Подсказки (Tips)

root password

# Если забыли пароль root, кроме восстановления
# с live-flash есть такой вариант,
# если юзер в sudoers
$ sudo -u root passwd
# Потом вводим новый пароль, подтверждаем.

Read more
man su; man sudo; man passwd

SVG PNG WEBP TXT MD


if else

# Разберём простым примером.
$ ZP=10000 # зарплата рублей в месяц
$ CRDT=5000 # ежемесячный платёж по кредиту
$ EAT=15000 # ежемесячные расходы (ком-лка, еда...)
$ RES=$((ZP-EAT))
$ if (( "$RES" < "$CRDT" )); then \
  echo "Чувак, ты в жопе. Кредит платить нечем."; \
else echo "Чувак, признавайся, ты ограбил банк???"; fi

Read more
man bash

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


pkexec

# sudo для X-Windows (KDE, Gnome, XFCE4 и т.д.)
$ pkexec --user root ls
# Выйдет предложение ввести пароль юзера без терминала
   

Read more
man pkexec

SVG PNG WEBP TXT MD


zenity

# Поможет сделать графический интерфейс из скрипта bash
# Это из категории dialog и xdialog. К примеру, зададим
# вопрос пользователю, и отреагируем соответственно:
$ if zenity --question --text="Вы согласны, что Linux крут?"; \
then echo "Да"; else echo "Нет"; fi
# Появится диалоговое окно с нашим текстом вопроса.
# Если нажмём "Yes", в терминале выйдет "Да".
# zenity способен на простые диалоговые окна, которые
# избавляют от необходимости открывать терминал для
# простых, ежедневных, рутинных задач.

Read more
man zenity

SVG PNG WEBP TXT MD


ntp systemd-timesyncd

# При рассинхронизации времени в компе
$ sudo timedatectl set-ntp true
# Это заставит синхронизироваться.
# Чтобы узнать текущее состояние службы
$ timedatectl status

Read more
wiki.archlinux.org/index.php/Systemd-timesyncd

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


gksu pkexec

# В Ubuntu Bionic 18.04 нет gksu
# Вместо gksu надо использовать
# pkexec
$ pkexec command params

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


shred

# Абсолютное удаление файла с полным изменением
# содержимого секторов, где хранился файл.
# Традиционно удалить файл, без затирания:
$ shred file2del.txt
# Затереть и удалить:
$ shred -u file2del.txt
# Перезатереть 20 раз и удалить (имеет смысл для
# блинных дисков):
$ shred -u -n 20 file2del.txt

Read more
man shred

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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/

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


var

# Ещё полезности с переменными
$ tits="arse"
$ arse="cheese"
$ echo "${!tits}"
cheese
$ eval echo $`echo "$tits"`
cheese
$ eval echo $(echo "$tits")
arse

Read more
man bash

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


Подсказки 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.

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

Видео по этой подсказке

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


shellcheck

# Если хотите, чтобы скрипт работал
# без ошибок на большинстве дистрибутивов
# пользуйтесь shellcheck. Это проверка
# синтаксиса. Установка:
$ pacman -S shellcheck # Archlinux
$ apt-get install shellcheck # Debian
   
# Проверка скрипта:
$ shellcheck script.sh

Read more
https://github.com/koalaman/shellcheck

SVG PNG WEBP TXT MD


SECONDS

# $SECONDS - кол-во секунду с момента
# запуска shell.
# Узнаем кол-во секунд на промежутке времени:
      
$ echo "$SECONDS"
 1949
$ etime="$SECONDS"
# Спустя время ...
$ echo $((SECONDS-etime))
 60
# Прошло 60 секунд.

Read more
man bash

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


Проверяем скрипт на безопасность

# '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"
# Таким образом, мы видим только те строки, в которых может быть
# явная опасность. Но и этого может быть недостаточно.

SVG PNG WEBP TXT MD


source

# Позволяет выполнять список команд из
# любого файла, в котором они перечислены.
$ echo "echo -e \"Проверка\"" >test.txt
$ source test.txt
Проверка

Read more
man source

SVG PNG WEBP TXT MD


{}

# Замена подстроки
$ 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

SVG PNG WEBP TXT MD


{}

# Замена подстроки
$ V="Абыр валГ"
$ echo "${V//А/а}"
абыр валГ
$ V="#Абыр #валГ"
$ echo "${V//#/}"
Абыр валГ
$ echo "${V//#/&}"
&Абыр &валГ

Read more
lynx /usr/share/doc/bash/bash.html

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


tee

# Запись выхлопа команды в файл
$ ls | tee flist.txt
Видео
Документы
  ...
# Добавить выхлоп в конец того же файла
$ ls -a | tee -a flist.txt
.
..
.bash_history
.bash_logout
  ...

Read more
man tee

SVG PNG WEBP TXT MD


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 сек.
# Звук прибивать не надо. Сам затихнет.

SVG PNG WEBP TXT MD


bg

# Перевод заданий в фоновый режим.
# Переводит указанные задания в фоновый режим,
# как если бы они были запущены с «&».
# Если задание не указано, используются данные
# текущего задания.
# Переводим процесс в фон во время выполнения
$ find / -type f -name *.txt
...
^Z
$ bg
$

Read more
man bg

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


DE

# Сбрасываем DE по-умолчанию после
# сбоя или кривых рук.
$ mv ~/.config  ~/.config.old
# и перевходим в систему.
# Чтобы безвозвратно удалить глючные настройки
$ rm -rf ~/.config

Read more
wiki.archlinux.org/index.php/Desktop_environment

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


CmdLine

# Избавляемся от номера версии в названии пакета
$ echo "package-name-ver123.456s78ion-9" \ 
  | rev | cut -d "-" -f3-9 | rev
package-name

Read more
man bash

SVG PNG WEBP TXT MD


until

until ping -c 3 ya.ru
do
  echo 'О чёрт, всё ещё не работает.' 
# 5min
done
  echo 'Ok, работает.' 

Read more
https://habr.com/ru/post/52871/

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


apt (Debian)

# Обновление одной командой
# Update/upgrade by one command
$ su
$ apt update && apt upgrade

Read more
man bash; man apt

SVG PNG WEBP TXT MD


zstd

# ZStandart
$ tar -cf archive.tar local/dir
# -1 без сжатия, быстро
# -19 максимальное сжатие, медленно
$ zstd -19 archive.tar
$ rm archive.tar

Read more
man zstd

SVG PNG WEBP TXT MD


{}

$ ls
file.txt
$ mv file.{txt,doc}
$ ls
file.doc

Read more
man bash

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


~/.ssh/config

Host remote.comp # Любое слово
HostName 192.168.0.3 # IP или домен
Port 8022 # Если 22, строка не нужна
User login # Логин пользователя

Read more
man ssh

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


chsh

# Change shell
$ su
$ chsh -s /bin/bash userlogin

Read more
man chsh

SVG PNG WEBP TXT MD


Inkscape

# inkscape использует python2
# При сохранении в оптимизированный svg
# выдаёт ошибку. Решается установкой
# библиотек python2
$ su
$ pacman -Syu python2-lxml python2-scour

Read more
man inkscape

SVG PNG WEBP TXT MD


sendmail

$ (echo "Subject:Hi"; echo "Body mail";) \
  | sendmail recepient@mail.ru

Read more
man sendmail; man bash

SVG PNG WEBP TXT MD


bash history

# Чтобы команда не хранилась в .bash_history
# сделай это: 
$ HISTCONTROL="ignorespace:erasedups"
$ echo "export HISTCONTROL='$HISTCONTROL'" \
  >>.bashrc
# Теперь, если команду начать с пробела
# она не сохранится в .bash_history

Read more
man bash; man history

SVG PNG WEBP TXT MD


bc

# Calculate with float
$ bc <<< "scale=4; (20+5)/2" 
12.5000
$ bc <<< "scale=2; 3/2" 
1.50

Read more
man bc

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


chmod

# Смена прав на файлы рекурсивно
$ find ./ -type f -exec chmod 644 {} +
# Смена прав на директории рекурсивно
$ find ./ -type d -exec chmod 755 {} +

Read more
man chmod; man find

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


stat

# Узнать подробности о файле
$ stat /home
$ stat -f /home

Read more
man stat

SVG PNG WEBP TXT MD


du

# Полный размер директории
$ du -hs /home/user
100G /home/user

Read more
man du

SVG PNG WEBP TXT MD


pacman

# Если pacman заблокирован
$ su
$ rm -f /var/lib/pacman/db.lck

Read more
man pacman

SVG PNG WEBP TXT MD


$!

# Переменная '!' вернёт ID последнего
# запущенного процесса
$ sshd &
[1] 1380
$ lastpid=$!
$ echo $lastpid
1380
$ kill $lastpid

Read more
man bash

SVG PNG WEBP TXT MD


visudo

# Проверка синтаксиса /etc/sudoers
$ su
$ visudo

Read more
man visudo

SVG PNG WEBP TXT MD


HIER(7) Linux Programmer's Manual

hier - description of the
filesystem hierarchy
hier - Описание иерархии файловой системы

Read more
man 7 hier

SVG PNG WEBP TXT MD


rev

$ rev
12345
54321
revers strings
sgnirts srever
переворот строк
кортс торовереп
^C

Read more
man rev

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


id

$ id -un
grigruss
$ whoami
grigruss

Read more
man id; man whoami

SVG PNG WEBP TXT MD


tr

# Замена символов
$ echo 'Str'
Str

Read more
man tr

SVG PNG WEBP TXT MD


cut

$ date | cut -d ' -f4,5
08:58:49 MSK

Read more
man cut

SVG PNG WEBP TXT MD


convert

# Вывод списка доступных шрифтов
$ convert -list font

Read more
man convert

SVG PNG WEBP TXT MD


Caddyfile

...
rewrite {
if {path} not_match ^\/img\/
r ^/(.*)
to {path} /index.php?pages={1}
}
...

Read more
https://caddyserver.com/docs

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


select

$ select T in 'second' \
  do echo "$T"; done
1) first
2) second
#? 2
second
#? 1
first
#? ^C

Read more
help select

SVG PNG WEBP TXT MD


sed

$ echo 'some text' 
some text
$ echo 's%^%-%; s%$%=%' 
-some text=

Read more
man sed

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


js metrics-window

  > window.innerWidth
  > window.innerHeight
  > element.clientWidth
  > element.clientHeight

Read more
https://learn.javascript.ru/metrics-window

SVG PNG WEBP TXT MD


bash ls grep wc sed cut

# Number of files
$ ls -l | grep '^-' | wc | \
  sed -e 's/^[ ]*//' | \
  cut -d ' -f1
9

Read more
man bash

SVG PNG WEBP TXT MD


bash

# Range random from 1 to 10
$ echo 5
3
$ echo 4
7
$ echo 2
4
...

Read more
man bash

SVG PNG WEBP TXT MD


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

SVG PNG WEBP TXT MD


Вверх 🡑