Что означают номера типов устройств?

Конечно, используйте функцию ловушки zshaddhistory и отключите обычную обработку истории.

function zshaddhistory() {
  # defang naughty commands; the entire history entry is in $1
  if [[ $1 =~ "cp\ *|mv\ *|rm\ *|cat\ *\>|pv\ *|dd\ *" ]]; then
    1="# $1"
  fi
  # write to usual history location
  print -sr -- ${1%%$'\n'}
  # do not save the history line. if you have a chain of zshaddhistory
  # hook functions, this may be more complicated to manage, depending
  # on what those other hooks do (man zshall | less -p zshaddhistory)
  return 1
}

Таким образом, протестировано на zsh 5.0.8

% exec zsh
% echo good
good
% echo bad; rm /etc 
bad
rm: /etc: Operation not permitted
% history | tail -4
  299  exec zsh
  300  echo good
  301  # echo bad; rm /etc
  302  history | tail -4
%   

Похоже, это также работает с набором параметров extendedhistory .

2
06.02.2019, 02:19
2 ответа

Устройства в Unix имеют тип (, например. символ или блок ), старший номер (, который обычно относится к драйверу ), и младший номер (, который обычно относится к экземпляру ).

Так, например:

% ls -l /dev/vda
brw-rw---- 1 root disk 253, 0 Feb  3 09:09 /dev/vda

Это блочное устройство, старший 253, дополнительный 0.

Если мы посмотрим на /proc/devices, то увидим, что оно заканчивается чем-то похожим на

Block devices:
  2 fd
259 blkext
  9 md
253 virtblk
254 mdp

Итак, мы видим, что 253 — это «virtblk». Что логично, так как это виртуальная машина с виртуальными дисками!

Младший номер для этого драйвера относится к блочному устройству и разделу в устройстве

% ls -l /dev/vd*
brw-rw---- 1 root disk 253,  0 Feb  3 09:09 /dev/vda
brw-rw---- 1 root disk 253,  1 Feb  3 09:09 /dev/vda1
brw-rw---- 1 root disk 253,  2 Feb  3 09:09 /dev/vda2
brw-rw---- 1 root disk 253,  3 Feb  3 09:09 /dev/vda3
brw-rw---- 1 root disk 253, 16 Feb  3 09:09 /dev/vdb
brw-rw---- 1 root disk 253, 32 Feb  3 09:09 /dev/vdc
brw-rw---- 1 root disk 253, 33 Feb  3 09:09 /dev/vdc1

Существуют специальные драйверы, которые не относятся к «настоящему» оборудованию. например

% ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Feb  3 09:09 /dev/null

Это знаковое устройство, мажор 1, минор 3./proc/devicesговорит нам о драйвере 1

  1 mem

Мы видим, что этот драйвер «mem» также работает с несколькими другими устройствами

% ls -l /dev | grep ' 1, '
crw-rw-rw- 1 root root      1,   7 Feb  3 09:09 full
crw-r--r-- 1 root root      1,  11 Feb  3 09:09 kmsg
crw-r----- 1 root kmem      1,   1 Feb  3 09:09 mem
crw-rw-rw- 1 root root      1,   3 Feb  3 09:09 null
crw------- 1 root root      1,  12 Feb  3 09:09 oldmem
crw-r----- 1 root kmem      1,   4 Feb  3 09:09 port
crw-rw-rw- 1 root root      1,   8 Feb  3 09:09 random
crw-rw-rw- 1 root root      1,   9 Feb  3 09:09 urandom
crw-rw-rw- 1 root root      1,   5 Feb  3 09:09 zero
7
27.01.2020, 21:52

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

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

3
27.01.2020, 21:52

Теги

Похожие вопросы