commit
						448332d846
					
				
							
								
								
									
										73
									
								
								README-uk.md
								
								
								
								
							
							
						
						
									
										73
									
								
								README-uk.md
								
								
								
								
							|  | @ -15,47 +15,58 @@ | |||
| - [Складно але корисно](#Складно-але-корисно) | ||||
| - [Тільки для OS X](#Тільки-для-os-x) | ||||
| - [Інші джерела](#Інші-джерела) | ||||
| - [Декламація](#Декламація) | ||||
| - [Відмова від відповідальності](#Відмова-від-відповідальності) | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| Використанню командного рядка часто не приділяють достатньої уваги. Про термінал говорять, як про щось містичне. Насправді, ці навики явно (і не явно) збільшують вашу продуктивність у роботі. Даний документ є підбіркою заміток і порад, які я вважаю корисними, при роботі з командним рядком в Linux. Деякі з них - прості та очевидні, але деякі - досить складні та призначені для вирішення конкретних завдань. Це невелика публікація, але якщо ви вже все знаєте, що тут написано, і можете згадати як це все використовувати - ви знаєте багато! | ||||
| Використанню командного рядка часто не приділяють достатньої уваги. Про термінал говорять, як про щось містичне. Насправді, ці навики явно (і не явно) збільшують вашу продуктивність у роботі. Даний документ є підбіркою на наш погляд корисних при роботі з командним рядком в Linux заміток і порад. Деякі з них - прості та очевидні, але інші - або призначені для вирішення конкретних завдань, або досить складні чи широко невідомі. Це невелика публікація, але якщо ви вже все знаєте, що тут написано, і можете згадати як це все використовувати - ви знаєте багато! | ||||
| 
 | ||||
| Ця робота є результатом [багатьох авторів і перекладачів](AUTHORS.md). | ||||
| Дещо з цього [спочатку](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [появилось](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), але потім переїхала на Github, де знаходяться дуже талановиті люди які зробили багато удосконалень. | ||||
| [**Будь-ласка, зробіть свій внесок**](/CONTRIBUTING.md) якщо Ви замітили помилку або можете щось покращити! | ||||
| Це -- результат роботи [багатьох авторів і перекладачів](AUTHORS.md). | ||||
| Дещо з цього [спочатку](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [з'явилось](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), але потім переїхало на Github, де багато людей талановитіших за початкового автора, внесли багато удосконалень. | ||||
| [**Будь-ласка, зробіть свій внесок**](/CONTRIBUTING.md) якщо ви знайшли помилку або можете щось покращити! | ||||
| 
 | ||||
| 
 | ||||
| ## Опис | ||||
| 
 | ||||
| Основне: | ||||
| Охоплення: | ||||
| 
 | ||||
| - Дана публікація призначена як для недосвідчених, так і для досвідчених користувачів. Цілі: *об'ємість* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найчастіших задач) та *стислість* (не варто вдаватись у неочевидні речі, про які можна прочитати в інших місцях). | ||||
| - Цей документ написаний для користувачів Linux, із єдиним винятком - розділ "[Тільки для OS X](#Тільки-для-os-x)". Все інше підходить для всіх UNIX/MacOS систем (і навіть для Cygwin). | ||||
| - Сфокусована на інтерактивному Bash, але багато речей також можуть бути використані в інших Шелах; і в застосовані до Bash-скриптів. | ||||
| - Ця інструкція включає в себе стандартні Unix команди і ті, для яких потрібно встановлювати сторонні пакети. Вони настільки корисні, що варті того, щоб їх встановили. | ||||
| - Дана публікація призначена як для початківців, так і для досвідчених користувачів. Цілі: *наповнення* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найпоширеніших ситуацій) та *стислість* (не варто вдаватись у несуттєві деталі, про які можна прочитати деінде). | ||||
| - Цей документ написаний для користувачів Linux, за винятком розділів "[Тільки для OS X](#Тільки-для-os-x)" та "[Тільки для Windows(#Тільки-для-Windows)]". Все інше підходить для всіх UNIX чи OS X систем (і навіть для Cygwin). | ||||
| - Сфокусована на інтерактивному Bash, але багато порад також можуть застосовуватися в інших командних оболонках чи загалом до Bash-скриптів. | ||||
| - Ця інструкція включає в себе як стандартні Unix команди, так і ті, для використання яких потрібно встановлювати додаткові пакети, якщо користь  від  застосування команди виправдовує установку пакету. | ||||
| 
 | ||||
| Нотатки: | ||||
| 
 | ||||
| - Щоб все вміщалось на одній сторінці, вся інформація вставлена прямо тут. У  вас вистачить  вмінь, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` та `brew` (залежно від вашої системи управління пакетами) для установки нових програм. | ||||
| - Щоб все вміщалось на одній сторінці, вся інформація вставлена прямо тут. У  вас вистачить  вмінь, щоб самостійно вивчити питання більш детально з інших джерел. Використовуйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` та `brew` (залежно від вашої системи управління пакетами) для установки нових програм. | ||||
| - На [Explainshell](http://explainshell.com/) можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(*|*)) і т.д. | ||||
| 
 | ||||
| 
 | ||||
| ## Основи | ||||
| 
 | ||||
| - Вивчіть основи Bash. Просто візьміть і наберіть у командному рядку термінала `man bash` і хоча б перегляньте; він досить просто читається і він не дуже великий. Інші шелли теж можуть бути хороші, але Bash - потужна програма, і Bash завжди під рукою (використання *виключно* zsh, fish і т.д., які напевно круто виглядають на вашому лептопі і ні в чому вас не обмежують, наприклад ви не зможете використовувати ці можливості Шеллу на вже існуючому сервері). | ||||
| - Вивчіть як використовувати хоча б один консольний редактор тексту. Найкраще Vim (`vi`), адже у нього немає конкурентів, коли вам потрібно швидко щось правити (навіть якщо ви постійно використовуєте Emacs чи якийсь важкий IDE або модний хіпстерський редактор). | ||||
| - Знайте, як читати документацію через `man` (`man man`; `man` у кутах документа в дужках додає номер, наприклад 1 - для звичайних команд, 5 - для файлів, 8 - для адміністративних команд). Шукайте інформацію через `apropos`, і пам'ятайте, що деякі команди - не виконувані(executables), а вбудовані команди Bash, і допомогу по них можна отримати через команду `help` і `help -d`. | ||||
| - Можна перенаправляти введення та виведення через `>` і `<` і пайпи `|`. Пам'ятайте, що `>` - переписує вихідний файл, а `>>` додає до нього. Дізнайтеся побільше про stdout і stderr. | ||||
| - Дізнайтеся побільше про `*` (а також `?` і `[`...`]`), кавички, а також різницю між подвійними `"` і одинарними `'` кавичками. | ||||
| - Знайте як працювати із процесами в Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, і т.д. | ||||
| - Знайте `ssh` та основи беспарольної аутентифікації через `ssh-agent`, `ssh-add`, і т.д. | ||||
| - Основи роботи з файлами: `ls` і `ls -l` (зокрема, дізнайтеся, що значить кожен стовпець в `ls -l`), `less`, `head`,` tail` і `tail -f` (або навіть краще - `less + F`), `ln` і `ln -s` (дізнайтеся різницю між символьними посиланнями і жорсткими посиланнями, і чому жорсткі посилання краще), `chown`, `chmod`, `du` (для отримання швидкої інформації по використанню диска: `du -hk *`). Для менеджменту файлової системи, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. | ||||
| - Основи роботи з мережею: `ip` або `ifconfig`, `dig`. | ||||
| - Вивчіть і використовуйте систему управління версіями, наприклад таку як `git`. | ||||
| - Добре знайте регулярні вирази і різні опції для `grep`/`egrep`. Такі опції як `-i`, `-o`, `-A`, та `-B` варто знати. | ||||
| - Навчіться використовувати системами управління пакетами `apt-get`, `yum`, `dnf` та `pacman` (залежно від дистрибутива). Знайте як шукати і встановлювати пакети і обов'язково майте встановленим `pip` для установки командних утиліт, написаних на Python (деякі з тих команд, що ви знайдете нижче, найлегше встановити через `pip`). | ||||
| - Вивчіть основи Bash. Просто візьміть і наберіть у командному рядку термінала `man bash` і хоча б перегляньте; він досить просто читається і він не дуже великий. Інші шелли теж можуть бути хороші, але Bash - потужна програма, і Bash завжди під рукою (вивчення *виключно* zsh, fish і т.д., хоч і привабливо  на вашому особистому комп'ютері, насправді обмежує в багатьох випадках, наприклад при використанні існуючих серверів). | ||||
| 
 | ||||
| - Вивчіть використання хоча б одного консольного редактора тексту. Найкраще Vim (`vi`), адже у нього немає конкурентів, коли вам потрібно швидко щось правити (навіть якщо ви постійно використовуєте Emacs чи якийсь важкий IDE або модний хіпстерський редактор). | ||||
| 
 | ||||
| - Знайте, як читати документацію командою `man` (для допитливих: `man man` пояснює номери розділів документації, наприклад 1 - для звичайних команд, 5 - для файлів, 8 - для адміністративних команд). Шукайте інформацію через `apropos`, і пам'ятайте, що деякі команди - не виконувані (executables), а внутрішні команди Bash, і допомогу по них можна отримати через команду `help` і `help -d`. | ||||
| 
 | ||||
| - Можна перенаправляти ввід та вивід користуючися `>`, `<` та каналами `|`. Пам'ятайте, що `>` - переписує вихідний файл, а `>>` додає до нього. Дізнайтеся побільше про stdout і stderr. | ||||
| 
 | ||||
| - Дізнайтеся побільше про розширення шаблонів `*` (а також `?` і `[`...`]`), про вживанняя лапок та про відмінності між подвійними `"` та одинарними `'` лапками. | ||||
| 
 | ||||
| - Ознайомтеся, як працювати із процесами в Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, і т.д. | ||||
| 
 | ||||
| - Знайте `ssh` та основи безпарольної аутентифікації через `ssh-agent`, `ssh-add`, і т.д. | ||||
| 
 | ||||
| - Основи роботи з файлами: `ls` і `ls -l` (зокрема, дізнайтеся, що значить кожен стовпець в `ls -l`), `less`, `head`,` tail` і `tail -f` (або навіть краще - `less +F`), `ln` і `ln -s` (дізнайтеся про відмінності та переваги символьних і жорстких посилань), `chown`, `chmod`, `du` (для отримання швидкої інформації по використанню диска: `du -hk *`). Для керування файловою системою: `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. Дізнайтеся, що таке inode (`ls -i` чи `df -i`). | ||||
| 
 | ||||
| - Основи роботи з мережею: `ip`, `ifconfig` або `dig`. | ||||
| 
 | ||||
| - Вивчіть і використовуйте систему управління версіями, наприклад таку, як `git`. | ||||
| 
 | ||||
| - Добре знайте регулярні вирази і різні опції для `grep`/`egrep`. Такі опції як `-i`, `-o`, `-v`, `-A`, `-B` та `-C` варто знати. | ||||
| 
 | ||||
| - Навчіться використовувати системи управління пакетами та встановлювати пакети `apt-get`, `yum`, `dnf` та `pacman` (залежно від дистрибутива). Обов'язково майте встановленим `pip` для установки командних утиліт, написаних на Python (деякі з тих команд, що ви знайдете нижче, найлегше встановити через `pip`). | ||||
| 
 | ||||
| 
 | ||||
| ## Щоденне використання | ||||
|  | @ -64,8 +75,8 @@ | |||
| - Використовуйте **ctrl-w** в Bash для того, щоб видалити останнє слово в команді; **ctrl-u** для того, щоб видалити команду повністю. Використовуйте **alt-b** і **alt-f** для того, щоб переміщатись між словами у команді, **ctrl-k** для того, щоб перейти в кінець рядка, **ctrl-l** для того, щоб очистити екран. Гляньте на `man readline` щоб дізнатися про всі комбінації клавіш Bash. Їх багато! Наприклад, **alt-.**  переміщається між попередніми аргументам команди, а **alt-*** максимально розширює аргументи. | ||||
| - Якщо вам подобаються клавішні комбінації vim, виконайте `set -o vi` (`set -o emacs` що б повернути налаштування). | ||||
| - Для редагування довгих команд після налаштування вашого консольного редактора (наприклад `export EDITOR=vim`), **ctrl-x** **ctrl-e** відкриє поточну команду в редакторі для багаторядкового редагування команди. Або у vi стилі, **escape-v**. | ||||
| - Для того, щоб переглянути історію, введіть `history`. Також існує безліч абревіатур, наприклад `! $` - Останній аргумент, `!!` - остання команда, хоча ці абревіатури часто заміняються шорткати **ctrl-r** та **alt-.**. | ||||
| - Перейти в домашню директорию можна за допомогою `cd`. Щоб вказати шлях до файлів із домашньої директорії можна скористатися префіксом `~` (наприклад: `~/.bashrc`). У `sh` скриптах для звернення до домашньої директорії можна використовувати змінну `$HOME`. | ||||
| - Для того, щоб переглянути історію, введіть `history`. Також існує безліч абревіатур, наприклад `! $` - Останній аргумент, `!!` - остання команда, хоча ці абревіатури часто заміняються комбінаціями **ctrl-r** та **alt-.**. | ||||
| - Перейти в домашню директорію можна за допомогою `cd`. Щоб вказати шлях до файлів із домашньої директорії можна скористатися префіксом `~` (наприклад: `~/.bashrc`). У `sh` скриптах для звернення до домашньої директорії можна використовувати змінну `$HOME`. | ||||
| - Для того, щоб стрибнути до останньої робочої директорії, використовуйте `cd -` | ||||
| - Якщо ви написали команду наполовину і раптом передумали, натисніть **alt-#** для того, щоб додати `#` на початок команди, та відправте команду як коментар. Потім ви зможете повернутися до неї через історію команд. | ||||
| - Використовуйти `xargs` (або `parallel`). Це дуже корисно. Зверніть увагу, що ви можете контролювати кількість команд на кожен рядок (`-L`) також паралельність (`-P`). Якщо ви не впевнені, що робите щось правильно, почніть з `xargs echo`. Також `-I{}` - корисно. Приклади: | ||||
|  | @ -84,7 +95,7 @@ | |||
| - Збережіть свої синоніми (aliases), налаштування і фунції які ви часто використовуєте у `~/.bashrc`, більш детально [тут](http://superuser.com/a/183980/7106). Це зробить їх доступними в усіх ваших сесіях shell. | ||||
| - Синхронізуйте ваші конфігураційні файли (наприклад `.bashrc` та `.bash_profile`) між різними комп'ютерами за допомогою Git. | ||||
| - Вставте настройки змінних середовища і команди, які повинні бути виконані при вході у систему в файл `~/.bash_profile`. Окремі налаштування будуть потрібні для оболонок, які запускаються із під графічного інтерфейсу та з під `cron` задач. | ||||
| - Необхідно розуміти, що потрібна обережність коли змінні та імена файлів включають пробіли. Окружіть ваші Bash змінні в подвійні кавички: `"$FOO"`. Використовуйте `-0` або `-print0` опції щоб дозволити розмежувати імена файлів за допомогою нульових(null) символів. Наприклад: `locate -0 pattern | xargs -0 ls -al` або `find / -print0 -type d | xargs -0 ls -al`. Щоб перебрати імена файлів які містять пробільні символи для циклу встановіть ваш IFS(API файлової системи) використовувати тільки '\n' для цього використовуйте - `IFS=$'\n'`. | ||||
| - Необхідно розуміти, що потрібна обережність коли змінні та імена файлів включають пробіли. Окружіть ваші Bash змінні в подвійні лапки: `"$FOO"`. Використовуйте `-0` або `-print0` опції щоб дозволити розмежувати імена файлів за допомогою нульових(null) символів. Наприклад: `locate -0 pattern | xargs -0 ls -al` або `find / -print0 -type d | xargs -0 ls -al`. Щоб перебрати імена файлів які містять пробільні символи для циклу встановіть ваш IFS(API файлової системи) використовувати тільки '\n' для цього використовуйте - `IFS=$'\n'`. | ||||
| - У Bash скриптах використовуйте `set -x` (або `set -v`) щоб дебажити вивід. Використовуйте строгий(strict) режим скрізь, де це можливо. Використовуйте `set -e` для того, щоб припиняти виконання при помилках (не нульовий вихідний код). Використовуйте `set -u` що б визначити невстановленні змінні. Використовуйте `set -o pipefail` щоб при помилках невикористовувати пайпи(вертикальна риска). Для більш складних скриптів також використовуйте `trap` на EXIT or ERR. | ||||
| Корисною буде звичка почати використовувати настипний скрипт, який допоможе виявити і перервати на загальних помилках і вивести повідомлення: | ||||
| ```bash | ||||
|  | @ -296,11 +307,11 @@ | |||
| - `rsync`: синхронізація файлів і папок через SSH або на локальній файловій системі | ||||
| - `wireshark` і `tshark`: перехоплення пакетів і відладка мережі | ||||
| - `ngrep`: grep мережевого рівня | ||||
| - `host` і `dig`: пошук DNS | ||||
| - `lsof`: процесинг дескрипторів та інформація по сокетах | ||||
| - `host` і `dig`: пошук в DNS | ||||
| - `lsof`: інформація про файлові дескриптори та сокети | ||||
| - `dstat`: корисна статистика ОС | ||||
| - [`glances`](https://github.com/nicolargo/glances): високорівнева статистика з багатьма підсистемам | ||||
| - `iostat`: статистика використання жорсткого диска | ||||
| - [`glances`](https://github.com/nicolargo/glances): сумарна статистика багатьох підсистем | ||||
| - `iostat`: статистика системи вводу/виводу жорстких дисків | ||||
| - `mpstat`: статистика використання CPU | ||||
| - `vmstat`: статистика використання оперативної пам'яті | ||||
| - `htop`: вдосконалена версія `top` | ||||
|  | @ -339,7 +350,7 @@ | |||
| - [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): The sadly complex minutiae on how to handle filenames correctly in shell scripts. | ||||
| 
 | ||||
| 
 | ||||
| ## Декламація | ||||
| ## Відмова від відповідальності | ||||
| 
 | ||||
| За невеликим винятком, весь код написаний так, щоб інші його змогли прочитати. | ||||
| Той факт, що щось може бути написано на Bash, зовсім не означає, що воно має бути на ньому написано. ;) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Joshua Levy
						Joshua Levy