Введение в CLI для повышения производительности при взаимодействии с компьютерами

Вы помните ту сцену из фильма, где хакер внезапно открывает темный экран на своем ноутбуке, яростно печатает в течение нескольких секунд, и происходит какое-то важное событие? В этих сценах (и если они действительно происходили) хакеры напрямую взаимодействуют с компьютером посредством текстового ввода, в отличие от того, как мы обычно взаимодействуем с нашими телефонами или ноутбуками через графический интерфейс пользователя (GUI). В этом посте мы рассмотрим, как вы тоже можете взаимодействовать со своим компьютером, используя только текст. Скорее всего, к концу этого поста вы обнаружите, что этот метод даже более эффективен, чем обычный графический интерфейс.

Интерфейс командной строки или CLI — это метод взаимодействия с нашими компьютерами посредством ввода текстовых команд в терминал (или консоль). Это отличается от обычного графического пользовательского интерфейса или графического интерфейса пользователя, к которому привыкло большинство пользователей. Примером графического интерфейса пользователя является iOS для iPhone, интерфейс которой является графическим, и пользователи могут нажимать и проводить пальцем по экрану для взаимодействия с устройством. Опытные и технические пользователи считают CLI лучшим средством взаимодействия с компьютерами, поскольку CLI позволяет более эффективно и напрямую управлять компьютером.

Я вспоминаю, каким устрашающим казался мне CLI до того, как я начал с ним играться. Но процесс обучения оказался очень легким, полезным и, что более важно, увлекательным. Поэтому я решил создать этот учебник, чтобы поделиться своими знаниями — вы тоже можете считать себя «инициированными», когда прочтете этот пост!

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

Давайте начнем!

(Все изображения, если не указано иное, принадлежат автору.)

Шпаргалка по интерфейсу командной строки

Не стесняйтесь обращаться к этой таблице (или сохранять ее) для использования в будущем после того, как вы ознакомитесь с учебным пособием с примерами.

С этого момента я рассмотрю каждую из этих команд более подробно с примерами. Я бы посоветовал вам следовать каждому шагу и учиться, практикуясь, читая учебник.

1. Где находится интерфейс командной строки?

Начнем с того, как запустить CLI.

  • Mac: Ищем «Терминал». Так что продолжайте искать «Терминал» в поиске Spotlight на вашем Mac.

Совет для профессионалов. Вы можете удерживать нажатой клавишу «command» и, удерживая ее, нажать клавишу пробела, после чего должен открыться поиск Spotlight. Затем просто начните вводить «Терминал» и нажмите «возврат», когда он появится в поиске Spotlight.

  • Windows: интерфейс командной строки в Windows называется «Командной строкой». Нажмите кнопку «Пуск» и введите «cmd» в строке поиска. Затем нажмите «Командная строка» или «Командный процессор Windows».

2. Знакомство с командами

После запуска моего терминала я вижу следующее (ваш должен немного отличаться с той же структурой):

farzad 20230211_CLI %

В приведенном выше примере «farzad» — это мое имя пользователя, а «20230211_CLI» — мой текущий каталог. Это каталог, в котором я создаю этот урок, датированный сегодняшним днем. Вместо этого каталога вы можете увидеть символ тильды (~), обозначающий домашний каталог.

Это самое начало, с которого мы можем начать вводить команды.

Как мы видели в этом примере, командная строка показывает нам, где мы находимся (например, «20230211_CLI» в приведенном выше примере), но если мы хотим увидеть полный путь к нашему текущему местоположению, мы можем использовать команду pwd или распечатать рабочий каталог следующим образом. :

farzad 20230211_CLI % pwd
/Users/farzad/Downloads/M/Archive/20230211_CLI

Первая строка — это команда, а вторая строка показывает полный адрес, начиная с моего домашнего каталога (то есть каталога самого высокого уровня) и заканчивая текущим местоположением.

3. Список файлов и каталогов

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

Мы можем использовать команду ls или list для просмотра содержимого каталога. Вот что я вижу, когда использую эту команду:

