Какой простой способ отрезать расширение у файла?
Стандартный и популярный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс. Например пишем file.txt и суффикс .txt
Таким образом,
Если бы мы использовали
🔨 bash_help
Стандартный и популярный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс. Например пишем file.txt и суффикс .txt
$ basename file.txt .txt
file
Но можно не запускать целый отдельный процесс для такого простого действия, и обойтись внутренними преобразованиями в bash (bash variable expansions):$ filename=file.txt; echo ${filename%.*}Или наоборот, отрезать имя файла и оставить только расширение:
file
filename=file.txt; echo ${filename##*.}
txt
Как это работает?%
— отрезает все символы с конца до первого подходящего паттерна (поиск идет справа налево)%%
— отрезает все символы с конца до последнего подходящего паттерна (справа налево)#
— отрезает с начала до первого подходящего паттерна (поиск идет слева направо)##
— отрезает с начала до последнего подходящего паттерна (слева направо)Таким образом,
"${filename%.*}"
означает — начиная справа налево проходим все символы (*) и доходим до первой точки. Отрезаем найденное.Если бы мы использовали
"${filename%%.*)"
, то в файлах, где точка встречается больше одного раза, у нас бы оно дошло до последней точки, отрезав лишнее.$ filename="file.hello.txt"; echo "${filename%%.*}"
file
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрипт для запуска и остановки торрент-клиента во время простоя машины
🔨 bash_help
#!/bin/bashСкрипт уходит в бесконечный цикл, каждую минуту проверяя, сколько миллисекунд прошло с момента, когда юзер что-либо делал (для этого используется команда xprintidle). Если прошло уже 600 000 мс (десять минут), скрипт выполняет команду, указанную в переменной STARTCMD. В противном случае он выполнит команду STOPCMD, но только тогда, когда до нее была выполнена команда STARTCMD. Если кратко: ничего не делаешь за компом десять минут — запускается STARTCMD, в данном случае это команда запуска всех закачек с помощью Transmission, если нет — приостановка всех закачек. Не любишь Transmission? Нет проблем, вот команды для Deluge:
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
STOPCMD="deluge-console pause \*"
STARTCMD="deluge-console resume \*"
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли создать hardlink на папку?
Конечно можно! Но не всем. POSIX файловые системы активно пользуются хардлинками и мы их все время видим! Пример:
🔨 bash_help
Конечно можно! Но не всем. POSIX файловые системы активно пользуются хардлинками и мы их все время видим! Пример:
# создаем директорию test
$ mkdir test
# выводим информацию о количестве ссылок и номер iNode для test
$ stat -c "LinkCount:%h iNode:%i" test
LinkCount:2 iNode:522366
Как? Только создали и уже два линка?# заходим в созданную директорию test
$ cd test
# внутри выводим статистику для текущей директории "."
$ stat -c "LinkCount:%h iNode:%i" .
LinkCount:2 iNode:522366
В обоих случаях мы видим тот же номер iNode. То есть test и "." внутри него — это та же самая директория. И "." это не какой-то специальный алиас баша, и даже не операционной системы. Это просто жесткая ссылка на уровне файловой системы. Проверим еще один момент:# создаем поддиректорию test2 внутри нашего test
$ mkdir test2
# заходим в поддиректорию test2
$ cd test2
# смотрим статистику о родительской директории ".."
$ stat -c "LinkCount:%h iNode:%i" ..
LinkCount:3 iNode:522366
".." имеет тот же iNode 522366, соответствующий директории test. И счетчик ссылок увеличился.Please open Telegram to view this post
VIEW IN TELEGRAM
Совсем немного про перенаправления <, << и <<<
Первое перенаправление "<" из именованного потока или из файла. Давно известное и годами перетёртое мозолями суровых админов. Поэтому сразу перейдем к двум другим, которые встречаются реже.
<<, так называемая конструкция here document. Позволяет разместить многострочный текст прямо в скрипте и перенаправить его, словно из внешнего потока.
Это действительно удобный способ, чтобы вызвать какую-то внешнюю утилиту и скормить ей много данных.
Но можно пользоваться и <<<. Во-первых, <<< лучше читается, а во-вторых через <<< тоже можно передавать многострочные данные. Сравните два примера на читабельность:
А при коротком запросе все выглядит вообще прекрасно:
🔨 bash_help
Первое перенаправление "<" из именованного потока или из файла. Давно известное и годами перетёртое мозолями суровых админов. Поэтому сразу перейдем к двум другим, которые встречаются реже.
<<, так называемая конструкция here document. Позволяет разместить многострочный текст прямо в скрипте и перенаправить его, словно из внешнего потока.
$ cat <<EOF
\ hello,
\ World
\ EOF
hello,
World
Cat
читает данные из файла. Мы перенаправляем ему в STDIN файл — конструкция here document генерит его прямо на месте, поэтому не нужно создавать отдельный файл.Это действительно удобный способ, чтобы вызвать какую-то внешнюю утилиту и скормить ей много данных.
Но можно пользоваться и <<<. Во-первых, <<< лучше читается, а во-вторых через <<< тоже можно передавать многострочные данные. Сравните два примера на читабельность:
#!/bin/bashВторой вариант выглядит потенциально удобнее. Мы можем задать многострочную переменную в удобном для нас месте, и использовать ее в <<<.
. load_credentials
sqlplus -s $connstring << EOF
set line 1000
select name, lastlogin from users;
exit;
EOF
#!/bin/bash
. load_credentials
SLQ_REQUEST="
set line 1000
select name, lastlogin from users;
exit;"
sqlplus -s ${connstring} <<<"${SQL_REQUEST}"
А при коротком запросе все выглядит вообще прекрасно:
#!/bin/bash
. load_credentials
sqlplus -s ${connstring} <<<"select name, lastlogin from users;exit;"
Если оперировать скриптами побольше, и запросами подлиннее, то использование <<< с перенаправлениеим из переменных (а сами переменные мы можем объявить заранее, в специально отведенном и оборудованом комментариями месте), то код получается гораздо читабельнее.Please open Telegram to view this post
VIEW IN TELEGRAM
Как повысить эффективность Bash-скриптов
Bash-скрипты — эффективное решение для автоматизации рутинных задач, но не всегда самое простое. Объемные сценарии характеризуются низкой производительностью и сложны для чтения. В этой статье мы рассмотрим, как оптимизировать работу, упростить с помощью утилит sed и awk и не совершать очевидных ошибок в написании скриптов.
Инструменты обработки текста значительно расширяют возможности оболочки bash. Но с командами sed и awk можно не только редактировать вывод и файлы, включая сами скрипты. Утилиты служат наиболее эффективным решением некоторых задач автоматизации процессов.
Sed — потоковый редактор файлов, позволяющий сэкономить время на выполнении простых функций: удаление, замена, вставка текста.
Awk — язык программирования, синтаксис которого напоминает языки C и Perl. Хотя awk работает по тому же «построчному» принципу, но значительно превосходит sed по функциональным возможностям. При написании bash-скриптов инструмент удобно использовать для работы со структурированными данными, так как awk воспринимает поля (область текста, отделенную пробелами или табуляцией), переменные, арифметические функции и др.
🌐 Ссылка на статью
🔨 bash_help
Bash-скрипты — эффективное решение для автоматизации рутинных задач, но не всегда самое простое. Объемные сценарии характеризуются низкой производительностью и сложны для чтения. В этой статье мы рассмотрим, как оптимизировать работу, упростить с помощью утилит sed и awk и не совершать очевидных ошибок в написании скриптов.
Инструменты обработки текста значительно расширяют возможности оболочки bash. Но с командами sed и awk можно не только редактировать вывод и файлы, включая сами скрипты. Утилиты служат наиболее эффективным решением некоторых задач автоматизации процессов.
Sed — потоковый редактор файлов, позволяющий сэкономить время на выполнении простых функций: удаление, замена, вставка текста.
Awk — язык программирования, синтаксис которого напоминает языки C и Perl. Хотя awk работает по тому же «построчному» принципу, но значительно превосходит sed по функциональным возможностям. При написании bash-скриптов инструмент удобно использовать для работы со структурированными данными, так как awk воспринимает поля (область текста, отделенную пробелами или табуляцией), переменные, арифметические функции и др.
🌐 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Как отлаживать bash-script-ы по шагам
Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.
Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.
Ингредиенты
- команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды
- команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C
- переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.
🔨 bash_help
Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам
#!/bin/bash
trap 'echo "# $BASH_COMMAND";read' DEBUG
echo line1
echo line2
echo line3
Процесс отладкиЗапускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.
Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.
Ингредиенты
- команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды
- команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C
- переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.
Please open Telegram to view this post
VIEW IN TELEGRAM
Импорт фотографий из командной строки Linux
Представьте что у нас хранятся сотни тонн всевозможных снимков в совершенно разных местах, на разных носителях. Где-то они были разобраны по годам и месяцам, а где-то просто “свалены” в кучу и оставлены до лучших времен.
Мы запускаем программу указываем ей начальную точку, откуда начинать, и идем заниматься своими делами. Скрипт сканирует все директории какие встретит на своем пути, включая и вложенные, в поисках фотографий.
После завершения работы программы получаем фотоальбом с отсортированными снимками по годам и месяцам в каждом году, т.е. в виде: год / месяц / снимки. Да еще и без дубликатов фотографий. А сами снимки будут переименованы из непонятных типа IMG_654372984.jpg или AB54645456.jpg во вполне читабельные и понятные имена вида YYYYMMDD_hhmmss.jpg. При этом не пострадает ни один оригинал фотографии.
🌐 Ссылка на скрипт
🔨 bash_help
Представьте что у нас хранятся сотни тонн всевозможных снимков в совершенно разных местах, на разных носителях. Где-то они были разобраны по годам и месяцам, а где-то просто “свалены” в кучу и оставлены до лучших времен.
Мы запускаем программу указываем ей начальную точку, откуда начинать, и идем заниматься своими делами. Скрипт сканирует все директории какие встретит на своем пути, включая и вложенные, в поисках фотографий.
После завершения работы программы получаем фотоальбом с отсортированными снимками по годам и месяцам в каждом году, т.е. в виде: год / месяц / снимки. Да еще и без дубликатов фотографий. А сами снимки будут переименованы из непонятных типа IMG_654372984.jpg или AB54645456.jpg во вполне читабельные и понятные имена вида YYYYMMDD_hhmmss.jpg. При этом не пострадает ни один оригинал фотографии.
🌐 Ссылка на скрипт
Please open Telegram to view this post
VIEW IN TELEGRAM
Как отключить историю оболочки bash в Linux
Оболочка bash сохраняет введенные из терминала команды в файл истории. Вы можете вызвать список команд, введенных ранее. Команда history отображает команды bash, которые вы выполнили ранее. Эти команды составляют историю команд. По умолчанию в истории отображается нумерованный список из 500 последних команд, начиная с самых ранних и заканчивая самыми последними. Значение переменной
Как отобразить текущую историю?
Нужно просто ввести команду
Используйте команду
Инициализируется история из файла с именем переменной
Переменную
Другой вариант — передать параметр +o history встроенной команде set:
Как очистить историю bash?
Введите следующую команду в текущем сеансе:
🔨 bash_help
Оболочка bash сохраняет введенные из терминала команды в файл истории. Вы можете вызвать список команд, введенных ранее. Команда history отображает команды bash, которые вы выполнили ранее. Эти команды составляют историю команд. По умолчанию в истории отображается нумерованный список из 500 последних команд, начиная с самых ранних и заканчивая самыми последними. Значение переменной
HISTSIZE
используется в качестве числа команд для сохранения в списке истории.Как отобразить текущую историю?
Нужно просто ввести команду
history
:history
history | less
history | more
history | grep 'find'
Как узнать количество сохраненных в истории команд?Используйте команду
echo
или printf
:echo "$HISTSIZE"
илиprintf "%d\n" $HISTSIZE
Где хранится история bash команд?Инициализируется история из файла с именем переменной
HISTFILE
. По умолчанию используется файл ~/.bash_history
. Для просмотра текущих настроек можно использовать:echo "$HISTFILE"
илиprintf "%s\n" "$HISTFILE"
Как отключить историю оболочки BASH на Linux или Unix?Переменную
HISTFILE
можно удалить, набрав следующую команду сброса:unset HISTFILEДобавьте указанную выше строку в конец нового файла /etc/profile.d/disable.history.sh или
~/.bash_profile
:echo 'unset HISTFILE' >> /etc/profile.d/disable.history.sh
или echo 'unset HISTFILE' >> ~/.bash_profileКак навсегда отключить историю bash с помощью команды set?
Другой вариант — передать параметр +o history встроенной команде set:
set +o historyАналогично добавьте set +o history в конец нового файла /etc/profile.d/disable.history.sh или ~/.bash_profile.
Как очистить историю bash?
Введите следующую команду в текущем сеансе:
history -cЧтобы удалить одну команду под номером 42 из истории в Linux / Unix:
history -d 42
Please open Telegram to view this post
VIEW IN TELEGRAM
Как преобразовать строку в нижний регистр
В этой заметке будет показано, как преобразовать строку в нижний регистр (строчные буквы).
Чтобы конвертировать строку в маленькие буквы независимо от её текущего регистра, используйте одну следующую команду:
🔨 bash_help
В этой заметке будет показано, как преобразовать строку в нижний регистр (строчные буквы).
Чтобы конвертировать строку в маленькие буквы независимо от её текущего регистра, используйте одну следующую команду:
a="Hi all"Начиная с Bash 5.1 имеется параметр преобразования L, который предназначен для перевода строки в нижний регистр:
echo "${a,,}"
hi all
${var@L}Пример:
v="heLLo"
echo "${v@L}"
hello
Please open Telegram to view this post
VIEW IN TELEGRAM
Как в Bash реализовать «Нажмите любую кнопку для продолжения»
Иногда нужно приостановить вывод в скрипте, чтобы обратить внимание пользователя на информацию и убедиться, что пользователь увидел её (или имел возможность её увидеть).
В Bash это можно сделать с помощью утилиты
Пример использования:
Если вам нужно, чтобы для продолжения можно было нажать любую кнопку, то используйте следующую конструкцию:
🔨 bash_help
Иногда нужно приостановить вывод в скрипте, чтобы обратить внимание пользователя на информацию и убедиться, что пользователь увидел её (или имел возможность её увидеть).
В Bash это можно сделать с помощью утилиты
read
. Эта утилита читает строку из стандартного ввода.Пример использования:
read -p "Нажмите ENTER для продолжения"
Эта команда позволит пользователю продвинуться далее (а скрипт продолжит выполнение) после того, как пользователь нажмёт кнопку ENTER.Если вам нужно, чтобы для продолжения можно было нажать любую кнопку, то используйте следующую конструкцию:
read -n 1 -s -r -p "Нажмите любую кнопку для продолжения"
В этой команде следующее значение опций:-n
определяет количество символов, после которого будет остановлено чтение. По умолчанию чтение останавливается при вводе разделителя строк (например, кнопкой ENTER). В нашем случае команда read перестаёт считывать вводимые данные после первого символа-s
скрывает пользовательский ввод-r
приводит к тому, что строка будет интерпретирована как «сырая» (без учёта экранирования обратными слэшами). То есть обратным слэшам не будет позволено экранировать символы-p
как и в первом примере, содержит сообщение, показываемое пользователю.Please open Telegram to view this post
VIEW IN TELEGRAM
Видеоуроки:
1 — Привет Мир
2 — Переменные
3 — Команда read и Параметры
4 — Условный оператор if
5 — Условный оператор case
6 — Вложенные условия
7 — Массивы
8 — Циклы
9 — Функции
10 — Рекурсия
11 — Перенаправление ввода/вывода
Please open Telegram to view this post
VIEW IN TELEGRAM
Bash скрипт для сканирования диапазона портов
Наш скрипт будет принимать два аргумента – IP-адрес для сканирования и диапазон портов для сканирования.
- Сохраните скрипт в файл, например portscan.sh
- Сделайте скрипт исполняемым: chmod +x portscan.sh
- Запустите скрипт с IP-адресом и диапазоном портов: ./portscan.sh 192.168.1.1 20 80
- Будет произведено сканирование портов с 20 по 80 на IP-адресе 192.168.1.1.
🔨 bash_help
Наш скрипт будет принимать два аргумента – IP-адрес для сканирования и диапазон портов для сканирования.
#!/bin/bashДля использования необходимо предоставить ему права на выполнение и запустить его с IP-адресом и диапазоном портов для сканирования.
ip=$1
startport=$2
endport=$3
function portscan {
for ((counter=$startport; counter<=$endport; counter++))
do
(echo > /dev/tcp/$ip/$counter) > /dev/null 2>&1 && echo "$counter open"
done
}
portscan
- Сохраните скрипт в файл, например portscan.sh
- Сделайте скрипт исполняемым: chmod +x portscan.sh
- Запустите скрипт с IP-адресом и диапазоном портов: ./portscan.sh 192.168.1.1 20 80
- Будет произведено сканирование портов с 20 по 80 на IP-адресе 192.168.1.1.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как вывести список директорий используя ls в Bash
Для обработки в скриптах может понадобиться в определённой директории получить только список только папок без файлов. Далее показано, как это сделать разными способами.
1. С помощью ls увидеть все папки кроме скрытых
*/ - это шаблон, который соответствует всем подкаталогам в текущем каталоге (* будет соответствовать всем файлам и подкаталогам; / ограничивает его каталогами). Точно так же, чтобы вывести список всех подкаталогов в /home/mial/bin/aur, используйте:
Обратите внимание, что */ не найдёт любые скрытые папки. Чтобы включить и их, укажите их явно:
Следующий способ показывает каталоги только в текущей папке, но делает это в виде столбика:
В этом варианте применяется фильтрация вывода с помощью grep. Этот способ имеет ограничение — папки должны выводиться в виде подробного списка:
🔨 bash_help
Для обработки в скриптах может понадобиться в определённой директории получить только список только папок без файлов. Далее показано, как это сделать разными способами.
1. С помощью ls увидеть все папки кроме скрытых
*/ - это шаблон, который соответствует всем подкаталогам в текущем каталоге (* будет соответствовать всем файлам и подкаталогам; / ограничивает его каталогами). Точно так же, чтобы вывести список всех подкаталогов в /home/mial/bin/aur, используйте:
ls -d /home/mial/bin/aur/*/Чтобы вывести только каталоги в текущей папке:
ls -d */Чтобы вывести данные в столбик:
ls -1 -d */2. С помощью ls увидеть все папки вместе со скрытыми
Обратите внимание, что */ не найдёт любые скрытые папки. Чтобы включить и их, укажите их явно:
ls -d .*/ */3. С помощью ls и cut
Следующий способ показывает каталоги только в текущей папке, но делает это в виде столбика:
ls -d */ | cut -f1 -d'/'Чтобы показать вместе со скрытыми каталогами:
ls -d .*/ */ | cut -f1 -d'/'Чтобы показать только директории в папке /home/mial/bin/aur:
ls -d /home/mial/bin/aur/*/ | cut -f1 -d'/'4. Используя ls и grep
В этом варианте применяется фильтрация вывода с помощью grep. Этот способ имеет ограничение — папки должны выводиться в виде подробного списка:
ls -l | grep "^d"Чтобы показать вместе со скрытыми папками:
ls -al | grep "^d"Для вывода только имён директорий (возможны проблемы с директориями, имеющими пробелы в названиях):
ls -l | grep "^d" | cut -f 10 -d ' '
Please open Telegram to view this post
VIEW IN TELEGRAM
Как управлять WireGuard VPN через bash скрипт в Linux
Перед созданием скрипта убедитесь, что У вас установлен в системе сам клиент WireGuard. Чтобы это проверить, введите команду в терминале:
Создайте файл WireGuard.sh и дайте ему права на выполнение.
🔨 bash_help
Перед созданием скрипта убедитесь, что У вас установлен в системе сам клиент WireGuard. Чтобы это проверить, введите команду в терминале:
sudo apt install wireguard resolvconfЕсли он уже установлен, то система об этом сообщит. Но если нет, то установите и все его зависимости. После чего просто скопируйте свой конфиг wg0.conf в папку:
sudo nano /etc/wireguard/wg0.confBash скрипт управления WireGuard
#!/bin/bashЗамените фразу «ВАШ_ПАРОЛЬ_ОТ_ROOT» на пароль от Вашей учетной записи которая имеет права администратора root. Эта команда внутри скрипта сама вводит Ваш пароль перед выполнением запуска или остановки службы WG.
function wgstart() {
echo ""
echo "Запустить VPN: "
echo ВАШ_ПАРОЛЬ_ОТ_ROOT | sudo -S su
sudo wg-quick up wg0
echo ""
}
function wgstop() {
echo ""
echo "Остановить VPN: "
echo ""
echo ВАШ_ПАРОЛЬ_ОТ_ROOT | sudo -S su
sudo wg-quick down wg0
echo ""
}
function wgedit() {
echo ""
echo "Редактировать VPN конфиг: "
echo ""
echo ВАШ_ПАРОЛЬ_ОТ_ROOT | sudo -S su
sudo nano /etc/wireguard/wg0.conf
echo ""
}
##
# Color Variables
##
green='\e[32m'
blue='\e[34m'
clear='\e[0m'
##
# Color Functions
##
ColorGreen(){
echo -ne $green$1$clear
}
ColorBlue(){
echo -ne $blue$1$clear
}
menu(){
echo -ne "
Управление VPN WireGuard
$(ColorGreen '1)') Запуск VPN WG
$(ColorGreen '2)') Остановка VPN WG
$(ColorGreen '3)') Редактировать VPN WG
$(ColorBlue 'Выберите, что нужно сделать:') "
read a
case $a in
1) wgstart ; menu ;;
2) wgstop ; menu ;;
3) wgedit ; menu ;;
*) echo -e $red"Неправильный вариант."$clear; WrongCommand;;
esac
}
# Call the menu function
menu
Создайте файл WireGuard.sh и дайте ему права на выполнение.
chmod +x ./WireGuard.shНаконец пришло время выполнить скрипт:
bash wireguard-manager.sh
Please open Telegram to view this post
VIEW IN TELEGRAM
Как присвоить переменной вывод команды в Bash
Если вам нужно, чтобы полученное от команды значение присваивалось переменной, то это можно сделать несколькими способами.
1. Используя обратные кавычки (апострофы). Пример кода:
2. В дополнение к обратным кавычкам можно использовать $(). Преимуществом данного способа является возможность вложенности. Пример:
Ещё одним важным отличием $() от двойных кавычек является то, что при обращении к переменной, если ей присвоено значение $(), она пересчитывается каждый раз. А если значение переменной определено командой внутри обратных кавычек, то это значение считается только один раз (при присвоении), а затем только используется.
3. Можно создать пользовательскую функцию, содержащую необходимые команды, и использовать название функции вместо имени переменной. Пример:
4. И ещё более экзотический вариант – использование eval:
🔨 bash_help
Если вам нужно, чтобы полученное от команды значение присваивалось переменной, то это можно сделать несколькими способами.
1. Используя обратные кавычки (апострофы). Пример кода:
#!/bin/bashДля этого варианта нужно помнить следующее: не перепутайте обратные кавычки с одиночными кавычками. А ещё использование этого синтаксиса считается теперь устаревшим (но везде работающим).
VAR1="$1"
VAR2="$2"
MOREF=`sudo run command against $VAR1 | grep name | cut -c7-`
echo $MOREF
2. В дополнение к обратным кавычкам можно использовать $(). Преимуществом данного способа является возможность вложенности. Пример:
OUTPUT="$(ls -1)"Использование кавычек
echo "${OUTPUT}"
(")
имеет смысл при возможности появления значений в несколько строк.Ещё одним важным отличием $() от двойных кавычек является то, что при обращении к переменной, если ей присвоено значение $(), она пересчитывается каждый раз. А если значение переменной определено командой внутри обратных кавычек, то это значение считается только один раз (при присвоении), а затем только используется.
3. Можно создать пользовательскую функцию, содержащую необходимые команды, и использовать название функции вместо имени переменной. Пример:
func (){Вызывать нужно по имени функции (в данном случае func).
ls -l
}
4. И ещё более экзотический вариант – использование eval:
var="ls -l"
eval $var
Please open Telegram to view this post
VIEW IN TELEGRAM
Скачиваем Youtube плейлист в формате mp3 одним bash-скриптом
Bash-скрипт на входе получает ID плейлиста, на выходе – mp3 файлы, которые можно слушать в любимом плеере.
Скачать mp3 с Youtube нельзя, поэтому процесс делим на 3 шага:
1. скачиваем flv
2. извлекаем звуковую дорожку
3. удаляем временный flv
На всякий случай напомню, что ID плейлиста это get-параметр «list».
Зависимости:
- ffmpeg libavcodec-extra-53 для конвертации в mp3
🖼️ Ссылка на скрипт
🔨 bash_help
Bash-скрипт на входе получает ID плейлиста, на выходе – mp3 файлы, которые можно слушать в любимом плеере.
Скачать mp3 с Youtube нельзя, поэтому процесс делим на 3 шага:
1. скачиваем flv
2. извлекаем звуковую дорожку
3. удаляем временный flv
На всякий случай напомню, что ID плейлиста это get-параметр «list».
Зависимости:
sudo apt-get install youtube-dl ffmpeg libavcodec-extra-53
- youtube-dl для скачивания видеофайла- ffmpeg libavcodec-extra-53 для конвертации в mp3
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрипт для включения/выключения тачпада ноутбука
Скрипт включает тачпад, если отключен, и наоборот. В своей работе использует утилиту synclient, позволяющую управлять тачпадами производства Synaptics (90% тачпадов делают они). При запуске без аргументов утилита выводит различную информацию о тачпаде, в том числе строку TouchpadOff = 1, если он активирован, и TouchpadOff = 2, если отключен. Скрипт находит это значение и в зависимости от состояния тачпада включает или отключает его.
🔨 bash_help
Скрипт включает тачпад, если отключен, и наоборот. В своей работе использует утилиту synclient, позволяющую управлять тачпадами производства Synaptics (90% тачпадов делают они). При запуске без аргументов утилита выводит различную информацию о тачпаде, в том числе строку TouchpadOff = 1, если он активирован, и TouchpadOff = 2, если отключен. Скрипт находит это значение и в зависимости от состояния тачпада включает или отключает его.
#!/bin/sh
state=`synclient | grep TouchpadOff | cut -d '=' -f 2`
if [ $state = "1" ]; then
synclient TouchpadOff=0
else
synclient TouchpadOff=1
fi
Please open Telegram to view this post
VIEW IN TELEGRAM
Как сделать снимок с помощью веб-камеры
Скрипт использует видеоплеер mpv, чтобы записать первые три кадра, снятые камерой, в JPEG-файлы с именами 0000000.jpg, 00000002.jpg, 00000003.jpg, затем переименовывает третий снимок в файл photo.jpg, а остальные удаляет. Три снимка необходимы для того, чтобы камера успела провести инициализацию, обычно первые два получаются просто черными.
🔨 bash_help
Скрипт использует видеоплеер mpv, чтобы записать первые три кадра, снятые камерой, в JPEG-файлы с именами 0000000.jpg, 00000002.jpg, 00000003.jpg, затем переименовывает третий снимок в файл photo.jpg, а остальные удаляет. Три снимка необходимы для того, чтобы камера успела провести инициализацию, обычно первые два получаются просто черными.
!#/bin/bashИногда изображение выходит перевернутым; чтобы это исправить, mpv следует запускать с флагом -vf flip:
mpv tv:// -frames 3 -vo jpeg
mv 00000003.jpg photo.jpg
rm -f 0000*.jpg
$ mpv tv:// -frames 3 -vf flip -vo jpeg
Please open Telegram to view this post
VIEW IN TELEGRAM
Скрипт Bash для мониторинга использования процессора и памяти на Linux
Скрипт может собирать информацию об использовании из файла /proc/stat, а затем сохранять ее в файле лога. Его также можно настроить на отправку предупреждения по электронной почте, когда использование процессора или памяти превышает определенный порог.
Кроме того, скрипт можно использовать для запроса у системы такой информации, как модель процессора, использование и средние значения нагрузки.
iostat: Эта команда сообщает статистику центрального процессора (CPU) и статистику ввода/вывода для устройств и разделов.
🔨 bash_help
Скрипт может собирать информацию об использовании из файла /proc/stat, а затем сохранять ее в файле лога. Его также можно настроить на отправку предупреждения по электронной почте, когда использование процессора или памяти превышает определенный порог.
Кроме того, скрипт можно использовать для запроса у системы такой информации, как модель процессора, использование и средние значения нагрузки.
#!/bin/bash
# This script monitors CPU and memory usage
while :
do
# Get the current usage of CPU and memory
cpuUsage=$(top -bn1 | awk '/Cpu/ { print $2}')
memUsage=$(free -m | awk '/Mem/{print $3}')
# Print the usage
echo "CPU Usage: $cpuUsage%"
echo "Memory Usage: $memUsage MB"
# Sleep for 1 second
sleep 1
done
Ниже перечислены другие инструменты/команды, которые можно использовать для мониторинга использования ЦП и памяти в системе Linux:free
: Эта команда показывает общий объем свободной и используемой физической памяти и памяти подкачки в системе, а также буферов и кэшей, используемых ядром.top
: Эта команда обеспечивает динамическое представление работающей системы в реальном времени. Она может отображать сводную информацию о системе, а также список задач, которыми в данный момент управляет ядро Linux.htop
: Это интерактивный просмотрщик процессов для Linux. Это приложение в текстовом режиме, которое отображает информацию о процессах в удобном для пользователя виде.vmsta
t: Эта команда выдает информацию о процессах, памяти, подкачке, блочном вводе-выводе, ловушках и активности процессора.ps
: Эта команда используется для отображения информации о текущих запущенных процессах.iostat: Эта команда сообщает статистику центрального процессора (CPU) и статистику ввода/вывода для устройств и разделов.
ps
: Эта команда используется для отображения информации о текущих запущенных процессах.iostat
: Эта команда сообщает статистику центрального процессора (CPU) и статистику ввода/вывода для устройств и разделов.Please open Telegram to view this post
VIEW IN TELEGRAM
Полезные сочетания клавиш в оболочке bash для навигации по командной строке
Давайте разберем полезные хоткеи, которые смогут оптимизировать вашу работу в терминале Linux/Unix.
^a, ^e – Переместить курсор.
^-a переместит курсор в начало строки.
^-e переместит курсор в конец строки.
^d – конец файла или EOF.
Сообщает консольному приложению, что вы закончили вводить текст.
^i – Очистить буфер терминала.
Это означает, что в терминале не будет истории для прокрутки назад.
Однако это не работает в терминале MATE.
^z, – приостановка и возобновление вывода.
Это означает, что программа должна прекратить вывод на ваше терминальное устройство.
Если вы наберете fg, программа вернется на передний план.
^l – Очистить экран.
Команда очистит экран и оставит чистый терминал для других команд.
^c – Остановить команду.
Это сочетание клавиш остановит выполнение текущей команды в терминале.
Перемещение по строке терминала
Alt-B. Отправляет курсор на одно слово назад.
Alt-F. Посылает курсор вперед на одно слово.
По символам
^-b. Перемещает курсор на один символ назад.
^-f. Перемещает курсор на один символ вперед.
^-_. Отменяет последнее нажатие клавиши.
Удалить/Вставить
^-w. Вырезать слово перед курсором и переместить его в буфер обмена.
^+k: Вырезать часть строки после курсора, добавив ее в буфер обмена.
^+u: Вырезать часть строки перед курсором, добавив ее в буфер обмена.
^+y: Вставить последнее, что вы вырезали из буфера обмена. Буква “y” здесь означает “вырезать”.
🔨 bash_help
Давайте разберем полезные хоткеи, которые смогут оптимизировать вашу работу в терминале Linux/Unix.
^a, ^e – Переместить курсор.
^-a переместит курсор в начало строки.
^-e переместит курсор в конец строки.
^d – конец файла или EOF.
Сообщает консольному приложению, что вы закончили вводить текст.
^i – Очистить буфер терминала.
Это означает, что в терминале не будет истории для прокрутки назад.
Однако это не работает в терминале MATE.
^z, – приостановка и возобновление вывода.
Это означает, что программа должна прекратить вывод на ваше терминальное устройство.
Если вы наберете fg, программа вернется на передний план.
^l – Очистить экран.
Команда очистит экран и оставит чистый терминал для других команд.
^c – Остановить команду.
Это сочетание клавиш остановит выполнение текущей команды в терминале.
Перемещение по строке терминала
Alt-B. Отправляет курсор на одно слово назад.
Alt-F. Посылает курсор вперед на одно слово.
По символам
^-b. Перемещает курсор на один символ назад.
^-f. Перемещает курсор на один символ вперед.
^-_. Отменяет последнее нажатие клавиши.
Удалить/Вставить
^-w. Вырезать слово перед курсором и переместить его в буфер обмена.
^+k: Вырезать часть строки после курсора, добавив ее в буфер обмена.
^+u: Вырезать часть строки перед курсором, добавив ее в буфер обмена.
^+y: Вставить последнее, что вы вырезали из буфера обмена. Буква “y” здесь означает “вырезать”.
Please open Telegram to view this post
VIEW IN TELEGRAM
Как запустить небольшой код Python в Bash
1. Как выполнить код Python в Bash
В командной строке Bash для выполнения кода используйте конструкцию вида:
Для выполнения программы Python в скрипте Bash используйте команду вида:
Если вам нужно запустить скрипт Python, а затем вывод программы присвоить переменной Bash, то используйте конструкцию вида:
Если код Python невозможно использовать в одной строке и вы не хотите использовать для вызова внешний скрипт, тогда вам подойдёт следующая конструкция:
Ещё один вариант этой конструкции:
🔨 bash_help
1. Как выполнить код Python в Bash
В командной строке Bash для выполнения кода используйте конструкцию вида:
python -c "КОД"
Ещё один вариант, который может пригодиться в более экзотических обстоятельствах:bash -c 'python -c "print (\"КОД\")"'
2. Как в скрипте Bash запустить программу на PythonДля выполнения программы Python в скрипте Bash используйте команду вида:
python СКРИПТ.py АРГУМЕНТ1 АРГУМЕНТ2 АРГУМЕНТ3Пример запуска скрипта extractor.py с передачей ему двух аргументов: значение переменной $line и 8080:
python extractor.py $line 8080
3. Как в скрипте Bash запустить программу на Python и присвоить её вывод переменнойЕсли вам нужно запустить скрипт Python, а затем вывод программы присвоить переменной Bash, то используйте конструкцию вида:
ПЕРЕМЕННАЯ=`python СКРИПТ.py АРГУМЕНТ1 АРГУМЕНТ2 АРГУМЕНТ3`Пример:
response=`python extractor.py $line 8080 2>/dev/null | sed -E "s/\/\/.+:/\/\/$line:/"`
4. Как в скрипт Bash встроить код PythonЕсли код Python невозможно использовать в одной строке и вы не хотите использовать для вызова внешний скрипт, тогда вам подойдёт следующая конструкция:
#!/bin/bashТам где КОД вставьте код Python.
script=`cat <<_EOF_
КОД
_EOF_`
echo "$script" | python
Ещё один вариант этой конструкции:
python << ENDИ ещё один вариант, в котором вывод присваивается в качестве значения переменной ABC:
... КОД ...
END
ABC=$(python << END ... END)
Please open Telegram to view this post
VIEW IN TELEGRAM