通俗易懂linux環境變量

如果想要清楚的了解環境變量,我覺得我們需要先大致搞清楚一個簡單的事——什么是會話?

會話大致是什么?

? ? ? ?在這里我們的目的是更好的理解環境變量,所以適當講解一下會話即可。通常我們都是用xshell連接遠程服務器,都會打開一個會話,我們這次xshell連接之后所運行的所有進程都在這次連接所打開的會話里。如下圖所示

  1. 操作系統會為每個連接都創建一個會話,即使是來自同一個用戶的每次連接。
  2. 操作系統會為每個會話創建一個偽終端,此時大家可以將自己眼前的xshell的頁面看做這個偽終端,就仿佛就是遠程服務器上的偽終端一樣。而大家可以把偽終端當做真正的終端一樣,之所以叫做偽終端,是因為畢竟是服務器虛擬出來的,不是真實的物理終端而已。
  3. 每個偽終端都會關聯一個bash,當在偽終端中執行諸如“ls" "cd"等命令時,偽終端會把命令交給bash去執行
  4. 本次連接中啟動運行的所有進程都是在其對應的會話中運行的
  5. 當xshell關閉連接,該會話中的所有進程(除了守護進程,初學者就當做所有進程即可)都會收到一個退出信號,進而所有進程都會退出,偽終端和bash也會推出,會話結束。

什么是環境變量?

? ? ? ?大家需要對環境變量有個感性的認識。當我們在執行程序時,一般需要給出程序完整的路徑名如“/home/tom/exe”;可是對于一些程序如“ls" "cd"等程序,我們卻可以直接運行,而無需添加完整的路徑名。這個過程中操作系統肯定使用了某種策略:當輸入“ls"后,操作系統發現當前目錄下沒有這個程序,它會給"ls"程序添加正確的路徑名,這個正確的路徑名當然對應的就是“ls"真實所在的目錄名。那么它如何添加的呢?操作系統中有一個文件,文件里面有一個變量,這個變量大概長這樣:PATH="/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/heng/.local/bin:/home/heng/bin"
PATH是變量名,后面是冒號分割的變量值。
????????它是這樣添加的:輸入“ls"后,發現不在當前目錄,于是它就去操作系統中找一個特定的文件,然后在文件查找PATH這個變量,然后拿著冒號分隔開的變量值一個一個去試,終于得到正確的”ls“路徑名。”ls"運行成功。PATH就是環境變量,就是眾多環境變量其中的一員,用于實現正確啟動程序這個特定的用途。

環境變量可以在哪?

  1. 在系統級配置文件中
  2. 在用戶級配置文件中
  3. 在當前會話臨時文件中

? ? ? ?這三個地方都什么意思:以PATH這個環境變量來舉例,它可以在這三個地方中的任何一個地方;如果在系統級配置文件中,每個用戶都可以看到,每個用戶都可以使用;如果在用戶級環境變量中,只有該用戶可以看到,只有該用戶可以使用;如果在當前會話臨時文件中,只有此次會話可以看到,下次連接就看不到了。接下來,會詳細給大家解釋。

會話與環境變量加載

  • 假設系統級配置文件的文件名叫做A。
  • 假設tom這個用戶的用戶級配置文件叫做tomB,xu這個用戶的用戶級配置文件叫做xuB。
  • 假設tom第一次會話的臨時文件叫做tomC1,xu此次會話的臨時文件叫做xuC1。
  • 假設tom第二次會話的臨時文件叫做tomC2。

? ? ? xhsell進行連接時,會話第一步加載系統級配置文件,第二步加載用戶級配置文件,而會話中的臨時文件是會話中自己定義的環境變量,馬上就說。所以在系統級配置文件中的環境變量每個用戶都可以使用,而對于在用戶級配置文件中的環境變量由于tom只能加載自己的用戶級配置文件tomB,不能加載xu的用戶級配置文件xuB,所以tom只能看到自己用戶級配置文件中的環境變量,也就是說定義在用戶級配置文件中的環境變量,只能被該用戶看到。接下來,會實操給大家看。

如何創建、查看等操作環境變量?

如何查看環境變量?

????????echo $環境變量名--->用于查看指定的環境變量

????????用env命令查看當前用戶全部的環境變量

如何創建環境變量?

? ? ? ? export用于創建環境變量,接下來我們創建一個變量名為test_var,值為hello的環境變量

????????在終端命令行輸入export test_var="hello"所創建的環境變量,處在當前會話臨時文件中,只在當前會話可見。我們讓tom創建這個環境變量,然后再打開一個會話,做個測試。

????????可以看到在第二個連接創建的會話中,無法查看其他會話中的環境變量。

將環境變量創建到配置文件中

