Перейти до змісту

Команди для користувачів Linux

У цьому розділі ви дізнаєтеся про команди Linux і про те, як ними користуватися.


Цілі: у цьому розділі майбутні адміністратори Linux дізнаються, як:

✔ Робити переміщення в системному дереві.
✔ Створювати текстовий файл, відображати його вміст і ** змінювати його.
✔
Використовувати** найкорисніші команди Linux.

🏁 команди користувача, linux

Знання: ⭐
Складність: ⭐

Час для читання: 40 хвилин


Загальні положення

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

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

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

Користувачі

Користувача системи Linux буде визначено у файлі /etc/passwd за допомогою:

  • Ім'я для входу, яке частіше називають "логін", без пробілів.
  • Цифровий ідентифікатор: UID (ідентифікатор користувача).
  • Ідентифікатор групи: GID (ідентифікатор групи).
  • Інтерпретатор команд, наприклад, оболонка, яка може відрізнятися для різних користувачів.
  • Каталог підключення, наприклад, домашній каталог.

В інших файлах користувача буде визначено:

  • Паролем, який шифрується перед збереженням (/etc/shadow).
  • Командний рядок або запит для входу, який символізується

    • # для адміністраторів
    • та $ для інших користувачів (/etc/profile).

Залежно від політики безпеки, реалізованої в системі, пароль потребуватиме певної кількості символів і відповідатиме певним вимогам до складності.

Серед існуючих інтерпретаторів команд найбільш часто використовується оболонка Bourne-Again (/bin/bash). Вона призначається за замочуванням новим користувачам. З різних причин досвідчені користувачі Linux можуть вибрати альтернативні оболонки, такі як Korn Shell (ksh), C Shell (csh) тощо.

Каталог входу користувача за замовченням зберігається в каталозі /home робочої станції. Він міститиме персональні дані користувача та конфігураційні файли його програм. За замовчуванням під час входу поточним каталогом обирається каталог входу.

Інсталяція типу робочої станції (з графічним інтерфейсом) запускає цей інтерфейс на терміналі 1. Оскільки Linux є багатокористувацьким, можна підключити кількох користувачів кілька разів на різних фізичних терміналах (TTY) або **віртуальних терміналах ** (PTS). Віртуальні термінали доступні в графічному середовищі. Користувач перемикається з одного фізичного терміналу на інший за допомогою Alt+Fx із командного рядка або за допомогою Ctrl+Alt+Fx.

Оболонка

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

  • Відображає командний рядок.
  • Читає команду.
  • Аналізує синтаксис.
  • Замінює спеціальні символи.
  • Виконує команду.
  • Відображає командний рядок.
  • Тощо.

Послідовність клавіш Ctrl+C використовується для переривання виконання команди.

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

command [option(s)] [argument(s)]

Назва команди часто у нижньому регістрі.

Кожен елемент відокремлено пробілом.

Короткі варіанти починаються з тире (-l), тоді як довгі параметри починаються з двох тире (--list). Подвійне тире (--) вказує на кінець списку параметрів.

Можна групувати кілька коротких опцій разом:

ls -l -i -a

еквівалентно до:

ls -lia

Після параметра може бути кілька аргументів:

ls -lia /etc /home /var

У літературі термін «опція» еквівалентний терміну «параметр», який частіше використовується в програмуванні. Необов’язкова сторона параметра або аргументу позначається у квадратних дужках [ і ]. Якщо можливий більше ніж один варіант, вертикальна смуга, яка називається "канал", розділяє їх [a|e|i].

Загальні команди

Команди apropos, whatis і man

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

Команда apropos

Команда apropos дозволяє здійснювати пошук за ключовими словами на цих довідкових сторінках:

Параметри Опис
-s, --список розділів або --розділ Обмежено ручними розділами.
-a або --and Відображає тільки елемент, що відповідає всім наданим ключовим словам.

Наприклад:

$ apropos очищати
(1) - очистити термінальний екран
clear_console (1) - очистити консоль
clearenv (3) - очистити навколишнє середовище
clearerr (3) - перевірити і скинути статус трансляції
clearerr_unlocked (3) - неблокуючі функції stdio
feclearexcept (3) - floating-point засновування та обробка проблеми
fwup_clear_status (3) - для підтримки управління системними прошивками оновленнями
klogctl (3) - читати та/або очистити ядро повідомлення буфери; встановити рівень console_loglevel
sgt-samegame (6) - block-clearing задач
syslog (2) - читання та/або очищення кільцевого буфера повідомлень ядра; встановити console_loglevel
timerclear (3) - часові операції
XClearArea (3) - очистити область або вікно
XClearWindow (3) - очистити область або вікно
XSelectionClearEvent (3) - SelectionClear структуру подій

Щоб знайти команду, яка дозволить змінити пароль облікового запису:

$ apropos --exact пароль -a change
chage (1) - змінити інформацію про закінчення терміну дії пароля
passwd (1) - змінити пароль користувача

Команда whatis

Команда whatis відображає опис команди переданого аргументу:

