bash,  Research & Study

bash – 輸入與輸入

先介紹一下bash

BashUnix shell的一種。

它是命理處理器的一種,通常執行於文字窗口中,並能執行使用者直接輸入的命令。Bash還能從檔案中讀取命令,這樣的檔案稱為指令碼。

 

目前在所有的 Linux 版本都可看到它的影子,在 Windows 也同樣如此;由於它的技術及指令碼可以跨平台運作,使 Bash 成為一個很方便的技術。

在上述的前提下,它替攻擊人員和滲透測試人員帶來獨特的優勢,因為它不需要額外的安裝套件就可以在目標系統執行。

輸入/輸出

在一個執行中的程式,叫做程序

在作業系統的程序,都會有三種檔案描敘符(file descriptors)。

  • Standard input (stdin/STDIN_FILENO)
  • Standard output (stdout/STDOUT_FILENO)
  • Standard error (stderr/STDERR_FILEND)

Standard input

程式的預定輸入來源,預定為鍵盤輸入的文字。

 

Standard output

為程式輸出的位置,預設為在執行的 shell 視窗內輸出。

Standard error

為程式輸出的位置,但比較不同的是 Standard error 只會有錯誤訊息。

需要根據撰寫者決定豆花(錯誤訊息)是要噴在 stderr 或是 stdout 。

重導向輸入和輸入

修改程式的輸出和輸入

如下指令所示,GETDATA 會從 input 讀取資料,再將結果寫入 output

$ GETDATA < input > output

如果是要重新導向錯誤訊息,可能透過描敘符數字來調整,stdin 為 0 , stdout 為 1  , stderr 為 2 。

下方指令為將錯誤訊息寫入err.log

$ GETDATA 2> err.log

也可以將正常輸出和錯誤訊息寫在一起,不過要透過錯誤訊息那邊要使用 &1 ,如下所示,會將輸入和錯誤訊息都寫入 output這個檔案。

$ GETDATA > output 2> &1

也可以這樣寫

$ GETDATA &> output

如果不想要輸出,可以將輸出導向 /dev/null 這個特殊檔案。

/dev/null 會丟棄一切寫入其中的資料(但報告寫入操作成功),讀取它則會立即得到一個EOF。ˋ

$ GETDATA > /dev/null

如果想要同時檢視輸入,又想要將它輸出到檔案中,可以使用 tee 指令。 下列指令就是同時在螢幕顯示又將輸出存在 output。

$ GETDATA | tee output
  • tee -a 的選項,可以將輸出內容附加在指定檔案後面,而不會直接覆蓋掉。
  • | 字元是所謂的管線 ( pipe )。能夠將某一命令或指令稿的輸出拿來當成別的程序的輸入。

不過如果只使用 > 的話,檔案不是新建就是覆蓋,如果想要保存原有的資料,須改用 >> 。

$ GETDATA >> output

背景執行

若要在背景執行,可以在指令最後面加上 &

$ GETDATA &> output &
  • 如果要確認目前在背景執行的作業,可以使用 jobs 指令。
  • 若要將程序拉回來,可以適用 fg 指令。
  • 若程式在前端執行, 可以透過 Ctrl-Z 將程式暫停,然後透過 bg 將其移到背景執行。

簡單整理

  • Ctrl-z  , 強制中斷,但任務並沒有結束,在進程中顯示掛起狀態。(掛起是指在作業系統行程管理將前台的行程暫停(suspend)並轉入後台的動作)
  • Ctrl-c  , 強制中斷程序的執行。
  • Ctrl-d  ,表示 EOF 。
  • jobs ,查看背景執行狀態。
  • fg , 將背景執行的程序拉到前端,需要在指令後面加上 %jobnumber ( 執行的序號 )
  • bg ,   將後端暫停的任務,繼續執行 ;若後端有多個任務,可以透過%jobnumber 調用。
  • Ctrl-s Suspend output
  • Ctrl-q Resume output
  • Ctrl-o Discard output
  • Ctrl-l Clear screen

留下一個回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *