Há duas partes na resposta: !!
esudo
!!
faz parte da funcionalidade do shell (no caso do Ubuntu, isso provavelmente é bash, mas outros shells como zsh ou csh também suportam isso) chamados de "expansão da história". Ele se comporta de maneira semelhante a outras expansões em que o shell expande o 'espaço reservado' para um conjunto de palavras. Embora foo*
seja expandido para uma lista de todos os arquivos iniciados com 'foo', !!
é expandido para o conteúdo da linha de comando anterior.
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Como outras expansões, isso é feito inteiramente pelo shell; portanto, se você digitar !!
após algum outro comando, esse comando não estará ciente de que havia um !!
, mas verá apenas a linha de comando anterior. (Diferentemente de outras expansões, a expansão do histórico ocorre antes que um comando seja salvo no histórico, ou seja, em vez da !!
linha de comando substituída será salva no histórico.)
O sudo
comando permite executar comandos como outro usuário, desde que as permissões sejam concedidas pela política de segurança (o padrão é configurado em /etc/sudoers
).
Por padrão, a senha root permanece não definida no Ubuntu. Para executar tarefas de administração do sistema, o usuário criado durante a instalação recebe direitos sudo. Agora esse usuário pode executar qualquer comando no shell como root, apenas acrescentando sudo
. Alguns programas GUI também usam o mecanismo sudo, por exemplo, gerenciamento de pacotes.
A razão pela qual sudo
pode executar outros comandos como root (ou outro usuário) é que o sudo binary ( /usr/bin/sudo
) tem o bit setuid definido em sua permissão e pertence ao root. Qualquer executável (binário) com bit setuid definido é executado com as permissões de seu proprietário. Isso significa que o sudo é executado efetivamente com permissões de root, independentemente do usuário que realmente o chamou. Somente as políticas de segurança interna do sudo gerenciam qual usuário tem permissão para quê e impedem que usuários arbitrários façam coisas arbitrárias.
Então, no caso sudo !!
disso significa
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
é basicamente idêntico ao
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
apenas menos digitação. Nos dois casos, o sudo apenas o vê mount /dev/sdb1 /mnt
e executa com permissões de root.