Linux 學(xué)習(xí)之路(六):環(huán)境變量與文件查找

Linux 學(xué)習(xí)之路(六):環(huán)境變量與文件查找

一叉橱、環(huán)境變量

  • 變量

    要解釋環(huán)境變量拜效,得先明白變量是什么创南,準(zhǔn)確的說(shuō)應(yīng)該是 Shell 變量巷屿,所謂變量就是計(jì)算機(jī)中用于記錄一個(gè)值(不一定是數(shù)值赃梧,也可以是字符或字符串)的符號(hào)滤蝠,而這些符號(hào)將用于不同的運(yùn)算處理中。通常變量與值是一對(duì)一的關(guān)系授嘀,可以通過(guò)表達(dá)式讀取它的值并賦值給其它變量物咳,也可以直接指定數(shù)值賦值給任意變量。為了便于運(yùn)算和處理蹄皱,大部分的編程語(yǔ)言會(huì)區(qū)分變量的類型所森,用于分別記錄數(shù)值囱持、字符或者字符串等等數(shù)據(jù)類型。Shell 中的變量也基本如此焕济,有不同類型(但不用專門(mén)指定類型名)纷妆,可以參與運(yùn)算,有作用域限定晴弃。

    變量的作用域即變量的有效范圍(比如一個(gè)函數(shù)中掩幢、一個(gè)源文件中或者全局范圍),在該范圍內(nèi)只能有一個(gè)同名變量上鞠。一旦離開(kāi)則該變量無(wú)效际邻,如同不存在這個(gè)變量一般。

    1. 使用 declare 命令創(chuàng)建一個(gè)變量名為 tmp 的變量:
      declare tmp
    
    1. 使用 = 號(hào)賦值運(yùn)算符芍阎,將變量 tmp 賦值為 LowoL:
      tmp=LowoL
    
    1. 讀取變量的值世曾,使用 echo 命令和 $ 符號(hào)($ 符號(hào)用于表示引用一個(gè)變量的值扬虚,初學(xué)者經(jīng)常忘記輸入):
      echo tmp
    

    注意:并不是任何形式的變量名都是可用的椎扬,變量名只能是英文字母、數(shù)字或者下劃線杯拐,且不能以數(shù)字作為開(kāi)頭岭佳。

  • 環(huán)境變量

    簡(jiǎn)單理解了變量的概念血巍,就很容易理解環(huán)境變量了。環(huán)境變量的作用域比自定義變量的要大珊随,如 Shell 的環(huán)境變量作用于自身和它的子進(jìn)程述寡。在所有的 UNIX 和類 UNIX 系統(tǒng)中,每個(gè)進(jìn)程都有其各自的環(huán)境變量設(shè)置叶洞,且默認(rèn)情況下鲫凶,當(dāng)一個(gè)進(jìn)程被創(chuàng)建時(shí),除了創(chuàng)建過(guò)程中明確指定的話衩辟,它將繼承其父進(jìn)程的絕大部分環(huán)境設(shè)置螟炫。Shell 程序也作為一個(gè)進(jìn)程運(yùn)行在操作系統(tǒng)之上,而我們?cè)?Shell 中運(yùn)行的大部分命令都將以 Shell 的子進(jìn)程的方式運(yùn)行惭婿。

    通常我們會(huì)涉及到的變量類型有三種:

    1. 當(dāng)前 Shell 進(jìn)程私有用戶自定義變量不恭,如上面我們創(chuàng)建的 tmp 變量,只在當(dāng)前 Shell 中有效财饥。
    2. Shell 本身內(nèi)建的變量换吧。
    3. 從自定義變量導(dǎo)出的環(huán)境變量。
      也有三個(gè)與上述三種環(huán)境變量相關(guān)的命令:set钥星,env沾瓦,export。這三個(gè)命令很相似,都是用于打印環(huán)境變量信息贯莺,區(qū)別在于涉及的變量范圍不同风喇。詳見(jiàn)下表:
    命 令 說(shuō) 明
    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)境變量的變量耙考,也能通過(guò)它將自定義變量導(dǎo)出為環(huán)境變量。

    你可以更直觀的使用 vimdiff 工具比較一下它們之間的差別:

      temp=LowoL
      export temp_env=LowoL
      env|sort>env.txt
      export|sort>export.txt
      set|sort>set.txt
    

    上述操作將命令輸出通過(guò)管道 | 使用 sort 命令排序潭兽,再重定向到對(duì)象文本文件中倦始。

      vimdiff env.txt export.txt set.txt
    
  • 命令的搜索路徑

    熟悉 Windows 的用戶可能知道 Windows 中的也是有這么一個(gè) PATH 環(huán)境變量。同樣 Linux 環(huán)境變量 PATH 里面就保存了 Shell 中執(zhí)行的命令的搜索路徑山卦。

    查看 PATH 環(huán)境變量的內(nèi)容:

      echo $PATH
    

    通常 PATH 環(huán)境變量中目錄下放的都是可執(zhí)行文件鞋邑,當(dāng)我們?cè)?Shell 中執(zhí)行一個(gè)命令時(shí),系統(tǒng)就會(huì)按照 PATH 中設(shè)定的路徑按照順序依次到目錄中去查找账蓉,如果存在同名的命令枚碗,則執(zhí)行先找到的那個(gè)。

  • 添加自定義路徑到 PATH 環(huán)境變量

    在前面我們應(yīng)該注意到 PATH 里面的路徑是以 : 作為分割符的剔猿,所以我們可以這樣添加自定義路徑:

      PATH=$PATH:/home/shiyanlou/mybin
    

    注意這里一定要使用絕對(duì)路徑视译。

    由于在每個(gè)用戶的 home 目錄中有一個(gè) Shell 每次啟動(dòng)時(shí)會(huì)默認(rèn)執(zhí)行一個(gè)配置腳本嬉荆,以初始化環(huán)境归敬,包括添加一些用戶自定義環(huán)境變量等等。如要啟動(dòng) Shell 時(shí)自動(dòng)添加自定義路徑到 PATH鄙早,我們需要對(duì)這些文件進(jìn)行修改汪茧。 zsh 的配置文件是 .zshrc,相應(yīng) Bash 的配置文件為 .bashrc 限番。它們?cè)?etc 下還都有一個(gè)或多個(gè)全局的配置文件舱污,不過(guò)我們一般只修改用戶目錄下的配置文件。

    我們可以簡(jiǎn)單地使用下面命令直接添加內(nèi)容到 .zshrc 中:

      echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
    

    上述命令中 >> 表示將標(biāo)準(zhǔn)輸出以追加的方式重定向到一個(gè)文件中弥虐,注意前面用到的 > 是以覆蓋的方式重定向到一個(gè)文件中扩灯,使用的時(shí)候一定要注意分辨。在指定文件不存在的情況下都會(huì)創(chuàng)建新的文件霜瘪。

  • 變量修改
    變量的修改有以下幾種方式:

    變量設(shè)置方式 說(shuō)明
    {變量名#匹配字串} 從頭向后開(kāi)始匹配珠插,刪除符合匹配字串的最短數(shù)據(jù)
    {變量名##匹配字串} 從頭向后開(kāi)始匹配,刪除符合匹配字串的最長(zhǎng)數(shù)據(jù)
    {變量名%匹配字串} 從尾向前開(kāi)始匹配颖对,刪除符合匹配字串的最短數(shù)據(jù)
    {變量名%%匹配字串} 從尾向前開(kāi)始匹配捻撑,刪除符合匹配字串的最長(zhǎng)數(shù)據(jù)
    {變量名/舊的字串/新的字串} 將符合舊字串的第一個(gè)字串替換為新的字串
    {變量名//舊的字串/新的字串} 將符合舊字串的全部字串替換為新的字串
  • 變量刪除
    可以使用 unset 命令刪除一個(gè)環(huán)境變量:

      unset temp
    
  • 使 PATH 環(huán)境變量立即生效

    前面我們?cè)?Shell 中修改了一個(gè)配置腳本文件之后(比如 zsh 的配置文件 home 目錄下的 .zshrc),每次都要退出終端重新打開(kāi)甚至重啟主機(jī)之后其才能生效,很是麻煩顾患,我們可以使用 source 命令來(lái)讓其立即生效番捂,如:

      cd
      source .zshrc
    

    source 命令還有一個(gè)別名就是 .,上面的命令如果替換成 . 的方式就該是:

      . ./.zshrc
    

    在使用 . 的時(shí)候江解,需要注意與表示當(dāng)前路徑的那個(gè)點(diǎn)區(qū)分開(kāi)设预。
    注意第一個(gè)點(diǎn)后面有一個(gè)空格,而且后面的文件必須指定完整的絕對(duì)或相對(duì)路徑名犁河,source 則不需要絮缅。

二、文件查找

  • whereis 簡(jiǎn)單快速

      whereis who
      whereis find
    

    你會(huì)看到 whereis find 找到了三個(gè)路徑呼股,兩個(gè)可執(zhí)行文件路徑和一個(gè) man 在線幫助文件所在路徑耕魄,這個(gè)搜索很快,因?yàn)樗](méi)有從硬盤(pán)中依次查找彭谁,而是直接從數(shù)據(jù)庫(kù)中查詢吸奴。whereis 只能搜索二進(jìn)制文件(-b),man 幫助文件(-m)和源代碼文件(-s)缠局。如果想要獲得更全面的搜索結(jié)果可以使用 locate 命令则奥。

  • locate 快而全

    通過(guò)“ /var/lib/mlocate/mlocate.db ”數(shù)據(jù)庫(kù)查找,不過(guò)這個(gè)數(shù)據(jù)庫(kù)也不是實(shí)時(shí)更新的狭园,系統(tǒng)會(huì)使用定時(shí)任務(wù)每天自動(dòng)執(zhí)行 updatedb 命令更新一次读处,所以有時(shí)候你剛添加的文件,它可能會(huì)找不到唱矛,需要手動(dòng)執(zhí)行一次 updatedb 命令(在我們的環(huán)境中必須先執(zhí)行一次該命令)罚舱。它可以用來(lái)查找指定目錄下的不同文件類型,如查找 /etc 下所有以 sh 開(kāi)頭的文件:

      sudo updatedb
      locate /etc/sh
    

    注意绎谦,它不只是在 /bin 目錄下查找管闷,還會(huì)自動(dòng)遞歸子目錄進(jìn)行查找。

    查找 /usr/share/ 下所有 jpg 文件:

      locate /usr/share/\*.jpg
    

    注意要添加 * 號(hào)前面的反斜杠轉(zhuǎn)義窃肠,否則會(huì)無(wú)法找到包个。

    如果想只統(tǒng)計(jì)數(shù)目可以加上 -c 參數(shù),-i 參數(shù)可以忽略大小寫(xiě)進(jìn)行查找冤留,whereis-b碧囊、-m-s 同樣可以使用纤怒。

  • which 小而精

    which 本身是 Shell 內(nèi)建的一個(gè)命令糯而,我們通常使用 which 來(lái)確定是否安裝了某個(gè)指定的軟件,因?yàn)樗粡?PATH 環(huán)境變量指定的路徑中去搜索命令:

      which man
    
  • find 精而細(xì)
    find 應(yīng)該是這幾個(gè)命令中最強(qiáng)大的了肪跋,它不但可以通過(guò)文件類型歧蒋、文件名進(jìn)行查找而且可以根據(jù)文件的屬性(如文件的時(shí)間戳,文件的權(quán)限等)進(jìn)行搜索。

    這條命令表示去 /etc/ 目錄下面 谜洽,搜索名字叫做 interfaces 的文件或者目錄萝映。這是 find 命令最常見(jiàn)的格式,千萬(wàn)記住 find 的第一個(gè)參數(shù)是要搜索的地方:

      sudo find /etc/ -name interfaces
    

    注意 find 命令的路徑是作為第一個(gè)參數(shù)的阐虚, 基本命令格式為 find [path] [option] [action]序臂。

    與時(shí)間相關(guān)的命令參數(shù):

    參數(shù) 說(shuō)明
    -atime 最后訪問(wèn)時(shí)間
    -ctime 最后修改文件內(nèi)容的時(shí)間
    -mtime 最后修改文件屬性的時(shí)間

    下面以 -mtime 參數(shù)舉例:

    • -mtime n:n 為數(shù)字,表示為在 n 天之前的“一天之內(nèi)”修改過(guò)的文件
    • -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改過(guò)的文件
    • -mtime -n:列出在 n 天之內(nèi)(包含 n 天本身)被修改過(guò)的文件
    • -newer file:file 為一個(gè)已存在的文件实束,列出比 file 還要新的文件名

    列出 home 目錄中奥秆,當(dāng)天(24 小時(shí)之內(nèi))有改動(dòng)的文件:

      find ~ -mtime 0
    

    列出用戶家目錄下比 Code 文件夾新的文件:

      find ~ -newer /home/LowoL/Code
    

