Поведение программы ls
не зависит от вызывающей ее оболочки. Если вы наблюдаете разное поведение ls
в bash и в zsh, это потому, что у вас есть псевдоним (или функция) с именем ls
в одной из оболочек, но нет в другой. Поведение, которое вы наблюдаете в zsh, соответствует тому, что делает ls
, поэтому вы должны вызывать его с дополнительными параметрами в bash.
Вы могли использовать псевдонимы с ls
до ls -H
или ls -L
, чтобы разыменовать символические ссылки. Это плохая идея, потому что тогда вы не сможете получить информацию о самих символических ссылках, кроме как обойдя псевдоним ( \ ls
).
Если файл представляет собой символическую ссылку на каталог, вы можете воздействовать на каталог, а не на файл, добавив косую черту в конце: ls -l symboliclink /
эквивалентно ls -l символическая ссылка /.
. См. Когда символическая ссылка рассматривается как объект, на который она ссылается, и как символическая ссылка?
На самом деле это почти не связано с аппаратной частью клавиатуры. Клавиатуры USB и PS/2 в этом отношении работают одинаково. В оборудовании нет ничего , что делало бы так -так называемые "клавиши-модификаторы" особенными. Любая клавиша , за одним исключением, может быть клавишей-модификатором или нет.
То, что является клавишей-модификатором, определяется раскладкой клавиатуры , используемой в программном обеспечении в операционной системе. Аппаратное обеспечение просто отправляет то, что действует (, замалчивая детали протокола ввода USB HID, фактически представляющего собой растровое изображение нажатых в данный момент клавиш, которое частично закодировано во внутреннюю -внешнюю форму, чтобы сохранить ее короткой )ключ вниз и ключевые события.
Например, в раскладке клавиатуры FreeBSD можно найти такие строки, как эта:
# alt # scan cntrl alt alt cntrl lock # code base shift cntrl shift alt shift cntrl shift state # ------------------------------------------------------------------ … 029 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O … 042 lshift lshift lshift lshift lshift lshift lshift lshift O … 054 rshift rshift rshift rshift rshift rshift rshift rshift O … 056 lalt lalt lalt lalt lalt lalt lalt lalt O … 083 del '.' '.' '.' '.' '.' boot boot N …
029, 042, 054 и 056 — это коды клавиатуры (, приведенные в общую систему из номеров использования USB HID и номеров скан-кодов PS/2 ), но это lctrl
, lshift
, rshift
иlalt
действия на карте, определяющие эти клавиши как клавиши-модификаторы. Определите их с другими действиями и переместите эти действия в другое место, как это действительно делают некоторые из -из -карт -коробки FreeBSD, а совершенно другие ключи являются модификаторами.
(Исключением из правила является клавиша Fn , которая является единственным модификатором, реализованным аппаратно. Он реализован полностью аппаратно и вообще не виден программным обеспечением . Он даже не генерирует никаких событий по сети. На самом деле есть еще один аппаратный модификатор. Это не ключ. Это состояние светодиода NumLock.)
Действие , когда оно является действием модификатора, таким как это, изменяет текущее состояние модификатора ,который (просто говоря )представляет собой набор флагов, записанных в операционной системе, которые фиксируют, какие модификаторы в данный момент «включены». Как видно из заголовков столбцов на карте клавиатуры, текущее состояние модификатора — с точки зрения флагов «включено» для состояний «shift», «altgr», «control» и «alt» — влияет на действие дальнейшие нажатия клавиш сопоставляются.
В строке с кодом ключа 083, который выгравирован . del на цифровой клавиатуре, вы можете видеть, что только если текущее состояние модификатора не ниже «alt cntrl», сопоставленное действие будет boot
.
Драйверы клавиатуры активируют действия-модификаторы при получении события нажатия клавиши или отпускания клавиши . Однако другие действия вступают в силу только после нажатия клавиши нажатия или автоповтора . Так обстоит дело, например, с действием boot
. Только если происходит нажатие клавиши или автоповтор для клавиши 083 и , текущее состояние модификатора уже "alt cntrl"/"alt cntrl shift", происходит действие boot
.
Из этого должно быть очевидно, что для перевода текущего состояния модификатора операционной системы в это состояние, в первую очередь, действия lalt
и lctrl
/ rctrl
должны уже произойти . ], с помощью первого нажатия клавиш, которые им назначены. (Система FreeBSD также позволяет модификатор блокировать в дополнение к обычной системе модификаторов сдвигов , хотя только две раскладки клавиатуры из -из -поля -использовать их вообще. Стандарт клавиатуры ISO также допускает защелки-модификаторы , но FreeBSD не предоставляет этот механизм.)
FreeBSD, как я уже сказал, является здесь примером. Но большинство операционных систем с устройствами PS/2 или USB HID,от MS/PC -DOS (, где текущим состоянием модификатора является хорошо -известный байт в памяти )до Windows NT (, где раскладки клавиатуры представляют собой библиотеки DLL режима ядра -, содержащие код и данные ), работают примерно так.
console-fb-realizer
. справочные страницы набора инструментов nosh. atkbd
. Справочные страницы FreeBSD. kbdmap
. §5. Справочные страницы FreeBSD. Точно так же, как нажатие a , а затем Shift не дает вам A
, нажатие Delete перед Alt и Ctrl не отправляет правильные коды клавиш.
Клавиши-модификаторы необходимо нажимать перед клавишей, которую они модифицируют. Клавишами-модификаторами в данном случае являются Alt и Ctrl , тогда как Delete не является клавишей-модификатором.
Если бы было разрешено нажимать a до Shift , чтобы получить A
, программное обеспечение, считывающее нажатия клавиш, не смогло бы вывести ни одного символа, пока не будет введен следующий символ. набрал.
Аппаратное обеспечение клавиатуры отправляет разные коды сканирования в зависимости от того, была ли нажата клавиша с активным модификатором или без него.