Як стати майстром командного рядка

Найкорисніший урок інформатики, який ви, мабуть, ніколи не відвідували

Зображення створено за допомогою Стабільна дифузія

OЩо я постійно спостерігав протягом своєї кар’єри, так це те, що найпродуктивніші науковці та інженери даних зазвичай мають одну спільну рису: вони майстри командного рядка. Вони можуть переміщатися у файловій системі свого комп’ютера, шукати шаблони в файлах журналу та керувати завданнями, вихідним кодом і контролем версій – все це з командного рядка, не покладаючись на повільну навігацію за допомогою миші та графічного інтерфейсу користувача.

Тим не менш, це «чарівництво» командного рядка, як це може здатися комусь, хто не знайомий з інструментами оболонки, зазвичай не є частиною стандартних навчальних програм інформатики. Ан курс MIT навколо освоєння вашого командного рядка влучно названо "Відсутній семестр вашої CS освіти".

Ця публікація — мій особистий курс із 10 уроків «Майстерства командного рядка 101», призначений для читачів, які хочуть більше працювати з командним рядком, а менше — з графічним інтерфейсом користувача. Ми розглянемо основи оболонки та змінної шляху, псевдоніми, дозволи на файли, потокову передачу та конвеєр, ефективне керування завданнями, tmux, ssh, git і vim.

Давайте розпочнемо. Ласкаво просимо до CLW 101.

1. Оболонка

Коли ви відкриваєте свій термінал, ви дивитесь на a оболонка, наприклад bash (перетворена оболонка) або ZSH (z-оболонка). Оболонка насправді є повною мовою програмування з доступом до певних стандартних програм, які дозволяють навігацію файловою системою та маніпуляції даними. Ви можете дізнатися, яку оболонку ви використовуєте, ввівши:

echo $ SHELL

У bash кожного разу, коли ви запускаєте нову оболонку, оболонка завантажує послідовність команд, які вказані всередині .bashrc файл, який зазвичай знаходиться у вашому домашньому каталозі (якщо ви користуєтеся Mac, там зазвичай є .bash_profile натомість файл). У цьому файлі ви можете вказати такі корисні речі, як змінна шляху або псевдоніми (докладніше про це нижче).

2. Змінна шляху

Коли ви вводите назву певних програм у свою оболонку, наприклад python, catабо ls, як оболонка знає, звідки взяти цю програму? Це мета змінна шляху. Ця змінна зберігає список усіх шляхів, у яких оболонка шукає програми, розділених двокрапками. Ви можете перевірити свою змінну шляху, ввівши:

echo $PATH

І ви можете додати додаткові каталоги до вашої змінної шляху за допомогою цієї команди:

експорт PATH="my_new_path:$PATH"

Найкраще додати цю команду до вашого файлу bashrc, щоб ваш додатковий каталог завжди був на вашому шляху, коли ви запускаєте нову оболонку.

3. Псевдоніми

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

псевдонім ll="ls -lah"
псевдонім gs="git status"
псевдонім gp="git push origin master"

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

псевдонім mv="mv -i"

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

Щойно ви додасте ці псевдоніми у свій файл bashrc, вони завжди будуть доступні під час запуску нової оболонки.

4. Права доступу до файлів і sudo

Якщо машиною користуються кілька користувачів, важливо налаштувати дозволи на файл які визначають, який користувач може виконувати які операції з якими даними. Коли ви друкуєте ls -l, ви побачите файли у вашому поточному каталозі разом із їхніми дозволами в такій формі:

-rwxrwxrwx

Тут,

  • rwx означають права читання, запису та виконання відповідно
  • 3 rwx блоки призначені для (1) користувача, (2) групи користувачів і (3) усіх інших. У наведеному прикладі всі 3 ці сутності мають дозволи на читання, запис і виконання.
  • тире означає, що це файл. Замість тире також можна побачити a d для каталогу або l для символічного посилання.

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

chmod u+x my_program.py

👉 Якщо файл є виконуваним, як оболонка знає, як його виконати? Це вказується за допомогою "хешба" в першому рядку файлу, наприклад #!/bin/bash для сценарію bash або #!/bin/python для сценарію python.

Нарешті, є спеціальний «суперкористувач», який має всі дозволи для всіх файлів. Ви можете запустити будь-яку команду під час написання суперкористувача sudo перед цією командою. Ви також можете запустити окрему оболонку sudo, виконавши команду

