天天看點

如何隐藏你的Linux的指令行曆史

如果你是 linux 指令行的使用者,有的時候你可能不希望某些指令記錄在你的指令行曆史中。原因可能很多,例如,你在公司擔任某個職位,你有一些不希望被其它人濫用的特權。亦或者有些特别重要的指令,你不希望在你浏覽曆史清單時誤執行。

然而,有方法可以控制哪些指令進入曆史清單,哪些不進入嗎?或者換句話說,我們在 linux 終端中可以開啟像浏覽器一樣的無痕模式嗎?答案是肯定的,而且根據你想要的具體目标,有很多實作方法。在這篇文章中,我們将讨論一些行之有效的方法。

注意:文中出現的所有指令都在 ubuntu 下測試過。

不同的可行方法

前面兩種方法已經在之前一篇文章中描述了。如果你已經了解,這部分可以略過。然而,如果你不了解,建議仔細閱讀。

1. 在指令前插入空格

是的,沒看錯。在指令前面插入空格,這條指令會被 shell 忽略,也就意味着它不會出現在曆史記錄中。但是這種方法有個前提,隻有在你的環境變量 histcontrol 設定為 "ignorespace" 或者 "ignoreboth" 才會起作用。在大多數情況下,這個是預設值。

是以,像下面的指令(lctt 譯注:這裡[space]表示輸入一個空格):

[space]echo "this is a top secret" 

如果你之前執行過如下設定環境變量的指令,那麼上述指令不會出現在曆史記錄中。

export histcontrol = ignorespace 

下面的截圖是這種方式的一個例子。

如何隐藏你的Linux的指令行曆史

第四個 "echo" 指令因為前面有空格,它沒有被記錄到曆史中。

2. 禁用目前會話的所有曆史記錄

如果你想禁用某個會話所有曆史,你可以在開始指令行工作前簡單地清除環境變量 histsize 的值即可。執行下面的指令來清除其值:

export histsize=0 

histsize 表示對于 bash 會話其曆史清單中可以儲存指令的個數(行數)。預設情況,它設定了一個非零值,例如在我的電腦上,它的值為 1000。

是以上面所提到的指令将其值設定為 0,結果就是直到你關閉終端,沒有東西會存儲在曆史記錄中。記住同樣你也不能通過按向上的箭頭按鍵或運作 history 指令來看到之前執行的指令。

3. 工作結束後清除整個曆史

這可以看作是前一部分所提方案的另外一種實作。唯一的差別是在你完成所有工作之後執行這個指令。下面是剛說到的指令:

history -cw 

剛才已經提到,這個和 histsize 方法有相同效果。

4. 隻針對你的工作關閉曆史記錄

雖然前面描述的方法(2 和 3)可以實作目的,它們可以清除整個曆史,在很多情況下,有些可能不是我們所期望的。有時候你可能想儲存直到你開始指令行工作之間的曆史記錄。對于這樣的需求,你開始在工作前執行下述指令:

[space]set +o history 

備注:[space] 表示空格。并且由于空格的緣故,該指令本身也不會被記錄。

上面的指令會臨時禁用曆史功能,這意味着在這指令之後你執行的所有操作都不會記錄到曆史中,然而這個指令之前的所有東西都會原樣記錄在曆史清單中。

要重新開啟曆史功能,執行下面的指令:

[space]set -o history 

它将環境恢複原狀,也就是你完成了你的工作,執行上述指令之後的指令都會出現在曆史中。

5. 從曆史記錄中删除指定的指令

現在假設曆史記錄中已經包含了一些你不希望記錄的指令。這種情況下我們怎麼辦?很簡單。直接動手删除它們。通過下面的指令來删除:

history | grep "part of command you want to remove" 

上面的指令會輸出曆史記錄中比對的指令,每一條前面會有個數字。

一旦你找到你想删除的指令,執行下面的指令,從曆史記錄中删除那個指定的項:

history -d [num] 

下面是這個例子的截圖。

如何隐藏你的Linux的指令行曆史

第二個 ‘echo’指令被成功的删除了。

(lctt 譯注:如果你不希望上述指令本身也被記錄進曆史中,你可以在上述指令前加個空格)

同樣的,你可以使用向上的箭頭一直往回翻看曆史記錄。當你發現你感興趣的指令出現在終端上時,按下 “ctrl + u”清除整行,也會從曆史記錄中删除它。

總結

有多種不同的方法可以操作 linux 指令行曆史來滿足你的需求。然而請記住,從曆史中隐藏或者删除指令通常不是一個好習慣,盡管本質上這并沒有錯。但是你必須知道你在做什麼,以及可能産生的後果。

作者:himanshu arora

來源:51cto

繼續閱讀