Advertisement
D0cEvil

Bash - something interesting

Jan 4th, 2023
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 20.42 KB | Software | 0 0
  1. #!/bin/bash
  2. #Команда ниже покажет вам ваш внешний IP - это идеальный вариант, если в Сеть вы входите используя роутер.
  3. #Эта команда обращается к серверу ifconfig.co, который возвращает IP одной строкой без лишней писанины которая вам не #нужна.
  4.  
  5. curl ifconfig.co
  6.  
  7. #Да, это не скрипт, это небольшая команда, но если вы хотите превратить эту команду в скрипт,
  8. #вам достаточно поместить ее в текстовый файл, в итоге у нас получится небольшой bash скрипт:
  9.  
  10. #!/bin/bash
  11. curl ifconfig.co
  12.  
  13. #Сохраняeм скрипт в каталог ~/bin и даем права на исполнение:
  14.  
  15. chmod +x ~/bin/yourip.sh
  16.  
  17. #Почти готово, вы можно исполнить скрипт из командной строки используя команду yourip.sh.
  18.  
  19. #C айпи закончили, посмотрим погоду с консоли.
  20. #Сводка погоды в консоли
  21.  
  22. #!/bin/sh
  23. curl -4 wttr.in/Kiev
  24.  
  25. #Этот скрипт позволяет получить сводку погоды на четыре дня, в данном случае погода для города Киев.
  26. #!/bin/sh
  27. dig +short txt $1.wp.dg.cx
  28.  
  29. #Выше вы видите пример, как можно получить краткое описание чего-нибудь в Википедии, в нашем случае мы используем
  30. #DNS-запрос вместо обращения к веб-серверу. Веб-сервер через консоль также очень легко создать:
  31.  
  32. #!/bin/sh
  33. while ( nc -l 80 < file.html > : ) ; do : ; done
  34.  
  35. #Скрипт выше основан на утилите netcat (nc), часто ее называют швейцарским армейским ножом,
  36. #так как позволяет вытворять много трюков для сетевых опeраций. Скрипт простой он запускает
  37. #цикл, который выполняет команду nc, та уже слушает 80-й порт и в ответ на запрос отдает file.html,
  38. #отправляя переданный запрос в никуда (символ означает noop, то есть пустую операцию).
  39.  
  40. #Используя простые скрипты и команд, вы можете слушать интернет-радио:
  41.  
  42. #!/bin/sh
  43.  
  44. mpv --volume=50 -playlist ~/16bit.fm_128.m3u
  45.  
  46. #Конечно, до этого вам нужно скачать плей-лист радио в формате M3U с сайта радиостанции.
  47. #Если зaпустить MPlayer используя аргумент —input-ipc-server=/tmp/mpvsocket, им можно будет управлять,
  48. #записывая команды в файл. Например, настроить громкость:
  49.  
  50. echo 'volume +10' | socat - /tmp/mpvsocket
  51.  
  52. #Создаем два скрипта: первый для запуска, а другой для остановки радио (в котором мы пропишем строку killall mpv),
  53. #далее повесь на рабочий стол совместно настроив горячие клавиши DE для управления воспроизведением.
  54. #И готово, вы имеете плеер с помощью которого вы можете заускать интернет-радио.
  55.  
  56. #Увлеклись сетевыми операциями, перейдем к локальным.
  57.  
  58. #!/bin/sh
  59.  
  60. tar -czf "../${PWD##*/}.tar.gz" .
  61.  
  62. #Это скрипт создает архив tar.gz для текущего кaталога. Особое внимание нужно уделить конструкции ${PWD##*/},
  63. #которая бeрет весь путь до текущего каталога (переменная $PWD) далее удаляет первую чаcть до последнего слеша,
  64. #в итоге остается лишь имя каталoга и к нему добавляется расширение tar.gz. Если вы хотите узнать больше информации
  65. #по подобных конструкциях, вы можете прочитать выполнив в консоли команду man bash.
  66.  
  67. #!/bin/sh
  68. while true; do
  69.  inotifywait -r -e MODIFY КАТАЛОГ && ТВОЯ_КОМАНДА
  70. done
  71.  
  72. #Скрипт выше запускает команду в ответ на изменение файлов в каталоге. Вы ее можете применять для разных целей, как пример для
  73. #автоматического включения плеера при сохранении MP3. Или же как пример выводить увeдомление на рабочий стол, используя команду
  74. #notify-send:
  75.  
  76. notify-send "Файл изменен"
  77.  
  78. ###### Для рабочего стола #####
  79.  
  80. #Ниже вы увидите пример скрипта, который загружает случайные обои, которые опубликованы на reddit-канале wallpaper:
  81.  
  82. #!/bin/bash
  83. wget -O - http://www.reddit.com/r/wallpaper |\
  84.  grep -Eo 'http://i.imgur.com[^&]+jpg' |\
  85.  shuf -n 1 |\
  86.  xargs wget -O background.jpg
  87. feh --bg-fill background.jpg
  88.  
  89. #Работает все довольно просто. Используя утилиту wget скрипт загружает страницу www.reddit.com/r/wallpaper, далее передает ее grep,
  90. #который уже ищет ссылки на imgur, и выбирает случайную с помощью shuf, загружает ее с помощью wget и устанавливает в качестве обоев
  91. #для вашего рабочего стола, используя команду feh (это миниатюрный просмотрщик изображений, который нужно предварительно устанoвить).
  92. #Вы этот скрипт можете добавить в обычный текстовый файл как я описывал выше, сохранить в формате sh, сделать исполняемым, добавить
  93. #к нему иконку и запускать с рабочего стола по клику и у вас будут меняться обои.
  94.  
  95. #!/bin/sh
  96. state=`synclient | grep TouchpadOff | cut -d '=' -f 2`
  97. if [ $state = "1" ]; then
  98.  synclient TouchpadOff=0
  99. else
  100.  synclient TouchpadOff=1
  101. fi
  102.  
  103. #Скрипт выше используется для включения и выключения тачпада вашего ноутбука: включает, если отключен, и наоборот.
  104. #Для корректной работы в нем используется утилита synclient, которая и позволяет управлять тачпадами которые в большинстве
  105. #производит Synaptics, это 90% возможно даже и более. После запуска утилита выводит много информации, так же строку
  106. #TouchpadOff = 1, если он активирован, и TouchpadOff = 2, если отключен. Скрипт прочитав эти значение и в зависимости от
  107. #состояния тачпада включит или отключит его.
  108.  
  109. !#/bin/bash
  110. mpv tv:// -frames 3 -vo jpeg
  111. mv 00000003.jpg photo.jpg
  112. rm -f 0000*.jpg
  113.  
  114. #Используя скрипт выше, вы можете создать снимок используя веб-камеру. В скрипте используется видеоплеер mpv который записывает
  115. #первые три кадра, снятые камерой, в файлы JPEG формата с именами 0000000.jpg, 00000002.jpg, 00000003.jpg итд, после переименовывается
  116. #третий снимок в файл photo.jpg, а остальные удаляются. Для чего используются три снимка? Они необходимы лишь для того, чтобы ваша
  117. #камера успела провести инициализацию, если использовать первые два снимка, то обычно вы получите черный снимок.
  118. #Бывают так же казусы с позиционированием, фото может быть перевернутым; чтобы этого избежать mpv нужно запускать с флагом -vf flip:
  119.  
  120. mpv tv:// -frames 3 -vf flip -vo jpeg
  121.  
  122. #Эту же команду, вы можете использовать для создания камеры слежения, которая будет делает снимки лишь в те моменты,
  123. #когда пользователь прикоснется к мыши:
  124.  
  125. #!/bin/bash
  126. while true; do
  127.  sudo cat /dev/input/mouse0 | read -n1
  128.  mpv tv:// -frames 3 -vo jpeg
  129.  mv 00000003.jpg `date +%F-%H-%M`.jpg
  130.  rm -f 0000*.jpg
  131.  sleep 10
  132. done
  133.  
  134. #Скрипт выше использует бесконечный цикл, получая данные с устройства /dev/input/mouse0. Если данные есть, значит,
  135. #мышь была сдвинута или была нажата одна из ее кнопок. После используется mpv, для создания трех снимков, третьему снимку
  136. #присваивается имя текущей даты и удаляются первые два.
  137.  
  138. #Если вы хотите записать полноценное видео с веб-камеры, как пример можно использовать подобный скрипт:
  139.  
  140. #!/bin/bash
  141.  
  142. mencoder tv:// -tv driver=v4l2:width=800:height=600:device=/dev/video0:fps=30:outfmt=yuy2:forceaudio:alsa:adevice=hw.2,0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800 -ffourcc xvid -oac mp3lame -lameopts cbr=128 -o video.avi
  143.  
  144. #В результате вы получите файл с названием video.avi в формaте MPEG4, битрейт 1800 и аудиофайл в формате MP3 с битрейтом 128.
  145.  
  146. #!/bin/bash
  147. ffmpeg -f x11grab -r 25 -s 1366x768 -i :0.0 screencast.mpg
  148.  
  149. #Используя скрипт выше, вы можете записать полноценный скринкаст. 1366×768 - это разрешение рабочего стола,
  150. #можете настроить под себя. Для создания скриншота отдельного окна, вы можете использовать команду import:
  151.  
  152. import screenshot.png
  153.  
  154. #Если запустить команду выше, значок курсора вашей мыши изменится на крестик, используя который, вы сможете выделить область
  155. #экрана как это вы делаете при создании скриншотов используя сторонние приложения или расширения. Если повесить эту команду на
  156. #одну из горячих клавиш, вы получите практически идеальную систему для создания скриншотов, и эта комбинация не будет кушать
  157. #вашу оперативную память, что значительно придает ей огромный плюс.
  158.  
  159. #Вы также можете настроить внешний монитор используя консоль:
  160.  
  161. #!/bin/sh
  162. if [ -z "$1" ]; then
  163.  exit
  164. fi
  165. if [ $1 == "off" ]; then
  166.  xrandr --output VGA-0 --off
  167.  xrandr -s 0
  168. else if [ $1 == "on"]; then
  169.  xrandr --output LVDS --auto --primary --output VGA-0 --auto --left-of LVDS
  170.  xrandr --newmode "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
  171.  xrandr --addmode VGA-0 1920x1080
  172.  xrandr --output VGA-0 --mode 1920x1080
  173. fi
  174. xrandr --dpi 96
  175.  
  176. #Этот скрипт основывается на том, что основной монитор имеет имя LVDS, а внешний - VGA-0. Это стандартная ситуация
  177. #для всех ноутбуков; если вы не уверены, можно проверить выполнив команду xrandr: при передаче скрипту аргумента
  178. #off он отключает внешний монитор, аргумент on, в свою очередь, включает его, располагая по левую сторону от основного
  179. #(аргумент —left-of LVDS в первoй команде). После скрипт создает новую конфигурацию для монитоpа с разрешением 1920 x 1080
  180. #и активирует его. И под конец, скрипт устанавливает дефолтное знaчение DPI - так как при подключении монитора с другим
  181. #разpешением оно часто слетает.
  182.  
  183. #В большинстве случаев команды xrandr —newmode … и xrandr —addmode … не нужны, так как Xorg получит конфигурацию монитора
  184. #и разрешение с помощью EDID. Иногда, однако, этого не происходит, и строку конфигурации, указываемую после аргумента —newmode,
  185. #приходится генерировать самостоятельно с помощью инструмента cvt:
  186.  
  187. cvt 1920 1080
  188.  
  189. #Используя инструмент cvt, можно сгенериpовать нестандартны разрешения, которые не поддерживаются монитором по умолчанию.
  190.  
  191. #Ищем в Google из командной строки
  192.  
  193. #Вернемся снова к сетевым сервисам. Как получить первый 10 результатов поиска в Google? Смотрим скрипт ниже:
  194.  
  195. #!/bin/bash
  196. Q="$@"
  197. URL='https://www.google.de/search?tbs=li:1&q='
  198. AGENT="Mozilla/4.0"
  199. stream=$(curl -A "$AGENT" -skLm 10 "${GOOG_URL}${Q//\ /+}" | grep -oP '\/url\?q=.+?&amp' | sed 's|/url?q=||; s|&amp||')
  200. echo -e "${stream//\%/\x}"
  201.  
  202. #Этот скрипт отправляет запрос к Google с помощью curl, заменяет пробелы в поисковой строке на плюсы.
  203. #После в ответном HTML выскакивают ссылки
  204.  
  205. #Пример с сервисом YouTube:
  206.  
  207. #!/bin/bash
  208. mpv -fs -quiet `youtube-dl -g "$1"`
  209.  
  210. #Скрипт с примера выше проигрывает видео с указанным в аргументе ID с помощью плеера mpv. Заранее нужно установить youtube-dl.
  211.  
  212. #Несколько примеров работы с Twitter. Ниже вы увидите скрипт полноценного бота, который на входе принимает команду,
  213. #выполняет ее с помощью командного интерпретатора и отправляет результат указанному юзеру.
  214.  
  215. #!/bin/bash
  216. USER="Ваш Ник"
  217. while true; do
  218.  CMD=`echo "/dma +1" | ttytter -script | sed 's/\[.*\]\ //'
  219.  if [ $CMD != $OLD_CMD ]; then
  220.  REPL=`$CMD`
  221.  echo "/dm $USER ${REPL:0:140}" | ttytter -script
  222.  CMD = $OLD_COMD
  223.  fi
  224.  sleep 60
  225. done
  226.  
  227. #В скрипте используется консольный клиент ttytter, читая с цикла последнее значение direct message, после происходит проверка, не была ли эта команда выполнена, если нет, выполняет ее и отправляет указанному юзеру с переменной USER обрезая до 140 символов.
  228.  
  229. #Чтобы все работало, вам нужно установить утилиту ttytter, запустить ее, после скопировать сгенерированную ссылку с консоли и вставить в адресную строку браузера, пройти подтверждение, согласиться, после получите ключ аутентификации, скопируйте и вставьте его в консоли в ttytter. Конечно, перед всем этим желательно добавить отдельного юзера и залогиниться под его учеткой.
  230.  
  231. #Использовать твиттер можно не лишь в целях создания бота, но и для мониторинга машины. Скрипт ниже отправляет в ленту сообщение с информацией о состоянии машины (имя хоста, uptime, нагрузка, свободная память и нагрузка на CPU):
  232.  
  233. #!/bin/bash
  234. HOST=`hostname -s`
  235. UP=`uptime | cut -d" " -f4,5 | cut -d"," -f1`
  236. LOAD=`uptime | cut -d":" -f5,6`
  237. MEM=`ps aux | awk '{ sum += $4 }; END { print sum }'`
  238. CPU=`ps aux | awk '{ sum += $3 }; END { print sum }'`
  239. tweet="Host: ${HOST}, uptime: ${UP}, cpu: ${CPU}%, memory: ${MEM}%, loadavg ${LOAD}"
  240. if [ $(echo "${tweet}" | wc -c) -gt 140 ]; then
  241.  echo "FATAL: The tweet is longer than 140 characters!"
  242.  exit 1
  243. fi
  244. echo $tweet | ttytter -script
  245.  
  246. Напоследок смотрим скрипт ниже, этот скрипт используется для запуска и остановки торрент-клиента пока ваш ПК простаивает:
  247.  
  248. #!/bin/bash
  249. IDLE=600000
  250. STOPCMD="transmission-remote -S"
  251. STARTCMD="transmission-remote -s"
  252. STOPPED="yes"
  253. while true; do
  254.  if [ `xprintidle` -gt $IDLE ]; then
  255.  if [ $STOPPED = "yes" ]; then
  256.  $STARTCMD
  257.  STOPPED="no"
  258.  fi
  259.  else
  260.  if [ $STOPPED = "no" ]; then
  261.  $STOPCMD
  262.  STOPPED="yes"
  263.  fi
  264.  fi
  265.  sleep 60
  266. done
  267.  
  268. Каждую минуту скрипт уходит в бесконечный цикл и проверяет, сколько времени в миллисекундах прошло с момента, когда юзер выполнял последние действия (для этих целей используется xprintidle). Если прошло 600 000 мс (десять минут), скрипт выполняет команду, которая укaзана в переменной STARTCMD. В ином случае выполняется команда STOPCMD, но лишь в том случае, если до нее была выполнена STARTCMD. Если объяснить простым языком, вы ничего не делаете за компьютером десять минут, после  запускается STARTCMD, в нашем случае это команда которая запускает все закачки в Transmission, если нет - все закачки приостанавливаются. Не любите клиент Transmission? Используем команды для Deluge, смотрим ниже:
  269.  
  270. STOPCMD="deluge-console pause \*"
  271. STARTCMD="deluge-console resume \*"
  272.  
  273. Вывод
  274.  
  275. Описанное выше может показаться вам сложным или же лишним так как вместо писанины в консоли вы можете найти много утилит с графическим интерфейсом которые выполнят необходимые задачи в один клик без использования консоли. Да, соглашусь с вами, но не все доступно с графического интерфейса, часто именно консоль спасает от рутинной работы если уметь ей пользоваться. На этом пожалуй и окончим материал, если вы имеете чем поделиться(скриптами), оставляйте комментарии к материалу.
Tags: BASH functions
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement