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

Даже если вы используете Ubuntu в качестве настольной системы, иногда вам всё равно придется открывать терминал. Новички часто не знают многих вещей. Знание базовых команд Linux всегда помогает в таких случаях, но эта статья не об этом.

Эта статья посвящена небольшим, базовым и часто игнорируемым аспектам работы с терминалом. Это поможет новым пользователям Ubuntu Desktop освоиться в терминале и использовать его более эффективно.

g7niA6bjZ8vwJjGglJf9n8KAgImMkRrHgnR6N606.webp

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

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

Эта статья посвящена стандартному терминалу Ubuntu, который является реализацией GNOME terminal.

1. Открытие терминала с помощью сочетания клавиш

Вы можете открыть терминал в Ubuntu, найдя его в системном меню. Однако мой любимый способ — использовать сочетание клавиш Ctrl+Alt+T, которое является стандартным сочетанием клавиш в Ubuntu.

 Ctrl+Alt+T 

2. Терминал vs оболочка (shell) vs приглашение (prompt) vs командная строка

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

ThxpOjiz755M3ReDu24D9cXz6mNbmHKkWaaT6YI6.webp

Терминал, приглашение и команда

Терминал — это графическое приложение, которое по умолчанию запускает оболочку (shell).

Оболочку сложно представить отдельно от терминала. Терминал запускает оболочку, обычно это Bash, которая в Ubuntu используется по умолчанию. Как и терминалов, существует множество различных оболочек. Bash — самая популярная из них и является оболочкой по умолчанию в большинстве дистрибутивов Linux.

Команды, которые вы вводите, интерпретируются оболочкой. Часто люди думают, что экран, который они видят в терминале, — это и есть оболочка. Для понимания этого достаточно.

Приглашение (prompt) — это то, что вы видите перед местом, где вводите команды. Не существует единого стандарта для приглашения. В некоторых старых терминалах у вас был бы просто мигающий курсор в том месте, где можно вводить команды. В терминале Ubuntu приглашение предоставляет некоторую информацию, которую вы подробно увидите в следующих разделах этой статьи.

Командная строка — это не что-то специфичное для Linux. Каждая операционная система имеет интерфейс командной строки. Многие языки программирования имеют интерфейсы командной строки. Это термин для интерфейса, где вы можете запускать и выполнять команды.

Это видео от Люка Смита подробно объясняет всё на примерах. Я не буду вдаваться в подробности, чтобы не отходить от темы.

Подпишитесь на YouTube-канал It’s FOSS, чтобы смотреть интересные видео о Linux

3. Понимание приглашения (prompt)

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

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

  • Имя пользователя
  • Имя хоста (имя компьютера)
  • Текущая рабочая директория

Еще несколько вещей, которые могут вас заинтересовать.

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

Тильда (~) означает домашнюю директорию текущего пользователя.