三、作業(yè)

  • 找出 /etc/ 目錄下的所有以 .list 結(jié)尾的文件咸灿。

    1. 利用 locate 命令
      sudo updatedb
      sudo locate /etc/\*.list
    
    1. 利用 find 命令
      sudo find /etc/ -name *.list
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末构订,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子避矢,更是在濱河造成了極大的恐慌悼瘾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审胸,死亡現(xiàn)場(chǎng)離奇詭異亥宿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)砂沛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)烫扼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人碍庵,你說(shuō)我怎么就攤上這事映企。” “怎么了怎抛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵卑吭,是天一觀的道長(zhǎng)芽淡。 經(jīng)常有香客問(wèn)我马绝,道長(zhǎng),這世上最難降的妖魔是什么挣菲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任富稻,我火速辦了婚禮,結(jié)果婚禮上白胀,老公的妹妹穿的比我還像新娘椭赋。我一直安慰自己,他們只是感情好或杠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布哪怔。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪认境。 梳的紋絲不亂的頭發(fā)上胚委,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音叉信,去河邊找鬼亩冬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛硼身,可吹牛的內(nèi)容都是我干的硅急。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佳遂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼营袜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起丑罪,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤连茧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后巍糯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啸驯,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年祟峦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罚斗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宅楞,死狀恐怖针姿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厌衙,我是刑警寧澤距淫,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站婶希,受9級(jí)特大地震影響榕暇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喻杈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一彤枢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筒饰,春花似錦缴啡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)秒咐。三九已至,卻和暖如春碘裕,著一層夾襖步出監(jiān)牢的瞬間反镇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工娘汞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歹茶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓你弦,卻偏偏與公主長(zhǎng)得像惊豺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禽作,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一尸昧、環(huán)境變量 1. 變量 變量就是計(jì)算機(jī)中用于記錄一個(gè)值(數(shù)值,字符或字符串)的符號(hào)旷偿。通常變量與值是一對(duì)一的關(guān)系烹俗,...
    睡不醒醒閱讀 932評(píng)論 0 1
  • 一、實(shí)驗(yàn)介紹 1.1 實(shí)驗(yàn)內(nèi)容 本節(jié)實(shí)驗(yàn)介紹環(huán)境變量的作用與用法萍程,及幾種搜索文件的方法幢妄。學(xué)會(huì)這些技巧可以高效地使用...
    harrytc閱讀 393評(píng)論 0 0
  • 一、環(huán)境變量 1. 變量所謂變量就是計(jì)算機(jī)中用于記錄一個(gè)值(不一定是數(shù)值茫负,也可以是字符或字符串)的符號(hào)蕉鸳,而這些符號(hào)...
    e9f3ca3721bc閱讀 386評(píng)論 0 0
  • 一、關(guān)于環(huán)境變量 1忍法、變量:用于記錄一個(gè)值的符號(hào) (注意:Shell變量不用專門(mén)指定類型名) 變量的作用域: 變...
    bewhyy閱讀 490評(píng)論 0 0
  • 環(huán)境變量與文件查找 環(huán)境變量 變量 : 計(jì)算機(jī)中用于記錄一個(gè)值(不一定是數(shù)值潮尝,也可以是字符或字符串)的符號(hào),而這些...
    魚(yú)擺擺_a8ac閱讀 470評(píng)論 0 0