en
Feedback
BashMaster

BashMaster

Open in Telegram

Удобные консольные наработки на каждый день для разработчиков, девопсов и сисадминов. Реклама: @Kone4noVasya Канал на бирже: https://telega.in/c/bash_help

Show more
8 882
Subscribers
-124 hours
-167 days
+430 days
Posts Archive
Admin Guides - полезные заметки от сисадмина Гайды по OS Windows & Linux, лайфхаки и полезные Open Source решения. Подписывай
Admin Guides - полезные заметки от сисадмина Гайды по OS Windows & Linux, лайфхаки и полезные Open Source решения. Подписывайтесь @admguides

Как удалить файл в bash Любой файл можно удалить временно и навсегда в 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

# Проверить, существует ли файл
if [[ $1 != "" && -f $1 ]]; then
# Вывести сообщение об удалении
rm -v $1
else
echo "Имя файла не указано или имя файла не существует"
fi

Пример-4: Удалить несколько файлов с помощью команды `rm` Более одного файла можно удалить, используя команду ‘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 легко выполнять этот тип задачи. 🔨 bash_help

Гибридный ChatGPT версии 3.5 - 4 с высокой скоростью ответа уже доступен бесплатно! отлично подходит программистам, аналитика
+3
Гибридный ChatGPT версии 3.5 - 4 с высокой скоростью ответа уже доступен бесплатно! отлично подходит программистам, аналитикам, студентам и вообще всем тем, кто сидит за компьютером. Поможет найти книги или рассказать краткий пересказ. Бот помнит контекст, то есть историю вашей переписки и будет отвечать точно. На данный момент реализована: Генерация текста по вашему тексту(text-to-text) Генерация текста по вашей картинке(image-to-text) Что будет реализовано: генерация картинок по описанию (text-to-image) Никаких ограничений и подписок https://t.me/gpt_lama_bot

Пример скрипта для создания резервной копии файлового сервера Данный скрипт написан на bash под управлением операционной сист
Пример скрипта для создания резервной копии файлового сервера Данный скрипт написан на 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
Скрипт готов к работе. 🖼️ Ссылка на скрипт 🔨 bash_help

Как ловить и обрабатывать ошибки в bash Оболочка bash не имеет какого-либо причудливого механизма проглатывания исключений, т
Как ловить и обрабатывать ошибки в bash Оболочка 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
🖼️ Дочитать статью 🔨 bash_help

ITGLOBAL.COM выпустили книгу «Публичное облако 2023» Команда ITGLOBAL.COM подготовила объемный материал — книгу «Публичное об
ITGLOBAL.COM выпустили книгу «Публичное облако 2023» Команда ITGLOBAL.COM подготовила объемный материал — книгу «Публичное облако 2023». Это руководство для тех, кто заинтересован в переходе на облачные решения.  В книге: 🔹 представлен обзор экспертов о состоянии отечественного рынка 🔹 описаны технологии на базе российских платформ виртуализации 🔹 обозначены риски перехода на них 🔹 предложены шаги по минимизации рисков. Книга будет полезна для руководителей, технических директоров и ИТ-специалистов, заинтересованных: ➖ в оптимизации работы компании ➖ развитии облачных инфраструктур ➖ минимизации рисков ИБ. Заполните форму на сайте, чтобы получить ссылку на книгу. Реклама. ООО "ИТГЛОБАЛКОМ РУС". ИНН 7838413489. erid: LjN8KJkpF

Шесть полезных трюков в работе с Linux Если вы администрируете сервер 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 не делает ничего, это, грубо говоря, просто условный таймер. 🔨 bash_help

🖥 Курс «Специалист центра мониторинга инцидентов информационной безопасности (SOC)» Старт: 18 декабря Длительность: 3,5 меся
🖥 Курс «Специалист центра мониторинга инцидентов информационной безопасности (SOC)» Старт: 18 декабря Длительность: 3,5 месяца ℹ️ Курс охватывает ключевые процессы в Security Operation Center (SOC), включая Threat Intelligence, Threat Hunting, Vulnerability Management, моделирование угроз, реагирование на инциденты и основы администрирования СЗИ, используемых в SOC. 🎓 Кому будет полезен курс: — Энтузиастам в области ИБ, с базовыми знаниями — Системным администраторам, программистам, желающим стать специалистами по ИБ — Начинающим сотрудникам SOC или ИБ-подразделений для более полного понимания процессов Выдаём УПК/сертификат при успешной сдаче экзамена! Доступна рассрочка до 24 мес. 🎁 По промокоду CODEBY вы получите скидку 10%!  📌 Узнать подробнее о курсе Реклама. ООО "АКАДЕМИЯ КОДЕБАЙ". ИНН 9706020333.

