Shell 特殊檔案和標準輸入輸出

2021-10-08 22:20:22 字數 2829 閱讀 1354

/dev/null

當被用作重定向輸出時,程式的輸出被直接丟棄。該檔案用在哪些不關心程式輸出的地方。

當被用作重定向輸入時,輸入則是檔案結束。

/dev/tty

當被用作重定向時,表示重定向到終端。

基本命令查詢

shell 會沿著$path 來尋找命令。$path 是乙個以冒號分割的目錄列表,你可以在列表所指定的目錄下找到所要執行的命令。命令可能是 shell 指令碼,也可能是編譯後的可執行檔案,從使用者角度來看,二者並無不同。

預設路徑至少包含/bin 和/usr/bin,或許還包含其他的。

名稱為 bin 的目錄用來儲存可執行檔案。

如果要編寫自己的指令碼,最好準備乙個自己的 bin 目錄來存放他們,並且讓 shell 能夠自動找到他們。

$cd  

$mkdir bin

$mv nusers bin

$path+$path:$home/bin //將個人的 bin 目錄附加到 path(暫時生效,系統重啟後失效)

nusers

要想永久生效,在/etc/profile 檔案中把你的 bin 目錄加入到$path,而每次登陸時 shell 都將讀取.profile 檔案。

path=$path:$home/bin

$path 裡的空專案表示當前專案。空專案位於路徑中間時,可以用兩個連續的冒號來表示,如果將冒號直接置於最前端或尾端,分別表示查詢的時候最先查詢或最後查詢當前目錄。

$path=:/bin:/usr/bin            先找當前目錄  

$path=/bin::/usr/bin 當前目錄居中

$path=/bin:/usr/bin: 最後找當前目錄

<,>,>>以及| 是基本的 i/o 重定向符

重定向的使用規律

>箭頭代表重定向

&代表引用

2表示stderr標準錯誤輸出

0表示stdin標準輸入

1表示stdout標準輸出

那你這個>&2的含義:把前面的列印訊息重定向到標準錯誤裡面。(錯誤資訊才輸出)

shell會自動為我們開啟和關閉0、1、2這三個檔案描述符,我們不需要顯式地開啟或關閉它們。標準輸入是命令的輸入,預設指向鍵盤;標準輸出是命令的輸出,預設指向螢幕;標準錯誤是命令錯誤資訊的輸出,預設指向螢幕。

"某個命令" 1>/dev/null 2>&1

執行這個命令,然後這個命令執行過程中的所有標準輸出都重定向到/dev/null,空裝置的意思就是標準輸出不列印,

2>&1 就是標準錯誤重定向到標準輸出中。而標準輸出前面已經說了不列印。那麼整體就是標準輸出,標準錯誤都不列印。

如果沒有前提「而標準輸出前面已經說了不列印」,2>&1  意思就很明了了,就是講執行linux命令時的錯誤資訊也輸出到螢幕上。

>&2 使用的比較少,我們很少把其他資訊重定向到標準錯誤中。

這裡使用(echo 1; echo1 1)命令測試

$ (echo 1; echo1 1)

1bash: echo1: command not found

# 可以看到標準輸出進了1.log,標準輸入0和標準輸出1可以省略。(當其出現重定向符號左側時)

$ (echo 1; echo1 1)>1.log

bash: echo1: command not found

$ cat 1.log

1# 可以看到標準輸出進入了1.log,標準錯誤進入了2.log

$ (echo 1; echo1 1) 1>1.log 2>2.log

$ cat 1.log

1$ cat 2.log

bash: echo1: command not found

# 表示把錯誤出定向到標準輸出(此時標準輸出為終端,所以輸出到終端), 標準輸出定位到檔案( >1.log其實是1>1.log),所以看到錯誤資訊輸出到終端,而正確資訊儲存到了1.log

$ (echo 1; echo1 1) 2>&1 >1.log

bash: echo1: command not found

$ cat 1.log

1# 把上面的位置調換下,先把標準輸出定位到1.log

# 把標準輸出定位到檔案,錯誤輸出到標準輸出(此時標準輸出指向檔案,所以輸出到檔案)

$ (echo 1; echo1 1) >1.log 2>&1

$ cat 1.log

1bash: echo1: command not found

# /dev/null 代表空裝置檔案,我們經常把輸出定位到/dev/null這樣可以避免程式不必要的列印。

# 這樣把標準輸出定位到空,再把標準錯誤定位到標準輸出。

$ (echo 1; echo1 1) >/dev/null 2>&1

$

linux中的標準輸出和輸入

linux 特殊檔案和程序

suid的程式被一般使用者執行後,執行者將具有程式擁有者的許可權.查詢當前目錄的使用者 fuser uv 查詢當前目錄所有程序 fuser muv 假如umount不成功,可以用fuser mki刪除占用的程序 fuser mki home 安裝 yuminstall lsof 列出root使用者使...

SHELL程式設計 利用CSIDL開啟特殊資料夾

csidl描述及使用說明 csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如 我的文件 站 inernet cache資料夾 就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,...

SHELL程式設計 利用CSIDL開啟特殊資料夾

csidl描述及使用說明 csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如 我的文件 站 inernet cache資料夾 就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,...