基本概念
Linux一切皆是文件,即使是設備,在系統中也會被映射一個文件。鍵盤和顯示器就是默認的標準輸入輸出指向的設備文件。系統中所有對文件的操作都是通過文件描述符來間接實現的,默認有三個描述符:0、1、2,分別對應標準輸入、標準輸出、標準錯誤。通過文件描述符訪問文件是通過以下三種數據結構相互關聯實現的。
1.每個進程維護一張自己的文件描述符表。而後兩張是系統級,全局只有一張。
2.從左到右是多對一的關係。只有第三張表,記錄的條數與系統中文件個數是完全對應的。
3.不同進程對同一個文件訪問的模式和偏移量等屬性大部分時候不相同,所以同一個文件被多次打開時,第二張表中會存在多條記錄對應同一個文件。
相關操作
重定向
-
重定向到文件中
輸出重定向:
a. 覆蓋:cmd n> file
b. 追加:cmd n>> file
c. 標準錯誤與標準輸出同時重定向:cmd &> file輸入重定向:
a. 普通重定向:cmd < file
b. here documents:
cmd << delimiter
…
delimiter -
重定向到另一個文件描述符中
n的輸出重定向到m中:cmd n>&m -
exec分配文件描述符
a. 以讀寫的方式打開文件,並分配文件描述符: exec n<> file (exec n< file / exec n> file)
b. 關閉文件描述符:exec n>&-
c. 創建文件描述符的副本:exec n>&m
eg.標準錯誤重定向到其他文件,最後再恢復成屏幕
exec 99>&2
exec 2> errlog
ls -lw
exec 2>&99
exec 99>&-