2.1 Урок 1
Сертифікат: |
Linux Essentials |
---|---|
Версія: |
1.6 |
Розділ: |
2 Знайдіть свій шлях у системі Linux |
Тема: |
2.1 Основи командного рядку |
Урок: |
1 з 2 |
Вступ
Сучасні дистрибутиви Linux мають широкий набір графічних інтерфейсів користувача, але адміністратор завжди повинен знати, як працювати з командним рядком, або оболонкою (shell), як його називають. Оболонка — це програма, яка забезпечує текстове спілкування між операційною системою та користувачем. Зазвичай це програма в текстовому режимі, яка зчитує введені користувачем дані та інтерпретує їх як команди системі.
У Linux є кілька різних оболонок, це лише деякі з них:
-
нова оболонка Борна (Bash)
-
оболонка C (csh або tcsh, покращена csh)
-
оболонка Корна (ksh)
-
Z оболонка (zsh)
У Linux найпоширенішою є оболонка Bash. Вона також буде використана в прикладах та вправах в цьому курсі.
При використанні інтерактивної оболонки користувач вводить команди у командному рядку (prompt). Для кожного дистрибутива Linux командний рядок за замовчуванням може виглядати трохи інакше, але зазвичай він відповідає наступній структурі:
username@hostname current_directory shell_type
В Ubuntu або Debian GNU/Linux рядок для введення команд у звичайного користувача швидше за все, виглядатиме так:
carol@mycomputer:~$
Командний рядок суперкористувача виглядатиме так:
root@mycomputer:~#
Натомість у CentOS або Red Hat Linux командний рядок для звичайного користувача матиме такий вигляд:
[dave@mycomputer ~]$
А командний рядок суперкористувача виглядатиме так:
[root@mycomputer ~]#
Пояснимо кожен компонент структури командного рядка:
username
-
Ім’я користувача, який запустив оболонку.
hostname
-
Ім’я хоста, на якому працює оболонка. Існує також команда
hostname
, за допомогою якої ви можете відобразити або встановити ім’я хоста системи. current_directory
-
Каталог, у якому зараз знаходиться оболонка. "~" означає, що оболонка знаходиться в домашньому каталозі поточного користувача.
shell_type
-
$
вказує, що оболонка запускається звичайним користувачем.#
вказує, що оболонка запускається суперкористувачемroot
.
Оскільки нам не потрібні якісь спеціальні привілеї, ми будемо використовувати непривілейований запит у наступних прикладах. Для стислості ми просто будемо використовувати $
як командний рядок.
Структура командного рядка
Більшість команд у командному рядку мають однакову базову структуру:
команда [опція(ї)/параметр(и)...] [аргумент(и)...]
Візьмемо наступну команду в якості прикладу:
$ ls -l /home
Пояснимо призначення кожного компонента:
- Команда
-
Програма, яку буде запускати користувач –
ls
у наведеному вище прикладі. - Опція(ї)/Параметр(и)
-
“Перемикач”, який певним чином змінює поведінку команди, наприклад
-l
у наведеному вище прикладі. Доступ до параметрів можна отримати як у короткому, так і в довгому вигляді. Наприклад,-l
ідентичний--format=long
.Також можна комбінувати кілька варіантів, а для короткої форми літери зазвичай можна вводити разом. Наприклад, усі наступні команди роблять те саме:
$ ls -al $ ls -a -l $ ls --all --format=long
- Аргумент(и)
-
Додаткові дані, які потрібні програмі, як-от ім’я файлу або шлях, наприклад
/home
у наведеному вище прикладі.
Єдиною обов’язковою частиною цієї структури є сама команда. Загалом, усі інші елементи є необов’язковими, але програма може вимагати вказати певні опції, параметри чи аргументи.
Note
|
Більшість команд показують короткий огляд доступних команд, коли вони запускаються з параметром |
Типи поведінки команд
Оболонка підтримує два типи команд:
- Внутрішні
-
Ці команди є частиною самої оболонки і не є окремими програмами. Таких команд близько 30. Їх головна мета - виконувати завдання всередині оболонки (наприклад,
cd
,set
,export
). - Зовнішні
-
Ці команди містяться в окремих файлах. Зазвичай ці файли є бінарними програмами або скриптами. Коли виконується команда, яка не є внутрішньою командою оболонки, оболонка використовує змінну
PATH
для пошуку виконуваного файлу з таким же ім’ям, що й команда. На додаток до програм, які встановлюються за допомогою менеджера пакунків дистрибутива, користувачі також можуть створювати власні зовнішні команди.
Команда type
показує, якого типу є конкретна команда:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Цитування
Як користувачу Linux, вам доведеться створювати файли чи змінні, маніпулювати ними в різний спосіб. Це легко під час роботи з короткими іменами файлів та одиничними значеннями, але стає складнішим, якщо, наприклад, задіяні пробіли, спеціальні символи та змінні. Оболонки забезпечують функцію, яка називається цитуванням, вона інкапсулює такі дані за допомогою різних типів лапок (" ", ' '). У Bash є три типи цитування:
-
Подвійні лапки
-
Одинарні лапки
-
Escape-символи
Наприклад, наступні команди не діють однаково через цитування:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
Рядок із |
Подвійні лапки
Подвійні лапки говорять оболонці прийняти текст між лапками ("...") як звичайні символи. Усі спеціальні символи втрачають сенс, за винятком $
(знак долара), \
(зворотна коса риска) та `
(зворотні лапки). Це означає, що змінні, підстановка команд і арифметичні функції все ще можна використовувати.
Наприклад, подвійні лапки не впливають на заміну змінної $USER
:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
Пробіл, з іншого боку, втрачає своє значення як роздільник аргументів:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
Як бачите, у першому прикладі команда touch
створює два окремих файли, оскільки команда інтерпретує два рядки як окремі аргументи. У другому прикладі команда інтерпретує обидва рядки як один аргумент, тому створює лише один файл. Однак найкраще уникати пробілу в іменах файлів. Замість цього можна використовувати символ підкреслювання (_
) або крапку (.
).
Одинарні лапки
Одинарні лапки не мають винятків для певних символів на відміну від подвійних лапок. Вони скасовують будь-яке особливе значення кожного символу. Давайте візьмемо один із перших прикладів зверху:
$ echo I am $USER I am tom
При застосуванні одинарних лапок ви бачите інший результат:
$ echo 'I am $USER' I am $USER
Тепер команда відображає точний рядок без заміни змінної.
Escape-символи
Ми можемо використовувати escape-символи, щоб видалити спеціальні значення символів із Bash. Повернемося до змінної середовища $USER
:
$ echo $USER carol
Ми бачимо, що за замовчуванням вміст змінної відображається в терміналі. Однак, якщо ми поставимо перед знаком долара символ зворотної косої риски (\
), то особливе значення знаку долара буде зведено нанівець. Це, у свою чергу, не дозволить Bash вивести значення змінної як ім’я користувача - особи, яка виконує команду, а натомість інтерпретуватиме ім’я змінної буквально:
$ echo \$USER $USER
Якщо ви пам’ятаєте, ми можемо отримати подібні результати, використовуючи одинарні лапки, які друкують буквальний вміст того, що знаходиться між одинарними лапками. Однак escape-символ працює інакше, інструктуючи Bash ігнорувати будь-яке особливе значення символу, перед яким він знаходиться.
Вправи до посібника
-
Розділіть рядки нижче на наступні компоненти - команду(и), опцію(ї)/параметр(и) та аргумент(и):
-
Приклад:
cat -n /etc/passwd
Команда:
cat
Опція:
-n
Аргумент:
/etc/passwd
-
ls -l /etc
Команда:
Опція:
Аргумент:
-
ls -l -a
Команда:
Опція:
Аргумент:
-
cd /home/user
Команда:
Опція:
Аргумент:
-
-
Знайдіть, до якого типу належать такі команди:
Приклад:
pwd
Внутрішня команда
mv
Зовнішня команда
cd
cat
exit
-
Визначте наступні команди, які використовують лапки:
Приклад:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Дослідницькі вправи
-
За допомогою однієї команди та за допомогою дужок в Bash (перегляньте сторінку керівництва для Bash) створіть 5 файлів з номерами від 1 до 5 з префіксом
game
(game1
,game2
, …). -
Видаліть усі 5 файлів, які ви щойно створили за допомогою однієї команди, використовуючи інший спеціальний символ (перегляньте Розширення назви шляху на сторінках керівництва Bash).
-
Чи є інший спосіб змусити дві команди взаємодіяти одна з одною? Який саме?
Підсумки
У цій лабораторній роботі ви дізналися про:
-
Концепції оболонки Linux
-
Що таке оболонка Bash
-
Структура командного рядка
-
Вступ до цитування
Команди, які використовуються у вправах:
bash
-
Найпопулярніша оболонка на комп’ютерах Linux.
echo
-
Вивести текст на термінал.
ls
-
Перелік вмісту каталогу.
type
-
Показує тип команди, яка виконується.
touch
-
Створює порожній файл або оновлює дату зміни наявного файлу.
hostname
-
Показує або змінює ім’я хоста системи.
Відповіді до вправ посібника
-
Розділіть рядки нижче на наступні компоненти - команду(и), опцію(ї)/параметр(и) та аргумент(и):
-
ls -l /etc
Команда:
ls
Опція:
-l
Аргумент:
/etc
-
ls -l -a
Команда:
ls
Опція:
-l -a
Аргумент:
-
cd /home/user
Команда:
cd
Опція:
Аргумент:
/home/user
-
-
Знайдіть, до якого типу належать такі команди:
cd
Внутрішня команда
cat
Зовнішня команда
exit
Внутрішня команда
-
Визначте наступні команди, які використовують лапки:
touch "$USER"
tom
touch 'touch'
Створює файл з назвою
touch
Відповіді до дослідницьких вправ
-
За допомогою однієї команди та за допомогою дужок в Bash (перегляньте сторінку керівництва для Bash) створіть 5 файлів з номерами від 1 до 5 з префіксом
game
(game1
,game2
, …).Діапазони можна використовувати для відображення чисел від 1 до 5 в одній команді:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Видаліть усі 5 файлів, які ви щойно створили за допомогою однієї команди, використовуючи інший спеціальний символ (перегляньте Розширення назви шляху на сторінках керівництва Bash).
Оскільки всі файли починаються з
game
і закінчуються одним символом (у цьому випадку числом від 1 до 5),?
можна використовувати як спеціальний символ для останнього символу в назві файлу:$ rm game?
-
Чи є інший спосіб змусити дві команди взаємодіяти одна з одною? Який саме?
Так, одна команда може, наприклад, записувати дані у файл, який потім обробляється іншою командою. Linux також може збирати вихідні дані однієї команди та використовувати їх як вхідні дані для іншої команди. Це називається конвеєр, і ми дізнаємося більше про це на наступному уроці.