Шпаргалка по bash
Что занимает место на диске:
du -a /home/ | sort -n -r | head -n 20
du -sh /vz/private/106/* | sort -h
Отправить данные по ssh через кастомный порт:
rsync -aOv -e 'ssh -p 3334' /root/ccd/ backupsync@my_domain.com:/mount_storage/
Посмотреть конфиг без комментариев (начинающихся не с начала строки в том числе) и пустых строк:
grep -v '^$\|^\s*\#' ../sites-available/default-ssl.conf
Просто без комментариев и пустых строк:
grep -v '^$\|^#' some-config.conf
#AWK
Примеры использования awk — https://www.opennet.ru/tips/1811_awk_shell.shtml
Основные linux-команды для новичка — https://habr.com/ru/post/501442/
Дюжина приемов в Linux, которые действительно сэкономят уйму времени — https://habr.com/ru/post/340544/
Перенаправление вывода в bash.
#Подсветка вывода текста в терминал
https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
По ссылке описано много вариатов как что посмотреть по этому вопросу и реализовать.
Ascii art — https://askubuntu.com/questions/234678/how-to-show-ascii-art-at-the-top-of-the-terminal-when-its-opened
Bash. Чтение файла.
index=0
while read line; do
array[$index]="$line"
index=$(($index+1))
done < filename
проверяем:
for ((a=0; a < ${#array[*]}; a++))
do
echo "$a: ${array[$a]}"
done
Считывание файла построчно
#!/bin/bash file = "/var/log/file.log" while IFS= read -r line do echo "$line" done < "$file" |
#!/bin/bash file = "/var/log/file.log" while read line do echo "$line" done < $ file |
Удаление файлов по шаблону:
find /var/log/ -type f -name "*.gz" -delete
#Удаление файлов старше 1000 дней
find . -mtime +1000 -delete
Удаление пустых каталогов:
find $DATADIR -mtime +1 -type d -empty -delete
#Работа над строками
pkgs = "foo" pkgs+ = "bar" pkgs+ = "bqaz"
#!/bin/bash # # Скрипт для разделения строки на основе разделителя my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora" IFS=';' read -ra my_array <<< "$my_string" # Печать разделенной строки for i in "${my_array[@]}" do echo $i done
string='Моя длинная строка' if [[ $string == *"Моя длинная"* ]]; then echo "Подстрока найдена!" fi #---------------------------------------------- string=Моя строка'; if [[ $string =~ "Моя" ]] then echo "Подстрока найдена!" fi #---------------------------------------------- case "$string" in *foo*) # Do stuff ;; esac
Взять часть строки до точки.
user=${user%.*ovpn}
#Выполнение команды на удалённом сервере
check_repos=$(ssh sendman@servername.com ‘ls /home/svnrun/repos/ | wc -l’)
#Процессы
Убить процессы, имя которых содержит foo
pkill -f foo
#многострочная строка в одну переменную
$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)
#многострочная строка в файл Bash (создание файла скрипта)
$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF
The b.txt
file contains bar
and baz
lines. The same output is printed to stdout
.
read -r -p "Are you sure? [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
do_something
;;
*)
do_something_else
;;
esac
Использованный материал.
https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash
Заметки с этого чудесного канала — https://t.me/bashdays
Поиск удалённого файла по содержимому:
grep -a -C 200 -F '<some_code_in_script>' /dev/sda1
-a = осуществляем поиск в бинарных файлах.
-C = сколько строк выводить ДО и ПОСЛЕ каждого совпадения строки.
Команда history
Посмотреть
# Посмотрите 5 команд после строки 42 history | tail -n +43 | head -n 5