眾所周知,shell是Linux操作系統下的主要管理工具。系統管理員除了要掌握shell下的命令外,還需要掌握一些特殊的字符。這些特殊字符可以幫助系統管理員將多個命令組合成一個命令,或者說可以讓系統管理員更便捷的操作。筆者就給大家介紹一下這些特殊字符以及相關的應用。
一、快速在目錄之間切換。
在Linux操作系統的文本模式下,在目錄之間進行切換都需要通過命令來完成。顯然這沒有圖形化界面下使用鼠標點點那麼方便。但是,shell中仍然提供了一些特殊的字符。在這些字符的幫助下,系統管理員可以輕松的在不同的目錄之間進行切換。
如現在系統管理員想從任何目錄中回到用戶的主目錄下,除了按原路返回外,還有其他更快的方法嗎?其實,要回到用戶的主目錄下,有一個很便捷的方式,就是通過一個特殊的字符~來完成。通常情況下,當管理員創建某個用戶後,在系統的/home目錄中會以這個用戶的名字建立一個文件夾。這個文件夾所在的目錄就是用戶的主目錄。當用戶不知道自己所處那個目錄,而需要迅速回到自己的主目錄時,可以使用這個命令來實現:cd ~。也就是說,特殊符號~在操作系統中代表的是用戶的主目錄。由於不同用戶的主目錄不同,利用這個主目錄可以快速的回到自己的主目錄下面。
在目錄切換過程中,還有兩個比較重要的特殊字符,分別為.與..符號。其中“.”表示當前目錄。這個符號很重要,在很多地方都需要用到。如在定義PATH環境變量的時候,在路經的最後需要加上這個.號,這表示當前目錄。另外,如果系統管理員想運行當前目錄下的一個腳本文件,如setup.sh。則可以不采用絕對路徑,而直接使用./setup.sh。其中這個.符號就代表當前目錄。在cd命令中也可以使用.號,如cd ./setup,就表示進入到當前目錄的下一個子目錄setpup下面。所以說這個特殊符號..(英文狀態下的點號)在切換目錄的時候非常有用。另外一個特殊的字符就是“..”(英文狀態下的雙點號)在系統中表示的是上一級目錄。如故管理員利用cd命令定義到一個目錄後,又想回到上一級目錄中,則可以使用cd ..命令來實現。注意cd命令與點號之間要有空格。
系統管理員若能夠熟練應用這些特殊字符,特別是表示用戶主目錄的~符號,能夠幫助管理員迅速切換到自己想要的目錄下。如在Linux客戶端中,往往用戶郵箱的文件夾是保存在用戶主目錄下面的。如用戶可能采用的是thunderbird的郵件客戶端。采用這個客戶端有一個弊端,即當Linux系統非法關機後,開會在郵件的目錄中產生一個lock的文件。客戶端就不能夠打開。只是系統管理員需要切換到用戶主目錄下的郵件文件夾中,刪除這lock文件。此時比較簡單的方法,就是直接使用~符號定位到用戶的主目錄下,然後再進入到郵件目錄中,找到這個文件並刪除。這筆一級一級的進入要快的多。
二、將執行結果保存到文件中。
用戶在日常的操作中,可能需要將某些命令的執行結果保存到文件中。如需要將一些程序的運行結果保存到日至文件中等等。筆者現在以一個簡單的例子為例。Ps命令是用來顯示當前系統運行程序的命令。如在命令行中,輸入ps命令可以顯示當前系統運行的所有程序(注意程序跟進程是兩個不同的經驗)。其中會顯示應用程序的進程號、終端信息、運行時間以及程序名字等等。現在管理員如果要將這些信息保存到一個特定的文件中,該如何實現呢?
此時系統管理員可以在命令後面采用一個特殊的字符>,如ps > ps.txt的方式,將命令ps的執行結果保存到文本文件ps.txt 中。如果目標文件不存在的話,則系統會創建文件並保存信息。如果目標文件存在的話,則系統會覆蓋原先的文件。所以,在使用>這個特殊符號來創建文件的時候,需要特別的注意。因為目標文件存在,則系統不會給用戶任何的提示信息,就把目標文件刪除並新建同名的文件。為此一不小心就可能會造成文件的丟失。不過其還有一個雙胞胎的兄弟,即>>符號。這個特殊符號跟>符號類似,也是將執行結果保存到一個文件中。不過這個符號與>符號有一個很大的不同。如果目標文件已經存在的話,兩個符號的執行效果是不同的。如果采用的是>符號的話,則系統會自動覆蓋它。而如果采用的是>>符號的話,在系統不會覆蓋已經存在的目標文件,而只是在這個目標文件中追加相關地記錄。如果目標文件不存在的話,則仍然會自動創建目標文件。
由於>>符號不會自動覆蓋目標文件,只是在目標文件中追加記錄。為此這個符號還有其他一些特殊的用途,如可以用來合並不同的文件。如現在有連個文件listjpg.txt與listgif.txt。在這個兩個文件中主要保存著jpg與gif的圖片名字。現在用戶想將這個兩個文件合並,或者說想將listjpg.txt中的記錄追加到listgif.txt文件中。此時該如何處理呢?利用命令cat listjpg.txt >> listgif.txt就可以實現這個功能了。這個命令的意思是,先利用cat命令將文件listjpg.txt的內容讀取出來然後追加到listgif.txt文件中。執行了這個命令後,就會將兩個文件合並。不過原先的文件仍然存在。如果不需要的話,就需要手工的刪除它。
由於這兩個特殊符號功能類似,但是實現細節上有所差異。為此系統管理員需要掌握其中的差異,並在實際工作中選擇合適的處理方式。如在一些安裝程序中,需要將安裝過程中的信息保存在日志文件中。但是在下一次重新安裝的過程中,系統管理員可能喜歡先將原先的日志刪除。因為這會增加閱讀量。此時就是采用>這個特殊符號來實現比較合理,因為其會自動刪除日志文件。
三、將程序放在後台運行。
有些時候,系統管理員可能希望某些程序在系統後台運行。如果將Linux操作系統當作服務器來管理的話,講一些長時間運行的程序放在後台運行是一種很常見的手段。如現在管理員利用while循環來實現一個功能。每5分鐘來判斷一下某個應用系統是否有產生錯誤的日志文件。如果有的話要馬山將這個錯誤日志文件發送給系統管理員。寫完這個腳本程序之後,最好的方式就是將這個腳本程序放置在後台運行。因為這個程序需要長時間運行,如果在前台運行的話,可能會對其他程序產生干擾。而且也容易被誤關閉。所以,放在後台執行反而更加合理。那麼在Linux操作系統中是如何將腳本程序防止在後台運行的呢?此時也需要用到另外一個特殊字符&。如這個腳本程序的名字為errorlog.sh。則管理員只需要運行命令errorlog.sh &,系統就會將這個程序放置在後台運行。
四、解釋特殊字符的轉義字符。
在微軟操作系統中,某些字符是不能夠用來做文件名的。如*這個米字符號,其是用來做通配符用的,不能夠在文件名或者目錄名中出現。但是在Linux操作系統中沒有這方面的限制。如test*.txt在Linux操作系統中是一個合法的名字。難道*符號在Linux操作系統中不做通配符使用嗎?其實,在Linux操作系統中這個*符號也有特殊的含義,其也是代碼通配符。如使用ls text*命令,可以列出所有已text開頭的文件或者目錄的名字。那麼為什麼在Linux操作系統中還可以利用這個*米字符號來作為文件名呢?這都是轉義字符\在其作用。
如現在用戶想在文件名字中加入一個*米字符,則可以使用命令vi text\*.txt來實現。在這個通配符*米字符號前面加入一個轉移字符\,就告訴系統要將這個*字符當作普通字符來對待。其實這個轉義字符的重要作用還是體現在文件的刪除上面。如現在某個目錄下有如下幾個文件,chap*.txt,chap1.txt,chap2.txt。其中chap*表示一本書的目錄,而其他的表示這個本書的各章內容。如果現在系統管理員想把目錄文件刪除了,采用了rm chap*.txt命令,還有什麼後果呢?此時系統會把所有的以chap開頭的文件刪除。也就是說,不光光是目錄文件,章節的內容文件也被刪除了。因為此時操作系統是將這個*符號當作通配符來對待。如果要刪除目錄文件在,則正確的命令應該這麼寫:rm chap\*.txt。這個命令就是告訴系統這個*符號為普通的符號,而不是通配符。此時系統就會將這個目錄文件刪除了,而不會影響到其他文件。
雖然說在Linux操作系統中通過轉義字符的方法允許用戶采用一些特殊的字符來為文件命名。但是出於以後管理的方便,筆者還是建議大家不要采用特殊符號來命名。否則一不小心就會發生不可挽回的損失。如上面的案例中,將*通配符當作文件名字的話,那麼在刪除時就很容易將相關的文件全部刪除。