- Автор: Роман Савоченко
- Засновано: 2002
- Початково створено (
):
LaTeX (Вихідні, PDF), стара Wiki
Contents
- 1 Конфігураційні та інформаційні файли і каталоги
- 2 Утиліти
- 3 Процедури
- 3.1 USB-від'єднувані носії
- 3.2 Використання OpenSSL
- 3.3 Налаштування ssh
- 3.4 Формування альтернатив — можливості перемикання версій програм, на прикладі GCC
- 3.5 Створення, використання та обслуговування програмного RAID — ДЗЕРКАЛА
- 3.6 Адміністрування віртуальних серверів (VPS) на основі технології OpenVZ
- 3.7 Система контролю версій CVS
- 3.8 Система контролю версій Subversion (SVN)
- 3.9 Система контролю версій GIT
- 3.10 Приготування та компіляція проєктів на основі AutoTools
- 4 Формати основних конфігураційних файлів та сценарії-скрипти
- 4.1 BASH
- 4.1.1 Основні елементи граматики команд та визначень
- 4.1.2 Службові змінні
- 4.1.3 Підстановки
- 4.1.4 Змінні оточення та оболонки
- 4.1.5 Оператори
- 4.1.6 Вбудовані та основні команди
- 4.1.7 Опції перевірки команди test
- 4.1.8 Прості цілочисельні операції у формі $[100/3], $((100/3))
- 4.1.9 Переспрямування виводу
- 4.1.10 Спеціальні символи — екранування
- 4.1.11 Маски-шаблони
- 4.1.12 Представлення чисельних значень
- 4.1.13 Корисні обороти
- 4.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;
- inputrc — глобальна конфігурація libreadline, зокрема тут можна вимкнути консольний сигнал-дзвінок (BEEP) за допомогою "set bell-style none";
- 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.
1.2 Мережа
- /etc/ — основний каталог конфігураційних файлів:
- NetworkManager/ — конфігурація Менеджеру Мережі;
- system-connections/ — тека із конфігурацією загальних підключень;
- NetworkManager.conf — загальна конфігурація сервісу.
- dhcpcd.conf — конфігурація сервісу DHCPD, який у простих системах часто бере на себе всі мережеві підключення;
- network/ [DEBIAN] — конфігурація мережі, базовий сервіс, який зараз часто замінюється NetworkManager і dhcpd;
- interfaces — безпосередньо містить опис інтерфейсів.
- NetworkManager/ — конфігурація Менеджеру Мережі;
2 Утиліти
2.1 Основні користувацькі
- apropos — пошук сторінки посібника (man) за ключовим словом;
- awk — оперування файлами даних, вибірка і обробка тексту;
- bg, fg — оперування із багатьма завданнями у терміналі:
- Ctrl+Z — зупинка і переведення завдання на задній план;
- fg — повернення із заднього плану;
- jobs -l — перелік завдань у фоні.
- cal — календар;
- cat, zcat — видання вказаного файлу у STDOUT;
- cd — зміна теки;
- cksum — підрахунок контрольної суми і кількості байтів файлу;
- clear — очищення екрану терміналу;
- cmp — побайтове порівняння файлів;
- comm — порядкове порівняння файлів;
- cp — копіювання файлів і тек;
- cpio — копіювання файлів до архіву та із архіву;
- cut — вирізання із вхідного файлу стовпців, рядків і фракцій за роздільником;
- date — відображення поточної дати у необхідному форматі;
- dd — перетворення, створення, копіювання та інші маніпуляції із файлами у двійковому вигляді:
- dd if=/dev/zero of=/swap bs=1024 count=8208 — створення порожнього файлу "swap" розміром 8МБ
- dd if=/dev/fd0 of=boot.img bs=18k — створення штампу із дискети
- dd if=/dev/sdb of=sys.img bs=1M oflag=direct,sync status=progress — копіювання образу диску
- ddrescue — утиліта наполегливого читання носіїв, що містять помилки;
- echo — здійснення луни-повторення рядка у терміналі;
- exit — завершення процесу із вказаним кодом повернення;
- file — визначення типу файлу - містить інформацію про багато відомих файлів;
- find — пошук:
- -type <c> — тип файлів виведення c [d,f,...];
- -name <patern> — ім'я файлу пошуку за шаблоном patern;
- -regex <pattern> — ім'я файлу пошуку за регулярним виразом patern;
- -size <n>[cwbkMG] — розмір файлу пошуку менше n якщо негативне або більше n.
- gpg — утиліта шифрування і підписування електронним підписом;
- grep — пошук вказаного рядка у визначених файлах або потоках;
- grep 'str' mifile.txt
- gzexe — стиснення у виконавчий модуль із розпакуванням при запуску;
- gzip — компресія і декомпресія файлів:
- Опції:
- -<n> — здійснити компресію із рівнем <n>=(1..9);
- -d — декомпресія.
- Приклади:
- gzip < /dev/cdrom > cdrom.iso.gz — читання і компресія штампу КД;
- head, tail — показує заголовок/початок або хвіст/кінець вказаного файлу;
- hexdump — друк вхідного потоку у вказаному форматі (DEC,HEX,OCT,ASCII);
- history — відображення нумерованого переліку історії команд;
- ipcs — відображення ресурсів IPC (між-процесна комунікація);
- ipcrm — видалення ресурсів IPC;
- kill, skill, killall — надсилання сигналу процесу — за PID, за шаблоном назви;
- let, bc, expr — виконання арифметичних, логічних і інших дій над числовими значеннями у змінних оточення;
- ln — створення та обслуговування жорстких і символічних посилань;
- locate — швидкий пошук файлів у системі за іменем по mlocate базі;
- ls — перелічення файлів/тек у теці;
- md5sum — підрахунок MD5-суми;
- mkfifo — створення іменованих каналів;
- mknod — створення спеціальних файлів;
- more, less, zless — перегляд файлу або виводу посторінково, для зазіпованих із gzip;
- nice, snice, renice — запуск команди з відмінним значенням поступливості у межах [-20...19], встановлення вказаним програмам, встановлення поточній;
- nohup — запуск команди із відв'язуванням від поточного терміналу;
- pidof — відображення PID виконуваної програми;
- pr — форматування текстового файлу до друку;
- printenv, env — відображення змінних оточення, відображення і встановлення;
- ps, pstree — відображення виконуваних процесів системи — списком, деревом;
- rm — видалення файлів і тек;
- scp — безпечне копіювання файлів і тек через OpenSSH;
- scp file.txt user1@remote_server:/ — копіювання файлу на віддалену систему.
- screen — консольний екранний менеджер, що дозволяє відкривати команди у новому вікні того-ж терміналу із можливістю:
- Ctrl+A — перемикання;
- Ctrl+A,D — тимчасове відключення;
- screen -R — відновлення останнього сеансу за можливості або створення нового;
- screen -r <sess> — відновлення сеансу sess;
- screen -x — підключення до невід'єднаного сеансу (Багатоекранний Режим).
- sed — потоковий редактор;
- sleep — приспання поточного процесу на визначену кількість секунд;
- sort — сортування даних у файлі/потоці;
- split/csplit — розбиття/складання великих файлів на/з шматки;
- stat — інформація про файл/теку на ФС;
- strings — виведення символьних повідомлень з не текстового файлу;
- tar — утиліта оперування із архівами і пакетами відомими як TAR-пакети, які можуть стискатися різними компресорами;
- -v — багатослівність, відображати перелік оброблених файлів;
- -с — створити новий архів;
- -x — розпакувати архів;
- -f <file> — упакувати до вказаного файлу file;
- -z — здійснити стискання отриманого пакету за допомогою gzip, розширення "*.tar.gz";
- -j — здійснити стискання отриманого пакету за допомогою bzip2;
- -J — здійснити стискання отриманого пакету за допомогою xz, розширення "*.tar.xz";
- -I<compr> — здійснити стискання отриманого пакету за допомогою програми стискання compr;
- -t — перегляд вмісту архіву.
- test — перевірка значень, файлів та інших умов, деталі у розділі BASH;
- tee — читання зі стандартного входу та запис до стандартного виходу і у файл;
- touch — оновлення/встановлення позначки часу файлу або створення порожнього за відсутності;
- time — визначення часу і ресурсів виконання команди;
- tr — трансляція символів, перетворення/заміна одних іншими;
- tree — відображення дерева каталогу, з відступами і кольором;
- vi, vim — потужний текстовий редактор з оригінальним керуванням;
- vimdiff — перегляд порівнюваних файлів у vim;
- wc — підрахунок у файлі кількості рядків, символів, слів і інше;
- which, whereis — відображення повного шляху до програми, що шукається;
- yt-dlp https://stream.url — завантаження відео-потоку зі стріменгових ресурсів.
- -o "%(id)s.%(ext)s" — шаблон формування назви файлу для дуже довгих.
2.2 Базове адміністрування
- adduser, useradd — додання користувача до системи;
- apt, apt-get [DEBIAN|...] — утиліта менеджеру APT із керування DEB-пакетами (є варіанти із RPM) за репозиторіями:
- install [<packet>...] — встановлення пакету(ів) з віддаленого репозиторію(їв);
- -f — перевірка-оновлення залежностей щодо останнього встановлення.
- reinstall [<packet>...] — перевстановлення пакету(ів) з віддаленого репозиторію(їв);
- remove [<packet>...] — видалення пакету(ів);
- autoremove — видалення автоматично усіх пакунки, що не використовуються;
- update — оновлення переліку пакетів за актуальними репозиторіями;
- upgrade — оновлення системи шляхом встановлення/оновлення пакетів;
- build-dep [<packet>...] — встановлення пакету(ів), що необхідні для складання вказаних пакетів packet;
- install [<packet>...] — встановлення пакету(ів) з віддаленого репозиторію(їв);
- apt-get [DEBIAN|...] — попередня утиліта менеджеру APT із керування DEB-пакетами за репозиторіями, специфічні команди:
- purge [<packet>...] — видалення пакунків разом із їхніми конфігураційними файлами;
- download <packet> — завантаження двійкового пакунку у поточну директорію;
- source <packet> — завантаження вихідних текстів пакунку у поточну директорію із розпакуванням;
- changelog <packet> — отримання і відображення журналу змін визначеного пакунку;
- dist-upgrade — оновлення всієї системи;
- clean — видалення завантажених архівів-пакунків;
- autoclean — видалення старих завантажених архівів-пакунків;
- check — перевірка наявності порушених залежностей.
- apt-cache [DEBIAN|...] — утиліта менеджеру APT із запиту кешу актуальних репозиторіїв пакетів:
- search <pattern> — пошук пакунків із назвою, що задовольняє регулярному виразу;
- depends <packet> — показати інформацію про залежності пакунку;
- rdepends <packet> — показати інформацію про зворотні залежності пакунку;
- show <packet> — показати інформацію про пакунок.
- arch — архітектура поточної системи, дивіться setarch для встановлення архітектури — запуск програми із вказаною;
- at, batch — відкладене виконання задач і пакетна обробка;
- echo 'wget url' | at 01:00 — запуск завантаження о 01:00.
- basename — виокремлення імені файлу/теки з повного шляху;
- badblock — перевірка твердотілих носіїв (HDD, FDD) на погані блоки;
- chfn — зміна ім'я користувача і інформації про нього;
- chgrp — зміна групи користувачів файлу або каталогу;
- chkconfig [INIT] — конфігурація рівнів завантаження сервісів;
- chmod — зміна режиму доступу до файлу;
- chown — зміна власника і групи власників файлу або каталогу;
- chroot, schroot — зміна кореня поточного сеансу або виконання команди від іншого кореня, також у безпечному варіанті від звичайного користувача;
- chvt — перемикання на вказаний термінал;
- chsh — зміна типу командного інтерпретатора;
- convmv — перекодування назв файлів/тек з одного кодування на інше, може знадобитися для перекодування файлів на ФС ext2, ext3, reisrfs;
- cron — планування періодичного запуску програм;
- crontab — формування користувацької конфігурації cron;
- df — інформація з файлових системах системи;
- dirname — виокремлення назви теки із повного шляху;
- dpkg [DEBIAN] — утиліта оперування DEB-пакетами:
- -i <packet> — встановлення пакету;
- -r <packet> — видалення пакету;
- --purge <packet> — цілковите видалення пакету разом із конфігурацією.
- dpkg-query [DEBIAN] — утиліта запиту до бази DEB-пакетів:
- -s [<packet>...] — отримання статусу пакету(ів) або усіх у базі;
- -L <packet>... — отримання переліку файлів у пакеті(ах);
- -l [<pattern>...] — отримання переліку пакетів у базі за шаблоном;
- --show [<packet>...] — отримання інформації (зазвичай версії) пакету(ів) або усіх у базі;
- -S <pattern>... — пошук пакету, якому належить файл за шаблоном.
- du — отримання інформації про розмір вмісту файлу або теки;
- dumpkeys — дамп карти клавіатури;
- rpm [REDHAT] — утиліта оперування RPM-пакетами:
- -i <packet> — встановлення пакету;
- -e <packet> — видалення пакету;
- -U <packet> — оновлення пакету;
- -V <packet> — перевірка коректності встановлення/поточного стану вказаного пакету;
- -a — виконання вказаної операції для усіх пакетів;
- -q — запит даних про пакет:
- f — пошук пакету, якому належить вказаний файл;
- i — виведення інформації про пакет;
- l — перелік файлів, що належать пакету;
- s — стан файлів пакету;
- d — перелік файлів документації пакету;
- c — перелік конфігураційних файлів пакету;
- p — виконання операції над ще невстановленим пакетом.
2.3 Файлова система
- cdrecord — запис CD дисків;
- cdrecord -v speed=2 dev=0,6,0 -data my.img
- cfdisk — конфігурація розділів диску;
- edquota — редагування квот файлової системи;
- fdformat — форматування дискети;
- fdisk — операції із розділами диску;
- fsck — перевірка файлової системи визначеного аргументом типу;
- fsck.<fs> — перевірка файлової системи типу fs;
- fsck.vfat /dev/fd0 — перевірка файлової системи FAT12 на гнучкому диску.
- gnome-disks — графічна програма зі стільниці Gnome для оперування дисками, включно зі зміною розділів, отриманням SMART і перевіркою швидкості;
2.4 XOrg — графічна підсистема
2.5 Залізо
2.6 Мультимедіа
2.7 Мережа
2.8 Пошта
2.9 Ядро Linux
2.10 Розробка
- aclocal [AUTOTOOLS] — генерація макросу "aclocal.m4" із файлу "configure.in";
- ar — створення/редагування архівів статичних бібліотек з об'єктних модулів;
- autoconf [AUTOTOOLS] — генерація скрипту configure із "configure.in";
- automake [AUTOTOOLS] — генерація "Makefile.in" із "Makefile.am";
- cpp [C] — препроцесор мови C, зазвичай викликається із gcc;
- ctags — генерація тег-файлу для полегшення навігації по коду, використовується редактором VIM;
- cxref [C] — аналіз групи С-файлів і побудова для кожного файлу таблиці перехресних посилань на автоматичні, статичні і глобальні імена;
- dialog — створення діалогів у консолі із скрипту (на основі ncurses);
- diff — пошук змін у порівнюваних текстових файлах;
- diff -uNr dir/old dir/new > my.patch — створення латки;
- dpkg-buildpackage [DEBIAN] — утиліта побудови DEB-пакетів:
- -b — складання лише бінарних пакунків без джерельних;
- -j[<number>|auto] — кількість завдань-потоків складання, або автоматично;
- -a<arch> — хостова архітектура складання;
- -d — не перевіряти залежності складання, часто потрібно при зміні хостової архітектури.
- gcc — GNU колекція компіляторів мови С, С++, ASM, Fortran, Java, Obj, ... із підтримкою багатьох платформ;
- -x<lang> — визначення мови вхідних файлів, якщо із розширення це не очевидно;
- -c — компіляція та складання перелічених вхідних файлів;
- -S — компіляція перелічених вхідних файлів у файли Асемблеру (*.s);
- -E — здійснення первинної обробки вихідних файлів;
- -o <rez.o> — складання об'єктних файлів до одного rez.o;
- -L — визначення шляху пошуку бібліотек;
- -l — визначення переліку бібліотек (без "lib*" і "*.a");
- -w — заборона відображення попереджень компілятору;
- -Wall — генерація всіх можливих повідомлень попередження;
- -pedantic — "педантична" перевірка вихідного тексту на відповідність стандарту ANSI;
- -Wl — різноманітні опції лінкувальника:
- ,rpath — визначення додаткового шляху пошуку динамічних бібліотек (-Wl,rpath,/usr/newpath);
- ,soname — назва поділюваної бібліотеки (-Wl,-soname,libfuncs.so.1).
- -fPIC — створення об'єктних файлів для динамічних бібліотек (PIC — Position Independent Code);
- -shared — створення динамічної бібліотеки (разом із -o);
- -nostdlib — заборона використання стандартних системних виконуваних файлів або динамічних бібліотек;
- -static — примушення до використання статичних бібліотек замість динамічних;
- -rdynamic — увімкнення можливості використання символьної інформації для вирішення посилань у динамічних завантажувальних бібліотеках;
- -pipe — функціювання компілятору через канали;
- -O<n> — встановлення рівня оптимізації [0..3];
- -g — додавання налагоджувальної інформації;
- -p, -pg — додавання до модуля коду відстеження вузьких місць, після виконання генерується файл "mon.out", який можна обробляти утилітою gprof;
- -masm — використовувати стандарт асемблеру "att" або "intel".
- rpm [REDHAT] — утиліта оперування RPM-пакетами:
- -b <file>.spec — часткова або повна обробка *.spec файлу для складання пакету:
- a — створення бінарного та вихідного rpm-пакету;
- b — створення бінарного rpm-пакету;
- c — виконання етапів: %pre і %build з розпакуванням і компіляцією;
- i — виконання етапів: %pre, %build і %install;
- l — перевірка переліку файлів у %files;
- p — виконання етапу %pre (розпакування архіву);
- --rebuild <file>.src.rpm — компілювання і створення бінарного RPM із вихідного;
- --recompile <file>.src.rpm — компілювання із вихідного RPM;
- --test — перевірка файлу специфікацій;
- --clean — видалення дерева каталогів BUILD.
3 Процедури
3.1 USB-від'єднувані носії
Відмінність стаціонарних носіїв від від'єднуваних, звісно окрім можливості знімати на ходу, є такий параметр, як апаратний розмір блоку, тобто ділянка диску, що атомарно читається/записується. Для жорстких дисків розмір блоку зазвичай складає 512 байт, а для флеш-дисків 4096, як і для деяких великих жорстких дисків. Відповідно і більшість Файлових Систем (ФС) форматуються історично у розмір логічного блоку 512 байт. І якщо для жорстких дисків це природно, тобто не відбувається падіння швидкості ані читання, ані запису, то для флеш-дисків це буває дуже помітно, особливо у режимі синхронного запису.
Синхронний запис передбачає запис ділянки ФС на носій одразу, оминаючи дисковий кеш. І якщо для стаціонарних носіїв такий режим зайвий, оскільки немає потреби контролювати завершення запису, то для від'єднуваних цей режим є основним, бо дозволяє контролювати реальний стан запису і оцінювати час його завершення. Синхронний режим у середовищі Linux як правило вимкнений (у Linux Автоматизації увімкнено), створюючи невизначені ситуації при записі великих файлів на від'єднувані носії, а саме — створюється ілюзія швидкого запису через запис у кеш, а при демонтуванні-від'єднані носія відбувається втрата зв'язку за вичерпанням часу очікування із сервісом контролю підключення, який саме скидає кеш на носій, після чого дізнатися про можливість безпечного вилучення носія можна лише за дисковою активністю, інформація про що на екрані як правило відсутня. Тому увімкнення синхронного режиму запису є доцільним та із оптимізацією ФС, оскільки за типового розміру логічного блоку у 512 байт отримаємо падіння швидкості запису в чотири рази, а реально більше через синхронний-же запис службової інформації ФС, що наведено у наступній порівняльній таблиці:
Операція | Читання, MB/s | Запис, MB/s |
---|---|---|
Прямо блоком 512 | 78.3 | 11.9 |
Прямо блоком 4096 | 78.1 | 49.3 |
ФС FAT32 із сектором 512 | 81.8 | 6.1 |
ФС FAT32 із сектором 4096 | 81.8 | 9.2 |
ФС exFAT32 | 81.8 | 14 |
ФС Ext4 із блоком 4096 | 78.8 | 12 |
ФС UDF із блоком 512 | 78.8 | 0.3 |
3.1.1 Форматування USB-Флеш у FAT32 із розміром сектору 4096
mkfs.vfat -F32 -S4096 -f1 /dev/sdX1
3.1.2 Форматування USB-Флеш у exFAT
mkfs.exfat /dev/sdX1
3.1.3 Форматування USB-Флеш у EXT4 із загальним доступом
Хоча ФС EXT4 і не призначалася для використання з від'єднуваними носіями та незручна тут через наявність прав, але часто вона все-ж зручніша та й права можна розширити; оскільки інші варіанти є обмеженими, як то VFAT, або все ще закриті, як то exFAT, або повільні через малий розмір сектору (512), як то UDF. Для створення на USB-Флеш ФС EXT4, що задовольнила-б зазначеним умовам необхідно у терміналі виконати:
mkfs.ext4 -b 4096 /dev/sdX1
tune2fs -m0 -o acl /dev/sdX1
mount /dev/sdX1 /mnt
chown {username}: /mnt
chmod 777 /mnt
setfacl -m d:u::rwx,d:g::rwx,d:o::rwx /mnt
umount /mnt
3.1.4 Форматування USB-Флеш в UDF
Unified Disk Format первинно розроблено для оптичних дисків із функцією довільного запису, вона підтримує великі файли і яку пізніше адаптовано для жорстких дисків. Але ця ФС записується на диск цілком, не містить інструментарію виправлення і втрата даних на ній є типовим явищем. Окрім того, вона коректно визначається лише для розміру блоку у 512 байт, відтак ДУЖЕ повільно пишеться.
dd if=/dev/zero of=/dev/sdX bs=1M count=1
mkudffs -b 512 --media-type=hd /dev/sdX
3.2 Використання 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
3.3 Налаштування 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}
3.4 Формування альтернатив — можливості перемикання версій програм, на прикладі GCC
# Встановлення різних версій GCC
apt-get install gcc-4.12 g++-4.12 gcc-4.11 g++-4.11
# Видалення наявних альтернатив
update-alternatives --remove-all gcc
update-alternatives --remove-all g++
# Додання варіантів альтернатив, із версією у якості пріоритету
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 11
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 11
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12
# Оновлення/вибір актуальної версії
update-alternatives --config gcc
update-alternatives --config g++
3.5 Створення, використання та обслуговування програмного 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
3.6 Адміністрування віртуальних серверів (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
3.7 Система контролю версій 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
3.8 Система контролю версій 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
3.9 Система контролю версій 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
3.10 Приготування та компіляція проєктів на основі 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 #встановлення програми
4 Формати основних конфігураційних файлів та сценарії-скрипти
4.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".
4.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]
4.1.2 Службові змінні
- $# — кількість фактичних аргументів;
- $- — прапорці (однобуквені), вказані при запуску оболонки або встановлені посередництвом set;
- $? — код повернення останньої команди;
- $$, $PPID — ідентифікатор поточного процесу-сценарію (PID);
- $! — ідентифікатор останнього фонового процесу-сценарію (PID);
- $* — всі аргументи одним рядком зі змішуванням із підрядками ("під рядок");
- $@ — всі аргументи окремими рядками;
- $n, ${n} — аргумент n від 1, де 0 — назва команди.
4.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.
4.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.
4.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"
4.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 синонім... — видалення синонімів (псевдоніми або альтернативні назви команд).
4.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.
4.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;
- (вираз) — виокремлення більш пріоритетного виразу та його ділянки.
4.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), де межі тексту-сценарію визначаються міткою.
4.1.10 Спеціальні символи — екранування
- \n — новий рядок;
- \b — повернення на один символ;
- \c — друк рядка без символу нового рядка;
- \f — перехід до нової сторінки-екрану;
- \r — повернення каретки;
- \t — табуляція;
- \v — табуляція по вертикалі;
- \\ — зворотна коса риска;
- \0nnn, \xNN — вісімкове nnn та шістнадцяткове NN число.
4.1.11 Маски-шаблони
- * — довільна послідовність символів;
- ? — довільний один символ;
- [...] — символ із переліку у дужках ([A-Z]), де перший символ "!" або "^" означає виключення наступних символів.
4.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]
4.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` # виділення ім'я файлу із розширенням
sed $'s/\r$//' src.txt > dest.txt # переривання рядка DOS у Unix
sed $'s/$/\r/' src.txt > dest.txt # переривання рядка Unix у DOS