Ada dua bagian jawabannya: !!
dansudo
!!
adalah bagian dari fungsionalitas shell (dalam hal Ubuntu ini mungkin bash, tetapi shell lain seperti zsh atau csh mendukung ini, juga) yang disebut "ekspansi sejarah". Itu berperilaku dengan cara yang sama seperti ekspansi lain di mana shell memperluas 'placeholder' ke serangkaian kata. Sementara foo*
akan diperluas ke daftar semua file yang dimulai dengan 'foo', !!
akan diperluas ke isi baris perintah sebelumnya.
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Seperti ekspansi lainnya, ini dilakukan sepenuhnya oleh shell, jadi jika Anda mengetik !!
setelah beberapa perintah lain, perintah ini tidak menyadari bahwa ada !!
, tetapi hanya akan melihat baris perintah sebelumnya. (Tidak seperti ekspansi lainnya, ekspansi sejarah terjadi sebelum perintah disimpan dalam riwayat, yang bukan !!
baris perintah yang diganti akan disimpan ke riwayat.)
The sudo
perintah memungkinkan melaksanakan perintah sebagai user lain, asalkan izin ar diberikan oleh kebijakan keamanan (default dikonfigurasi dalam /etc/sudoers
).
Secara default kata sandi root tetap tidak disetel di Ubuntu. Untuk melakukan tugas administrasi sistem, pengguna yang dibuat selama instalasi diberikan hak sudo. Pengguna ini sekarang dapat menjalankan perintah apa saja pada shell sebagai root, hanya dengan melakukan prepending sudo
. Beberapa program GUI juga menggunakan mekanisme sudo, misalnya manajemen paket.
Alasan mengapa sudo
dapat menjalankan perintah lain sebagai root (atau pengguna lain) adalah bahwa sudo binary ( /usr/bin/sudo
) memiliki bit setuid yang diatur dalam izinnya dan menjadi milik root. Setiap (biner) yang dapat dieksekusi dengan set setuid bit dijalankan dengan izin dari pemiliknya. Ini berarti bahwa sudo berjalan secara efektif dengan izin root tidak peduli pengguna mana yang benar-benar memanggilnya. Hanya dia kebijakan keamanan internal sudo mengelola pengguna mana yang diizinkan apa dan mencegah pengguna sewenang-wenang untuk melakukan hal-hal yang sewenang-wenang.
Jadi, dalam hal sudo !!
ini berarti
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
pada dasarnya identik dengan
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
kurang mengetik. Dalam kedua kasus, sudo hanya melihat mount /dev/sdb1 /mnt
dan menjalankannya dengan izin root.