FreeBSD — различия между версиями

Материал из gptel_wiki
Перейти к: навигация, поиск
(Новая страница: «== rc.conf== Статические маршруты <pre> static_routes="gp" route_gp="-net 192.168.128.0/22 10.1.1.1" </pre> Алиасы на vlan <pre> clon…»)
 
Строка 78: Строка 78:
  
 
test
 
test
 +
 +
 +
== Shell-программирование ==
 +
 +
Автор: iNo // k0dsweb gr0up
 +
Статья является собственностью команды KodsWeb (www.kodsweb.ru)
 +
-= 06.09.2006 =-
 +
 +
Intro...
 +
 +
В данной статье я вкратце опишу shell-программирование, рассмотрю простейшие примеры и прокомментирую их. Сразу оговорюсь,что эта статья не является исчерпывающим руководством по shell-программированию. Но её будет достаточно чтобы освоить его основы. Несмотря на кажущуюся простоту shell-программирования, оно является достаточно мощным инструментом администратора unix-системы.Замечу,что для полноценного администрирования unix-системы, уметь программировать на shell просто необходимо. Все примеры протестированы на системе Slackware Linux 10.2 и полностью работоспособны.
 +
 +
Общие положения.
 +
 +
Комментарии начинаются с символа #, за исключением первой строки. Первой строкой сценария является путь к интерпретатору, начинающийся с #! с помошью которого будет запущен данный скрипт. Например:
 +
 +
 +
        #!/bin/sh
 +
        #А вот это уже комментарий
 +
 +
Переменные, ввод и вывод данных.
 +
 +
Для задания переменных используется оператор присваевания "=". Синтаксис следующий:
 +
 +
 +
        <переменная>=<значение>
 +
 +
Замечу,что в отличие от языков perl и php,между знаком "=" и остальными параметрами нельзя ставить пробел.В этом случае интерпретатор выдаст ошибку.Чтобы обратится к заданной переменной ,надо вызвать её поставив перед ней знак $.Удалить переменную можно с помощью оператора unset. Оператор Echo просто выводит строку(или переменную), идущую после него:
 +
 +
 +
        #!/bin/sh
 +
        var=Vasya
 +
        echo $var
 +
 +
        >--------------------------------------<
 +
        Vasya
 +
        >--------------------------------------<
 +
 +
        #!/bin/sh
 +
        echo My name is Vasya
 +
 +
        >--------------------------------------<
 +
        My name is Vasya
 +
        >--------------------------------------<
 +
 +
