Посібник з команд Linux – Вивчіть команди Linux для початківців

Цей довідник з команд Linux охоплює 60 основних команд Bash, які знадобляться вам як розробнику. Кожна команда містить приклад коду та підказки щодо того, коли його використовувати.

Також він дотримується правила 80/20: ви вивчите 80% теми приблизно за 20% часу, витраченого на її вивчення.

Я вважаю, що цей підхід дає вам всебічний огляд.

Цей підручник не намагається охопити все що, пов’язане з Linux та його командами. Він зосереджений на невеликих основних командах, які ви використовуватимете 80% або 90% часу, і намагається спростити використання складніших.

Усі ці команди працюють у Linux, macOS, WSL і будь-де, де є середовище UNIX.

Я сподіваюся, що зміст цього посібника допоможе вам досягти бажаного: навчитися працювати з Linux.

Ви можете створити закладку для цієї сторінки у своєму браузері, щоб у майбутньому ви могли ще раз переглянути цей підручник.

Насолоджуйтесь!

Введення в Linux і його оболонки

Що таке Linux?

Linux — це операційна система, як macOS або Windows.

Це також найпопулярніша операційна система з відкритим кодом, яка дає вам багато свободи.

Він забезпечує переважну більшість серверів, які складають Інтернет. Це основа, на якій все будується. Але не тільки це. Android базується на (модифікованій версії) Linux.

«Ядро»(core) Linux (так зване ядро(karnel)) народилося в 1991 році у Фінляндії, і воно пройшло дуже довгий шлях від свого скромного початку. Далі він став ядром операційної системи GNU, утворивши дует GNU/Linux.

У Linux є одна річ, яку такі корпорації, як Microsoft, Apple і Google, ніколи не зможуть запропонувати: свобода робити зі своїм комп’ютером все, що завгодно.

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

Linux — це найвища свобода.

Його розробляють волонтери, деякі оплачують компанії, які покладаються на нього, інші — самостійно. Але немає жодної комерційної компанії, яка б могла диктувати, що робити в Linux, або пріоритети проєкту.

Ніхто не може вказувати, які програми ви можете запускати, або «телефонувати додому» за допомогою програм, які відстежують вас, вашу позицію тощо.

Linux також особливий, оскільки існує не просто «один Linux», як у випадку з Windows або macOS. Натомість ми маємо дистрибутиви.

«Дистрибутив» створюється компанією чи організацією та містить ядро ​​Linux із додатковими програмами та інструментами.

Наприклад Debian, Red Hat і Ubuntu, мабуть, найпопулярніші дистрибутиви.

Але існує багато, набагато більше. Ви також можете створити свій власний дистрибутив. Але, швидше за все, ви скористаєтеся популярним, який має багато користувачів і спільноту людей навколо нього. Це дає вам змогу робити те, що вам потрібно, не втрачаючи надто багато часу на винахід велосипеда та пошук відповідей на типові проблеми.

Деякі настільні комп’ютери та ноутбуки поставляються з попередньо встановленою ОС Linux. Або ви можете встановити його на свій комп’ютер під керуванням Windows або на Mac.

Але вам не потрібно виводити з ладу наявний комп’ютер, щоб отримати уявлення про те, як працює Linux.

У мене немає комп’ютера з Linux.

Якщо ви використовуєте Mac, вам просто потрібно знати, що під капотом macOS є операційною системою UNIX. Він поділяє багато тих самих ідей і програмного забезпечення, які використовує система GNU/Linux, оскільки GNU/Linux є безплатною альтернативою UNIX.

UNIX — це загальний термін, який об’єднує багато операційних систем, що використовуються у великих корпораціях та установах, починаючи з 70-х років.

Термінал macOS надає вам доступ до тих самих команд, які я опишу далі в цьому посібнику.

У Microsoft є офіційна підсистема Windows для Linux, яку ви можете (і повинні!) встановити на Windows. Це дасть вам можливість дуже легко запустити Linux на вашому ПК.

Але переважну більшість часу ви будете працювати на комп’ютері Linux у хмарі через VPS (віртуальний приватний сервер), як-от DigitalOcean.

Що таке оболонка Linux?

Оболонка — це інтерпретатор команд, який надає користувачеві інтерфейс для роботи з основною операційною системою.

Він дозволяє виконувати операції за допомогою тексту та команд, а також надає користувачам додаткові функції, як-от можливість створювати скрипти.

Це важливо: оболонки дозволяють вам виконувати речі більш оптимізованим способом, ніж GUI (графічний інтерфейс користувача) міг би коли-небудь дозволити вам це зробити. Інструменти командного рядка можуть запропонувати багато різних параметрів конфігурації, та не є надто складними у використанні.

Існує багато різних видів оболонок. Ця публікація присвячена оболонкам Unix, тим, які ви зазвичай знайдете на комп’ютерах Linux і macOS.

З часом для цих систем було створено багато різних видів оболонок, і деякі з них домінують у просторі: Bash, Csh, Zsh, Fish та багато інших!

Усі оболонки походять від оболонки Борна, яка називається sh. «Борн», тому що його творцем був Стів Борн.

Bash означає оболонку Bourne-againsh був патентованим і не був відкритим вихідним кодом, і Bash було створено в 1989 році, як безплатну альтернативу для проєкту GNU та Free Software Foundation. Оскільки проєкти повинні були платити за використання оболонки Bourne, Bash став дуже популярним.

Якщо ви користуєтеся Mac, спробуйте відкрити термінал Mac. За замовчуванням він запускає ZSH (або, до Catalina, Bash).

Ви можете налаштувати свою систему на запуск будь-якої оболонки – наприклад, я використовую оболонку Fish.

Кожна окрема оболонка має свої унікальні функції та розширене використання, але всі вони мають спільну функціональність: вони можуть дозволяти вам запускати програми та їх можна програмувати.

Далі ми детально розглянемо найпоширеніші команди, які ви використовуватимете.

Команда Linux man


Перша команда, яку я розповім, допоможе вам зрозуміти всі інші команди.

Кожного разу, коли я не знаю, як використовувати команду, я вводжу, man <command>, щоб отримати посібник:

Screen-Shot-2020-07-04-at-18.42.40

Це сторінка man (з _manual_). Сторінки керівництва є важливим інструментом для навчання розробника. Вони містять стільки інформації, що інколи її майже забагато.
Наведений вище знімок екрана – це лише 1 із 14 екранів пояснення команди ls.

У більшості випадків, коли мені потрібно швидко вивчити команду, я використовую цей сайт під назвою tldr pages : https://tldr.sh. Це команда, яку ви можете встановити, а потім виконати так: tldr <command>. Він дає вам дуже короткий огляд команди з деякими зручними прикладами типових сценаріїв використання:

Screen-Shot-2020-09-07-at-07.35.41

Це не заміна man, а зручний інструмент, щоб не загубитися у величезній кількості інформації, наявної на man сторінці. Потім ви можете скористатися man сторінкою, щоб дослідити всі різні опції та параметри, які можна використовувати в команді.

Команда Linux ls

Усередині папки ви можете перерахувати всі файли, які містить папка, використовуючи ls команду:

ls

Якщо ви додасте назву або шлях до папки, буде надруковано вміст цієї папки:

ls /bin
Скріншот-2019-02-09-18.50.14

ls приймає багато варіантів. Одна з моїх улюблених комбінацій -al. Спробуй це:

ls -al /bin
Скріншот-2019-02-09-at-18.49.52

Порівняно зі звичайною ls командою, ця команда повертає набагато більше інформації.

У вас зліва направо:

  • права доступу до файлу (і якщо ваша система підтримує ACL, ви також отримуєте позначку ACL)
  • кількість посилань на цей файл
  • власник файлу
  • групу файлу
  • розмір файлу в байтах
  • дата і час останньої зміни файлу
  • ім’я файлу

Цей набір даних генерується l опцією. А параметр a показує приховані файли.

Приховані файли – це файли, які починаються з крапки (.).

Команда Linux cd

Якщо у вас є папка, ви можете перейти до неї за допомогою команди cd. cd означає змінити каталог. Ви викликаєте його, вказуючи теку, до якої потрібно переміститися. Ви можете вказати назву папки або весь шлях.

Приклад:

mkdir fruits
cd fruits

Тепер ви в fruits папці.

Ви можете використовувати .. спеціальний шлях для вказівки батьківської папки:

cd .. #back to the home folder

Символ # вказує на початок коментаря, який триває весь рядок після того, як його введено.

Ви можете використовувати його для формування шляху:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

Є ще один спеціальний індикатор шляху ., який вказує на поточну папку.

Ви також можете використовувати абсолютні шляхи, які починаються з кореневої папки /:

cd /etc

Команда Linux pwd

Щоразу, коли ви відчуваєте, що загубилися у файловій системі, викликайте команду pwd, щоб дізнатися, де ви знаходитесь:

pwd

Він покаже поточний шлях до папки.

Команда Linux mkdir

Ви створюєте папки за допомогою mkdir команди:

mkdir fruits

Ви можете створити кілька папок за допомогою однієї команди:

mkdir dogs cars

