bash – 輸入與輸入
4 12 月, 2021
/
先介紹一下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