Вернемся к основам взлома терминала и оболочки.

Обзор

В предыдущей статье я рассмотрел инструменты командной строки, которые можно использовать для более быстрой навигации по файловой системе. Unix-подобные (UN * X или * nix) системы, история которых восходит к 70-м годам, обладают различными функциональными возможностями, о которых даже обычные пользователи могут быть не полностью осведомлены.

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



Основы

Вкратце поговорим об основах. Дополнительную информацию можно найти в разделе Ссылки или по ссылкам в Википедии. Приведенные ниже определения в основном взяты из Википедии.

  • Терминал: компьютерный терминал - это электронное или электромеханическое аппаратное устройство, которое может использоваться для ввода и расшифровки данных с компьютера или вычислительной системы. Телетайп был примером первых печатных терминалов и на десятилетия предшествовал использованию экрана компьютера. По сути, терминал принимает ввод и отображает текст, в то время как реальная работа происходит на другом конце мэйнфрейма или большого компьютера. В настоящее время, когда мы говорим терминал, мы обычно подразумеваем вкратце terminal emulator.

  • Эмулятор терминала. Эмулятор терминала - это компьютерная программа, которая имитирует видеотерминал с другой архитектурой дисплея. Эмулятор терминала внутри графического пользовательского интерфейса часто называют окном терминала , которое позволяет пользователю получить доступ к текстовому терминалу и всем его приложениям, таким как интерфейсы командной строки (CLI). и приложения с текстовым пользовательским интерфейсом (TUI). Konsole, Alacritty, kitty, Windows Terminal, Terminator - примеры современных эмуляторов терминала.

  • консоль: консоль - это аппаратное обеспечение или физическое устройство (обычно состоящее из клавиатуры и экрана). Это основная точка доступа к системе для обслуживания или выполнения какой-либо специальной операции. В настоящее время он используется как синоним терминала, но, строго говоря, терминал - это удаленное устройство.

  • виртуальная консоль: виртуальная консоль - это концептуальная комбинация клавиатуры и дисплея для пользовательского интерфейса компьютера. Это особенность некоторых Unix-подобных операционных систем, в которых системная консоль компьютера может использоваться для переключения между несколькими виртуальными консолями для доступа к несвязанным пользовательским интерфейсам. В Unix-подобной системе он представлен файлом устройства /dev/console или /dev/tty0.
  • оболочка: оболочка - это компьютерная программа, которая предоставляет услуги операционной системы пользователю-человеку или другой программе. Zsh, Bash, PowerShell, Fish Shell - все это примеры оболочек, которые работают внутри эмулятора терминала.
  • tty: t eleprinter (телетайп, телетайп или TTY) - это электромеханическое устройство, которое можно использовать для отправки и получения печатных сообщений. через различные каналы связи, как в конфигурациях точка-точка, так и в конфигурации точка-множество точек. Это пример терминала для печатных копий первых дней, который на десятилетия предшествовал использованию экрана компьютера. В настоящее время, когда мы говорим о tty, это означает программную эмуляцию реального устройства, особенно в Unix-подобных системах. Если вам интересно, ознакомьтесь с этой статьей - Разоблачение TTY.

tty

Имея базовые знания, давайте теперь воспользуемся эмулятором терминала для запуска оболочки. В моем случае я буду использовать Konsole + zsh в демонстрационных целях.

tty является частью GNU Coreutils, который предоставляет команды, которые, как ожидается, будут существовать в каждой операционной системе.

В Unix-подобных системах все является файлом. В Konsole введите «tty», и вы увидите файл терминального устройства, который вы используете.

Например. В приведенном ниже случае используется псевдотерминал /dev/pts/1, поскольку мы используем эмулятор терминала.

% tty
/dev/pts/1

Откройте другой терминал и снова введите tty, и вы должны увидеть /dev/pts/2.

stty

Stty, входящая в состав Coreutils, - это команда для установки параметров интерфейса терминального устройства.

