From OpenSCADAWiki
- Автор: Роман Савоченко
- Засновано: 2002
- Початково створено (
):
LaTeX (Вихідні, PDF), стара Wiki
Contents
- 1 Конфігураційні та інформаційні файли і каталоги
- 2 Процедури
- 2.1 Використання OpenSSL
- 2.2 Налаштування ssh
- 2.3 Створення, використання та обслуговування програмного RAID — ДЗЕРКАЛА
- 2.4 Адміністрування віртуальних серверів (VPS) на основі технології OpenVZ
- 2.5 Система контролю версій CVS
- 2.6 Система контролю версій Subversion (SVN)
- 2.7 Система контролю версій GIT
- 2.8 Приготування та компіляція проєктів на основі AutoTools
- 3 Формати основних конфігураційних файлів та сценарії-скрипти
- 3.1 BASH
- 3.1.1 Основні елементи граматики команд та визначень
- 3.1.2 Службові змінні
- 3.1.3 Підстановки
- 3.1.4 Змінні оточення та оболонки
- 3.1.5 Оператори
- 3.1.6 Вбудовані та основні команди
- 3.1.7 Опції перевірки команди test
- 3.1.8 Прості цілочисельні операції у формі $[100/3], $((100/3))
- 3.1.9 Переспрямування виводу
- 3.1.10 Спеціальні символи — екранування
- 3.1.11 Маски-шаблони
- 3.1.12 Представлення чисельних значень
- 3.1.13 Корисні обороти
- 3.1 BASH
1 Конфігураційні та інформаційні файли і каталоги
1.1 Загальносистемні
- /dev/ — містить спеціальні файли пристроїв:
- pts/ — файли пристроїв відкритих псевдотерміналів.
- pts/ — файли пристроїв відкритих псевдотерміналів.
- /etc/ — основний каталог конфігураційних файлів:
- anacrontab — конфігурація завдань виконуваних anacron;
- crontab, cron.d/ — конфігурація та тека окремих файлів конфігурації завдань планового виконання cron;
- cron.daily/ — тека окремих файлів конфігурації завдань щоденного виконання cron;
- cron.hourly/ — тека окремих файлів конфігурації завдань щогодинного виконання cron;
- cron.monthly/ — тека окремих файлів конфігурації завдань щомісячного виконання cron;
- cron.weekly/ — тека окремих файлів конфігурації завдань щотижневого виконання cron;
- fstab — конфігурація файлових систем(ФС) автоматичного монтування при завантажені;
- group — системні групи користувачів;
- hostname — поточна назва машини, може перевизначатися у /etc/hosts через зворотне вирішення внутрішньої IP адреси;
- hosts — внутрішнє-первинне вирішення іменованої мережевої адреси у IP та навпаки, може перевизначати /etc/hostname;
- issue — повідомлення видаване перед локальною реєстрацією;
- issue.net — повідомлення видаване перед мережевою реєстрацією;
- logrotate.conf, logrotate.d/ — конфігурація та тека окремих конфігураційних файлів демону автоматичної ротації (пакування, видалення) логів;
- ld.so.conf — конфігурація динамічного лінкувальника поділюваних бібліотек;
- motd — повідомлення видаване після вдалої реєстрації;
- mtab — актуальна інформація щодо змонтованих ФС, зазвичай посилання на /proc/self/mounts;
- nologin — наявність цього файлу забороняє користувачам входити до системи із видачею повідомлення у цьому файлі;
- nsswitch.conf — конфігурація послідовності пошуку імен за різними джерелами, саме тут визначається первинність /etc/hosts;
- pam.conf, pam.d/ — конфігурація та тека окремих конфігураційних файлів змінних модулів розпізнавання (PAM):
- password — системні користувачі;
- profile, profile.d — конфігурація та тека окремих конфігураційних файлів профілю системи для BASH, (виконується після реєстрації;
- rc.d/, rcN.d/ — загальна тека та теки за рівнями N до системи ініціалізації-запуску init або нових замість неї, часто містить посилання на відповідні сценарії запуску у /etc/init.d;
- init.d/ — містить сценарії керування сервісами;
- security/ — містить файли опису безпеки системи:
- limits.conf — конфігурація лімітів користувачів.
- sysctl.conf — містить команди для автоматичної ініціалізації системних параметрів ядра;
- shadow — містить закодовані паролі користувачів;
- skel/ — шаблон каталогу користувача, вміст копіюється звідси до теки новоствореного користувача;
- sudoers, sudoers.d — конфігурація та тека окремих конфігураційних файлів системного доступу з привілеями суперкористувача (root) за допомогою sudo.
- /proc/ — віртуальна ФС віддзеркалення параметрів ядра:
- sys/ — містить файли із параметрами системи, більша частина допускає модифікацію:
- kernel/ — містить файли параметрів ядра:
- hostname — ім'я хосту-системи;
- osrelease — версія ядра системи;
- ostype — тип ОС (Linux, *BSD, ...);
- panic — ознака паніки ядра;
- version — дата складання ядра.
- fs/ — мітить файли параметрів ФС:
- file-max — максимальна кількість відкривуваних файлів.
- kernel/ — містить файли параметрів ядра:
- devices — типи пристроїв у системі;
- modules — модулі підключені до ядра;
- cpuinfo — інформація о процесорах системи.
- sys/ — містить файли із параметрами системи, більша частина допускає модифікацію:
- /home/user/ — домашній каталог користувача user.
2 Процедури
2.1 Використання OpenSSL
openssl rand 5 #Генерація послідовності випадкових байтів
openssl ciphers HIGH #Запит переліку алгоритмів для вказаного рівня
# Генерація секретного RSA та DSA ключа key.pem, зашифрованого des3
# У якості джерела випадкових даних використовується /var/log/messages
openssl genrsa -out key.pem -des3 -rand /var/log/messages 2048
openssl dsaparam -rand /var/log/messages -out dsaprm 1024
openssl gendsa -out key.pem -idea -rand /var/log/messages dsaprm
# Створення публічного RSA т DSA ключа на основі секретного
openssl rsa -in key.pem -out pubkey.pem -pubout
openssl dsa -in key.pem -out pubkey.pem -pubout
# Зміна паролю та алгоритму шифрування секретного RSA та DSA ключа, видалення паролю та шифрування
openssl rsa -in key.pem -out key1.pem -idea
openssl dsa -in key.pem -out key1.pem -des3
openssl rsa -in key.pem -out key1.pem
# Симетричне шифрування файлу алгоритмом des3 та кодування base64
openssl des3 -in logo.png -out logo.des3
openssl base64 -in logo.des3 -out logo.des3.base64
openssl des3 -a -in logo.png -out logo.des3.base64
# Декодування файлу із base64 та симетричне дешифрування із des3
openssl base64 -d -in logo.des3.base64 -out logo.des3
openssl des3 -d -in logo.des3 -out logo.png
openssl des3 -d -a -in logo.des3.base64 -out logo.png
# Конвертація асиметричних ключів та сертифікатів із формату PEM у DER та назад
openssl x509 -inform PEM -in key.pem -outform DER -out key.cer
openssl rsa -inform PEM -in key.pem -outform DER -out key.der
# Вирахування хешу (md5,sha1 ...)
openssl md5 -c ./logo.png
# Підпис файлу секретним ключем та перевірка ЕЦП публічним ключем, з алгоритмом хешування md5
openssl dgst -sign key.pem -out logo.sign -md5 logo.png
openssl dgst -signature logo.sign -verify pubkey.pem -md5 logo.png
# Асиметричне шифрування файлу із використанням публічного ключа та дешифрування секретним (RSA)
openssl rsautl -in logo.png -out logo.cr -inkey pubkey.pem -pubin -encrypt
openssl rsautl -in logo.cr -out logo.png -inkey key.pem -decrypt
# Створення запиту на сертифікацію (підпис центром сертифікації) на основі створюваного секретного ключа, а потім сертифікату
openssl req -new -key tmp.key -out certreq.csr
openssl x509 -req -in certreq.csr -signkey tmp.key -out cert.pem -days 365
# Створення сертифікату підписаного власним секретним ключем (самопідписаний) та разом із ключем
openssl req -x509 -new -key key.pem -out selfcert.pem -days 365
openssl req -x509 -new -keyout cakey.pem -out cacert.pem -days 365
# Перегляд інформації сертифікату у читабельному вигляді
openssl x509 -in selfcert.pem -noout -text
# Підписування клієнтського сертифікату CA сертифікатом
openssl x509 -req -in client.pem -CA CAcert.pem -CAkey CAkey.pem -CAcreateserial -days 365 -out client1.pem
2.2 Налаштування ssh
#Генерація асиметричного ключа на КЛІЄНТІ у теку "~/.ssh/"
ssh-keygen
#Передавання публічного ключа на віддалений сервер
# МЕТОД 1 — окремо передавання на сервер та окремо реєстрація-авторизація там
scp ~/.ssh/identity.pub {rserver}:~/.ssh/ #КЛІЄНТ: копіювання із клієнту на сервер {rserver}
cat ~/.ssh/identity.pub >> ~/.ssh/authorized_keys #СЕРВЕР: авторизація власного відкритого ключа на сервері
# МЕТОД 2 — однією командою на КЛІЄНТІ до серверу {rserver}
ssh-copy-id {rserver}
#Підключення до віддаленого серверу {rserver} із КЛІЄНТУ
ssh {rserver}
2.3 Створення, використання та обслуговування програмного RAID — ДЗЕРКАЛА
# Запит стану пристроїв дзеркала
cat /proc/mdstat
# Запит інформації/стану пристрою масиву або розділу
mdadm -Q /dev/sdb1
# Аналіз та отримання поточних пристроїв RAID, зазвичай для /etc/mdadm/mdadm.conf
mdadm --examine --scan
# Створення масиву, "missing" для недоступних розділів на цьому етапі
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 [/dev/sdb1|missing]
# Додання розділу до масиву
mdadm /dev/md0 --add /dev/sdb1
# Зупинка масиву
mdadm -S /dev/md0
# Встановлення ознаки "FAIL" для можливості відключення
mdadm --manage /dev/md0 --fail /dev/sdb1
# Видалення розділу із масиву, на профілактику
mdadm --manage /dev/md0 --remove /dev/sdb1
# Додання розділу до масиву, після заміни
mdadm --manage /dev/md0 --add /dev/sdb1
2.4 Адміністрування віртуальних серверів (VPS) на основі технології OpenVZ
#Створення VPS із шаблону
vzctl create 101 --ostemplate altlinux-4.0 --config vps.basic
#Видалення VPS
vzctl destroy 101
#Отримання переліку всіх VPS
vzlist -a
#Встановлення назви VPS
vzctl set 101 --name vps101 --save
#Встановлення загальних параметрів VPS: onboot, hostname, nameserver, searchdomain, userpassword
vzctl set 101 --onboot yes --save
vzctl set 101 --hostname test101.my.org --save
vzctl set 101 --nameserver 192.168.1.165 --save
vzctl set 101 --searchdomain my.org --save
vzctl set 101 --userpasswd root:test
#Конфігурація venet
vzctl set 101 --ipadd 10.10.186.1 --save
#Конфігурація veth
vzctl set 101 --netif_add eth0 --save
#Запуск та зупинка VPS
vzctl start 101
vzctl stop 101
#Виконання команди всередині VPS ("ls /root")
vzctl exec 101 ls /root
#Адміністративний вхід до VPS
vzctl enter 101
#Встановлення можливостей VPS
vzctl set 101 --capability sys_time:on --save # можливість зміни системного часу
#Перегляд обмежень VPS та їх порушень
$ vzctl exec 101 cat /proc/user_beancounters
#Встановлення обмежень VPS (kmemsize, lockedpages, privvmpages ...)
$ vzctl set 1 --dgramrcvbuf 1512000:1520000 --save
#Встановлення доступу до пристроїв (/dev)
$ vzctl set 101 --devnodes ttyS0:rw --save
$ vzctl set 101 --devices b:8:16:rw --devices b:8:17:rw --devices b:8:18:rw --save
2.5 Система контролю версій CVS
# Вказання на каталог де знаходиться репозиторій CVS
export CVSROOT=/home/Roman/progects/CVS_R
# Вказання на віддалений репозиторій
export CVSROOT=:pserver:user@serv.comp.org:/CVS_R
# Створення порожнього репозиторію
cvs -d /usr/local/cvsroot init
# Створення порожнього репозиторію на віддаленому сервері
cvs -d:pserver:user@serv.comp.org:/usr/local/cvsroot init
# Імпорт проєкту MyProg від ім'я творця MyName у CVS
cvs import MyProg MyName start
# Експорт проєкту tc для зайняття ним, у результаті чого буде створено каталог "tc" до якого буде розміщено всі файли
cvs -z 3 co tc
# Завантаження дерева проєкту за ревізією(тегом) <revise>
cvs co -r revise Prog
# Синхронізація вхідних текстів з усіма змінами, виконувати перед фіксацією своїх змін
cvs up
# Приведення вмісту дерева у відповідності до ревізії <revise>
cvs up -r revise
# Фіксація змін у backend.c та запуск редактору (ENV: CVSEDITOR) щоб ввести журнальний запис про зміни
cvs ci backend.c -r revise
# Фіксація змін у дереві під ревізією <revise> для цілого дерева
cvs ci -r revise
# Приведення вершини дерева до <revise>
cvs tag revise
# Видалення вашої копії проєкту та перевірка при цьому щодо фіксації всіх ваших змін
cvs release -d tc
# Виведення журналу змін щодо файлу file.cc
cvs log file.cc
# Виведення опису змін внесених зо файлу driver.c
cvs diff driver.c
# Внесення файлу readmi.cc під контроль CVS
cvs add readmi.cc
# Сповіщення CVS про необхідність видалення файлу readmi.cc із репозиторію з наступною командою <ci>
cvs rm readmi.cc
2.6 Система контролю версій Subversion (SVN)
# Отримання вмісту гілки репозиторію
svn list svn://rep.org/trunk
# Завантаження локальної копії репозиторію
svn checkout svn://rep.org/trunk/project
# Отримання стану модифікації локальної копії репозиторію
svn status
# Отримання змін у вигляді латки
svn diff
# Додання файлу або каталогу до репозиторію
svn add ./new.file
# Видалення файлу або каталогу із репозиторію
svn delete ./rem.file
# Прийняття локальних змін та відправлення їх на сервер
svn commit -m "Changes message"
EDITOR=vim svn ci # або із введенням журналу змін у редакторі
# Вирішення конфліктів — зняття ознаки конфлікту
svn resolve /project/innerfolder
# Копіювання ділянки репозиторію включно із локальними, а також створення нової гілки або тегу
svn copy svn://rep.org/trunk/project svn://rep.org/branch/project_user
# Об'єднання змін гілки вказаної ревізії із локальною копією іншої гілки
svn merge -c 1222 svn://rep.org/trunk/project
# Перегляд історії репозиторію
svn log
2.7 Система контролю версій GIT
# Ініціалізація поточного каталогу як новий порожній репозиторій
git init
# Додання віддаленого репозиторію для завантаження локальної копії
git remote add origin user1@gitserver:/home/repo/alpha.git
# Завантаження локальної копії репозиторію
git clone git://git.server.org/rep.git
# Додання змін, нових файлів та видалення старих
git add .
# Отримання стану репозиторію
git status
# Перегляд внесених змін
git diff --cached
# Прийняття локальних змін — перетворення тимчасового стану індексу у постійний
git commit -am "Changes message"
# Формування GIT-латки прийнятих локальних змін
git format-patch -1
# Вивантаження локальних змін
git push
# Додання тегу
git tag -sm "Tag 0.1.0 message" tag-name-0.1.0
# Вивантаження локальних тегів
git push origin --tags
# Отримання переліку всіх гілок
git branch
# Створення нової гілки
git branch experimental
# Видалення гілки
git branch -d experimental
# Перемикання на іншу гілку
git checkout experimental
# Об'єднання змін у гілці experimental із поточною гілкою локального репозиторію
git merge experimental
# Отримання змін із іншого репозиторію та об'єднання їх із поточним
git pull git://git.server.org/rep.git
# або
git fetch git://git.server.org/rep.git
git merge git://git.server.org/rep.git
# Перегляд історії репозиторію
git log
2.8 Приготування та компіляція проєктів на основі AutoTools
gettextize -f -c #генерація локалізаційних файлів
autoheader #генерація файлу
autoscan #автоматична генерація cofigure.scan та перевірка configure.in
ifnames #створення переліку ідентифікаторів використовуваних препроцесором
# Генерація/перегенерація складальної системи
aclocal -I -m4 #генерація макросу aclocal.m4
autoconf #генерація сценарію configure
autoreconf -if #перегенерація сценарію configure
automake -a -c #генерація файлу Makefile.in
configure #генерація Makefile
make #компіляція проєкту
make install #встановлення програми
3 Формати основних конфігураційних файлів та сценарії-скрипти
3.1 BASH
- ls -A /home/${USER} — команда ls із аргументами для виконання безпосередньо у цій оболонці;
- (ls -A /home/${USER}) — виконання команди ls у іншій підоболонці;
- . /usr/local/bin/my.sh — виконання команд сценарію із файлу "/usr/local/bin/my.sh";
- ls -A /home/${USER} & — виконання команди ls у фоні, тобто оболонка виклику одразу звільняється;
- ls -A /home/${USER} > /var/log/my.log — виконання команди ls із переспрямуванням її виводу до файлу "/var/log/my.log" — усі варіанти переспрямування;
- !2005 , !ls — виконання рядка 2005 та найближчого рядка що містить "ls" із історії (history);
- var=My User ${USER} — визначення змінної var у необхідне значення;
- var=(zero one two three) — визначення змінної var масивом із послідовним його заповненням чотирма елементами;
- var=([0]=zero [3]=three [2]=two [1]=one) — визначення змінної var масивом із довільним його заповненням чотирма елементами;
- var[2]=val — визначення змінної var масивом із призначенням елементу 2 значення "val".
3.1.1 Основні елементи граматики команд та визначень
- команда-визначення; команда-визначення' — розділювач (";");
- команда && команда' — умовний розділювач ("&&"), який передбачає виконання команди після за умови результату першої ВДАЛА(TRUE)-НЕПОМИЛКА;
- команда || команда — умовний розділювач ("||"), який передбачає виконання команди після за умови результату першої НЕВДАЛА(FALSE)-ПОМИЛКА;
- \ — екранування спеціального символу після даного ("\$"), часто використовується у кінці рядка для екранування символу переведення рядка чим продовжуючи рядок на наступному;
- /home/${USER}, 314 — рядок символів із завершенням на пробілі або табуляції, якщо команда або визначення не вважає початково усе рядком до його переведення; де цілі числа це просто символи до моменту потрапляння у середовище їх обчислення згідно до формату;
- "рядок символів зі вставками ${USER} та екрануванням \$";
- 'рядок-літерал символів із забороною підставлення значень змінних та екранування';
- $'рядок-літерал символів лише із\nзабороною підставлення значень змінних';
- $var, ${var} — підставлення значення змінної var, форма у дужках застосовується якщо назва змінної складна та зі спеціальними символами; де var також може бути спеціальною змінною, змінною оточення (зовнішня) та щодо якої доступно інші форми підстановки;
- `ls -1 /home/${USER}`, $(ls -1 /home/${USER}) — виконання команди у виразі із поверненням результату;
- [ -d /home/${USER}/.config ] — тестові-умовні операції із синтаксисом команди test;
- $[100/3], $((100/3)) — виконання простих цілочисельних операцій.
Приклади
ls -A /home/${USER}; echo "Very Basic\
\"long string\"" + 'just string literal';
(ls -A /home/${USER})
x=3.14; y="String"; z='Literal'
echo `ls -1 /home/${USER}` $(ls -1 ${PWD})
ls -1A /home/${USER} | grep .config &> /dev/null && echo OK
[ -d /home/${USER}/.config ] && echo OK
a=4; echo $[a=$a+4] $[a+=4] $[a=a+4]
a=4; echo $[a=$a+4, a+=4, a=a+4]
3.1.2 Службові змінні
- $# — кількість фактичних аргументів;
- $- — прапорці (однобуквені), вказані при запуску оболонки або встановлені посередництвом set;
- $? — код повернення останньої команди;
- $$, $PPID — ідентифікатор поточного процесу-сценарію (PID);
- $! — ідентифікатор останнього фонового процесу-сценарію (PID);
- $* — всі аргументи одним рядком зі змішуванням із підрядками ("під рядок");
- $@ — всі аргументи окремими рядками;
- $n, ${n} — аргумент n від 1, де 0 — назва команди.
3.1.3 Підстановки
- ${array[@]} — звернення одразу до всього масиву array;
- ${var-default}, ${var=default} — до змінної var підставляється значення default за умови якщо вона невизначена;
- ${var:-default}, ${var:=default} — до змінної var підставляється значення default за умови якщо вона невизначена або нульова;
- ${var+alt_val} — до змінної var підставляється альтернативне значення alt_val за умови якщо вона визначена;
- ${var:+alt_val} — до змінної var підставляється альтернативне значення alt_val за умови якщо вона визначена та непорожня;
- ${var?error} — сповістити про помилку error та завершити сценарій якщо змінна var невизначена;
- ${var:?error} — сповістити про помилку error та завершити сценарій якщо змінна var невизначена або нульова;
- ${#var} — повертає довжину, кількість символів, у змінній var, де передбачено спеціальні форми:
- ${#*}, ${#@} — кількість аргументів сценарію-функції;
- ${#array[*]}, ${#array[@]} — кількість елементів у масиві array;
- ${var:offset:lenght}, ${var:offset} — повертає частину-підрядок від var починаючи із offset та довжиною lenght, де передбачено спеціальні форми та значення:
- арифметичні вирази у offset та lenght;
- негативні числа у offset та lenght — відраховується від кінця;
- ${@:offset:lenght} — аргументи починаючи із offset та кількістю lenght;
- ${array[@]:offset:lenght}, ${array[*]:offset:lenght} — елементи масиву починаючи із offset та кількістю lenght;
- ${var#pattern}, ${var##pattern} — видалення зі змінної var найкоротшої та найдовшої частини від початку за шаблоном pattern;
- ${var%pattern}, ${var%%pattern} — видалення зі змінної var найкоротшої та найдовшої частини від кінця за шаблоном pattern;
- ${var/pattern/replacement}, ${var//pattern/replacement} — заміна у змінній var одної ділянки або всіх ділянок згідно шаблону шаблоном pattern на значення replacement, або видалення якщо відсутня заміна;
- ${var/#pattern/replacement} — заміна у змінній var префіксу згідно шаблону шаблоном pattern на значення replacement, або видалення якщо відсутня заміна;
- ${var/%pattern/replacement} — заміна у змінній var суфіксу згідно шаблону шаблоном pattern на значення replacement, або видалення якщо відсутня заміна;
- ${!varpref*}, ${!varpref@} — підстановка значень змінних префікс яких відповідає varpref.
3.1.4 Змінні оточення та оболонки
- PWD — поточний робочий каталог;
- UID — унікальний ідентифікатор поточного користувача;
- BASH — повний шлях виклику BASH;
- BASH_VERSION — версія даного BASH
- EDITOR — назва текстового редактору використовуваного деякими програмами;
- SHLVL — рівень вкладення запуску BASH;
- RANDOM — випадкове число [0...32767];
- SECONDS — час у секундах від запуску сценарію;
- HISTCMD — номер поточної команди в історії;
- PATH — шляхи пошуку команд;
- HOME — домашня тека поточного користувача;
- MAIL — назва файлу до якого надходить електронна пошта;
- LOGNAME — ім'я користувача використане для входу до системи;
- SHELL — ім'я оболонки інтерпретатору команд;
- TERM — тип-програма користувацького терміналу;
- LANG — локаль — мова та країна локалізації інтерфейсу;
- DISPLAY — адреса дисплею для X-додатків;
- PS1,PS2 — описують вигляд запрошення у командному рядку;
Системне
- LD_LIBRARY_PATH — користувацькі шляхи до динамічних бібліотек;
- LD_PRELOAD — перелік бібліотек попереднього завантаження, часто для перевизначення-перехоплення окремих викликів функцій при налагоджені;
- MALLOC_ARENA_MAX — максимальна кількість арен виділення пам'яті на потік для динамічного розподілювача MALLOC.
3.1.5 Оператори
- if умова — умовний оператор, у якому часто використовується команда test як безпосередньо, так і у формі "[ тест ]"
- then вираз — тіло виразу виконуваного за умова ВДАЛА(TRUE)-НЕПОМИЛКА
- else вираз2 — тіло виразу2 виконуваного за умова НЕВДАЛА(FALSE)-ПОМИЛКА
- elif умова2 — поєднання команди "else if умова2"
- then вираз3 — --//--
- else вираз4 — --//--
- elif умова3 — --//--
- ...
- fi — завершення умовного оператору
- fi — завершення умовного оператору
- fi — завершення умовного оператору
- Цикли:
- for var in перелік — оператор циклу із перебирання елементів переліку у змінній var
- while умова — виконання тіла виразу циклу допоки умова ВДАЛА(TRUE)-НЕПОМИЛКА, де часто використовується команда test як безпосередньо, так і у формі "[ тест ]"
- do вираз — тіло виразу циклу
- break — переривання циклу
- continue — продовження циклу на наступній ітерації
- break — переривання циклу
- do вираз — тіло виразу циклу
- done — завершення оператору циклу
- case зразок in — оператор обрання-перевірки виразу зразку за маскою-шаблоном, через символ "|" може бути вказано декілька масок
- маска1) вираз1 ;; — виконання вираз1 за умови відповідності зразку до маска1
- ...
- маскаN) виразN ;; — виконання виразN за умови відповідності зразку до маскаN
- esac — завершення оператору перевірки
- function func() { сценарій } — визначення функції func із тілом сценарій, яка потім викликається так само як і звичайна команда
Приклади
if ls -1A /home/${USER} | grep .config &> /dev/null
then
echo OK
else
echo FALSE
fi
if [ -d /home/${USER}/.config ]; then echo OK; fi
for var in "1 2" 3 4 "5" "6 7"
do
case $var in
[0-9]) echo "Number $var" ;;
*) echo "String $var" ;;
esac
done
function testSeq( ) {
while [ $# -ge 1 ]; do
case $1 in
[0-9]) echo "Number $1" ;;
*) echo "String $1" ;;
esac
shift
done
}
testSeq "1 2" 3 4 "5" "6 7"
3.1.6 Вбудовані та основні команди
- echo [рядок...] — запис рядків аргументів до стандартного виводу;
- true, false — повертають логічний результат ВДАЛА(TRUE)-НЕПОМИЛКА та НЕВДАЛА(FALSE)-ПОМИЛКА відповідно;
- pwd — отримання ім'я поточної теки;
- cd [тека] — зміна поточної теки;
- export назва[=слово]... — встановлення експортної (зовнішнє оточення) змінної назва у значення слово;
- shift [n] — зсув аргументів командного рядку на n пунктів, для доступу з номером більше 9 та загалом їх сканування;
- exit [n] — вихід із сценарію з кодом n;
- test [вираз], [ вираз ] — перевірка умов в умовних операціях та циклах командами виразу;
- set — встановлення та очищення опцій і позиційних параметрів;
- unset x — зняття значень та атрибутів змінних та функцій;
- getopts рядокопцій назва [аргумент...] — отримання опції з назвою із рядокопцій, тобто аргументів сценарію;
- exec [команда [аргумент ...]] [переспрямування ...] — зміна-запуск команди у поточному процесі оболонки із можливістю переспрямування потоків вводу-виводу;
- read змінна... — введення зі стандартного вводу до вказаних змінних;
- eval [аргумент...] — конструювання команди поєднанням аргументів;
- trap — встановлення обробника сигналів у сценарії;
- alias [синонім[=рядок]...] — контроль синонімів (псевдоніми або альтернативні назви команд), тобто встановлення синоніму у рядок або відображення значення синоніму за відсутності рядка;
- unalias синонім... — видалення синонімів (псевдоніми або альтернативні назви команд).
3.1.7 Опції перевірки команди test
- -e шлях — шлях вказує на елемент теки;
- -d шлях — шлях вказує на каталог;
- -f шлях — шлях вказує на звичайний файл;
- -c шлях — шлях вказує на спеціальний символьний файл;
- -b шлях — шлях вказує на спеціальний блоковий файл;
- -p шлях — шлях вказує на спеціальний файл іменованого каналу;
- -L шлях — шлях вказує на символічне посилання;
- -r шлях — шлях вказує на файл із доступом для читання;
- -w шлях — шлях вказує на файл із доступом для запису;
- -x шлях — шлях вказує на виконуваний файл;
- -s шлях — шлях вказує на ненульовий файл;
- -z рядок — рядок порожній;
- -n рядок — рядок непорожній;
- рядок — рядок ненульовий;
- рядок1 = рядок2 — рядок1 дорівнює рядок2;
- рядок1 != рядок2 — рядок1 не дорівнює рядок2;
- ціле1 -eq ціле2 — ціле1 дорівнює ціле2;
- ціле1 -ne ціле2 — ціле1 не дорівнює ціле2;
- ціле1 -gt ціле2 — ціле1 більше ціле2;
- ціле1 -lt ціле2 — ціле1 менше ціле2;
- ціле1 -ge ціле2 — ціле1 більше або дорівнює ціле2;
- ціле1 -le ціле2 — ціле1 менше або дорівнює ціле2;
- ! вираз — заперечення-інверсія результату виразу;
- вираз1 -o вираз2 — вираз1 АБО вираз2;
- вираз1 -a вираз2 — вираз1 ТА вираз2.
3.1.8 Прості цілочисельні операції у формі $[100/3], $((100/3))
- id++, id-- — постфіксне збільшення/зменшення значення змінної id на 1;
- ++id, --id — префіксне збільшення/зменшення значення змінної id на 1;
- -, + — унарні мінус та плюс;
- !, ~ — логічне та побітове заперечення;
- *, /, % — множення, ділення, отримання залишку від ділення;
- ** — зведення у ступінь;
- +, - — складання, віднімання;
- <<, >> — побітовий зсув ліворуч та праворуч;
- <=, >=, <, > — порівняння;
- ==, != — рівність та нерівність;
- & — побітове "І";
- ^ — побітове виключене "АБО";
- | — побітове "АБО";
- && — логічне "І";
- || — логічне "АБО";
- вир1?вир2:вир3 — умовне обчислення у виразі де за TRUE вир1 обчислюється та повертається результат вир2 інакше вир3;
- =, *=, /=, %=, +=, ?=+ — привласнення
- вир1,вир2 — розділювач виразів (","-кома) вир1 та вир2;
- (вираз) — виокремлення більш пріоритетного виразу та його ділянки.
3.1.9 Переспрямування виводу
- команда1 | команда2 — спрямувати стандартний вивід STDOUT(1) команда1 у стандартний ввід STDIN(0) команда2 через канал;
- команда < файл — спрямувати вміст файлу на стандартний ввід STDIN(0) команди;
- команда > файл — спрямувати стандартний вивід STDOUT(1) у файл, попередньо очистивши його;
- команда >> файл — спрямувати вивід STDOUT(1) у файл, додаючи дані до нього;
- команда n> файл — спрямувати вивід із дескриптором n у файл, попередньо очистивши його;
- команда n>> файл — спрямувати вивід із дескриптором n у файл, додаючи дані до нього;
- команда &> файл — спрямувати стандартний вивід STDOUT(1) та вивід помилок STDERR(2) у файл, попередньо очистивши його;
- команда &>> файл — спрямувати стандартний вивід STDOUT(1) та вивід помилок STDERR(2) у файл, додаючи дані до нього;
- команда <> файл — зв'язати стандартний ввід STDIN(0) та стандартний вивід STDOUT(1) команди із файлом;
- команда n1>&n2 — приєднати вивід файлу із дескриптором n1 до виводу із дескриптором n2, зазвичай приєднується вивід помилок STDERR(2) до стандартного виводу STDOUT(1) або навпаки;
- команда << мітка текст-сценарій мітка — безпосередньо у сценарії визначає текст-сценарій та спрямовує його до стандартного вводу STDIN(0), де межі тексту-сценарію визначаються міткою.
3.1.10 Спеціальні символи — екранування
- \n — новий рядок;
- \b — повернення на один символ;
- \c — друк рядка без символу нового рядка;
- \f — перехід до нової сторінки-екрану;
- \r — повернення каретки;
- \t — табуляція;
- \v — табуляція по вертикалі;
- \\ — зворотна коса риска;
- \0nnn, \xNN — вісімкове nnn та шістнадцяткове NN число.
3.1.11 Маски-шаблони
- * — довільна послідовність символів;
- ? — довільний один символ;
- [...] — символ із переліку у дужках ([A-Z]), де перший символ "!" або "^" означає виключення наступних символів.
3.1.12 Представлення чисельних значень
- 45 — десяткове число, починаючи із числа не "0" та символи [0-9] поспіль;
- 045 — вісімкове число, починаючи із "0" та символи [0-7] поспіль;
- 0x45, 0X32 — шістнадцяткове число, починаючи із "0x" або "0X" та символи [0-7a-fA-F] поспіль;
- основа#N — число N із основою.
Приклади
echo $[45], $[045], $[0x45]
echo $[2#101], $[10#101], $[16#101]
echo $[16#FF], $[16#ff], $[0xFF]
echo $[64**2], $[64#@@]
echo $[64#z], $[64#Z]
3.1.13 Корисні обороти
{cmd} || true # примусове встановлення успішного результату
echo "lang=uk_UA.UTF-8" | cut -d= -f2 # розбір за роздільником-тег '=', елемент 2
echo "123 lang=uk_UA.UTF-8" | grep -o 'lang=[^ ]*' # отримання ділянки тексту/рядка згідно до шаблону
wc -l # отримання кількості рядків
wc -w # отримання кількості слів
sed -n 4p # отримання вказаного рядка
ls -1 /etc # отримання вмісту каталогу за рядками
head -c8 /dev/random | uuencode -m - | sed -n '2s/=*$//;2p' # генерація випадкового паролю
var="/some/path/file.txt"; echo ${var##*/} OR `basename $var` # виділення ім'я файлу із розширенням
...