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

Вместо этого они обратятся к мощному швейцарскому армейскому ножу — командной строке компьютера. Зачем изучать этот инструмент, если вы можете использовать знакомые и удобные графические интерфейсы, предлагаемые современными операционными системами?

  1. Точность — командная строка позволяет точно настраивать действия способами, которые просто невозможны в обычных пользовательских интерфейсах.
  2. Портативность — например, если вы используете SSH для доступа к удаленному компьютеру, единственным вариантом часто будет взаимодействие с этим компьютером через его командную строку.
  3. Скорость — как только вы научитесь взаимодействовать с командной строкой, повседневные задачи будут занимать меньше времени.

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

Общие условия

Говоря о работе с командной строкой, возникает ряд общих терминов. Вы можете слышать упоминания о таких вещах, как Bash и CLI, и удивляться, в чем разница. Вот краткий обзор наиболее часто используемых терминов.

CLI — интерфейс командной строки, общий термин для интерфейса, который представляет текстовые подсказки и позволяет пользователю взаимодействовать с программным обеспечением и операционными системами, вводя команды.

Shell — интерфейс, используемый для взаимодействия с операционной системой. В контексте разработки программного обеспечения это обычно относится к CLI, а не к GUI (графическому интерфейсу пользователя), который конечный пользователь будет использовать для изучения своей файловой системы.

Терминал — программа, запускающая оболочку. В MacOS есть приложение под названием Terminal, которое позволяет пользователю запускать команды оболочки.

Bash — комбинация оболочки и языка, используемая в большинстве операционных систем на основе Unix, таких как MacOS. Обратите внимание, что я лично использую Mac, поэтому команды и термины могут немного отличаться от обсуждаемых ниже, если вы работаете на компьютере с Windows.

ZSH, fish — это альтернативные оболочки, которые можно установить в ОС на основе Unix для замены Bash и предоставления некоторых дополнительных функций.

Анатомия команды

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

$ curl -v --fail --data "foo=bar" http://localhost:3000

Приведенный выше пример содержит несколько элементов, с которыми вы будете часто сталкиваться. $ — это просто сокращенный способ показать, что текст предназначен для ввода в CLI, он не является частью команды. Если вы пытаетесь скопировать команду из Интернета для использования на своем компьютере, не включайте этот префикс, если вы его видите.

Первый элемент, curl, — это фактическая команда, отдаваемая машине. В этом случае команда используется для отправки данных на сервер или с сервера. Затем команда модифицируется двумя флагами, которые изменяют поведение команды. Первый, -v, указывает curl выводить дополнительные подробные журналы. Это пример короткой формы флага. Второй — длинный флаг, указывающий curl на тихий сбой, поведение, которого обычно у него нет.

Следующий элемент фактически состоит из —data и ”foo=bar”. Это эквивалентно вводу —data=“foo=bar”. Этот аргумент устанавливает значение data в переданную строку "foo=bar". Хотя используемая терминология несколько изменчива, этот тип аргумента обычно не называется флагом, поскольку он не является логической опцией.

Последний аргумент — это основное значение, которое передается в curl. В этом примере это фактическое местоположение URL-адреса. Curl требует этот последний аргумент, но первые три являются необязательными. В документации к curl эта структура обозначена как curl [options] <URL>. Некоторые команды будут иметь аналогичную структуру, а другие будут проще и могут использоваться вообще без каких-либо аргументов.

Теперь, когда вы знаете, что такое командная строка и как выглядит команда, для каких целей вы можете ее использовать?

Изучение каталогов

Когда большинству пользователей компьютеров нужно найти файл на своем компьютере, они начинают с открытия файлового менеджера (например, Finder на Mac или Explorer в Windows). Затем они дважды щелкали значок папки и просматривали файлы внутри. Все это можно сделать и с помощью команды.

$ cd foobar

Команда cd используется для перемещения по каталогам (иногда их называют папками, они имеют то же значение). В приведенной выше команде пользователь перемещается из своего текущего местоположения в каталог с именем «нижний колонтитул». Для успешного выполнения команды должна существовать папка с таким точным именем.

Итак, каково ваше текущее местоположение? Когда вы впервые откроете командную строку, вы начнете с вашего домашнего каталога. В MacOS ваш домашний каталог будет выглядеть примерно так: /Users/yourname. Таким образом, если вы откроете свой терминал и введете команду выше, вы окажетесь в /Users/yourname/foobar. Символ тильды является сокращением для этого каталога, поэтому ввод команды cd ~ всегда будет возвращать вас домой, независимо от вашего текущего местоположения.