В данный пример также можно добавить одинарные или двойные кавычки, от этого результат работы программы не изменится. Но не стоит использовать обратные кавычки, т.к.эти символы используются для выполнения команд:
 +
 +
 +
        #!/bin/sh
 +
        echo `My name is Vasya"
 +
 +
        >--------------------------------------<
 +
 +
        Error: My: command not found
 +
        >--------------------------------------<
 +
 +
        #!/bin/sh
 +
        echo 'ls -a'
 +
 +
        >--------------------------------------<
 +
        . .. .bash_history script.sh
 +
        >--------------------------------------<
 +
 +
Оператор read присваевает значение переменной.Вот пример,который просит ввести переменную var,считывает её а затем выводит.
 +
 +
 +
        #!/bin/sh
 +
        echo "Input var:"
 +
        read var
 +
        echo "The var is $var"
 +
 +
        >--------------------------------------<
 +
        Input var:
 +
        123
 +
        The var is 123
 +
        >--------------------------------------<
 +
 +
Агрументы командной строки.
 +
 +
Как и во всех консольных программах, в shell-сценарий можно передавать аргументы из командной строки.Переменные $1..$9 соответствуют параметрам, переданным из командной строки сценарию.Переменная $0 содержит имя интерпретируемого файла.$#-содержит количество переданных аргументов. $* и $@ содержат все аргументы,но в $@ все аргументы выделены кавычками. Напишем скрипт,который выводит 2 аргумента командной строки и имя исполняемого файла.Запуск скрипта: ./script.sh 1 2
 +
 +
 +
        #!/bin/sh
 +
        echo "Name:$0"
 +
        echo "First argument:$1"
 +
        echo "Second argument:$2"
 +
 +
        >--------------------------------------<
 +
 +
        Name:./script.sh
 +
        First argument:1
 +
        Second argument:2
 +
        >--------------------------------------<
 +
 +
Арифметические операции.
 +
 +
Арифметические операции производятся с использованием оператора let. Операции:
 +
 +
 +
* - умножение
 +
/ - деление
 +
+ - сложение
 +
- - вычитание
 +
% - деление с остатком
 +
 +
Синтаксис арифметических операций в Shell:
 +
 +
 +
        let <значение> <оператор> <значение>
 +
 +
 +
Пример sh let:
 +
 +
 +
        #!/bin/sh
 +
        let res=2*7
 +
        echo $res
 +
 +
        >--------------------------------------<
 +
        14
 +
        >--------------------------------------<
 +
 +
Оператор test или [].
 +
 +
Данные операторы предназначены для выполнения сравнений двух значений. Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения последней выполненной команды хранится в специальной переменной $?.
 +
 +
 +
 +
Синтаксис оператора test:
 +
 +
 +
        test <значение> -опция <значение>
 +
 +
или
 +
 +
        [<значение> -опция <значение>]
 +
 +
Пример:
 +
 +
        #!/bin/sh
 +
        var=10
 +
        [ $var -eq 8 ]
 +
        echo $?
 +
 +
        >--------------------------------------<
 +
        1
 +
        >--------------------------------------<
 +
 +
 +
Ниже приведены все опции оператора test(или []):
 +
 +
Сравнение целых чисел:
 +
 +
-gt больше чем
 +
-lt меньше чем
 +
-ge больше чем либо равно
 +
-le меньше чем либо равно
 +
-eq равно
 +
-ne не равно
 +
Сравнение строк:
 +
 +
-z проверка на наличие пустой строки
 +
-n проверка на наличие строки-значения
 +
= равенство
 +
!= неравенство
 +
str проверка на наличие строки,состоящей из нулей
 +
Логические операции:
 +
 +
-a И
 +
-o ИЛИ
 +
! НЕ
 +
Проверка файлов:
 +
 +
-f установка факта существования файла и его регулярности
 +
-s проверка,не является-ли файл пустым
 +
-r проверка возможности считывания файла
 +
-w проверка возможности записи файла
 +
-x проверка исполняемости файла
 +
-d проверка,является-ли файл каталогом
 +
-h проверка,является-ли файл ссылкой
 +
-c проверка,является-ли файл байт-ориентированным устройством
 +
-d проверка,является-ли файл блок-ориентированным устройством
 +
Условия.
 +
 +
Ниже описан синтаксис всех условных операторов, с примерами.
 +
 +
1) if <команда> then <команда> fi
 +
 +
Пример условия if ... then:
 +
 +
 +
        #!/bin/sh
 +
        if [ $1 -eq 10 ]; then
 +
            echo var=10
 +
        fi
 +
 +
Результат работы,при переданном параметре равном 10:
 +
 +
 +
        >--------------------------------------<
 +
        var=10
 +
        >--------------------------------------<
 +
 +
 +
2) if <команда> then <команда> else <команда> fi
 +
 +
Пример if ... then ... else:
 +
 +
 +
        #!/bin/sh
 +
        if [ $1 -eq 10 ]; then
 +
            echo var=10
 +
        else
 +
            echo var!=10
 +
        fi
 +
 +
Результат работы,при переданном параметре равном 10:
 +
 +
 +
        >--------------------------------------<
 +
        var=10
 +
        >--------------------------------------<
 +
 +
 +
Результат работы,при переданном параметре равном 7:
 +
 +
 +
        >--------------------------------------<
 +
        var!=10
 +
        >--------------------------------------<
 +
 +
 +
3) if <команда> then <команда> elif <команда> else <команда> fi
 +
 +
Пример if ... then ... elif ... else:
 +
 +
 +
        #!/bin/sh
 +
        if [ $1 -eq 10 ]; then
 +
            echo var=10
 +
        elif [ $1 -eq 9 ]; then
 +
            echo var=9
 +
        else
 +
            echo var!=10 and var!=9
 +
        fi
 +
 +
Результат работы,при переданном параметре равном 10:
 +
 +
 +
        >--------------------------------------<
 +
        var=10
 +
        >--------------------------------------<
 +
 +
Результат работы,при переданном параметре равном 9:
 +
 +
 +
        >--------------------------------------<
 +
 +
        var=9
 +
        >--------------------------------------<
 +
 +
Результат работы,при переданном параметре равном 8:
 +
 +
 +
        >--------------------------------------<
 +
        var!=10 and var!=9
 +
        >--------------------------------------<
 +
 +
4) case <строка> in <шаблон>) <команды> ;; *) <команды> ;; esac
 +
 +
Case-конструкция позволяет выбирать один из нескольких альтернативных вариантов.
 +
 +
 +
        #!/bin/sh
 +
        case $1 in
 +
        1)
 +
        echo arg is 1
 +
        ;;
 +
        2)
 +
        echo arg is 2
 +
        ;;
 +
        *)
 +
        echo arg is other
 +
        ;;
 +
        esac
 +
 +
 +
Результат работы,при переданном параметре равном 1:
 +
 +
 +
        >--------------------------------------<
 +
        arg is 1
 +
        >--------------------------------------<
 +
 +
Результат работы,при переданном параметре равном 2:
 +
 +
 +
        >--------------------------------------<
 +
        arg is 2
 +
        >--------------------------------------<
 +
 +
Результат работы,при переданном параметре равном 10:
 +
 +
 +
        >--------------------------------------<
 +
        arg is other
 +
        >--------------------------------------<
 +
 +
Циклы.
 +
 +
1) while <условие> do <команды> done
 +
 +
Оператор языка shell-программирования while выполняет команды, пока условие истино.
 +
Пример:
 +
 +
 +
        #!/bin/sh
 +
        cont=yes
 +
        while [ $cont = yes ]
 +
        do
 +
        echo -n "continue?"
 +
        read cont
 +
        done
 +
 +
        >--------------------------------------<
 +
        continue?
 +
        yes
 +
        continue?
 +
        no
 +
        >--------------------------------------<
 +
 +
 +
2) until <условие> do <команды> done
 +
 +
Оператор until выполняет команды, пока условие ложно.
 +
Пример:
 +
 +
 +
        #!/bin/sh
 +
        cont=yes
 +
        until [ $cont = no ]
 +
        do
 +
        echo -n "continue?"
 +
        read cont
 +
        done
 +
 +
        >--------------------------------------<
 +
 +
        continue?
 +
        yes
 +
        continue?
 +
        no
 +
        >--------------------------------------<
 +
 +
 +
3) for <переменная> do <команды> done
 +
 +
Цикл for - выполняет команды для каждого параметра, который был передан сценарию в командной строке.
 +
Пример:
 +
 +
 +
        #!/bin/sh
 +
        for var
 +
        do
 +
        echo $var
 +
        done
 +
 +
Результат работы программы,с параметрами 1 2 3 4 5:
 +
 +
 +
        >--------------------------------------<
 +
        1
 +
        2
 +
        3
 +
        4
 +
        5
 +
        >--------------------------------------<
 +
 +
4) for <переменная> in <строка>
 +
do
 +
<команды>
 +
done
 +
Эта конструкция отличается от обычного for тем, что параметры берутся не из командной строки, а из строки после оператора in.
 +
 +
5) select <строка> in <перечень элементов>
 +
do
 +
<команды>
 +
done
 +
Конструкция select создаёт меню на основе элементов заданного списка, а затем выполняет для него указанную команду.
 +
Пример:
 +
 +
 +
        #!/bin/sh
 +
        select var in 1 2 3
 +
        do
 +
        case $var in
 +
        1)
 +
        echo Number 1
 +
        ;;
 +
        2)
 +
        echo Number 2
 +
        ;;
 +
        3)
 +
        echo Number 3
 +
        ;;
 +
        *)
 +
        echo Other
 +
        ;;
 +
        esac
 +
        done
 +
 +
        >--------------------------------------<
 +
 +
        1) 1
 +
        2) 2
 +
        3) 3
 +
        #? 3
 +
        Number 3
 +
        #? _
 +
        >--------------------------------------<
 +
 +
Оригинал статьи http://www.opennet.ru/base/dev/shell_coding.txt.html

Версия 09:06, 27 мая 2015

rc.conf

Статические маршруты

static_routes="gp" 
route_gp="-net 192.168.128.0/22 10.1.1.1"

Алиасы на vlan

cloned_interfaces="vlan80 vlan81"
ifconfig_vlan80="inet 192.168.168.10 netmask 255.255.255.0 vlan 80 vlandev em2"
ifconfig_vlan80_alias0="alias 192.168.168.11 netmask 255.255.255.0"
ifconfig_vlan81="inet 192.168.169.10 netmask 255.255.255.0 vlan 81 vlandev em2"
ifconfig_vlan81_alias0="alias 192.168.169.11 netmask 255.255.255.0"

при этом не забываем
echo 'ifconfig em2 up' >> /etc/rc.local

sysctl.conf

kern.coredump=0 
net.inet6.ip6.auto_linklocal=0

gmirror + GPT

Источник [[1]]

  1. gmirror label -v -b round-robin gm0 /dev/ad0\\
  2. gmirror load\\
  1. gpart create -s gpt mirror/gm0\\
  2. gpart add -t freebsd-boot -s 128k mirror/gm0\\
  3. gpart add -t freebsd-ufs -s 1G mirror/gm0\\
  4. gpart add -t freebsd-swap -s 4G -l swap mirror/gm0\\
  5. gpart add -t freebsd-ufs -s 1G mirror/gm0\\
  6. gpart add -t freebsd-ufs -s 4G mirror/gm0\\
  7. gpart add -t freebsd-ufs -s 20G mirror/gm0\\
  8. gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 mirror/gm0\\
  1. newfs -L rootfs /dev/mirror/gm0p2\\
  2. newfs -L tmpfs /dev/mirror/gm0p4\\
  3. newfs -L varfs /dev/mirror/gm0p5\\
  4. newfs -L usrfs /dev/mirror/gm0p6\\
  1. mkdir /mnt/root; mkdir /mnt/var; mkdir /mnt/usr\\
  2. mount /dev/ufs/rootfs /mnt/root\\
  3. mount /dev/ufs/varfs /mnt/var\\
  4. mount /dev/ufs/usrfs /mnt/usr\\
Либо с нуля создаем\\
  1. cd /usr/src\\
  2. make DESTDIR=/mnt installworld distribution installkernel KERNCONF="YOUR_KERNEL_HERE"\\
Либо копируем существующую систему\\
  1. cd /; pax -p eme -X -rw . /mnt/root\\
  2. cd /var; pax -p eme -X -rw . /mnt/var\\
  3. cd /usr; pax -p eme -X -rw . /mnt/usr\\
  1. echo 'geom_mirror_load="YES"' >> /mnt/root/boot/loader.conf\\
  2. echo 'vfs.root.mountfrom="ufs:/dev/ufs/rootfs"' >> /mnt/root/boot/loader.conf\\
  1. cat > /mnt/root/etc/fstab\\
  2. Device Mountpoint FStype Options Dump Pass#\\

/dev/gpt/swap none swap sw 0 0\\ /dev/ufs/rootfs / ufs rw 1 1\\ /dev/ufs/usrfs /usr ufs rw 2 2\\ ^D\\

shutdown -r now

Убираем текущий загрузочный диск, делаем загрузочным созданый.

  1. chmod 1777 /tmp

fail2ban

test


Shell-программирование

Автор: iNo // k0dsweb gr0up Статья является собственностью команды KodsWeb (www.kodsweb.ru) -= 06.09.2006 =-

Intro...

В данной статье я вкратце опишу shell-программирование, рассмотрю простейшие примеры и прокомментирую их. Сразу оговорюсь,что эта статья не является исчерпывающим руководством по shell-программированию. Но её будет достаточно чтобы освоить его основы. Несмотря на кажущуюся простоту shell-программирования, оно является достаточно мощным инструментом администратора unix-системы.Замечу,что для полноценного администрирования unix-системы, уметь программировать на shell просто необходимо. Все примеры протестированы на системе Slackware Linux 10.2 и полностью работоспособны.

Общие положения.

Комментарии начинаются с символа #, за исключением первой строки. Первой строкой сценария является путь к интерпретатору, начинающийся с #! с помошью которого будет запущен данный скрипт. Например:


       #!/bin/sh
       #А вот это уже комментарий

Переменные, ввод и вывод данных.

Для задания переменных используется оператор присваевания "=". Синтаксис следующий:


       <переменная>=<значение>

Замечу,что в отличие от языков perl и php,между знаком "=" и остальными параметрами нельзя ставить пробел.В этом случае интерпретатор выдаст ошибку.Чтобы обратится к заданной переменной ,надо вызвать её поставив перед ней знак $.Удалить переменную можно с помощью оператора unset. Оператор Echo просто выводит строку(или переменную), идущую после него:


       #!/bin/sh
       var=Vasya
       echo $var
       >--------------------------------------<
       Vasya
       >--------------------------------------<
       #!/bin/sh
       echo My name is Vasya
       >--------------------------------------<
       My name is Vasya
       >--------------------------------------<

В данный пример также можно добавить одинарные или двойные кавычки, от этого результат работы программы не изменится. Но не стоит использовать обратные кавычки, т.к.эти символы используются для выполнения команд:


       #!/bin/sh
       echo `My name is Vasya"
       >--------------------------------------<
       Error: My: command not found
       >--------------------------------------<
       #!/bin/sh
       echo 'ls -a'
       >--------------------------------------<
       . .. .bash_history script.sh
       >--------------------------------------<

