stat /bin/su
muestra en un sistema:
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Está la representación octal 4755
de los 12 bits de modo. El número corresponde a los bits:
octal 4 7 5 5
bits 100 111 101 101
sst uuu ggg ooo
ug rwx rwx rwx
Donde uuu
, ggg
y ooo
son los bits de permiso para el usuario, grupo y otros. El grupo restante (el primero en orden )contiene los bits setuid (su
), setgid(sg
)y sticky (t
).
Los bits setuid y sticky a menudo no se mencionan, ya que son cero para la mayoría de los archivos. Todavía están allí para cada archivo, guardados junto con los demás.
Si realmente nos ponemos manos a la obra, algunos sistemas de archivos e interfaces almacenan el tipo de archivo a lo largo de los bits de modo, en los bits aún -más altos. Lo anterior solo representa 12 bits, por lo que con un campo de 16 -bits, sobran 4. Véase, por ejemplo, la descripción de st_mode
enstat(2)
.
El problema es iniciar un trabajo en segundo plano desde una trampa. El trabajo parece "perderse" a veces. Cambiar vim
a vim &
hace que el trabajo se retenga a veces, por lo que puede haber una condición de carrera.
Puede evitar esto si no inicia el trabajo desde una trampa. Coloque una bandera en la trampa y encienda vim fuera de la trampa, en el gancho precmd
. Aquí hay una adaptación de su ejemplo mínimo.
restart_vim=
catch_signal_usr1() {
trap catch_signal_usr1 USR1
restart_vim=1
}
precmd () {
if [[ -n $restart_vim ]]; then
restart_vim=
vim
fi
}
trap catch_signal_usr1 USR1
func() {
vim
}
Pierde la capacidad de mostrar Vim en primer plano mientras edita un símbolo del sistema, pero eso no funciona de todos modos, ya que vim y zsh estarían compitiendo por la terminal.
En su código real, puede tener problemas porque está iniciando vim desde una subcapa. No ejecute la función nv
en una subcapa :use llaves { … } around the body, not parentheses. Use
IFS local to make the
IFS `variable local.