Абсолютные пути — пути, начинающиеся с косой черты, например /usr/local. Этот тип пути всегда начинается с корневого каталога машины (самого верхнего каталога). Он игнорирует текущее местоположение.

Относительные пути — путь без косой черты в начале. Этот тип пути вычисляется из текущего местоположения. Приведенный выше путь «foobar» является примером относительного пути.

$ cd ..

Приведенная выше команда перемещается в каталог над текущим местоположением.

$ cd ../foobaz

Эта команда перемещается на один каталог вверх, а оттуда в каталог с именем «foobaz».

Итак, как вы узнаете, куда перемещаться, когда находитесь в каталоге? Для этого вы будете использовать команду ls, чтобы перечислить файлы и подкаталоги непосредственно в вашем текущем местоположении. Он часто используется в форме ls -al, которая включает в себя комбинацию двух флагов. -a приводит к тому, что список включает все результаты, включая скрытые файлы и каталоги. -l приводит к тому, что результаты выводятся в виде удобного отформатированного списка с некоторой дополнительной информацией. Результат будет выглядеть примерно так:

$ ls -al
total 0
drwxr-xr-x@   9 root  wheel    288 Sep 20 21:01 .
drwxr-xr-x   29 root  wheel    928 Dec 15 08:21 ..
drwxr-xr-x  971 root  wheel  31072 Dec 15 08:19 bin
drwxr-xr-x  304 root  wheel   9728 Dec 15 08:19 lib
drwxr-xr-x  248 root  wheel   7936 Dec 15 08:19 libexec
drwxr-xr-x   14 root  wheel    448 Oct 25 14:03 local
drwxr-xr-x  239 root  wheel   7648 Dec 15 08:19 sbin
drwxr-xr-x   46 root  wheel   1472 Oct 25 13:56 share

Наиболее важная информация здесь содержится в последних трех столбцах. Последнее - это имя каталога/файла. Предпоследнее — это время создания, а предпоследнее — размер файла.

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

$ less filename.txt

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

Управление каталогами и файлами

Изучив файловую систему с помощью ls и cd, вы можете начать вносить изменения в найденные элементы.

Создать новый каталог

mkdir my_new_directory

Это создаст новый пустой каталог в вашем текущем местоположении.

Удалить файл

rm filename.txt

Эта команда удалит или удалит один файл. Он вернет предупреждение, если файл не существует.

Удалить каталог

rm -rf sample_directory

Эта команда удалит весь каталог, если он существует. Комбинированные флаги -rf — это сокращение от recursive и force. Это позволяет rm удалить все содержимое выбранной папки, подавляя предупреждающие сообщения по умолчанию.

Скопировать файл

mv filename.txt ~/sample/path/filename.txt

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

Переименовать файл

mv filename.txt newname.txt

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

Создание и редактирование файлов

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

$ touch newfile.txt

После выполнения команды файл file.txt будет существовать, но будет полностью пуст. Если вы хотите добавить в файл простое содержимое, вы можете использовать следующую команду.

$ echo "A sample sentece" >> newfile.txt

Каждый раз, когда эта команда выдается, она будет добавлять ввод в конец файла.

Для более сложного редактирования файлов можно использовать текстовый редактор, полностью существующий в терминальном приложении. Существует несколько вариантов таких редакторов, но наиболее часто используется VIM. Использование этих редакторов может быть сложной задачей для начинающих, поскольку руководства охватывают целые книги. Для начала, вот несколько очень основных предметов первой необходимости.

ВИМ

Откройте файл в VIM с помощью следующей команды:

$ vim filename.txt

Это откроет редактор VIM. Если вы попытаетесь начать печатать, ничего не произойдет. Чтобы внести изменения, вам нужно переключиться в режим вставки. Для этого просто введите i. В нижней части экрана вы должны увидеть — INSERT —, теперь вы можете приступить к редактированию вашего файла. Имейте в виду, что вы не сможете использовать мышь, вся навигация должна осуществляться с помощью клавиатуры.

После внесения изменений вам нужно будет сохранить файл и выйти из редактора. Для этого сначала нажмите клавишу esc. Затем введите :wq и нажмите Enter. Эта команда указывает VIM сохранить изменения в файле и выйти.

Дополнительные ресурсы

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

В чем разница между флагом, опцией и аргументом?

Параметры командной строки

Vim 101: Руководство для начинающих по Vim