
Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.
У цій шпаргалці розглядаються такі теми: введення в оболонку, навігація, основні команди, змінне оточення, конектори, конвеєри, перенаправлення введення/виведення, права доступу і комбінації клавіш.
Оболонка Bash: введення
Оболонка, або шелл (shell) – це програма, у нас має назву “bash”, що є скороченням від Bourne Again Shell. Оболонка приймає Ваші команди і передає їх операційній системі. Для взаємодії із системою використовуються термінали, такі як gnome-terminal, eterm, nxterm і т. ін.
Навігація
У Linux файли і каталоги мають ієрархічну організацію, тобто є деякий початковий каталог, що називається “кореневим”. У ньому містяться файли і підкаталоги, які, у свою чергу, містять файли і свої підкаталоги.
pwd
Команда pwd
, скорочення від print working directory, відображає поточне місце розташування в структурі каталогів.
cd
Команда cd
дозволяє перейти в новий каталог.
Синтаксис | Пояснення |
---|---|
cd | Переміщення в домашній каталог |
cd ~ | Переміщення в домашній каталог |
cd . | Переміщення на один рівень вище |
cd - | Переміщення в попередній каталог |
cd Directory1 | Переміщення в каталог Directory1 |
cd Directory1/Directory2 | Переміщення в каталог Directory2 за вказаним шляхом |
mkdir
Команда mkdir
створює новий каталог у поточному каталозі.
Основні команди
man
Команда man
відображає керівництво по командах. Наприклад, наступна команда видасть усю інформацію про команду cat
:
$ man cat
cat
Команда cat
зчитує файл, переданий як аргумент, і виводить його вміст стандартним каналом виведення. Передача декількох файлів у вигляді аргументу приведе до виведення конкатенованого вмісту всіх файлів.
echo
Команда echo
виводить свої аргументи стандартним каналом виведення.
$ echo Hello World Hello World
Якщо викликати echo
без аргументів, то буде виведений порожній рядок.
head
Команда head
читає перші 10 рядків будь-якого переданого тексту і виводить їх стандартним каналом. Число виведених рядків можна змінити:
$ head - 50 test.txt
tail
Команда tail
працює аналогічно команді head
, але читає рядки з кінця:
$ tail - 50 test.txt
Також можна переглядати рядки, що додаються до файлу, в режимі реального часу за допомогою прапора - f
:
$ tail - f test.txt
less
Команда less
дозволяє переміщатися переданим файлом або уривком тексту, причому в обох напрямах.
$ less test.txt$ ps aux | less
Детальніше про призначення символу | буде розказано нижче, в розділі команди history
.
Звичайні сполучення клавіш | Опис |
---|---|
G | Переміщує в кінець файлу |
g | Переміщує в початок файлу |
:50 | Переміщує на 50-й рядок файлу |
q | Вихід з less |
/searchterm | Пошук рядка, що збігається з ‘searchterm’, нижче поточного рядка |
/ | Переміщує на наступний відповідний результат пошуку |
?searchterm | Пошук рядка, що збігається з ‘searchterm’, вище поточного рядка |
? | Переміщує на наступний відповідний результат пошуку |
up | Переміщує на один рядок вище |
down | Переміщує на один рядок нижче |
pageup | Переміщує на одну сторінку вище |
pagedown | Переміщує на одну сторінку нижче |
true
Команда true
завжди повертає нуль як вихідний статус для індикації успіху.
false
Команда false
завжди повертає не-ноль як вихідний статус для індикації невдачі.
$?
$?
– це змінна, яка містить вихідний статус останньої запущеної команди. Під статусом зазвичай розуміється код повернення програми. 0 означає успішне виконання програми, будь-яке значення більше 0 відбиває той факт, що в процесі виконання виникли деякі помилки. До речі, саме тому в bash істинною (true) вважається 0, а все, що не 0 – брехнею (false) :
$ true$ echo $? 0$ false$ echo $? 1
grep
Команда grep
займається пошуком переданого рядка у вказаному файлі:
$ cat users.txt user:student password:123 user:teacher password:321$ grep 'student' file1.txt user:student password:123
grep
також може приймати декілька файлів і регулярних виразів для уточнення формату тексту.
Звичайні прапори | Опис |
---|---|
- i | Відключення чутливості до регістра |
- r | Рекурсивний пошук директоріями |
- w | Пошук тільки цілих слів |
- c | Виведення кількості знайдених елементів |
- n | Виведення всього рядка, що містить запит |
- v | Виведення інвертованого збігу |
Також можна ознайомитися з керівництвом по regex. У нас на сайті є керівництво по “регулярках” у Python для новачків.
sed
Команда sed
– це потоковий редактор, що перетворює вхідні текстові дані. Зазвичай її використовують для заміни виразів: s/regexp/replacement/g
. Наприклад, наступний код замінить усі слова “Hello” на ” Hi”:
$ cat test.txt Hello World$ sed 's/Hello/Hi/g' test.txt Hi World
Також Ви можете ознайомитися з керівництвом по sed.
history
Команда history
виводить історію командного рядка. Зазвичай її використовують разом з командою grep
для пошуку конкретної команди. Наприклад, наступний код знайде всі команди, що містять рядок g++
:
$ history | grep g++
155 g++ file1.txt 159 g++ file2.txt
Тут також використовується символ | – це так званий конвеєр (pipe). Завдяки ньому можна перенаправляти виведення однієї команди на вхід інший – таким чином, у прикладі, наведеному вище, вся історія, яка в звичайному режимі виводиться командою history
прямо у виведення термінала, буде перенаправлена в grep як вхідні дані. Ми не побачимо виведення команди history
, але побачимо виведення команди grep
.
Це може бути складно для розуміння без практики, тому поекспериментуйте самостійно, наприклад з командами ls
, history
, ps
(описана нижче) перенаправляючи їх виведення в grep
, sed
чи less
, наприклад.
export
Команда export
встановлює змінне оточення для передачі дочірнім процесам. Наприклад, так можна передати змінну name
зі значенням student
:
$ export name=student
ps
Команда ps
виводить інформацію про запущені процеси.
$ ps PID TTY TIME CMD 35346 pts/2 00: 00: 00 bash
Виводиться чотири елементи:
- ID процесу (PID),
- тип термінала (TTY),
- час роботи процесу (TIME),
- ім’я команди, яка запустила процес (CMD).
awk
Команда awk
знаходить і замінює текст у файлах за заданим шаблоном: awk 'pattern {action}' test.txt
wget
Команда wget
скачує файли з Мережі й розміщує їх в поточний каталог.
$ wget https://github.com/mikeizbicki/ucr-cs100
nc
Команда nc
– це утиліта для відладки Мережі. Також можна ознайомитися з керівництвом по nc.
ping
Команда ping
тестує мережеве підключення.
$ ping google.com PING google.com (74.125.224.34) 56 (84) bytes of data. 64 bytes from lax17s01 - in - f2.1e100.net (74.125.224.34): icmp_req=1 ttl=57 time=7.82 ms --- google.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 8ms rtt min/avg/max/mdev = 7.794/8.422/10.792/0.699 ms
Статистика у кінці показує кількість підключень, здійснених до завершення команди, і час їх виконання.
git
Git
– це популярна система контролю версій. Також можна ознайомитися з керівництвом по git і нашими матеріалами.
Змінне оточення
Змінне оточення – це іменовані змінні, що містять значення, використовувані одним або декількома додатками.
Змінна PATH
містить список каталогів, у яких система шукає виконувані файли.
Змінна HOME
містить шлях до домашнього каталогу поточного користувача.
Конектори
Конектори дозволяють запускати декілька команд одночасно.
Конектор | Опис |
---|---|
&& | Перша команда виконується завжди, друга – тільки у разі успішного завершення першої |
|| | Перша команда виконується завжди, друга – тільки у випадку невдалого завершення першої |
; | Команди виконуються завжди |
$ true && echo Hello Hello$ false || echo Hello Hello$ echo Hello ; ls Hello test.txt file1.txt file2.txt
Конвеєри
Конвеєри, або пайпи, дозволяють сполучати вхідні і вихідні канали різних команд. У наступному прикладі виведення команди ls
буде переданий в head
, і в результаті надрукованими будуть лише 10 перших елементів.
$ ls - l | head
Перенаправлення введення/виведення
Перенаправлення виведення
Для стандартного перенаправлення виведення використовуються символи >
і >>
.
Наприклад, цей код передасть виведення ls
у файл, а не на екран:
$ ls > files.txt$ cat files.txt file1.cpp sample.txt
Якщо файлу немає, то він створюється, а якщо є, то перезаписується. Щоб уникнути перезапису варто використати команду >>
– вона дописує дані в кінець файлу.
Перенаправлення введення
Для стандартного перенаправлення виведення використовується символ <
. У наступному прикладі sort
бере вхідні дані з файлу, а не з клавіатури:
$ cat files.txt c b$ sort < files.txt b c
Команда sort
виводить вміст файлу на екран, оскільки ми не перенаправили вихід. Це можна зробити так:
$ sort < files.txt > files_sorted.txt
Просунуте перенаправлення
Додавання &
до >
приводить до перенаправлення як стандартного потоку виходу, так і потоку помилок. Наприклад, файл test.cpp
виведе рядок stdout
у cout
і рядок stderr
у cerr
.
$ g++ test.cpp$ ./a.out >& test.txt$ cat test.txt stdout stderr
Якщо Ви хочете вивести конкретний файловий дескриптор, то можете приписати його номер >
.
Ім’я | Дескриптор | Опис |
---|---|---|
stdin | 0 | Стандартний потік введення |
stdout | 1 | Стандартний потік виведення |
stderr | 2 | Стандартний потік виведення помилок |
Наприклад, для перенаправлення stderr
у test.txt
треба зробити наступне:
$ g++ test.cpp$ ./a.out 2> test.txt stdout$ cat test.txt stderr
Права доступу
Команда ls - l
виводить багато інформації про права доступу до кожного файлу:
$ ls - l test.txt - rw - rw - r-- 1 user group 1097374 January 26 2: 48 test.txt
Виведення в прикладі | Опис / можливі виведення |
---|---|
– | Тип файлу :- файлd каталог |
rw – | Права доступу власника файлу |
rw – | Права доступу членів групи-власника файлу |
r – | Права доступу інших користувачів |
user | Ім’я власника файлу |
group | Ім’я групи-власника файлу |
chmod
Команда chmod
змінює права доступу до файлу. Ось типові сполучення прапорів для зміни прав конкретних користувачів:
Буква | Користувач |
---|---|
u | Власник |
g | Член групи |
o | Інші користувачі |
a | Усі користувачі |
Ви можете викликати chmod
з описом дій над конкретним файлом. Символ -
означає видалення прав, символ +
– додавання. Наступний приклад зробить файл доступним для читання і запису власникові й групі:
$ chmod ug+rw test.txt$ ls - l test.txt - rw - rw---- 1 user group 1097374 January 26 2: 48 test.txt
Крім того, chmod
можна використати із вісімковими числами, де 1
– наявність прав, а 0
– відсутність:
rwx = 111 = 7rw - = 110 = 6r - x = 101 = 5r-- = 100 = 4
Наступна команда спрацює так само, як і попередня:
$ chmod 660 test.txt
Також можна ознайомитися із керівництвом з прав доступу.
Сполучення клавіш
Сполучення | Опис |
---|---|
CTRL – A | Переміщення курсора в початок рядка |
CTRL – E | Переміщення курсора в кінець рядка |
CTRL – R | Пошук по історії |
CTRL – W | Вирізувати останнє слово |
CTRL – U | Вирізувати все до курсора |
CTRL – K | Вирізувати всі після курсора |
CTRL – Y | Повернути останній вирізаний рядок |
CTRL- _ | Відміна |
CTRL – L | Очищення екрана термінала |
За матеріалами Bash-Cheatsheet
Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?