farzad 20230211_CLI % ls
CLI.ipynb random-folder

Первый список — это команда, а вторая строка — результаты. Вторая строка сообщает нам о файле с именем «CLI.ipynb» (это блокнот Jupyter, в котором я пишу этот пост) и каталоге с именем «random-folder».

Но что, если мы хотим увидеть более подробную информацию о каждом файле или каталоге? Например, было бы неплохо увидеть размер файла и т. д. Мы можем добиться этого, добавив опцию -l (т.е. длинный формат) к существующей команде списка, следующим образом:

farzad 20230211_CLI % ls -l
total 8
-rw-r--r-- 1 mafarzad staff 3673 Feb 11 17:40 CLI.ipynb
drwxr-xr-x 2 mafarzad staff 64 Feb 11 17:35 random-folder

Это имеет гораздо больше информации. Давайте посмотрим, что все это значит, начиная слева.

  1. Разрешения. Это последовательность из 10 символов, указывающая права доступа к конкретному файлу или каталогу, а именно:
  • Символ 1 указывает на тип файла: для обычного файла; d для каталога; l для символической ссылки
  • Символы со 2 по 4: Разрешения владельца
  • Персонажи с 5 по 7: Разрешения группы
  • Символы с 8 по 10: разрешения других пользователей.
  • Эти девять символов могут состоять из следующего:
    r: чтение
    w: запись
    x: выполнение
    -: разрешение не предоставлено

2. Количество ссылок: количество жестких ссылок на файл или каталог
3. Владелец: имя пользователя владельца файла или каталога
4. Группа: имя группы, связанное с файлом или каталогом
5. Размер: размер в байтах
6. Дата и время : Дата и время последних изменений, внесенных в файл или каталог.
7. Имя: имя файла или каталога.

4. Навигация

Теперь, когда мы знаем, что в моем местоположении есть каталог с именем «random-folder», давайте посмотрим, как мы можем войти в этот каталог.

Мы можем использовать команду cd или изменить каталог для навигации следующим образом:

farzad 20230211_CLI % cd random-folder 
farzad random-folder % 

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

Но как мы можем вернуться на один уровень каталога? Другими словами, теперь, когда мы находимся в «случайной папке», как мы можем вернуться туда, где мы были раньше, то есть в «20230211_CLI»? Мы можем использовать команду изменения каталога, за которой следует пробел и две точки. Я буду использовать pwd до и после этой команды, чтобы продемонстрировать, как это работает в приведенном ниже примере.

farzad random-folder % pwd
/Users/mafarzad/Downloads/M/Archive/20230211_CLI/random-folder

Во-первых, мы просто использовали pwd, чтобы подтвердить, что мы находимся в «случайной папке». Мы также видим, что «20230211» всего на один уровень выше нашего текущего местоположения. Затем давайте воспользуемся командой cd .., чтобы перейти на один уровень (не забудьте добавить один пробел между cd и ..) следующим образом:

farzad random-folder % cd ..
farzad 20230211_CLI % pwd
/Users/mafarzad/Downloads/M/Archive/20230211_CLI

Здесь мы сначала использовали cd .. для перехода к «20230211_CLI», а затем использовали pwd для подтверждения местоположения.

Поскольку я хочу использовать «случайную папку» в нашем следующем примере, давайте потренируемся снова возвращаться к «случайной папке» следующим образом:

farzad 20230211_CLI % cd random-folder 
farzad random-folder % pwd
/Users/mafarzad/Downloads/M/Archive/20230211_CLI/random-folder

5. Создание и удаление файлов и каталогов

Команда touch может использоваться для создания нового файла. В приведенной ниже команде я создам новый файл с именем «new_file.txt», а затем использую команду list, чтобы вернуть содержимое этого каталога:

farzad random-folder % touch new_file.txt
farzad random-folder % ls -l
total 0
-rw-r--r-- mafarzad staff 0 Feb 11 18:04 new_file.txt
farzad random-folder % 