Ви також можете створити кілька вкладених папок, додавши -p параметр:

mkdir -p fruits/apples

Параметри в командах UNIX зазвичай приймають цю форму. Ви додаєте їх одразу після назви команди, і вони змінюють поведінку команди. Також часто можна комбінувати кілька варіантів.

Ви можете дізнатися, які параметри підтримує команда, ввівши man <commandname>. Спробуйте зараз, man mkdir, наприклад (натисніть q клавішу, щоб вийти зі сторінки довідки). Сторінки довідки — це дивовижна вбудована допомога для UNIX.

Команда Linux rmdir

Так само я ви можете створити папку за допомогою mkdir, ви можете видалити папку за допомогою rmdir:

mkdir fruits
rmdir fruits

Ви також можете видалити кілька папок одночасно:

mkdir fruits cars
rmdir fruits cars

Папка, яку ви видаляєте, має бути порожньою.

Щоб видалити папки з файлами в них, ми використаємо більш загальну rm команду, яка видаляє файли та папки, використовуючи -rf параметр:

rm -rf fruits cars

Будьте обережні, оскільки ця команда не запитує підтвердження, і вона негайно видаляє все, що ви попросите видалити.

Під час видалення файлів із командного рядка немає кошика, а відновити втрачені файли може бути важко.

Команда Linux mv

Отримавши файл, ви можете переміщувати його за допомогою mv команди. Ви вказуєте поточний шлях файлу та його новий шлях:

touch test
mv pear new_pear

Тепер файл pear переміщено до new_pear. Таким чином ви перейменовуєте файли та папки.

Якщо останнім параметром є папка, файл розташований у шляху першого параметра, буде переміщено до цієї папки. У цьому випадку ви можете вказати список файлів, і всі вони будуть переміщені в шлях до папки, визначений останнім параметром:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder

Команда Linux cp

Ви можете скопіювати файл за допомогою cp команди:

touch test
cp apple another_apple

Щоб копіювати папки, потрібно додати -r опцію рекурсивного копіювання всього вмісту папки:

mkdir fruits
cp -r fruits cars

Команда Linux open

Команда open дозволяє відкрити файл за допомогою такого синтаксису:

open <filename>

Ви також можете відкрити каталог, який у macOS відкриває програму Finder із відкритим поточним каталогом:

open <directory name>

Я використовую його весь час, щоб відкрити поточний каталог:

open .

Спеціальний . символ вказує на поточний каталог тоді, як .. на батьківський каталог

Цю ж команду також можна використовувати для запуску програми:

open <application name>

Команда Linux touch

Ви можете створити порожній файл за допомогою touch команди:

touch apple

Якщо файл уже існує, він відкриває файл у режимі запису, а позначка часу файлу оновлюється.

Команда Linux find

Команду find можна використовувати для пошуку файлів або папок, які відповідають певному шаблону пошуку. Він шукає рекурсивно.

Навчімось використовувати це на прикладі.

Знайдіть у поточному дереві всі файли з .js розширенням і надрукуйте відносний шлях кожного файлу, який відповідає:

find . -name '*.js'

Важливо використовувати лапки навколо спеціальних символів, *, щоб уникнути їх інтерпретації оболонкою.

Знайти каталоги під поточним деревом, які відповідають імені “src”:

find . -type d -name src

Використовуйте -type f для пошуку лише у файлах або -type l лише для пошуку символічних посилань.

-name чутливий до регістру. Використовувати -iname для пошуку без урахування регістру.

Ви можете шукати в кількох кореневих деревах:

find folder1 folder2 -name filename.txt

Знайдіть каталоги під поточним деревом, які відповідають імені «node_modules» або «public»:

find . -type d -name node_modules -or -name public

Ви також можете виключити шлях за допомогою -not -path:

find . -type d -name '*.md' -not -path 'node_modules/*'

Ви можете шукати файли, які містять більше ніж 100 символів (байтів):

find . -type f -size +100c

Пошук файлів розміром більше ніж 100 Кб, але менше ніж 1 Мб:

find . -type f -size +100k -size -1M

Пошук файлів, відредагованих понад 3 днів тому:

find . -type f -mtime +3

Пошук файлів, редагованих за останні 24 години:

find . -type f -mtime -1

Ви можете видалити всі файли, які відповідають пошуковому запиту, додавши -delete опцію. Це видаляє всі файли, відредаговані за останні 24 години:

find . -type f -mtime -1 -delete

Для кожного результату пошуку можна виконати команду. У цьому прикладі ми виконуємо cat друк вмісту файлу:

find . -type f -exec cat {} \;

Зверніть увагу на закінчення \;{} заповнюється назвою файлу під час виконання.

Команда Linux ln

Команда ln є частиною команд файлової системи Linux.

Вона використовується для створення посилань. Що таке посилання? Це як вказівник на інший файл або файл, який вказує на інший файл. Можливо, ви знайомі з ярликами Windows. Вони схожі.

У нас є 2 типи посилань: жорсткі посилання та м’які посилання.

Жорсткі посилання використовуються рідко. Вони мають кілька обмежень: ви не можете посилатися на каталоги та не можете посилатися на зовнішні файлові системи (диски).

Жорстке посилання створюється за допомогою такого синтаксису:

ln <original> <link>

Наприклад, у вас є файл під назвою recipes.txt. Ви можете створити жорстке посилання на нього за допомогою:

ln recipes.txt newrecipes.txt

Нове жорстке посилання, яке ви створили, не відрізняється від звичайного файлу:

Screen-Shot-2020-09-02-at-11.26.21

Тепер щоразу, коли ви редагуєте будь-який із цих файлів, вміст оновлюватиметься для обох.

Якщо ви видалите оригінальний файл, посилання все одно міститиме оригінальний вміст файлу, оскільки він не буде видалено, доки не буде єдине жорстке посилання, що вказує на нього.

Screen-Shot-2020-09-02-at-11.26.07

М’які посилання бувають різними. Вони більш потужні, оскільки ви можете посилатися на інші файлові системи та каталоги. Але майте на увазі, що при видаленні оригіналу посилання буде порушено.

Ви створюєте м’які посилання, використовуючи такі -s параметри ln:

ln -s <original> <link>

Наприклад, у вас є файл під назвою recipes.txt. Ви можете створити м’яке посилання на нього за допомогою:

ln -s recipes.txt newrecipes.txt

У цьому випадку ви можете побачити спеціальний l прапорець, коли ви перераховуєте файл за допомогою ls -al. Ім’я файлу має в @ кінці, і воно також має інший колір, якщо у вас увімкнено кольори:

Screen-Shot-2020-09-02-at-11.27.18
Тепер, якщо ви видалите оригінальний файл, посилання будуть пошкоджені, і оболонка повідомить вам «Немає такого файлу чи каталогу», якщо ви спробуєте отримати до нього доступ:

Screen-Shot-2020-09-02-at-11.27.03

Команда Linux gzip

Ви можете стиснути файл за допомогою протоколу стиснення gzip під назвою LZ77 за допомогою команди gzip.

Ось найпростіший спосіб використання:

gzip filename

Це стисне файл і додасть .gz до нього розширення. Вихідний файл буде видалено.

Щоб запобігти цьому, ви можете скористатися -c опцією та використати переспрямування виводу, щоб записати вивід у filename.gz файл:

gzip -c filename > filename.gz

Параметр -c вказує, що вихідні дані надходитимуть до стандартного потоку виводу, залишаючи вихідний файл недоторканим.

Або ви можете скористатися -k опцією:

gzip -k filename

Існують різні ступені стиснення. Чим сильніше стиснення, тим більше часу знадобиться для стиснення (і розпакування). Рівні варіюються від 1 (найшвидше, найгірше стиснення) до 9 (найповільніше, краще стиснення), стандартним є 6.

Ви можете вибрати певний рівень за допомогою -<NUMBER> опції:

gzip -1 filename

Ви можете стиснути кілька файлів, перерахувавши їх:

gzip filename1 filename2

Ви можете рекурсивно стискати всі файли в каталозі за допомогою -r параметра:

gzip -r a_folder

Параметр -v друкує інформацію про відсоток стиснення. Ось приклад його використання разом із -k опцією (keep):

Screen-Shot-2020-09-09-at-15.55.42
gzip також можна використовувати для розпакування файлу за допомогою -d параметра:

gzip -d filename.gz

Команда Linux gunzip

Команда gunzip в основному еквівалентна gzip команді, за винятком того, що -d параметр завжди ввімкнено за замовчуванням.

Команду можна викликати таким чином:

gunzip filename.gz

Це заархівує та видалить .gz розширення, помістивши результат у filename файл. Якщо цей файл існує, він перезапише його.

Ви можете видобути файл з іншою назвою за допомогою переспрямування виводу за допомогою  -c параметра:

gunzip -c filename.gz > anotherfilename

Команда Linux tar

Команду tar використовується для створення архіву, групування кількох файлів в одному файлі.

Його назва походить з минулого та означає стрічковий архів(tape archive) (тоді, коли архіви зберігалися на стрічках).

Ця команда створює архів із назвою archive.tar вмістом file1 і file2

