[закладки] Bash для початківців: 21 корисна команда

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

[закладки] Bash для початківців: 21 корисна команда

Також читайте у нашому блозі цикл публікацій про bash-скрипти

Терміни

У ході освоєння роботи в командному рядку Linux вам може зустрітися безліч понять, в яких буде корисно орієнтуватися. Деякі з них, на кшталт "Linux" і "Unix", або "командна оболонка" і "термінал", іноді плутають. Поговоримо про ці та інші важливі терміни.

Юнекс - Це популярна операційна система, яка була розроблена Bell Labs у 1970-х. Її код був закритим.

Linux - Це найпопулярніша Unix-подібна операційна система. Вона в наші дні використовується на багатьох пристроях, у тому числі — і на комп'ютерах.

Термінал (terminal), або емулятор терміналу - це програма, що дає доступ до операційної системи. Одночасно можна відкривати кілька вікон терміналу.

оболонка (shell) - це програма, яка дозволяє відправляти операційній системі команди, написані особливою мовою.

Удар розшифровується як Bourne Again SHell. Це найпоширеніша мова командної оболонки, що використовується для взаємодії з операційною системою. Крім того, оболонка Bash за промовчанням використовується в MacOS.

Інтерфейс командного рядка (Command Line Interface, CLI) - це спосіб взаємодії людини і комп'ютера, при використанні якого користувач вводить команди з клавіатури, а комп'ютер, виконуючи ці команди, виводить у текстовому вигляді повідомлення для користувача. В основному CLI використовується для отримання нової інформації про деякі сутності, наприклад, про файли, і для роботи з файлами. Інтерфейс командного рядка слід відрізняти від графічного інтерфейсу користувача (Graphical User Interface, GUI), при роботі з яким, в основному, використовується миша. Інтерфейс командного рядка часто називають просто командним рядком.

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

Тепер, коли ми розглянули важливі терміни, хочу зазначити, що тут я користуватимуся термінами «Bash», «оболонка» і «командний рядок» як взаємозамінними, так само як і поняттями «директорія» (directory) та «папка» (folder).

стандартні потоки, якими ми будемо тут користуватися - це стандартне введення (standard input, stdin), стандартний висновок (standard output, stdout) та стандартний висновок помилок (standard error, stderr).

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

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

21 Bash-команда

▍Отримання інформації

  • man: виводить посібник користувача (довідку) по команді.
  • pwd: виводить відомості про робочу директорію
  • ls: виводить вміст директорії
  • ps: дозволяє переглядати відомості про працюючі процеси.

▍Маніпуляції з файловою системою

  • cd: зміна робочої директорії
  • touch: створення файлу
  • mkdir: створення директорії
  • cp: копіювання файлу.
  • mv: переміщення або видалення файлу
  • ln: створення посилання.

▍ Перенаправлення введення-виводу та конвеєри

  • <: перенаправлення stdin.
  • >: перенаправлення stdout.
  • |: перенаправлення за допомогою конвеєра виведення однієї команди на вхід іншої команди.

▍Читання файлів

  • head: читання початку файлу
  • tail: читання кінця файлу
  • cat: читання файлу та виведення вмісту на екран або конкатенація файлів.

▍Видалення файлів, зупинка процесів

  • rm: видалення файлу.
  • kill: зупинка процесу.

▍Пошук

  • grep: пошук інформації.
  • ag: просунута команда для пошуку.

▍Архівація

  • tar: створення архівів та робота з ними

Поговоримо про ці команди докладніше.

Подробиці про команди

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

▍Отримання інформації

man command_name: виведення керівництва по команді, тобто довідкової інформації

pwd: виведення на екран шляху до поточної робочої директорії У ході роботи з командним рядком користувачеві часто потрібно дізнаватися про те, де саме в системі він знаходиться.

ls: висновок вмісту директорії. Ця команда теж використовується дуже часто.

ls -a: виведення прихованих файлів. Тут застосовано прапор -a команди ls. Використання прапорів допомагає настроювати поведінку команд.

ls -l: виведення докладної інформації про файли

Зверніть увагу, що прапори можна комбінувати. Наприклад - так: ls -al.

ps: перегляд процесів, що виконуються.

ps -e: виведення відомостей про всі процеси, а не тільки про ті, які пов'язані з поточною оболонкою користувача. Цю команду часто використовують саме у такому вигляді.

▍Маніпуляції з файловою системою

cd my_directory: зміна робочої директорії на my_directory. Для того щоб перейти на один рівень вище в дереві каталогів використовуйте як my_directory відносний шлях ../.

[закладки] Bash для початківців: 21 корисна команда
Команда cd