В самой первой строке я создал текстовый файл, а затем, используя список в длинном формате (например, ls -l), я подтвердил, что файл был создан. Интересно отметить, что total 0 указывает на то, что в этом каталоге нет файлов, в то время как имя файла фактически указано там из-за того, что вновь созданный файл на данный момент является просто именем, без реального содержимого.

Мы можем использовать mkdir или создать каталог, за которым следует имя каталога, чтобы создать новую папку (или каталог) следующим образом:

farzad random-folder % mkdir new-folder
farzad random-folder % ls -l
total 0
drwxr-xr-x 2 mafarzad staff 64 Feb 11 18:08 new-folder
-rw-r--r-- mafarzad staff 0 Feb 11 18:04 new_file.txt

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

Затем давайте удалим текстовый файл, используя команду rm или remove, за которой следует имя файла, как показано ниже:

farzad random-folder % rm new_file.txt 
farzad random-folder % ls -l
total 0
drwxr-xr-x 2 mafarzad staff 64 Feb 11 18:08 new-folder

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

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

farzad random-folder % rmdir new-folder 
farzad random-folder % ls -l
total 0

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

6. Скопируйте файлы или каталоги

6.1. Копировать файлы

Идея аналогична (но не идентична) копированию и вставке в операционных системах Mac и Windows, но это можно сделать в одной строке с помощью команды cp или копирования, за которой следует имя исходного файла, а затем имя целевого файла. с пробелами между каждыми двумя. Формат команды будет следующим:

cp source-file destination-file

Давайте реализуем это на примере. Сначала мы создаем файл с именем «file-1.txt», чтобы нам было что копировать, а затем используем команду списка, чтобы подтвердить, что файл существует.

farzad random-folder % touch file-1.txt
farzad random-folder % ls
file-1.txt

Затем давайте скопируем «file-1.txt» в новый файл с именем «file-2.txt» и снова используем команду списка, чтобы подтвердить наши изменения.

farzad random-folder % cp file-1.txt file-2.txt
farzad random-folder % ls
file-1.txt file-2.txt

Как и ожидалось, теперь есть два файла, включая первый текстовый файл (то есть исходный файл) и второй текстовый файл (то есть файл назначения).

6.2. Копировать каталоги

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

cp -r source-directory destination-directory

Давайте рассмотрим пример. Во-первых, давайте посмотрим, какие файлы существуют в нашем текущем каталоге.

farzad random-folder % ls
file-1.txt file-2.txt

Далее давайте поднимемся на один уровень вверх в наших каталогах и посмотрим, какие каталоги и файлы там доступны.

farzad random-folder % cd ..
farzad 20230211_CLI % ls 
CLI.ipynb random-folder

Теперь давайте скопируем каталог «random-folder» и все его содержимое во второй каталог с именем «random-folder-2» следующим образом:

farzad 20230211_CLI % cp -r random-folder random-folder-2

Затем давайте воспользуемся командой list, чтобы подтвердить создание нового каталога. Затем мы будем использовать команду изменения каталога, чтобы перейти во вновь созданный каталог (т. е. «случайная папка-2»), и использовать там команду списка, чтобы убедиться, что все, что существовало в исходном каталоге «случайной папки», было был скопирован в каталог назначения «random-folder-2».

farzad 20230211_CLI % ls
CLI.ipynb random-folder random-folder-2
farzad 20230211_CLI % cd random-folder-2
farzad random-folder-2 % ls
file-1.txt file-2.txt

Как и ожидалось, вновь созданная «random-folder-2» включает в себя оба текстовых файла, которые были в исходном каталоге «random-folder».

7. Удалить (удалить) файлы или каталоги

Идея этого довольно проста — мы просто хотим удалить файлы или папки. Мы можем использовать команду rm или удалить, за которой следует пробел и имя файла, чтобы удалить файлы. Удаление каталогов точно такое же, но нам нужно добавить рекурсивную опцию -r в команду. Вот общие форматы, которым необходимо следовать:

rm name-of-file-to-be-removed
rm -r name-of-directory-to-be-removed

Давайте посмотрим, какие файлы у нас есть в этом каталоге, а затем мы можем удалить (удалить) один из них для практики.

farzad random-folder-2 % ls
file-1.txt file-2.txt
farzad random-folder-2 % rm file-1.txt 
farzad random-folder-2 % ls
file-2.txt

В первой строке использовалась команда list для отображения содержимого нашего текущего местоположения, где находились два текстовых файла. В третьей строке (или второй строке команды) мы использовали команду удаления, чтобы удалить (или удалить) «файл-1.txt», а затем использовали команду списка, чтобы подтвердить, что он был удален.

8. Просмотр содержимого файлов

До сих пор мы смотрели только на имена файлов и каталогов, но что, если мы хотим увидеть содержимое файла? Мы можем использовать команду cat или concatenate для просмотра содержимого текстового файла. Для этой цели я добавил ссылку, чтобы следовать за мной на Medium в файл с именем «file-1.txt». Давайте посмотрим, как мы можем использовать команду concatenate для просмотра содержимого этого файла.

farzad random-folder-2 % ls
file-1.txt file-2.txt
farzad random-folder-2 % cat file-1.txt 
If you liked this post, follow me on Medium at: 
https://medium.com/@fmnobar

Первая командная строка использовала список для возврата имен файлов в текущем каталоге. Во второй строке мы видим два файла в нашем текущем местоположении. Затем в третьей строке (или во второй строке команды) мы используем команду concatenate, чтобы получить пик внутри «file-1.txt», и вы видите результаты в самых последних двух строках:

If you liked this post, follow me on Medium at: 
https://medium.com/@fmnobar

9. Поиск

Во многих случаях нам нужно найти строку символов, и мы можем сделать это с помощью команды grep. Эта команда позволяет нам искать шаблон (мы называем строку символов «шаблоном» в этом контексте) в файле. Например, если бы мы хотели найти слово «средний» в «file-1.txt», мы бы сделали это следующим образом:

farzad random-folder-2 % grep medium file-1.txt
https://medium.com/@fmnobar

Первая строка команды использует grep или команду печати глобального регулярного выражения для поиска слова «средний» в «файле-1.txt», а вторая строка — это результаты этого поиска. Обратите внимание, что «file-1.txt» включает две строки, но команда grep возвращает только строку, содержащую искомый шаблон.

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

  1. Параметр -c используется для отображения только подсчета количества строк, содержащих искомый шаблон. Например, давайте посмотрим, сколько раз шаблон «средний» встречается в нашем «файле-1.txt». Мы знаем, что результат должен быть 1, и давайте проверим это.
farzad random-folder-2 % grep -c medium file-1.txt
1

2. Опция -v используется для отображения всех строк, не содержащих искомый шаблон. Мы знаем, что в нашем «файле-1.txt» была только одна строка, которая не включала шаблон «средний» — давайте проверим это в CLI.

farzad random-folder-2 % grep -v medium file-1.txt
If you liked this post, follow me on Medium at: 

Заключение

В этом посте мы говорили о том, чем интерфейс командной строки (или CLI) может отличаться от графического пользовательского интерфейса (или GUI) и почему технические пользователи предпочитают CLI графическому интерфейсу для повышения эффективности, производительности и гибкости. Затем мы рассмотрели наиболее распространенные команды, используемые в CLI, с примерами. Изучив эти примеры, вы должны чувствовать себя комфортно, запуская свой Терминал и начав практиковаться в использовании CLI в своей повседневной работе. Как и в случае с любым другим навыком, чем больше вы используете CLI, тем проще и полезнее будет это делать. Надеюсь, этот пост дал вам фору в вашем путешествии по CLI!

Спасибо за прочтение!

Если вы нашли этот пост полезным, пожалуйста, подпишитесь на меня на Medium и подпишитесь, чтобы получать мои последние сообщения!