Cevap için iki bölüm var: !!
vesudo
!!
kabuğun işlevselliğinin bir parçasıdır (Ubuntu durumunda bu muhtemelen bash, ancak zsh veya csh gibi diğer kabukları da bunu "tarih genişletme" olarak adlandırır). Kabuğun 'yer tutucuyu' bir dizi kelimeye genişlettiği diğer genişlemelerde olduğu gibi davranır. İken foo*
'foo' ile başlayan tüm dosyaların bir listesini genişletileceğini bildirdi, !!
önceki komut satırına içeriğine genişletilmiş olur.
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Diğer açılımlarda olduğu gibi, bu tamamen kabuk tarafından yapılır, bu nedenle !!
başka bir komuttan sonra yazarsanız , bu komut a olduğunun farkında değildir !!
, ancak yalnızca önceki komut satırını görür. (Diğer açılımlardan farklı olarak, geçmiş genişlemesi geçmişe bir komut kaydedilmeden önce gerçekleşir, bunun yerine !!
değiştirilen komut satırı yerine geçmişe kaydedilir.)
sudo
Komut başka bir kullanıcı olarak komutları çalıştırarak sağlayan, izinleri (varsayılan yapılandırılmış güvenlik politikası tarafından verilen ar sağlanan /etc/sudoers
).
Varsayılan olarak root şifresi Ubuntu'da ayarlanmadan kalır. Sistem yönetimi görevlerini yerine getirmek için, kurulum sırasında yaratılan kullanıcıya sudo hakları verilir. Bu kullanıcı artık sadece ön hazırlık yaparak kabuktaki herhangi bir komutu root olarak çalıştırabilir sudo
. Bazı GUI programları, örneğin paket yönetimi gibi sudo mekanizmasını da kullanır.
sudo
Diğer komutları root (veya başka bir kullanıcı) olarak çalıştırmanın nedeni , sudo binary'in ( /usr/bin/sudo
) setuid bit'in izninde ayarlanmış olması ve root'a ait olmasıdır. Setuid biti ile çalıştırılabilen herhangi bir (ikili), sahibinin izinleriyle çalıştırılır. Bunun anlamı, sudo, hangi kullanıcının gerçekte çağırdığı önemli değildir, kök izinleriyle etkin bir şekilde çalışır. Sadece kullanıcının iç güvenlik politikaları, hangi kullanıcının neye izin vereceğini yönetir ve keyfi kullanıcıların keyfi işleri yapmasını önler.
Yani, söz konusu sudo !!
bu demektir
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
temelde aynıdır
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
sadece daha az yazarak. Her iki durumda da, sudo sadece mount /dev/sdb1 /mnt
onu kök izinleriyle görür ve çalıştırır.