tar -cf archive.tar file1 file2

Параметр c означає створити. Опція f використовується для запису в архів.

Щоб розпакувати файли з архіву в поточній папці, використовуйте:

tar -xf archive.tar

Опція x означає витяг.

І щоб витягти їх у певний каталог, використовуйте:

tar -xf archive.tar -C directory

Ви також можете просто перерахувати файли, які містяться в архіві:

Screen-Shot-2020-09-09-at-16.56.33
tar часто використовується для створення стисненого архіву, заархівувавши архів gzip.

Це робиться за допомогою z параметра:

tar -czf archive.tar.gz file1 file2

Це подібно до створення архіву tar, а потім запуску gzip на ньому.

Щоб розархівувати архів gzip, ви можете скористатися gunzip, або gzip -d, а потім розархівувати його. Але tar -xf визнає, що це архів gzip, і зробить це за вас:

tar -xf archive.tar.gz

Команда Linux alias

Зазвичай завжди запускати програму з набором параметрів, які вам подобаються.

Наприклад, візьміть ls команду. За замовчуванням вона друкує дуже мало інформації:

Screen-Shot-2020-09-03-at-15.21.00

Але якщо ви скористаєтеся цією -al опцією, він надрукує щось корисніше, зокрема дату зміни файлу, розмір, власника та дозволи. Він також перерахує приховані файли (файли, що починаються з .):

Screen-Shot-2020-09-03-at-15.1.08

Ви можете створити нову команду, наприклад, я люблю її називати ll, тобто псевдонім для ls -al.

Ви робите це так:

alias ll='ls -al'

Після цього ви можете викликати ll так само як це була звичайна команда UNIX:

Screen-Shot-2020-09-03-at-15.22.51

Тепер виклик alias без будь-якої опції покаже список визначених псевдонімів:

Screen-Shot-2020-09-03-at-15.30.19
Псевдонім працюватиме, доки не буде закрито термінальний сеанс.

Щоб зробити його постійним, вам потрібно додати його до конфігурації оболонки. Це може бути ~/.bashrc або ~/.profile або ~/.bash_profile якщо ви використовуєте оболонку Bash, залежно від варіанту використання.

Будьте обережні з лапками, якщо у вас є змінні в команді: якщо ви використовуєте подвійні лапки, змінна вирішується під час визначення. Якщо ви використовуєте одинарні лапки, це вирішується під час виклику. Це 2 різні речі:

alias lsthis="ls $PWD"
alias lscurrent='ls $PWD'

$PWD посилається на поточну папку, у якій знаходиться оболонка. Якщо ви зараз перейдете до нової папки, lscurrent у ній буде показано список файлів у новій папці, у той lsthis час як файли в папці, де ви були, коли визначили псевдонім, усе ще перераховуються.

Команда Linux cat

Подібно до tail ми маємо cat. Крім того, cat може додавати вміст до файлу, і це робить його надзвичайно потужним.

У найпростішому варіанті cat друкує вміст файлу на стандартний вихід:

cat file

Ви можете надрукувати вміст кількох файлів:

cat file1 file2

а за допомогою оператора переспрямування виводу > ви можете об’єднати вміст кількох файлів у новий файл:

cat file1 file2 > file3

За допомогою >> ви можете додати вміст кількох файлів у новий файл, створивши його, якщо він не існує:

cat file1 file2 >> file3

Коли ви переглядаєте файли вихідного коду, корисно бачити номери рядків. Ви можете надрукувати їх за допомогою параметра -n:

cat -n file1

Ви можете додати число лише до непорожніх рядків за допомогою -b, або ви також можете видалити всі кілька порожніх рядків за допомогою -s.

cat часто використовується в поєднанні з оператором |каналу для передачі вмісту файлу як вхідних даних для іншої команди: cat file1 | anothercommand.

Команда Linux less

Команду less я часто використовую. Вона показує вам вміст, що зберігається у файлі, у приємному інтерактивному інтерфейсі користувача.

Використання: 

less <filename>
Скріншот-2019-02-10-at-09.11.05

Коли ви потрапили в less сеанс, ви можете вийти, натиснувши q.

Ви можете переміщатися вмістом файлу за допомогою клавіш вгору та вниз або за допомогою клавіші пробілу та b для навігації сторінка за сторінкою. Ви також можете перейти до кінця файлу, натиснувши G, і повернутися до початку, натиснувши g.

Ви можете шукати вміст у файлі, натиснувши / та ввівши слово для пошуку. Пошук відбувається з верху в низ. Ви можете здійснювати пошук у зворотному напрямку, використовуючи символ ? і вводячи слово.

Ця команда лише візуалізує вміст файлу. Ви можете безпосередньо відкрити редактор, натиснувши v. Він використовуватиме системний редактор, яким у більшості випадків є vim.

Натискання F клавіші переходить у режим стеження або перегляду. Коли файл змінюється кимось іншим, наприклад, з іншої програми, ви бачите зміни в реальному часі.

За замовчуванням цього не відбувається, і ви бачите лише версію файлу на момент відкриття. Щоб вийти з цього режиму, потрібно натиснути ctrl-C. У цьому випадку поведінка подібна до виконання команди tail -f <filename>.

Ви можете відкрити декілька файлів і пересуватися ними за допомогою :n (для переходу до наступного файла) і :p (для переходу до попереднього).

Команда Linux tail

На мій погляд, найкращий варіант використання tail – виклик із -f опцією. Він відкриває файл у кінці та стежить за змінами файлу.

Щоразу, коли у файлі з’являється новий вміст, він друкується у вікні. Це чудово підходить для перегляду файлів журналу, наприклад:

tail -f /var/log/system.log

Щоб вийти, натисніть ctrl-C.

Ви можете надрукувати останні 10 рядків у файлі:

tail -n 10 <filename>

Ви можете надрукувати весь вміст файлу, починаючи з певного рядка, використовуючи + перед номером рядка:

tail -n +10 <filename>

tail може зробити набагато більше, і, як завжди, я раджу перевірити man tail.

Команда Linux wc

Команда wc дає нам корисну інформацію про файл або вхідні дані, які він отримує через канали.

echo test >> test.txt
wc test.txt
1       1       5 test.txt

Наприклад, за допомогою каналів ми можемо підрахувати результат виконання ls -al команди:

ls -al | wc
6      47     284

Перший стовпець – це кількість рядків. Другий – це кількість слів. Третій – кількість байтів.

Ми можемо сказати йому просто порахувати рядки:

wc -l test.txt

або просто слова:

wc -w test.txt

або просто байти:

wc -c test.txt

Байти в наборах символів ASCII прирівнюються до символів. Але з кодуваннями, відмінними від ASCII, кількість символів може відрізнятися, оскільки деякі символи можуть займати кілька байтів (наприклад, це відбувається в Unicode).

У цьому випадку -m прапор допоможе отримати правильне значення:

wc -m test.txt

Команда Linux grep

Команда grep є дуже корисним інструментом. Коли ви опануєте його, це надзвичайно допоможе вам у повсякденному кодуванні.

Якщо вам цікаво, grep означає загальний друк формальних виразів.

Ви можете використовувати grep для пошуку у файлах або поєднати його з каналами, щоб фільтрувати вивід іншої команди.

Наприклад, ось як ми можемо знайти входження document.getElementById рядка у index.md файл:

grep -n document.getElementById index.md
Screen-Shot-2020-09-04-at-09.42.10

Використовуючи -n опцію, він покаже номери рядків:

grep -n document.getElementById index.md
Screen-Shot-2020-09-04-at-09.47.04

Одна дуже корисна річ — сказати grep друкувати 2 рядки до та 2 рядки після відповідного рядка, щоб надати вам більше контексту. Це робиться за допомогою -C параметра, який приймає кілька рядків:

grep -nC 2 document.getElementById index.md
Screen-Shot-2020-09-04-at-09.44.35

За замовчуванням пошук чутливий до регістру. Використовуйте -i прапор, щоб зробити його нечутливим.

Як згадувалося, ви можете використовувати grep для фільтрації виводу іншої команди. Ми можемо відтворити ті самі функції, що й вище, використовуючи:

less index.md | grep -n document.getElementById
Screen-Shot-2020-09-04-at-09.43.15

Рядок пошуку може бути регулярним виразом, і це робить grep дуже корисним.

Інша річ, яка може здатися вам дуже корисною, це інвертувати результат, виключаючи рядки, які відповідають певному рядку, використовуючи -v параметр:

Screen-Shot-2020-09-04-at-09.42.04

Команда Linux sort

Припустимо, у вас є текстовий файл, який містить імена собак:

Screen-Shot-2020-09-07-at-07.56.28

Цей список не впорядкований.

Команда sort допоможе вам відсортувати їх за назвою:

Screen-Shot-2020-09-07-at-07.57.08

Використовуйте r опцію, щоб змінити порядок:

Screen-Shot-2020-09-07-at-07.57.28

Сортування за замовчуванням чутливе до регістру та в алфавітному порядку. Використовуйте  --ignore-case опцію сортування без урахування регістру та -n опцію сортування в порядку чисел.

