Odpowiedź składa się z dwóch części: !!
isudo
!!
jest częścią funkcjonalności powłoki (w przypadku Ubuntu jest to prawdopodobnie bash, ale obsługują to również inne powłoki, takie jak zsh lub csh), zwane „rozszerzaniem historii”. Zachowuje się podobnie jak inne rozszerzenia, ponieważ powłoka rozwija „symbol zastępczy” do zestawu słów. Chociaż foo*
zostanie rozwinięty do listy wszystkich plików zaczynających się od „foo”, !!
zostanie rozszerzony do zawartości poprzedniego wiersza poleceń.
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Podobnie jak inne rozszerzenia, odbywa się to w całości przez powłokę, więc jeśli wpiszesz !!
po jakimś innym poleceniu, to polecenie nie będzie wiedziało, że było !!
, ale zobaczy tylko poprzednią linię poleceń. (W przeciwieństwie do innych rozszerzeń, rozszerzanie historii następuje przed zapisaniem polecenia w historii, czyli zamiast !!
zastąpionego wiersza polecenia zostanie zapisany w historii).
sudo
Komenda umożliwia wykonywanie poleceń jako inny użytkownik, pod warunkiem, że uprawnienia przyznane przez ar polityki bezpieczeństwa (domyślnie jest skonfigurowany /etc/sudoers
).
Domyślnie hasło roota nie jest ustawione w Ubuntu. Aby wykonać zadania administracyjne systemu, użytkownik utworzony podczas instalacji otrzymuje uprawnienia sudo. Ten użytkownik może teraz wykonać dowolne polecenie w powłoce jako root, po prostu przygotowując sudo
. Niektóre programy GUI również używają mechanizmu sudo, na przykład do zarządzania pakietami.
Powodem, dla którego sudo
można wykonywać inne polecenia jako root (lub inny użytkownik), jest to, że sudo binary ( /usr/bin/sudo
) ma ustawiony bit setuid w swoim uprawnieniu i należy do roota. Dowolny (binarny) plik wykonywalny z ustawionym bitem setuid jest uruchamiany z uprawnieniami właściciela. Oznacza to, że sudo działa skutecznie z uprawnieniami root, bez względu na to, który użytkownik tak naprawdę to nazwał. Tylko on polityk bezpieczeństwa wewnętrznego sudo zarządza tym, który użytkownik jest dozwolony, i uniemożliwia arbitralnym użytkownikom wykonywanie dowolnych czynności.
Tak więc w przypadku sudo !!
tych środków
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
jest w zasadzie identyczny z
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
po prostu mniej pisania. W obu przypadkach sudo po prostu widzi mount /dev/sdb1 /mnt
i uruchamia je z uprawnieniami administratora.