2021-06-19
關鍵字:
1、shell中的文件描述符
與Linux文件系統一樣,shell中也有文件描述符的概念,且每一個shell進程中都默認有三個已打開的文件描述符。它們分別代表“標準輸入”、“標準輸出”與“錯誤輸出”,對應的文件描述符號分別爲 0、1、2。描述符號3及以後的正整數值可自由使用。
從一個shell中以新進程的形式啓動的子shell會繼承父shell中的三個默認文件描述符。
shell中文件描述符的使用通常是在需要重定向流的走向時。重定向語法格式如下所示:
#output [n]> #input [n]<
n代表非負整數值。n是可選的,如果不填,則輸出時代表標準輸出(即描述符爲1),輸入時代表標準輸入(即描述符爲0),以下是一些示例語句:
#將命令執行結果保存到文件 ls -l /etc > ls.record #將命令執行結果輸出到屏幕,錯誤信息保存到文件 ls -l /etc 2> ls.error #將命令執行結果及錯誤信息均保存到文件 ls -l /etc > ls.record 2> ls.error #將標準輸出和錯誤輸出同時重定向,與上一條命令等價 ls -l /etc &> ls.output
#追加內容到已存在文件
ls -l /etc 1>> ls.record #從指定文件中查找內容 grep name 0< names.txt #與上一條命令等價 grep name < names.txt
如果想快速創建一個空文件,則可以使用以下命令:
> new.file :> new.file
2、將錯誤輸出重定向到標準輸出
語法如下:
ls -l /etc > ls.record 2>&1
3、半永久式重新分配文件描述符
使用exec命令可以在本shell登錄中永久改變描述符流向,具體如下表所示:
重定向方式 | 含義 |
exec 2> file | 將所有命令的錯誤輸出重定向到文件file |
exec n< file | 以只讀的方式打開名稱爲file的文件,並使用文件描述符n,n是大於3的整數。 |
exec 2> file | 以寫的方式打開名稱爲file的文件,並使用文件描述符n。 |
exec n<>file | 以讀寫的方式打開文件file,並使用文件描述符n。 |
exec n>&- | 關閉文件描述符n |
exec n>&m | 使得文件描述符n成爲文件描述符m的副本,即將文件描述符m複製到n |
4、根據進程名查詢運行狀態及進程號
使用 pidof 命令可以實現此目的。具體語法如下:
pidof [option] program
option可以不填。一般的用法是pidof 後加要查詢的進程名稱,查詢成功返回0值且打印相應進程號,多個進程號以製表符隔開。若指定進程未在運行則返回1值。
5、查詢當前shell的層級
在shell中可以嵌套登錄到另一個shell,通過以下命令可以查詢到當前的shell登錄級數:
echo $SHLVL
6、臨時開啓子shell執行命令
可以使用圓括號來實現,圓括號中的所有命令均會在子shell中以新進程的身份執行。具體語法如下所示:
(command1;command2;command3...)
(
command1
command2
...
)
7、bash shell的常用內部命令
如下表:
內部命令 | 含義 |
. | 加載庫腳本文件進本shell中執行。簡單理解成是讀取shell腳本中的內容進來本shell中執行即可。 |
alias | 設置命令別名。函數是將一組命令打包設置一個別名,alias則是針對一個命令打包設置別名。 |
bg | 將作業置於後臺運行。 |
cd | 改變當前工作目錄。 |
echo | 打印指定的文本。 |
eval | 將參數作爲shell命令來執行。用引號包括住命令及其參數。 |
exec | 將指定的程序取代shell或者永久改變當前shell的流方向。 |
exit | 退出shell |
export | 將變量聲明爲環境變量。 |
fc | 與命令歷史一起運行。 |
fg | 將作業置於前臺運行。 |
getopts | 處理參數中的選項內容。 |
history | 顯示命令歷史 |
jobs | 顯示在後臺運行的作業。 |
kill | 向進程發送信號。 |
logout | 從shell中註銷。 |
pwd | 顯示當前的工作目錄 |
set | 設置shell環境變量。 |
shift | 變換命令行的參數,將參數往左移一位,最左邊的參數將被刪除。 |
8、bash shell中的常用保留字段
如下表:
保留字段 | 含義 |
! | |
: |
|
break | |
case | |
continue | |
declare | |
do | |
done | |
elif | |
else | |
esac | |
for | |
let | |
local | |
read | |
return | |
test | |
then | |
until | |
wait | 等待後臺作業完成。 |
while |