Вернемся к основам взлома терминала и оболочки.
Обзор
В предыдущей статье я рассмотрел инструменты командной строки, которые можно использовать для более быстрой навигации по файловой системе. Unix-подобные (UN * X или * nix) системы, история которых восходит к 70-м годам, обладают различными функциональными возможностями, о которых даже обычные пользователи могут быть не полностью осведомлены.
В этой статье рассматриваются основы Unix-подобных систем (в частности, Linux), а также советы и приемы, которые могут помочь улучшить нашу продуктивность и рабочий процесс разработки.
Инструменты командной строки для более быстрой навигации по файловой системе
Утилиты командной строки для замены команды« cd для более быстрой навигации по файловой системе. alpha2phi.medium.com»
Основы
Вкратце поговорим об основах. Дополнительную информацию можно найти в разделе Ссылки или по ссылкам в Википедии. Приведенные ниже определения в основном взяты из Википедии.
- Терминал: компьютерный терминал - это электронное или электромеханическое аппаратное устройство, которое может использоваться для ввода и расшифровки данных с компьютера или вычислительной системы. Телетайп был примером первых печатных терминалов и на десятилетия предшествовал использованию экрана компьютера. По сути, терминал принимает ввод и отображает текст, в то время как реальная работа происходит на другом конце мэйнфрейма или большого компьютера. В настоящее время, когда мы говорим терминал, мы обычно подразумеваем вкратце
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
(для типа bashbind -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-подобные системы легко настраиваются, и хорошее понимание основ может помочь вам лучше настроить их под свои нужды.
Также ознакомьтесь с этими статьями!
использованная литература
- Разоблачение TTY
- Проблема с пониманием привязки клавиш
- Различия между терминалом, оболочкой, телетайпом и консолью
- В чем разница между консолью, терминалом и оболочкой?
- Эмулятор терминала - Википедия
- Системная консоль - Википедия
- Непечатаемые символы ASCII и TTY
- Специальные файлы терминала
- Работа из командной строки с помощью сочетаний клавиш
- Краткое введение в termios
- Редактор линий Z-Shell
Если вы еще не являетесь участником Medium и хотите им стать, нажмите здесь. (Часть вашей абонентской платы будет использована для поддержки alpha2phi.)