Как провести стресс-тестирование вашей системы Linux Есть несколько полезных методов, которые вы можете использовать, и есть
Как провести стресс-тестирование вашей системы Linux Есть несколько полезных методов, которые вы можете использовать, и есть инструменты, которые вы можете использовать, чтобы упростить этот процесс. В этой статье мы рассмотрим несколько вариантов. Создаем циклы своими руками Данный первый метод предполагает запуск некоторых циклов в командной строке и наблюдение за тем, как они влияют на систему. Этот метод нагружает ЦП, значительно увеличивая нагрузку. Результаты можно легко увидеть с помощью команды 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. 🖼️ Дочитать статью 🔨 bash_help

Как запустить Bash скрипт в Linux Прежде чем вы сможете запустить ваш скрипт, вам нужно, чтобы ваш скрипт был исполняемым. Чтобы сделать исполняемый скрипт в 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 для исполняемых файлов. 🔨 bash_help

Bash функции и псевдонимы В данной статье разберем как управлять файлами настройки оболочки пользователя. Псевдонимы и функци
Bash функции и псевдонимы В данной статье разберем как управлять файлами настройки оболочки пользователя. Псевдонимы и функции определяются в файлах с окончанием RC - Bash.bashrc, bashrc, ~/.bashrc. В зависимости от того в каком файле мы употребим псевдоним или функцию он будет использоваться для конкретного пользователя или для всех пользователей. Посмотрим на конкретном примере пользователя, поэтому будет использоваться файл ~/.bashrc , который находится в домашней директории пользователя и определят настройки конкретного пользователя. Псевдоним (alias) – текст для вызова команды с ключами. Например: la = ‘ls -A’. Функция – текст для вызова скрипта, из нескольких команд. Например:
function Hello (){echo “Hello,dear,I am awake for:”; uptime –p;}
Заходим в Ubuntu и попадаем в домашнюю директорию. Следовательно в этой домашней папке есть файл .profile, который является ссылкой на файл bashrc. И в этом файле есть много чего, но в частности есть псевдонимы. 🖼️ Дочитать статью 🔨 bash_help

Сочетания клавиш bash Ранее мы уже публиковали подобный пост. Этот более подробный. Оболочка 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: выйти из режима поиска в истории без выполнения команды. 🔨 bash_help

Обработка строк циклом «for line in `comand`» Если у вас какая-то команда возвращает список строк, например: $ cat list.txt ш
Обработка строк циклом «for line in `comand`» Если у вас какая-то команда возвращает список строк, например: $ 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 🔨 bash_help

Как сгенерировать пароль в терминале Linux Рассмотрим, как можно сгенерировать случайный пароль в командной строке 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. Если вы работаете за компьютером и вам нужно просто сгенерировать пароль, то удобнее использовать какой-нибудь графический инструмент. А показанные здесь способы можно использовать в скриптах. 🔨 bash_help

Утилита ttyd Она позволяет запустить выполнение любой утилиты командной строки в браузере. Примеры использования: 1. Например
Утилита ttyd Она позволяет запустить выполнение любой утилиты командной строки в браузере. Примеры использования: 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 юнит, чтобы запускать эту утилиту как службу. 🐙 Перейти на Github 🔨 bash_help

PowerShell против Bash: в чем разница? Немного истории: PowerShell PowerShell - это среда автоматизации и задач Microsoft, уд
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

Лимит открытых файлов — настройки sysclt.conf В системе 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 существовали, но пока скрипт выполнялся они уже завершились. А просто сложив все эти числа вы узнаете, сколько файлов открыто у определённого пользователя. 🔨 bash_help

🖥 2 полезных канала для тех, кто увлечён ИБ, разведкой и сетями: 🤖 stein: ИБ, OSINT — канал от известного в узких кругах ис
🖥 2 полезных канала для тех, кто увлечён ИБ, разведкой и сетями: 🤖 stein: ИБ, OSINT — канал от известного в узких кругах исследователя, в котором множество обучающих материалов по ИБ и кибер-разведке, полезных инструментов и личный взгляд автора. 👨‍🔬 Сетевик Джонни // Network Admin — канал сетевого инженера, который рассказывает про создание и настройку внутренних компьютерных сетей в доступной форме.

Обработка строк циклом «while read line» В этой статье разберемся с одним из циклов bash, а именно с циклом «while read line»
Обработка строк циклом «while read line» В этой статье разберемся с одним из циклов 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
**** И так далее ***
🔨 bash_help