Sudo су

⚠️ Обережно використовуйте sudo. За допомогою sudo ви можете вносити зміни в код, який керує апаратним забезпеченням вашого комп’ютера, і помилка може зробити вашу машину непридатною для використання. Пам’ятайте, що з великою силою приходить велика відповідальність.

5. Потік і трубопроводи

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

python my_program.py > файл журналу

Ще одна корисна концепція трубопроводи: x | y виконує програму x, і спрямовує вихідні дані від x до програми y. Наприклад:

  • cat log.txt | tail -n5 : друкує останні 5 рядків з log.txt
  • cat log.txt | head -n5 : друкує перші 5 рядків із log.txt
  • cat -b log.txt | grep error : показує всі рядки в log.txt, які містять рядок «помилка», а також номер рядка (-b)

6. Управління робочими місцями

Якщо ви запускаєте програму з командного рядка (наприклад, python run.py), програма за умовчанням запускатиметься в foregroundі заборонити вам робити будь-що, доки програма не буде виконана. Коли програма працює на передньому плані, ви можете:

  • введіть control+C, який надішле програмі сигнал SIGINT (переривання сигналу), який наказує машині негайно перервати програму (якщо програма не має способу внутрішньої обробки цих сигналів).
  • введіть control+Z, що призупинить програму. Після паузи програму можна продовжити, вивівши її на передній план (fg), або відправивши його у фоновий режим (bg).

Щоб негайно запустити свою команду у фоновому режимі, ви використовуєте & оператор:

python run.py &

👉 Як дізнатися, які програми зараз працюють у фоновому режимі? Використовуйте команду jobs. Це відобразить назви запущених завдань, а також їхні ідентифікатори процесів (PID).

Нарешті,kill це програма для надсилання сигналів програмам, що працюють у фоновому режимі. Наприклад,

  • kill -STOP %1 надсилає сигнал STOP, призупиняючи програму 1.
  • kill -KILL %1 надсилає сигнал KILL, завершуючи програму 1 остаточно.
Чотири термінальні панелі на моєму персональному терміналі Macbook із tmux (зображення автора).

7. tmux

tmux («мультиплексор терміналів») дозволяє легко створювати нові термінали та переходити між ними. Це може бути надзвичайно корисним, наприклад, ви можете використовувати один термінал для навігації по файловій системі, а інший – для виконання завдань. За допомогою tmux ви навіть можете мати обидва з них пліч-о-пліч.

👉 Ще одна причина вивчити tmux — віддалена розробка: коли ви виходите з віддаленої машини (навмисно чи випадково), усі програми, які активно працювали у вашій оболонці, автоматично припиняються. З іншого боку, якщо ви запускаєте свої програми всередині оболонки tmux, ви можете просто від’єднати вікно tmux, вийти з системи, закрити комп’ютер і повернутися до цієї оболонки пізніше, ніби ви ніколи не виходили з системи.

Ось кілька основних команд, які допоможуть вам почати роботу з tmux:

  • tmux new -s run створює новий сеанс терміналу з назвою «виконати»
  • control-BD: від’єднати це вікно
  • tmux a : приєднати до останнього вікна
  • tmux a -t run : приєднати до вікна під назвою «виконати»
  • control-B“ : додайте іншу панель терміналів нижче
  • control-B% : додайте іншу панель терміналу праворуч
  • control-B➡️ : перейти до панелі терміналу праворуч (подібно до ліворуч, вгору, вниз)

8. SSH і пари ключів

ssh це програма для входу на віддалені машини. Щоб увійти на віддалені комп’ютери, вам потрібно буде вказати ім’я користувача та пароль або використати пару ключів, що складається з відкритого ключа (до якого мають доступ обидві машини) та закритого ключа (який доступний лише вашій машині). має доступ).

ssh-keygen це програма для генерації такої пари ключів. Якщо ви біжите ssh-keygen, він за замовчуванням створить відкритий ключ під назвою id_rsa.pub і закритий ключ під назвою id_rsaі помістіть обидва у свій ~/.ssh каталог. Вам потрібно буде додати відкритий ключ до віддаленої машини, що, як ви вже знаєте, ви можете зробити, об’єднавши канали cat, ssh, а також потоковий оператор:

cat .ssh/id_rsa.pub | ssh user@remote 'cat >> ~/.ssh/authorized_keys'

Тепер ви зможете використовувати ssh у віддаленому режимі, просто надавши свій закритий ключ:

