Подборка shell-скриптов на все случаи жизни

Небольшая подборка полезных Shell скриптов для использования в Linux

Консоль Linux - это тот инструмент который позволяет выполнять такие манипуляции, которые не позволяет творить командная строка в Windows, консоль Linux, это визитная карточка UNIX. Сегодня материал не о том как писать скрипты, нет, я вас не буду учить как, что и для чего. Мы рассмотрим небольшую подборку полезных скриптов, которые вы сможешь применять ежедневно для решения задач разного рода, например посмотреть погоду на несколько дней вперед, скрипты для веб-сервера в одну строку, написание бота для твиттера и скриптом для автоматического запуска любого торрент-клиента.

подборка shell скриптов для Linux

Этот материал написан, не чтобы вы занимались шаманизмом, ни в коем случае я вас не призываю сидеть в консоли и печатать сотни символов, чтобы выполнить некоторые действия, которые вы можете выполнить в графическом интерфейсе лишь наведя мышку на необходимый вам элемент. Но есть одно но, не всегда графический интерфейс является лучшим решением, часто для решения многих задач консоль и скрипты справляются с поставленной задачей намного лучше чем приложения с графическим интерфейсом, в связи с чем о скриптах забывать нельзя так как много рутинной работы они решают лучше графических инструментов. Стоит так же добавить, что любая DE позвoляет вам создать для ваших скриптов иконку, нажав на которую, вы сможете их легко запустить не открывая консоль.

Начнем с простых примеров

Команда ниже покажет вам ваш внешний IP - это идеальный вариант, если в Сеть вы входите используя роутер. Эта команда обращается к серверу ifconfig.co, который возвращает IP одной строкой без лишней писанины которая вам не нужна.

curl ifconfig.co

Да, это не скрипт, это небольшая команда, но если вы хотите превратить эту команду в скрипт, вам достаточно поместить ее в текстовый файл, в итоге у нас получится небольшой bash скрипт:

#!/bin/bash
curl ifconfig.co

Сохраняeм скрипт в каталог ~/bin и даем права на исполнение:

chmod +x ~/bin/yourip.sh

Почти готово, вы можно исполнить скрипт из командной строки используя команду yourip.sh.

C айпи закончили, посмотрим погоду с консоли.

Сводка погоды в консоли

#!/bin/sh
curl -4 wttr.in/Kiev

Этот скрипт позволяет получить сводку погоды на четыре дня, в данном случае погода для города Киев.

Сводка погоды в консоли

#!/bin/sh
dig +short txt $1.wp.dg.cx

Выше вы видите пример, как можно получить краткое описание чего-нибудь в Википедии, в нашем случае мы используем DNS-запрос вместо обращения к веб-серверу. Веб-сервер через консоль также очень легко создать:

#!/bin/sh
while ( nc -l 80 < file.html > : ) ; do : ; done

Скрипт выше основан на утилите netcat (nc), часто ее называют швейцарским армейским ножом, так как позволяет вытворять много трюков для сетевых опeраций. Скрипт простой он запускает цикл, который выполняет команду nc, та уже слушает 80-й порт и в ответ на запрос отдает file.html, отправляя переданный запрос в никуда (символ означает noop, то есть пустую операцию).

Используя простые скрипты и команд, вы можете слушать интернет-радио:

#!/bin/sh
mpv --volume=50 -playlist ~/16bit.fm_128.m3u

Конечно, до этого вам нужно скачать плей-лист радио в формате M3U с сайта радиостанции. Если зaпустить MPlayer используя аргумент —input-ipc-server=/tmp/mpvsocket, им можно будет управлять, записывая команды в файл. Например, настроить громкость:

echo 'volume +10' | socat - /tmp/mpvsocket

Создаем два скрипта: первый для запуска, а другой для остановки радио (в котором мы пропишем строку killall mpv), далее повесь на рабочий стол совместно настроив горячие клавиши DE для управления воспроизведением. И готово, вы имеете плеер с помощью которого вы можете заускать интернет-радио.

Увлеклись сетевыми операциями, перейдем к локальным.

#!/bin/sh
tar -czf "../${PWD##*/}.tar.gz" .

