Примеры shell-сценариев для различных задач

Пример настройки dns-сервера bind9

Настроим в локальной сети 192.168.x.x сервер разрешения имен dns. Создадим имена srv, db, ftp в домене dom на сервере 192.168.0.1.

Файл /etc/bind/dom/named.dom

$TTL    86400
@       IN      SOA     srv.dom. root.srv.dom.  (
                                  20180128 ; Serial
                                  28800      ; Refresh
                                  14400      ; Retry
                                  3600000    ; Expire
                                  86400 )    ; Minimum
          IN      NS      srv.dom.

srv     IN      A     192.168.0.1
db    IN      A     192.168.2.2
ftp     IN      A  192.168.0.127

Файл /etc/bind/dom/db.ftp для настройки короткого имени ftp без домена dom.

$TTL    86400
@       IN      SOA     srv.dom. root.srv.dom.  (
                                  20180128 ; Serial
                                  28800      ; Refresh
                                  14400      ; Retry
                                  3600000    ; Expire
                                  86400 )    ; Minimum
          IN      NS      srv.dom.

      IN      A     192.168.0.127

Прописываем зоны в /etc/bind/named.conf

zone "dom" {
    type master;
    file "/etc/bind/dom/named.dom";
};
zone "ftp" {
    type master;
    file "/etc/bind/dom/db.ftp";
};

Запускаем bind на сервере srv

sudo /etc/init.d/bind9 restart

Теперь создаем файл /etc/resolv.conf на всех машинах с которых нужно обращаться по именам

search dom
nameserver 192.168.0.1

Пробуем

ping ftp
ping ftp.dom
ping db.dom
guru написал 5 месяцев,3 недель назад

Конфиг для настройки анонимного ftp-сервера

Конфиг /etc/vsftpd.conf

listen=yes
tcp_wrappers=yes

write_enable=yes
anon_root=/
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_upload_enable=yes
anon_umask=000
admin написал 7 месяцев,4 недель назад

Использование ssh через expect с передачей пароля без ввода

Простой скрипт, использующий интерпретатор expect для удаленного подключения к хосту по ssh без ввода пароля. Подключается, выводит информацию о системе через uname, закрывает соединение.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/expect -f

set timeout 2
set USER "agena"
set HOST "3"
set PASS "12345678"

spawn ssh $USER@192.168.0.$HOST
expect {
"(yes/no)?*" {
send "yes\r"
}
}
expect "word:"
send "$PASS\r"
expect "$*"
send "uname -a\r"
expect "$*"
send "exit\r"
expect eof
egax написал 1 год,7 месяцев назад
egax написал 1 год,8 месяцев назад

Количество файлов в каталоге

Считаем количество файлов в папке

ls | wc -l
egax написал 2 лет,5 месяцев назад

Получить сведения о запущенном процессе/ах

В Linux получить список запущенных процессов можно командой

ps aux

список активных процессов

top

Узнать, запущен ли конкретный процесс:

ps -C xterm

В Windows, начиная с windows XP, есть полезная утилита wmic.

Например, узнать путь исполняемого файла процесса можно получить так

wmic process where (name="cmd.exe") get ExecutablePath
egax написал 4 лет,6 месяцев назад

Конвертор mp3-файлов в VBR-формат

Конвертор mp3-файлов в VBR-формат с хорошим качеством и небольшим размером.

Удобен для сжатия mp3-файлов с большим битрейтом (256, 320 Кб/с). Использует утилиты lame и id3info.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
#
# Конвертор mp3-файлов в VBR-битрейт
# Вызов: bash mp3conv [каталог_с_mp3]
# egax

parse_tag ()
{
    retval=$(echo "$1" | grep -P "$2" | iconv -f CP1251 -t UTF-8)
    expr match "$retval" ".*:[ \\t]*\(.*\)"
}

cd "$1"
for curfile in *.mp3; do
    tag=$(id3info "$curfile")

    # берем поля тага
    title=$(parse_tag "$tag" TIT2)
    artist=$(parse_tag "$tag" TPE1)
    track=$(parse_tag "$tag" TRCK)
    year=$(parse_tag "$tag" TYER)
    album=$(parse_tag "$tag" TALB)

    newfile="$curfile"
    # новое имя файла $artist - [$track_]$title.mp3
    if [ ! -z "$artist" ] && [ ! -z "$title" ]; then
        if [ ! -z $track ]; then
            [ $track -lt 10  ] && track=0"$track"
            title="$track"_"$title"
        fi
        newfile="$artist"" - "$title".mp3"
    fi

    dirname=1
    # имя папки для новых файлов [$year_]$album
    if [ ! -z "$album" ]; then
        [ -z $year ] || album="$year"_"$album"
        dirname="$album"
    fi

    # создаем папку если не создана
    [ -d "$dirname" ] || mkdir "$dirname"
    newfile="$dirname"/"$newfile"

    # конвертим файл с VBR-битрейдом и копируем таги v2 и v1
    lame --vbr-new -B 192 "$curfile" "$newfile"
    id3cp -2 "$curfile" "$newfile"
    id3cp -1 "$curfile" "$newfile"
done
egax написал 4 лет,9 месяцев назад

Перекодировка файлов из Windows в Linux

При копировании файлов с кириллицей из Windows в Linux их содержимое может быть не читабельным. Конвертим их, например, в utf8:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
# 
# Конвертим рекурсивно файлы из кодировки Windows в Юникод из каталога $1

export TMP_F=`mktemp`

trap "rm -f $TMP_F" EXIT

find "$1" -name \*.txt -print|while read x
do 
    echo $x
    iconv -f cp1251 -t utf8 "$x">$TMP_F && cat $TMP_F > "$x"
done
egax написал 5 лет,6 месяцев назад

Используем Samba для скачивания/закачивания каталогов

Чтобы "скачать" каталог файлов по сети с машины под Windows (Samba-сервером под linux) удобно воспользоваться утилитой smbclient из пакета samba. Например.

Список доступных сетевых папок

smbclient -L 192.168.0.9 -U Администратор

Подключаемся

smbclient //192.168.0.9/E$ -U Администратор

В оболочке Samba вводим команды для "скачивания" рекурсивно папки в текущий каталог

smb:/> recurse
smb:/> prompt
smb:/> mget Документы

Аналогично можно закачать папку из текущего каталога

smb:/> recurse
smb:/> prompt
smb:/> mput home

Текущим путем является текущий путь в терминале, в котором был выполнен smbclient

egax написал 5 лет,8 месяцев назад

Создание self-extract архива tar

Скрипт запуска extract.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
echo ""
echo "Self Extracting Installer"
echo ""

export TMPDIR=`mktemp -d /tmp/selfextract.XXXXXX`

ARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' $0`

tail -n+$ARCHIVE $0 | tar -xzv - -C $TMPDIR

CDIR=`pwd`
cd $TMPDIR
./installer

cd $CDIR
rm -rf $TMPDIR

exit 0

# newline after
__ARCHIVE_BELOW__

Пакуем скрипт запуска и архив tar.gz в bundle

cat extract.sh a.tar.gz > installer.run

Запускаем

sh installer.run
egax написал 5 лет,8 месяцев назад

Стр. 1 из 2 Далее ›

Войдите, чтобы оставлять сообщения.