Конечно, используйте функцию ловушки 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
.
Устройства в 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
Тип (блока или символа )каждого узла устройства и числа (, известные как старший и младший номера ), служат идентификаторами для ядра.
В Linux канонический список устройств с кратким объяснением их функций поддерживается в ядре . Вы можете видеть, что старший номер обычно идентифицирует драйвер (, например. драйвер устройства TTY )и младший номер идентифицирует устройство, управляемое этим драйвером.