Матеріал, переклад якого ми публікуємо сьогодні, призначений для тих, хто бажає освоїти командний рядок Linux. Вміння ефективно користуватися цим інструментом дозволяє заощаджувати чимало часу. Зокрема, тут йтиметься про командну оболонку Bash і про 21 корисну команду. Також ми поговоримо про те, як користуватись прапорами команд та псевдонімами Bash, які дозволяють прискорити введення довгих інструкцій.
→
Терміни
У ході освоєння роботи в командному рядку Linux вам може зустрітися безліч понять, в яких буде корисно орієнтуватися. Деякі з них, на кшталт "Linux" і "Unix", або "командна оболонка" і "термінал", іноді плутають. Поговоримо про ці та інші важливі терміни.
Тепер, коли ми розглянули важливі терміни, хочу зазначити, що тут я користуватимуся термінами «Bash», «оболонка» і «командний рядок» як взаємозамінними, так само як і поняттями «директорія» (directory) та «папка» (folder).
стандартні 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
відносний шлях ../
.
Команда 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_directorymy_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
буде створено текстовий файл, що містить список того, що знаходиться у поточній робочій директорії.
Якщо замість символу >
скористатися конструкцією >>
, то за умови існування файлу, в який перенаправляється виведення команди, цей файл перезаписаний не буде. Дані будуть додані до кінця цього файлу.
Тепер поглянемо на конвеєрну обробку даних.
Те, що виводить одна команда, подається на вхід іншої команди. Це схоже на підключення однієї труби до іншої
first_command | second_command
: символ конвеєра, |
, використовується для того, щоб відправити результати роботи однієї команди іншій команді. Те, що команда, що знаходиться в лівій частині описуваної конструкції, відправляє в stdout
, потрапляє в stdin
команда, яка знаходиться праворуч від символу конвеєра.
У Linux конвеєрну обробку даних можна організувати з використанням практично будь-якої правильно складеної команди. Часто кажуть, що все в Linux це конвеєр.
За допомогою символу конвеєра можна об'єднувати кілька команд у ланцюжок. Виглядає це так:
first_command | second_command | third_command
Конвеєр з кількох команд можна порівняти з трубопроводом
Зверніть увагу на те, що коли команда, що знаходиться зліва від символу |
, виводить щось у stdout
те, що вона вивела, негайно стає доступним у вигляді stdin
другий команді. Тобто виявляється, що використовуючи конвеєр, ми маємо справу з паралельним виконанням команд. Іноді це може спричинити несподівані результати. Подробиці про це можна почитати
Тепер поговоримо про читання даних із файлів та про виведення їх на екран.
▍Читання файлів
head my_file
: зчитує рядки з початку файлу та виводить їх на екран. Читати можна не тільки вміст файлів, але й те, що команди виводять у stdin
, використовуючи цю команду як елемент конвеєра.
tail my_file
: зчитує рядки з кінця файлу Цю команду також можна використовувати в конвеєрі.
Head (голова) знаходиться спереду, а tail (хвіст) – ззаду
Якщо ви працюєте з даними, використовуючи бібліотеку pandas, тоді команди head
и tail
повинні бути вам знайомі. Якщо це не так - погляньте на вищенаведений малюнок, і ви легко їх запам'ятаєте.
Розглянемо інші способи читання файлів, поговоримо про команду cat
.
Команда cat
або виводить вміст файлу на екран, або конкатенує кілька файлів. Це залежить від того, скільки файлів передано цій команді під час виклику.
Команда 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
. Це — перевірена часом, надійна команда, яка, щоправда, повільніша за інших і не так, як вони, зручна у використанні.
Команда 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
, Вона швидше працювати з нею зручніше.
Команда 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. Такі файли зручно використовувати для того, щоб передавати комусь великі набори файлів.
Команда 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
. Після створення псевдоніма перезапустіть термінал, після чого ви зможете цим псевдонімом користуватися. У цьому випадку введення двох символів замінює введення більш ніж трьох десятків символів команди, яка призначена для
В ~/.bash_profile
можна додавати псевдоніми для будь-яких команд, які часто використовуються.
▍Підсумки
У цьому матеріалі ми розглянули 21 популярну команду Bash та поговорили про створення псевдонімів для команд. Якщо вам ця тема цікава.
Шановні читачі! Які команди, які корисно знати початківцям, ви додали б до тих, що були розглянуті у цій статті?
→
Джерело: habr.com