欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 Linux:環(huán)境變量

柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 Linux:環(huán)境變量

http://yzkb.51969.com/

一、環(huán)境變量

1.1 PATH的引入

問題1:為什么我們平時(shí)輸入的指令可以直接運(yùn)行,但是自己編譯出來的程序卻要加 ./?

——>因?yàn)橹噶钏枰南嚓P(guān)程序是存儲(chǔ)在系統(tǒng)能夠查找得到的底下,而我們自己編譯出來的程序是在當(dāng)前的工作目錄的,系統(tǒng)并不能直接找到。

問題2:憑什么系統(tǒng)可以找到指令的程序卻找不到自己的程序呢??

——> 因?yàn)榄h(huán)境變量PATH,他是Linux系統(tǒng)指令搜索路徑,用echo? $PATH(需要加)可查看系統(tǒng)能夠找到的路徑 ,其中路徑以 “ :”為分隔符? (比如pwd能直接使用就是因?yàn)?usr/bin路徑在PATH變量中)

?如果我們用自己編譯的程序,就會(huì)顯示command not found ,意思就是xshell幫我們找過了,只是他找不到而已

?問題3:如果我想讓自己寫的程序像指令一樣去使用,有什么辦法呢???

——>(1)思路1:比如/usr/bin路徑在PATH變量里,那我們就把自己寫的程序放到該路徑下即可

(2)思路2:我當(dāng)前的程序無法使用時(shí)因?yàn)槲业墓ぷ髂夸洸辉谙到y(tǒng)的指令搜索路徑內(nèi),所以我們把當(dāng)前的工作目錄加入到PATH中就行了?。?/p>

?問題4:如何修改環(huán)境變量

——> (1)PATH=……? ?但是這樣的意思是賦值,也就是說原先的內(nèi)容會(huì)被覆蓋掉,這樣會(huì)導(dǎo)致我們絕大多數(shù)指令跑不了(有一部分指令是內(nèi)建命令,不會(huì)被影響)? ? 但是我們只要重新啟動(dòng)xsell就會(huì)恢復(fù),因?yàn)槲覀兊腜ATH是一個(gè)內(nèi)存級(jí)文件,他是在我們xshell打開之后加載進(jìn)去的??!

(2)PATH=$PATH:……? ?這樣的意思就是在原有路徑的基礎(chǔ)上新增路徑

1.2 HOME和SHELL?

HOME會(huì)在我們xshell登錄的時(shí)候自動(dòng)識(shí)別用戶,然后將根目錄載入進(jìn)去

SHELL?里面的是我們當(dāng)前的xshell所使用的可執(zhí)行程序

1.3?查看所有環(huán)境變量的方法

1.3.1 命令行形式

env——>查看所有的環(huán)境變量

1.3.2 系統(tǒng)調(diào)用接口

getenv()

1.3.3 第三方變量獲取

extern char **environ

??????

1.3.4?如何通過系統(tǒng)調(diào)用接口來判斷權(quán)限

? ? ? ?通過getenv我們可以知道,只要我們將我們想要查找的環(huán)境變量放在參數(shù)里,就可以以字符串的形式返回 ,? ?所以我們可以用strcmp()這個(gè)字符串比較函數(shù),我們的 USER和root一樣,那么就是超級(jí)用戶,其他情況就是普通用戶。

? ? ? 所以因?yàn)橛辛谁h(huán)境變量,系統(tǒng)就可以知道你是誰,就可以和文件的擁有者、所屬組、其他人的權(quán)限進(jìn)行比較,就可以知道你是否具備對(duì)應(yīng)的權(quán)限??!? ??

1.4 命令行參數(shù)

1.4.1 選項(xiàng)的兩個(gè)參數(shù)

其實(shí)我們的main函數(shù)是可以帶參數(shù)的,因?yàn)樗鋵?shí)也是被別人調(diào)用的一個(gè)函數(shù)

int argc:向量表中命令行參數(shù)的個(gè)數(shù)

char* argv[ ]: 其實(shí)是一個(gè)向量表,里面存儲(chǔ)著命令行參數(shù) (最后的位置為nullptr)

我們可以看到向量表的第一個(gè)位置一定是這個(gè)指令,而后面的位置存放一些附加的選項(xiàng)

? ? ? ? 這樣做的原因是為指令、工具、軟件等提供命令行選項(xiàng)的支持,幾乎所有的語言都需要命令行參數(shù),因?yàn)檫@樣能夠?yàn)槲覀兊囊恍┻x項(xiàng)定制特殊化的功能

1.4.2 系統(tǒng)調(diào)用接口模擬實(shí)現(xiàn)定制化選項(xiàng)

? ? ? ? 先暫時(shí)不考慮多個(gè)選項(xiàng)的情況,因?yàn)檫@個(gè)會(huì)涉及到可變參數(shù)的知識(shí) ,所以我們先假設(shè)只能攜帶一個(gè)選項(xiàng),而由于向量表的第一個(gè)位置必然是./mycode 因此第二個(gè)位置就是我們攜帶的選項(xiàng),因?yàn)檫x項(xiàng)是字符串的形式,因此我們就可以通過strcmp函數(shù)通過條件編譯,來實(shí)現(xiàn)不同的選項(xiàng)實(shí)現(xiàn)不同的功能??!

