swap_digger
Bash-скрипт, автоматизирующий извлечение файла подкачки Linux и поиск учетных данных пользователей, адресов электронной почты, содержимого веб-форм, WiFi SSID ключей и других чувствительных данных.
🐙 Перейти на Github
🔨 bash_help
Bash-скрипт, автоматизирующий извлечение файла подкачки Linux и поиск учетных данных пользователей, адресов электронной почты, содержимого веб-форм, WiFi SSID ключей и других чувствительных данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3😐1
Утилита sshpass — автоматические действия с SFTP
В этой статье будут описаны автоматические действия с SFTP сервером. Например — передача или скачивание файлов с помощью bash скрипта.
Когда вы подключаетесь по SSH, то для подключения используете пароль или ключ. Если нет возможности настроить подключение по ключам, то остаётся использовать пароль. Но утилита ssh, с помощью которой мы подключаемся к серверу не разрешает подставлять пароль. Вместо этого она использует псевдо-терминал для ввода пароля вручную.
Это затрудняет выполнение автоматических действий, когда у вас нет возможности использовать SSH ключи. Например такая команда не работает:
Здесь даже на терминале появилось предупреждение о том, что STDIN это вам не терминал!
Для решения этой задачи придумали утилиту sshpass, которую можно установить из репозиториев:
С помощью этой утилиты можно передать пароль утилите ssh. Делается это таким способом:
Выполнение команд ftp из bash скрипта
Но в этой статье описывается sftp а не просто ssh. Поэтому подключение будет выполнятся с помощью утилиты sftp:
🖼️ Дочитать статью
🔨 bash_help
В этой статье будут описаны автоматические действия с SFTP сервером. Например — передача или скачивание файлов с помощью bash скрипта.
Когда вы подключаетесь по SSH, то для подключения используете пароль или ключ. Если нет возможности настроить подключение по ключам, то остаётся использовать пароль. Но утилита ssh, с помощью которой мы подключаемся к серверу не разрешает подставлять пароль. Вместо этого она использует псевдо-терминал для ввода пароля вручную.
alex@deb-11:~$ ssh alex@192.168.0.34
alex@192.168.0.34's password:
Это затрудняет выполнение автоматических действий, когда у вас нет возможности использовать SSH ключи. Например такая команда не работает:
alex@deb-11:~$ (echo password) | ssh alex@192.168.0.34
Pseudo-terminal will not be allocated because stdin is not a terminal.
alex@192.168.0.34's password:
Здесь даже на терминале появилось предупреждение о том, что STDIN это вам не терминал!
Для решения этой задачи придумали утилиту sshpass, которую можно установить из репозиториев:
alex@deb-11:~$ sudo apt install sshpass
С помощью этой утилиты можно передать пароль утилите ssh. Делается это таким способом:
alex@deb-11:~$ sshpass -p "password" ssh alex@192.168.0.34
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-52-generic x86_64)
Выполнение команд ftp из bash скрипта
Но в этой статье описывается sftp а не просто ssh. Поэтому подключение будет выполнятся с помощью утилиты sftp:
alex@deb-11:~$ sshpass -p "password" sftp alex@192.168.0.34
Connected to 192.168.0.34.
sftp>
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25✍2🔥2😐1
Как установить и включить автозаполнение команд в Bash для CentOS/RHEL?
Bash, несомненно, является самой популярной оболочкой Linux, и не удивительно, что именно это оболочка по умолчанию во многих дистрибутивах Linux. Одной из самых удобных функций этой оболочки является встроенная поддержка «автозаполнения».
Иногда это называется автозаполнением с помощью клавиши [TAB], эта функция позволяет вам легко заполнить структуру команд. Она позволяет вводить частичную команду, а затем нажимать клавишу [Tab] для автоматического завершения команды и ее аргументов. В этой функции перечислены всё множество возможных аргументов.
Как и Bash, почти все современные Linux-оболочки поставляются с поддержкой встроенных команд. В этом кратком руководстве мы покажем вам, как включить функцию автозавершения Bash в системах CentOS и RHEL.
Вот несколько основных действий, которые вы обязательно должны выполнить, чтобы упростить работу с командной строкой:
- Начальная настройка и конфигурация сервера на RHEL 7
- Начальная настройка и конфигурация сервера на CentOS 7
Во-первых, вам нужно включить репозиторий EPEL в вашей системе, а затем установить пакет автозаполнения bash и некоторые дополнительные функции, используя диспетчер пакетов YUM, таким способом:
Теперь, когда вы установили автозаполнение bash, вы должны включить его для начала работы. Сначала укажите файл
Кроме того, выйдите из текущего сеанса и повторно войдите в систему.
Теперь функция автозаполнения доступна в вашей системе, вы можете попробовать ее, как показано ниже.
Команду [TAB] также можно выполнять для имен путей и имен переменных, и эта команда помимо всего прочего еще и хорошо программируется.
🔨 bash_help
Bash, несомненно, является самой популярной оболочкой Linux, и не удивительно, что именно это оболочка по умолчанию во многих дистрибутивах Linux. Одной из самых удобных функций этой оболочки является встроенная поддержка «автозаполнения».
Иногда это называется автозаполнением с помощью клавиши [TAB], эта функция позволяет вам легко заполнить структуру команд. Она позволяет вводить частичную команду, а затем нажимать клавишу [Tab] для автоматического завершения команды и ее аргументов. В этой функции перечислены всё множество возможных аргументов.
Как и Bash, почти все современные Linux-оболочки поставляются с поддержкой встроенных команд. В этом кратком руководстве мы покажем вам, как включить функцию автозавершения Bash в системах CentOS и RHEL.
Вот несколько основных действий, которые вы обязательно должны выполнить, чтобы упростить работу с командной строкой:
- Начальная настройка и конфигурация сервера на RHEL 7
- Начальная настройка и конфигурация сервера на CentOS 7
Во-первых, вам нужно включить репозиторий EPEL в вашей системе, а затем установить пакет автозаполнения bash и некоторые дополнительные функции, используя диспетчер пакетов YUM, таким способом:
# yum install bash-completion bash-completion-extras
Теперь, когда вы установили автозаполнение bash, вы должны включить его для начала работы. Сначала укажите файл
bash_completion.sh
. Вы можете использовать команду locate
ниже, чтобы найти ее:$ locate bash-completion.sh
$ source /etc/profile.d/bash_completion.sh
Кроме того, выйдите из текущего сеанса и повторно войдите в систему.
$ logout
Теперь функция автозаполнения доступна в вашей системе, вы можете попробовать ее, как показано ниже.
$ li[TAB]
$ ls .bash[TAB]
Команду [TAB] также можно выполнять для имен путей и имен переменных, и эта команда помимо всего прочего еще и хорошо программируется.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍8👍7🔥4
Переменная экспорта Bash
Переменная экспорта Bash — это переменная, которая доступна всем дочерним процессам текущей оболочки. Когда переменная экспортируется, она становится переменной среды, что означает, что к ней может получить доступ любая программа или сценарий, работающий в текущей среде оболочки.
Чтобы экспортировать переменную, вам нужно использовать команду экспорта, за которой следует имя переменной, которую вы хотите экспортировать. Вот пример:
В этом примере мы экспортируем переменную
Вы также можете экспортировать несколько переменных одной командой:
Команда
Экспорт переменной в Bash позволяет использовать ее в любом скрипте или программе, работающей в текущей среде оболочки. Вот пример того, как использовать экспортированную переменную в скрипте:
В этом примере мы экспортируем переменную
Вы также можете экспортировать переменные в профиль Bash, который представляет собой сценарий, который выполняется каждый раз, когда пользователь входит в систему. Экспорт переменных в профиль Bash гарантирует, что переменные будут доступны при каждом входе в систему.
Чтобы экспортировать переменную в профиль Bash, вам необходимо добавить команду экспорта в файл:
После того, как вы добавили команду экспорта в профиль Bash, переменная будет экспортироваться каждый раз, когда вы входите в систему.
🖼️ Дочитать статью
🔨 bash_help
Переменная экспорта Bash — это переменная, которая доступна всем дочерним процессам текущей оболочки. Когда переменная экспортируется, она становится переменной среды, что означает, что к ней может получить доступ любая программа или сценарий, работающий в текущей среде оболочки.
Чтобы экспортировать переменную, вам нужно использовать команду экспорта, за которой следует имя переменной, которую вы хотите экспортировать. Вот пример:
export MY_VARIABLE="Hello World"
В этом примере мы экспортируем переменную
MY_VARIABLE
со значением «Hello World». После экспорта этой переменной она становится переменной среды, и к ней может получить доступ любой дочерний процесс текущей оболочки.Вы также можете экспортировать несколько переменных одной командой:
export VAR1="value1" VAR2="value2" VAR3="value3"
Команда
env
отображает список всех переменных среды в текущей среде оболочки. Эта команда выведет список всех переменных среды, включая экспортированные вами переменные.Экспорт переменной в Bash позволяет использовать ее в любом скрипте или программе, работающей в текущей среде оболочки. Вот пример того, как использовать экспортированную переменную в скрипте:
#!/bin/bash
export MY_VARIABLE="Hello World"
echo "The value of MY_VARIABLE is: $MY_VARIABLE"
В этом примере мы экспортируем переменную
MY_VARIABLE
со значением «Hello World» и используем ее в скрипте. скрипт будет отображать значение MY_VARIABLE
при выполнении.Вы также можете экспортировать переменные в профиль Bash, который представляет собой сценарий, который выполняется каждый раз, когда пользователь входит в систему. Экспорт переменных в профиль Bash гарантирует, что переменные будут доступны при каждом входе в систему.
Чтобы экспортировать переменную в профиль Bash, вам необходимо добавить команду экспорта в файл:
export MY_VARIABLE="Hello World"
После того, как вы добавили команду экспорта в профиль Bash, переменная будет экспортироваться каждый раз, когда вы входите в систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19✍6🔥4😐1
ADB-Toolkit
BASH скрипт с 28 параметрами и раздел METASPLOIT с 6 параметрами, предназначенный для простого тестирования на проникновение в устройство Android.
🐙 Перейти на Github
🔨 bash_help
BASH скрипт с 28 параметрами и раздел METASPLOIT с 6 параметрами, предназначенный для простого тестирования на проникновение в устройство Android.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥6✍2
Bash cкрипт получения числа открытых файлов пользователя
Данный скрипт позволяет узнать сколько открытых файлов у определённого пользователя Linux. Это бывает необходимо для отладки службы, работающей под определённым пользователем.
В качестве параметра скрипту необходимо передать имя или uid пользователя.
Скрипт будем использовать следующими способами:
Вот сам скрипт:
Если скрипт получит параметр
Если скрипт получит всего один любой другой параметр, то он будет считаться именем пользователя. В этом случае, если такого пользователя в системе не будет, то скрипт скажет об этом.
Если скрипт получит не 1, а больше или меньше параметров, то эта ситуация также будет обработана.
Весь код по получению открытых файлов заключен в этих строчках:
То есть мы пробегаемся по всем процессам данного пользователя, и для каждого процесса (pid) вычисляем количество открытых файлов.
🔨 bash_help
Данный скрипт позволяет узнать сколько открытых файлов у определённого пользователя Linux. Это бывает необходимо для отладки службы, работающей под определённым пользователем.
В качестве параметра скрипту необходимо передать имя или uid пользователя.
Скрипт будем использовать следующими способами:
./openfiles.sh -h
— показать справку;./openfiles.sh <имя_или_uid>
— показать число открытых файлов.Вот сам скрипт:
#!/bin/bash
case "$1" in
-h)
echo -e "Скрипт покажет открытые файлы для выбранного пользователя.
Опции:
-h показать эту справку.
Примеры выполнения:
./files2.sh <username>
./files2.sh <uid>"
;;
*)
if [[ "$#" -eq 1 ]];
then
id "$1" >/dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo 'Пользователь не найден!'
exit 1
fi
for pid in `ps -u "$1" -o pid,comm | grep -v PID | awk '{print $1}'`
do
open_files=`ls -l /proc/$pid/fd | grep "anon_inode" | wc -l`
echo "Открытых файлов для pid $pid: $open_files"
done
else
echo -e "Забыли указать имя или id пользователя!
Или ввели больше одного параметра.
Для справки выполните $0 -h"
fi
;;
esac
Если скрипт получит параметр
-h
, то с помощью echo
просто выведет справку.Если скрипт получит всего один любой другой параметр, то он будет считаться именем пользователя. В этом случае, если такого пользователя в системе не будет, то скрипт скажет об этом.
Если скрипт получит не 1, а больше или меньше параметров, то эта ситуация также будет обработана.
Весь код по получению открытых файлов заключен в этих строчках:
for pid in `ps -u "$1" -o pid,comm | grep -v PID | awk '{print $1}'`
do
open_files=`ls -l /proc/$pid/fd | grep "anon_inode" | wc -l`
echo "Открытых файлов для pid $pid: $open_files"
done
То есть мы пробегаемся по всем процессам данного пользователя, и для каждого процесса (pid) вычисляем количество открытых файлов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥3✍2
Обработка строк циклом «while read line»
В этой статье разберемся с одним из циклов bash, а именно с циклом «while read line». С его помощью будем обрабатывать строки.
Допустим в скрипте есть переменная, значение которой состоит из нескольких строк:
Напомню, что \n это символ новой строки.
Выполним этот скрипт и получим такой результат:
Теперь изменим этот скрипт, чтобы каждая строка обрабатывалась в цикле:
Выполнив этот скрипт получим:
Подобный скрипт можно написать и таким способом:
Таким образом мы можем делать примерно такое:
Вот еще один пример bash скрипта:
Запустим это скрипт:
🔨 bash_help
В этой статье разберемся с одним из циклов bash, а именно с циклом «while read line». С его помощью будем обрабатывать строки.
Допустим в скрипте есть переменная, значение которой состоит из нескольких строк:
#!/bin/bash
a="шишка\nяблоко\nлисток\nгруша"
echo -e $a
Напомню, что \n это символ новой строки.
Выполним этот скрипт и получим такой результат:
$ ./test.sh
шишка
яблоко
листок
груша
Теперь изменим этот скрипт, чтобы каждая строка обрабатывалась в цикле:
#!/bin/bash
a="шишка\nяблоко\nлисток\nгруша"
echo -e "$a" | while read line
do
echo "На дереве висит $line"
done
Выполнив этот скрипт получим:
$ ./test.sh
На дереве висит шишка
На дереве висит яблоко
На дереве висит листок
На дереве висит груша
Подобный скрипт можно написать и таким способом:
#!/bin/bash
echo -e "шишка\nяблоко\nлисток\nгруша" | while read line
do
echo "На дереве висит $line"
done
Таким образом мы можем делать примерно такое:
"команда, возвращающая строки" | while read line
do
команда которой передаем на обработку каждую строку $line
done
Вот еще один пример bash скрипта:
#!/bin/bash
cat /etc/passwd | cut -f 1 -d ":" | while read line
do
echo "В системе есть пользователь - $line"
done
Запустим это скрипт:
$ ./test.sh
В системе есть пользователь - root
В системе есть пользователь - daemon
В системе есть пользователь - bin
**** И так далее ***
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥11✍3
Лимит открытых файлов — настройки sysclt.conf
В системе Linux каждый открытый файл занимает файловый дескриптор. Информация по занятым файловым дескрипторам и их лимит хранится в файле
В выводе мы видим 3 числа:
— Количество выделенных файловых дескрипторов (1120). Показывает количество открытых файлов в системе.
— Число выделенных, но не используемых файловых дескрипторов (0). Ядро версии выше чем Linux 2.6 всегда показывает 0. Потому что количество выделенных файловых дескрипторов точно соответствует количеству используемых файловых дескрипторов.
— Максимальное число файловых дескрипторов (9223372036854775807). Это и есть лимит открытых файлов в системе, который можно изменить с помощью файла sysclt.conf.
Для того, чтобы задать лимит, нужно в файле
Для того, чтобы изменения вступили в силу нужно выполнить команду:
В выводе мы увидим, какие изменения применяются.
И чтобы проверить наши изменения, опять посмотрим на файл
После проделанного я верну всё как было:
Посмотрим какой лимит используется по умолчанию, для этого нужно посмотреть файл /proc/sys/fs/nr_open:
То есть, любой процесс в системе не сможет открыть более 1048576 файлов.
Можем поменять это значение, также используя /etc/sysctl.conf. Параметр в этом случае будет называться fs.nr_open:
Чтобы узнать, сколько сейчас открыто файлов у произвольного процесса, выполните ls /proc/<pid>/fd | wc -l:
А для того, чтобы пробежаться по списку процессов определённого пользователя и узнать сколько файлов эти процессы открыли, можно использовать такой скрипт:
Дадим право на исполнение этому скрипту:
И выполним:
Здесь, в самом начале, вы видите ошибки. Просто процессы 6952, 6953, 6954 существовали, но пока скрипт выполнялся они уже завершились. А просто сложив все эти числа вы узнаете, сколько файлов открыто у определённого пользователя.
🔨 bash_help
В системе Linux каждый открытый файл занимает файловый дескриптор. Информация по занятым файловым дескрипторам и их лимит хранится в файле
/proc/sys/fs/file-nr:
$ cat /proc/sys/fs/file-nr
1120 0 9223372036854775807
В выводе мы видим 3 числа:
— Количество выделенных файловых дескрипторов (1120). Показывает количество открытых файлов в системе.
— Число выделенных, но не используемых файловых дескрипторов (0). Ядро версии выше чем Linux 2.6 всегда показывает 0. Потому что количество выделенных файловых дескрипторов точно соответствует количеству используемых файловых дескрипторов.
— Максимальное число файловых дескрипторов (9223372036854775807). Это и есть лимит открытых файлов в системе, который можно изменить с помощью файла sysclt.conf.
Для того, чтобы задать лимит, нужно в файле
/etc/sysclt.conf
задать параметр fs.file-max
и указать ему значение, например:$ sudo nano /etc/sysctl.conf
fs.file-max=1000000
Для того, чтобы изменения вступили в силу нужно выполнить команду:
$ sudo sysctl -p
fs.file-max = 1000000
В выводе мы увидим, какие изменения применяются.
И чтобы проверить наши изменения, опять посмотрим на файл
/proc/sys/fs/file-nr
:$ cat /proc/sys/fs/file-nr
1120 0 1000000
После проделанного я верну всё как было:
$ sudo nano /etc/sysctl.conf
fs.file-max=9223372036854775807
$ sudo sysctl -p
fs.file-max = 9223372036854775807
Посмотрим какой лимит используется по умолчанию, для этого нужно посмотреть файл /proc/sys/fs/nr_open:
$ cat /proc/sys/fs/nr_open
1048576
То есть, любой процесс в системе не сможет открыть более 1048576 файлов.
Можем поменять это значение, также используя /etc/sysctl.conf. Параметр в этом случае будет называться fs.nr_open:
$ sudo nano /etc/sysctl.conf
fs.nr_open=1024
$ sudo sysctl -p
fs.file-max = 9223372036854775807
fs.nr_open = 1024
$ cat /proc/sys/fs/nr_open
1024
Чтобы узнать, сколько сейчас открыто файлов у произвольного процесса, выполните ls /proc/<pid>/fd | wc -l:
$ sudo ls /proc/1/fd/ | wc -l
81
$ sudo ls /proc/525/fd/ | wc -l
15
А для того, чтобы пробежаться по списку процессов определённого пользователя и узнать сколько файлов эти процессы открыли, можно использовать такой скрипт:
$ nano openfiles-users-procs.sh
#!/bin/bash
user=$1
function work_fun {
ps -u $user | awk '{print $1}' | grep -v PID | while read line
do
echo "Открыто файлов для `ps -p "$line" -o comm | grep -v COMMAND` ("$line") = `sudo ls /proc/$line/fd/ | wc -l`"
done
}
work_fun | sort -rnk 7
Дадим право на исполнение этому скрипту:
$ chmod u+x openfiles-users-procs.sh
И выполним:
$ ./openfiles-users-procs.sh alex
ls: cannot access '/proc/6952/fd/': No such file or directory
ls: cannot access '/proc/6953/fd/': No such file or directory
ls: cannot access '/proc/6954/fd/': No such file or directory
Открыто файлов для systemd (677) = 29
Открыто файлов для sshd (788) = 11
Открыто файлов для (sd-pam) (678) = 7
Открыто файлов для openfiles-users (6955) = 4
Открыто файлов для openfiles-users (6949) = 4
Открыто файлов для bash (797) = 4
Открыто файлов для sort (6951) = 3
Открыто файлов для openfiles-users (6950) = 3
Открыто файлов для (6954) = 0
Открыто файлов для (6953) = 0
Открыто файлов для (6952) = 0
Здесь, в самом начале, вы видите ошибки. Просто процессы 6952, 6953, 6954 существовали, но пока скрипт выполнялся они уже завершились. А просто сложив все эти числа вы узнаете, сколько файлов открыто у определённого пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍8✍4
PowerShell против Bash: в чем разница?
Немного истории: PowerShell
PowerShell - это среда автоматизации и задач Microsoft, удобная для управления конфигурацией. PowerShell использует компоненты, называемые командлетами, которые встроены в PowerShell. Дополнительные функции доступны через модули. Они устанавливаются из галереи PowerShell непосредственно из командной строки.
PowerShell отличается от Bash, потому что он предназначен для взаимодействия со структурами .NET изначально в Windows. Это означает, что он может передавать объекты и данные между сценариями, приложениями и сеансами. Каждый объект имеет свой собственный набор свойств, что делает обработку данных в PowerShell еще более детальной. Данные могут быть указаны как числа (целые числа), слова (строки), логические (истина и ложь) и многие другие типы. Это означает, что вы можете по-настоящему определиться с тем, как ваши скрипты обрабатывают ввод и вывод данных.
Немного истории: Bash
Системы Linux и Unix всегда выигрывали от структурирования многопользовательской терминальной среды. Вы можете запускать дополнительные сессии в той же системе и запускать сценарии и приложения, не влияя на основные сессии, в которые вошли другие пользователи. Это сильно отличалось от ранних систем Windows и DOS, которые были однопользовательскими средами с одной сессией, до появления Windows NT в середине 90-х годов.
Первоначальная оболочка, поставляемая с Unix, была известна как оболочка Bourne, названная в честь ее создателя Стивена Борна. Bash (Bourne again Shell) является преемником оболочки Bourne с открытым исходным кодом. Bash получил широкое распространение, когда Linux был создан в начале 90-х годов.
Существует множество функций, которые делают Bash очень популярным, главными из которых являются стабильность системы и то, что это открытый исходный код. Из-за этого он встречается практически в каждом дистрибутиве Linux. Все эти факторы делают его одной из наиболее часто используемых сред сценариев для ИТ-специалистов.
🖼️ Дочитать статью
🔨 bash_help
Немного истории: PowerShell
PowerShell - это среда автоматизации и задач Microsoft, удобная для управления конфигурацией. PowerShell использует компоненты, называемые командлетами, которые встроены в PowerShell. Дополнительные функции доступны через модули. Они устанавливаются из галереи PowerShell непосредственно из командной строки.
PowerShell отличается от Bash, потому что он предназначен для взаимодействия со структурами .NET изначально в Windows. Это означает, что он может передавать объекты и данные между сценариями, приложениями и сеансами. Каждый объект имеет свой собственный набор свойств, что делает обработку данных в PowerShell еще более детальной. Данные могут быть указаны как числа (целые числа), слова (строки), логические (истина и ложь) и многие другие типы. Это означает, что вы можете по-настоящему определиться с тем, как ваши скрипты обрабатывают ввод и вывод данных.
Немного истории: Bash
Системы Linux и Unix всегда выигрывали от структурирования многопользовательской терминальной среды. Вы можете запускать дополнительные сессии в той же системе и запускать сценарии и приложения, не влияя на основные сессии, в которые вошли другие пользователи. Это сильно отличалось от ранних систем Windows и DOS, которые были однопользовательскими средами с одной сессией, до появления Windows NT в середине 90-х годов.
Первоначальная оболочка, поставляемая с Unix, была известна как оболочка Bourne, названная в честь ее создателя Стивена Борна. Bash (Bourne again Shell) является преемником оболочки Bourne с открытым исходным кодом. Bash получил широкое распространение, когда Linux был создан в начале 90-х годов.
Существует множество функций, которые делают Bash очень популярным, главными из которых являются стабильность системы и то, что это открытый исходный код. Из-за этого он встречается практически в каждом дистрибутиве Linux. Все эти факторы делают его одной из наиболее часто используемых сред сценариев для ИТ-специалистов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4✍2
Утилита ttyd
Она позволяет запустить выполнение любой утилиты командной строки в браузере.
Примеры использования:
1. Например, может быть удобно, запустить top, htop, или что-то подобное в браузере. В отдельной вкладке браузера вы всегда сможете посмотреть нагруженность вашего сервера.
2. Или можно запустить экземпляр bash и работать в командной строке сервера в браузере. Это может быть удобно, если вы по какой-то причине не можете использовать ssh.
3. И простые команды, которые при выполнении дают какой-то вывод и завершаются, можно запустить с помощью этой утилиты. Это могут быть такие команды как: ls, df, du и тому подобное. При этом, как только вы обновляете страничку, на сервере выполняется данная утилита и результат выводится в браузере.
Данная утилита состоит из одного бинарника, который можно скачать с помощью следующей команды:
Дальше даём приложению право запускаться:
И запускаем, например bash:
После запуска видим порт, на котором запустился bash. И подключаемся по ip-адресу сервера и этому порту с помощью браузера, например:
Эта утилита имеет ряд опций, вот некоторые из них:
Приложение позволяет работать через Nginx reverse proxy и использовать TLS сертификаты. Также вы можете сделать Systemd юнит, чтобы запускать эту утилиту как службу.
🐙 Перейти на Github
🔨 bash_help
Она позволяет запустить выполнение любой утилиты командной строки в браузере.
Примеры использования:
1. Например, может быть удобно, запустить top, htop, или что-то подобное в браузере. В отдельной вкладке браузера вы всегда сможете посмотреть нагруженность вашего сервера.
2. Или можно запустить экземпляр bash и работать в командной строке сервера в браузере. Это может быть удобно, если вы по какой-то причине не можете использовать ssh.
3. И простые команды, которые при выполнении дают какой-то вывод и завершаются, можно запустить с помощью этой утилиты. Это могут быть такие команды как: ls, df, du и тому подобное. При этом, как только вы обновляете страничку, на сервере выполняется данная утилита и результат выводится в браузере.
Данная утилита состоит из одного бинарника, который можно скачать с помощью следующей команды:
$ wget -O ttyd https://github.com/tsl0922/ttyd/releases/download/1.7.3/ttyd.x86_64
Дальше даём приложению право запускаться:
$ chmod u+x ttyd
И запускаем, например bash:
$ ./ttyd bash
После запуска видим порт, на котором запустился bash. И подключаемся по ip-адресу сервера и этому порту с помощью браузера, например:
httt://192.168.0.5:7681.
Эта утилита имеет ряд опций, вот некоторые из них:
-p <port>
— порт на котором мы запускаем приложение (по умолчанию 7681, можно указать 0 чтобы использовать случайный порт);-i <interface>
— сетевой интерфейс который будет использоваться (например — eth0);-c <username:password>
— логин и пароль, который потребуется указать в браузере (по умолчанию парольная аутентификация выключена);-m <max-clients>
— максимальное количество клиентов;-o
— разрешает подключаться только одному клиенту, при этом как только произойдет дисконнект (например клиент закроет вкладку браузера или перезагрузит её), то web-приложение завершит свою работу;Приложение позволяет работать через Nginx reverse proxy и использовать TLS сертификаты. Также вы можете сделать Systemd юнит, чтобы запускать эту утилиту как службу.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥8✍5
Как сгенерировать пароль в терминале Linux
Рассмотрим, как можно сгенерировать случайный пароль в командной строке Linux. Будем использовать /dev/urandom и утилиты makepasswd, pwgen.
Используем /dev/urandom
При чтении устройство
То есть сгенерировать пароль в Linux поможет следующая команда:
Вы можете сделать
Затем применим изменения и попробуем сгенерировать пароль:
Используем makepasswd
Утилита
Просто выполните эту команду без параметров чтобы получить случайный пароль:
Можете указать количество символов в пароле с помощью опции
Можно создать пароли и сразу вывести их зашифрованный хеш с помощью опции
Используем pwgen
Утилита
Если выполнить её без опций, то вы увидите список из легко запоминаемых паролей.
Вы можете указать количество необходимых паролей с помощью опции
Существует также опция -s чтобы создавать более сложные пароли (их сложнее запомнить и подобрать):
Теперь вы знаете 3 способа генерации случайных паролей в терминале Linux. Если вы работаете за компьютером и вам нужно просто сгенерировать пароль, то удобнее использовать какой-нибудь графический инструмент. А показанные здесь способы можно использовать в скриптах.
🔨 bash_help
Рассмотрим, как можно сгенерировать случайный пароль в командной строке Linux. Будем использовать /dev/urandom и утилиты makepasswd, pwgen.
Используем /dev/urandom
При чтении устройство
/dev/urandom
возвращает бесконечный набор случайных байтов. Этот вывод можно отфильтровать с помощью утилиты tr
. Затем, вывод передать команде xargs
которая, по умолчанию выполняет команду echo
и ей передается всё, что было прочитано из стандартного ввода. А с помощью утилиты head
можно указать необходимое количество символов в пароле.То есть сгенерировать пароль в Linux поможет следующая команда:
$ tr -dc A-Za-z0-9_ < /dev/urandom | head -c 10 | xargs
AurTdatFbw
Вы можете сделать
bash
функцию и записать её в ваш .bashrc
:$ nano .bashrc
genpasswd() {
local l=$1
[ "$l" == "" ] && l=16
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}
Затем применим изменения и попробуем сгенерировать пароль:
$ . .bashrc
~$ genpasswd 5
Hbe7a
$ genpasswd 10
PDbt1tjBg0
Используем makepasswd
Утилита
makepasswd
может также помочь сгенерировать пароль в Linux. Она также использует /dev/urandom
, чтобы создавать случайные пароли. Вы можете установить её с помощью apt
:$ sudo apt install makepasswd
Просто выполните эту команду без параметров чтобы получить случайный пароль:
$ makepasswd
5q6m4jMHJ
Можете указать количество символов в пароле с помощью опции
chars
и можете создать несколько паролей с помощью опции count
:$ makepasswd --chars 4 --count 3
1d65
R5Xe
Lhes
Можно создать пароли и сразу вывести их зашифрованный хеш с помощью опции
crypt-md5:
$ makepasswd --chars 4 --count 3 --crypt-md5
DWBN $1$awZ5uNo/$r50RTWsihcMKEVQzoDyoZ1
xLN7 $1$h4ThtOu1$Bsmqhr/Tq/IIdGPtAVGda.
A2R2 $1$bss49Rj7$y.9nAbyr749N.eYRUF155.
Используем pwgen
Утилита
pwgen
генерирует легко запоминаемые пароли. Но также можешь генерировать случайные пароли. Устанавливается она также, с помощью apt:$ sudo apt install pwgen
Если выполнить её без опций, то вы увидите список из легко запоминаемых паролей.
Вы можете указать количество необходимых паролей с помощью опции
-N
и указать количество символов в пароле с помощью опции -n
:$ pwgen -N 3 -n 5
aeCo2 Le7oy uv6Oh
Существует также опция -s чтобы создавать более сложные пароли (их сложнее запомнить и подобрать):
$ pwgen -N 3 -n 5 -s
fY60V y6FIU 9XEt4
Теперь вы знаете 3 способа генерации случайных паролей в терминале Linux. Если вы работаете за компьютером и вам нужно просто сгенерировать пароль, то удобнее использовать какой-нибудь графический инструмент. А показанные здесь способы можно использовать в скриптах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27🔥18✍7😐1
Обработка строк циклом «for line in `comand`»
Если у вас какая-то команда возвращает список строк, например:
То с помощью цикла
Например такой скрипт:
Выполним его:
Или более сложная задача, вывести все процессы пользователя и выяснить сколько файлов они открыли, а также сколько файлов им позволено открывать.
🔨 bash_help
Если у вас какая-то команда возвращает список строк, например:
$ cat list.txt
шишка
яблоко
листок
груша
То с помощью цикла
for line in `comand`
можно обработать этот вывод построчно.Например такой скрипт:
#!/bin/bash
for line in `cat list.txt`
do
echo "На дереве висит $line"
done
Выполним его:
$ ./test.sh
На дереве висит шишка
На дереве висит яблоко
На дереве висит листок
На дереве висит груша
Или более сложная задача, вывести все процессы пользователя и выяснить сколько файлов они открыли, а также сколько файлов им позволено открывать.
#!/bin/bash
for pid in `ps -u alex -o pid | grep -v PID`
do
ps -p $pid -o comm,user | grep -v COMMAND
egrep 'files|Limit' /proc/$pid/limits
echo "Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"
done
Please open Telegram to view this post
VIEW IN TELEGRAM
✍19👍19🔥3
Сочетания клавиш bash
Ранее мы уже публиковали подобный пост. Этот более подробный.
Оболочка bash предлагает широкий выбор сочетаний клавиш, которые вы можете использовать. Они будут работать в bash в любой операционной системе.
Работа с процессами
Перемещение курсора
Исправление опечаток
Вырезка и склейка
Заглавные буквы
Табуляция
Завершение при помощи табуляции - очень полезная функция bash. При вводе имени файла, каталога или команды нажмите Tab, и bash автоматически завершит ввод, если это возможно. Если нет, bash покажет вам различные возможные совпадения, и вы можете продолжить вводить и нажимать Tab, чтобы закончить ввод.
Например, если у вас есть файл с длинным именем
Работа с историей команд
В Bash также есть специальный режим поиска, который вы можете использовать для поиска ранее выполненных команд:
🔨 bash_help
Ранее мы уже публиковали подобный пост. Этот более подробный.
Оболочка bash предлагает широкий выбор сочетаний клавиш, которые вы можете использовать. Они будут работать в bash в любой операционной системе.
Работа с процессами
Ctrl + C
: прервать (убить) текущий процесс, запущенный в терминале на переднем плане. Это посылает процессу сигнал SIGINT, который технически является просто запросом - большинство процессов его учтут, но некоторые могут и проигнорировать.Ctrl + Z
: приостановить текущий процесс, запущенный в bash на переднем плане. Это отправляет процессу сигнал SIGTSTP. Чтобы позже вернуть процесс на передний план, используйте команду fg имя_процесса
.
Ctrl + D
: закрыть оболочку bash. Это отправляет маркер EOF (End of file - конец файла) в bash, и bash завершает работу, когда получает этот маркер. Это похоже на команду exit.Перемещение курсора
Ctrl + A
или Home
: перейти к началу строки.Ctrl + E
или End
: перейти в конец строки.Alt + B
: перейти на одно слово влево (назад).Ctrl + B
: перейти на один символ влево (назад).Alt + F
: перейти вправо (вперед) на одно слово.Ctrl + F
: перейти вправо (вперед) на один символ.Ctrl + XX
: перемещение между началом строки и текущей позицией курсора. То есть можно нажать Ctrl + XX, чтобы вернуться в начало строки, что-то изменить, а затем нажать Ctrl + XX,
чтобы вернуться в исходную позицию курсора. Чтобы использовать этот шорткат, удерживайте клавишу Ctrl и дважды нажмите X.Исправление опечаток
Alt + T
: заменить текущее слово предыдущим.Ctrl + T
: поменять местами два последних символа перед курсором. Можно использовать, чтобы быстро исправить опечатки, когда вы вводите два символа в неправильном порядке.Ctrl + _
: отменить последнее нажатие клавиши. Можно использовать несколько раз подряд.Вырезка и склейка
Ctrl + W
: вырезать слово перед курсором и добавить его в буфер обмена.Ctrl + K
: вырезать часть строки после курсора, добавив ее в буфер обмена.Ctrl + U
: вырезать часть строки перед курсором, добавив ее в буфер обмена.Ctrl + Y
: вставить последнее вырезанное из буфера обмена.Заглавные буквы
Alt + U
: вводить каждый символ от курсора до конца текущего слова с заглавной буквы, переводя символы в верхний регистр.Alt + L
: убирает заглавные буквы с каждого символа от курсора до конца текущего слова, переводя символы в нижний регистр.Alt + C
: ввести заглавную букву под курсором. Ваш курсор переместится в конец текущего слова.Табуляция
Завершение при помощи табуляции - очень полезная функция bash. При вводе имени файла, каталога или команды нажмите Tab, и bash автоматически завершит ввод, если это возможно. Если нет, bash покажет вам различные возможные совпадения, и вы можете продолжить вводить и нажимать Tab, чтобы закончить ввод.
Tab
: автоматическое заполнение файла, каталога или команды, которую вы вводите.Например, если у вас есть файл с длинным именем
really_long_file_name
в /home/alex/
и это единственное имя файла, начинающееся с r в этом каталоге, вы можете ввести /home/alex/r
, нажать Tab, и bash автоматически заполнит /home/alex/really_long_file_name
для вас. Если у вас есть несколько файлов или каталогов, начинающихся с r, bash проинформирует вас о доступных вариантах. Вы можете начать вводить один из них и нажать Tab, чтобы продолжить.Работа с историей команд
Ctrl + P
или стрелка вверх: переход к предыдущей команде в истории команд. Нажмите ярлык несколько раз, чтобы вернуться к истории.Ctrl + N
или стрелка вниз: переход к следующей команде в истории команд. Нажмите ярлык несколько раз, чтобы перейти вперед по истории.Alt + R
: отменить любые изменения команды, извлеченной из истории, если вы ее редактировали.В Bash также есть специальный режим поиска, который вы можете использовать для поиска ранее выполненных команд:
Ctrl + R
: вспомнить последнюю команду, соответствующую указанным вами символам. Нажмите это сочетание и начните вводить символы для поиска команды в истории bash.Ctrl + O
: запустите найденную команду с помощью Ctrl + R
.Ctrl + G
: выйти из режима поиска в истории без выполнения команды.Please open Telegram to view this post
VIEW IN TELEGRAM
👍41✍8🔥4😐1
Bash функции и псевдонимы
В данной статье разберем как управлять файлами настройки оболочки пользователя. Псевдонимы и функции определяются в файлах с окончанием
В зависимости от того в каком файле мы употребим псевдоним или функцию он будет использоваться для конкретного пользователя или для всех пользователей. Посмотрим на конкретном примере пользователя, поэтому будет использоваться файл
Псевдоним (alias) – текст для вызова команды с ключами. Например:
Функция – текст для вызова скрипта, из нескольких команд. Например:
Заходим в Ubuntu и попадаем в домашнюю директорию. Следовательно в этой домашней папке есть файл
🖼️ Дочитать статью
🔨 bash_help
В данной статье разберем как управлять файлами настройки оболочки пользователя. Псевдонимы и функции определяются в файлах с окончанием
RC
- Bash.bashrc
, bashrc
, ~/.bashrc
.В зависимости от того в каком файле мы употребим псевдоним или функцию он будет использоваться для конкретного пользователя или для всех пользователей. Посмотрим на конкретном примере пользователя, поэтому будет использоваться файл
~/.bashrc
, который находится в домашней директории пользователя и определят настройки конкретного пользователя.Псевдоним (alias) – текст для вызова команды с ключами. Например:
la = ‘ls -A’
.Функция – текст для вызова скрипта, из нескольких команд. Например:
function Hello (){echo “Hello,dear,I am awake for:”; uptime –p;}
Заходим в Ubuntu и попадаем в домашнюю директорию. Следовательно в этой домашней папке есть файл
.profile
, который является ссылкой на файл bashrc
. И в этом файле есть много чего, но в частности есть псевдонимы.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3✍2
Как запустить Bash скрипт в Linux
Прежде чем вы сможете запустить ваш скрипт, вам нужно, чтобы ваш скрипт был исполняемым. Чтобы сделать исполняемый скрипт в Linux, используйте команду
Если вы не являетесь владельцем файла, вам необходимо убедиться, что вы принадлежите к правильной группе или что права доступа предоставлены «другой» группе в вашей системе.
В некоторых дистрибутивах ваш файл будет выделен другим цветом, когда он исполняемый.
Теперь, когда ваш файл исполняемый, давайте посмотрим, как можно легко запустить скрипт Bash.
Запустить Bash скрипт из пути к скрипту
Чтобы запустить Bash скрипт в Linux, просто укажите полный путь к скрипту и укажите аргументы, которые могут потребоваться для запуска Bash скрипта.
В качестве примера, скажем, у вас есть Bash-скрипт, расположенный в вашем домашнем каталоге.
Чтобы выполнить этот скрипт, вы можете указать полный путь к скрипту, который вы хотите запустить.
Кроме того, вы можете указать относительный путь к скрипту Bash, который вы хотите запустить.
Запустить Bash скрипт, используя bash
Чтобы запустить скрипт Bash в вашей системе, вы должны использовать команду bash и указать имя скрипта, который вы хотите выполнить, с необязательными аргументами.
Кроме того, вы можете использовать
В качестве примера, скажем, вы хотите запустить скрипт Bash с именем script. Чтобы выполнить его с помощью утилиты
Выполнить скрипт Bash, используя sh, zsh, dash
В зависимости от вашего дистрибутива, в вашей системе могут быть установлены другие утилиты оболочки.
Bash - интерпретатор оболочки, установленный по умолчанию, но вы можете захотеть выполнить ваш скрипт с использованием других интерпретаторов. Чтобы проверить, установлен ли интерпретатор оболочки в вашей системе, используйте команду
Когда вы определили интерпретатор оболочки, который хотите использовать, просто вызовите его, чтобы легко запустить скрипт.
Запуск скрипта Bash из любого места
В некоторых случаях вы можете запускать скрипты Bash, где бы вы ни находились в вашей системе.
Чтобы запустить скрипт Bash из любой точки вашей системы, вам нужно добавить свой скрипт в переменную среды
Благодаря тому, что путь к скрипту добавлен в
Кроме того, вы можете изменить переменную среды
Выйдите из файла и используйте команду source для файла
Запуск Bash скриптов из графического интерфейса
Последний способ выполнения Bash скриптов - это использование графического интерфейса, в данном случае интерфейса GNOME.
Чтобы запустить ваши скрипты с использованием GNOME, вы должны установить в проводнике
🔨 bash_help
Прежде чем вы сможете запустить ваш скрипт, вам нужно, чтобы ваш скрипт был исполняемым. Чтобы сделать исполняемый скрипт в Linux, используйте команду
chmod
и присвойте файлу права execute
. Вы можете использовать двоичную или символическую запись, чтобы сделать ее исполняемой.$ chmod u+x script
$ chmod 744 script
Если вы не являетесь владельцем файла, вам необходимо убедиться, что вы принадлежите к правильной группе или что права доступа предоставлены «другой» группе в вашей системе.
В некоторых дистрибутивах ваш файл будет выделен другим цветом, когда он исполняемый.
Теперь, когда ваш файл исполняемый, давайте посмотрим, как можно легко запустить скрипт Bash.
Запустить Bash скрипт из пути к скрипту
Чтобы запустить Bash скрипт в Linux, просто укажите полный путь к скрипту и укажите аргументы, которые могут потребоваться для запуска Bash скрипта.
$ /path/to/script <arg1> <arg2> ... <argn>
В качестве примера, скажем, у вас есть Bash-скрипт, расположенный в вашем домашнем каталоге.
Чтобы выполнить этот скрипт, вы можете указать полный путь к скрипту, который вы хотите запустить.
# Абсолютный путь
$ /home/user/script
# Абсолютный путь с аргументами
$ /home/user/script "john" "jack" "jim"
Кроме того, вы можете указать относительный путь к скрипту Bash, который вы хотите запустить.
# Относительный путь
$ ./script
# Относительный путь с аргументами
$ ./script "john" "jack" "jim"
Запустить Bash скрипт, используя bash
Чтобы запустить скрипт Bash в вашей системе, вы должны использовать команду bash и указать имя скрипта, который вы хотите выполнить, с необязательными аргументами.
$ bash <script>
Кроме того, вы можете использовать
sh
, если в вашем дистрибутиве установлена утилита sh
.В качестве примера, скажем, вы хотите запустить скрипт Bash с именем script. Чтобы выполнить его с помощью утилиты
bash
, вы должны выполнить следующую команду$ bash script
This is the output from your script!
Выполнить скрипт Bash, используя sh, zsh, dash
В зависимости от вашего дистрибутива, в вашей системе могут быть установлены другие утилиты оболочки.
Bash - интерпретатор оболочки, установленный по умолчанию, но вы можете захотеть выполнить ваш скрипт с использованием других интерпретаторов. Чтобы проверить, установлен ли интерпретатор оболочки в вашей системе, используйте команду
which
и укажите нужный интерпретатор.$ which sh
/usr/bin/sh
$ which dash
/usr/bin/dash
Когда вы определили интерпретатор оболочки, который хотите использовать, просто вызовите его, чтобы легко запустить скрипт.
Запуск скрипта Bash из любого места
В некоторых случаях вы можете запускать скрипты Bash, где бы вы ни находились в вашей системе.
Чтобы запустить скрипт Bash из любой точки вашей системы, вам нужно добавить свой скрипт в переменную среды
PATH
.$ export PATH="<path_to_script>:$PATH"
Благодаря тому, что путь к скрипту добавлен в
PATH
, вы можете вызывать его там, где хотите в своей системе.Кроме того, вы можете изменить переменную среды
PATH
в вашем файле .bashrc
и использовать команду source для обновления вашей текущей среды Bash.$ sudo nano ~/.bashrc
export PATH="<path_to_script>:$PATH"
Выйдите из файла и используйте команду source для файла
bashrc
для внесения изменений.$ source ~/.bashrc
$ echo $PATH
/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Запуск Bash скриптов из графического интерфейса
Последний способ выполнения Bash скриптов - это использование графического интерфейса, в данном случае интерфейса GNOME.
Чтобы запустить ваши скрипты с использованием GNOME, вы должны установить в проводнике
Ask what to do
для исполняемых файлов.Please open Telegram to view this post
VIEW IN TELEGRAM
✍12👍12🔥4😐1
Как провести стресс-тестирование вашей системы Linux
Есть несколько полезных методов, которые вы можете использовать, и есть инструменты, которые вы можете использовать, чтобы упростить этот процесс. В этой статье мы рассмотрим несколько вариантов.
Создаем циклы своими руками
Данный первый метод предполагает запуск некоторых циклов в командной строке и наблюдение за тем, как они влияют на систему. Этот метод нагружает ЦП, значительно увеличивая нагрузку. Результаты можно легко увидеть с помощью команды uptime или аналогичных команд.
В приведенной ниже примере мы начинаем четыре бесконечных цикла. Вы можете увеличить количество циклов, добавляя цифры или используя выражение bash, например {1..6} вместо «1 2 3 4».
В примере выше, команда, запускает четыре бесконечных цикла в фоновом режиме.
В этом случае были запущены задания 1-4. Отображаются как номера заданий, так и идентификаторы процессов.
Чтобы увидеть влияние на средние значения нагрузки, используйте команду, подобную показанной ниже. В этом случае команда uptime запускается каждые 30 секунд:
Если вы собираетесь периодически запускать подобные тесты, вы можете поместить команду цикла в скрипт:
В выходных данных вы можете увидеть, как средние значения нагрузки увеличиваются, а затем снова начинают снижаться после завершения циклов.
Поскольку показанные нагрузки представляют собой средние значения за 1, 5 и 15 минут, потребуется некоторое время, чтобы значения вернулись к нормальным для системы значениям.
Чтобы остановить циклы, выполните команду kill, подобную приведенной ниже - при условии, что номера заданий равны 1-4, как было показано ранее в этой статье. Если вы не уверены, используйте команду jobs, чтобы проверить ID.
🖼️ Дочитать статью
🔨 bash_help
Есть несколько полезных методов, которые вы можете использовать, и есть инструменты, которые вы можете использовать, чтобы упростить этот процесс. В этой статье мы рассмотрим несколько вариантов.
Создаем циклы своими руками
Данный первый метод предполагает запуск некоторых циклов в командной строке и наблюдение за тем, как они влияют на систему. Этот метод нагружает ЦП, значительно увеличивая нагрузку. Результаты можно легко увидеть с помощью команды uptime или аналогичных команд.
В приведенной ниже примере мы начинаем четыре бесконечных цикла. Вы можете увеличить количество циклов, добавляя цифры или используя выражение bash, например {1..6} вместо «1 2 3 4».
for i in 1 2 3 4; do while : ; do : ; done & done
В примере выше, команда, запускает четыре бесконечных цикла в фоновом режиме.
$ for i in 1 2 3 4; do while : ; do : ; done & done
[1] 205012
[2] 205013
[3] 205014
[4] 205015
В этом случае были запущены задания 1-4. Отображаются как номера заданий, так и идентификаторы процессов.
Чтобы увидеть влияние на средние значения нагрузки, используйте команду, подобную показанной ниже. В этом случае команда uptime запускается каждые 30 секунд:
$ while true; do uptime; sleep 30; done
Если вы собираетесь периодически запускать подобные тесты, вы можете поместить команду цикла в скрипт:
#!/bin/bash
while true
do
uptime
sleep 30
done
В выходных данных вы можете увидеть, как средние значения нагрузки увеличиваются, а затем снова начинают снижаться после завершения циклов.
Поскольку показанные нагрузки представляют собой средние значения за 1, 5 и 15 минут, потребуется некоторое время, чтобы значения вернулись к нормальным для системы значениям.
Чтобы остановить циклы, выполните команду kill, подобную приведенной ниже - при условии, что номера заданий равны 1-4, как было показано ранее в этой статье. Если вы не уверены, используйте команду jobs, чтобы проверить ID.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍10✍2
Шесть полезных трюков в работе с Linux
Если вы администрируете сервер c Linux-based операционной системой и вам часто приходится работать с bash - небольшие трюки ниже вам обязательно пригодятся, если вы с ними еще не знакомы :)
Табуляция
Первый трюк - табуляция. Многие, когда только начинают работать с Linux системами не знают об этой фиче, но она очень сильно упрощает жизнь. Табуляция - это завершение команд и названий файлов после нажатия на Tab. Когда это может быть полезно? К примеру, вы забыли как пишется команда или файл имеет длинное название, содержащее в себе много информации- номер версии, разрядность и так далее - начните писать название файла и нажмите на клавишу Tab - и сразу все получится!
Пайпирование
Второй трюк - пайпирование. Пайпом в Linux системах называется символ
Маска
Третий трюк - использование маски, которая обозначается символом
Это может быть очень полезным при написании скриптов, которые удаляют по крону старые логи или файлы аудио-записей. Но с данной командой нужно быть очень аккуратным - если забыть проставить критерии поиска, то команда вида
Вывод команды в файл
Четвертый трюк - вывод команды в файл. Это делается с помощью символа >. Сценариев использования масса, как пример приведу вывод команды
Быстрая смена директории
Пятый трюк - смена директории на домашнюю директории конкретного юзера с помощью символа
Фоновые процессы и запуск по условию
Шестой трюк - это запуск команды по условию и запуск команды в бэкграунде (фоновый процесс). Для этого служит символ
Если хотите запустить, к примеру, Wireshark в бэкграунде, необходимо написать
🔨 bash_help
Если вы администрируете сервер c Linux-based операционной системой и вам часто приходится работать с bash - небольшие трюки ниже вам обязательно пригодятся, если вы с ними еще не знакомы :)
Табуляция
Первый трюк - табуляция. Многие, когда только начинают работать с Linux системами не знают об этой фиче, но она очень сильно упрощает жизнь. Табуляция - это завершение команд и названий файлов после нажатия на Tab. Когда это может быть полезно? К примеру, вы забыли как пишется команда или файл имеет длинное название, содержащее в себе много информации- номер версии, разрядность и так далее - начните писать название файла и нажмите на клавишу Tab - и сразу все получится!
Пайпирование
Второй трюк - пайпирование. Пайпом в Linux системах называется символ
|
- он позволяет отправлять вывод одной команды в другую. К примеру, команда ls
выводит список файлов в директории и команда grep
возвращает результаты поиска по заданным параметром. С помощью пайпа эти две команды можно скомбинировать - например если вам нужно найти в директории конкретный файл (в данном случае - некую аудиозапись, которая начинается как recording010101:ls | grep recording010101
Маска
Третий трюк - использование маски, которая обозначается символом
*
- звездочка. К примеру, если нужно удалить все файлы, которые начинаются на слово recording01, то можно ввести следующую команду:rm recording01*
Это может быть очень полезным при написании скриптов, которые удаляют по крону старые логи или файлы аудио-записей. Но с данной командой нужно быть очень аккуратным - если забыть проставить критерии поиска, то команда вида
rm *
удалит всё содержимое директории.Вывод команды в файл
Четвертый трюк - вывод команды в файл. Это делается с помощью символа >. Сценариев использования масса, как пример приведу вывод команды
ls
в текстовый файл (ниже) - если у вас в директории очень большое количество файлов, то, для общего понимания что же именно в ней находится будет проще работать с текстовым файлом или же можно запустить рекурсивный скрипт с занесением содержимого всех каталогов в текстовые, например:ls > testfile.txt
Быстрая смена директории
Пятый трюк - смена директории на домашнюю директории конкретного юзера с помощью символа
~
. Просто введите cd ~
и вы попадете в директорию /home/user
.Фоновые процессы и запуск по условию
Шестой трюк - это запуск команды по условию и запуск команды в бэкграунде (фоновый процесс). Для этого служит символ
&
.Если хотите запустить, к примеру, Wireshark в бэкграунде, необходимо написать
wireshark &
- по умолчанию Bash запускает каждую программу в текущем терминале. Поэтому это может очень пригодиться, если вам нужно выполнять какую-то программу и все ещё пользоваться тем же терминалом. А если нужно запустить Wireshark через какое-то время, то можно воспользоваться командой &&
- к примеру, sleep 360 && wireshark
- это запустит wireshark через 6 минут. Сама команда sleep
не делает ничего, это, грубо говоря, просто условный таймер.Please open Telegram to view this post
VIEW IN TELEGRAM
👍21✍15🔥4😐4
Как ловить и обрабатывать ошибки в bash
Оболочка bash не имеет какого-либо причудливого механизма проглатывания исключений, такого как конструкции
В этом руководстве я познакомлю вас с основными советами по отлову и обработке ошибок в bash. Хотя представленные методы обработки ошибок не так причудливы, как доступные в других языках программирования, мы надеемся, что, приняв эту практику, вы сможете более изящно обрабатывать потенциальные ошибки bash.
Совет № 1 по обработке ошибок Bash: проверьте статус выхода
В качестве первой линии защиты всегда рекомендуется проверять статус выхода команды, поскольку ненулевой статус выхода обычно указывает на какой-то тип ошибки. Например:
Другой (более компактный) способ инициировать обработку ошибок на основе статуса выхода — использовать список ИЛИ:
С этим оператором ИЛИ выполняется тогда и только тогда, когда возвращает ненулевой статус выхода. Таким образом, вы можете заменить своей собственной процедурой обработки ошибок. Например:
Bash предоставляет встроенную переменную с именем
🖼️ Дочитать статью
🔨 bash_help
Оболочка bash не имеет какого-либо причудливого механизма проглатывания исключений, такого как конструкции
try/catch
. Некоторые ошибки bash могут быть просто проигнорированы, но могут иметь последствия в будущем. В оболочке bash нет даже надлежащего отладчика.В этом руководстве я познакомлю вас с основными советами по отлову и обработке ошибок в bash. Хотя представленные методы обработки ошибок не так причудливы, как доступные в других языках программирования, мы надеемся, что, приняв эту практику, вы сможете более изящно обрабатывать потенциальные ошибки bash.
Совет № 1 по обработке ошибок Bash: проверьте статус выхода
В качестве первой линии защиты всегда рекомендуется проверять статус выхода команды, поскольку ненулевой статус выхода обычно указывает на какой-то тип ошибки. Например:
if ! some_command; then
echo "some_command returned an error"
fi
Другой (более компактный) способ инициировать обработку ошибок на основе статуса выхода — использовать список ИЛИ:
<command1> <command2>
С этим оператором ИЛИ выполняется тогда и только тогда, когда возвращает ненулевой статус выхода. Таким образом, вы можете заменить своей собственной процедурой обработки ошибок. Например:
error_exit()
{
echo "Error: $1"
exit 1
}
run-some-bad-command error_exit "Some error occurred"
Bash предоставляет встроенную переменную с именем
$?
, которая сообщает вам статус выхода последней выполненной команды. Обратите внимание, что при вызове функции bash $?
считывает статус выхода последней команды, вызванной внутри функции. Поскольку некоторые ненулевые коды выхода имеют особое значение, вы можете обрабатывать их выборочно. Например:# run some command
status=$?
if [ $status -eq 1 ]; then
echo "General error"
elif [ $status -eq 2 ]; then
echo "Misuse of shell builtins"
elif [ $status -eq 126 ]; then
echo "Command invoked cannot execute"
elif [ $status -eq 128 ]; then
echo "Invalid argument"
fi
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍7✍3
Пример скрипта для создания резервной копии файлового сервера
Данный скрипт написан на bash под управлением операционной системы семейства Linux. Он будет работать по следующему сценарию:
Ежедневная актуализация данных в каталоге резервный копий daily.
Еженедельная актуализация данных в каталоге резервный копий weekly.
Создание полного архива с данными раз в 30 дней.
Старые архивы (которым более 370 дней) будут удаляться.
Скрипт будет сравнивать файлы в рабочем каталоге и папке резервного копирования с помощью rsync. Это позволит нам сэкономить на времени выполнения задания. Долго будет выполняться только задание создания архива с помощью tar.
Создаем каталог для скриптов и сам скрипт:
Задаем права скрипту на выполнение:
Скрипт готов к работе.
🖼️ Ссылка на скрипт
🔨 bash_help
Данный скрипт написан на bash под управлением операционной системы семейства Linux. Он будет работать по следующему сценарию:
Ежедневная актуализация данных в каталоге резервный копий daily.
Еженедельная актуализация данных в каталоге резервный копий weekly.
Создание полного архива с данными раз в 30 дней.
Старые архивы (которым более 370 дней) будут удаляться.
Скрипт будет сравнивать файлы в рабочем каталоге и папке резервного копирования с помощью rsync. Это позволит нам сэкономить на времени выполнения задания. Долго будет выполняться только задание создания архива с помощью tar.
Создаем каталог для скриптов и сам скрипт:
mkdir /scripts
vi /scripts/samba_backup.sh
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
source="/data"
destination_root="/backup"
fdate=$(date +%Y-%m-%d)
# Clean old archives
find ${destination_root}/archive -type f -name "*.tar.gz" -ctime +370 -exec rm -R {} \; 2>&1
# Daily
rsync -a --partial --inplace --append --delete-after ${source}/ ${destination_root}/daily/
# Weekly
if [[ $(date +%u) -eq 0 ]]
then
rsync -a --partial --inplace --append --delete-after ${source}/ ${destination_root}/weekly/
fi
# Archive
count_last_archives=$(find ${destination_root}/archive/ -name "*.tar.gz" -mtime -30 | wc -l)
if [[ $count_last_archives -eq 0 ]]
then
cd ${source}
tar zcf ${destination_root}/archive/samba_${fdate}.tar.gz ./*
fi
Задаем права скрипту на выполнение:
chmod +x /scripts/samba_backup.sh
Скрипт готов к работе.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26✍8🔥7
Как удалить файл в bash
Любой файл можно удалить временно и навсегда в bash. Когда файл временно удаляется с помощью графического пользовательского интерфейса, он сохраняется в папке «Trash» и при необходимости может быть восстановлен. Файл, который был удален безвозвратно, не может быть восстановлен позже обычным образом. Команда
Удаление файла с помощью команды rm
Команда
Параметр
Пример-1: Удаление файла с помощью команды rm без опции
Вы можете применить команду
Пример-2: Удалите файл с помощью команды `rm` с параметром -i
Следующий сценарий запросит разрешение у пользователя перед удалением файла для параметра «
Пример-3: Удалите файл с помощью команды `rm` с параметром -v
Следующий скрипт получит имя файла с помощью аргумента командной строки. Если файл существует, он напечатает сообщение об удалении с именем файла для параметра
Более одного файла можно удалить, используя команду
В приведенных выше примерах показаны различные типы способов удаления файла с помощью сценария bash, чтобы помочь пользователям bash легко выполнять этот тип задачи.
🔨 bash_help
Любой файл можно удалить временно и навсегда в bash. Когда файл временно удаляется с помощью графического пользовательского интерфейса, он сохраняется в папке «Trash» и при необходимости может быть восстановлен. Файл, который был удален безвозвратно, не может быть восстановлен позже обычным образом. Команда
rm
используется для окончательного удаления файла с компьютера. Если какой-либо файл был случайно удален этой командой, его можно восстановить из резервной копии. В этой статье показано, как удалить любой файл из терминала и графический интерфейс пользователя.Удаление файла с помощью команды rm
Команда
rm
может использоваться с опцией и без опции для различных типов удаления. Синтаксис команды rm приведен ниже.rm [option] filename
Параметр
‘-i’
может использоваться с командой rm
для вывода подсказки перед удалением любого файла, чтобы предотвратить случайное удаление. Параметр ‘-f’
может использоваться с командой rm для принудительного удаления любого файла. Ниже показаны различные варианты использования команды rm
.Пример-1: Удаление файла с помощью команды rm без опции
Вы можете применить команду
‘rm’
, чтобы удалить существующий файл. В следующем сценарии пустой файл создается с помощью команды touch
для проверки команды rm
. Затем используется команда ‘rm’
для удаления файла test.txt.#!/bin/bash
# Установить имя файла
filename = 'test.txt'
# Создать пустой файл
touch $filename
# Проверить, существует ли файл,
if [ -f $filename ]; then
rm test.txt
echo "$filename удален"
fi
Пример-2: Удалите файл с помощью команды `rm` с параметром -i
Следующий сценарий запросит разрешение у пользователя перед удалением файла для параметра «
-i
». Здесь имя файла будет взято у пользователя в качестве ввода. Если файл существует и пользователь нажимает «n», то файл не будет удален, иначе файл будет удален.#!/bin/bash
# Считайте имя файла
read -p 'Введите имя файла для удаления: ' filename
# Проверьте, существует ли файл,
if [ -f $filename ] ; then
# Удалить файл с разрешением
rm -i " $filename "
# Проверить, удален ли файл,
if [ -f $filename ] ; then
echo " $filename не удаляется"
else
echo " $filename удален"
fi
else
echo "Файл не существует"
fi
Пример-3: Удалите файл с помощью команды `rm` с параметром -v
Следующий скрипт получит имя файла с помощью аргумента командной строки. Если файл существует, он напечатает сообщение об удалении с именем файла для параметра
‘-v’
.#!/bin/bashПример-4: Удалить несколько файлов с помощью команды `rm`
# Проверить, существует ли файл
if [[ $1 != "" && -f $1 ]]; then
# Вывести сообщение об удалении
rm -v $1
else
echo "Имя файла не указано или имя файла не существует"
fi
Более одного файла можно удалить, используя команду
‘rm’
и разделяя имена файлов пробелом. В следующем скрипте несколько имен файлов будут взяты из аргументов командной строки. Если какой-либо файл не существует, он покажет сообщение, иначе имена файлов будут объединены пробелом и сохранены в переменной с именем files. Затем будет выполнена команда rm
с переменной files
для удаления нескольких файлов.#!/bin/bash
files=""
space=""
# Проверить, указано ли несколько имен файлов,
if [ $# > 2 ]; then
# Чтение значений аргументов с использованием цикла
for argval in "$@"
do
if [ -f $argval ]; then
files+=$argval$space
else
echo "$argval не существует"
fi
done
# Удалить файлы
rm $files
echo "файлы удалены."
else
echo "Имена файлов не указаны или имя файла не существует"
fi
В приведенных выше примерах показаны различные типы способов удаления файла с помощью сценария bash, чтобы помочь пользователям bash легко выполнять этот тип задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21✍5🔥3😐1