whatis clear

Наприклад:

$ whatis
clear (1) - очистити екран терміналу

Команда man

Після того, як воно було знайдено за допомогою apropos або whatis, інструкція прочитується за допомогою man ("Man - це твій друг"). Цей набір посібників поділено на 8 розділів, згрупованих за темами, стандартним розділом є 1:

  1. Виконувані програми або команди.
  2. Системні виклики (функції, надані ядром).
  3. Виклики бібліотеки (функції, надані бібліотекою).
  4. Спеціальні файли (які, як правило, зустрічаються в /dev).
  5. Формати файлів і правила (файли конфігурації, такі як etc/passwd).
  6. Ігри (наприклад, програми на основі персонажів).
  7. Різне (наприклад, man (7)).
  8. Системні команди адміністрування (зазвичай лише для root).
  9. Процедура ядра (не стандартна).

Інформацію про кожен розділ можна отримати шляхом введення man x Intro, де x - це номер розділу.

Команда:

man passwd

розповість адміністратору про команду passwd, її параметри тощо. Як :

man 5 passwd

повідомить його про файли, пов'язані з командою.

Переміщуйтеся в посібнику за допомогою стрілок ++↑++ та ++↓++. Для виходу з посібника натисніть клавішу Q.

Команда shutdown

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

shutdown [-h] [-r] time [message]

Вкажіть час вимкнення у форматі hh:mm для точного часу або +mm для затримки у хвилинах.

Щоб примусово зупинити – використайте слово now замість часу. У цьому випадку, додаткове повідомлення не надсилається іншим користувачам системи.

Приклад:

[root]# shutdown -h 0:30 "Server shutdown at 0:30"
[root]# shutdown -r +5

Параметри:

Опції Зауваження
-h Вимикає систему електронним способом.
-r Перезавантажує систему.

Команда history

Команда history відображає історію команд, які були введені користувачем.

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

Приклад команди history

$ history
147 man ls
148 man history
Опції Коментарі
-w Записує поточну історію у файл історії.
-c Видаляє історію поточного сеансу (але не вміст файлу .bash_history).
  • Маніпулювання історією:

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

Клавіші Функція
!+! Відкликає останню введену команду.
!+N Відкликає команду за номером у списку.
!+string Викликає останню команду, яка починається з рядка.
Up Переміщується у вашій історії, повертаючись у часі від останньої команди.
Down Переміщується у вашій історії, рухаючись вперед у часі.

Автозавершення

Автозавершення - це чудова допомога.

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

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

Відображення та ідентифікація

Команда clear

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

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

Порада

Ctrl+L матиме такий же ефект, що й команда clear

Команда echo

Команда echo використовується для відображення рядка символів.

Ця команда найчастіше використовується в скриптах адміністрування, щоб проінформувати користувача під час виконання.

Параметр -n вказує на відсутність вихідного рядка нового рядка (за замовчуванням вихідний рядок нового рядка).

shell > echo -n "123";echo "456"
123456

shell > echo "123";echo "456"
123
456

З різних причин розробнику скриптів може знадобитися використання спеціальних послідовностей (починаючи з символу \). У цьому випадку буде передбачено параметр -e, що дозволяє інтерпретувати послідовності.

Серед часто використовуваних послідовностей ми можемо згадати:

Послідовність Результат
\a Надсилає звуковий сигнал
\b Назад
\n Додає розрив рядка
\t Додає горизонтальну вкладку
\v Додає вертикальну вкладку

Команда date

Команда date відображає дату і час. Команда має наступний синтаксис:

date [-d yyyyMMdd] [format]

Приклади:

$ date
Mon May 24 16:46:53 CEST 2021
$ date -d 20210517 +%j
137

У цьому останньому прикладі, параметр -d відображає задану дату. Опція +%j форматує цю дату, щоб показати лише день року.

Увага

Формат дати може змінюватися в залежності від значення мови, визначеного у змінній середовища $LANG.

Відображення дати може відповідати наступним форматам:

Опція Формат
+%A Повна назва дня тижня (наприклад, неділя)
+%B Повна назва місяця (наприклад, січень)
+%c Дата й час у мовному коді (наприклад, Чт, 3 бер 23:05:25 2005 р.)
+%d День місяця (напр., 01)
+%F Дата у РРРР-ММ-ДД форматі
+%G Рік
+%H Година (00..23)
+%j День року (001..366)
+%m Номер місяця (01..12)
+%M Хвилина (00..59)
+%R Час в форматі гг:хвхв
+%s Секунди з 1 січня 1970 року
+%S Секунда (00..60)
+%T Час у форматігг:хх:сс
+%u День тижня (1 для понеділка)
+%V Тиждень (+%V)
+%x Дата у форматі DDD/MM/YYYY

Команда date також дозволяє змінювати системну дату та час. У такому випадку буде використана опція -s.

[root]# date -s "2021-05-24 10:19"

Формат, який слід використовувати після параметра -s, такий:

date -s "yyyy-MM-dd hh:mm[:ss]"

