Как стать мастером командной строки

Самый полезный урок информатики, который вы, вероятно, никогда не посещали

Изображение создано с помощью Стабильная диффузия

OОдна вещь, которую я постоянно наблюдал на протяжении всей своей карьеры, заключается в том, что у наиболее продуктивных ученых и инженеров, работающих с данными, обычно есть одна общая черта: они мастера командной строки. Они могут перемещаться по файловой системе своего компьютера, искать шаблоны в файлах журналов, а также управлять заданиями, исходным кодом и контролем версий из командной строки, не полагаясь на медленную навигацию с помощью мыши и графических пользовательских интерфейсов.

Тем не менее, это «волшебство» командной строки, как может показаться тому, кто незнаком с инструментами оболочки, обычно не является частью стандартных учебных программ по информатике. Ан Курс MIT освоение командной строки метко названо «Недостающий семестр вашего образования в области компьютерных технологий».

Этот пост представляет собой мой личный курс из 10 уроков «Мастерство командной строки 101», предназначенный для читателей, которые хотят больше работать с командной строкой, а не с графическим пользовательским интерфейсом. Мы рассмотрим основы оболочки и переменной пути, псевдонимов, прав доступа к файлам, потоковой передачи и конвейерной обработки, эффективного управления заданиями, tmux, ssh, git и vim.

Давайте начнем. Добро пожаловать в CLW 101.

1. Оболочка

Когда вы открываете терминал, вы видите оболочка, например bash (перерожденная оболочка) или ZSH (z-shell). Оболочка на самом деле представляет собой полноценный язык программирования с доступом к определенным стандартным программам, которые позволяют осуществлять навигацию по файловой системе и манипулирование данными. Вы можете узнать, какую оболочку вы используете, набрав:

echo $ SHELL

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

2. Переменная пути

Когда вы вводите в оболочку имена определенных программ, например python, catили ls, откуда оболочка узнает, откуда взять эту программу? В этом цель переменная пути. Эта переменная хранит список всех путей, по которым оболочка ищет программы, разделенных двоеточиями. Вы можете проверить переменную пути, набрав:

echo $ PATH

И вы можете добавить дополнительные каталоги в переменную пути с помощью этой команды:

экспортировать PATH="my_new_path:$PATH"

Лучше всего добавить эту команду в файл bashrc, чтобы дополнительный каталог всегда находился в вашем пути при запуске новой оболочки.

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

Псевдонимов — это специальные команды, которые вы можете определить, чтобы избежать повторного ввода длинных команд, например:

псевдоним ll="ls -лах"
псевдоним gs="статус git"
alias gp="git push origin master"

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

псевдоним mv="МВ -i"

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

Как только вы добавите эти псевдонимы в свой файл bashrc, они всегда будут доступны при запуске новой оболочки.

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

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

-rwxrwxrwx

Здесь,

  • rwx обозначают права чтения, записи и выполнения соответственно
  • 3 rwx блоки предназначены для (1) пользователя, (2) группы пользователей и (3) всех остальных. В данном примере все три объекта имеют разрешения на чтение, запись и выполнение.
  • тире указывает, что это файл. Вместо тире вы также можете увидеть 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), программа по умолчанию запускается в передний плани не позволит вам делать что-либо еще, пока программа не будет завершена. Пока программа работает на переднем плане, вы можете:

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

Чтобы сразу запустить команду в фоновом режиме, вы используете команду & оператор:

python run.py &

👉 Как узнать, какие программы сейчас работают в фоновом режиме? Используйте команду jobs. Это отобразит имена запущенных заданий, а также их идентификаторы процессов (PID).

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

  • kill -STOP %1 посылает сигнал СТОП, приостанавливая программу 1.
  • kill -KILL %1 отправляет сигнал KILL, окончательно завершая программу 1.
Четыре панели терминала на моем личном терминале Macbook с tmux (изображение автора).

7. tmux

tmux («терминальный мультиплексор») позволяет легко создавать новые терминалы и перемещаться между ними. Это может быть чрезвычайно полезно, например, вы можете использовать один терминал для навигации по файловой системе, а другой терминал для выполнения заданий. С помощью tmux вы даже можете использовать оба этих процесса одновременно.

👉 Еще одна причина изучить tmux — это удаленная разработка: когда вы выходите из удаленной машины (намеренно или случайно), все программы, которые активно работали внутри вашей оболочки, автоматически завершаются. С другой стороны, если вы запускаете свои программы внутри оболочки tmux, вы можете просто отсоединить окно tmux, выйти из системы, закрыть компьютер и вернуться в эту оболочку позже, как будто вы никогда не выходили из системы.

Вот несколько основных команд, которые помогут вам начать работу с tmux:

  • tmux new -s run создает новый сеанс терминала с именем «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и оператор потоковой передачи:

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

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

удаленный ssh ​​-i ~/.ssh/id_rsa

Еще лучшая практика — создать файл ~/.ssh/config который содержит все ваши конфигурации аутентификации ssh. Например, если ваш config Файл выглядит следующим образом:

Хост-разработчик
Имя хоста удаленный
IdentityFile ~/.ssh/id_rsa

Затем вы можете войти в удаленный доступ, просто набрав ssh dev.

9. мерзавец

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 А-За-з '' | тр AZ az | сортировать | уникальный -c | сортировка -rn | sed ${1}q

Это не сильно отличается от воображения Stable Diffusion, показанного в начале этой статьи. Действительно, волшебство.

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

<!–

->

Отметка времени:

Больше от Блокчейн-консультанты