Якщо файл містить повторювані рядки:

Screen-Shot-2020-09-07-at-07.59.03

Ви можете скористатися -u опцією їх видалення:

Screen-Shot-2020-09-07-at-07.59.16

sort працює не лише з файлами, як це роблять багато команд UNIX – він також працює з каналами. Тож ви можете використовувати його на виході іншої команди. Наприклад, ви можете впорядкувати файли, які повертає ls:

ls | sort

sort є дуже потужним і має багато інших опцій, які ви можете дослідити, зателефонувавши man sort.

Screen-Shot-2020-09-07-at-08.01.27

Команда Linux uniq

uniq це команда, яка допомагає сортувати рядки тексту.

Ви можете отримати ці рядки з файлу або за допомогою каналів із результату іншої команди:

uniq dogs.txt

ls | uniq

Вам потрібно врахувати цю ключову річ: uniq виявлятиме лише сусідні повторювані рядки.

Це означає, що ви, швидше за все, використовуватимете його разом із sort:

sort dogs.txt | uniq

Команда sort має власний спосіб видалення дублікатів за допомогою параметра 
-u(унікальний). Але uniq має більшу силу.

За замовчуванням він видаляє повторювані рядки:

Screen-Shot-2020-09-07-at-08.39.35

Ви можете наказати йому показувати лише повторювані рядки, наприклад, за допомогою -d опції:

sort dogs.txt | uniq -d
Screen-Shot-2020-09-07-at-08.36.50

Ви можете скористатися -u опцією для зображення лише неповторюваних рядків:

Screen-Shot-2020-09-07-at-08.38.50

Ви можете підрахувати повторення кожного рядка за допомогою -c параметра:

Screen-Shot-2020-09-07-at-08.37.15

Використовуйте спеціальну комбінацію:

sort dogs.txt | uniq -c | sort -nr

щоб потім відсортувати ці рядки за частотою:

Screen-Shot-2020-09-07-at-08.37.49

Команда Linux diff

diff є зручною командою. Припустимо, у вас є 2 файли, які містять майже однакову інформацію, але ви не можете знайти різницю між ними.

diff обробить файли та скаже, в чому різниця.

Припустимо, у вас є 2 файли: dogs.txt і moredogs.txt. Різниця в тому, що moredogs.txt містить ще одне ім’я собаки:

Screen-Shot-2020-09-07-at-08.55.18

diff dogs.txt moredogs.txt скаже вам, що другий файл має ще один рядок, рядок 3 із рядком Vanille:

Screen-Shot-2020-09-07-at-08.56.05

Якщо ви інвертуєте порядок файлів, ви повідомите, що у другому файлі відсутній рядок 3, вміст якого Vanille:

Screen-Shot-2020-09-07-at-08.56.10

Використання -y параметра порівнює 2 файли рядок за рядком:

Screen-Shot-2020-09-07-at-08.57.56

Однак, варіант -u буде більш звичним для вас, тому що це те саме, що і система керування версіями Git для зображення відмінностей між версіями:

Screen-Shot-2020-09-07-at-08.58.23

Порівняння каталогів працює таким же чином. Ви повинні використовувати -r опцію рекурсивного порівняння (перехід у підкаталоги):

Screen-Shot-2020-09-07-at-09.01.07

Якщо вас цікавить, які файли відрізняються, а не вміст, використовуйте параметри r та q:

Screen-Shot-2020-09-07-at-09.01.30

Є багато інших параметрів, які ви можете дослідити на сторінці довідки, запустивши man diff:

Screen-Shot-2020-09-07-at-09.02.32

Команда Linux echo

Команда echo виконує одну просту роботу: друкує на виході переданий їй аргумент.

Цей приклад:

echo "hello"

Друкуватиметься hello на терміналі.

Ми можемо додати результат до файлу:

echo "hello" >> output.txt

Ми можемо інтерполювати змінні середовища:

echo "The path variable is $PATH"
Screen-Shot-2020-09-03-at-15.44.33

Пам’ятайте, що спеціальні символи потрібно екранувати зворотною похилою рискою \$, наприклад:

Screen-Shot-2020-09-03-at-15.51.18
Це лише початок. Ми можемо робити деякі цікаві речі, коли справа доходить до взаємодії з функціями оболонки.

Ми можемо повторити файли в поточній папці:

echo *

Ми можемо повторити файли в поточній папці, які починаються з літери o:

echo o*

Тут можна використовувати будь-яку дійсну команду та функцію Bash (або будь-яку оболонку, яку ви використовуєте).

Ви можете надрукувати шлях до домашньої папки:

echo ~
Screen-Shot-2020-09-03-at-15.46.36

Ви також можете виконувати команди та друкувати результат у стандартний вихід (або у файл, як ви бачили):

echo $(ls -al)
Screen-Shot-2020-09-03-at-15.48.55

Зверніть увагу, що пробіли не зберігаються за замовчуванням. Для цього вам потрібно взяти команду в подвійні лапки:

Screen-Shot-2020-09-03-at-15.49.53

Ви можете створити список рядків, наприклад діапазонів:

echo {1..5}
Screen-Shot-2020-09-03-at-15.47.19

Команда Linux chown

Кожен файл/каталог в операційній системі, як-от Linux або macOS (і в кожній системі UNIX загалом), має власника.

Власник файлу може робити з ним все. Це може вирішити долю цього файлу.

Власник (і root користувач) також може змінити власника на іншого користувача за допомогою chown команди:

chown <owner> <file>

Наприклад:

chown flavio test.txt

Наприклад, якщо у вас є файл, який належить root, ви не можете писати в нього як інший користувач:

Screen-Shot-2020-09-03-at-18.40.49

Ви можете використати chown, щоб передати вам право власності:

Screen-Shot-2020-09-03-at-18.40.58
Досить часто потрібно змінити право власності на каталог, і рекурсивно всі файли, що містяться, плюс всі підкаталоги й файли, які містяться в них.

Ви можете зробити це за допомогою -R прапора:

chown -R <owner> <file>

Файли/каталоги мають не лише власника, вони також мають групу. За допомогою цієї команди ви можете змінити це одночасно зі зміною власника:

chown <owner>:<group> <file>

Приклад:

chown flavio:users test.txt

Ви також можете просто змінити групу файлу за допомогою chgrp команди:

chgrp <group> <filename>

Команда Linux chmod

Кожен файл в операційних системах Linux / macOS (і системах UNIX загалом) має 3 дозволи: читання, запис і виконання.

Перейдіть до папки та виконайте ls -al команду.

Screen-Shot-2020-09-03-at-18.49.22
Дивні рядки, які ви бачите в кожному рядку файлу, наприклад drwxr-xr-x, визначають дозволи для файлу або папки.

Давайте його розберемо.

Перша літера вказує на тип файлу:

  • - означає, що це звичайний файл
  • d означає, що це каталог
  • l означає, що це посилання

Тоді у вас є 3 набори значень:

  • Перший набір відповідає дозволам власника(owner) файла. 
  • Другий набір відповідає дозволам членів групи(group), до якої прив’язаний файл. 
  • Третій набір відповідає дозволам інших людей(everyone else).

Ці набори складаються з 3 значень. rwx означає, що певна особа має доступ для читання, запису та виконання. Усе, що видаляється, міняється на -, що дозволяє формувати різні комбінації значень і відносних дозволів: rw-r--r-x тощо.

Ви можете змінити дозволи, надані файлу, за допомогою chmod команди.

chmod можна використовувати 2 способи. Перший використовує символічні аргументи, другий використовує числові аргументи. Почнемо спочатку з символів, які більш інтуїтивно зрозумілі.

Ви вводите chmod, за яким слідує пробіл, і літера:

  • a виступає за всіх
  • u означає користувача
  • g означає групу
  • o виступає за інших

Потім ви вводите + або -, щоб додати дозвіл, або видалити його. Потім ви вводите один або кілька символів дозволу (rwx).

Після всього йде ім’я файлу або папки.

Ось кілька прикладів:

chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file

Ви можете застосувати однакові дозволи до кількох персонажів, додавши кілька літер перед +-:

chmod og-r filename #other and group can't read any more

Якщо ви редагуєте папку, ви можете застосувати дозволи до кожного файлу, що міститься в цій папці, використовуючи -r позначку (рекурсивний).

Числові аргументи швидші, але мені важко їх запам’ятати, якщо ви не використовуєте їх щодня. Ви використовуєте цифру, яка представляє дозволи особи. Це числове значення може бути максимум 7 і обчислюється таким чином:

  • 1 якщо є дозвіл на виконання
  • 2 якщо є дозвіл на запис
  • 4 якщо є дозвіл на читання

Це дає нам 4 комбінації:

  • 0 немає дозволів
  • 1 може виконати
  • 2 може писати
  • 3 вміє писати, виконувати
  • 4 вміє читати
  • 5 вміє читати, виконувати
  • 6 вміє читати, писати
  • 7 може читати, писати та виконувати

Ми використовуємо їх парами по 3, щоб встановити дозволи для всіх 3 груп разом:

chmod 777 filename
chmod 755 filename
chmod 644 filename

