На відповідь є дві частини: !!іsudo
!!є частиною функціональності оболонки (у випадку Ubuntu це, мабуть, баш, але інші оболонки, такі як zsh або csh, теж підтримують це), називаються "розширенням історії". Він поводиться аналогічно, як і інші розширення, коли оболонка розширює 'заповнювач' на набір слів. Хоча foo*буде розширено до списку всіх файлів, починаючи з 'foo', !!розширюється до вмісту попереднього командного рядка.
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
Як і інші розширення, це робиться повністю оболонкою, тому, якщо ви введете !!після якоїсь іншої команди, ця команда не усвідомлює, що там було !!, але побачить лише попередній командний рядок. (На відміну від інших розширень, розширення історії відбувається до того, як команда буде збережена в історії, тобто замість !!заміненого командного рядка буде збережено в історію.)
sudoКоманда дозволяє виконувати команди від імені іншого користувача, при умови дозволу ара надається політика безпеки ( по замовчуванням налаштовано в /etc/sudoers).
За замовчуванням кореневий пароль залишається невідомим в Ubuntu. Для виконання завдань системного адміністрування користувачеві, створеному під час встановлення, надаються права sudo. Цей користувач тепер може виконувати будь-яку команду на оболонці як корінь, просто попередньо попередньо sudo. Деякі програми GUI також використовують механізм sudo, наприклад, управління пакетами.
Причина, по якій sudoможна виконувати інші команди як root (або інший користувач), полягає в тому, що sudo binary ( /usr/bin/sudo) має встановлений біт setuid у своєму дозволі і належить root. Будь-який (двійковий) виконуваний файл із встановленим встановленим бітом запускається з дозволами його власника. Це означає, що sudo ефективно працює з правами root, незалежно від того, хто його насправді називав. Тільки він внутрішньої політики безпеки sudo керує, якому користувачеві дозволено що, і заважає довільним користувачам робити довільні речі.
Отже, у випадку із sudo !!цим засобом
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
в основному ідентичний
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
лише менше набирати текст. В обох випадках sudo просто бачить mount /dev/sdb1 /mntі запускає його з кореневими дозволами.