Оператор read присваевает значение переменной.Вот пример,который просит ввести переменную var,считывает её а затем выводит.


       #!/bin/sh
       echo "Input var:"
       read var
       echo "The var is $var"
       >--------------------------------------<
       Input var:
       123
       The var is 123
       >--------------------------------------<

Агрументы командной строки.

Как и во всех консольных программах, в shell-сценарий можно передавать аргументы из командной строки.Переменные $1..$9 соответствуют параметрам, переданным из командной строки сценарию.Переменная $0 содержит имя интерпретируемого файла.$#-содержит количество переданных аргументов. $* и $@ содержат все аргументы,но в $@ все аргументы выделены кавычками. Напишем скрипт,который выводит 2 аргумента командной строки и имя исполняемого файла.Запуск скрипта: ./script.sh 1 2


       #!/bin/sh
       echo "Name:$0"
       echo "First argument:$1"
       echo "Second argument:$2"
       >--------------------------------------<
       Name:./script.sh
       First argument:1
       Second argument:2
       >--------------------------------------<

Арифметические операции.

Арифметические операции производятся с использованием оператора let. Операции:


  • - умножение

/ - деление + - сложение - - вычитание % - деление с остатком

Синтаксис арифметических операций в Shell:


       let <значение> <оператор> <значение>


Пример sh let:


       #!/bin/sh
       let res=2*7
       echo $res
       >--------------------------------------<
       14
       >--------------------------------------<

Оператор test или [].

Данные операторы предназначены для выполнения сравнений двух значений. Если сравнение успешно-оператор возвращает 0,иначе 1.Код завершения последней выполненной команды хранится в специальной переменной $?.


Синтаксис оператора test:


       test <значение> -опция <значение>

или

       [<значение> -опция <значение>]

Пример:

       #!/bin/sh
       var=10
       [ $var -eq 8 ]
       echo $?
       >--------------------------------------<
       1
       >--------------------------------------<


Ниже приведены все опции оператора test(или []):

Сравнение целых чисел:

-gt больше чем -lt меньше чем -ge больше чем либо равно -le меньше чем либо равно -eq равно -ne не равно Сравнение строк:

-z проверка на наличие пустой строки -n проверка на наличие строки-значения = равенство != неравенство str проверка на наличие строки,состоящей из нулей Логические операции:

-a И -o ИЛИ ! НЕ Проверка файлов:

-f установка факта существования файла и его регулярности -s проверка,не является-ли файл пустым -r проверка возможности считывания файла -w проверка возможности записи файла -x проверка исполняемости файла -d проверка,является-ли файл каталогом -h проверка,является-ли файл ссылкой -c проверка,является-ли файл байт-ориентированным устройством -d проверка,является-ли файл блок-ориентированным устройством Условия.

Ниже описан синтаксис всех условных операторов, с примерами.

1) if <команда> then <команда> fi

Пример условия if ... then:


       #!/bin/sh
       if [ $1 -eq 10 ]; then
           echo var=10
       fi

Результат работы,при переданном параметре равном 10:


       >--------------------------------------<
       var=10
       >--------------------------------------<


2) if <команда> then <команда> else <команда> fi

Пример if ... then ... else:


       #!/bin/sh
       if [ $1 -eq 10 ]; then
           echo var=10
       else
           echo var!=10
       fi

Результат работы,при переданном параметре равном 10:


       >--------------------------------------<
       var=10
       >--------------------------------------<


Результат работы,при переданном параметре равном 7:


       >--------------------------------------<
       var!=10
       >--------------------------------------<


3) if <команда> then <команда> elif <команда> else <команда> fi

Пример if ... then ... elif ... else:


       #!/bin/sh
       if [ $1 -eq 10 ]; then
           echo var=10
       elif [ $1 -eq 9 ]; then
           echo var=9
       else
           echo var!=10 and var!=9
       fi

Результат работы,при переданном параметре равном 10:


       >--------------------------------------<
       var=10
       >--------------------------------------<

Результат работы,при переданном параметре равном 9:


       >--------------------------------------<
       var=9
       >--------------------------------------<

Результат работы,при переданном параметре равном 8:


       >--------------------------------------<
       var!=10 and var!=9
       >--------------------------------------<

4) case <строка> in <шаблон>) <команды> ;; *) <команды> ;; esac

Case-конструкция позволяет выбирать один из нескольких альтернативных вариантов.


       #!/bin/sh
       case $1 in
       1)
       echo arg is 1
       ;;
       2)
       echo arg is 2
       ;;
       *)
       echo arg is other
       ;;
       esac


Результат работы,при переданном параметре равном 1:


       >--------------------------------------<
       arg is 1
       >--------------------------------------<

Результат работы,при переданном параметре равном 2:


       >--------------------------------------<
       arg is 2
       >--------------------------------------<

Результат работы,при переданном параметре равном 10:


       >--------------------------------------<
       arg is other
       >--------------------------------------<

Циклы.

1) while <условие> do <команды> done

Оператор языка shell-программирования while выполняет команды, пока условие истино. Пример:


       #!/bin/sh
       cont=yes
       while [ $cont = yes ]
       do
       echo -n "continue?"
       read cont
       done
       >--------------------------------------<
       continue?
       yes
       continue?
       no
       >--------------------------------------<


2) until <условие> do <команды> done

Оператор until выполняет команды, пока условие ложно. Пример:


       #!/bin/sh
       cont=yes
       until [ $cont = no ]
       do
       echo -n "continue?"
       read cont
       done
       >--------------------------------------<
       continue?
       yes
       continue?
       no
       >--------------------------------------<


3) for <переменная> do <команды> done

Цикл for - выполняет команды для каждого параметра, который был передан сценарию в командной строке. Пример:


       #!/bin/sh
       for var
       do
       echo $var
       done

Результат работы программы,с параметрами 1 2 3 4 5:


       >--------------------------------------<
       1
       2
       3
       4
       5
       >--------------------------------------<

4) for <переменная> in <строка> do <команды> done Эта конструкция отличается от обычного for тем, что параметры берутся не из командной строки, а из строки после оператора in.

5) select <строка> in <перечень элементов> do <команды> done Конструкция select создаёт меню на основе элементов заданного списка, а затем выполняет для него указанную команду. Пример:


       #!/bin/sh
       select var in 1 2 3
       do
       case $var in
       1)
       echo Number 1
       ;;
       2)
       echo Number 2
       ;;
       3)
       echo Number 3
       ;;
       *)
       echo Other
       ;;
       esac
       done
       >--------------------------------------<
       1) 1
       2) 2
       3) 3
       #? 3
       Number 3
       #? _
       >--------------------------------------<

Оригинал статьи http://www.opennet.ru/base/dev/shell_coding.txt.html