Это скрипт создает архив tar.gz для текущего кaталога. Особое внимание нужно уделить конструкции ${PWD##*/}, которая бeрет весь путь до текущего каталога (переменная $PWD) далее удаляет первую чаcть до последнего слеша, в итоге остается лишь имя каталoга и к нему добавляется расширение tar.gz. Если вы хотите узнать больше информации по подобных конструкциях, вы можете прочитать выполнив в консоли команду man bash.

#!/bin/sh
while true; do
 inotifywait -r -e MODIFY КАТАЛОГ && ТВОЯ_КОМАНДА
done

Скрипт выше запускает команду в ответ на изменение файлов в каталоге. Вы ее можете применять для разных целей, как пример для автоматического включения плеера при сохранении MP3. Или же как пример выводить увeдомление на рабочий стол, используя команду notify-send:

notify-send "Файл изменен"

Для рабочего стола

Ниже вы увидите пример скрипта, который загружает случайные обои, которые опубликованы на reddit-канале wallpaper:

#!/bin/bash
wget -O - http://www.reddit.com/r/wallpaper |\
 grep -Eo 'http://i.imgur.com[^&]+jpg' |\
 shuf -n 1 |\
 xargs wget -O background.jpg
feh --bg-fill background.jpg

Работает все довольно просто. Используя утилиту wget скрипт загружает страницу www.reddit.com/r/wallpaper, далее передает ее grep, который уже ищет ссылки на imgur, и выбирает случайную с помощью shuf, загружает ее с помощью wget и устанавливает в качестве обоев для вашего рабочего стола, используя команду feh (это миниатюрный просмотрщик изображений, который нужно предварительно устанoвить). Вы этот скрипт можете добавить в обычный текстовый файл как я описывал выше, сохранить в формате sh, сделать исполняемым, добавить к нему иконку и запускать с рабочего стола по клику и у вас будут меняться обои.

#!/bin/sh
state=`synclient | grep TouchpadOff | cut -d '=' -f 2`
if [ $state = "1" ]; then
 synclient TouchpadOff=0
else
 synclient TouchpadOff=1
fi

Скрипт выше используется для включения и выключения тачпада вашего ноутбука: включает, если отключен, и наоборот. Для корректной работы в нем используется утилита synclient, которая и позволяет управлять тачпадами которые в большинстве производит Synaptics, это 90% возможно даже и более. После запуска утилита выводит много информации, так же строку TouchpadOff = 1, если он активирован, и TouchpadOff = 2, если отключен. Скрипт прочитав эти значение и в зависимости от состояния тачпада включит или отключит его.

!#/bin/bash
mpv tv:// -frames 3 -vo jpeg
mv 00000003.jpg photo.jpg
rm -f 0000*.jpg

Используя скрипт выше, вы можете создать снимок используя веб-камеру. В скрипте используется видеоплеер mpv который записывает первые три кадра, снятые камерой, в файлы JPEG формата с именами 0000000.jpg, 00000002.jpg, 00000003.jpg итд, после переименовывается третий снимок в файл photo.jpg, а остальные удаляются. Для чего используются три снимка? Они необходимы лишь для того, чтобы ваша камера успела провести инициализацию, если использовать первые два снимка, то обычно вы получите черный снимок. Бывают так же казусы с позиционированием, фото может быть перевернутым; чтобы этого избежать mpv нужно запускать с флагом -vf flip:

mpv tv:// -frames 3 -vf flip -vo jpeg

Эту же команду, вы можете использовать для создания камеры слежения, которая будет делает снимки лишь в те моменты, когда пользователь прикоснется к мыши:

#!/bin/bash
while true; do
 sudo cat /dev/input/mouse0 | read -n1
 mpv tv:// -frames 3 -vo jpeg
 mv 00000003.jpg `date +%F-%H-%M`.jpg
 rm -f 0000*.jpg
 sleep 10
done

Скрипт выше использует бесконечный цикл, получая данные с устройства /dev/input/mouse0. Если данные есть, значит, мышь была сдвинута или была нажата одна из ее кнопок. После используется mpv, для создания трех снимков, третьему снимку присваивается имя текущей даты и удаляются первые два.

Если вы хотите записать полноценное видео с веб-камеры, как пример можно использовать подобный скрипт:

#!/bin/bash
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

В результате вы получите файл с названием video.avi в формaте MPEG4, битрейт 1800 и аудиофайл в формате MP3 с битрейтом 128.

#!/bin/bash
ffmpeg -f x11grab -r 25 -s 1366x768 -i :0.0 screencast.mpg

Используя скрипт выше, вы можете записать полноценный скринкаст. 1366×768 - это разрешение рабочего стола, можете настроить под себя. Для создания скриншота отдельного окна, вы можете использовать команду import:

import screenshot.png

Если запустить команду выше, значок курсора вашей мыши изменится на крестик, используя который, вы сможете выделить область экрана как это вы делаете при создании скриншотов используя сторонние приложения или расширения. Если повесить эту команду на одну из горячих клавиш, вы получите практически идеальную систему для создания скриншотов, и эта комбинация не будет кушать вашу оперативную память, что значительно придает ей огромный плюс.

Вы также можете настроить внешний монитор используя консоль:

#!/bin/sh
if [ -z "$1" ]; then
 exit
fi
if [ $1 == "off" ]; then
 xrandr --output VGA-0 --off
 xrandr -s 0
else if [ $1 == "on"]; then
 xrandr --output LVDS --auto --primary --output VGA-0 --auto --left-of LVDS
 xrandr --newmode "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
 xrandr --addmode VGA-0 1920x1080
 xrandr --output VGA-0 --mode 1920x1080
fi
xrandr --dpi 96

Этот скрипт основывается на том, что основной монитор имеет имя LVDS, а внешний - VGA-0. Это стандартная ситуация для всех ноутбуков; если вы не уверены, можно проверить выполнив команду xrandr: при передаче скрипту аргумента off он отключает внешний монитор, аргумент on, в свою очередь, включает его, располагая по левую сторону от основного (аргумент —left-of LVDS в первoй команде). После скрипт создает новую конфигурацию для монитоpа с разрешением 1920 x 1080 и активирует его. И под конец, скрипт устанавливает дефолтное знaчение DPI - так как при подключении монитора с другим разpешением оно часто слетает.

В большинстве случаев команды xrandr —newmode … и xrandr —addmode … не нужны, так как Xorg получит конфигурацию монитора и разрешение с помощью EDID. Иногда, однако, этого не происходит, и строку конфигурации, указываемую после аргумента —newmode, приходится генерировать самостоятельно с помощью инструмента cvt:

cvt 1920 1080

Используя инструмент cvt, можно сгенериpовать нестандартны разрешения, которые не поддерживаются монитором по умолчанию.

Ищем в Google из командной строки

Вернемся снова к сетевым сервисам. Как получить первый 10 результатов поиска в Google? Смотрим скрипт ниже:

#!/bin/bash
Q="$@"
URL='https://www.google.de/search?tbs=li:1&q='
AGENT="Mozilla/4.0"
stream=$(curl -A "$AGENT" -skLm 10 "${GOOG_URL}${Q//\ /+}" | grep -oP '\/url\?q=.+?&amp' | sed 's|/url?q=||; s|&amp||')
echo -e "${stream//\%/\x}"

Этот скрипт отправляет запрос к Google с помощью curl, заменяет пробелы в поисковой строке на плюсы. После в ответном HTML выскакивают ссылки

Пример с сервисом YouTube:

#!/bin/bash
mpv -fs -quiet `youtube-dl -g "$1"`

Скрипт с примера выше проигрывает видео с указанным в аргументе ID с помощью плеера mpv. Заранее нужно установить youtube-dl.

Несколько примеров работы с Twitter. Ниже вы увидите скрипт полноценного бота, который на входе принимает команду, выполняет ее с помощью командного интерпретатора и отправляет результат указанному юзеру.

#!/bin/bash
USER="Ваш Ник"
while true; do
 CMD=`echo "/dma +1" | ttytter -script | sed 's/\[.*\]\ //'
 if [ $CMD != $OLD_CMD ]; then
 REPL=`$CMD`
 echo "/dm $USER ${REPL:0:140}" | ttytter -script
 CMD = $OLD_COMD
 fi
 sleep 60
done

В скрипте используется консольный клиент ttytter, читая с цикла последнее значение direct message, после происходит проверка, не была ли эта команда выполнена, если нет, выполняет ее и отправляет указанному юзеру с переменной USER обрезая до 140 символов.

Чтобы все работало, вам нужно установить утилиту ttytter, запустить ее, после скопировать сгенерированную ссылку с консоли и вставить в адресную строку браузера, пройти подтверждение, согласиться, после получите ключ аутентификации, скопируйте и вставьте его в консоли в ttytter. Конечно, перед всем этим желательно добавить отдельного юзера и залогиниться под его учеткой.

Использовать твиттер можно не лишь в целях создания бота, но и для мониторинга машины. Скрипт ниже отправляет в ленту сообщение с информацией о состоянии машины (имя хоста, uptime, нагрузка, свободная память и нагрузка на CPU):

#!/bin/bash
HOST=`hostname -s`
UP=`uptime | cut -d" " -f4,5 | cut -d"," -f1`
LOAD=`uptime | cut -d":" -f5,6`
MEM=`ps aux | awk '{ sum += $4 }; END { print sum }'`
CPU=`ps aux | awk '{ sum += $3 }; END { print sum }'`
tweet="Host: ${HOST}, uptime: ${UP}, cpu: ${CPU}%, memory: ${MEM}%, loadavg ${LOAD}"
if [ $(echo "${tweet}" | wc -c) -gt 140 ]; then
 echo "FATAL: The tweet is longer than 140 characters!"
 exit 1
fi
echo $tweet | ttytter -script

Напоследок смотрим скрипт ниже, этот скрипт используется для запуска и остановки торрент-клиента пока ваш ПК простаивает:

#!/bin/bash
IDLE=600000
STOPCMD="transmission-remote -S"
STARTCMD="transmission-remote -s"
STOPPED="yes"
while true; do
 if [ `xprintidle` -gt $IDLE ]; then
 if [ $STOPPED = "yes" ]; then
 $STARTCMD
 STOPPED="no"
 fi
 else
 if [ $STOPPED = "no" ]; then
 $STOPCMD
 STOPPED="yes"
 fi
 fi
 sleep 60
done

Каждую минуту скрипт уходит в бесконечный цикл и проверяет, сколько времени в миллисекундах прошло с момента, когда юзер выполнял последние действия (для этих целей используется xprintidle). Если прошло 600 000 мс (десять минут), скрипт выполняет команду, которая укaзана в переменной STARTCMD. В ином случае выполняется команда STOPCMD, но лишь в том случае, если до нее была выполнена STARTCMD. Если объяснить простым языком, вы ничего не делаете за компьютером десять минут, после  запускается STARTCMD, в нашем случае это команда которая запускает все закачки в Transmission, если нет - все закачки приостанавливаются. Не любите клиент Transmission? Используем команды для Deluge, смотрим ниже:

STOPCMD="deluge-console pause \*"
STARTCMD="deluge-console resume \*"

Вывод

Описанное выше может показаться вам сложным или же лишним так как вместо писанины в консоли вы можете найти много утилит с графическим интерфейсом которые выполнят необходимые задачи в один клик без использования консоли. Да, соглашусь с вами, но не все доступно с графического интерфейса, часто именно консоль спасает от рутинной работы если уметь ей пользоваться. На этом пожалуй и окончим материал, если вы имеете чем поделиться(скриптами), оставляйте комментарии к материалу.

Источник: xakep.ru

Понравилась статья?
Небольшая подборка полезных Shell скриптов для использования в Linux Консоль Linux - это тот инструмент который позволяет выполнять такие манипуляции, которые не позволяет творить командная строка в Windows, консоль Linux, это визитная карточка UNIX....
How To
4358
Рейтинг: 5/40
При перепечатке материалов указание ссылки на linuxsoid.com обязательно.

Подпишитесь на рассылку

Смотрите также:
    Самый легкий способ установки Mesa 17.0.2 в Ubuntu 16.04 LTS Самый легкий способ установки Mesa 17.0.2 в Ubuntu 16.04 LTS

    Mesa – это реализация графического API OpenGL, обеспечивающая высокую производительности при работе с 3D графикой. Технически, это просто спецификация, реализуемая драйвером видеокарты. Нет такого понятия, как библиотека OpenGL SDK. Есть файл libGL.so, поставляемый вместе с драйвером. Чтобы его использовать, вам нужна привязка к выбранному вами языку программирования. Если это язык C, привязка состоит из заголовочных файлов. Однако вы, вероятно, хотите использовать расширения OpenGL, что легко сделать с помощью GLEW.

    ICQ Аська для Ubuntu Linux ICQ Аська для Ubuntu Linux

    И свершилось чудо, вышел официальный релиз ICQ для Linux, ранее вам приходилось пользоваться сторонними приложениями, но теперь в этом нет необходимости так как вышел официальный клиент.

    Выберите вашу архитектуру и загрузите архив, архив занимает 33 около 34 мб, скачаете, распакуйте, далее увидите файл формата run с названием "icq", нажмите по нему двойным кликом как и обычно когда вы запускаете приложения, сразу же увидите как автоматически извлеклись две директории (settings и fontconfig), настройки и прочие  конфигурационные файлы для работы приложения.

    Игра Teeworlds для Ubuntu Linux Игра Teeworlds для Ubuntu Linux

    Teeworlds - это многопользовательский 2D шутер который очень схож с такими играми как (Worms, Soldat и Counter-Strike 2D). В связи с особенностями физики имеет свой уникальный геймплей. Все игроки имеют возможность управления персонажем который очень похож на колобка, но этот колобок не простой так как умеет цепляться за стены используя крюк и на лету перемещаться по карте почти как "Тарзан" на лиане. Цель играющего зависит от режима игры: например, уничтожить противников, доставить вражеский флаг к себе на базу или добежать до конца карты.

    Игра Oh My Giraffe для Ubuntu Linux Игра Oh My Giraffe для Ubuntu Linux

    Очень веселая игра для ваших детей которые осваивают Linux. Игра предназначена именно для того, чтоб любой, кто установит ее, смог просто прекрасно отдохнуть и повеселить своих детей или же племянников. Эта игра поможет вам поднять настроение и приятно провести время с своими родными. Все что нужно делать в игре Oh My Giraffe, это есть вкусные фрукты и убегать от диких львов. 

    Ваш герой, это жираф который сражается с львами. В том случае если вы не сможете убежать от львов, это не конец игры, вы имеете преимущества в том, что вы можете использовать ваш рост и вес, вы можете упасть на львов которые гонятся за вами. В данном случае, вы вероятнее всего задавите кого-то ради своего спасения. Если сказать кратко, это веселая игра которой вы еще не встречали. 

    Переменные окружения linux Переменные окружения linux

    Работая с консолью, мы вводим много разного рода команд для достижения тех или иных целей, которые мы поставили перед собой. Сегодня я хочу обсудить тему, которая должна облегчить или уменьшить тот объем текста, который вы печатаете в консоли, это "Переменные окружения". Если вы не понимаете, что такое "Переменные окружения", объясню кратко. Ранее не зная, что такое переменные окружения, вы в терминале для перехода в домашнюю директорию конкретного пользователя вводили команду...

    Набор команд для работы с SSH на все случаи жизни Набор команд для работы с SSH на все случаи жизни

    SSH - это очень распространенный инструмент для системных администраторов. Наверное почти каждый день им пользуются тысячи, используют SSH для подключения к своим серверам, домашнему компьютеру, роутеру или смартфону. SSH-клиенты доступны для большинства популярных платформ, главное чтобы вы знали о всех возможностях SSH и понимали как их применить и где.

    Сегодня я постараюсь описать некоторые из возможностей, не все конечно так как для этого не хватит одного материала. Ниже мы рассмотрим небольшую подборку из 20 команд или более правильно выразиться рецептов, которыми вы можешь пользоваться как шпаргалкой в будущем. Эти команды доступны для работы как в Linux, так и в большинстве других ОС, которые имеют сборку OpenSSH. Чтобы не запутать, уточню, что удaленный пользователь и хост в материале ниже мы всегда обозначаем как [email protected] либо по отдельности как <user> и <host>.

avatar
1
5 • 07:58,
Для того, что бы мотивировать миграцию на Linux нужно, просто, ввести патентные и иные законы как, наприме, в США... Хочешь пользоваться Виндой... Да не вопрос: 300$ - за диск на один компьютер + антивирус (обязательно лицензированный Microsoft) + браузер Ишак, ну или edge (другие не допускаются) + офис (только Microsoft Office) + другие программы - ориентировочно выйдет всего - то в 1 000$ (где - то так). Ах да... Ежемесячный взнос в размере 20$ в месяц - за право использования Windows ну и, по 10$ - за каждую дополнительную (сертифицированную Microsoft) программу. За нарушение - штраф в 1000$ - в доход государства + собственно в Microsoft.
avatar
0
4 • 19:32,
Хорошее предложение, только не все готовы перейти на Linux так как много привыкло к винде и их трудно оторвать от этой операционки. Другие не могут перейти так как не хотят или же для повседневной работы используют приложения от Adobe которых нет в Linux в итоге лишь из-за одного приложения принимаются решения.  linux
avatar
1
3 • 18:07,
Мои пожелания Всем пользователям: Пора послать Windows , куда-нибудь подальше!!! Хватит кормить Янки!!! Linux ,во всех его видах ,очень неплохая альтернатива. Особенно ,если приложить хорошие Российские мозги!!! Так начнём с нового 2017 года(И не с петуха китайского, А" Лиса крадущегося" cо славянского календаря!!!)
avatar
2
2 • 17:56,
Просто и круто. Доступно и полезно!!! Большое Спасибо! С Новым Годом!!!
avatar
0
1 • 13:15,
Отлично расписали, мотивирует задуматься и почесать репу.  smil28
avatar