Команда Linux umask

Коли ви створюєте файл, вам не потрібно заздалегідь вирішувати дозволи. Дозволи мають значення за умовчанням.

Ці параметри за замовчуванням можна контролювати та змінювати за допомогою umask команди.

Введення umask без аргументів покаже вам поточну umask, у цьому випадку 0022:

Screen-Shot-2020-09-04-at-09.04.19

Що 0022 означає? Це вісімкове значення, яке представляє дозволи.

Ще одне поширене значення – 0002.

Використовуйте umask -S, щоб побачити придатний для читання запис:

У цьому випадку користувач (u), власник файлу, має дозволи на читання, запис і виконання файлів.

Інші користувачі, що належать до тієї ж групи (g), мають дозвіл на читання і виконання, такий же, як і всі інші користувачі (o).

У числовому записі ми зазвичай змінюємо останні 3 цифри.

Ось список, який надає значення числу:

  • 0 читати, писати, виконувати
  • 1 читати і писати
  • 2 прочитати і виконати
  • 3 лише для читання
  • 4 написати і виконати
  • 5 тільки писати
  • 6 лише виконати
  • 7 немає дозволів

Зауважте, що це числове позначення відрізняється від того, яке ми використовуємо в chmod.

Ми можемо встановити нове значення для маски, встановивши значення в числовому форматі:

umask 002

Або ви можете змінити дозвіл певної ролі:

umask g+r

Команда Linux du

Команда du розрахує розмір каталогу в цілому:

du
Screen-Shot-2020-09-04-at-08.11.30

Число 32 тут є значенням, вираженим у байтах.

Запуск du * розрахує розмір кожного файлу окремо:

Screen-Shot-2020-09-04-at-08.12.35

Ви можете налаштувати показ значень du у мегабайтах за допомогою du -m, а в гігабайтах — за допомогою du -g.

Опція -h покаже зрозумілу людині нотацію для розмірів, адаптовану до розміру:

Screen-Shot-2020-09-04-at-08.14.40

Додавання -a параметра також друкуватиме розмір кожного файлу в каталогах:

Screen-Shot-2020-09-04-at-08.01.12

Зручно сортувати каталоги за розміром:

du -h <directory> | sort -nr

А потім ввести head, щоб отримати лише перші 10 результатів:

Screen-Shot-2020-09-04-at-08.22.25

Команда Linux df

Команда df використовується для отримання інформації про використання диска.

Його основна форма буде друкувати інформацію про змонтовані томи:

Screen-Shot-2020-09-08-at-08.40.39

За допомогою параметра -h (df -h) буде показано ці значення в зручному для читання форматі:

Screen-Shot-2020-09-08-at-08.40.50

Ви також можете вказати ім’я файлу або каталогу, щоб отримати інформацію про конкретний том, на якому він знаходиться:

Screen-Shot-2020-09-08-at-08.41.27

Команда Linux basename

Припустімо, що у вас є шлях до файлу, наприклад /Users/flavio/test.txt.

Запуск

basename /Users/flavio/test.txt

поверне test.txt рядок:

Screen-Shot-2020-09-10-at-08.27.52

Якщо ви запустите basenama шляху, який вказує на каталог, ви отримаєте останній сегмент шляху. У цьому прикладі /Users/flavio це каталог:

Screen-Shot-2020-09-10-at-08.28.11

Команда Linux dirname

Припустімо, що у вас є шлях до файлу, наприклад /Users/flavio/test.txt.

Запуск

dirname /Users/flavio/test.txt

поверне /Users/flavio рядок:

Screen-Shot-2020-09-10-at-08.31.08-1

Команда Linux ps

На вашому комп’ютері постійно виконується безліч різних процесів.

Ви можете перевірити їх усі за допомогою команди ps:

Screen-Shot-2020-09-02-at-12.25.08

Це список ініційованих користувачем процесів, які зараз виконуються в поточному сеансі.

Тут у мене є кілька fish екземплярів оболонки, які в основному відкриваються за допомогою VS Code в редакторі, і екземпляр Hugo, який запускає попередній перегляд сайту.

Це лише команди, призначені поточному користувачеві. Щоб отримати список усіх процесів, нам потрібно передати деякі параметри в ps.

Найпоширеніший, який я використовую ps ax:

Screen-Shot-2020-09-02-at-12.26.00

Цей a параметр також використовується для переліку процесів інших користувачів, а не лише ваших власних. x показує процеси, не пов’язані з жодним терміналом (не ініційовані користувачами через термінал).

Як бачите, довші команди вирізано. Використовуйте команду ps axww, щоб продовжити список команд у новому рядку замість того, щоб скорочувати його:

Screen-Shot-2020-09-02-at-12.30.22

Нам потрібно вказати w 2 рази, щоб застосувати цей параметр (це не помилка).

Ви можете шукати певний процес у поєднанні grep з каналом, наприклад:

ps axww | grep "Visual Studio Code"

Screen-Shot-2020-09-02-at-12.33.45
Стовпці, які повертає, ps представляють деяку ключову інформацію.

Перша інформація — PID ідентифікатор процесу. Це ключ, коли ви хочете посилатися на цей процес в іншій команді, наприклад, щоб завершити його.

Тоді ми маємо TT, що повідомляє нам ідентифікатор термінала, який використовується.

Потім STAT повідомляє нам про стан процесу:

I процес, який перебуває в режимі очікування (перебуває в режимі сну довше приблизно 20 секунд)
R запущений процес
S Процес, який перебуває в режимі сну менше приблизно 20 секунд
T зупинений процес
U процес, який безперервно очікує
Z мертвий процес (зомбі)

Якщо у вас більше однієї літери, друга являє собою додаткову інформацію, яка може бути дуже технічної.

Як правило, + це означає, що процес знаходиться на передньому плані в його терміналі. s означає, що процес є лідером сеансу.

TIME повідомляє нам, як довго триває процес.

Команда Linux top

Команда top використовується для показу динамічної інформації в реальному часі про запущені процеси в системі.

Дуже зручно розуміти, що відбувається.

Його використання просте – ви просто вводите top, і термінал повністю зануриться в цей новий вигляд:

Screen-Shot-2020-09-03-at-11.39.53
Процес довготривалий. Щоб вийти, ви можете ввести q літеру або ctrl-C.

Нам надається багато інформації: кількість процесів, кількість запущених або сплячих процесів, завантаження системи, використання процесора та багато іншого.

Нижче наведено список процесів, які займають найбільше пам’яті та ЦП, постійно оновлюється.

За замовчуванням, як видно з %CPU виділеного стовпця, вони сортуються за використовуваним ЦП.

Ви можете додати позначку для сортування процесів за використаною пам’яттю:

top -o mem

Команда Linux kill

Процеси Linux можуть отримувати сигнали та реагувати на них.

Це один зі способів взаємодії з запущеними програмами.

Програма kill може надсилати програмі різні сигнали.

Він не просто використовується для завершення програми, як випливає з назви, але це його основна робота.

Ми використовуємо його таким чином:

kill <PID>

За замовчуванням це надсилає TERM сигнал на вказаний ідентифікатор процесу.

Ми можемо використовувати прапори для надсилання інших сигналів, зокрема:

kill -HUP <PID>
kill -INT <PID>
kill -KILL <PID>
kill -TERM <PID>
kill -CONT <PID>
kill -STOP <PID>

HUP означає покласти трубку. Він надсилається автоматично, коли вікно термінала, яке розпочало процес, закривається перед завершенням процесу.

INT означає переривання, і він надсилає той самий сигнал, який використовується, коли ми натискаємо ctrl-C термінал, який зазвичай завершує процес.

KILL надсилається не до процесу, а до ядра операційної системи, яке негайно зупиняє та завершує процес.

TERM означає припинити. Процес отримає його та припинить роботу. Це стандартний сигнал, який надсилає kill.

CONT означає продовжувати. Його можна використовувати для відновлення зупиненого процесу.

STOP надсилається не до процесу, а до ядра операційної системи, яке негайно зупиняє (але не припиняє) процес.

Натомість ви можете побачити числа, наприклад kill -1 <PID>. В цьому випадку,

1 відповідає HUP.
2 відповідає INT.
9 відповідає KILL.
15 відповідає TERM.
18 відповідає CONT.
15 відповідає STOP.

Команда Linux killall

Подібно до kill команди, killall надсилатиме сигнал до кількох процесів одночасно замість того, щоб надсилати сигнал певному ідентифікатору процесу.

Ось синтаксис:

killall <name>

де name назва програми. Наприклад, ви можете top запустити кілька екземплярів програми та killall top завершити їх усі.

Ви можете вказати сигнал, як-от kill (і перегляньте посібник, щоб дізнатися більше про конкретні типи сигналів, які ми можемо надсилати), наприклад:

killall -HUP top

Команда Linux jobs

Коли ми запускаємо команду в Linux / macOS, ми можемо налаштувати її виконання у фоновому режимі за допомогою & символу після команди.

Наприклад, ми можемо працювати top у фоновому режимі:

top &

Це дуже зручно для тривалих програм.

