Оболонка Bash – шпаргалка для початківців


Дізнайтесь більше про нові кар'єрні можливості в 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

Якщо Ви хочете вивести конкретний файловий дескриптор, то можете приписати його номер >.

Ім’яДескрипторОпис
stdin0Стандартний потік введення
stdout1Стандартний потік виведення
stderr2Стандартний потік виведення помилок

Наприклад, для перенаправлення 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?


Trends: баш приклади програм

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

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