一燥狰、環(huán)境變量
1. 變量所謂變量就是計算機中用于記錄一個值(不一定是數(shù)值叽赊,也可以是字符或字符串)的符號匣椰,而這些符號將用于不同的運算處理中板惑。通常變量與值是一對一的關(guān)系橄镜,可以通過表達式讀取它的值并賦值給其它變量,也可以直接指定數(shù)值賦值給任意變量洒放。變量的作用域即變量的有效范圍(比如一個函數(shù)中蛉鹿、一個源文件中或者全局范圍)滨砍,在該范圍內(nèi)只能有一個同名變量往湿。一旦離開則該變量無效,如同不存在這個變量一般惋戏。
使用 declare 命令創(chuàng)建一個變量名為 tmp 的變量:$ declare tmp其實也可以不用 declare 預(yù)聲明一個變量领追,直接即用即創(chuàng)建$ tmp=shiyanlou讀取變量的值,使用 echo 命令和 $ 符號$ echo $tmp注意:并不是任何形式的變量名都是可用的响逢,變量名只能是英文字母绒窑、數(shù)字或者下劃線,且不能以數(shù)字作為開頭舔亭。
2. 環(huán)境變量環(huán)境變量的作用域比自定義變量的要大些膨,如 Shell 的環(huán)境變量作用于自身和它的子進程蟀俊。在所有的 UNIX 和類 UNIX 系統(tǒng)中,每個進程都有其各自的環(huán)境變量設(shè)置订雾,且默認情況下肢预,當一個進程被創(chuàng)建時,處理創(chuàng)建過程中明確指定的話洼哎,它將繼承其父進程的絕大部分環(huán)境設(shè)置烫映。Shell 程序也作為一個進程運行在操作系統(tǒng)之上,而我們在 Shell 中運行的大部分命令都將以 Shell 的子進程的方式運行噩峦。通常我們會涉及到的變量類型有三種:當前 Shell 進程私有用戶自定義變量锭沟,如上面我們創(chuàng)建的 tmp 變量,只在當前 Shell 中有效识补。Shell 本身內(nèi)建的變量族淮。從自定義變量導出的環(huán)境變量。
也有三個與上述三種環(huán)境變量相關(guān)的命令:set凭涂,env瞧筛,export。這三個命令很相似导盅,都是用于打印環(huán)境變量信息较幌,區(qū)別在于涉及的變量范圍不同。命 令 說 明set 顯示當前 Shell 所有變量白翻,包括其內(nèi)建環(huán)境變量(與 Shell 外觀等相關(guān))乍炉,用戶自定義變量及導出的環(huán)境變量。env 顯示與當前用戶相關(guān)的環(huán)境變量滤馍,還可以讓命令在指定環(huán)境中運行岛琼。export 顯示從 Shell 中導出成環(huán)境變量的變量,也能通過它將自定義變量導出為環(huán)境變量巢株。關(guān)于哪些變量是環(huán)境變量槐瑞,可以簡單地理解成在當前進程的子進程有效則為環(huán)境變量,否則不是(有些人也將所有變量統(tǒng)稱為環(huán)境變量阁苞,只是以全局環(huán)境變量和局部環(huán)境變量進行區(qū)分困檩,我們只要理解它們的實質(zhì)區(qū)別即可)。
注意:為了與普通變量區(qū)分那槽,通常我們習慣將環(huán)境變量名設(shè)為大寫悼沿。
按變量的生存周期來劃分,Linux 變量可分為兩類:
永久的:需要修改配置文件骚灸,變量永久生效糟趾;
臨時的:使用 export 命令行聲明即可,變量在關(guān)閉 shell 時失效。這里介紹兩個重要文件 /etc/bashrc 和 /etc/profile 义郑,它們分別存放的是 shell 變量和環(huán)境變量蝶柿。還有要注意區(qū)別的是每個用戶目錄下的一個隱藏文件:.profile 可以用 ls -a 查看cd /home/shiyanlouls -a這個 .profile 只對當前用戶永久生效。而寫在 /etc/profile 里面的是對所有用戶永久生效非驮,所以如果想要添加一個永久生效的環(huán)境變量只锭,只需要打開 /etc/profile,在最后加上添加的環(huán)境變量就好啦院尔。
3. 命令的查找路徑與順序查看 PATH 環(huán)境變量的內(nèi)容:$ echo $PATH當我們在 Shell 中執(zhí)行一個命令時蜻展,系統(tǒng)就會按照 PATH 中設(shè)定的路徑按照順序依次到目錄中去查找,如果存在同名的命令邀摆,則執(zhí)行先找到的那個纵顾。
4. 添加自定義路徑到“ PATH ”環(huán)境變量在前面我們應(yīng)該注意到 PATH 里面的路徑是以 : 作為分割符的,所以我們可以這樣添加自定義路徑:$ PATH=$PATH:/home/shiyanlou/mybin注意這里一定要使用絕對路徑栋盹。在每個用戶的 home 目錄中有一個 Shell 每次啟動時會默認執(zhí)行一個配置腳本施逾,以初始化環(huán)境,包括添加一些用戶自定義環(huán)境變量等等例获。zsh 的配置文件是 .zshrc汉额,相應(yīng) Bash 的配置文件為 .bashrc 。它們在 etc 下還都有一個或多個全局的配置文件榨汤,不過我們一般只修改用戶目錄下的配置文件蠕搜。我們可以簡單地使用下面命令直接添加內(nèi)容到 .zshrc 中:$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc上述命令中 >> 表示將標準輸出以追加的方式重定向到一個文件中,注意前面用到的 > 是以覆蓋的方式重定向到一個文件中收壕,使用的時候一定要注意分辨妓灌。在指定文件不存在的情況下都會創(chuàng)建新的文件。
5. 修改和刪除已有變量變量修改變量的修改有以下幾種方式:
變量設(shè)置方式 說明${變量名#匹配字串} 從頭向后開始匹配蜜宪,刪除符合匹配字串的最短數(shù)據(jù)${變量名##匹配字串} 從頭向后開始匹配虫埂,刪除符合匹配字串的最長數(shù)據(jù)${變量名%匹配字串} 從尾向前開始匹配,刪除符合匹配字串的最短數(shù)據(jù)${變量名%%匹配字串} 從尾向前開始匹配圃验,刪除符合匹配字串的最長數(shù)據(jù)${變量名/舊的字串/新的字串} 將符合舊字串的第一個字串替換為新的字串${變量名//舊的字串/新的字串} 將符合舊字串的全部字串替換為新的字串比如要修改我們前面添加到 PATH 的環(huán)境變量掉伏。為了避免操作失誤導致命令找不到,我們先將 PATH 賦值給一個新的自定義變量 path:$ path=$PATH$ echo $path$ path=${path%/home/shiyanlou/mybin}# 或使用通配符,*表示任意多個任意字符$ path=${path%*/mybin}變量刪除可以使用 unset 命令刪除一個環(huán)境變量:$ unset temp6. 如何讓環(huán)境變量立即生效$ source .zshrcsource 命令還有一個別名就是 .澳窑,注意與表示當前路徑的那個點區(qū)分開斧散,雖然形式一樣,但作用和使用方式一樣照捡,上面的命令如果替換成 . 的方式就該是:$ . ./.zshrc注意第一個點后面有一個空格颅湘,而且后面的文件必須指定完整的絕對或相對路徑名,source 則不需要栗精。
二、搜索文件與搜索相關(guān)的命令常用的有 whereis,which悲立,find 和 locate 鹿寨。whereis 簡單快速$whereis who你會看到它找到了三個路徑,兩個可執(zhí)行文件路徑和一個 man 在線幫助文件所在路徑薪夕,這個搜索很快脚草,因為它并沒有從硬盤中依次查找,而是直接從數(shù)據(jù)庫中查詢原献。whereis 只能搜索二進制文件(-b)馏慨,man 幫助文件(-m)和源代碼文件(-s)。如果想要獲得更全面的搜索結(jié)果可以使用 locate 命令姑隅。locate 快而全通過“ /var/lib/mlocate/mlocate.db ”數(shù)據(jù)庫查找写隶,不過這個數(shù)據(jù)庫也不是實時更新的,系統(tǒng)會使用定時任務(wù)每天自動執(zhí)行 updatedb 命令更新一次讲仰,所以有時候你剛添加的文件慕趴,它可能會找不到,需要手動執(zhí)行一次 updatedb 命令(在我們的環(huán)境中必須先執(zhí)行一次該命令)鄙陡。它可以用來查找指定目錄下的不同文件類型冕房,如查找 /etc 下所有以 sh 開頭的文件:$ locate /etc/sh注意,它不只是在 /etc 目錄下查找趁矾,還會自動遞歸子目錄進行查找耙册。查找 /usr/share/ 下所有 jpg 文件:$ locate /usr/share/\*.jpg注意要添加 * 號前面的反斜杠轉(zhuǎn)義,否則會無法找到毫捣。如果想只統(tǒng)計數(shù)目可以加上 -c 參數(shù)觅玻,-i 參數(shù)可以忽略大小寫進行查找,whereis 的 -b培漏、-m溪厘、-s 同樣可以使用。which 小而精which 本身是 Shell 內(nèi)建的一個命令牌柄,我們通常使用 which 來確定是否安裝了某個指定的軟件畸悬,因為它只從 PATH 環(huán)境變量指定的路徑中去搜索命令:$ which manfind 精而細find 應(yīng)該是這幾個命令中最強大的了,它不但可以通過文件類型珊佣、文件名進行查找而且可以根據(jù)文件的屬性(如文件的時間戳蹋宦,文件的權(quán)限等)進行搜索。這條命令表示去 /etc/ 目錄下面 咒锻,搜索名字叫做 interfaces 的文件或者目錄冷冗。這是 find 命令最常見的格式,千萬記住 find 的第一個參數(shù)是要搜索的地方:$ sudo find /etc/ -name interfaces注意 find 命令的路徑是作為第一個參數(shù)的惑艇, 基本命令格式為 find [path] [option] [action] 蒿辙。與時間相關(guān)的命令參數(shù):參數(shù) 說明-atime 最后訪問時間-ctime 最后修改文件內(nèi)容的時間-mtime 最后修改文件屬性的時間下面以 -mtime 參數(shù)舉例:-mtime n:n 為數(shù)字拇泛,表示為在 n 天之前的“一天之內(nèi)”修改過的文件-mtime +n:列出在 n 天之前(不包含 n 天本身)被修改過的文件-mtime -n:列出在 n 天之內(nèi)(包含 n 天本身)被修改過的文件newer file:file 為一個已存在的文件,列出比 file 還要新的文件名列出 home 目錄中思灌,當天(24 小時之內(nèi))有改動的文件:$ find ~ -mtime 0列出用戶家目錄下比 Code 文件夾新的文件:$ find ~ -newer /home/shiyanlou/Code
作業(yè)
![實驗樓](https://dn-simplecloud.shiyanlou.com/4336791495353274406-wm)