環(huán)境變量與文件查找
環(huán)境變量
變量 :
計算機(jī)中用于記錄一個值(不一定是數(shù)值,也可以是字符或字符串)的符號薇溃,而這些符號將用于不同的運(yùn)算處理中章喉。通常變量與值是一對一的關(guān)系,可以通過表達(dá)式讀取它的值并賦值給其它變量伴郁,也可以直接指定數(shù)值賦值給任意變量耿战。
變量的作用域即變量的有效范圍(比如一個函數(shù)中、一個源文件中或者全局范圍)焊傅,在該范圍內(nèi)只能有一個同名變量剂陡。一旦離開則該變量無效,如同不存在這個變量一般狐胎。
使用 declare 命令創(chuàng)建一個變量名為 tmp 的變量:
使用 = 號賦值運(yùn)算符鸭栖,將變量 tmp 賦值為 shiyanlou:
讀取變量的值,使用 echo 命令和 $ 符號($ 符號用于表示引用一個變量的值)
并不是任何形式的變量名都是可用的握巢,變量名只能是英文字母晕鹊、數(shù)字或者下劃線,且不能以數(shù)字作為開頭暴浦。
環(huán)境變量
通常會涉及到的變量類型有三種:
當(dāng)前 Shell 進(jìn)程私有用戶自定義變量溅话,如上面我們創(chuàng)建的 tmp 變量,只在當(dāng)前 Shell 中有效肉渴。
Shell 本身內(nèi)建的變量公荧。
從自定義變量導(dǎo)出的環(huán)境變量。
命 令 說 明
set 顯示當(dāng)前 Shell 所有變量同规,包括其內(nèi)建環(huán)境變量(與 Shell 外觀等相關(guān))循狰,用戶自定義變量及導(dǎo)出的環(huán)境變量。
env 顯示與當(dāng)前用戶相關(guān)的環(huán)境變量券勺,還可以讓命令在指定環(huán)境中運(yùn)行绪钥。
export 顯示從 Shell 中導(dǎo)出成環(huán)境變量的變量,也能通過它將自定義變量導(dǎo)出為環(huán)境變量关炼。
使用 vimdiff 工具比較一下它們之間的差別:
使用 vimdiff 工具比較導(dǎo)出的幾個文件的內(nèi)容:
先在 Shell 中設(shè)置一個變量 temp=shiyanlou程腹,然后再新創(chuàng)建一個子 Shell 查看 temp 變量的值:
為了與普通變量區(qū)分,通常我們習(xí)慣將環(huán)境變量名設(shè)為大寫儒拂。
永久生效
按變量的生存周期來劃分寸潦,Linux 變量可分為兩類:
永久的:需要修改配置文件色鸳,變量永久生效;
臨時的:使用 export 命令行聲明即可见转,變量在關(guān)閉 shell 時失效命雀。
profile 只對當(dāng)前用戶永久生效。而寫在 /etc/profile 里面的是對所有用戶永久生效斩箫,所以如果想要添加一個永久生效的環(huán)境變量吏砂,只需要打開 /etc/profile,在最后加上你想添加的環(huán)境變量.
命令的查找路徑與順序
查看 PATH 環(huán)境變量的內(nèi)容:
練習(xí)創(chuàng)建一個最簡單的可執(zhí)行 Shell 腳本和一個使用 C 語言創(chuàng)建的“ hello world ”程序:
創(chuàng)建一個 C 語言“ hello world ”程序:
在 shiyanlou 家目錄創(chuàng)建一個 mybin 目錄乘客,并將上述 hello_shell.sh 和 hello_world 文件移動到其中,
在 mybin 目錄中分別運(yùn)行你剛剛創(chuàng)建的兩個程序:
添加自定義路徑到“ PATH ”環(huán)境變量
PATH 里面的路徑是以 : 作為分割符的
這里一定要使用絕對路徑狐血。
在每個用戶的 home 目錄中有一個 Shell 每次啟動時會默認(rèn)執(zhí)行一個配置腳本,以初始化環(huán)境易核,包括添加一些用戶自定義環(huán)境變量等等匈织。zsh 的配置文件是 .zshrc,相應(yīng) Bash 的配置文件為 .bashrc 耸成。
直接添加內(nèi)容到 .zshrc 中:
上述命令中 >> 表示將標(biāo)準(zhǔn)輸出以追加的方式重定向到一個文件中报亩,注意前面用到的 > 是以覆蓋的方式重定向到一個文件中,使用的時候一定要注意分辨井氢。
修改和刪除已有變量
變量修改
變量的修改有以下幾種方式:
變量設(shè)置方式 說明
${變量名#匹配字串} 從頭向后開始匹配,刪除符合匹配字串的最短數(shù)據(jù)
${變量名##匹配字串} 從頭向后開始匹配岳链,刪除符合匹配字串的最長數(shù)據(jù)
${變量名%匹配字串} 從尾向前開始匹配花竞,刪除符合匹配字串的最短數(shù)據(jù)
${變量名%%匹配字串} 從尾向前開始匹配,刪除符合匹配字串的最長數(shù)據(jù)
${變量名/舊的字串/新的字串} 將符合舊字串的第一個字串替換為新的字串
${變量名//舊的字串/新的字串} 將符合舊字串的全部字串替換為新的字串
修改添加到 PATH 的環(huán)境變量:
使用 unset 命令刪除一個環(huán)境變量:
如何讓環(huán)境變量立即生效
在 Shell 中修改了一個配置腳本文件之后,使用 source 命令來讓其立即生效:
source 命令還有一個別名就是 .掸哑,注意與表示當(dāng)前路徑的那個點(diǎn)區(qū)分開约急,雖然形式一樣,但作用和使用方式一樣苗分,上面的命令如果替換成 . 的方式就該是:
注意第一個點(diǎn)后面有一個空格厌蔽,而且后面的文件必須指定完整的絕對或相對路徑名,source 則不需要摔癣。
搜索文件
whereis 簡單快速
whereis 只能搜索二進(jìn)制文件(-b)奴饮,man 幫助文件(-m)和源代碼文件(-s)。
locate 快而全
通過“ /var/lib/mlocate/mlocate.db ”數(shù)據(jù)庫查找
它可以用來查找指定目錄下的不同文件類型
它不只是在 /etc 目錄下查找择浊,還會自動遞歸子目錄進(jìn)行查找戴卜。
查找 /usr/share/ 下所有 jpg 文件:
注意要添加 * 號前面的反斜杠轉(zhuǎn)義,否則會無法找到琢岩。
如果想只統(tǒng)計數(shù)目可以加上 -c 參數(shù)投剥,-i 參數(shù)可以忽略大小寫進(jìn)行查找,whereis 的 -b担孔、-m江锨、-s 同樣可以使用吃警。
which 小而精
使用 which 來確定是否安裝了某個指定的軟件
find 精而細(xì)
不但可以通過文件類型、文件名進(jìn)行查找而且可以根據(jù)文件的屬性(如文件的時間戳啄育,文件的權(quán)限等)進(jìn)行搜索汤徽。
find 命令最常見的格式,千萬記住 find 的第一個參數(shù)是要搜索的地方
去 /etc/ 目錄下面 灸撰,搜索名字叫做 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 目錄中,當(dāng)天(24 小時之內(nèi))有改動的文件:
列出用戶家目錄下比 Code 文件夾新的文件: