萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> Linux 記錄會話過程的命令

Linux 記錄會話過程的命令

   在Unix系統維護中,有時候系統工程師希望能夠記錄下會話的過程。如在測試一個系統功能的時候,工程師就希望將測試的步驟都一一的紀錄下來。以便出現問題時利用這份資料進行追蹤分析。如有時候在制作培訓文檔的時候,可能也需要這些會話記錄,以方便培訓師制作PPT等培訓文檔。總之就是一句話,系統工程師現在想要記錄某個會話的過程,在Unix系統中能否實現?

  一、script命令的主要作用於特點。

  在Windows操作系統中,讀者可能用過一些屏幕記錄軟件,可以將某段時間的操作通過視頻的形式記錄下來。不過在Unix操作系統中,有時候不用這麼麻煩。因為操作系統提供了一個script命令,幫助系統工程師來記錄某個會話的過程。這是一個比較冷僻的命令,也不在POSIX的規范中。為此有些Unix操作系統版本就可能不帶有這個功能。不少系統工程師可能平時很少接觸這個命令。不過筆者是比較喜歡這命令的。簡單的說,系統工程師利用這個命令就可以將一個會話的整個過程或則中間的某些操作記錄到一個文件中。利用這個命令基本上可以在文件中記錄大部分的鍵盤操作、命令的輸出結果以及錯誤信息。也就是說,在屏幕上輸出的信息基本上都可以保存在這個文件中。然後系統管理員可以在事後查看這個文件以獲得必要的信息。那麼這個命令該如何使用呢?如下圖,其實很簡單。

  如上圖所示,就是script命令使用的基本過程。首先當系統工程師想要記錄某個會話的時候,則只需要在會話開始時輸入script命令。輸入這個命令後,系統就會將當前用戶的所有鍵盤操作、屏幕輸出以及錯誤信息等等保存到一個特定的文件中。如上面執行了ps命令與who命令後,希望就會將這兩個命令(用戶的鍵盤操作)、屏幕輸出(命令的執行結果)等等保存到文件中。當工程師需要退出記錄過程時,則只需要輸入exit命令,系統就會就是script done的提示信息。表示系統已經結束了記錄工作。

  當系統工程師需要查看這個文件的信息時,可以使用cat或者vi命令來查看這個文件中的內容。不過所使用的shell版本不同,他們先是的結果可能有所差異。如在某些版本中,使用cat命令來查看這個文件,可能只顯示這個命令在什麼時候完成,而不會顯示用戶的鍵盤操作與屏幕的輸出信息。為此筆者建立采用vi命令。利用vi命令來查看這個文件,就不會有版本之間的差異問題。如使用vi typescript命令,就可以查看這個文件中的具體信息。通常情況下,整個文件中包含以下幾部分內容。

  第一行是注釋信息。如“Script started on 2009年06月15日 星期一 18時24分21秒”。這個提示信息顯示這個命令開始執行的時間。然後在最後一行中,也有類似的提示信息。不過最後一行的提示信息顯示的是這個命令完成的時間,顯示了命令執行完成的日期、具體時間等西虛擬。然後中間的部分就是命令與輸出結果的信息。如果在命令的的執行過程中,有錯誤信息的話,也會一並在這裡記錄。

  二、scirpt命令使用的注意事項。

  從以上的截圖中可以看出這個命令使用起來其實並不是很復雜。不過在一些細節方面還系統管理員仍然需要注意。具體的來說,有如下幾個方面要注意。

  第一需要注意重復記錄的問題。系統工程師可能只需要記錄部分的操作,為此在世紀工作中可能會頻繁的打開和關閉這個命令。但是需要注意的是,默認情況下采用script命令後會覆蓋原有的文件。如現在系統工程師首先使用script命令記錄了ps操作,此時系統會產生一個叫做typescript的文件,記錄這個命令操作的相關信息,然後中止了這個命令。一會兒一後又重新使用這個命令,來記錄who操作的過程。此時系統又會產生一個一模一樣的typescript文件。此時系統會將原先的記錄文件覆蓋掉。顯然這可能跟系統工程師的初衷相違背的。系統工程師希望後續的操作能夠保存在原先的記錄文件中,而不是覆蓋掉。如果要實現這個需求的話,那麼系統工程師在執行這個命令時,必須使用一個可選項參數。即按照script –a的形式來啟動這個命令。此時系統就不會覆蓋原有的記錄內容,而是將後續的操作內容追加到原有的文件中。

  第二是不會記錄所有的操作。如系統工程師先啟動了script命令。然後再利用passwd命令來修改當前帳戶或者其他帳戶(以特權用戶登錄)的密碼時,這個密碼信息是否也會記錄下來呢?如果在記錄文件中也記錄了密碼的操作信息,那麼顯然會帶來一定的安全隱患。不過這個擔憂是多余的。各位讀者可以回去測試一下,一般情況下這個密碼信息是不會記錄在這個文件中。其實,大家可以想象一下,再輸入passwd命令後,輸入新密碼時,在屏幕上也不會顯示用戶的輸入內容,即新密碼。為此這個在屏幕上沒有輸出的內容,也不會保存到這個記錄文件中。所以筆者說用戶的這個擔憂是不必要的。

  第三是某些特定的命令不會記錄。筆者上面談到,有些鍵盤操作記錄是不會被保存的。即只要在屏幕上沒有輸出的信息一般情況下就不會給保存到記錄文件中。不過這是一個充分不必要條件。即反過來就不成立。並不是屏幕上所有顯示的內容都會一五一十的記錄到這個文件中。像一些全屏模式的操作命令,如vi命令等等,就不會記錄到這個文件中。為此系統工程師在使用這個工具時,需要預見到這種情況。在操作時,如果需要記錄相關的會話過程,那麼就需要盡量避免使用一些全屏的命令。如在設置環境變量時,盡量不要直接利用vi修改相關的配置文件。而是使用set等非全屏命令來對環境變量進行操作。如此操作系統才能夠記錄完成的操作過程。

  第四系統工程師需要了解一些特殊鍵在文件中是如何表示的。上面筆者所過,記錄文件基本上會記錄所有的鍵盤敲擊動作。如現在用戶輸入了ls -1命令先查看當前目錄下的所有文件的詳細信息。後來用戶反悔了,就利用退格鍵將後面的-l參數去掉了。此時這個退格鍵的操作也會保存到記錄文件中。但是這些特定的功能鍵在文件中是采用一些特殊的符號來表示的。如退格鍵在文件中采用的是“[K”字符符號。所以向這個光標移動鍵或者del刪除鍵等等都有不同的代表方式。只有熟悉了這些代碼的含義之後,才可以真正的讀懂這個文件。不過其代表的形式雖然不同,但是還是有點規律可循。即一般特殊的功能鍵都是以[開頭的。如果系統工程師看到有這個字符的話,那麼就需要考慮這是否代表著某個特殊的功能鍵。

  第五是可以根據自己的需要來確定記錄的文件名與保存的路徑。如果系統工程師直接使用script命令的話,那麼系統會自動為這個文件命名。並且這個文件默認是保存在命令執行所在的目錄,即當前目錄中。系統工程師在執行命令時,也可以自定義記錄文件的名字與保存路徑。如可以使用這個命令script log,讓系統將相關的記錄保存在當前文件夾下的log文件中。如果這個文件不存在的話,系統會自動創建這個文件。若存在的話,除非在命令中使用了-a參數,否則的話,會覆蓋原有的文件。在覆蓋之前,不會提醒系統工程師。所以這一點系統工程師要引起重視,防止文件被意外刪除。

  第六是需要注意如果輸出結果中有圖片信息的話,在這個文件中無法正常讀取。如在會話記錄的過程中,使用了netconfig命令啟動了一個圖形窗口。這個圖形窗口的信息不會在記錄文件中正確反映。系統工程師查看記錄文件時,看到的可能只是一連串的[k符號而已。最後需要說明的是,script命令只是對當前的會話有效。即即使在root帳戶下啟動了script命令,則系統記錄的仍然是當前會話的操作。對於其他用戶的會話不會有絲毫影響,也不會記錄其他用戶的操作。

copyright © 萬盛學電腦網 all rights reserved