Ми можемо повернутися до цієї програми за допомогою fg команди. Це добре працює, якщо ми маємо лише одне завдання у фоновому режимі, інакше нам потрібно використовувати номер завдання: fg 1 і fg 2 так далі.

Щоб отримати номер завдання, ми використовуємо jobsкоманду.

Скажімо, ми запускаємо, top &⁣, а потім top -o mem &, тож у нас є 2 запущені найвищі екземпляри. jobs скаже нам це:

Screen-Shot-2020-09-03-at-11.49.42
Тепер ми можемо повернутися до одного з тих, хто використовує fg <jobid>. Щоб знову зупинити програму, ми можемо натиснути cmd-Z.

Запуск jobs -l також друкує ідентифікатор процесу кожного завдання.

Команда Linux bg

Коли команда виконується, її можна призупинити за допомогою ctrl-Z.

Команда негайно припиниться, і ви повернетеся до термінала оболонки.

Ви можете відновити виконання команди у фоновому режимі, щоб вона продовжувала працювати, але це не заважало вам виконувати іншу роботу в терміналі.

У цьому прикладі я зупинив 2 команди:

Screen-Shot-2020-09-03-at-16.06.18
Я можу запустити bg 1, щоб відновити у фоновому режимі виконання завдання №1.

Я міг би також сказати bg без будь-якої опції, оскільки за умовчанням вибирається робота №1 у списку.

Команда Linux fg

Коли команда виконується у фоновому режимі, тому що ви почали її за допомогою & в кінці (приклад: top & або тому, що ви перемістили її у фоновий режим за допомогою bg команди), ви можете вивести її на передній план за допомогою fg.

Запуск

fg

відновить на передньому плані останню роботу, яку було призупинено.

Ви також можете вказати, яке завдання ви хочете відновити на передньому плані, передавши номер завдання, який можна отримати за допомогою jobs команди.

Screen-Shot-2020-09-03-at-16.12.46

Запуск fg 2 відновить роботу №2:

Screen-Shot-2020-09-03-at-16.12.54

Команда Linux type

Команда може бути одного з цих 4 типів:

  • виконуваний файл
  • вбудована програма оболонки
  • функція оболонки
  • псевдонім

Команда type може допомогти зрозуміти це, якщо ми хочемо знати або нам просто цікаво. Він розповість вам, як команда буде інтерпретована.

Результат буде залежати від використовуваної оболонки. Це Bash:

Screen-Shot-2020-09-03-at-16.32.50

Це Zsh:

Screen-Shot-2020-09-03-at-16.32.57

Це Fish:

Screen-Shot-2020-09-03-at-16.33.06
Однією з найцікавіших речей тут є те, що для псевдонімів він покаже вам, до чого він прив’язаний. Ви можете побачити ll псевдонім у випадку Bash і Zsh, але Fish надає його за замовчуванням, тому він скаже вам, що це вбудована функція оболонки.

Команда Linux which

Припустімо, що у вас є команда, яку ви можете виконати, оскільки вона знаходиться в шляху оболонки, але ви хочете знати, де вона знаходиться.

Ви можете зробити це за допомогою which. Команда поверне шлях до вказаної команди:

Screen-Shot-2020-09-03-at-17.22.47
which працюватиме лише для виконуваних файлів, що зберігаються на диску, а не для псевдонімів чи вбудованих функцій оболонки.

Команда Linux nohup

Іноді вам потрібно запустити довготривалий процес на віддаленій машині, а потім потрібно відключитися.

Або ви просто хочете запобігти зупинці команди, якщо між вами та сервером виникне якась мережева проблема.

Спосіб змусити команду виконуватися навіть після того, як ви вийшли з системи або закрили сеанс із сервером, — це використати nohup команду.

Використовуйте nohup <command>, щоб процес продовжував працювати навіть після виходу з системи.

Команда Linux xargs

Команда xargs використовується в оболонці UNIX для перетворення стандартного введення в аргументи команди.

Іншими словами, за допомогою використання xargs виведення команди використовується як вхід іншої команди.

Ось синтаксис, який ви будете використовувати:

command1 | xargs command2

Ми використовуємо трубу ( | ), щоб передати вивід до xargs. Це подбає про виконання command2 команди, використовуючи вихідні дані command1 як аргумент(и).

Зробім простий приклад. Ви хочете видалити певні файли з каталогу. Ці файли перераховані всередині текстового файлу.

У нас є 3 файли: file1file2file3.

У todelete.txt нас є список файлів, які ми хочемо видалити, у цьому прикладі file1 та file3:

Screen-Shot-2020-09-08-at-07.45.28

Ми скеруємо вихід cat todelete.txt до rm команди через xargs.

Таким чином:

cat todelete.txt | xargs rm

Це результат, файли, які ми перерахували, тепер видалено:

Screen-Shot-2020-09-08-at-07.46.39

Це працює так, що xargs виконується rm 2 рази, по одному для кожного рядка, повернутого cat.

Це найпростіше використання xargs. Є кілька варіантів, які ми можемо використати.

Одним із найкорисніших, на мій погляд (особливо на початку навчання xargs), є -p. Використання цього параметра змусить xargs надрукувати підтвердження з діями, які він збирається виконати:

Screen-Shot-2020-09-08-at-08.19.09

Ця -n опція дозволяє вказувати xargsвиконувати одну ітерацію за раз, щоб ви могли окремо підтверджувати їх за допомогою -p. Тут ми кажемо xargs виконувати одну ітерацію за раз за допомогою -n1:

Screen-Shot-2020-09-08-at-08.32.58

Цей -I варіант є ще одним широко використовуваним. Це дозволяє вам отримати вихідні дані в заповнювач, а потім ви можете робити різні речі.

Одним із них є виконання кількох команд:

command1 | xargs -I % /bin/bash -c 'command2 %; command3 %'
Screen-Shot-2020-09-08-at-08.35.37

Ви можете замінити % символ, який я використовував вище, будь-яким іншим – це змінна.

Команда редактора Linux vim

vim є дуже популярним редактором файлів, особливо серед програмістів. Він активно розробляється та часто оновлюється, і навколо нього є велика спільнота. Існує навіть конференція Vim !

vi в сучасних системах є псевдонімом для vim, що означає покращений

Ви запускаєте його vi з командного рядка.

Скріншот-2019-02-10-at-11.44.36

Ви можете вказати назву файлу під час виклику, щоб редагувати цей конкретний файл:

vi test.txt
Скріншот-2019-02-10-at-11.36.21

Ви повинні знати, що Vim має 2 основні режими:

  • командний (або звичайний) режим
  • режим вставки

Коли ви запускаєте редактор, ви перебуваєте в командному режимі. Ви не можете вводити текст так, як очікуєте від редактора на основі графічного інтерфейсу користувача. Ви повинні увійти в режим вставки.

Це можна зробити, натиснувши i клавішу. Коли ви це зробите, -- INSERT -- слово з’явиться внизу редактора:

Скріншот-2019-02-10-at-11.47.39

Тепер ви можете почати вводити текст і заповнювати екран вмістом файлу:

Скріншот-2019-02-10-at-11.48.39

Ви можете переміщатися по файлу за допомогою клавіш зі стрілками або за допомогою клавіш h – j – k – lh-l для ліворуч-праворуч, j-k для вниз-вгору.

Після завершення редагування ви можете натиснути escклавішу, щоб вийти з режиму вставки та повернутися до командного режиму.

Скріншот-2019-02-10-at-11.48.44
На цьому етапі ви можете переміщатися по файлу, але ви не можете додавати до нього вміст (і будьте обережні, які клавіші ви натискаєте, оскільки це можуть бути команди).

Єдине, що ви можете зробити зараз, це зберегти файл. Це можна зробити, натиснувши :(двокрапка), а потім w.

Ви можете зберегти та вийти, натиснувши : потім w і q: :wq

Ви можете вийти без збереження, натиснувши : потім q і ! : :q!

Ви можете скасувати або відредагувати, перейшовши в командний режим і натиснувши u. Ви можете повторити (скасувати скасування), натиснувши ctrl-r.

Це основи роботи з Vim. Звідси починається кроляча нора, в яку ми не можемо зайти в цьому невеликому вступі.

Я згадаю лише ті команди, які допоможуть вам почати редагування у Vim:

  • натискання x клавіші видаляє поточний виділений символ
  • натискання A переходить до кінця поточного вибраного рядка
  • натисніть 0, щоб перейти до початку рядка
  • перейдіть до першого символу слова та натисніть d, а потім натисніть, w, щоб видалити це слово. Якщо після нього натиснути e замість w, пробіл перед наступним словом збережеться
  • використовуйте число між d та w, щоб видалити більше ніж 1 слово, наприклад, використовуйте d3w, щоб видалити 3 слова вперед
  • натисніть d і потім, d, щоб видалити весь рядок. Натисніть d, а потім, $, щоб видалити весь рядок від курсора до кінця

Команда редактора Linux emacs

emacs це чудовий редактор, який історично вважається редактором для систем UNIX. Відомі, vi vs emacs полум’яні війни і палкі дискусії викликали багато непродуктивних годин для розробників по всьому світу.

