Soy un usuario de Ubuntu con poca experiencia y he estado usando sudo
.
¿Qué hace sudo !!
y cómo?
command-line
sudo
RamHS
fuente
fuente
!!
parte del comando.!!
hacer y cómo. El otro quiere un método para hacer esto.sudo !!
hace, y hay dos respuestas que realmente explican específicamente qué!!
hace.Respuestas:
!!
en bash es un alias para el comando anterior (ver Designadores de eventos ). Por lo tanto, vuelve a ejecutar el comando anterior consudo
permisos.fuente
!
comandos generalmente no están disponibles en scripts de bash (solo en sesiones interactivas). Se pueden deshabilitar conset +o histexpand
.sudo bang bang
es un comando muy útil cuando se trabaja en la interfaz de línea de comandos.Algunas distribuciones de Linux le permiten iniciar sesión como usuario en lugar de administrador.
Por lo tanto, para hacer algo de forma administrativa, debe continuar el comando con
sudo
(Super-User DO), que le dice al sistema "usted hará esto, porque yo lo dije". / bang-bang (! = bang) es básicamente un atajo que puedes usar para repetir el comando anterior.Entonces, el escenario típico es que intentas un comando y devuelve un mensaje diciendo que tienes que ser un administrador para hacerlo. Por lo tanto, puede escribir
sudo
para ejecutar ese comando como superusuario / administrador, o puede escribirsudo !!
donde!!
le dice al sistema que use el comando anterior que se intentó. UfHHay muchos otros comandos bang. Para obtener una lista de ellos y explicaciones de lo que son, consulte Linux Bang Commands , consulte también Historial de Bash y comandos de explosión
fuente
sudo
y mirar la línea de comando.sudo
algo y obtienes un error, por lo que inmediatamente quieressudo
hacerlosudo
no significa "super-usuario hacer", no hace falta que haga un comando como si lo hubiera hechosu
(es decir, su interruptor de usuario [y no super usuario]); es decir, puede sudo comandos como cualquier usuario, no solo root (-u
switch); mismo ocurre consu [user] [-c command]
su
que no significa tal cosa. Ver linux.die.net/man/1/su , gnu.org/software/coreutils/manual/html_node/su-invocation.html , linfo.org/su.html . Debe significar usuario sustituto .El
bang bang (!!)
comando es un atajo para repetir y ejecutar el comando anterior que ingresó en su terminal. Este comando es muy útil cuando olvida que necesita derechos de administrador para realizar una determinada acción y le permite repetirlo con derechos de superusuario simplemente escribiendo,!!
agarra el último comando de ejecución.Por ejemplo:
La salida será,
Después de eso, si ejecutamos el
sudo !!
comando, la salida seráLo que significa que la
!!
parte toma el comando de ejecución anteriorapt-get update
y lasudo
parte anterior hace que el comando se ejecute con derechos de superusuario.Y cómo los
sudo !!
ejecuta el comando anterior con privilegios de superusuario, normalmente significa todos los comandos que entramos en el terminal se almacenan en lacommand history
.Llevar elhistory
comando en el terminal, que muestra todos los comandos que entered.The!!
parte en lassudo !!
agarra el último comando almacena en el historial de comandos y el conjuntosudo !!
ejecuta el último comando con privilegios de administrador.Algunos otros comandos de explosión se explican en esta publicación de blog .
fuente
mkdir LongDirectoryName
ycd !$
se emitan por separado para funcionar, a menosLongDirectoryName
que haya sido la última palabra del comando anterior. Para fines de historial de shell,mkdir LongDirectoryName; cd !$
es un comando. Interaccione el historial con!!
,!^
y!$
use el último comando que el shell realmente procesó completamente antes de ver!
. Aquí hay un ejemplo. Si ejecutahistory
, verá que los comandos en una línea unida;
se recuerdan como un solo comando.La respuesta tiene dos partes:
!!
ysudo
!!
es parte de la funcionalidad del shell (en el caso de Ubuntu esto probablemente sea bash, pero otros shells como zsh o csh también lo admiten) llamado "expansión de historial". Se comporta de manera similar a otras expansiones en que el shell expande el 'marcador de posición' a un conjunto de palabras. Si bienfoo*
se expandiría a una lista de todos los archivos que comienzan con 'foo',!!
se expande al contenido de la línea de comando anterior.Al igual que otras expansiones, esto se hace completamente por el shell, por lo que si escribe
!!
después de algún otro comando, este comando no es consciente de que hubo un!!
, pero solo verá la línea de comando anterior. (A diferencia de otras expansiones, la expansión del historial ocurre antes de que un comando se guarde en el historial, es decir, en lugar de!!
la línea de comando reemplazada se guardará en el historial).El
sudo
comando permite ejecutar comandos como otro usuario, siempre que los permisos sean otorgados por la política de seguridad (el valor predeterminado está configurado en/etc/sudoers
).Por defecto, la contraseña de root permanece sin configurar en Ubuntu. Para realizar tareas de administración del sistema, el usuario creado durante la instalación tiene derechos de sudo. Este usuario ahora puede ejecutar cualquier comando en el shell como root, simplemente anteponiendo
sudo
. Algunos programas GUI también usan el mecanismo sudo, por ejemplo, la gestión de paquetes.La razón por la que
sudo
puede ejecutar otros comandos como root (u otro usuario) es que el sudo binary (/usr/bin/sudo
) tiene el bit setuid establecido en su permiso y pertenece a root. Cualquier ejecutable (binario) con bit setuid establecido se ejecuta con los permisos de su propietario. Esto significa que sudo se ejecuta efectivamente con permisos de root sin importar qué usuario realmente lo haya llamado. Solo las políticas de seguridad internas de sudo administran a qué usuario se le permite qué y evitan que los usuarios arbitrarios hagan cosas arbitrarias.Entonces, en el caso de
sudo !!
esto significaes básicamente idéntico a
solo menos escribiendo. En ambos casos, sudo solo lo ve
mount /dev/sdb1 /mnt
y lo ejecuta con permisos de root.fuente
!!
es la expresión sintácticamente más simple y probablemente más común para la expansión de la historia .Como habrás notado, después de sustituir el último comando ejecutado
!!
, bash hace dos cosas (en su configuración predeterminada):Se muestra el comando completo con el texto sustituido.
Por ejemplo, si su comando fue
lshw -c video
y usted ejecutasudo !!
luego, entonces el comando después de la expansión del historial essudo lshw -c video
.Ese comando se ejecuta.
Normalmente, estos dos pasos ocurren sin interrupción y sin oportunidad para la interacción del usuario, ya que no
shopt histverify
está configurado de forma predeterminada (shopt -u histverify
).Sin embargo, si habilita
shopt histverify
(shopt -s histverify
), la expansión del historial funciona de manera diferente:(Tenga en cuenta que la
histverify
opción de shell solo tiene efecto si se está utilizando la biblioteca readline , pero cuando usa bash de forma interactiva en un Ubuntu u otro sistema GNU / Linux, este es esencialmente el caso).Independientemente de si la
histverify
opción de shell está habilitada o no , la expansión del historial es diferente a muchas otras expansiones de shell. Otras expansiones de shell no le muestran el comando expandido antes de que se ejecute. A diferencia de otras expansiones, que están destinadas a usarse de manera interactiva y no interactiva (por ejemplo, en un script de shell), la expansión del historial casi siempre se usa de manera interactiva.fuente
! se usa en Linux para atajos relacionados con la historia. Entonces, !! simplemente ejecutará el comando anterior que ejecutó.
Es muy útil en los casos en que olvidas poner sudo antes de un comando que lo requiere o obtienes permiso denegado o algo así simplemente
y tu estas listo.fuente
!! repetirá y ejecutará el comando anterior, y con sudo le dará al comando el privilegio de root. (¡¿No está en la página de manual? !! No puedo verlo allí.)
fuente
man --pager='less -p "Event Designators"' bash