touch my_file: створення файлу my_file по заданому шляху.

mkdir my_directory: створення папки my_directory по заданому шляху.

mv my_file target_directory: переміщення файлу my_file у папку target_directory. При вказівці цільової директорії потрібно використати абсолютний шлях до неї (а не конструкцію на кшталт ../).

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

mv my_old_file_name.jpg my_new_file_name.jpg
cp my_source_file target_directory
: створення копії файлу my_source_file і поміщення її в папку target_directory.

ln -s my_source_file my_target_file: створення символічного посилання my_target_file на файл my_source_file. Якщо змінити посилання, зміниться і вихідний файл.

Якщо файл my_source_file буде видалено, то my_target_file залишиться. Прапор -s команди ln дозволяє створювати посилання для директорій.

Тепер поговоримо про перенаправлення введення-виводу та конвеєрах.

▍ Перенаправлення введення-виводу та конвеєри

my_command < my_file: замінює дескриптор файлу стандартного введення (stdin) на файл my_file. Це може бути корисним у тому випадку, якщо команда очікує на введення деяких даних з клавіатури, а ці дані заздалегідь збережені у файлі.

my_command > my_file: перенаправляє результати роботи команди, тобто те, що зазвичай потрапляє в stdout і виводиться на екран, у файл my_file. Якщо файл my_file не існує – він створюється. Якщо файл існує, він перезаписується.

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

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

Тепер поглянемо на конвеєрну обробку даних.

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

first_command | second_command: символ конвеєра, |, використовується для того, щоб відправити результати роботи однієї команди іншій команді. Те, що команда, що знаходиться в лівій частині описуваної конструкції, відправляє в stdout, потрапляє в stdin команда, яка знаходиться праворуч від символу конвеєра.

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

За допомогою символу конвеєра можна об'єднувати кілька команд у ланцюжок. Виглядає це так:

first_command | second_command | third_command

[закладки] Bash для початківців: 21 корисна команда
Конвеєр з кількох команд можна порівняти з трубопроводом

Зверніть увагу на те, що коли команда, що знаходиться зліва від символу |, виводить щось у stdoutте, що вона вивела, негайно стає доступним у вигляді stdin другий команді. Тобто виявляється, що використовуючи конвеєр, ми маємо справу з паралельним виконанням команд. Іноді це може спричинити несподівані результати. Подробиці про це можна почитати тут.

Тепер поговоримо про читання даних із файлів та про виведення їх на екран.

▍Читання файлів

head my_file: зчитує рядки з початку файлу та виводить їх на екран. Читати можна не тільки вміст файлів, але й те, що команди виводять у stdin, використовуючи цю команду як елемент конвеєра.

tail my_file: зчитує рядки з кінця файлу Цю команду також можна використовувати в конвеєрі.

[закладки] Bash для початківців: 21 корисна команда
Head (голова) знаходиться спереду, а tail (хвіст) – ззаду

Якщо ви працюєте з даними, використовуючи бібліотеку pandas, тоді команди head и tail повинні бути вам знайомі. Якщо це не так - погляньте на вищенаведений малюнок, і ви легко їх запам'ятаєте.

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

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

[закладки] Bash для початківців: 21 корисна команда
Команда cat

cat my_one_file.txt: коли цій команді передають один файл — вона виводить його в stdout.

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

cat my_file1.txt my_file2.txt: отримавши на вхід кілька файлів ця команда конкатенує їх вміст і виведе те, що вийшло stdout.

Якщо результат конкатенації файлів потрібно зберегти як новий файл, можна скористатися оператором >:

cat my_file1.txt my_file2.txt > my_new_file.txt

Тепер поговоримо про те, як видаляти файли та зупиняти процеси.

▍Видалення файлів, зупинка процесів

rm my_file: видаляє файл my_file.

rm -r my_folder: видаляє папку my_folder і всі файли і папки, що містяться в ній. Прапор -r вказує на те, що команда працюватиме у рекурсивному режимі.

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

kill 012345: зупиняє вказаний процес, даючи йому час на коректне завершення роботи.

kill -9 012345: примусово завершує цей запущений процес. Прапор виду -s SIGKILL означає те саме, що і прапор -9.

▍Пошук

Для пошуку даних можна використовувати різні команди. Зокрема - grep, ag и ack. Почнемо наше знайомство з цими командами з grep. Це — перевірена часом, надійна команда, яка, щоправда, повільніша за інших і не так, як вони, зручна у використанні.

[закладки] Bash для початківців: 21 корисна команда
Команда grep

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

grep -i my_regex my_file: пошук виконується без урахування регістру символів.