emacs дуже потужний. Деякі люди використовують його цілий день як своєрідну операційну систему. Тут ми поговоримо лише про основи.

Ви можете відкрити новий сеанс emacs, просто викликавши emacs:

Скріншот-2019-02-10-at-14.12.18

Користувачі macOS, зупиніться зараз. Якщо ви використовуєте Linux, проблем немає, але macOS не постачає програми, що використовують GPLv3, і кожна вбудована команда UNIX, яка була оновлена ​​до GPLv3, не оновлена.

Хоча є невелика проблема з командами, які я перерахував досі, у цьому випадку використання версії emacs з 2007 року не зовсім те саме, що використання версії з 12 роками вдосконалень і змін.

Це не проблема з Vim, який оновлений. Щоб виправити це, запустіть brew install emacsі запущено emacs використовуватиме нову версію від Homebrew.

Ви також можете редагувати існуючий файл, викликавши emacs <filename>:

Скріншот-2019-02-10-13.12.49

Тепер можна почати редагування. Закінчивши, натисніть ctrl-x і потім ctrl-w. Ви підтверджуєте папку:

Скріншот-2019-02-10-at-13.14.29

і Emacs повідомляє вам, що файл існує, запитуючи, чи слід перезаписати його:

Скріншот-2019-02-10-at-13.14.32

Дайте відповідь y, і ви отримаєте підтвердження успіху:

Скріншот-2019-02-10-at-13.14.35
Ви можете вийти з Emacs, натиснувши ctrl-x потім ctrl-c.
Або ctrl-x після c(утримуйте ctrl натиснутою).

Про Emacs можна знати багато, напевно більше, ніж я можу написати в цьому невеликому вступі. Я пропоную вам відкрити Emacs і натиснути кнопку ctrl-h r, щоб відкрити вбудований посібник і ctrl-h t відкрити офіційний посібник.

Команда редактора Linux nano

nano є зручним для початківців редактором.

Запустіть його за допомогою nano <filename>.

Ви можете безпосередньо вводити символи у файл, не турбуючись про режими.

Ви можете вийти без редагування за допомогою ctrl-X. Якщо ви редагували файловий буфер, редактор запитає у вас підтвердження, і ви можете зберегти зміни або скасувати їх.

У довідці внизу показано команди клавіатури, які дозволяють працювати з файлом:

Скріншот-2019-02-10-at-11.03.51
pico більш-менш такий самий, хоча nano — це GNU версія pico яка в якийсь момент в історії не була відкритим вихідним кодом. Nano-клон був зроблений для задоволення вимог ліцензії операційної системи GNU.

Команда Linux whoami

Введіть whoami, щоб надрукувати ім’я користувача, який зараз увійшов у сеанс термінала:

Screen-Shot-2020-09-03-at-18.08.05

Примітка: це відрізняється від who am i команди, яка друкує більше інформації

Команда Linux who

Команда who показує користувачів, які ввійшли в систему.

Якщо ви не користуєтеся сервером, до якого мають доступ кілька людей, швидше за все, ви будете єдиним користувачем, який входив у систему кілька разів:

Screen-Shot-2020-09-03-at-18.03.05

Чому кілька разів? Оскільки кожна відкрита оболонка вважатиметься доступом.

Ви можете побачити назву використаного термінала та час/день початку сеансу.

-aH прапорці повідомлять who показати більше інформації, включаючи час простою та ідентифікатор процесу термінала:

Screen-Shot-2020-09-03-at-18.05.29

Спеціальна who am i команда перерахує деталі поточного термінального сеансу:

Screen-Shot-2020-09-03-at-18.06.35
Screen-Shot-2020-09-03-at-18.07.30

Команда Linux su

Якщо ви ввійшли в оболонку терміналу з одним користувачем, вам може знадобитися перейти до іншого користувача.

Наприклад, ви ввійшли як root, щоб виконати певне технічне обслуговування, але потім хочете перейти до облікового запису користувача.

Ви можете зробити це за допомогою su команди:

su <username>

Наприклад: su flavio.

Якщо ви ввійшли як користувач, запуск su без будь-яких інших програм запропонує вам ввести root пароль користувача, оскільки це типова поведінка.

Screen-Shot-2020-09-03-at-18.18.09
su запустить нову оболонку як інший користувач.

Коли ви закінчите, введення exit в оболонку закриє цю оболонку та поверне вас назад до оболонки поточного користувача.

Команда Linux sudo

sudo зазвичай використовується для виконання команд від імені root.

У вас має бути ввімкнено використання sudo, і після цього ви зможете запускати команди від імені root, ввівши пароль користувача (а не пароль користувача root).

Дозволи легко налаштовуються, що чудово, особливо в багатокористувацькому серверному середовищі. Деяким користувачам можна надати доступ до виконання певних команд через sudo.

Наприклад, ви можете редагувати файл конфігурації системи:

sudo nano /etc/hosts

який інакше не вдалося б зберегти, оскільки ви не маєте на це дозволів
.

Ви можете запустити sudo -i оболонку як root:

Screen-Shot-2020-09-03-at-18.25.50

Ви можете використовувати sudo для запуску команд як будь-який користувач. root за замовчуванням, але використовуйте -u опцію, щоб вказати іншого користувача:

sudo -u flavio ls /Users/flavio

Команда Linux passwd

Користувачам у Linux призначається пароль. Ви можете змінити пароль за допомогою passwd команди.

Тут є дві ситуації.

По-перше, коли ви хочете змінити свій пароль. У цьому випадку ви вводите:

passwd

і інтерактивна підказка запитає вас про старий пароль, а потім новий:

Screen-Shot-2020-09-04-at-07.32.05

Якщо ви root(або маєте права суперкористувача), ви можете встановити ім’я користувача, для якого ви хочете змінити пароль:

passwd <username> <new password>

У цьому випадку вам не потрібно вводити старий.

Команда Linux ping

Команда ping перевіряє певний мережевий хост, у локальній мережі чи в Інтернеті.

Ви використовуєте його з синтаксисом, ping <host> де <host> може бути ім’я домену або IP-адреса.

Ось приклад пінгування google.com:

Screen-Shot-2020-09-09-at-15.21.46
Команда надсилає запит на сервер, а сервер повертає відповідь.

ping за замовчуванням продовжує надсилати запит щосекунди. Він працюватиме, доки ви не зупините його за допомогою ctrl-C, якщо не вкажете кількість разів, яку ви бажаєте спробувати за допомогою -c параметра: ping -c 2 google.com.

Після зупинки ping надрукує деякі статистичні дані про результати: відсоток втрачених пакетів і статистичні дані про продуктивність мережі.

Як бачите, на екрані друкується IP-адреса хоста та час, який знадобився для отримання відповіді.

Не всі сервери підтримують pinging, якщо запит закінчився:

Screen-Shot-2020-09-09-at-15.21.27

Іноді це робиться спеціально, щоб «приховати» сервер або просто зменшити навантаження. Пакети ping також можна фільтрувати за допомогою брандмауерів.

ping працює за допомогою протоколу ICMP (Internet Control Message Protocol), протоколу мережевого рівня, такого ж, як TCP або UDP.

Запит надсилає на сервер пакет із ECHO_REQUEST повідомленням, а сервер повертає ECHO_REPLY повідомлення. Я не буду вдаватися в подробиці, але це основна концепція.

Пропонувати пінг хосту корисно, щоб дізнатися, чи доступний хост (припустимо, він реалізує ping), і наскільки він віддалений з точки зору того, скільки часу потрібно, щоб зв’язатися з вами.

Зазвичай чим ближче сервер географічно, тим менше часу знадобиться для повернення до вас. Прості фізичні закони спричиняють більшу відстань до збільшення затримки в кабелях.

Команда Linux traceroute

Коли ви намагаєтесь зв’язатися з хостом в Інтернеті, ви використовуєте домашній маршрутизатор. Потім ви досягаєте мережі свого провайдера, який, своєю чергою, проходить через власний вихідний мережевий маршрутизатор і так далі, поки ви нарешті не досягнете хоста.

Ви коли-небудь хотіли знати, які кроки проходять ваші пакети, щоб це зробити?

Для traceroute цього створена команда.

Ви викликаєте

traceroute <host>

і він (повільно) збере всю інформацію під час подорожі пакета.

У цьому прикладі я спробував знайти свій блог за допомогою traceroute flaviocopes.com:

Screen-Shot-2020-09-09-at-16.32.01

Не кожен пройдений маршрутизатор повертає нам інформацію. У цьому випадку traceroute друкує * * *. В іншому випадку ми можемо побачити ім’я хоста, IP-адресу та деякі показники продуктивності.

Для кожного маршрутизатора ми можемо побачити 3 зразки, що означає, що traceroute намагається за замовчуванням 3 рази, щоб отримати точну індикацію часу, необхідного для його досягнення.

Ось чому виконання займає стільки часу, traceroute ніж просто виконання ping на цьому хості.

Ви можете налаштувати це число за допомогою -q опції:

traceroute -q 1 flaviocopes.com
Screen-Shot-2020-09-09-at-16.36.07

