當前位置: 首頁>>技術教程>>正文


再次以root身份運行相同的命令

, ,

問題描述

有時當我運行一個命令時,我沒有注意到我需要以超級用戶的身份運行它才能擁有足夠的權限。

有沒有辦法再次運行相同的命令,但作為超級用戶?

最佳解決辦法

最簡單的方法是運行:

sudo !!

這將運行最後的命令,但作為超級用戶。

Source

次佳解決辦法

command-line,sudo,ubuntu

答案:您之後直接輸入sudo !!以使用升級的權限重複上一個命令。

編輯:通過reddit找到的圖像,它是Randall Munroe的original xkcd漫畫的拙劣模仿。

第三種解決辦法

您可以嘗試up-arrow鍵來滾動您的舊命令並重寫/更改它們,並將sudo添加到它們前麵。 (箭頭鍵上方的主頁按鈕會將位置設置為開頭。)

我不喜歡sudo !!的想法,因為有時候你會在中間添加另一個命令,而不再記得。

第四種辦法

我隻需添加一個替代方案:與輸入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”當作一個…),但是添加”up arrow”,您可以根據曆史記錄中的任何一條命令執行此操作。

第五種辦法

有幾種方法可以做到這一點

  • 隻需在命令前添加sudo再次輸入命令

  • Up arrow獲取最後一個命令並將sudo放在它的前麵。

  • 輸入sudo !!

!!擴展到最後輸入的命令。您可以使用命令行曆史記錄查看其他內容,請參閱here

第六種辦法

這個問題可以被概括為“運行相同的命令,但有一些修改”,因為Unix中的一個明智的設計決定是在shell中實現了一次,可以通過從shell調用的任何命令來利用。

換句話說,這個技巧不適用於sudo

  • 以超級用戶身份重複上一個命令(sudo !!)

  • 重複上一個命令並將其計時(time !!)

  • 用不同的環境重複上一個命令(env A=b B=z !!)

  • 重複上一個命令(!!)

曆史擴展(也稱為曆史替換)隻是一個shell功能,可以使重複以前的命令更輕鬆(使用較少的擊鍵)。檢查history expansion的shell手冊頁。它描述了許多更多的技巧和short-cuts,例如:

您可以通過編號引用先前的命令:

!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

還有更多,因為您可以結合命令選擇arg-selection,搜索和獨立替換。

你的shell的手冊頁(在這種情況下是man bash)是你的朋友。

第七種辦法

我使用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中做同樣的事情的方法。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/723.html,未經允許,請勿轉載。