? ? ?所以另一方面我們可以知道,main函數(shù)是如何知道自己有多少個(gè)參數(shù)呢??其實(shí)本質(zhì)上來說就是main函數(shù)也是被別人調(diào)用的,所以他在調(diào)用的時(shí)候就會(huì)在底層進(jìn)行相關(guān)的條件編譯(也就是對(duì)你的參數(shù)做檢查),不同的參數(shù)就走不同的方向

1.4.3?環(huán)境變量相關(guān)的參數(shù)

其實(shí)還有一個(gè)參數(shù)? char* env[ ]——>存儲(chǔ)環(huán)境變量向量表

?因此我們可以知道了兩張重要的向量表:(1)命令行參數(shù)表 (2)環(huán)境變量表

?1.4.4 理解環(huán)境變量的全局屬性

? ? ? ?環(huán)境變量是系統(tǒng)提供的一組name=value形式的變量,不同的環(huán)境變量有不同的用戶,通常具有全局屬性

? ? ? 如何理解全局屬性,其實(shí)本質(zhì)上就是由于環(huán)境變量表,我們所執(zhí)行的進(jìn)程都是子進(jìn)程,bash本身在啟動(dòng)的時(shí)候,會(huì)從操作系統(tǒng)的配置文件中讀取環(huán)境變量信息,然后子進(jìn)程會(huì)繼承父進(jìn)程的環(huán)境變量??!?因此環(huán)境變量表會(huì)被繼承下去??!就相當(dāng)于是全局了?。?/p>

? ? ? 根據(jù)前面的知識(shí)。如果是先創(chuàng)建了進(jìn)程,然后再修改了環(huán)境變量,那么新創(chuàng)建的子進(jìn)程必然會(huì)被繼承下去(共享數(shù)據(jù)),但如果創(chuàng)建了子進(jìn)程然后修改了環(huán)境變量并不會(huì)影響父進(jìn)程的環(huán)境變量,因?yàn)闀?huì)發(fā)生寫時(shí)拷貝

1.4.5 本地變量vs環(huán)境變量

本地變量只會(huì)在bash內(nèi)部有效,不會(huì)被繼承

set ——>查看所有的環(huán)境變量的本地變量

export ……——>將本地變量變成環(huán)境變量

unset……——>清除環(huán)境變量

什么情況下需要本地變量呢??

——>就是只希望在bash里面使用但是不希望被子進(jìn)程繼承下去的,比如說我們的命令行提示符,如果是root用戶就是# 如果是普通用戶就是$?

1.4.6 常規(guī)命令vs內(nèi)建命令?

? ? ? ?之前我們提到過,如果我們不小心將環(huán)境變量覆蓋了,那么就會(huì)導(dǎo)致大部分的指令用不了,但是并不是所有的指令都用不了??! 比如echo、pwd、cd…… 因?yàn)樗麄兪莾?nèi)建命令

常規(guī)命令:通過創(chuàng)建子進(jìn)程完成的

內(nèi)建命令:bash不創(chuàng)建子進(jìn)程,而是由自己親自執(zhí)行,類似與bash調(diào)用了自己一些的,或者是系統(tǒng)提供的函數(shù)?

?所以一般的命令,我們可以知道bash應(yīng)該是使用了fork函數(shù)創(chuàng)建了子進(jìn)程去完成的,但是內(nèi)建命令就是直接去完成

1.4.7 模擬實(shí)現(xiàn)內(nèi)建命令cd

chdir

1.5? 再次總結(jié)環(huán)境變量

? ? 環(huán)境變量(environment variables)一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),通常具有全局屬性,并且一般來講都有其特殊的用途(比如我們在編寫C/C++代碼的時(shí)候,在鏈接的時(shí)候,從來不知道我們的所鏈接的動(dòng)態(tài)靜態(tài)庫在哪里,但 是照樣可以鏈接成功,生成可執(zhí)行程序,原因就是有相關(guān)環(huán)境變量幫助編譯器進(jìn)行查找。)

環(huán)境變量相關(guān)命令:

1、echo: 顯示某個(gè)環(huán)境變量值

2. export: 設(shè)置一個(gè)新的環(huán)境變量

3. env: 顯示所有環(huán)境變量

4. unset: 清除環(huán)境變量

5. set: 顯示本地定義的shell變量和環(huán)境變量

?環(huán)境變量的組織方式:每個(gè)程序都會(huì)收到一張環(huán)境表,環(huán)境表是一個(gè)字符指針數(shù)組,每個(gè)指針指向一個(gè)以’\0’結(jié)尾的環(huán)境字符串? ? ??

?

柚子快報(bào)邀請(qǐng)碼778899分享:運(yùn)維 Linux:環(huán)境變量

http://yzkb.51969.com/

相關(guān)閱讀

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19565358.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