Команда Linux clear

Введіть clear, щоб очистити всі попередні команди, запущені в поточному терміналі.

Екран очиститься, і ви побачите підказку вгорі:

Screen-Shot-2020-09-03-at-18.10.32

Примітка: ця команда має зручний ярлик: ctrl-L

Після того, як ви це зробите, ви втратите доступ до прокручування, щоб побачити результат попередніх введених команд.

Тож, можливо, ви захочете скористатися clear -x натомість, яка все одно очищає екран, але дозволяє повернутися до попередньої роботи, прокрутивши вгору.

Команда Linux history

Щоразу, коли ви виконуєте команду, вона запам’ятовується в історії.

Ви можете відобразити всю історію за допомогою:

history

Це показує історію з числами:

Screen-Shot-2020-09-04-at-08.03.10

Ви можете використовувати синтаксис !<command number> для повторення команди, збереженої в історії. У наведеному вище прикладі введення !121 повторить ls -al | wc -l команду.

Зазвичай останні 500 команд зберігаються в історії.

Ви можете поєднати це з grep, щоб знайти команду, яку ви запустили:

history | grep docker

Screen-Shot-2020-09-04-at-08.04.50
Щоб очистити історію, запустіть history -c.

Команда Linux export

Команда export використовується для експорту змінних до дочірніх процесів.

Що це означає?

Припустімо, що у вас є змінна TEST, визначена таким чином:

TEST="test"

Ви можете надрукувати його значення за допомогою echo $TEST:

Screen-Shot-2020-09-09-at-17.32.49

Але якщо ви спробуєте визначити сценарій Bash у файлі script.sh за допомогою наведеної вище команди:

Screen-Shot-2020-09-09-at-17.35.23

Після встановлення chmod u+x script.sh і виконання цього скрипту за допомогою ./script.sh, рядок echo $TEST не надрукує нічого!

Це тому, що в Bash TEST змінна була визначена локально для оболонки. Під час виконання сценарію оболонки або іншої команди для її виконання запускається підоболонка, яка не містить поточних локальних змінних оболонки.

Щоб зробити змінну там доступною, нам потрібно визначити TEST не таким чином:

TEST="test"

але таким чином:

export TEST="test"

Спробуйте це, і запущений ./script.sh зараз має надрукувати «test»:

Screen-Shot-2020-09-09-at-17.37.56
Іноді вам потрібно щось додати до змінної. Це часто робиться за допомогою PATH змінної. Ви використовуєте цей синтаксис:

export PATH=$PATH:/new/path

Його зазвичай використовують export, коли ви створюєте нові змінні таким чином. Але ви також можете використовувати його, коли створюєте змінні у файлах конфігурації .bash_profile або .bashrc за допомогою Bash або за .zshenv допомогою Zsh.

Щоб видалити змінну, скористайтеся -n опцією:

export -n TEST

Виклик exportбез жодного параметра покаже список усіх експортованих змінних.

Команда Linux crontab

Завдання Cron — це завдання, виконання яких заплановано через певні проміжки часу. Ви можете мати команду виконувати щось щогодини, або щодня, або кожні 2 тижні. Або у вихідні.

Вони дуже потужні, особливо коли використовуються на серверах для виконання технічного обслуговування та автоматизації.

Команда crontab є точкою входу для роботи із завданнями cron.

Перше, що ви можете зробити, це дослідити, які завдання cron визначені вами:

crontab -l

Ви можете не мати жодного, як я:

Screen-Shot-2020-09-09-at-17.54.31

запуск

crontab -e

для редагування завдань cron і додавання нових.

За замовчуванням це відкривається редактором за замовчуванням, яким зазвичай є vim. Мені подобається nano більше. Ви можете використовувати цей рядок для використання іншого редактора:

EDITOR=nano crontab -e

Тепер ви можете додати один рядок для кожного завдання cron.

Синтаксис для визначення завдань cron якийсь страшний. Ось чому я зазвичай використовую вебсайт, щоб допомогти мені створити його без помилок: https://crontab-generator.org/

Screen-Shot-2020-09-09-at-18.03.57

Ви вибираєте інтервал часу для завдання cron і вводите команду для виконання.

Я вирішив запускати сценарій, розташований через /Users/flavio/test.sh кожні 12 годин. Це рядок crontab, який мені потрібно запустити:

* */12 * * * /Users/flavio/test.sh >/dev/null 2>&1

я запускаю crontab -e:

EDITOR=nano crontab -e

і я додаю цей рядок, потім натискаю ctrl-X й натискаю y, щоб зберегти.

Якщо все йде добре, завдання cron налаштовано:

Screen-Shot-2020-09-09-at-18.06.19

Коли це буде зроблено, ви зможете переглянути список активних завдань cron, виконавши:

crontab -l
Screen-Shot-2020-09-09-at-18.07.00

Ви можете видалити знову запущене завдання cron crontab -e, видаливши рядок і вийшовши з редактора:

Screen-Shot-2020-09-09-at-18.07.40
Screen-Shot-2020-09-09-at-18.07.49

Команда Linux uname

Виклик uname без будь-яких параметрів поверне кодову назву операційної системи:

Screen-Shot-2020-09-07-at-07.37.41

Параметр m показує назву обладнання (x86_64 у цьому прикладі), а p параметр друкує назву архітектури процесора (i386 у цьому прикладі):

Screen-Shot-2020-09-07-at-07.37.51

Параметр s друкує назву операційної системи. r друкує випуск і v друкує версію:

Screen-Shot-2020-09-07-at-07.37.56

Параметр n друкує назву мережі вузла:

Screen-Shot-2020-09-07-at-07.38.01

Опція a друкує всю доступну інформацію:

Screen-Shot-2020-09-07-at-07.38.06

У macOS ви також можете використовувати sw_vers команду для друку додаткової інформації про операційну систему macOS. Зауважте, що це відрізняється від версії Darwin (ядро), яка вище є 19.6.0.

Darwin — це назва ядра macOS. Ядро є «ядром» операційної системи, тоді як операційна система в цілому називається macOS. У Linux Linux є ядром, а GNU/Linux — це назва операційної системи (хоча ми всі називаємо її «Linux»).

Команда Linux env

Цю env команду можна використовувати для передачі змінних середовища, не встановлюючи їх у зовнішньому середовищі (поточній оболонці).

Припустімо, ви хочете запустити програму Node.js і встановити USER для неї змінну.

Ви можете запустити

env USER=flavio node app.js

і USER змінна середовища буде доступна з програми Node.js через process.env інтерфейс Node.

Ви також можете виконати команду, очищаючи всі вже встановлені змінні середовища, використовуючи -i параметр:

env -i node app.js

У цьому випадку ви отримаєте повідомлення про помилку, env: node: No such file or directory оскільки node команда недоступна, оскільки PATH змінна, яка використовується оболонкою для пошуку команд у загальних шляхах, не встановлена.

Тому потрібно передати повний шлях до node програми:

env -i /usr/local/bin/node app.js

Спробуйте простий app.js файл із таким вмістом:

console.log(process.env.NAME)
console.log(process.env.PATH)

Ви побачите результат як

undefined
undefined

Ви можете передати змінну env:

env -i NAME=flavio node app.js

і вихід буде

flavio
undefined

Видалення -i опції знову стане PATH доступним у програмі:

Screen-Shot-2020-09-10-at-16.55.17

Цю env команду також можна використовувати для виведення всіх змінних середовища. Якщо запустити без параметрів:

env

він поверне список встановлених змінних середовища, наприклад:

HOME=/Users/flavio
LOGNAME=flavio
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
PWD=/Users/flavio
SHELL=/usr/local/bin/fish

Ви також можете зробити змінну недоступною в програмі, яку ви запускаєте, використовуючи -u параметр. Наприклад, цей код видаляє HOME змінну з командного середовища:

env -u HOME node app.js

Команда Linux printenv

Ось короткий посібник щодо printenv команди, яка використовується для друку значень змінних середовища

У будь-якій оболонці є велика кількість змінних середовища, встановлених або системою, або вашими власними сценаріями оболонки та конфігурацією.

Ви можете надрукувати їх усі на терміналі за допомогою printenv команди. Результат буде приблизно таким:

HOME=/Users/flavio
LOGNAME=flavio
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
PWD=/Users/flavio
SHELL=/usr/local/bin/fish

з кількома додатковими рядками, зазвичай.

Ви можете додати назву змінної як параметр, щоб показати лише значення цієї змінної:

printenv PATH
Screen-Shot-2020-09-10-at-16.31.20

Висновок

Дуже дякую, що прочитали цей посібник.

Сподіваюся, це надихне вас дізнатися більше про Linux та його можливості. Це вічнозелені знання, які не скоро застаріють.

Якщо помітили помилки чи неточності, будь ласка, залишіть коментар чи напишіть листа на поштову адресу [email protected]

1 thought on “Посібник з команд Linux – Вивчіть команди Linux для початківців”

  1. Вадим :

    Чудовий посібник! Лаконічні як описи команд, так і приклади.
    Щиро дякую і бажаю успіхів в популярізації Linux!

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *