每個極客都應該知道的Linux技巧

jobbole發表於2014-03-08

是什麼區分開普通的Linux使用者和超級極客的呢?很簡單:用在學習那些使長時工作轉變為一瞬間工作的技巧、訣竅、祕訣和技術上的時間。如果你想提高效率而又不用做這些蒐集資料的跑腿活兒,那我們已經收集了50多條簡單易學的Linux技巧,以幫助你更瀟灑地工作,並且最大限度的利用你的電腦。開始享受吧!

 

1:檢查不是由你執行的程式

難度:高階

應用程式:bash(譯註:UNIX或者LINUX的shell)

想象下這個場景-你已經準備好了要和同事在辦公室裡對戰一局快速的Crack Attack(譯註:一款免費的OpenGL遊戲,類似俄羅斯方塊),不料卻發現,當你正準備要擊敗你這個傲慢的下屬時,方塊卻停止了-是什麼讓你的機器變得這麼慢?這肯定是因為其他的使用者運用他們嫻熟的經驗來盜取你寶貴的CPU時間、伺服器或者其他的詭異方式,真煩人!

好,讓我們列舉出系統中所有不是由你執行的程式!

或者,更巧妙些的是,為什麼不列出最佔用時間的前十個程式呢:

也許最好使用root許可權來執行這條指令,因為這樣可以過濾出大部分活躍的後臺程式。現在你有了這些資訊,你可以終止他們的程式,但是更“卑鄙”的是反覆地在他們的桌面上執行xeyes(譯註:Linux下的一條好玩的命令)!

 

2:在多個檔案中替換掉相同的文字

難度:中等

應用程式:find(譯註:Linux下的一條命令)/Perl

如果你有個檔案,想在多個位置進行替換,這裡有很多方法來實現。呼叫test[someting]把當前目錄裡所有檔案中的Windows替換成Linux,你可以像這樣執行它:

要替換當前目錄以及下層目錄裡所有檔案中的Windows為Linux,你可以這樣執行:

或者如果你更需要讓它只作用於普通檔案上:

節省了大量的時間並且獲得了高水平的大師等級!

 

3:合併一個不穩定的終端

難度:簡單

應用程式:bash

我們都已經做過這件事了-偶爾使用less或者cat來列出一個檔案,或者以瀏覽二進位制檔案而結束,這通常包含各種可以輕易弄亂你的終端顯示的控制程式碼、警報聲、一些有趣的字元,以及一些奇怪的顏色組合,最後,你的字型將會被一些難以辨認的字元所替代,而你卻不知道該怎麼辦。顯然bash仍然繼續工作著,但是你就是不能明白到底發生了什麼!傳送一個初始化命令給這個終端:

然後一切就再次恢復正常了。

 

4:創造Mozilla關鍵詞

難度:簡單

應用程式:Firefox/Mozilla

在瀏覽器上的一個有用的特徵是,它們有一種能力,可以通過輸入gg onion來通過Google搜尋onion這個詞的一切。同一功能在Mozilla上也可實現,通過單擊Bookmarks(書籤)>Manage Bookmarks(管理書籤)然後新增一個新的書籤,新增的URL就像這樣:

現在選擇書籤編輯器中的條目並且點選Properties(屬性)按鈕,現在輸入一個類似gg的關鍵字(或者可以是你選擇的任何字元)就行了。在URL中的%s將被關鍵字之後的文字內容替代。你可以用這種方法向其他一些依賴你當前URL資訊的網站傳送請求。

或者,右擊一個搜尋區域然後選擇選單選項“為這個搜尋新增一個關鍵詞…”。接下來的會話將允許你使用一個指定的關鍵詞。

 

5:執行多種X會話

難度:簡單

應用程式:X

如果你給別人分享了你的Linux box(),而厭煩了不斷的登入、登出,當你知道了這不是必要的時候,可能會如釋重負。假設你的電腦以圖形模式啟動(runlevel 5),通過同時按下Control+Alt+F1鍵-你將得到一個登陸提示。輸入你的登入名以及密碼然後執行:

來進入你的圖形環境。按下Ctrl+Alt+F7來回到在你之前的使用者會話,如果想回到你自己的使用者會話則按下Ctrl+Alt+F8。

你可以重複使用這項技巧:F1鍵到F6鍵可以識別六個控制檯會話,而F7到F12可以識別六個X會話。警告:儘管這在多數情況下是適用的,但是不同的變種可能用不同的方式來實現這項功能。

 

6:更快地瀏覽

難度:簡單

應用程式:KDE(譯註:一種Linux的桌面環境)

KDE是一個雖然小眾,但是在提升你的網頁瀏覽經驗方面很有用的選擇。啟動一個KDE控制中心,然後從工具條中選擇System(系統)>KDE performance。現在你可以選擇預載入瀏覽器例項。實際上,這意味著瀏覽器在開機的時候就開始執行,在你用之前都保持隱藏狀態。當你想要使用它的時候,它幾乎是瞬間出現。

 

7:簡單地備份你的網站

難度:簡單

應用程式:Backups

如果你想要從一臺電腦上備份一個目錄,但你僅僅想要複製改變的檔案到它的備份而不是複製所有的東西到各自的備份,你可以使用工具rsync來實現它。你需要在這個遠端的源備份計算機上有一個賬戶。下面是這條命令:

這樣我們就備份了192.168.0.2地址上/home/jono/importantfiles/目錄下的所有檔案到當前機器上的/home/jono/backup目錄下。

 

8:使你的時鐘保持準時

難度:簡單

應用程式:NTP

如果你發現電腦上的時鐘似乎與時間脫軌了,你可以使用一個特殊的NTP工具,來確保它準到只有穿實驗服的人才會需要的程度。你需要安裝ntpdate工具,它通常包含在NTP包中,然後你就可以與NTP伺服器保持同步了:

可以在www.eecis.udel.edu/~mills/ntp/clock1b.html上獲得相應的NTP伺服器的列表。如果你修改了你的開機程式並且在指令碼中包含這些命令,就可以確保無論何時你啟動電腦都是完全準時的。你還可以執行一個定時任務來校對時間。

 

9:找到最大的檔案

難度:簡單

應用程式:Shell

計算機中一個常見的問題是,你可能想刪一部分大的檔案(類似音訊或視訊片段)。如下你可以找到當前目錄中最大的那個檔案:

“r”的作用是將大的檔案列在後面,而“h”則是給出易於人們閱讀的輸出(MB或者諸如此類)。你也可以搜尋最大的MP3/MPEG檔案:

你也可以通過下面這條命令搜尋最大的目錄:

 

10:Nautilus快捷鍵

難度:簡單

應用程式:Nautilus(譯註:Linux圖形介面中的一個檔案管理器)

儘管很多檔案管理器近日來被設計為使用滑鼠進行管理,但有時用鍵盤還是方便些。Nautilus有一些鍵盤快捷鍵,可以使你快速瀏覽檔案:

開啟一個定位檔案 – Ctrl+L

開啟父資料夾 – Ctrl+Up

用方向鍵來瀏覽當前資料夾

你也可以使用‘emblems’來定製檔案圖示。這裡有少量的應用於個別檔案或者組的圖象展示。開啟Edit(編輯) > Backgrounds and Emblems(背景和符號)選單條目,然後拖放你想要的圖片即可。

 

11:整理你的資料庫

難度:簡單

應用程式:MySQL

無論何時你改變一個MySQL資料庫的結構,或者從中刪掉大量的資料,檔案都有可能被分散,並導致一些效能損失。尤其是當執行查詢命令時這個情況最容易發生。每當你要改動資料庫的時候,記得執行這個優化器:

也許你會發現,如果你使用VARCHAR檔案,有必要定期的整理你的資料庫表:這個變長列(variable-length columns)是非常傾向於分裂的。

 

12:更快的郵件

難度:簡單

應用程式:KMail

連三秒鐘都不想花費在找郵箱客戶端上面?不想被桌面上堆積成山日漸腐爛的圖示搞得找不到滑鼠指標?不管你正在KDE裡幹什麼,按幾下鍵盤就可以發郵件了。輸入:

按下return,KMail將會自動啟動,為你的至理名言做好準備。你甚至不需要填寫完整的郵件地址。這對Internet地址也是有效的:嘗試輸入www.slashdot.org來啟動瀏覽器。

 

13:同化你的構造

難度:簡單

應用程式:GCC

如果你執行一個擁有適量RAM的多處理機系統(SMP),你會發現,在寫程式碼時,執行一個parallel make很有好處。與按照預設方式執行make並執行serial builds相比,parallel build 是一種很有效的改善方法。讓make在building的時候允許同時存在多個child,用如下的-j轉換即可:

 

14:節省電池電源

難度:中等

應用程式:hdparm

很可能你已經對使用hdparm來調整一個硬體驅動很熟悉了,但是它還能節約你的筆記本的電池壽命,或者通過降低硬碟轉速來使生活更寧靜。

按順序,這些命令將讓硬體轉換成Standby(待命)模式,再轉換成Sleep(睡眠)模式,並且最終設定Automatic(自動)旋轉超時。這個結尾包含一個以5秒為單位的一塊塊數字變數(例如,值為12就等同於一分鐘)。

順便說一下,這個降低旋轉時間至5秒為單位的習慣真值得拿一個特別的使用者友好獎——這個值的設定也許有什麼歷史原因,但我們不知道。如果你恰好知道為什麼,請來信告知我們!

 

15:無線速度管理

難度:中等

應用程式:iwconfig

一個radio傳送/接受裝置和其他裝置間的傳輸速度,取決於有多少可用訊號。在訊號減弱的時候如需維持傳輸,就需要降低radio的傳輸速度。一般情況下,radio都會自己找到可用訊號,並自動選擇最快的速度。

在邊緣區域中,訊號強度勉強夠用,這時候就可能因radio不斷除錯連線速度而造成不必要的包丟失。如果不能加強天線增益,或移動裝置位置來獲取更充足的訊號,可以嘗試強制讓card同步到一個較低的速率。這樣,radio就會減少除錯頻率,實際上,還會比使用持續觸發的連結傳輸得快一些。不同的驅動器有不同的連結速度設定方法。在Linux中,可用iwconfig來設定速度:

這個指令能強制使廣播總是同步在2Mbps,即使還存在其他可用速度。你也可以設定一個明確的速度作為上限,允許卡自動按照任何低於這個上限的速度來工作,但是不能高於它。例如,你可以把它作用於上文舉例的連線上:

如上的指令可以讓驅動器將速度上限設為5.5Mbps,只慢不快。想要將card恢復為全自動縮放,只需要制定它自己自動工作。

通常卡在1Mbps時比它們在11Mbps時可以延伸的更遠。在這兩種速率之間,Orinoco卡有12dB的差別,即降低資料速率可獲得的潛在傳輸距離的四倍。

 

16:疏通開埠

難度:中等

應用程式:netstat

要獲取在Linux伺服器上處於監聽狀態的網路伺服器的列表,可使用netstat程式:

如上訊息告訴你PID為698的程式是一個繫結在5280埠的Perl程式。如果你不是超級使用者,系統將不會顯示哪個程式是執行在哪個埠上的。

 