????????前面講到 “xhsell進行連接時,會話第一步加載系統級配置文件,第二步加載用戶級配置文件” 。那么用于處理環境變量的系統級配置文件和用戶級配置文件究竟是那個文件呢,或者說是那些文件呢?

  • 用戶級別環境變量定義文件:~/.bashrc~/.profile(部分系統為:~/.bash_profile
  • 系統級別環境變量定義文件:/etc/bashrc/etc/profile(部分系統為:/etc/bash_profile)、/etc/environment

????????我們將test_var="hello"創建到用戶級配置文件~/.bashrc中,然后source ~/.bashrc加載使其生效,最后看看在第二個終端中能不能看到,按照我們之前所講,用戶級環境變量在這個用戶所登錄的任何一個會話中都是可以看到的。
? ? ? ? 在第一個會話中,在home/tom目錄下使用:vim .bashrc(~/.bashrc和~/.profile都是環境變量的用戶級配置文件,在任意一個文件中添加環境變量都可以,效果一樣,后續系統級配置文件同理)

????????然后在第二個會話中使用source ~/.bashrc加載使其生效

? ? ? ? 確實正如我們所預料。
????????至于測試在環境變量的系統級配置文件中添加環境變量,然后會使所有用戶都看到的測試實驗,對于大家來說,已經是很簡單了,不再贅述。

常見的環境變量都有哪些?

? ? ? ? 了解常見的環境變量都有哪些,有助于大家進一步感性認識環境變量。

  • PATH:決定了 shell 將到哪些目錄中尋找命令或程序
  • HOME:當前用戶主目錄(就是用戶登錄linux系統中時,默認的目錄
  • USER:當前用戶的用戶名。
  • HISTSIZE:歷史記錄數
  • LOGNAME:當前用戶的登錄名
  • HOSTNAME:指主機的名稱

????????還有很多常見的環境變量,這里舉出這幾個是為了稍加講解讓大家進一步認識環境變量。
????????PATH這個環境變量肯定在系統級配置文件里,當然了也可以同時在用戶級配置文件里,更可以同時在會話的臨時文件里。那么假如系統級配置文件里test_val="111",用戶級配置文件里test_val="222",而會話臨時文件里test_val="333",當你執行echo $test_val時會輸出什么呢?答案是:333。加載步驟為:系統級配置文件--->用戶級配置文件--->會話臨時文件,這個過程采用覆蓋策略。
·? ? ? ? HOME這個環境變量,邏輯上來講是不是完全可以在用戶級配置文件里呀。其實究竟在哪里并不重要,重要的是大家理解這個邏輯即可。

? ? ? ? 環境變量還有很多細節問題,如各個配置文件如何執行,如何在編寫代碼時獲取使用環境變量。在大家總體上理解好環境變量的基礎上,剩下的事已經很簡單了,大家用到時查閱相關資料即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84099.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84099.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84099.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【補題】Codeforces Round 715 (Div. 2) C. The Sports Festival

題意:給你一個序列,你可以對它重新排序,然后使每個i,max(a0,a1……ai)-min(a0,a1……ai)最小。問答案是多少 思路: C. The Sports Festival(區間DP)-CSDN博客 區間dp,完全沒想到…

ubuntu系統文件誤刪(/lib/x86_64-linux-gnu/libc.so.6)修復方案 [成功解決]

報錯信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重啟后報錯信息&…

SIFT算法詳細原理與應用

SIFT算法詳細原理與應用 1 SIFT算法由來 1.1 什么是 SIFT? SIFT,全稱為 Scale-Invariant Feature Transform(尺度不變特征變換),是一種用于圖像特征檢測和描述的經典算法。它通過提取圖像中的局部關鍵點,…

NPOI操作EXCEL文件 ——CAD C# 二次開發

缺點:dll.版本容易加載錯誤。CAD加載插件時,沒有加載所有類庫。插件運行過程中用到某個類庫,會從CAD的安裝目錄找,找不到就報錯了。 【方案2】讓CAD在加載過程中把類庫加載到內存 【方案3】是發現缺少了哪個庫,就用插件程序加載進…

Go字符串切片操作詳解:str1[:index]

在Go語言中,return str1[:index] 是一個??字符串切片操作??,它截取字符串的一部分。讓我們深入解析這個操作的含義和原理: 基本語法和含義 str1:原始字符串[:index]:切片操作符str1[:index]: ??起始…

NVIDIA Dynamo:數據中心規模的分布式推理服務框架深度解析

NVIDIA Dynamo:數據中心規模的分布式推理服務框架深度解析 摘要 NVIDIA Dynamo是一個革命性的高吞吐量、低延遲推理框架,專為在多節點分布式環境中服務生成式AI和推理模型而設計。本文將深入分析Dynamo的架構設計、核心特性、代碼實現以及實際應用示例&…

408第一季 - 數據結構 - 棧與隊列的應用

括號匹配 用瞪眼法就可以知道的東西 棧在表達式求值運用 先簡單看看就行,題目做了就理解了 AB是操作符,也是被狠狠加入后綴表達式了,然后后面就是*,只要優先級比棧頂運算符牛逼就放里面,很顯然,*比牛逼 繼續前進&#…

Ubuntu 下開機自動執行命令的方法

Ubuntu 下開機自動執行命令的方法(使用 crontab) 在日常使用 Ubuntu 或其他 Linux 系統時,我們常常需要讓某些程序或腳本在系統啟動后自動運行。例如:啟動 Clash 代理、初始化服務、定時同步數據等。 本文將介紹一種簡單且常用的…

jpackage 打包 jar包 為exe可執行程序

jpackage --input target/ --main-jar note.jar --runtime-image H:/Dpanbeifeng/apps/finalshell/jre --type app-image --dest output/ --main-class com.textmanager.Main --icon logo2.png --name 貓咪快筆記 jpackage 打包指令詳細介紹 jpackage 概述 jpackage 是…

H5移動端性能優化策略(渲染優化+弱網優化+WebView優化)

一、渲染優化:首屏速度提升的核心?? ??1. 關鍵頁面采用SSR或Native渲染?? ??適用場景??:首頁、列表頁、詳情頁等強內容展示頁面 ??優化原理??: ??SSR(服務端渲染)??:在服務端生成完整…

Matlab | matlab中的圖像處理詳解

MATLAB 圖像處理詳解 這里寫目錄標題圖像處理 MATLAB 圖像處理詳解一、圖像基礎操作1. 圖像讀寫與顯示2. 圖像信息獲取3. 圖像類型轉換二、圖像增強技術1. 對比度調整2. 去噪處理3. 銳化處理三、圖像變換1. 幾何變換2. 頻域變換四、圖像分割1. 閾值分割2. 邊緣檢測3. 區域分割五…

keysight是德科技N9923A網絡分析儀

keysight是德科技N9923A網絡分析儀 簡  述:N9923A 是一款使用電池供電的便攜式射頻矢量網絡分析儀,其中包括全 2 端口網絡分析儀、電纜和天線測試儀、故障點距離測試儀、功率計以及 1 通道和 2 通道矢量電壓表。 主要特性與技術指標 網絡分析儀 * 2…

idea不識別lombok---實體類報沒有getter方法

介紹 本篇文章,主要講idea引入lombok后,在實體類中加注解Data,在項目啟動的時候,編譯不通過,報錯xxx.java沒有getXxxx()方法。 原因有以下幾種 1. idea沒有開啟lombok插件 2. 使用idea-2023…

本地主機部署開源企業云盤Seafile并實現外部訪問

Seafile是一個開源、專業、可靠的云存儲平臺;解決文件集中存儲、共享和跨平臺訪問等問題。這款軟件功能強大,界面簡潔、操作方便。 本文將詳細的介紹如何利用本地主機部署 Seafile,并結合nat123,實現外網訪問本地部署的 Seafile …

【從0-1的CSS】第1篇:CSS簡介,選擇器以及常用樣式

文章目錄 CSS簡介CSS的語法規則選擇器id選擇器元素選擇器類選擇器選擇器優先級 CSS注釋 CSS常用設置樣式顏色顏色名稱(常用)RGB(常用)RGBA(常用)HEX(常用)HSLHSLA 背景background-colorbackground-imagebackground-size 字體text-aligntext-decorationtext-indentline-height 邊…

SpringBoot+MySQL家政服務平臺 設計開發

概述 基于SpringBootMySQL開發的家政服務平臺完整項目,該系統實現了用戶預約、服務管理、訂單統計等核心功能,采用主流技術棧開發,代碼規范且易于二次開發。 主要內容 系統功能架構 本系統采用前后端分離架構,前端提供用戶交互…

3.1 HarmonyOS NEXT分布式數據管理實戰:跨設備同步、端云協同與安全保護

HarmonyOS NEXT分布式數據管理實戰:跨設備同步、端云協同與安全保護 在萬物互聯的時代,數據的跨設備流轉與安全共享是全場景應用的核心需求。HarmonyOS NEXT通過分布式數據管理技術,實現了設備間數據的實時同步與端云協同,為開發…

高保真組件庫:數字輸入框

拖入一個文本框。 拖入一個矩形,作為整個數字輸入框的邊框,邊框顏色為灰色DCDEE2,圓角半徑為4。 拖入一個向上的箭頭圖標作為增加按鈕,再拖入一個矩形,將向上箭頭圖標放入矩形內。矩形:18x15,邊框顏色DCDEE2,邊框左下可見,箭頭圖標:8x5,矩形置底,組合在一起命名”增…

【力扣鏈表篇】19.刪除鏈表的倒數第N個節點

題目: 給你一個鏈表,刪除鏈表的倒數第 n 個結點,并且返回鏈表的頭結點。 示例 1: 輸入:head [1,2,3,4,5], n 2 輸出:[1,2,3,5]示例 2: 輸入:head [1], n 1 輸出:[]…

論文筆記——相干體技術在裂縫預測中的應用研究

目錄 相關地震知識補充地震數據的認識地震幾何屬性 相干體算法定義基本原理第一代相干體技術:基于互相關的相干體技術(Correlation)第二代相干體技術:基于相似的相干體技術(Semblance)基于多道相似的相干體…