Наберите stty -a , и вы увидите все настройки для текущих терминалов

  • Вы можете увидеть скорость (38400 бод), строки (45), столбцы (134) и минимальную дисциплину (0). Команду stty можно использовать для изменения строк и столбцов терминала. Например. _9 _, _ 10_.
  • Мы можем отправлять сигналы, используя следующие комбинации клавиш. Например. Ctr-C (прерывание), Ctr- \ (выход), Ctr-Z (приостановка), Ctr-U (уничтожение), Ctr-S (остановка).
  • Обычно мы нажимаем Ctrl-C, чтобы прервать процесс. Если не работает, попробуйте другие сигналы. В Vim / Neovim, когда мы нажимаем Ctrl-Z, мы фактически приостанавливаем процесс Vim / Neovim и вместо этого переключаемся на терминал.
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
  • Также есть несколько интересных комбинаций клавиш. Например. Ctrl-W для удаления последнего слова, Ctrl-V для ввода следующего символа в кавычках и Ctrl-? чтобы стереть последний символ.
  • Запустить новую оболочку без rcs (zsh -df). Теперь введите Ctr-S (стоп), введите несколько символов, а затем введите Ctr-Q (начало). Вы заметите, что набранные вами символы не стираются, пока вы не нажмете Ctrl-Q. Этим поведением можно управлять, задав stty ixon или stty -ixon.
  • Вы можете попробовать изменить настройки терминала. Например. вместо Ctr-C для отправки сигнала прерывания введите stty intr z. Теперь вы можете использовать z, чтобы прервать процесс.
  • Введите stty sane, чтобы сбросить все режимы до разумных значений.
  • Справочная страница Linux для stty дает хорошее объяснение. Позже мы будем использовать эти специальные символы.

bindkey

  • Для zsh введите zsh — help, и вы увидите справку по zsh.
  • Запустите новый экземпляр zsh, набрав zsh -df (без глобальных rcs и без rcs).
  • Введите bindkey (для типа bash bind -p), и вы увидите привязки клавиш для текущего терминала.

Вы уже можете увидеть ряд интересных специальных персонажей.

  • Ctrl-D, чтобы перечислить варианты. Например. введите se, а затем Ctrl-D, чтобы увидеть все возможности. Это похоже на поведение командной строки Vim.

  • Однако, если вы нажмете Ctrl-D в пустой командной строке, будет отправлен маркер EOF (см. Вывод stty -a выше), и zsh завершит работу, когда получит маркер.
  • Ctrl-L, чтобы очистить экран.
  • Ctrl-H, чтобы удалить символ назад, как при нажатии BackSpace.
  • Ctr-I для автозаполнения (эквивалент нажатия Tab. Проверить man ascii).
  • Ctrl-U, чтобы очистить линию.
  • Ctrl-W, чтобы удалить слово назад.
  • Ctr- [это Escape.
  • ^ [[A - это на самом деле клавиша со стрелкой ВВЕРХ. Попробуйте нажать Ctrl-V, а затем клавишу со стрелкой ВВЕРХ. Вы должны увидеть специальный символ, отображаемый в командной строке.

Раскладка

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

Раскладка в ZLE содержит набор привязок между последовательностями клавиш и командами ZLE. Мы используем обычные раскладки клавиатуры emacs (эмуляция Emacs) или viins (эмуляция vi - режим вставки).

Если одна из переменных среды VISUAL или EDITOR при запуске оболочки содержит строку «vi», то это будет viins., в противном случае это будет emacs.

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

  • bindkey -e или set -o emacs, чтобы установить раскладку клавиатуры на Emacs.
  • bindkey -v или set -o vi, чтобы установить раскладки клавиатуры на Vi.

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

Например. в моем случае я набираю set -o vi , чтобы использовать эмуляцию Vi.

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

Для эмуляции Vi,

Для эмуляции Emacs,

Я не буду вдаваться в привязки клавиш здесь. Если вы являетесь пользователем Vi или Emacs, привязки клавиш должны быть вам знакомы.

Вы можете легко определить свои собственные привязки клавиш.

Например. type bindkey -s hw “hello world”. Теперь, когда набирается hw, должно появиться hello world.

Также, если вы внимательно прочитали привязки клавиш, вы должны заметить, что Alt+.key (который обычно упоминается) для вставки последнего слова доступен только в эмуляции Emacs. То же самое касается клавиши Ctr-X-e для открытия редактора, специфичного только для Emacs. Так что остерегайтесь того, какую раскладку клавиатуры вы используете в командной строке.

Резюме

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

Также ознакомьтесь с этими статьями!







использованная литература

Если вы еще не являетесь участником Medium и хотите им стать, нажмите здесь. (Часть вашей абонентской платы будет использована для поддержки alpha2phi.)