17:更快的硬體驅動

難度:高階

應用程式:hdparm

也許你已經知道hkparm工具可以用於測試硬碟速度和更改一些設定。它還可以用於優化驅動效能,並且開啟一些預設關閉的功能。在我們開始之前,敬告您,改變驅動選項可能會造成資料損壞,所以首先請備份你所有的重要資料。如下命令可以用來測試速度:

你將會看到類似於這樣的東西:

現在我們可以嘗試讓它提速。找出你的驅動目前設定使用的是哪個選項,然後傳遞給hdparm這個硬體的名稱:

這相當於一個預設設定。多數的Linux發行版本都會選擇一個可以執行在多數硬體上的安全選項。為了獲得更快的速度,你可能想要啟用dma模式,然後當然要調整I/O支援。多數現代計算機支援模式3,這是一個近乎雙倍通量的32位轉換模式。你也可以嘗試:

然後返回這個速度,檢視一下不同。檢驗你的硬體支援哪些模式,然後可以在hdparm的man手冊中學習如何設定它們。

 

18:在你手中的可用時間

難度:高階

應用程式:Perl

對計算來說,浪費的資源就是那些本可以派上更好的用場的資源。不管你還執行了什麼別的程式,為什麼不嘗試執行一個程式,在終端標題欄實時顯示當前的平均負載呢?

將這個存為一個指令碼並命名為tl,然後把它存到你的~/bin目錄下:

如果你想用用load average和你登陸的機器的當前時間,來替換titlebar名字,與西寧tl&即可。它會很恰當的在後臺執行,即使你執行一個類似Vim的互動式程式。

 

19:不使用X完成抓取一次螢幕截圖

難度:簡單

應用程式:Shell

確實有很多螢幕捕獲的工具,但是他們大部分都是基於X的。這導致了一個問題,當你執行一個X應用程式時,將會干擾這個你想要抓取的應用程式——或許是一個遊戲或者甚至是一個Linux安裝程式。但如果你使用了超棒的ImageMagick(譯註:一個開源的圖片處理工具集和開發包)匯入命令,你就可以通過控制檯來對X模組進行抓取。很簡單,開啟一個虛擬終端(例如Ctrl+Alt+F1)然後輸入如下:

chvt命令改變了虛擬終端,而sleep命令給重繪螢幕提供了一個時間。匯入命令會在最後的chvt命令把你再次打回到虛擬終端之前,捕獲所有的顯示並且儲存到一個檔案中。請確保你把所有的命令都輸入在同一行中。

這是甚至在Linux安裝程式上也是有效的,很多安裝程式都只留下一個控制檯而轉去後臺執行——一個一流的到處執行的螢幕抓取器只需要載入一些它所需要的庫到一個floppy(譯註:磁碟)/CD上。

 

20:遠端訪問你的程式

難度:簡單

應用程式:X

如果你想要躺在床上使用你的Linux筆記本從你的Window機器上訪問你的應用程式,可以使用SSH來實現。首先你需要在/etc/ssh/sshd_config中啟用以下設定:

現在我們可以使用如下命令在192.168.0.2上執行GIMP:

 

21:用到man手冊

難度:簡單

應用程式:man

如果你在一個特殊的專案或者命令中需要幫助,man手冊是一個好的入門。通常你使用man<command>來訪問man手冊,但是你也可以通過一個特殊的man頁描述的關鍵詞來搜尋man頁。舉例來說,搜尋所有詳述login的man頁:

當你訪問了一個man頁,你也可以使用斜槓鍵來搜尋一個特定的詞而不是用man頁本身。在你的鍵盤上按下“ / ”然後輸入搜尋項是非常簡單的。

 

22:和你的醫生對話

難度:簡單

應用程式:Emacs

如果說Emacs只是個文字編輯器,就好像說Triumph只是個摩托車,或者說世界盃就是個四年一度的足球賽。好吧,它確實是個文字編輯器,但那只是一小~~~部分。舉個例子?開啟編輯器,按下Esc鍵,緊接著按下X,然後進入doctor:你將會進入到一個離奇的對話中,有一個假想的但是熟練的精神治療師。如果你想要磨蹭你的時間,這是一個很好的方法。

會將你的‘編輯器’轉變成一個老的、受歡迎的遊樂場遊戲。

瘋狂到此為止了嗎?絕對沒有!檢查你的發行版本的包,列出他們在你的Emacs上捆綁的其他功能:我們看到有國際象棋,Perl整合,IRC chat(譯註:一種聊天工具),法文翻譯,HTML轉換,一個Java開發環境,靈巧的編輯,甚至還有一個被稱為“semantic bovinator”(語義糾錯)的東西。我們確實對最後一個能做什麼的毫無頭緒,但是我們斷定無論如何你都敢嘗試它!(請先閱讀免責宣告!

 

23:生成包關聯圖表

難度:簡單

應用程式:Debian

Debian系統最受爭議的是它能安裝一個包,並自動滿足其附屬(dependency)。如果你想要以圖形形式表現這些包之間的關係(這對於瞭解系統如何協調工作是非常有用的),你可以使用Debian中非自由的Graphviz包(apt-get install graphviz)然後使用如下命令:

這個命令會生成圖片檔案並存入dotty:

 

24:解除安裝忙碌狀態的驅動

難度:簡單

應用程式:bash

你應該很熟悉這種情況-嘗試去解除安裝一個驅動,但是系統卻告訴你它處於忙碌狀態。但是什麼程式在佔用呢?一個短小的單行程式碼將告訴你:

這將返回命令和程式ID以及任何正在訪問/mnt/windows目錄的任務。接下來你就可以定位它們,或者使用kill命令來終結它們。

 

25:文字檔案的轉換

難度:簡單

應用程式:recode

recode是一個小而實用並且可以幫你在不同平臺上使用文字檔案時節省大量精力的工具。它的缺陷主要是源於換行符。一些系統使用一個換行字元,而其他的一些系統使用回車。更多其他的系統兩個都用。最後的結果就是,如果你從一個平臺移動文字檔案到另一個平臺上,你會有太多或太少的換行符,還會有很多奇怪的字元殘留。

然而,recode命令的引數是有一些神祕的,所以為什麼不把這種技巧和HACK 26結合到這個功能中,然後建立一些有用的別名:

還有很多recode選項-它們確實可以轉換大量字元間的設定。查閱man手冊來獲取更多資訊。

 

26:只列出今天的檔案

難度:簡單

應用程式:Various

你可能熟悉這個問題,今天早些時候你建立了一個文字文件,而現在立刻就需要它。然而,你想不起來你給它起了個什麼可笑的名字,作為一個熟練的geek,你的家資料夾被836個不同的檔案填滿了。那你要如何找到它呢?哈哈,這裡有很多方法,但是這個小技巧告訴你管道和結合使用兩個強力的shell命令是多麼有效:

ls命令的引數使得這個日期戳以一種特殊的方式呈現。這個狡猾的位就是這樣傳遞給grep來輸出的。grep的引數是它自己的命令(因為是倒引號所以執行),用來將當前的日期替代成匹配的字元。你可以輕易的修改它來搜尋其他特別的日期、時間、檔案大小或者任何東西。結合它與HACK 26是非常節省輸入的。

 

27:避免常見的拼寫錯誤和長命令

難度:簡單

應用程式:Shell

這個alias命令對於設立長命令的快捷鍵是有用的,或者說是聰明的事情。HACK 25中,我們可以通過以下命令來得到一個新命令,lsnew:

然而alias還有其他的用處。例如,解決常見的拼寫錯誤。有多少次你在改變父目錄時忽略了空格?不用再苦惱了!

作為一種選擇,試試重寫一些已經存在的命令怎麼樣?

像我們一樣節省一些按鍵,或者你總是想要完成清單。

要為每一個會話啟用這些快捷鍵,只用新增alias命令到你的使用者裡家檔案目錄中的.bashrc檔案中。

 

28:更改Mozilla的祕密設定

難度:簡單

應用程式:Mozilla

如果你想要改變Mozilla操作,但是在首選項中並沒有提供可以點選的選項來幫助你,這裡有一個特殊的模式可以讓你在Mozilla中啟用,這樣你就能改變一切了。要訪問它,在位址列中輸入這些:

這樣你就可以改變表中檔案裡每一個你感興趣的設定的值。

其他有趣的模式包括總體資訊(about:),外掛詳情(about:plugins),開發者資訊(about:credits)和一些總體情況(about:mozilla)。

 

29:一個星星的背景

難度:簡單

應用程式:KStars

你可能已經玩過KStars了,但是如何創造一個每次當你啟動時就更新的KStars背景圖呢?

KStars可以和–dump switch一起執行,它可以從你的啟動設定中列印出一幅圖片,但一點也不會增加GUI的負載。你可以寫一個指令碼來執行它生成一個每天都更換的桌面圖片(或者你可以只是使用這個方法生成圖片)。

像這樣使用KStars:

你可以把它新增到~/.kde/Autostart資料夾的一個指令碼中,一啟動就開始執行。在瀏覽器中找到這個檔案,把它拖到桌面上然後選擇“設定為牆紙”,將它作為一個隨機生成的背景圖來使用。

 

30:直接開啟一個SVG

難度:簡單

應用程式:Inkscape

你可以通過shell執行Inkscape,然後直接通過一個URL來立刻編輯一張圖片。只用輸入:

記得要另存為一下!

 

31:不用編輯器來進行編輯

難度:中等

應用程式:好多

通常非常長的檔案是很難用文字編輯器來進行操作的。如果你不時地要做這件事,可能你會發現用某些趁手的命令列工具會更快一些,就像下面這個例子一樣。

從檔案file1中列印第一列和第三列到檔案file2中,我們可以使用awk:

只輸出file1中第八列到第十五列中的字元,我們可以使用cut:

要使用單詞word2來替換檔案file1中的單詞word1,我們可以使用sed命令:

通常這是一個比開啟文字編輯器更快得到結果的方式。

 

32:只備份選中的檔案

難度:中等

應用程式:tar

想要使用tar來備份一個目錄中的某一檔案?你可以使用-T標誌。首先,用你想要備份的檔案來建立一個檔案:

然後執行tar,並使用-T標誌指向剛剛建立的檔案。

現在你已經備份好了。

 

33:在檔案中合併列

難度:中等

應用程式:bash

在檔案中拆分列是非常簡單的,合併它們稍微複雜一點。下面是一個簡單的完成這項工作的指令碼:

給這個指令碼命名為merge.sh並且如下執行它:

現在,如果你想要合併file1和file2中的列到file3,下面是執行方法:

/path/to必須被你檔案系統中的merge.sh位置所替代。

 

34:大小寫敏感

難度:中等

應用程式:bash

有些時候,一個詞在不同作業系統間沒有任何區別,在Linux中,“Command”和“command”是不同的東西。當從Windows移動檔案到Linux中時會造成一些麻煩。tr是一個小的shell功能,可以用於改變一堆檔案。

通過執行這個,FILE1和fiLe2將被分別重新命名為file1和file2.

 

35:Emacs中的巨集指令

難度:中等

應用程式:Emacs

當編輯檔案時,你通常會發現那些任務都是冗長和重複的,所以為了節約你的時間,你應該錄製一個巨集指令。在Emacs中,你將必須經歷以下步驟:

1.按下 Ctrl+X 來開始一個記錄。

2.插入所有你想要的按鍵和命令。

3.當你結束時按下Ctrl+X。

現在,你可以用以下命令來執行:

<number>是你想執行巨集指令的次數。如果你輸入的值為0,這個巨集指令將被一直執行直到檔案的結束。Ctrl -x e等同於Ctrl -u 1 Ctrl-x e。

 

36:簡單的垃圾郵件清理

難度:中等

應用程式:KMail

垃圾郵件,或者不請自來的大批郵件,已經是個很普遍的問題,出於必要,現在幾乎每個人都有某種形式的垃圾郵件保護。很多ISP包含垃圾郵件過濾,但是它並沒有被設定的太過主動,而且通常很多都是簡單的標記垃圾郵件,然後讓它進來(ISP可不想因為丟失了你的郵件而被責備)。

所以,你在客戶端上可能已經設定了反垃圾郵件的東西,要讓它執行得更好,你可以寫一些過濾器來移除被標記的垃圾郵件。標籤是作為標題包含進來的。在KMail中,你可以只建立一個快速過濾器來將你的郵件裝箱,或者乾脆把它放到垃圾資料夾中。精確標題的使用將決定於你的ISP使用的軟體,但是通常都是像SpamAssassin這樣系統的類似X-Spam-Flag = YES。

在KMail中簡單建立一個過濾器,選擇Match Any of the Following(匹配下面的任何一個)然後輸入標題細節和你需要的動作。應用過濾器到即將到來的郵件上,然後你的垃圾郵件的一半將不會再來打擾你了。

 

37:閱讀OOo文件但不使用OOo

難度:中等

應用程式:OpenOffice.org(譯註:一套跨平臺辦公室軟體套件)

你曾經有沒有過拿到一個OOo文件,但是沒有OpenOffice.org來閱讀?所以你就把它儲存成普通的文字檔案(.txt),但是被 StarOffice .sxw 格式所替代?這個文字檔案可以得到拯救。首先,這個sxw檔案是一個壓縮文件,所以解壓它:

你想要的是名為’content.xml’的檔案。不幸的是,它充滿了xml的標籤以至於非常難以辨認,所以要用一些Perl魔法將它們過濾出去:

這可能丟失了很多格式,但是至少現在它是可以閱讀的。

 

38:搜尋和執行

難度:中等

應用程式:find

find命令並不只是在尋找檔案方面很有用,它在處理以下問題時也是非常有用的。這裡有一個簡短的例子。

假設我們有很多的壓縮檔案,現在我們想找到所有的壓縮檔案:

將會定位出所有當前路徑下的gzip文件。但是假設我們想要檢查它們是否是有效文件,gunzip -vt選項將會幫我們實現這個,我們還可以機智地使用xargs結合這兩個操作:

 

39:正確使用whois伺服器

難度:中等

應用程式:whois

whois命令在追捕Internet上的惡棍以及給他們提供服務的ISP都是非常有用的。不幸的是,有很多whois伺服器,如果你的反搜尋一個域名,通常你不得不用一個指定的他們使用的TLD。然而,一些whois代理將自動轉送你的查詢到正確的伺服器上。其中之一可以在http://whois.geektools.com/上獲得。

 

40:驅動掛載到哪裡了?

難度:中等

應用程式:bash

人們常碰到的一個問題是,你剛接通電源時,就有太多的可掛載外設(USB驅動,flash記憶體卡,USB鍵驅動)消耗光了驅動?

實際上,所有的驅動都呼叫一個驅動——就像usb-storage,會在日誌中儲存很多有用的資訊。嘗試:

 

這將從dmesg輸出過濾出指定的驅動規格。你可能發現一些這樣的文字:

這個是說你的外設是在sda上。

 

41:自動執行USB裝置

難度:高階

應用程式:hotplug指令碼

當新增一個特殊的外設時想要執行一個指定的應用程式?USB hotplug後臺程式可以幫你!當有USB裝置新增到系統中時,這個服務就會得到通知。對於需要核心驅動的裝置,hotplug後臺程式將在/etc/hotplug/usb/下呼叫一個同名的指令碼,例如,這裡的一個名為usb-storage的指令碼。你可以直接在這個指令碼的後面新增你自己的命令(或者更好的是,在它的最後新增一行來讓指令碼在別的地方執行)。那麼你就可以播放音樂,autosync檔案(譯註:影像檔案),搜尋圖片或者其他什麼的。

對於不依賴於核心驅動的裝置,有一個檢查表,可以用來匹配USB產品和製造商ID。很多發行版已經設定好去做一些事情,但是你可以依據你的需要定製這些指令碼。到http://jphoto.sourceforge.net/ selected=sync去看一個我們能做什麼的例子。

 

42:重新命名和調整圖片大小

難度:高階

應用程式:bash

很喜歡你的新相機但是不能容忍那個糟糕的名字?你也想要準備釋出它們到網上嗎?沒問題,一個簡單的bash指令碼真是你所需要的:

儲存這個指令碼到一個名為picturename.sh的檔案中,然後用一下命令執行它:

然後在你的某個路徑下儲存它。現在,如果你在directory /path/to/pictdir下有一堆.jpg檔案,所有你需要做的就是執行這個:

而在當前的目錄下你會發現 mypict_1.jpg, mypict_2.jpg之類的,它們是你初始圖片調整大小後的版本。你可以根據你的需要改變指令碼,或者,你只是期待一個超級簡單的圖片大小調整,試著看看mogrify命令和它的-geometry引數。

 

43:安全登出

難度:簡單

應用程式:bash

當你在一臺共享機器上使用一個控制檯,或者甚至只是在你自己的桌面使用控制檯,都可能會發現當你登出時,螢幕仍然會顯示誰已經登入正在做什麼的痕跡。大多數發行版本將會清屏,但是有些不會。你可以通過編輯你的 ~/.bash_logout檔案然後增加這個命令來解決問題:

你也可以新增任何其他的有用命令在這裡。

 

44:傳輸檔案但不使用ftp或者scp

難度:簡單

應用程式:netcat

需要傳輸一個目錄給其他伺服器但是沒有FTP或者SCP使用權?那麼這個小技巧將會幫助你使用netcat功能。在目的伺服器上執行:

並且在傳送伺服器上執行:

現在你就可以不需要FTP並且不需要root許可權,就能傳送檔案了。

 

45:備份一個Debian包清單

難度:簡單

應用程式:Debian

如果你正在執行Debian並且找不到你正在執行的包,為你當前正在安裝的包做一個備份是非常有用的。你可以執行如下得到一個清單:

這將把全部的清單放到debianlist.txt中,這樣你就可以通過如下程式碼在不同的計算機上安裝相同的包。

當你複製你的系統到一個新的計算機上時,你要記住你還需要從/etc中複製配置檔案。

要實際安裝這些選項,使用如下指令:

 

46:強化ssh

難度:簡單

應用程式:ssh

儘管SSH是一個非常安全的連線伺服器的方式,這裡還有兩個簡單的改變,可以讓你進一步增強它的安全性。首先,你當然不希望別人直接以root使用者登入——他們應該以普通使用者登陸,然後使用su命令來轉換。你可以在/etc/ssh/ssh_config 檔案中通過新增如下程式碼改變這個件事:

現在唯一能得到root特權的方式是通過su,這意味著入侵者現在需要破解兩個密碼來得到全部的使用權。當你編輯這個檔案時,找到這樣一行:

然後把它改為如下:

這將消除最初的SSH協議中的撤銷選項,現在被認為是非常易於攻擊的。

 

47:停止回應ping

難度:簡單

應用程式:sysctl

ping在找出網路拓撲結構時是非常有用的命令,缺點是它只能做這件事,而且會使得網路上的黑客們更容易瞄準現場伺服器。但是你可以告訴Linux忽略所有的ping伺服器將不會回應。這裡有很多的方法來實現它,但是最好的是使用sysctl。關掉ping回應:

想要開啟它,使用:

關掉ping對你來說是非常嚴重的,看看接下來的技巧。

 

48:降低ping速率

難度:簡單

應用程式:sysctl

可能你想要保持伺服器回覆ping的功能,但是又想從被熟知的“ping flood”(封包洪流)的攻擊中保護自己。那麼你要如何完成這一壯舉呢?最簡單的方法是降低回應ping伺服器的速率。它們仍然是有效的,但不會使伺服器過載。

當回覆被當作一個訊號地址傳送時,這將會降低速率。

 

49:當登出的時候清理KDE

難度:簡單

應用程式:bash

在Windows中有很多程式會做一些清除網路快取,移除臨時檔案事情。Linux上如果也可以這樣是不是很cool呢?使用KDE,你甚至不需要安裝任何新的軟體,startkde指令碼將會自動的執行你放在特殊地方的指令碼。

首先,你需要在你的.kde目錄下建立一個命令shutdown的目錄:

現在建立一個指令碼,用來在關機時執行一些你想要的事情。這裡是一個例子:

現在確保你設定了正確的許可權:

(或者隨便你叫它什麼)。可以清除敏感檔案,也可以通過將指令碼放在你的預設KDE資料夾中有一個名為shutdown的子資料夾裡,給所有使用者一個全域性的關機指令碼。找出你的預設KDE目錄在哪裡,試一下:

 

50:無密碼的ssh

難度:中等

應用程式:ssh

厭煩了每次登陸你的伺服器時都要輸入密碼?ssh也支援金鑰,所以當你登陸桌面時你只能輸入你的密碼。在你的桌面機器上生成一個金鑰對:

為你的金鑰輸入一個口令。這會將金鑰放到 ~/.ssh/id_dsa and the public key in ~/.ssh/id_dsa.pub中。現在看看你是否有了一個正在執行的ssh-agent。

如果安裝了ssh-agent,大部分視窗管理器都會自動執行它。如果沒有安裝,開啟一個:

現在,告訴這個代理你的金鑰:

然後輸入你的口令。你需要在每次登陸時都輸入口令,如果你是使用X,嘗試新增:

到你的.xsession檔案。(你可能需要安裝ssh-askpass)現在為每個你需要登入的伺服器都建立這個目錄 ~/.ssh,然後複製這個檔案~/.ssh/id_dsa.pub into it as ~/.ssh/authorized_keys 。如果你是手動開啟ssh-agent,當你登出時,使用如下程式碼終止它:

 

51:通過ssh使用rsync

難度:中等

應用程式:Shell

rsync使大型目錄結構保持同步。通過SSH使用tar遠端複製一個檔案系統的一部分是非常理想的,sync甚至更適合保持兩臺機器之間的檔案系統的同步。為了使用SSH執行一個rsyns,傳遞給它一個-e轉換:

注意從源端(在greendome上)來的檔案說明後面的 / ,在源說明中,一個尾部的 / 告訴rsync這個目錄的內容,但不是目錄本身。為了將目錄放入正在複製的內容的最高等級丟掉這個 /:

這將在 ~/six/目錄下保持一個與bcnu:/home/six/上的任何東西同步的複製品。rsync預設只拷貝檔案和目錄,但是當源端移除了檔案時並不會在目的端移除它們的拷貝。為了保持複製的精確性,包含–delete這個標誌:

現在當老的報表從greendome上的~one/reports/中移除了,在同步版本中,每次這個命令執行時,它們也將會從~six/public_html/reports/中移除。如果你在corn中像這樣執行一條命令,記得丟掉v。這將會使輸出穩定(除非rsync在執行中出現問題,在這種情況下你將會收到一封有錯誤輸出的郵件)。使用SSH作為你的rsync運輸方式,這樣做的好處是使資料在網路傳輸過程中加密,並可以方便使用任何你已經用SSH客戶端金鑰建立的信任關係。

 

52:資源掃描

難度:中等

應用程式:nmap

例如,簡單的TCP連線掃描可以在不需要root特權時進行:

一般來說,當人們想到nmap時,都假設nmap是用來進行一些違法的網路偵查,併為惡意攻擊做準備的。但是作為一個強大的工具,nmap可以成為一個白帽子,做一些比入侵網路有意義得多的事。

nmap也可以通過指定範圍或者CIDR符號來掃描IP地址:

nmap如果以root身份執行,可以提供更多的資訊。當它以root身份執行時,通過使用-O標誌,它可以使用特殊的資料包來決定遠端機器的作業系統。此外,你可以通過使用-sS標誌來實現半開的TCP掃描。nmap將會傳送一個SYN資料包到遠端的主機,然後等待接收它回應的ACK。如果nmap收到一個ACK,它就知道這個埠是開放的。

這不同於普通的TCP三次握手,客戶端會傳送一個SYN包,如果它收到了初始的伺服器ACK,客戶端隨後會將一個ACK送回伺服器。攻擊者們時常使用這個選項來避免使他們的掃描登陸到遠端機器上。

伴隨著OS探測的啟用,nmap可以確認OS是Solaris,但是現在你還可以知道,它可能是執行在SPARC處理器上的Version 9。

一個強大的功能是可以被用於和你的nmap的XML輸出效能保持聯絡。使用-oX命令列轉換而啟用,就像這樣:

這在掃描IP地址範圍或者你全部的網路時是特別有用的,你可以將所有通過掃描收集起來的資訊放到一個XML檔案裡,並經過解析後插入到資料庫中。這裡是一個開放的埠的XML入口:

nmap是一個強大的工具。通過使用它的XML輸出效能,一點點的指令碼,還有一個資料庫,你可以創造一個更強大的可以在你的網路上監測未授權的服務和機器的工具。

 

53:備份你的bootsector(引導扇區)

難度:高階

應用程式:Shell

妨礙引導裝入,雙啟動和很多其他下熱鬧的程式會留給你一個混亂的引導扇區。為什麼不在你可以備份的時候給它建立一個備份呢:

引導裝載器混亂、雙啟動及許多其他的可怕的程式可能造成亂七八糟的啟動區。

很顯然,你應該改變這個裝置來顯示你的boot驅動(有可能是SCSI的sda)。還要非常小心,別把事情搞砸——你可能會輕而易舉地毀掉你的驅動!恢復時使用:

 

54:保護日誌檔案

難度:高階

應用程式:很多

在一個入侵過程中,一個入侵者將會很可能在很多系統日誌中留下能反映他行為的跡象:一個有價值的審計追蹤應該被保護。沒有可靠的日誌,就很難發現攻擊者是如何侵入,或者是從哪裡來的攻擊。這個資訊在分析事件、聯絡相關方面並給予反饋上,是很關鍵的。但是,如果入侵成功,什麼才能阻止他來移除他的這些錯誤行為的痕跡呢?

這就是檔案屬效能發揮作用、挽回敗局的地方(或者至少使事情沒那麼糟)。Linux和BSD都有給檔案和目錄分配額外的屬性這個功能。這不同於標準的Unix許可權方案中,系統為所有的使用者提供的普遍的屬性設定,而且它們比檔案許可權或者ACL都要更深層次影響檔案訪問。

在Linux中,你可以看到並且通過lsattr和chattr命令分別修改一個給出檔案的設定。在寫這篇文章時,Linux的檔案屬性只能在你使用ext2和ext3時獲得。這還有些XFS和ReiserFS的關於獲得屬性支援的核心補丁。一個保護日誌檔案的有用的屬性是append-only。當這個屬性被設定後,檔案不能被刪除,而且寫操作只能被允許在檔案的最後追加。

在Linux下要設定append-only標誌,執行這條命令:

看看+a屬性是如何工作的:建立一個檔案然後設定它的append-only屬性:

企圖第二次寫檔案失敗,因為它將覆蓋這個檔案。然而,在檔案的末尾追加仍然是被允許的:

顯而易見,一個獲得root特權的侵入者能意識到使用了檔案屬性,並且可以通過執行chattr -a來移除append-only標誌。為了防止這種情況,我們需要禁用移除append-only屬性的效能,在Linux下使用功能機制完成這個。

Linux功能模型分割特權給全能的root賬戶,並且允許你有選擇的禁用它們。為了防止一個使用者移除一個檔案的append-only屬性,我們需要移除CAP_LINUX_IMMUTABLE功能。當體現在當前執行系統中時,這個功能允許append-only屬性被修改。為了當前系統中獲得修改這個功能的設定,我們將簡單有效地呼叫lcap(http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2).

為了解壓和編譯這個工具,執行這條命令:

然後,不允許修改append-only標誌,執行:

第一條命令移除了改變append-only標誌的功能,然後第二條移除了原始I/O的功能。這是很有必要的,因為這樣就能保護檔案不被訪問塊裝置時駐留在其上的東西修改。這阻止了訪問/dev/mem和/dev/kmem,有可能給入侵者提供恢復CAP_LINUX_IMMUTABLE功能的漏洞。為了在boot上移除這項功能,新增之前的兩條命令到你的系統啟動指令碼中(例如/etc/rc.local)。你應該確保這個功能在boot命令中被移除了,防止其他啟動指令碼出問題。一旦lcap移除了核心功能,就只能通過重啟系統來恢復了。

在做這些之前,你應該明白,給你的日誌檔案新增append-only標誌,將會造成日誌迴圈指令碼失敗。然而,做這件事將會極大的提升你的審計追蹤的安全性。安全性的提升在突發事件中會被證明是很有用的。

 

55:自動加密連線

難度:高階

應用程式:FreeS/WAN

一個FreeS/WAN支援的特別cool的功能是,當其他主機執行FreeS/WAN時隨機加密。這允許FreeS/WAN在所有支援隨機加密的主機間透明傳輸。為了這個,每臺主機必須使用FreeS/WAN生成一個公鑰,這個公鑰可以儲存於那臺主機的一個DNS TXT記錄中。當一臺主機要與另一個主機建立一個隨機加密,希望初始化一個加密連線時,將會通過DNS查詢這臺主機的公鑰並且初始化這個連線。

一開始,你想使用這個功能時,需要為每一臺主機生成一個公鑰。你可以通過執行如下命令來實現它:

現在你需要新增通過那條命令建立的檔案的內容到/etc/ipsec.secrets中。

然後,你需要生成一個TXT記錄來存放你的DNS區域。你可以通過執行如下命令來實現它:

現在新增這條記錄到你的空間然後過載它。你會證實DNS已經通過這條命令正確的執行了:

現在只需要重啟FreeS/WAN-你現在應該能連線到任何支援隨機加密的主機上了。但是如果其他的主機想要連線你該怎麼辦?要授權連線,你需要在你的DNS反向查詢區域為你的機器建立一個TXT記錄。

你可以通過執行一個簡單的命令來生成一條記錄:

為你的子網新增這條記錄到反向查詢區域,然後其他的機器就可以和你的機器初始化隨機加密了。伴隨著隨機加密的使用,所有主機間的傳輸將被自動加密,同時保護所有的服務。

 

56:消除二進位制suid

難度:中等

應用程式:find

如果你的伺服器有比你自身多的shell使用者,你應該在你的系統上定期的稽核setuid和setgid的二進位制檔案。可能你會驚訝你找到了那麼多檔案。這裡有一個搜尋所有setuid或者setgid的檔案的命令位設定:

這將會建立一個名為setuid.txt的檔案,包含了所有當前系統上匹配的檔案的細節。要移除任何你不用的工具的s位,輸入:

 

57:Mac過濾Host AP

難度:高階

應用程式:iwpriv

你可以在鏈路層使用iptables或者ebtables執行MAC過濾,那比讓Host AP為你做這些更安全。這不僅僅是阻礙指向你的網路傳輸,也是預防邪惡的人關聯你的站。這能幫助組織某些人給你的其他無線客戶端造成麻煩的可能,即使他們沒有更多的網路通道。

當使用MAC過濾時,很多人會列出一個他們希望允許的無線裝置清單,然後拒絕所有其他的。使用iwpriv命令完成這個功能:

addmac指示新增一個MAC地址到內部表。只要你喜歡你就可以通過執行更多的addmac命令新增更多的MAC地址到表中。然後你需要告訴Host AP對你已經建好的表做什麼。maccmd 1命令告訴Host AP就像使用一個“允許”清單一樣使用這個表,並且拒絕所有其他的MAC地址來關聯。最終,maccmd 4命令去除掉所有的關聯客戶端,強制使它們重新關聯。對錶中的客戶端來說是自動發生的,但是其他的任何企圖關聯的客戶端都是被拒絕的。

有時,你只需要禁止一個或者兩個搗蛋鬼,而不是設定一個詳細的被允許的硬體規則。如果你需要禁止兩三個MAC地址而允許其他所有的地址,嘗試這個:

像以前一樣,你可以不限次數的使用addmac,只要你樂意。Maccmd2命令會將規則設定為“拒絕”,而如果該MAC恰巧已經關聯,kickmac會立刻將特定的MACboot。這也許比只為了禁止一個搗蛋鬼而消除所有關聯然後讓他們重新鄰接要好一些。順便說一下,如果你想要消除所有的MAC過濾,嘗試maccmd 0。

如果你錯誤的輸入了一個MAC地址,你可以像使用addmac一樣使用delmac命令,然後它(可以預見)就會從表中刪掉這個給出的MAC地址。你有時會需要完全清除當前的MAC表但是保留它當前的規則,使用這條命令:

最後,你可以通過使用/proc瀏覽正在執行的MAC表:

iwpriv程式操縱正在執行的Host AP驅動,但是重啟後不保留設定。一旦你對你的MAC過濾表感到滿意,請確保你在一個rc指令碼中新增了相關命令在啟動時間執行。

注意,未關聯的客戶端仍然可以監聽網路傳輸,所以MAC過濾實際上只能預防一點點竊取。為了與被動的監聽技巧搏鬥,你需要加密你的資料。

更新:如果你想要知道更多的技巧,請檢視《More Linux tips every geek should know》(每個geek應該知道的更多的技巧)

 

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

每個極客都應該知道的Linux技巧

相關文章