віддалений ssh ​​-i ~/.ssh/id_rsa

Ще кращою практикою є створення файлу ~/.ssh/config який містить усі ваші налаштування автентифікації ssh. Наприклад, якщо ваш config файл виглядає наступним чином:

Хост розробник
HostName віддалений
IdentityFile ~/.ssh/id_rsa

Потім ви можете увійти в систему дистанційно, просто ввівши ssh dev.

9. git

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

👉 Зверніть увагу git не те саме, що GitHub: git це окрема програма, яка може керувати версіями вашого коду на локальному ноутбуці, тоді як GitHub є місцем для віддаленого розміщення вашого коду.

Ось кілька основних команд git:

  • git add : визначає, які файли ви бажаєте включити до наступного коміту
  • git commit -m 'my commit message' : фіксує зміну коду
  • git checkout -b dev : створює нову гілку під назвою «dev» і перевіряє цю гілку
  • git merge dev : об’єднує dev у поточну гілку. Якщо це створює конфлікти злиття, вам потрібно буде виправити ці конфлікти вручну, а потім запустити git add file_that_changed; git merge --continue
  • git stash : скасовує всі зміни та git stash pop повертає їх назад. Це корисно, якщо ви внесли зміни до головної гілки, а потім вирішили, що насправді хочете, щоб ці зміни були окремою гілкою.
  • git reset --hard : остаточно скасовує всі зміни

А ось кілька основних команд git для роботи з віддаленим хостом (наприклад, GitHub):

  • git clone : клонує копію сховища коду на вашу локальну машину
  • git push origin master : надсилає зміни на віддалений хост (наприклад, GitHub)
  • git pull : отримує останню версію з дистанційного керування. (Це те саме, що біг git fetch; git merge;).

👉 Перш ніж мати можливість запустити таку команду, як git push origin master, вам потрібно буде пройти автентифікацію за допомогою пари ключів ssh (див. Урок 8). Якщо ви використовуєте GitHub, ви можете просто вставити відкритий ключ у налаштування свого профілю.

10. вим

Vim — потужний текстовий редактор на основі командного рядка. Було б гарною ідеєю вивчити принаймні найпростіші команди в vim:

  • час від часу вам, можливо, доведеться входити на віддалену машину та змінювати код там. vim є стандартною програмою, тому зазвичай доступна на будь-якій машині, на якій ви працюєте.
  • при бігу git commit, за замовчуванням git відкриває vim для написання повідомлення коміту. Тож ви принаймні захочете знати, як записати, зберегти та закрити файл.

Найважливіше, що потрібно знати про vim, це те, що існують різні режими роботи. Після запуску vim ви всередині режим навігації, який ви використовуєте для навігації файлом. Тип i , Щоб почати режим редагування, в якому можна вносити зміни до файлу. Введіть Esc щоб вийти з режиму редагування та повернутися до режиму навігації.

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

  • x видаляє символ
  • dd видаляє весь рядок
  • b (назад) перехід до попереднього слова, n (далі) переходить до наступного слова
  • :wq збереже ваші зміни та закриє файл
  • :q! ігнорує ваші зміни та закриває файл

Перегляньте більше (набагато більше!) комбінацій клавіш vim цю шпаргалку vim.

Фото Василь Колода on Unsplash

Заключні думки

Вітаємо, ви пройшли «майстер командного рядка 101». Однак ми лише подряпали поверхню. Для натхнення розгляньте таку проблему:

«Дано текстовий файл і ціле число k, роздрукувати kнайпоширеніші слова у файлі (і кількість їх входжень) зі зменшенням частоти».

Як дослідник даних, моїм першим поштовхом може бути запуск блокнота Jupyter, завантаження даних, можливо, у pandas, а потім використання такої функції, як pandas agg. Однак для досвідченого майстра командного рядка це одностроковий текст:

tr -cs A-Za-z '' | tr A-Z a-z | сортувати | uniq -c | sort -rn | sed ${1}q

Це не дуже відрізняється від уяви Stable Diffusion, показаної на початку цієї статті. Чарівництво, справді.

Як стати майстром командного рядка Опубліковано з джерела https://towardsdatascience.com/how-to-become-a-command-line-wizard-5d78d75fbf0c?source=rss—-7f60cf5620c9—4 через https://towardsdatascience. com/feed

<!–

->

Часова мітка:

Більше від Консультанти з блокчейнів