Для обычных пользователей приглашение заканчивается символом доллара ($). Для пользователя root оно заканчивается символом решетки (#). Отсюда и шутка, что решетка сильнее доллара.

mDadFW6wWVMTvi8XSuqHPAjuINgR7Db2EQED2nYO.webp

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

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

0atXHhHZMkqSqYmnvdqiNKGrmiAbQQoZPhccxE6C.webp

4. Директории и файлы

Два термина, которые вы чаще всего слышите в Linux, — это директория (directory) и файлы (files).

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

Вы можете зайти внутрь директорий, но не можете войти в файлы. Конечно, вы можете читать файлы.

K8h1PB89UacewXIBfQi48feE6qOd1UnvHpRQNsug.webp

Вы можете использовать термин «папка» для директории, это вполне допустимо. Однако лучше использовать «директория», потому что именно так она упоминается в различных руководствах, документах и т. д. Вы даже встретите команды вроде rmdir, mkdir, намекающие на то, что они работают с директориями.

Дополнительное примечание: в Linux всё является файлом. Даже директория — это особый вид файла, который содержит адреса памяти файлов и директорий внутри себя. Я объяснил это в своей статье о жестких ссылках. Вы можете обратиться к ней, если хотите узнать больше по этой теме.

5. Путь: Абсолютный и относительный

Структура директорий в Linux напоминает корень дерева. Всё начинается с корня и распространяется оттуда.

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

TSHV5M95ZcPC00bjDhgagRxibFaxXw6eS8lfijfG.webp

Путь

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

03IbkJsmgB74K9CPNjt2Ohgz8Ymlmnp9xvDilfHH.webp

абсолютный vs относительный путь

Если вы находитесь в директории /home/abhishek, в которой есть директория scripts, содержащая файл my_script.sh, и вы хотите получить путь к этому файлу, его абсолютный путь будет выглядеть так:

 /home/abhishek/scripts/my_script.sh 

Его относительный путь будет:

 scripts/my_script.sh 

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

hZEime9gtLrGFsv754fXH6PsCK7nYgcjKkIESesM.webp

Реальные примеры того, как относительный путь меняется в зависимости от местоположения, а абсолютный путь остается неизменным

6. . и ..

Вы часто будете встречать обозначения . и .. при использовании терминала Linux.

Одинарная точка (.) означает текущую директорию.

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

Вы часто будете использовать двойную точку (..) в относительном пути или для смены директории. Одинарная точка (.) также используется в относительном пути; что более важно, вы можете использовать ее в командах для указания текущего местоположения.

Fvm1QSKQAAqw8i07d34QE0gZFtOIRsqwjeWSCo3W.webp

Использование . и ..

7. Понимание структуры команды

Типичная команда Linux состоит из имени команды, за которым следуют опции и аргументы.

 command [options] argument 

Опции, как следует из названия, являются необязательными. При использовании они могут изменять вывод в зависимости от своих свойств.

Например, команда cat используется для просмотра файлов. Вы можете добавить опцию -n, которая также будет отображать номера строк.

Опции не стандартизированы. Обычно они используются как одна буква с одним тире (-). Они также могут иметь два тире (--) и слово.

Одни и те же опции могут иметь разные значения в разных командах. Если вы используете -n с командой head, вы указываете количество строк, которые хотите увидеть, а не строки с номерами.

fWJNDNe9Dqxq1fU93raVBekWX03TdLQlFfcluNNn.webp

Одна и та же опция -n имеет разное применение в командах cat и head

В документации к командам,  если вы видите что-то в скобках ([]), это означает, что содержимое скобок является необязательным.

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

8. Получение помощи

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

Почему? Потому что одна команда может иметь более десяти или двадцати опций.

Итак, что делать, когда вы не можете вспомнить все опции? Вы просите о помощи. И под помощью я не имею в виду задать вопрос на форуме Linux It’s FOSS. Я имею в виду использование опции помощи команды.

Каждая стандартная команда Linux имеет краткую страницу помощи, к которой можно получить доступ с помощью -h или –help, или обоих вариантов.

 command_name -h 

Она дает вам быстрый обзор синтаксиса команды, общих опций с их значением и, в некоторых случаях, примеры команд.

1RljlWJmp4sqcDQS7pRrT5iR7esYdzH5HjIAMbpw.webp

Страница помощи команды cat

Если вам нужно больше помощи, вы можете обратиться к manpage, т.е. руководству по команде:

 man command_name 

Оно содержит все детали и может быть слишком объемным для чтения и понимания. В качестве альтернативы вы всегда можете поискать в интернете «примеры команд xyz в Linux».

9. Linux чувствителен к регистру

Linux чувствителен к регистру. Всё, что вы вводите в терминале, чувствительно к регистру. Если вы не будете принимать это во внимание, вы часто будете сталкиваться с ошибками bash: command not found или ошибками «файл не найден».

В домашней директории все имена папок начинаются с заглавной буквы. Если вам нужно перейти в директорию Documents, сохраняйте первую букву D, а не d. В противном случае терминал выдаст ошибку.

sYdUo3eYaJZg58AoyF3D3zmq80TraJKpigkOnrRK.webp

Linux чувствителен к регистру

У вас могут быть два отдельных файла с именами file.txt и File.txt, потому что file и File для Linux — это не одно и то же.

10. Запуск shell-скриптов

Вы можете запустить shell-скрипт, указав оболочку:

 bash script.sh 

Или вы можете выполнить shell-скрипт вот так:

 ./script.sh 

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

VY9Peh4o8MBwSZrglV9FhtqNyw42BoMR5wZLPS3C.webp

Запуск bash-скрипта

11. Используйте автодополнение по Tab вместо того, чтобы печатать всё целиком

Терминал Ubuntu предварительно настроен с автодополнением по клавише Tab. Это означает, что если вы начнете писать что-то в терминале, а затем нажмете Tab, он попытается автоматически дополнить это или предоставить варианты, если существует более одного возможного совпадения.

Это работает как для команд, так и для аргументов и имен файлов.

whVUwayt1EHXHcGesFpvUWxPk0z4IZSOJuIP2log.webp

Пример автодополнения по Tab

Это значительно экономит время, потому что вам не нужно писать всё полностью.

12. Ctrl+C и Ctrl+V не предназначены для копирования и вставки в терминале

Ctrl+C и Ctrl+V могут быть «универсальными» сочетаниями клавиш для копирования и вставки, но они не работают в терминале Linux.

Linux унаследовал много вещей от UNIX, а в UNIX Ctrl+C использовался для остановки запущенного процесса.

Поскольку Ctrl+C уже был занят для остановки команды или процесса, его больше нельзя использовать для копирования и вставки.

💡

В большинстве терминалов для копирования и вставки можно использовать Ctrl+Shift+C/V.

13. Вы, конечно, можете копировать и вставлять в терминале

Не волнуйтесь. Вы по-прежнему можете копировать и вставлять в терминале. Опять же, нет единого правила для горячих клавиш копирования-вставки, поскольку это зависит от используемого приложения терминала или ваших настроек.

В терминале Ubuntu стандартное сочетание клавиш для копирования — Ctrl+Shift+C, для вставки — Ctrl+Shift+V.

Вы можете использовать Ctrl+C, чтобы скопировать текст или команды извне терминала (например, из веб-браузера), и вставить их с помощью Ctrl+Shift+V. Аналогично, можно выделить текст и использовать Ctrl+Shift+C, чтобы скопировать его из терминала, а затем вставить в редактор или другое приложение с помощью Ctrl+V.

14. Избегайте использования Ctrl+S в терминале

Еще одна распространенная ошибка новичков — использование «универсального» сочетания клавиш Ctrl+S для сохранения. Если вы нажмете Ctrl+S в терминале, он «зависнет».

Это наследие старых компьютерных систем, где не было возможности прокручивать экран вверх. Поэтому, если выводилось много строк, Ctrl+S использовался для остановки экрана, чтобы можно было прочитать текст.

Вы можете «разморозить» терминал с помощью Ctrl+Q. Но, опять же, старайтесь не использовать Ctrl+S в терминале.

15. Обращайте внимание на $ и <> в примерах команд

Если вы читаете онлайн-руководство или документацию, вы увидите примеры команд с текстом внутри <>. Это означает, что вам нужно заменить содержимое вместе с < и > на подходящее значение.

Например, если вы видите такую команду:

 grep -i <search_term> <file_name> 

Вам следует заменить <search_term> и <file_name> на их фактические значения.

Это указание на то, что команда является лишь примером, и вам нужно дополнить ее реальными данными.

Еще один момент: в некоторых руководствах примеры команд начинаются с символа $, вот так:

n3Fs7zYY4NrvOQGZr939truTI1SluLoSw2M7EcGa.webp

символ доллара в начале команды

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

Поэтому при копировании команд не копируйте $, если он стоит в начале. Также старайтесь не копировать случайные команды с сомнительных сайтов, особенно если вы не понимаете, что они делают.

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

YlRcoCxXxneAcrjaCPPUDw0JYFaMhSckn7umVPC5.webp

Избегайте копирования нескольких команд сразу

В следующем разделе рассказывается, как запускать несколько команд за один раз.

16. Вы можете запускать несколько команд одновременно

Вы можете запускать несколько команд одновременно без участия пользователя. Возможно, вы уже видели это как пользователь Ubuntu в виде такой команды:

 sudo apt update && sudo apt upgrade 

Существует три способа объединения команд в терминале:

; | Command 1 ; Command 2 | Сначала выполнить команду 1, затем команду 2
&& | Command 1 && Command 2 | Выполнить команду 2, только если команда 1 завершилась успешно
|| | Command 1 || Command 2 | Выполнить команду 2, только если команда 1 завершилась с ошибкой

17. Остановка запущенной команды Linux

Если команда Linux выполняется в фоновом режиме (то есть она выводит данные или вы не можете ввести другую команду), вы можете остановить ее с помощью клавиш Ctrl+C.

Я упоминал об этом ранее. Это пришло из времен UNIX.

Так что в следующий раз, когда вы увидите, что команда вроде top или ping работает непрерывно, и вы хотите вернуть управление терминалом, просто используйте эти две клавиши:

 Ctrl+C 

Остановка запущенной программы в Linux с помощью Ctrl+C

18. Очистка терминала

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

Чтобы очистить терминал, используйте команду:

 clear 

Вы также можете использовать сочетание клавиш терминала Ctrl+L.

19. Выход из терминала

В некоторых случаях я видел, как люди закрывают приложение терминала, чтобы завершить сеанс. Вы можете так сделать, но правильный способ выйти из терминала — использовать команду exit:

 exit 

В терминале Ubuntu вы также можете использовать сочетание клавиш Ctrl+D.

Честно говоря, тем для обсуждения слишком много. Трудно определить, что следует считать абсолютной базой, а что можно опустить. Например, я хотел избежать включения информации о путях, потому что она требует подробного объяснения, но слишком глубокое погружение в одну тему может перегрузить читателя.

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

И если вы узнали что-то новое, пожалуйста, напишите об этом в комментариях. Мне хотелось бы знать, стоила ли эта статья затраченных усилий :)