linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量
原標題:Linux中shell基礎、重定向、管道符、環境變量
1、什么是shell
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口(命令解釋器)。它接收用戶輸入的命令并把它送入內核去執行。起著協調用戶與系統的一致性和在用戶與系統之間進行交互的作用。
Shell在Linux系統上具有極其重要的地位
2、命令解釋過程
Shell可以執行:內部命令、應用程序、shell腳本
3、Shell的種類
常見的各種版本的shell:
Bash(Bourne Again Shell)
bash是大多數Linux系統的默認Shell。bash與bsh完全向后兼容,并且在bsh的基礎上增加和增強了很多特性。bash也包含了很多C Shell和Korn Shell中的有點。bash有很多靈活和強大的變成接口,同時又有很友好的用戶界面。
Ksh(Korn Shell)
Korn Shell(ksh)由Dave Korn所寫。它是UNIX系統上的標準Shell。在Linux環境下有一個專門為Linux系統寫的Korn Shell的擴展版本,即Public Domain Korn(pdksh)
tcsh(csh 的擴展) tcsh是C Shell的擴展。tcsh與csh完全向后兼容,但它包含了更多的使用戶感覺方便的新特性。其最大的提高是在命令行編輯和歷史瀏覽方面。
4、Linux的元字符
在Shell中有一些具有特殊意義的字符,稱為Shell 元字符(shell metacharacters)。
若不以特殊方式(使用轉義字符)指明,Shell 并不會把它們當作普通文字符使用。
5、Bash的基本功能
歷史命令(history)
命 令:history 命令可以用來顯示曾執行過的命令,也可以根據顯示的治療來重新執行需要的命令
語 法:history(選項)(參數)
選 項:n 顯示n個最近的記錄
參 數:-a 添加記錄
-r 讀取記錄,但不會添加內容記錄
-w 覆蓋原有的history 文件
-c 清除記錄
-d[n] 刪除指定n條記錄
-n 讀取指定文件
-r 讀取文件但不記錄
-w 覆蓋原有文件
使用上下箭頭---調用以前的歷史命令
使用 "!n" 的方式---重復執行第n條歷史命令
使用 "!!" 的方式---重復執行上一條命令
使用 "!字符串" 的方式---重復執行最后一條以該字符串開頭的命令
使用 "!$" 的方式---重復執行上一條命令的最后一個參數
歷史命令存放在當前用戶家目錄下的 .bash_history 隱藏文件中。
3.2、標準輸出重定向(覆蓋)
命令:echo > aa
標準輸出重定向,先清空后寫入,如果文件不存在則創建,echo后面沒有接內容,則是清空文件。
3.3、標準輸出重定向(追加)
命令:echo "但是在冬季之后迎來的是春暖花開" >> aa
標準追加輸出重定向,想配置文件末尾追加內容
3.4、禁止覆蓋
如果在工作中,我們想要在文件中追加內容時 ">>",卻不小心寫入 ">" 就執行了,那么我們的我呢見就覆蓋了,這時候就需要禁止覆蓋了,命令:set -C
強制覆蓋 ">|"
禁止覆蓋命令:set -C ,解除禁制覆蓋命令:set +C
3.5、錯誤輸出從定向
命令:ls /root /error 1>a 2>b
將標準輸出和標準錯誤輸出從定向到不同文件
3.6、正確和錯誤都輸入到相同位置
命令:find /root -name "*.txt" &>ab
將標準輸出和標準錯誤輸出重定向到同一個文件,混合輸出
命令:cat a aa > ab
合并兩個文件內容至一個文件
3.7、重定向到空設備/dev/null
命令:ls /root /error >ab 2>/dev/null
空設備,即將產生的輸出丟掉
如果 /dev/null 設備被刪除
命令:rm -f /dev/null //刪除/dev/null設備
1、手動創建
命令:mkmod -m 666 /dev/null c 1 3
2、重啟自動創建
7、進程管道技術
管道操作符號 "|" 連接左右兩個命令,將右側的命令的標準輸出,交給右側命令的標準輸入
格式:cmd1 | cmd2 [...|cmdn]
將/etc/passwd 中的用戶按UID大小排序
命令:sort -t ":" -k3 -n /etc/passwd -r | head
命令:ip a|grep 'inet ' | awk '{print $2}' | awk -F "/" '{print $1}'
查看本地IP,打印以 "inet "開頭的行,以空格為分隔符截取第二段(默認以空格為分隔符),再以 "/" 為分隔符截取第一段。
7.1、tee 管道技術
功能:tee 指令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件或顯示。
命令:ip a|grep 'inet '|tee ip.txt | awk '{print $2}' | awk -F "/" '{print $1}'
將前一個程序產生的結果保存在指定文件中,并送至下一個程序。
7.2、參數傳遞 xargs
功能:將參數列表轉換成小塊分段傳遞給其他命令,讀入stdin的數據轉換為參數添加至命令行中,讓一些不支持管道的命令可以使用管道。
有些命令不支持管道技術,但是可以通過xargs來實現
8、shell 環境變量
1)環境變量定義shell的運行環境,保證shell 命令的正確執行;
2)Shell 用環境變量類確定查找路線、注冊目錄、終端類型、終端名稱、用戶名等;
3)所有環境變量都是全局變量(既可以傳遞給Shell 的子進程)。
8.1、常見的Shell 環境變量
變量名含義HOME用戶主目錄LOGNAME登錄名USER用戶名、與登錄名相同PWD當前目錄/工作目錄名MAIL用戶的郵箱路徑名HOSTNAME計算機的主機名INPUTRC默認的鍵盤映像SHELL用戶所使用的shell的路徑名LANG默認語言HISTSIZEhistory所能記住的命令的最多個數PATHshell查找用戶輸入命令的路徑(目錄列表)PS1、PS2shell一級、二級命令提示符
8.2、查看環境變量
Linux中set、env和 export 都可以查看環境變量
1)set 命令顯示當前shell 的變量,包括當前用戶的變量,set 主要用來顯示shell 的參數和選項
2)env 命令顯示當前用戶的變量,env 用來再構建的幻劍中運行命令
3)export 命令顯示當前導出成用戶變量的shell 變量
每個shell 都有自己特有的變量(set顯示的變量),這個和用戶變量不同,當前用戶變量和你用什么shell 無關,不管你用神那么shell 都在,比如HOME、SHELL等這些變量;但是shell 自己的變量不同,不如BASH_ARGC、BASH等這些變量只有set 才會顯示,時bash特有的;export 不加參數的時候,顯示哪些變量被導出了用戶變量,因為一個shell自己的變量可以通過 export "導出"變成一個用戶變量。
8.3、Linux下環境變量的設置
8.3.1、新建 /root/test/aa.sh 文件,并賦于可執行權限
自定義命令腳本,只需要把腳本目錄添加到環境變量中,就可以在任意目錄下執行該腳本。
8.3.2、定義系統提示符的變量
PS1:定義系統提示符的變量
\d:顯示日期,格式為“星期 月 日”
\h:顯示簡寫主機名。默認主機名“localhost”
\t:顯示24小時制時間,格式為"HH:MM:SS"
\T:顯示12小時制時間,格式為"HH:MM:SS"
\A:顯示12小時制時間,格式為"HH:MM"
\u:顯示當前用戶名
\w:顯示當前所在目錄的完整名稱
\W:顯示當前所在目錄的最后一個目錄
\#:執行的第幾個命令
\$:提示符。如果時root用戶會顯示為"#",如果時普通用戶顯示"$"
如:PS1='[\u@\h \w]\$' //將W改成小寫
8.3.4、預定義變量
預定義變量作用$?
最后一次執行的命令的返回狀態。如果這個變量的值為0,
證明上一個命令正確執行;如果這個變量的值為非0(具體時那個數,
由命令自己來決定),則證明上一個命令執行不正確了。
$$當前進程的進程號(PID)$!后臺運行的最后一個進程的進程號(PID)
8.3.5、用戶工作環境
用戶登錄系統時,shell 為用戶自動定義唯一的工作環境并對該環境進行維護直至用戶注銷。該環境將定義如身份、工作場所和正在運行的進程的特性。這些特性由指定的環境變量值定義。
用戶工作環境分為登錄環境和非登錄環境:1、登錄環境是指用戶登錄系統時的工作環境,此時的shell 對登錄環境而言時主shell;2、非登錄環境是指用戶在調用子shell 時所使用的用戶環境。
設置用戶工作環境
對所有用戶驚醒設置:
/etc/profile
/etc/bashrc
只對當前用戶進行設置
~/.bash_profile
~/.bashrc
通常,個人bash 環境設置都定義在~/.bashrc文件里。
轉載自:https://www.cnblogs.com/qiuyu666/p/11943852.html返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的linux+管道+分段,Linux中shell基础、重定向、管道符、环境变量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 15-CSS基础-浮动流
- 下一篇: linux单次任务调度,go任务调度2(