Документация по Bash

Примеры кода и пояснения

Пример кода Bash: Поиск больших файлов на удалённых серверах

Поиск больших файлов на удалённых серверах:



#!/bin/bash

###########################################################
# LARGE FILES TO DELETE ON FS FOR LINUX SYSTEM            #
# created by                                             #
# info -                                                 #
# run sh big.sh 1.txt**                                   #
###########################################################

#VARS
INPUT_FILE=$1
OUTPUT_FILE="$HOME/list_packages.txt"
ERROR_HOSTS_FILE="$HOME/$0_ssh_error_hosts.txt"


#FAQ
function usage {
    echo "Usage:"
    echo "$(basename $0) hosts.txt"
    echo "The file hosts.txt should be filled with hostnames or IP addresses, each entry on a separate line. The name of the host list file can be anything."
}

if [[ $# -eq 0 ]]
then
    usage
fi

#Processing errors
process_error() {
    echo $1 >> $ERROR_HOSTS_FILE
    echo "ERROR $1: $2" >&2
}

echo "Найденные файлы" > $OUTPUT_FILE
echo -n > $ERROR_HOSTS_FILE

#main CYCLE
while IFS= read -r server; do
    echo "Processing $server..."
    temp_file=$(mktemp)
    ssh -q -o ConnectTimeout=10 -o StrictHostKeyChecking=no USER@"$server" /bin/bash << 'EOF' 2>> $HOME/$0-errors.log > "$temp_file"
    HOSTNAME=$(hostname)
    echo
    echo "Расположение 10 папок, занимающих больше всего места"

    sudo du /srv -ahx | sort -rh | head -10
    echo
    echo "Расположение default_profile"
    sudo find /srv -type d -iname default_profile
    echo
    echo "Расположение iso"
    sudo find /srv -type f -iname "*.iso"
    echo
    echo "Расположение tib"
    sudo find /srv -type f -iname "*.tib"
    echo
    echo "Расположение nsf"
    sudo find /srv -type f -iname "*.nsf"
    echo
    echo "Расположение *mail.db"
    sudo find /srv -type f -iname "*mail.db" | xargs -r -d '\n' ls -lh
    echo
    echo "Расположение файлов размером >5ГБ"
    sudo find /srv -type f -size +5G | xargs -r -d '\n' ls -lh
    echo
    echo "Расположение файлов размером от 3ГБ до 5ГБ"
    sudo find /srv -size +3G -size -5G | xargs -r -d '\n' ls -lh
    echo
    echo "Расположение файлов размером от 1ГБ до 3ГБ"
    sudo find /srv -size +1G -size -3G | xargs -r -d '\n' ls -lh
    echo
    echo "Расположение папок, которые не открывали больше 5000 дней"
    sudo find /srv -type d -maxdepth 6 -mtime +5000 -mtime -6000
EOF

if [ $? -eq 0 ]; then
    cat "$temp_file" >> "$OUTPUT_FILE"
else
    process_error "$server" "SSH connection failed"
fi
rm -f "$temp_file"

done < "$INPUT_FILE"
echo "Result save to $OUTPUT_FILE"

Пояснения к элементам кода Bash

Полезные команды Bash

  1. chmod +x script.sh — сделать скрипт исполняемым.
  2. ./script.sh — запустить скрипт.
  3. bash script.sh — запустить скрипт через интерпретатор Bash.
  4. cat script.sh — просмотреть содержимое скрипта.
  5. nano script.sh — отредактировать скрипт в текстовом редакторе.
  6. ps aux | grep bash — найти запущенные процессы Bash.
  7. history — показать историю выполненных команд.