10 полезных советов для написания эффективных bash скриптов в Linux
1. Всегда используйте комментарии в скриптах
Комментарии начинаются со знака решетки —
2. Настраивайте завершение выполнения скрипта при ошибке. Так бывает, что bash может продолжать выполнять скрипт, несмотря на сбои в выполнении определенной команды.
Можно использовать следующую команду для выхода из скрипта в случае ошибке:
5. Используйте функции в скриптах. Скрипт, который разбит на функции, становится более модульным. Такой код проще прочитать и понять, чем длинную последовательность предписаний.
6. Используйте знак
7. Используйте знак
9. Используйте верхний регистр для названий переменных среды, нижний — для названий пользовательских переменных. Все переменные среды bash, такие как
10. Выполняйте отладку (debugging) скриптов. Для запуска программы в режиме отладки используйте следующую команду:
🔨 bash_help
1. Всегда используйте комментарии в скриптах
Комментарии начинаются со знака решетки —
#.2. Настраивайте завершение выполнения скрипта при ошибке. Так бывает, что bash может продолжать выполнять скрипт, несмотря на сбои в выполнении определенной команды.
Можно использовать следующую команду для выхода из скрипта в случае ошибке:
# let script exit if a command fails3. Настраивайте завершение выполнения скрипта при обнаружении необъявленной переменной. Также bash может попытаться использовать переменную, не объявленную ранее в коде сценария. Чтобы bash завершал выполнение скрипта в такой ситуации — добавьте в код следующую команду:
set -o errexit
# OR
set -e
ls -xyz # command with error
echo "you will not see this message"
#let script exit if an unsed variable is used4. Используйте двойные кавычки для ссылки на переменные. Использование двойных кавычек при обращении к переменным предотвращает разбиение строк при наличии в них пробелов на слова, а также — другие возможные сбои.
set -o nounset
# OR
set -u
echo $ThisVariableAreNotDefined
echo "you will not see this message"
5. Используйте функции в скриптах. Скрипт, который разбит на функции, становится более модульным. Такой код проще прочитать и понять, чем длинную последовательность предписаний.
6. Используйте знак
= для сравнения строк. Во многих популярных языках программирования сравнение на равенство проверяется двойным знаком «равно» ==. Однако в сценариях командной строки Линукс для этого используется одинарное равно =.7. Используйте знак
$ вместо знаков “. Существует несколько способов подстановки команд. Вы можете использовать обратные апострофы `command` для заключения команды в них, либо же использовать конструкцию $(command). На сегодняшний день рекомендуется использовать именно второй вариант с использованием $, что подтверждается рекомендациями shellcheck, инструментом для анализа кода скриптов. Например:user=`echo “qwerty” `8. Объявляйте статические переменные с опцией readonly. Статическая переменная — это переменная, которая не меняется. Встроенная команда
user1=$(echo “abcde”)
readonly используется для пометки переменных, доступных только для чтения (то есть — неизменяемых). Это подразумевает, что изменить ее в будущем уже будет нельзя.9. Используйте верхний регистр для названий переменных среды, нижний — для названий пользовательских переменных. Все переменные среды bash, такие как
HOSTNAME, BASH, GROUPS и другие — следует писать заглавными буквами. Тогда как для именования пользовательских переменных лучше использовать строчные буквы. В коде большого скрипта при использовании множества различных переменных высок риск назвать некоторые из них одинаково, что может привести к неожиданным или даже критическим ошибка.10. Выполняйте отладку (debugging) скриптов. Для запуска программы в режиме отладки используйте следующую команду:
bash -x <your-file-name>.sh
Please open Telegram to view this post
VIEW IN TELEGRAM
✍25👍23🔥4
Powerline – добавляет строку статуса и подсказки редактору Vim и терминалу Bash
Отличный плагин для редактора Vim, который разработан на Python и предоставляет статус и подсказки для многих других приложений, таких как bash, zsh, tmux и др.
Шаг 1: Установка общих требований к Powerline
Из-за конфликта имен с некоторыми другими несвязанными проектами, программа Powerline доступна в PyPI (индекс пакета Python) под именем пакета как powerline-status.
Чтобы установить пакеты из PyPI, нам нужен «pip» (инструмент управления установки пакетов Python). Итак, давайте сначала установим инструмент pip для Linux.
Установите Pip на Debian, Ubuntu и Linux Mint
В системах на базе Fedora вам необходимо сначала включить epel-repository, а затем установить пакет pip, как показано ниже.
Теперь пришло время установить Powerline с помощью команды pip, как показано ниже.
Powerline использует специальные шрифты для специальных эффектов стрелок и символов разработчиков.
Загрузите последнюю версию шрифта и файл конфигурации fontconfig, используя следующую команду wget.
В этом разделе мы рассмотрим настройку Powerline для оболочки bash и редактора vim. Сначала настройте свой терминал с поддержкой 256 цветов, добавив следующую строку в файл
Чтобы включить Powerline в оболочке bash по умолчанию, вам необходимо добавить следующий фрагмент в ваш файл
Если vim является вашим любимым редактором, то вам повезло, есть мощный плагин для vim. Чтобы включить этот плагин, добавьте эти строки в файл
🔨 bash_help
Отличный плагин для редактора Vim, который разработан на Python и предоставляет статус и подсказки для многих других приложений, таких как bash, zsh, tmux и др.
Шаг 1: Установка общих требований к Powerline
Из-за конфликта имен с некоторыми другими несвязанными проектами, программа Powerline доступна в PyPI (индекс пакета Python) под именем пакета как powerline-status.
Чтобы установить пакеты из PyPI, нам нужен «pip» (инструмент управления установки пакетов Python). Итак, давайте сначала установим инструмент pip для Linux.
Установите Pip на Debian, Ubuntu и Linux Mint
# apt-get install python3-pip powerline
Установите Pip на CentOS, RHEL и FedoraВ системах на базе Fedora вам необходимо сначала включить epel-repository, а затем установить пакет pip, как показано ниже.
# yum install python3-pipШаг 2. Установка Powerline Tool в Linux
# dnf install python-pip [В версиях Fedora 22+]
Теперь пришло время установить Powerline с помощью команды pip, как показано ниже.
# pip3 install powerline-statusШаг 3: Установка шрифтов Powerline в Linux
Powerline использует специальные шрифты для специальных эффектов стрелок и символов разработчиков.
Загрузите последнюю версию шрифта и файл конфигурации fontconfig, используя следующую команду wget.
# wget https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otfЗатем вам нужно переместить шрифт в каталог шрифтов,
# wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf
/usr/share/fonts/ или /usr/local/share/fonts, как описано ниже, или вы можете получить допустимые пути шрифтов, используя команду xset q.
# mv PowerlineSymbols.otf /usr/share/fonts/Затем вам необходимо обновить кеш-память вашей системы следующим образом.
# fc-cache -vf /usr/share/fonts/Теперь установите файл
fontconfig.# mv 10-powerline-symbols.conf /etc/fonts/conf.d/Шаг 4: Установка Powerline для Bash Shell и Vim Statuslines
В этом разделе мы рассмотрим настройку Powerline для оболочки bash и редактора vim. Сначала настройте свой терминал с поддержкой 256 цветов, добавив следующую строку в файл
~/.bashrc следующим образом.export TERM="screen-256color"Включение Powerline на Bash Shell
Чтобы включить Powerline в оболочке bash по умолчанию, вам необходимо добавить следующий фрагмент в ваш файл
~/.bashrc.# sudo nano ~/.bashrcВ конце файла добавьте
if [ -f /usr/share/powerline/bindings/bash/powerline.sh ]; then
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
source /usr/share/powerline/bindings/bash/powerline.sh
fi
Для отображения в текущей оболочкеsource ~/.bashrcВключить Powerline для Vim
Если vim является вашим любимым редактором, то вам повезло, есть мощный плагин для vim. Чтобы включить этот плагин, добавьте эти строки в файл
~/.vimrc.set rtp + = /usr/local/lib/python2.7/dist-packages/powerline/bindings/vim/
set laststatus = 2
set t_Co = 256
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11✍9🔥4
Как улучшить и отладить bash/shell скрипты с помощью ShellCheck
ShellCheck – это бесплатный инструмент статического анализа с открытым исходным кодом, который можно использовать для проверки и улучшения скриптов. Он способен выделять как общие, так и граничные ошибки и предлагать соответствующие исправления.
ShellCheck может использоваться как онлайновая или системная утилита, а также может быть интегрирован в качестве линтера в различные текстовые редакторы.
В этом руководстве мы узнаем, как установить и использовать ShellCheck в некоторых наиболее распространенных дистрибутивах Linux, а также как интегрировать его в Vim и Visual Studio Code.
Прежде всего, давайте установим ShellCheck на нашу любимую систему на базе Linux.
Это очень простая задача, поскольку утилита упакована в программные репозитории наиболее используемых дистрибутивов.
Все, что нам нужно сделать, это использовать соответствующий менеджер пакетов.
На Fedora мы будем использовать dnf:
В системах на базе Debian вместо этого мы используем apt:
В Archlinux мы используем pacman:
Об использовании инструмента можете прочитать в источнике.
🖼️ Дочитать статью
🔨 bash_help
ShellCheck – это бесплатный инструмент статического анализа с открытым исходным кодом, который можно использовать для проверки и улучшения скриптов. Он способен выделять как общие, так и граничные ошибки и предлагать соответствующие исправления.
ShellCheck может использоваться как онлайновая или системная утилита, а также может быть интегрирован в качестве линтера в различные текстовые редакторы.
В этом руководстве мы узнаем, как установить и использовать ShellCheck в некоторых наиболее распространенных дистрибутивах Linux, а также как интегрировать его в Vim и Visual Studio Code.
Прежде всего, давайте установим ShellCheck на нашу любимую систему на базе Linux.
Это очень простая задача, поскольку утилита упакована в программные репозитории наиболее используемых дистрибутивов.
Все, что нам нужно сделать, это использовать соответствующий менеджер пакетов.
На Fedora мы будем использовать dnf:
sudo dnf install ShellCheck
В системах на базе Debian вместо этого мы используем apt:
sudo apt install shellcheck
В Archlinux мы используем pacman:
sudo pacman -S shellcheck
Об использовании инструмента можете прочитать в источнике.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15✍3🔥2
Как использовать команду alias в Linux
Команда
Создайте псевдонимы
Проверьте список всех псевдонимов в Linux
Команда
Разберем устройство одного из псевдонимов. Например,
Как создать псевдонимы alias в Linux
Создание псевдонимов
Создание временных псевдонимов
Начнем с изучения временных псевдонимов — таких, которые будут действовать только в текущей сессии терминала командной строки. В случае его выключения после начала следующего сеанса временный псевдоним будет недоступен. Разберём синтаксис создания временного псевдонима команды с помощью инструмента
🖼️ Дочитать статью
🔨 bash_help
Команда
alias — это удобный инструмент для тех, кто постоянно работает в командной строке. Пользователям Linux часто приходится использовать одну и ту же команду. Иногда с большим количеством опций, а также с одними и теми же аргументами. Необходимость постоянно писать их вручную снижает производительность и увеличивает шанс допустить ошибку. При правильном использовании, утилита alias поможет Вам быстрее вводить команды, а также исправлять опечатки.Создайте псевдонимы
alias для наиболее часто используемых команд. Псевдоним команды — это команда, состоящая из одного слова, но выполняющая другую заданную команду со всем набором опций. Механизм псевдонимов позволяет задавать более короткие или привычные имена для часто используемых команд.Проверьте список всех псевдонимов в Linux
Команда
alias без дополнительных опций и аргументов выведет на экран весь список псевдонимов, которые используются операционной системой.Разберем устройство одного из псевдонимов. Например,
alias ll. Этот псевдоним эквивалентен введению команды ls с опциями -alF. Данная команда выведет список всего содержимого директории, включая скрытые папки. Также она выделит папки другим цветом, а также пометит их при помощи косой черты (/) после названия.Как создать псевдонимы alias в Linux
Создание псевдонимов
alias — простой и быстрый процесс, напоминает присваивание переменной определенного значения в языках программирования. Существует два типа псевдонимов — временные и постоянные. В данной статье рассмотрим оба типа и научимся их использовать для упрощения работы с операционной системой GNU / Linux.Создание временных псевдонимов
Начнем с изучения временных псевдонимов — таких, которые будут действовать только в текущей сессии терминала командной строки. В случае его выключения после начала следующего сеанса временный псевдоним будет недоступен. Разберём синтаксис создания временного псевдонима команды с помощью инструмента
alias:alias name="your-command"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥5✍3
Как очистить историю командной строки BASH в Linux?
Основная причина удаления истории командной строки из терминала Linux состоит в том, чтобы предотвратить использование команд другим пользователем, который мог бы использовать вашу учетную запись.
Например, если вы ввели команду, содержащую пароль в виде обычного текста, и вы не хотите, чтобы другой системный пользователь или злоумышленник видели этот пароль, вам необходимо удалить или очистить файл истории.
Посмотрите на команду ниже, здесь пользователь yurii набрал пароль сервера базы данных в командной строке:
Файл bash_history обычно находится в домашнем каталоге пользователя /home/username/.bash_history:
Чтобы удалить или очистить все записи из истории bash, используйте команду history ниже с опцией -c:
В качестве альтернативы, вы можете использовать команду приведенную ниже, чтобы удалить историю всех последних выполненных команд в файле навсегда:
🔨 bash_help
Основная причина удаления истории командной строки из терминала Linux состоит в том, чтобы предотвратить использование команд другим пользователем, который мог бы использовать вашу учетную запись.
Например, если вы ввели команду, содержащую пароль в виде обычного текста, и вы не хотите, чтобы другой системный пользователь или злоумышленник видели этот пароль, вам необходимо удалить или очистить файл истории.
Посмотрите на команду ниже, здесь пользователь yurii набрал пароль сервера базы данных в командной строке:
$ sudo mysql -u root -p=MyPassЕсли вы посмотрите в конец истории файла bash, то увидите там пароль, введенный выше:
$ history
Файл bash_history обычно находится в домашнем каталоге пользователя /home/username/.bash_history:
$ cat /home/yurii/.bash_historyЧтобы удалить одну строку из файла истории, используйте параметр -d. Например, если вы хотите очистить команду, в которой вы ввели открытый текстовый пароль, как в приведенном выше сценарии, найдите номер строки в файле истории и выполните эту команду:
$ history -d 130
Чтобы удалить или очистить все записи из истории bash, используйте команду history ниже с опцией -c:
$ history -c
В качестве альтернативы, вы можете использовать команду приведенную ниже, чтобы удалить историю всех последних выполненных команд в файле навсегда:
$ cat /dev/null > ~/.bash_historyОбычный пользователь может просматривать только свою собственную историю команд, но пользователь root может просматривать историю команд всех других пользователей в системе. Всегда помните, что все команды, которые вы запускаете, записываются в файл истории, поэтому не вводите пароли в виде простого текста в командной строке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥7
Что такое $0 в скрипте Bash?
Как вы знаете, знак
Переменная $0 может быть использована в Linux двумя способами:
1. Использовать
2. Использовать
Поиск оболочки, в которую вы вошли в систему, с помощью $0
Когда
Если вы выведете значение
Использование $0 в скриптах shell
Чтобы использовать переменную
Например, здесь я буду использовать простой скрипт hello world:
Если мне нужно использовать здесь переменную
Чтобы сделать его более человекочитаемым, вы также можете использовать что-то вроде этого:
Таким образом, конечный результат будет выглядеть следующим образом:
🔨 bash_help
Как вы знаете, знак
$ в bash используется для обозначения переменных. $0 – это одна из специальных переменных, которые есть в bash, и она используется для вывода имени файла скрипта, который в данный момент выполняется.Переменная $0 может быть использована в Linux двумя способами:
1. Использовать
$0 для поиска оболочки входа в систему2. Использовать
$0 для вывода имени выполняемого скрипта.Поиск оболочки, в которую вы вошли в систему, с помощью $0
Когда
$0 не используется в скрипте, она хранит информацию о том, какую оболочку вы используете в данный момент.Если вы выведете значение
$0, система покажет вам, в какой оболочке вы сейчас вошли в систему.Использование $0 в скриптах shell
Чтобы использовать переменную
$0 в скрипте, достаточно использовать простой оператор echo с этой переменной, и он выведет имя файла.Например, здесь я буду использовать простой скрипт hello world:
#!/bin/bash
echo "Hello World"
Если мне нужно использовать здесь переменную
$0, все, что мне нужно сделать, это добавить следующую строку в конце:echo $0
Чтобы сделать его более человекочитаемым, вы также можете использовать что-то вроде этого:
echo "The name of the script is: " $0
Таким образом, конечный результат будет выглядеть следующим образом:
#!/bin/bash
echo "Hello World"
echo "The name of the script is: " $0
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥4😐2
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)"
donePlease 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