Запустить ту же команду снова, но с правами root

86

Иногда, когда я запускаю команду, я не замечаю, что мне нужно запустить ее как суперпользователя, чтобы иметь достаточное разрешение.

Есть ли способ запустить ту же команду снова, но как супер пользователя?

    
задан Trufa 27.05.2013 в 20:31
источник

10 ответов

159

Самый простой способ - запустить:

sudo !!

Запустится последняя команда, но как суперпользователь.

Источник .     

ответ дан Trufa 27.05.2013 в 20:31
источник
59

Ответ: вы сразу вводите sudo !! , чтобы повторить предыдущую команду с повышенными привилегиями.

edit: Изображение найдено через reddit и это пародия на оригинал xkcd комикса Рэндалла Мунро.

    
ответ дан wim 29.05.2013 в 22:33
17

Вы можете попробовать стрелку вверх для прокрутки старых команд и переписать / изменить их и добавить sudo перед ними. (кнопка дома над клавишами со стрелками устанавливает положение в начало.)

Мне не нравится идея sudo !! , потому что иногда вы добавляете другую команду между ними и больше не помните.

    
ответ дан Xylol 27.05.2013 в 21:31
12

Я просто добавлю альтернативу: как короткий , набрав sudo !! и более гибкий:

Up-arrow (once, or until you find the command you want to sudo/edit, if it's older)
ctrl+A   (place cursor at beginning of line)
"sudo "
Enter

Это точно такое же количество нажатий клавиш (я считаю «ctrl + A» как один ...), но добавляя «стрелку вверх», вы можете сделать это в зависимости от того, какая команда находится в вашей истории.

    
ответ дан Olivier Dulac 28.05.2013 в 11:09
7

Есть несколько способов сделать это

  • Просто введите команду еще раз, добавив sudo перед командой

  • Нажмите Стрелка вверх , чтобы получить последнюю команду и поставьте sudo перед ней.

  • Введите sudo !!

!! расширяется до последней введенной команды. Вы можете делать подобные вещи с другими вещами с помощью истории командной строки, см. здесь

    
ответ дан user162424 28.05.2013 в 09:22
6

Этот вопрос можно было бы обобщить на « Запустить ту же команду, но с некоторой модификацией », поскольку одно из блестящих дизайнерских решений в Unix - это то, что реализовано однажды в оболочке, можно использовать любая команда, вызываемая из оболочки.

Другими словами, этот трюк не применяется только к sudo :

  • Повторите предыдущую команду как суперпользователь ( sudo !! )
  • Повторите предыдущую команду и время ( time !! )
  • Повторите предыдущую команду с другой средой ( env A=b B=z !! )
  • Повторите предыдущую команду ( !! )

Расширение истории (также известное как замена истории) - это просто функция оболочки, облегчающая повторение предыдущих команд (с меньшими нажатиями клавиш). Проверьте страницу оболочки на history expansion . Он описывает еще много трюков и коротких сокращений, которые вы можете сделать с историей, например:

Вы можете ссылаться на предыдущие команды по номеру:

!55                 # repeat command number 55
!-1                 # repeat the previous command, alias for !!
!-2                 # repeat the command before the previous command

Вы можете ссылаться на отдельные слова в предыдущих командах:

some-command !$     # run some-command on the last arg of previous command

Вы также можете выполнить поиск перед повторением:

!?awk               # repeat the last command including the string 'awk'

Вы можете искать историю и заменять что-то еще:

!?awk?:s/str1/str2/  # repeat previous command matching 'awk' replacing str1 by str2

И многое другое, так как вы можете комбинировать выбор команд, выбор аргументов, поиск и замену самостоятельно.

Персональная страница вашей оболочки (в данном случае man bash ) является вашим другом.

    
ответ дан arielf 31.05.2013 в 19:07
5

Я использую zsh вместо bash и имею это в своем ~/.zshrc , поэтому нажмите Alt + S вставляет sudo в начале командной строки:

insert_sudo () { zle beginning-of-line; zle -U "sudo " }
zle -N insert-sudo insert_sudo
bindkey "^[s" insert-sudo

К сожалению, я не смог найти способ сделать то же самое в bash.

    
ответ дан Patches 27.05.2013 в 23:58
1
su -c "!!"

Если у вас нет прав на root, программа sudo или sudo не установлена ​​в системе.

    
ответ дан Achu 29.05.2013 в 04:37
1

Как я предпочитаю:

  • Клавиша со стрелкой
  • Главная
  • "sudo"
  • Enter

Но было бы проще просто «судно!», это зависит от вас.

    
ответ дан Farid El Nasire 14.06.2013 в 14:22
1

Если вы хотите сделать это в псевдониме, по какой-то причине вы должны использовать alias redo='sudo $(history -p !!)' .

    
ответ дан Aaron Franke 07.07.2016 в 09:55