管道符、重定向与环境变量
輸入輸出重定向
? ? 輸入重定向:將文件內(nèi)容導(dǎo)入到命令中;輸出重定向:將命令執(zhí)行后顯示到屏幕上的內(nèi)容導(dǎo)入到文件中,不在屏幕中顯示。共分為:標(biāo)準(zhǔn)輸入重定向(文件描述符為0)、標(biāo)準(zhǔn)覆蓋輸出(1)、標(biāo)準(zhǔn)追加輸出(1)、錯誤覆蓋輸出(2)、錯誤追加輸出(2)。0,1可省略不寫,2必須要寫。 ?
? ? 標(biāo)準(zhǔn)輸入:wc -l < zsx.txt ?等效于 cat zsx.txt | wc -l ? ?也可以直接: wc -l zsx.txt? ? ?命令 << 截止符 直到輸入內(nèi)容為截止符(再確認(rèn))為止,將輸入內(nèi)容作為命令的輸入 ?如 wc -l << over
? ? 標(biāo)準(zhǔn)輸出: 命令 > 文件 覆蓋,即清空原文件內(nèi)容 ? 命令 >> 文件 ?追加 ? 如果命令執(zhí)行后顯示的是出錯信息,如 ls -l xxx(xxx為不存在的文件),則依然會在屏幕上顯示信息,不會寫入到文件中 ??
? ? 錯誤輸出: 命令 2> 文件 覆蓋 ?命令 2>> 文件 追加 ? ?標(biāo)準(zhǔn)與錯誤信息都輸出: ?命令 >> 文件 2>&1 追加 或者 ?命令 &>> 文件 追加 ? 命令 &> 文件 覆蓋
管道命令符
? ? 命令A(yù) | 命令B 前一個命令的輸出(不會在屏幕上顯示)作為后一個命令的輸入。?
? ? grep "/sbin/nologin" /etc/passwd | wc -l? ? ? ? ? ? ? ls -l /etc | more
? ? 命令A(yù) | 命令B | 命令C ······
通配符 * ? [] {} (也叫正則表達(dá)式)
? ? *匹配零個或多個字符; ?匹配單個字符; [0-9]匹配數(shù)字0至9中的單個數(shù)字;[135]匹配1、3、5中的單個數(shù)字;[a-z] ? [abc]? ? ? ? ? ? {1,3,5}匹配匹配1、3、5中的單個數(shù)字,且沒有的數(shù)據(jù)項會報錯 ? ?ls -l? /dev/sda{1,3,5} ? ls -l? /dev/sda{12,1,23,24} ?[a-z][A-Z]匹配的 是兩個字符,第一個為小寫,第二個為大寫。
轉(zhuǎn)義字符
? ? ?\(反斜杠) :將其后面的一個變量變?yōu)閱渭兊淖址?? ''(單引號):轉(zhuǎn)義其中的所有變量為單純的字符串 ?
? ? ``(反引號):把其中的命令執(zhí)行后返回結(jié)果 ? ""(保留其中的變量屬性,不做轉(zhuǎn)義處理) ?
? ? $為變量提取符號(是一個變量) ? VALUE=5 //定義一個變量VALUE值為5 ? ? echo "the value is $VALUE" ? $ $表示顯示當(dāng)前程序的進(jìn)程號碼 ? echo "the value is $ $VALUE" ? ? 輸出為 the value is 3427VALUE ?echo"the value is \$ $VALUE" 輸出為 the value is $5? echo 'the value is $ $VALUE' 輸出為 the value is$$VALUE ? ? ?echo `uname -a` ?與 uname -a的效果一樣 也等價于: echo $(uname -a) ? ?即 `uname -a`與$(uname -a)是等效的 ? `命令`與$(命令)等效
環(huán)境變量
? ? ?Linux系統(tǒng)中的變量名都為大寫(規(guī)定),環(huán)境變量是用來定義系統(tǒng)運行環(huán)境的一些參數(shù),如:用戶家目錄、存放路徑等。可用env命令查看當(dāng)前用戶所有的環(huán)境變量。 ?不同用戶的環(huán)境變量值都不一定相同,Linux為每個用戶提供獨立的、合適的工作環(huán)境 ?HOME 用戶的家目錄 HISTSIZE 輸出的歷史命令條數(shù) HISTFILESIZE保存的歷史命令條數(shù) ? SHELL 用戶使用的SHELL解釋器名稱(/bin/bash,為一個二進(jìn)制文件) ?MALL 郵件保存路徑 RANDOM生成一個隨機(jī)數(shù)字 ? ?PS1 Bash解釋器的提示符,可以自己定義(修改其值即可) ?PATH 解釋器搜索用戶執(zhí)行命令的路徑。USER? 系統(tǒng)的當(dāng)前用戶? ?
? ? ? 在Linux系統(tǒng)中一切都是文件,命令也是文件,服務(wù)也是一種文件,而對服務(wù)程序進(jìn)行配置自然也就是編輯程序的配置文件,即在配置一個服務(wù)時就是在修改這個服務(wù)的配置文件。系統(tǒng)中的硬件都會以硬件-文件的形式進(jìn)行映射,形成設(shè)備文件存放在/dev中。命令在Linux系統(tǒng)中執(zhí)行時會發(fā)生4個步驟:判斷用戶是以絕對路徑(/bin/ls)還是相對路徑(ls)的方式輸入命令,如果是絕對路徑,則直接可以得到命令文件,進(jìn)行執(zhí)行,否則需要到PATH中去找(當(dāng)然內(nèi)部命令不需要);判斷用戶輸入的命令是否為別名命令;判斷命令是內(nèi)部命令還是外部命令,內(nèi)部命令(解釋器內(nèi)部的命令)直接執(zhí)行,外部命令則需要查找該命令的命令文件(PATH);Bash解釋器在會在環(huán)境變量PATH中的多個路徑中依次查找對應(yīng)的命令文件(若有多個相同名字的這個文件,則第一個找到就不再找了,因此黑客可能會創(chuàng)建一個跟其同名的木馬文件)。PATH中的路徑的增加和刪除都會影響到Bash解釋器對命令的查找,因為有了PATH,/bin/ls 與 ls才會有相同的效果。 修改PATH: PATH=$PATH:/root/bin 即增加一個路徑。Linux有4種命令:路徑命令(占所有命令的1%);alias別名(2%);內(nèi)部命令(1%);外部命令(96%)。
? ? 變量由變量名和變量值兩部分組成,可以輕松創(chuàng)建: ?WORKDIR=/root/work ?cd $WORKDIR ?但是這樣創(chuàng)建的變量為局部變量,即不能被其它用戶使用,可以使用export命令將其提升為全局變量。export WORKDIRsu命令和su - 命令最大的本質(zhì)區(qū)別就是:前者只是切換了身份,但Shell環(huán)境仍然是原來用戶的Shell(環(huán)境不變);而后者連用戶和Shell環(huán)境一起切換成新用戶身份了。只有切換了Shell環(huán)境才不會出現(xiàn)PATH環(huán)境變量錯誤。
?
總結(jié)
以上是生活随笔為你收集整理的管道符、重定向与环境变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重度少精症能治好的吗
- 下一篇: lol刀妹基础攻击力是多少