grep -v my_regex my_file: повертає всі рядки, які не містять my_regex. Прапор -v означає інверсію, він нагадує оператор NOT, наявний у багатьох мовах програмування.

grep -c my_regex my_file: повертає відомості про кількість збігів з шаблоном, знайдених у файлі.

grep -R my_regex my_folder: виконує рекурсивний пошук у всіх файлах, що знаходяться в заданій папці та у папках, вкладених у неї.

Тепер поговоримо про команду ag. Вона з'явилася пізніше grep, Вона швидше працювати з нею зручніше.

[закладки] Bash для початківців: 21 корисна команда
Команда ag

ag my_regex my_file: повертає відомості про номери рядків, та самі рядки, в яких знайдені збіги з my_regex.

ag -i my_regex my_file: пошук виконується без урахування регістру символів.

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

ag my_regex my_file -- skip-vcs-ignores: вміст файлів систем автоматичного контролю версій (на кшталт .gitignore) при пошуку не враховується.

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

На початку цього розділу ми згадали про команду ack. Команди ack и ag дуже схожі, можна сказати, що вони взаємозамінні на 99%. Проте команда ag працює швидше, тож я описав саме її.

Тепер поговоримо про роботу із архівами.

▍Архівація

tar my_source_directory: об'єднує файли з папки my_source_directory в один файл tarball. Такі файли зручно використовувати для того, щоб передавати комусь великі набори файлів.

[закладки] Bash для початківців: 21 корисна команда
Команда tar

Tarball-файли, створювані цією командою, є файлами з розширенням .tar (Tape ARchive). Те, що в назві команди та в розширенні імен файлів, створюваних їй, приховано слово «tape» (стрічка) говорить про те, як давно існує ця команда.

tar -cf my_file.tar my_source_directory: створює tarball-файл з ім'ям my_file.tar із вмістом папки my_source_directory. Прапор -c розшифровується як "create" (створення), а прапор -f як "file" (файл).

Для вилучення файлів, що знаходяться в .tar-файлі, використовується команда tar з прапорами -x («extract», витяг) та -f ("file", файл).

tar -xf my_file.tar: витягує файли з my_file.tar у поточну робочу директорію.

Тепер поговоримо про те, як стискати та розпаковувати .tar-Файли.

tar -cfz my_file.tar.gz my_source_directory: тут, використовуючи прапор -z («zip», алгоритм стиснення) зазначено, що для стиснення файлів має використовуватися алгоритм gzip (GNU ZIP). Стиснення файлів дозволяє заощаджувати дисковий простір під час зберігання таких файлів. Якщо ж файли планується, наприклад, передавати іншим користувачам, це сприяє швидшому завантаженню таких файлів.

Розпакувати файл .tar.gz можна, додавши прапор -z до команди вилучення вмісту .tar-Файлів, яку ми розглядали вище. Виглядає це так:

tar -xfz my_file.tar.gz
Слід зазначити, що у команди tar є ще багато корисних прапорів.

Bash-псевдоніми

Bash-псевдоніми (їх ще називають аліасами або скороченнями) призначені для створення скорочених найменувань команд або їх послідовностей, використання яких замість звичайних команд прискорює роботу. Якщо у вас, припустимо, є псевдонім bu, за яким ховається команда python setup.py sdist bdist_wheel, то для виклику цієї команди достатньо скористатися цим псевдонімом.

Для створення такого псевдоніма достатньо додати наступну команду до файлу ~/.bash_profile:

alias bu="python setup.py sdist bdist_wheel"

Якщо у вашій системі немає файлу ~/.bash_profile, то ви можете створити його самостійно, скориставшись командою touch. Після створення псевдоніма перезапустіть термінал, після чого ви зможете цим псевдонімом користуватися. У цьому випадку введення двох символів замінює введення більш ніж трьох десятків символів команди, яка призначена для збірки Python-пакети.

В ~/.bash_profile можна додавати псевдоніми для будь-яких команд, які часто використовуються.

▍Підсумки

У цьому матеріалі ми розглянули 21 популярну команду Bash та поговорили про створення псевдонімів для команд. Якщо вам ця тема цікава. ось цикл публікацій, присвячений Bash. Тут можна знайти PDF-версію цих публікацій. Крім того, якщо ви хочете освоїти Bash, пам'ятайте, що тут, як і при вивченні будь-якої іншої програмної системи, важлива практика.

Шановні читачі! Які команди, які корисно знати початківцям, ви додали б до тих, що були розглянуті у цій статті?

Також читайте у нашому блозі цикл публікацій про bash-скрипти

[закладки] Bash для початківців: 21 корисна команда

Джерело: habr.com

Додати коментар або відгук