簡體   English   中英

使用C在Linux上記錄命令行輸入和輸出

[英]Recording command line input and output on linux with C

基本上我想做一個像鍵盤記錄器一樣的程序。 問題是,作為網絡管理員,有時我不記得在某些情況下對計算機所做的操作,或者同一時間我編寫了Linux的howto和教程。 我想記錄一下我做了什么。 因此,該程序的基本思想是:鍵入程序的名稱(此刻我稱其為rat)

$ rat
Welcome everything from now on will be recorded
recording $ ls
file1 file2 file3
recording $ quit
Bye bye

您所做的一切都將發送到xml文件。 像這樣的東西

<?xml version='1.0' encoding='UTF-8' ?>
<rat>
 <command>
   <input>ls</input>
   <output>file1 file2 file3</output>
   <err><err>
 </command>
</rat>

我正在用fp_in = popen( input, "w");做一些測試fp_in = popen( input, "w"); system ,但首先使用popen不能更改目錄,而使用“ system則無法正確管理輸入和輸出。

我還在檢查是否可以做一些像插件一樣的bash操作,但沒有找到任何信息。

在某些時候,如果感覺不錯,我應該創建另一個shell(這超出了我的當前能力)或fork bash sh。 但這應該是那么復雜的權利。 我願意建議從哪里開始。 我對C感到生疏,因此我再次閱讀了許多基本知識。

有了xml文件,后來我正在考慮制作一個程序來存儲此數據和/或編輯此數據,以便我可以創建教程和方法。

我可以想到許多將其擴展到使用printscreen的方法,因此所有存儲的圖像都將保存到一個文件,您可以將該文件上傳到服務器(此刻我很高興存儲數據)。 它可能是一個有用的工具。

PS。 我確實知道這也可以用於邪惡的事情。

script命令已經存在,它將所有輸入和輸出記錄到終端中,並將其寫入筆錄中。 我建議僅使用它,除非您有不能滿足的特殊需求。 實際上,我見過的最好的script版本是NetBSD版本 ,因此如果Linux版本不能滿足您的需求,您可能要研究一下。

如果您想自己編寫它,而不是使用system ,我建議您使用fork / exec創建一個單獨的shell進程,將所有輸入和輸出都復制到其中。 為了了解其工作原理,建議查看現有script版本的源代碼。

大多數外殼程序都有內置的script ,該script將僅在命令行內外記錄文本。 不完全是您要尋找的東西...令我驚訝的是, script不是內置的,這意味着它構建所需內容的模型。

script命令幾乎可以完成您想做的事情:它只記錄命令行中輸入和輸出的文本。

如果使您的提示與眾不同(以便您可以可靠地分辨出shell命令與其他所有命令之間的區別),則可以對script輸出進行后處理以實現目標。 或者,您可以修改script以使其發出要查找的XML。

您也可以嘗試從另一個角度解決這個問題。 不用常規的shell,而是使用ssh或telnet連接到計算機並以這種方式運行命令。 許多ssh / telnet客戶端(例如PuTTY )可以選擇在會話期間記錄所有控制台輸入和輸出。 您應該能夠對該日志進行后處理,以生成所需的任何類型的日志文件。

根據您的設置,您甚至可能不必使用第二台計算機(您應該可以自己使用ssh)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM