⚡ Автоочистка памяти RAM в Linux 🧹
Если сервер начинает тормозить из-за перегруженной оперативной памяти, можно использовать скрипт для её очистки.
🛠️ Скрипт:
📌 Как использовать:
1. Сохраните скрипт в файл, например
2. Дайте права на выполнение:
3. Запустите от root:
🕒 Автоматизация через
Можно настроить автоматический запуск, например, раз в час:
Добавьте строку:
Теперь сервер будет поддерживать оперативную память в чистоте без вашего участия! 🚀
👉@bash_srv
Если сервер начинает тормозить из-за перегруженной оперативной памяти, можно использовать скрипт для её очистки.
🛠️ Скрипт:
#!/bin/bash
echo "Освобождение памяти..."
sync && echo 3 > /proc/sys/vm/drop_caches
echo "Готово! Свободная память увеличена."
📌 Как использовать:
1. Сохраните скрипт в файл, например
clear_ram.sh
2. Дайте права на выполнение:
chmod +x clear_ram.sh
3. Запустите от root:
sudo ./clear_ram.sh
🕒 Автоматизация через
cron
Можно настроить автоматический запуск, например, раз в час:
sudo crontab -e
Добавьте строку:
0 * * * * /path/to/clear_ram.sh
Теперь сервер будет поддерживать оперативную память в чистоте без вашего участия! 🚀
👉@bash_srv
📌 Калькулятор в консоли Bash
В Bash можно выполнять простые математические вычисления с помощью встроенной конструкции
🔹 Основные операции
🔹 Примеры использования
📍 Простые вычисления
Просто вводим выражение в
💡 Вывод:
Умножение:
💡 Вывод:
Деление (целочисленное!):
💡 Вывод:
Остаток от деления:
💡 Вывод:
📍 Сохранение результата в переменную
💡 Вывод:
📍 Использование с переменными
💡 Вывод:
📍 Возведение в степень
💡 Вывод:
🔹 Учитываем важные моменты
✅ Целочисленное деление
В
💡 Вывод:
✅ Отрицательные числа
Нужно ставить пробел перед минусом:
💡 Вывод:
🔹 Комплексные выражения
Можно вычислять сложные выражения с приоритетом операций:
💡 Вывод:
🔹 Инкремент и декремент
Можно увеличивать или уменьшать переменные:
🔹 Альтернативный способ:
Можно использовать команду
💡 Вывод:
Но тут важно ставить пробелы между числами и операциями.
🏁 Итог
Использование
Попробуйте сами! 🚀
👉 @bash_srv
В Bash можно выполнять простые математические вычисления с помощью встроенной конструкции
$(( ))
. Это позволяет быстро выполнять арифметические операции прямо в терминале. Давайте разберёмся подробнее.🔹 Основные операции
+
Сложение, -
Вычитание, *
Умножение, /
Деление (целочисленное), %
Остаток от деления, **
Возведение в степень 🔹 Примеры использования
📍 Простые вычисления
Просто вводим выражение в
echo
:
echo $((2 + 3))
💡 Вывод:
5
Умножение:
echo $((6 * 7))
💡 Вывод:
42
Деление (целочисленное!):
echo $((10 / 3))
💡 Вывод:
3
(без дробной части)Остаток от деления:
echo $((10 % 3))
💡 Вывод:
1
📍 Сохранение результата в переменную
result=$((15 - 7))
echo "Результат: $result"
💡 Вывод:
Результат: 8
📍 Использование с переменными
a=5
b=10
sum=$((a + b))
echo "Сумма: $sum"
💡 Вывод:
Сумма: 15
📍 Возведение в степень
echo $((2 ** 3))
💡 Вывод:
8
🔹 Учитываем важные моменты
✅ Целочисленное деление
В
bash
при делении берётся только целая часть. Для получения дробного результата используйте bc
:
echo "10 / 3" | bc -l
💡 Вывод:
3.3333333333
✅ Отрицательные числа
Нужно ставить пробел перед минусом:
echo $((-5 + 3))
💡 Вывод:
-2
🔹 Комплексные выражения
Можно вычислять сложные выражения с приоритетом операций:
echo $(((10 + 5) * 2 - 3))
💡 Вывод:
27
🔹 Инкремент и декремент
Можно увеличивать или уменьшать переменные:
x=5
((x++)) # Увеличить на 1
echo $x # 6
((x--)) # Уменьшить на 1
echo $x # 5
🔹 Альтернативный способ:
expr
Можно использовать команду
expr
:
expr 5 + 3
💡 Вывод:
8
Но тут важно ставить пробелы между числами и операциями.
🏁 Итог
Использование
$(( ))
— это удобный и быстрый способ выполнять математические операции прямо в терминале. Если нужны дробные числа или более сложные вычисления, можно использовать bc
.Попробуйте сами! 🚀
👉 @bash_srv
🔥 Nohup — создаём "бессмертные" процессы в Linux
Когда запускаешь команду в терминале, она обычно завершается при его закрытии. Но если нужно, чтобы процесс жил дальше, даже после выхода из сеанса, на помощь приходит nohup!
💡 Как это работает?
Просто добавляем
Теперь процесс не будет зависеть от терминала и продолжит работу даже после выхода.
📌 Пример: Запускаем браузер Firefox, который не закроется при выходе из терминала:
📂 Куда попадает вывод?
По умолчанию весь вывод команды записывается в файл
🚀 Используйте nohup, чтобы запускать долгие процессы без привязки к терминалу!
👉 @bash_srv
Когда запускаешь команду в терминале, она обычно завершается при его закрытии. Но если нужно, чтобы процесс жил дальше, даже после выхода из сеанса, на помощь приходит nohup!
💡 Как это работает?
Просто добавляем
nohup
перед командой и &
в конце:
nohup your_command &
Теперь процесс не будет зависеть от терминала и продолжит работу даже после выхода.
📌 Пример: Запускаем браузер Firefox, который не закроется при выходе из терминала:
nohup firefox https://freecodecamp.org &
📂 Куда попадает вывод?
По умолчанию весь вывод команды записывается в файл
nohup.out
в текущей директории. Если нужно изменить путь, можно сделать так:
nohup myscript.sh > mylog.log 2>&1 &
🚀 Используйте nohup, чтобы запускать долгие процессы без привязки к терминалу!
👉 @bash_srv
🔍 Проверки файлов в Bash
Работая с файлами и директориями в Bash, часто необходимо проверять их существование, права доступа и другие атрибуты. Для этого используются встроенные проверки:
📂 Проверка существования и типа файла:
-
-
-
🔑 Проверка прав доступа:
-
-
-
📏 Проверка размера и времени модификации:
-
-
-
👤 Проверка владельца и группы:
-
-
📝 Пример использования:
Эти проверки помогут вам создавать надежные скрипты для автоматизации задач в Linux! 🚀
👉 @bash_srv
Работая с файлами и директориями в Bash, часто необходимо проверять их существование, права доступа и другие атрибуты. Для этого используются встроенные проверки:
📂 Проверка существования и типа файла:
-
-d file
— файл существует и является директорией -
-e file
— файл существует (не важно, что это) -
-f file
— файл существует и является обычным файлом 🔑 Проверка прав доступа:
-
-r file
— файл существует и доступен для чтения -
-w file
— файл существует и доступен для записи -
-x file
— файл существует и является исполняемым 📏 Проверка размера и времени модификации:
-
-s file
— файл существует и не пуст -
file1 -nt file2
— file1
новее file2
-
file1 -ot file2
— file1
старше file2
👤 Проверка владельца и группы:
-
-O file
— файл существует и принадлежит текущему пользователю -
-G file
— файл существует и принадлежит группе текущего пользователя 📝 Пример использования:
mydir="/path/to/directory"
if [ -d "$mydir" ]; then
echo "Директория $mydir существует"
cd "$mydir"
ls
else
echo "Директория $mydir не существует"
fi
Эти проверки помогут вам создавать надежные скрипты для автоматизации задач в Linux! 🚀
👉 @bash_srv
📌 Сравнение строк в Bash
В Bash можно сравнивать строки разными способами.
🔹 Операторы сравнения строк
| Оператор| Описание
|-----------|---------------------------------|
|
|
|
|
|
|
🔹 Примеры использования
1️⃣ Проверка равенства строк:
2️⃣ Проверка, что строка непустая:
3️⃣ Проверка, что строка пустая:
4️⃣ Сравнение строк по алфавиту (ASCII-кодам):
5️⃣ Сравнение строк с
6️⃣ Игнорируем регистр при сравнении:
🔹
👉@bash_srv
В Bash можно сравнивать строки разными способами.
🔹 Операторы сравнения строк
| Оператор| Описание
|-----------|---------------------------------|
|
==
| Строки равны |
!=
| Строки не равны |
<
| Меньше по ASCII (нужен [[
) |
>
| Больше по ASCII (нужен [[
) |
-z
| Строка пустая |
-n
| Строка не пустая 🔹 Примеры использования
1️⃣ Проверка равенства строк:
str1="hello"
str2="world"
if [[ "$str1" == "$str2" ]]; then
echo "Строки равны"
else
echo "Строки разные"
fi
2️⃣ Проверка, что строка непустая:
if [[ -n "$str1" ]]; then
echo "Переменная str1 содержит: $str1"
fi
3️⃣ Проверка, что строка пустая:
if [[ -z "$str1" ]]; then
echo "Переменная str1 пустая"
fi
4️⃣ Сравнение строк по алфавиту (ASCII-кодам):
if [[ "apple" < "banana" ]]; then
echo "apple идёт раньше banana"
fi
5️⃣ Сравнение строк с
case
:
case "$str1" in
"hello") echo "Привет!";;
"bye") echo "Пока!";;
*) echo "Неизвестная команда";;
esac
6️⃣ Игнорируем регистр при сравнении:
str1="Hello"
str2="hello"
if [[ "${str1,,}" == "${str2,,}" ]]; then
echo "Строки равны (без учёта регистра)"
fi
🔹
${str,,}
— приводит строку к нижнему регистру (работает в Bash 4+). 👉@bash_srv
🔍 Обработка содержимого файла в Bash
Часто при работе с файлами в Bash применяют вложенные циклы. Внешний цикл перебирает строки файла, а внутренний — обрабатывает каждую строку по отдельности.
Этот метод особенно полезен для работы с CSV-файлами или другими текстовыми файлами с разделителями. Для правильной обработки данных можно использовать переменную окружения IFS (Internal Field Separator), задавая нужный символ-разделитель.
📌 Пример кода:
📌 Что делает этот скрипт?
- Читает файл /etc/passwd построчно
- Для каждой строки разбивает данные по ":" (разделителю в файле)
- Выводит каждое поле строки отдельно
⚠️ Важно!
При обработке больших файлов такой способ может быть неэффективным из-за использования подстановки команд
Такой вариант работает быстрее и не создает проблем с пробелами в строках! 🚀
👉 @bash_srv
Часто при работе с файлами в Bash применяют вложенные циклы. Внешний цикл перебирает строки файла, а внутренний — обрабатывает каждую строку по отдельности.
Этот метод особенно полезен для работы с CSV-файлами или другими текстовыми файлами с разделителями. Для правильной обработки данных можно использовать переменную окружения IFS (Internal Field Separator), задавая нужный символ-разделитель.
📌 Пример кода:
IFS=$'\n' # Устанавливаем разделитель строк
for entry in $(cat /etc/passwd) # Читаем файл построчно
do
echo "Значения в строке: $entry"
IFS=: # Меняем разделитель для обработки полей
for value in $entry # Разбираем строку по полям
do
echo " -> $value"
done
done
📌 Что делает этот скрипт?
- Читает файл /etc/passwd построчно
- Для каждой строки разбивает данные по ":" (разделителю в файле)
- Выводит каждое поле строки отдельно
⚠️ Важно!
При обработке больших файлов такой способ может быть неэффективным из-за использования подстановки команд
$(cat file)
. Лучше применять while read
, например:
while IFS=: read -r user pass uid gid info home shell
do
echo "Пользователь: $user, UID: $uid, Домашняя папка: $home"
done < /etc/passwd
Такой вариант работает быстрее и не создает проблем с пробелами в строках! 🚀
👉 @bash_srv
🖥 Базовая шпаргалка по Bash (CLI)
📂 Работа с файлами и каталогами
🔍 Просмотр содержимого файлов
📌 Поиск
📜 Управление процессами
🌐 Сеть
📋 Управление пользователями
📜 Полезные команды
💡 Запомни:
-
-
-
📌 Сохраните эту шпаргалку и используйте для быстрого доступа! 🚀
👉 @bash_srv
📂 Работа с файлами и каталогами
ls -l # Подробный список файлов
ls -a # Показать скрытые файлы
cd /path/to/dir # Перейти в каталог
pwd # Показать текущий каталог
mkdir new_dir # Создать каталог
rm file.txt # Удалить файл
rm -rf dir/ # Удалить каталог с файлами
cp file1 file2 # Копировать файл
mv file1 file2 # Переместить/переименовать файл
🔍 Просмотр содержимого файлов
cat file.txt # Вывести весь файл
less file.txt # Просмотр файла постранично
head -n 10 file.txt # Первые 10 строк
tail -n 10 file.txt # Последние 10 строк
tail -f log.txt # Смотреть файл в реальном времени
📌 Поиск
find /dir -name "*.log" # Найти файлы по имени
grep "pattern" file.txt # Найти строку в файле
grep -r "error" /var/log # Рекурсивный поиск
ps aux | grep nginx # Найти процесс
📜 Управление процессами
top # Мониторинг процессов
htop # Улучшенный top (установите: apt install htop)
kill -9 PID # Убить процесс
pkill -9 nginx # Убить все процессы по имени
nohup script.sh & # Запустить в фоне
jobs # Показать фоновые задачи
fg %1 # Вернуть процесс в передний план
🌐 Сеть
ip a # Показать IP-адреса
netstat -tulnp # Список портов и процессов
ss -tulnp # Альтернатива netstat
ping 8.8.8.8 # Проверить соединение
curl -I google.com # Проверить заголовки сайта
wget URL # Скачать файл
📋 Управление пользователями
whoami # Кто я?
who # Кто в системе?
id user # Информация о пользователе
passwd # Сменить пароль
useradd user # Создать пользователя
usermod -aG sudo user # Добавить в sudo
deluser user # Удалить пользователя
📜 Полезные команды
history # История команд
clear # Очистить терминал
alias ll='ls -lah' # Создать алиас
df -h # Место на дисках
du -sh * # Размер каталогов
💡 Запомни:
-
man <команда>
— открыть справку по команде -
Ctrl+C
— остановить выполнение -
Ctrl+Z
— приостановить выполнение 📌 Сохраните эту шпаргалку и используйте для быстрого доступа! 🚀
👉 @bash_srv
Трюки терминала Bash
Полезные комбинации клавиш (хоткеи) и небольшие хитрости, которые сделают Вашу работу в Linux более эффективной.
Горячие клавиши" Bash с Ctrl
Изменить заглавные на строчные и наоборот
Запустить предыдущую команду ещё раз
Запустить команду из истории по номеру (например, 53)
Запускает последнюю команду и меняет какой-то параметр. Например, меняем
Важно: предыдущая команда заменит только первое вхождение "aaa". Если вы хотите заменить все вхождения, используйте
Запустить последнюю команду, которая начинается с...
Например, до этого в истории команд была команда cat filename:
— запускает
Указание файлов по шаблону в Bash
Полезные переменные окружения Bash
Короткие переменные:
Более длинные, но тоже полезные переменные:
👉 @bash_srv
Полезные комбинации клавиш (хоткеи) и небольшие хитрости, которые сделают Вашу работу в Linux более эффективной.
Горячие клавиши" Bash с Ctrl
Ctrl + n
— то же самое, что и стрелка вниз.Ctrl + p
— то же самое, что и стрелка вверх.Ctrl + r
— поиск по предыдущим командам из истории команд (history). Продолжайте нажимать Ctrl + r
, чтобы искать дальше. Ctrl + Shift + r
— поиск в другую сторону.Ctrl + s
— остановить вывод в терминал.Ctrl + q
— восстановить вывод в терминал после Ctrl + s.Ctrl + a
— перейти к началу строки (аналог клавиши Home).Ctrl + e
— перейти к концу строки (аналог клавиши End).Ctrl + d
— если вы ввели что-то, то Ctrl + d
удаляет символ под курсором. В противном случае означает конец ввода и завершает текущую сессию Bash.Ctrl + k
— удалить весь текст от курсора до конца строки.Ctrl + x + backspace
— удалить весь текст от начала строки до курсора.Ctrl + t
— переставить символ до курсора на символ под курсором. Нажмите Esc + t
для перестановки двух слов до курсора.Ctrl + w
— удалить слово до курсора; затем Ctrl + y, чтобы вставить его.Ctrl + u
— удалить строку перед курсором; Ctrl + y для вставки его.Ctrl + _
— отменить ввод.Ctrl + l
— очищает окно терминала. То же самое, что и clear.Ctrl + x + Ctrl + e
— запускает редактор, определённый в переменной $EDITOR
, для ввода команды. Полезно для многострочных команд.Изменить заглавные на строчные и наоборот
Esc + u
— преобразовать буквы от курсора до конца строки в заглавные буквы.Esc + l
— преобразовать буквы от курсора до конца строки в нижний регистр.Esc + c
— заменить букву под курсором на заглавную.Запустить предыдущую команду ещё раз
Запустить команду из истории по номеру (например, 53)
!53
!!
— запуск последней команды.sudo !!
— запустить предыдущую команду с sudo.Запускает последнюю команду и меняет какой-то параметр. Например, меняем
"aaa" на "bbb":
# Последняя команда: echo 'aaa'
$ ^aaa^bbb
$ echo 'bbb'
bbb
Важно: предыдущая команда заменит только первое вхождение "aaa". Если вы хотите заменить все вхождения, используйте
:&
:^aaa^bbb^:&
# или
!!:gs/aaa/bbb/
Запустить последнюю команду, которая начинается с...
Например, до этого в истории команд была команда cat filename:
!cat
# или
!c
— запускает
cat filename
ещё раз.Указание файлов по шаблону в Bash
/etc/pa*wd
→ /etc/passwd
— символ *
означает "несколько любых символов"./b?n/?at
→ /bin/cat
— символ ?
означает "один любой символ".ls -l [a-z]*
— вывести список файлов, содержащих только буквы латинского алфавита. В квадратных скобках []
перечисляются символы, которые будут искаться. А символ *
после []
означает "хоть сколько раз".ls {*.sh,*.py}
— вывести все .sh и .py файлы. {}
используется для группировки нескольких шаблонов по принципу "или".Полезные переменные окружения Bash
Короткие переменные:
$0
— оболочка командной строки или путь до запускаемого файла.$1
, $2
, $3
, ... — аргументы запуска скрипта.$#
— число аргументов, переданных в скрипт из терминала.$?
— код завершения последней команды.$-
— текущие опции, установленные для оболочки.$$
— идентификатор текущего процесса.$!
— идентификатор процесса, завершённого последним.Более длинные, но тоже полезные переменные:
$DESKTOP_SESSION
— текущий менеджер дисплеев.$EDITOR
— редактор текста по умолчанию.$LANG
— используемый системой язык.$PATH
— список директорий, в которых будут искаться исполняемые файлы.$PWD
— текущая директория.$SHELL
— текущая оболочка командной строки.$USER
— имя текущего пользователя.$HOSTNAME
— имя текущего хоста (компьютера).👉 @bash_srv
🎯 Примеры типовых операций в bash-скриптах
Собрал для вас полезные кусочки Bash-кода, которые часто нужны при написании скриптов: арифметика, проверки, FTP, Telnet, циклы и т.д. 👇
📌 Арифметика и цикл по количеству раз:
📌 Проверки файлов:
📌 Работа с FTP (без интерактива):
📌 Работа с Telnet:
⚠️ Если требуется пароль — добавь ещё
📌 Цикл по множеству значений:
🔐 Не забудь дать права на исполнение скрипта:
👉@bash_srv
Собрал для вас полезные кусочки Bash-кода, которые часто нужны при написании скриптов: арифметика, проверки, FTP, Telnet, циклы и т.д. 👇
📌 Арифметика и цикл по количеству раз:
#!/bin/bash
A="10"
B="5"
C=`expr $A + $B`
printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C"
# Цикл по числам от 0 до 14 (в 16-ричном формате)
I=0
while [ $I -lt 15 ]
do
printf "0x%02x " "$I"
I=`expr $I + 1`
done
echo
📌 Проверки файлов:
#!/bin/bash
# Создаем файл
touch test1
# Проверка существования файла
if [ -f test1 ]; then
echo "файл test1 существует"
fi
# Проверка отсутствия файла
if ! [ -f test2 ]; then
echo "файл test2 не существует"
fi
# Краткая шпаргалка:
# -d file — директория
# -f file — обычный файл
# -L file — символьная ссылка
# -r/-w/-x — права: чтение/запись/выполнение
# -s file — файл существует и не пустой
# f1 -nt f2 — f1 новее, чем f2
# f1 -ot f2 — f1 старше, чем f2
📌 Работа с FTP (без интерактива):
#!/bin/bash
ADDRESS=192.168.1.150
USER=root
PASSWORD=root
ftp -n -p $ADDRESS <<EoF
user $USER $PASSWORD
cd /usr/bin
put my_cool_program
quit
EoF
exit 0
📌 Работа с Telnet:
#!/bin/bash
(
sleep 1
echo "root"
echo "cd /tmp"
echo "ls"
sleep 1
echo "quit"
) | telnet 192.168.1.150
⚠️ Если требуется пароль — добавь ещё
echo "mypassword"
сразу после echo "root"
📌 Цикл по множеству значений:
#!/bin/bash
for A in раз два три четыре пять
do
echo "$A,"
done
echo "вышел заяц погулять"
🔐 Не забудь дать права на исполнение скрипта:
chmod a+x script.sh
👉@bash_srv
🚀 Быстрый просмотр размера всех подкаталогов
Если нужно быстро узнать, какие директории в текущем каталоге занимают больше всего места — этот однострочник тебе поможет:
📌 Разбор:
-
-
👀 Полезно, когда:
- Хочешь быстро найти, где “утекает” место.
- Проверяешь домашние директории пользователей.
- Мониторишь
🔧 Пример использования:
💡 Добавь алиас в
👉@bash_srv
Если нужно быстро узнать, какие директории в текущем каталоге занимают больше всего места — этот однострочник тебе поможет:
du -h --max-depth=1 | sort -hr
📌 Разбор:
-
du -h --max-depth=1
— показывает размер каждого подкаталога (в человекочитаемом формате, только на 1 уровень вглубь).-
sort -hr
— сортирует результат по размеру в обратном порядке (от большего к меньшему).👀 Полезно, когда:
- Хочешь быстро найти, где “утекает” место.
- Проверяешь домашние директории пользователей.
- Мониторишь
var
, log
или tmp
на переполнение.🔧 Пример использования:
cd /var && du -h --max-depth=1 | sort -hr
💡 Добавь алиас в
.bashrc
, чтобы использовать как команду:
alias dusort='du -h --max-depth=1 | sort -hr'
👉@bash_srv
Основы работы с терминалом и BASH
Основные команды терминала. Первый скрипт на BASH.
Основы BASH | Условия
Основы Bash | Циклы
Основы BASH | for, let, trap
Основы BASH | Функции, рекурсия, модули, массивы
Основы терминала | GNU awk
Основы BASH | expect, who, mesg, autoexpect
🖤 Автор: bugsandfeatures
👉@bash_srv
Основные команды терминала. Первый скрипт на BASH.
Основы BASH | Условия
Основы Bash | Циклы
Основы BASH | for, let, trap
Основы BASH | Функции, рекурсия, модули, массивы
Основы терминала | GNU awk
Основы BASH | expect, who, mesg, autoexpect
👉@bash_srv
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#!/usr/bin/env bash
# Script Name: count_files.sh
# Description: Counts the number of directories, files, and total count in a specified directory,
# with options to filter by extension and set traversal depth.
# Usage: count_files.sh [--directory <dir>] [--depth <depth>] [--extension <ext>] [--help]
# --directory <dir> (optional) - the directory to count files in (default: current directory)
# --depth <depth> (optional) - the maximum depth of directory traversal (default: unlimited)
# --extension <ext> (optional) - only count files with the specified extension
# --help (optional) - display this help message
# Example:
# ./count_files.sh
# ./count_files.sh --directory /path/to/dir --depth 2 --extension txt
set -euo pipefail
show_help() {
cat << EOF
Usage: $0 [OPTIONS]
Options:
-d, --directory DIR The directory to count files in (default: current directory)
-p, --depth DEPTH The maximum depth of directory traversal (default: unlimited)
-e, --extension EXT Only count files with the specified extension
-h, --help Display this help message
Examples:
$0
$0 --directory /path/to/dir --depth 2 --extension txt
EOF
exit 0
}
count_files() {
local dir="$1"
local depth="$2"
local extension="$3"
if [[ ! -d "$dir" ]]; then
echo "Error: Directory '$dir' does not exist."
exit 1
fi
echo -e "\nCounting files in directory: $dir"
[[ -n "$depth" ]] && echo "Depth: $depth"
[[ -n "$extension" ]] && echo "Filtering by extension: .$extension"
local find_cmd=(find "$dir")
[[ -n "$depth" ]] && find_cmd+=(-maxdepth "$depth")
[[ -n "$extension" ]] && find_cmd+=(-name "*.$extension")
find_cmd+=(-type f)
local num_files
num_files=$( "${find_cmd[@]}" | wc -l )
local num_dirs
num_dirs=$( find "$dir" ${depth:+-maxdepth "$depth"} -type d | wc -l )
local total_count=$((num_dirs + num_files))
echo "Number of directories: $num_dirs"
echo "Number of files: $num_files"
echo "Total count: $total_count"
}
main() {
local dir="$(pwd)"
local depth=""
local extension=""
# Parse options
options=$(getopt -o d:p:e:h --long directory:,depth:,extension:,help -n "$0" -- "$@")
eval set -- "$options"
while true; do
case "$1" in
-d|--directory)
dir="$2"
shift 2
;;
-p|--depth)
depth="$2"
shift 2
;;
-e|--extension)
extension="$2"
shift 2
;;
-h|--help)
show_help
;;
--)
shift
break
;;
*)
echo "Invalid option: $1"
show_help
;;
esac
done
count_files "$dir" "$depth" "$extension"
}
main "$@"
👉@bash_srv
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Bash-совет дня: Как быстро найти и удалить пустые директории
Иногда в системах с большим количеством файлов и директорий накапливаются пустые папки. Вот простой способ найти и удалить их одним махом:
🔍 Разбор:
-
-
-
-
🛡 Важно:
Перед удалением рекомендую посмотреть, что именно будет удалено:
Так ты убедишься, что ничего лишнего не затронешь 😉
👉@bash_srv
Иногда в системах с большим количеством файлов и директорий накапливаются пустые папки. Вот простой способ найти и удалить их одним махом:
find /path/to/search -type d -empty -delete
🔍 Разбор:
-
/path/to/search
— укажи директорию, где искать.-
-type d
— ищем только директории.-
-empty
— фильтруем только пустые.-
-delete
— удаляем найденные.🛡 Важно:
Перед удалением рекомендую посмотреть, что именно будет удалено:
find /path/to/search -type d -empty
Так ты убедишься, что ничего лишнего не затронешь 😉
👉@bash_srv
📁Как отрезать расширение у файла в Bash
📌 Что тут происходит:
-
👀 Примеры:
Если хочешь убрать все расширения (в т.ч.
🧠 Под капотом:
-
-
Мощно и без внешних команд! 🚀
👉@bash_srv
filename="example.txt"
name="${filename%.*}"
echo "$name"
📌 Что тут происходит:
-
${filename%.*}
— удаляет последнюю точку и всё после неё, то есть расширение.👀 Примеры:
filename="backup.tar.gz"
name="${filename%.*}" # Результат: backup.tar
Если хочешь убрать все расширения (в т.ч.
.tar.gz
), можно использовать вот так:
filename="backup.tar.gz"
name="${filename%%.*}" # Результат: backup
🧠 Под капотом:
-
%.*
— удаляет самую правую точку и всё после.-
%%.*
— удаляет самую левую точку и всё после.Мощно и без внешних команд! 🚀
👉@bash_srv
🛡 Проверка SSL-сертификатов с помощью Bash
Иногда нужно быстро проверить срок действия SSL-сертификата удалённого сайта. Вот удобный однострочник на Bash, который покажет дату окончания действия сертификата:
📆 Чтобы получить только оставшиеся дни до окончания:
🔒 Полезно для автоматического мониторинга или проверки перед продлением сертификатов!
👉@bash_srv
Иногда нужно быстро проверить срок действия SSL-сертификата удалённого сайта. Вот удобный однострочник на Bash, который покажет дату окончания действия сертификата:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -dates | grep notAfter
📆 Чтобы получить только оставшиеся дни до окончания:
end_date=$(echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
end_ts=$(date -d "$end_date" +%s)
now_ts=$(date +%s)
echo "Осталось дней: $(( (end_ts - now_ts) / 86400 ))"
🔒 Полезно для автоматического мониторинга или проверки перед продлением сертификатов!
👉@bash_srv