Команди id, who та whoami

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

$ id rockstar
uid=1000(rockstar) gid=1000(rockstar) groups=1000(rockstar),10(wheel)

Параметри -g, -G, -n і -u відображають головну групу GID, підгрупу GID, імена замість числових ідентифікаторів та UID користувача відповідно.

Команда whoami відображає логін поточного користувача.

Команда who відображає імена зареєстрованих користувачів:

$ who
rockstar tty1   2021-05-24 10:30
root     pts/0  2021-05-24 10:31

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

  • tty: являє собою термінал.
  • pts/: представляє віртуальну консоль у графічному середовищі з номером після представлення екземпляра віртуальної консолі (0, 1, 2...)

Параметр -r також відображає рівень виконання (див. розділ «запуск»).

Дерево файлів

У Linux дерево файлів є перевернутим деревом, яке називається єдиним ієрархічним деревом, коренем якого є каталог /.

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

Каталог підключення – це робочий каталог, пов’язаний із користувачем. Каталоги входу за замовчуванням зберігаються в каталозі /home.

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

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

  • /home/groupA/alice/file

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

  • ../alice/file

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

Директорія, навіть якщо вона порожня, обов'язково буде містити принаймні два посилання:

  • .: посилання на саму себе.
  • ..: посилання на батьківський каталог поточної папки.

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

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

наш приклад дерева

У наведеному вище прикладі ми намагаємося визначити розташування файлу myfile з директорії bob.

  • За абсолютного шляху поточний каталог не має значення. Ми починаємо з кореня і продовжуємо працювати вниз до директорій home, groupA alice і нарешті файл myfile: /home/groupA/alice/myfile.
  • До відносного шляху, нашою початковою точкою є поточний каталог bob, ми йдемо на один рівень до . (напр. в каталог groupA і потім вниз в каталог alice, і нарешті myfile файл: . /alice/myfile.

Команда pwd

Команда pwd (Print Working Directory - Друк Робочого Каталогу) відображає абсолютний шлях до поточного каталогу.

$ pwd
/home/rockstar

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

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

Команда cd

Команда cd (Change Directory - Зміна Директорії) дозволяє змінювати поточну теку -- іншими словами, рухатися деревом.

$ cd /tmp
$ pwd
/tmp
$ cd ../
$ pwd
/
$ cd
$ pwd
/home/rockstar

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

Команда Is

Команда ls відображає вміст каталогу.

ls [-a] [-i] [-l] [directory1] [directory2] []

Наприклад:

$ ls /home
.    ..    rockstar

Основні параметри команди ls:

Опція Опис
-a Відображає всі файли, навіть приховані. Приховані файли в Linux починаються з ..
Відображає номери inode.
-l Використовує формат довгого списку, тобто кожен рядок відображає інформацію про довгий формат для файлу або каталогу.

Команда ls, однак, має багато варіантів (див. man):

Опція Опис
-d Відображає інформацію про каталог замість того, щоб показати його вміст.
-g Як параметр -l, але не вказує власника.
-h Відображає розміри файлу у найбільш доцільному форматі (байт, кілобайт, мегабайт, ...). h означає «читабельний». Потребує використання з -l опцією.
-s Відображає розмір виділеного файлу в блоках. У команді ls розмір окремого блоку за замовчуванням становить 1024 байти. В операційній системі GNU/Linux «блок» є найменшою одиницею зберігання у файловій системі, і загалом один блок дорівнює 4096 байтам. В операційній системі Windows, беручи за приклад файлову систему NTFS, її найменша одиниця зберігання називається «Кластер». Визначення мінімального імені одиниці зберігання може відрізнятися залежно від різних файлових систем.
Відображає усі файли у каталозі за винятком . і ..
-R Відображає вміст підкаталогів рекурсивно.
-F Відображає тип файлів. Виводить / для каталогу, * для виконуваних файлів, @ для символічного посилання, і нічого для текстового файлу.
-X Сортує файли за їх розширеннями.
  • Опис стовпців, згенерованих виконанням команди ls -lia:
$ ls -lia /home
78489 drwx------ 4 rockstar rockstar 4096 25 oct. 08:10 rockstar
Значення Опис
78489 Номер Inode.
drwx------ Тип файлу (d) і права (rwx------).
4 Кількість підкаталогів (. і .. включено). Для файлу це кількість жорстких посилань, і 1 представляє сам себе.
rockstar Власність користувача.
rockstar Власність групи.
4096 Для файлів, показує розмір файлу. Для каталогів відобразиться фіксоване значення 4096 байт, окуповане іменуванням файлу. Для обчислення загального розміру каталогу, використовуйте du -sh rockstar/
25 oct. 08:10 Дата останньої зміни.
rockstar Ім'я файлу (або каталогу).

Примітка

Псевдоніми часто розміщуються в звичайних дистрибутивах.

Це у випадку цього псевдоніма "ll":

alias ll='ls -l --color=auto'

Команда l має багато параметрів. Ось кілька продвинутих прикладів використання:

  • Перелічити файли в /etc в порядку останньої модифікації:
$ ls -ltr /etc
total 1332
-rw-r--r--.  1 root root    662 29 may   2021 logrotate.conf
-rw-r--r--.  1 root root    272 17 may.   2021 mailcap
-rw-------.  1 root root    122 12 may.  2021 securetty
...
-rw-r--r--.  2 root root     85 18 may.  17:04 resolv.conf
-rw-r--r--.  1 root root     44 18 may.  17:04 adjtime
-rw-r--r--.  1 root root    283 18 may.  17:05 mtab
  • Список файлів /var більше, ніж 1 мегабайт, але меньше ніж 1 гігабайт. Приклад тут використовує додаткові grep команди з регулярними виразами. Новачкам не доведеться надто мучитися, у майбутньому буде спеціальний підручник, щоб представити ці регулярні вирази.
$ ls -lhR /var/ | grep ^\- | grep -E "[1-9]*\.[0-9]*M" 
...
-rw-r--r--. 1 apache apache 1.2М 10 may.  13:02 XB RiyazBdIt.ttf
-rw-r--r--. 1 apache apache 1.2М 10 may.  13:02 XB RiyazBd.ttf
-rw-r--r--. 1 apache apache 1.1М 10 may.  13:02 XB RiyazIt.ttf
...

Звичайно, ми рекомендуємо використовувати команду find.

find /var -size +1M -a -size -1024M  -a -type f  -exec ls -lh {} \;
  • Показати права на папку:

Щоб дізнатися права на папку, у нашому прикладі /etc, наступна команда not підійде:

$ ls -l /etc
total 1332
-rw-r--r--.  1 root root     44 18 nov.  17:04 adjtime
-rw-r--r--.  1 root root   1512 12 janv.  2010 aliases
-rw-r--r--.  1 корінь з 12288 Нью.  17:41 aliases.db
drwxr-xr-x.  2 корінь з 4096 17 Новин.  17:48 альтернатив
...

Наведена вище команда відобразить вміст папки (всередині) за замовчуванням. Для самої папки, ви можете використовувати опцію -d.

ls -ld /etc
drwxr-xr-x. 69 root root 4096 18 nov.  17:05 /etc
  • Сортувати за розміром файлу, спочатку найбільший:
ls -lhS
  • формат часу /дати з -l:
$ ls -l --time-style="+%Y-%m-%d %m-%d %H:%M" /
всього 12378
dr-xr-xr-x. 2 root root 4096 2014-11-23 11-23 03:13 bin
dr-xr-xr-x. 5 root root 1024 2014-11-23 11-23 05:29 boot
  • Додайте косу риску в кінці папок:

За замовчуванням команда ls не відображає останню косу риску папки. У деяких випадках, як, наприклад, для сценаріїв, корисно їх відобразити:

$ ls -dF /etc
/etc/
  • Приховати деякі розширення:
ls /etc --hide=*.conf

Команда mkdir

Команда mkdir створює папку або дерево.

mkdir [-p] каталог [directory] [...]

Наприклад:

mkdir /home/rockstar/work

Має існувати каталог "rockstar", щоб створити каталог "work".

В іншому випадку слід використовувати параметр -p. Параметр -p створює батьківські каталоги, якщо вони не існують.

Важливо

Не рекомендується використовувати назви команд Linux як каталог або файлові імена.

Команда touch

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

touch [-t date] file

Наприклад:

touch /home/rockstar/myfile
Опція Опис
-t date Змінює дату останньої модифікації файлу із зазначеною датою.

Формат дати: [AAAA]MMJhhmm[ss]

Порада

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

Команда rmdir

Команда rmdir видаляє порожню папку.

Наприклад:

rmdir /home/rockstar/work
Опція Опис
Видаляє батьківський каталог або надані каталоги, якщо вони порожні.

Порада

Щоб видалити як непорожній каталог, так і його вміст, скористайтеся командою rm.

Команда rm

Команда rm видаляє файл або каталог.

rm [-f] [-r] файл [file] [...]

Важливо

Будь-яке видалення файлу чи каталогу остаточне.

Опції Опис
-f Не питати, чи слід видаляти.
Питати, чи слід вилучити.
Видалити каталог і рекурсивно видалити його підкаталоги.

Примітка

Сама команда rm не запитує підтвердження під час видалення файлів. Однак у дистрибутиві Red Hat/Rocky rm запитує підтвердження видалення, оскільки команда rm є псевдонімом команди rm -i. Не дивуйтеся, якщо в іншому дистрибутиві, як, наприклад, Debian, ви не отримаєте запит на підтвердження.

Видалення папки за допомогою команди rm, незалежно від того, порожня вона чи ні, потребує додавання параметра -r.

Кінець опцій виводиться до оболонки подвійним рискою --.

Наприклад:

$ >-hard-hard # To create an empty file called -hard-hard
hard-hard
[CTRL+C] To interrupt the creation of the file
$ rm -f -- -hard-hard

Ім'я файлу hard-hard починається з -. Без використання -- оболонка інтерпретувала б -d у -hard-hard як опцію.

Команда mv

Команда mv переміщує та перейменовує файл.

файл mv [файл ...] призначення

Приклад:

mv /home/rockstar/file1 /home/rockstar/file2

mv /home/rockstar/file1 /home/rockstar/file2 /tmp
Опції Опис
-f Не запитувати підтвердження якщо перезапис файлу призначення.
Підтвердження запиту, якщо перезапис вихідного файлу (за замовчуванням).

Кілька конкретних випадків допоможуть вам зрозуміти труднощі, що можуть виникнути:

mv /home/rockstar/file1 /home/rockstar/file2

Перейменовує file1 на file2. Якщо file2 вже існує, замінити вміст файлу на file1.

mv /home/rockstar/file1 /home/rockstar/file2 /tmp

Переміщення file1 і file2 до папки /tmp.

mv file1 /repexist/file2

Переміщує file1 у repexist і перейменовує його на file2.

mv file1 file2

file1 перейменовано на file2.

mv file1 /repexist

Якщо цільовий каталог існує, file1 переміщується до /repexist.

mv file1 /wrongrep

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

Команда cp

Команда cp копіює файл.

cp file [file ...] destination

Наприклад:

cp -r /home/rockstar /tmp
Опції Опис
Запитувати підтвердження в разі перезапису (за замовчуванням).
-f Не запитувати підтвердження, якщо перезаписується файл призначення.
Зберігає власника, дозволи та позначку часу скопійованого файлу.
-r Копіює каталог з його файлами і підкаталогами.
-s Створює символічне посилання, а не копіює.
cp file1 /repexist/file2

file1 скопійовано до /repexist під назвою file2.

cp file1 file2

file1 копіюється як file2 у цю теку.

cp file1 /repexist

Якщо цільовий каталог існує, file1 копіюється в /repexist.

cp file1 /wrongrep

Якщо директорії призначення не існує, file1 копіюється під назвою wrongrep в кореневий каталог.

Візуалізація

Команда file

Команда file відображає тип файлу.

file file1 [files]

Наприклад:

$ file /etc/passwd /etc
/etc/passwd:    ASCII text
/etc:        directory

Команда more

Команда more екран за екраном відображає вміст одного чи кількох файлів.

more file1 [files]

Наприклад:

$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
...

За допомогою клавіші Enter переміщайте рядок за рядком. За допомогою клавіші Space переміщайте сторінку за сторінкою. /text дозволяє шукати входження у файл.

Команда less

Команда less відображає вміст одного або кількох файлів. Команда less є інтерактивною та має власні команди для використання.

less file1 [files]

Команди, специфічні для less:

Команда Дія
H Допомогти.
Up Down Right Left Рухатися вгору, вниз лінією праворуч або ліворуч.
Enter Посунути вниз на один рядок.
Space Посунути на одну сторінку.
Page Up та Page Down Посунути вгору або вниз одну сторінку.
g та G Посунути на перші та останні сторінки
/text Пошук тексту.
Q Закриває команду less.

Команда cat

Команда cat генерує вміст кількох файлів і відображає результат стандартного виводу.

cat file1 [files]

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

cat /etc/passwd

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

cat /etc/passwd /etc/group

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

cat /etc/passwd /etc/group > usersAndGroups.txt

Приклад 4 - Відображення нумерації рядків:

$ cat -n /etc/profile
     1 # /etc/profile: загальносистемний файл .profile для оболонки Bourne (sh(1))
     2 # і Bourne сумісні оболонки (bash(1), ksh(1), ash(1), ...).
     3
     4, якщо [ "id -u`" -eq 0 ]; потім
     5 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/sbin:/sbin:/binbinbinbin"
     6 інакше
…

Приклад 5 - Показує нумерацію непорожніх рядків:

$ cat -b /etc/profile
     1 # /etc/profile: загальносистемний файл .profile для оболонки Bourne (sh(1))
     2 # # і Bourne сумісні оболонки (bash(1), ksh(1), ash(1), ...).

     3    if [ "`id -u`" -eq 0 ]; then
     4      PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
     5    else

Команда tac

Команда tac діє майже протилежно команді cat. Вона відображає вміст файлу, починаючи з кінця (що особливо цікаво для читання журналів!).

Приклад: відобразити файл журналу, відобразивши спочатку останній рядок:

[root]# tac /var/log/messages | less

Команда head відображає початок файлу.

head [-n x] file
Опція Опис
-n х Показувати перші x рядки файлу

За замовчуванням (без опції -n), команда head відображає перші 10 рядків файлу.

Команда tail

Команда tail відображає кінець файлу.

tail [-f] [-n x] file
Опція Опис
-n х Відображає останні x рядків файлу
-f Відображає зміни до файлу в реальному часі

Наприклад:

tail -n 3 /etc/passwd
sshd:x:74:74:Privilege-separeted sshd:/var/empty /sshd:/sbin/nologin
tcpdump:x:72::/:/sbin/nologin
user1:x:500:500:grp1:/home/user1:/b/bash

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

Без опції -n команда tail відображає останні 10 рядків файлу.

Команда sort

Команда sort сортує рядки файлу.

Це дозволяє впорядкувати результат виконання команди або вміст файлу в заданому порядку, за цифрами, алфавітом, розміром (КБ, МБ, ГБ) або у зворотному порядку.

sort [-k] [-n] [-u] [-o file] [-t] file

Наприклад:

$ sort -k 3,4 -t ":" -n  т. д/passwd
root:0:0:root:/bin/bash
adm:x:3:adm:/var/adm/adm/:/sbin/nologin
Опція Опис
-k Вказує стовпці, які слід розділити. Ви можете вказати кілька стовпців.
-n Запитує числове сортування.
-o file Зберігає сортування у вказаний файл.
-t Вказує роздільник, який вимагає, щоб вміст відповідного файлу був регулярно розділений вмістом стовпця, інакше його неможливо відсортувати належним чином.
-r Зворотний порядок результату. Використовується в поєднанні з опцією -n для сортування в порядку від найбільшого до найменшого.
-u Прибирає дублікати після сортування. Еквівалентно sort file uniq.

Команда sort сортує файл тільки на екрані. Файл не змінюється у сортуванні. Для збереження сортування використовуйте параметр -o або перенаправлення виводу >.

За замовчуванням числа відсортовані відповідно до їх значення. Таким чином, «110» буде перед «20», яке саме перед «3». Параметр -n повинен бути вказаний таким чином, щоб числові символьні блоки впорядковуються за їх значенням.

Команда sort змінює порядок результатів на протилежний за допомогою параметра -r:

$ sort -k 3 -t ":" -n -r /etc/passwd
nobody:65534:65534:65534:Kernel Overflow User:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/sbin/nologin
polkitd:x:998:996:User for polkitd:/sbin/nologin

У цьому прикладі команда sort відсортує вміст файлу /etc/passwd від найбільшого uid (ідентифікатора користувача) до найменшого.

Деякі додаткові приклади використання команди sort:

  • Перетасування значень

Команда sort також дозволяє перетасувати значення за допомогою параметра -R:

sort -R /etc/passwd
  • Сортування IP-адрес

Системний адміністратор швидко стикається з обробкою IP-адрес із журналів своїх служб, таких як SMTP, VSFTP або Apache. Ці адреси зазвичай витягуються за допомогою команди cut.

Ось приклад з файлом dns-client.txt:

192.168.1.10
192.168.1.200
5.1.150.146
208.128.150.98
208.128.150.99
$ sort -nr dns-client.txt
208.128.150.99
208.128.150.98
192.168.1.200
192.168.1.10
5.1.150.146
  • Сортування файлу шляхом видалення дублікатів

Команда sort знає, як видалити дублікати з виведення файлу за допомогою -u як параметра.

Ось приклад із файлом colours.txt:

Red
Green
Blue
Red
Pink
$ sort -u colours.txt
Blue
Green
Pink
Red
  • Сортування файлу за розмірами

Команда sort знає, як розпізнавати розміри файлів за допомогою таких команд, як ls з опцією -h.

Приклад з файлом size.txt:

1.7G
18M
69K
2.4М
1.2М
4.2G
6М
124М
12.4М
4G
$ sort -hr size.txt
4.2G
4G
1.7G
124M
18M
12.4M
6M
2.4M
1.2M
69K

Команда wc

Команда wc рахує кількість рядків, слів та/або байтів у файлі.

wc [-l] [-m] [-w] файл [files]
Опція Опис
-c Рахує кількість байт.
-m Рахує кількість символів.
-m Підраховує кількість рядків.
-w Підраховує кількість слів.

Пошук

Команда find

Команда find шукає розташування файлів або каталогів.

знайти каталог [-name name] [-type type] [-user login] [-date date] [-date date]

Оскільки існує стільки варіантів для команди find, краще посилатися на man.

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

Опція Опис
-perm permissions Пошук файлів за їх дозволами.
-size size Пошук файлів за розміром.

Параметр -exec команди find

Можна використати опцію -exec команди find, щоб виконати команду в кожному рядку результату:

find /tmp -name *.txt -exec rm -f {} \;

Попередня команда шукає всі файли в каталозі /tmp під назвою *.txt і видаляє їх.

!!! Підказка "Зрозуміти параметр -exec

У наведеному вище прикладі команда `find` створить рядок, який представлятиме команду, яку потрібно виконати.

Якщо команда `find` знайде три файли з іменами `log1.txt`, `log2.txt` і `log3.txt`, тоді команда `find` створить рядок, замінивши в рядку `rm -f {} \;` фігурні дужки з одним із результатів пошуку, і виконає це стільки разів, скільки буде результатів.

Це нам дасть:

```
rm -f /tmp/log1.txt ; rm -f /tmp/log2.txt ; rm -f /tmp/log3.txt ;
```


Символ `;` — це спеціальний символ оболонки, який має бути захищений символом `\`, щоб запобігти його передчасній інтерпретації командою `find` (а не в `-exec`).

Порада

$ find /tmp -name *.txt -delete робить те саме.

Команда whereis

Команда whereis шукає файли, пов’язані з командою.

де [-b] [-m] [-s] команда

Наприклад:

$ whereis -b ls
ls: /bin/ls
Опція Опис
-b Для пошуку тільки у бінарному файлі.
-m Шукає лише сторінки довідок.
-s Для пошуку тільки вихідних файлів.

Команда grep

Команда grep шукає рядок у файлі.

grep [-w] [-i] [-v] "string" file

Наприклад:

$ grep -w "root:" /etc/passwd
root:x:0:0:root:/bin/bash
Опція Опис
Ігнорує регістр шуканого рядка.
-v Виключає рядки, що містять рядок.
-w Пошук точного слова.

Команда grep повертає повний рядок, що містить рядок, який ви шукаєте.

  • Спеціальний символ ^ використовується для пошуку рядка на початку рядка.
  • Спеціальний символ $ шукає рядок в кінці рядка.

    grep -w "^root" /etc/passwd
    

Примітка

Ця команда дуже потужна, і настійно рекомендуємо ознайомитись з її посібником. У ньому багато похідних.

Можна шукати рядок у дереві файлів за допомогою параметра -R.

grep -R "Virtual" /etc/httpd

Мета-символи (знаки підстановки)

Метасимволи замінюють один або кілька символів (або навіть відсутність символів) під час пошуку. Ці метасимволи також відомі як символи підстановки.

Їх можна поєднувати.

Символ * замінює рядок, що складається з будь-яких символів. Символ * також може означати відсутність символу.

$ find /home -name "test*"
/home/rockstar/test
/home/rockstar/test1
/home/rockstar/test11
/home/rockstar/tests
/home/rockstar/test362

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

Символ ? замінює один символ, яким би він не був.

$ find /home -name "test?"
/home/rockstar/test1
/home/rockstar/tests

Квадратні дужки [ і ] використовуються для визначення значень, які може приймати один символ.

$ find /home -name "test[123]*"
/home/rockstar/test1
/home/rockstar/test11
/home/rockstar/test362

Примітка

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

Важливо

Не плутайте мета-символи оболонки з мета-символами регулярних виразів. Команда grep використовує метасимволи регулярного виразу.

Перенаправлення та канали

Стандартний ввід та вихід

На системи UNIX та Linux існує три стандартні потоки. Вони дозволяють програмам через бібліотеку stdio.h вводити або виводити інформацію.

Ці потоки називаються X-каналом або X-файловим дескриптором.

За замовчуванням:

  • клавіатура це пристрій вводу для каналу 0, який називається stdin;
  • екран є пристроєм виведення для каналів 1 і 2, який називається stdout і stderr.

стандартні канали

stderr отримує повідомлення про помилку, які повертає команда. Інші трансляції спрямовані на stdout.

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

Переспрямування вводу

Можна перенаправити вхідний потік з іншого файлу за допомогою символу < або <<. Команда прочитає файл замість клавіатури:

ftp -in serverftp << ftp-commands.txt

Примітка

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

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

Ця функція використовується для скрипту інтерактивних команд:

$ ftp -in serverftp << END
user alice password
put file
bye
END

Ключове слово END може бути замінене будь-яким словом.

$ ftp -in serverftp << STOP
user alice password
put file
bye
STOP

Оболонка завершує роботу команди ftp, коли отримує рядок, що містить лише ключове слово.

Важливо

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

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

Команда wc може бути використана приблизно так:

$ wc -l .bash_profile
27 .bash_profile # the number of lines is followed by the file name
$ wc -l < .bash_profile
27 # returns only the number of lines

Перенаправлення виводу

Стандартний вихід можна перенаправляти до інших файлів за допомогою символів > або >>.

Просте переспрямування > перезаписує вміст вихідного файлу:

date +%F > date_file

Якщо використовується символ >>, це вказує на те, що вихідний результат команди додається до вмісту файлу.

$ date +%F > date_file

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

Стандартний вивід помилки також може бути перенаправлений в інший файл. Цього разу буде необхідно вказати номер каналу (який може бути опущений для каналів 0 і 1):

ls -R / 2> errors_file

ls -R / 2>> errors_file

Приклади перенаправлення

Перенаправлення 2 виходів у 2 файли:

ls -R / >> ok_file 2>> nok_file

Перенаправлення 2 виходів в один файл:

ls -R / >> log_file 2>&1

Переспрямування stderr до «бездонної ями» (/dev/null):

ls -R / 2>> /dev/null

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

Роздільники

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

Цей зв’язок є односпрямованим і здійснюється за допомогою символу |. Символ вертикальної лінії | отримується одночасним натисканням Shift+|.

роздільник

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

Особливі команди, що використовуються після тимчасового фільтру.

  • Приклад:

Відображати лише початок:

ls -lia / | head

Відобразити тільки кінець:

ls -lia / | tail

Сортувати результат:

ls -lia / | sort

Порахувати кількість слів/символів:

ls -lia / | wc

Шукати рядок в результаті:

ls -lia / | grep fichier

Особливі моменти

Команда tee

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

Він поєднується з каналом |, щоб отримати як вхідні дані команди, яку потрібно перенаправити:

ls -lia / | tee fic

cat fic

Параметр -a додає до файлу, а не перезаписує його.

Команди alias і unalias

Використання alias — це спосіб попросити оболонку запам’ятати певну команду з її параметрами та дати їй назву.

Наприклад:

ll

замінить команду:

ls -l

Команда alias містить список псевдонімів для поточного сеансу. У дистрибутивах Linux псевдоніми встановлюються за замовчуванням. Тут псевдоніми для сервера Rocky:

$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

Псевдоніми визначені лише тимчасово, на час сеансу користувача.

Для постійного використання вони повинні бути створені через:

  • .bashrc файл в каталозі облікових записів користувача;
  • файл /etc/bashrc для всіх користувачів.

Важливо

Псевдоніми визначені лише тимчасово на час сеансу користувача! Наприклад, псевдонім, створений без знань адміністратора:

alias cd='rm -Rf'

Команда unalias дозволяє видаляти псевдоніми.

Щоб видалити один псевдонім:

unalias ll

Щоб видалити всі псевдоніми:

unalias -a

Щоб тимчасово вимкнути псевдонім, використовуйте комбінацію \&#060;alias name&#062;.

Наприклад, якщо ми робимо:

type ls

може повернути наступне:

ls is an alias to « ls -rt »

Тепер, коли це відомо, ми можемо побачити результати використання псевдоніма або одноразового вимкнення за допомогою \, виконавши наступне:

$ ls file*   # order by time
file3.txt  file2.txt  file1.txt
$ \ls file*  # order by name
file1.txt  file2.txt  file3.txt

Псевдоніми та корисні функції

  • Псевдонім grep.

Розфарбуйте результат виконання команди grep: alias grep='grep --color=auto'

  • Функція mcd

Зазвичай створюють папку, а потім переміщуються в ній: mcd() { mkdir -p "$1"; cd "$1"; }

  • Функція cls

Перейдіть до папки та перегляньте її вміст: cls() { cd "$1"; ls; }

  • Функція backup

Створіть резервну копію файлу: backup() { cp "$1"{,.bak}; }

  • Функція extract

Видобути будь-який тип архіву:

extract () {
  if [ -f $1 ] ; then
    case $1 in
      *.tar.bz2) tar xjf $1 ;;
      *.tar.gz) tar xzf $1 ;;
      *.bz2) bunzip2 $1 ;;
      *.rar) unrar e $1 ;;
      *.gz) gunzip $1 ;;
      *.tar) tar xf $1 ;;
      *.tbz2) tar xjf $1 ;;
      *.tgz) tar xzf $1 ;;
      *.zip) unzip $1 ;;
      *.Z) uncompress $1 ;;
      *.7z) 7z x $1 ;;
      *)
        echo "'$1' cannot be extracted via extract()" ;;
    esac
  else
    echo "'$1' is not a valid file"
  fi
}
  • Якщо alias cmount повертає таке: alias cmount="mount | column -t"

Тоді ми можемо використати cmount, щоб показати всі монтування системи у таких стовпцях: [root]# cmount

який повертатиме нашу змонтовану файлову систему в такому форматі:

/dev/simfs  on  /                                          type  simfs        (rw,relatime,usrquota,grpquota)
proc        on  /proc                                      type  proc         (rw,relatime)
sysfs       on  /sys                                       type  sysfs        (rw,relatime)
none        on  /dev                                       type  devtmpfs     (rw,relatime,mode=755)
none        on  /dev/pts                                   type  devpts       (rw,relatime,mode=600,ptmxmode=000)
none        on  /dev/shm                                   type  tmpfs        (rw,relatime)
none        on  /proc/sys/fs/binfmt_misc                   type  binfmt_misc  (rw,relatime)

Символ ;

Символ ; містить рядки команд.

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

ls /; cd /home; ls -lia; cd /

Перевірте свої знання

✔ Що визначає користувача під Linux? (7 відповідей)

✔ Що характеризує довгий параметр для команди?

✔ Які команди дозволяють вам шукати за допомогою команди?

  • google
  • chuck --norris
  • info
  • apropos
  • whatis

✔ Яка команда дозволяє переглянути історію користувача?

✔ Яка команда дозволяє шукати текст у файлі?

  • find
  • grep

✔ Яка команда дозволяє вам шукати файл?

  • find
  • grep

✔ Яка команда перенаправляє потік помилки на файл errors.log?

  • ls -R / 2> errors.log
  • ls -R / 2>> errors.log
  • ls -R / 2> errors.log 2>&1

Author: Antoine Le Morvan

Contributors: Steven Spencer, Aditya Putta, tianci li, Grammaresque, Ganna Zhyrnova