Linux:環境變量

目錄

1.基本變量

2.通過代碼獲取環境變量

2.1 main傳參?

2.2 全局變量environ?

2.3 系統調用getenv()?

3.在腳本文件中添加環境變量

4.環境變量通常是具有全局屬性


1.基本變量

環境變量(environment variables)一般是指在操作系統中用來指定操作系統運行環境的一些參數如:我們在編寫C/C++代碼的時候,在鏈接的時候,從來不知道我們的所鏈接的動態靜態庫在哪里,但是照樣可以鏈接成功,生成可執行程序,原因就是有相關環境變量幫助編譯器進行查找。環境變量通常具有某些特殊用途,還有在系統當中通常具有全局特性。

常見環境變量

  • PATH : 指定命令的搜索路徑
  • HOME : 指定用戶的主工作目錄(即用戶登陸到Linux系統中時,默認的目錄)
  • SHELL : 當前Shell,它的值通常是/bin/bash。
  • USER:當前帳號使用者

查看環境變量方法

echo $NAME //NAME:你的環境變量名稱

env 查看所有環境變量

測試PATH

  1. 創建myproc.c文件
    #include <stdio.h>
    int main()
    {printf("hello world!\n");return 0;
    }
  2. 對比 ./myproc 執行和之間 myproc 執行
  3. 要執行一個命令,必須先要找到這個對應的可執行程序!為什么有些指令可以直接執行,不需要帶路徑,而我們的二進制程序需要帶路徑才能執行?
  4. 將我們的程序所在路徑加入環境變量PATH當中, export PATH=$PATH:myproc 程序所在路徑
  5. 對比測試
  6. 還有什么方法可以不用帶路徑,直接就可以運行呢?那就是把我們寫的可執行程序移動到PATH默認路徑中。?

默認更改環境變量,只限于本次登陸,重新登陸,環境變量會自動被恢復。那這是為什么呢?

因為這些環境變量的值是存在配置文件中的,每次登錄都會重新讀取配置文件。

測試HOME

  • 用root和普通用戶,分別執行 echo $HOME ,對比差異. 執行 cd ~; pwd ,對應 ~ 和 HOME 的關系

?可以發現不同用戶有不同的主目錄即HOME。

為什么普通用戶默認所處目錄/home/xxxx,而root是 /root ???

登陸的時候

  1. 輸入用戶名&&密碼
  2. 認證
  3. 形成環境變量(肯定不止一個,PATH,PWD,HOME)
  4. 根據用戶名,初始化HOME。root:HOME=/root,普通用戶:HOME=/home/xxxx
  5. cd $HOME

系統中會存在大量的環境變量,每一個環境變量都有它自己的特殊用途,用來完成特定的系統功能!

2.通過代碼獲取環境變量

獲取環境變量有三種方式:

2.1 main傳參?

系統啟動我們的程序的時候,可以選擇給我們的進程(main)提供兩張表

  1. 命令行參數表
  2. 環境變量表

命令行參數表之前文章已經講過了。這里講一下環境變量表。?我們執行下面代碼,使用main函數的第三個參數

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}

運行結果:

2.2 全局變量environ?

libc中定義的全局變量environ指向環境變量表,environ沒有包含在任何頭文件中,所以在使用時 要用extern聲明。不聲明也可以。使用通過第三方變量environ獲取環境變量:

#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}

2.3 系統調用getenv()?

通過系統調用獲取或設置環境變量:getenv()函數來訪問特定的環境變量

#include <stdio.h>
#include <stdlib.h>
int main()
{//打印PATH的內容printf("%s\n", getenv("PATH"));return 0;
}

3.在腳本文件中添加環境變量

環境變量生成原理 :

命令行啟動的進程都是shell/bash的子進程子進程的命令行參數和環境變量是父進程bash給我們傳遞的!而父進程的環境變量信息是以腳本配置文件的形式存在的!

而我們直接在命令行更改的是bash進程內部的環境變量信息!每一次重新登陸,都會給我們形成新的bash解釋器,并且新的bash解釋器自動從讀取形成自己的環境變量表信息!

每一次登陸的時候,你的bash進程都會讀取 .bash_profile。配置文件中的內容,為我們bash進程形成一張環境變量表信息!

如果想要想要自己創建的一個環境變量在每次登錄時都存在,可以在主目錄下使用 ll -a,查看隱藏的 .bash_profile ,并對其進行修改

?添加自己創建的環境變量:

查看是否成功:?

4.環境變量通常是具有全局屬性

  • 環境變量通常具有全局屬性,可以被子進程繼承下去

我們在命令行中創建一個本地定義變量OURENV ,運行下面代碼

#include <stdio.h>
#include <stdlib.h>
int main()
{printf("OURENV:%s\n",getenv("OURENV"));return 0;
}

運行結果:?

?可以發現:通過export 將局部變量添加到環境變量中,才能被命令行bash的子進程myproc得到。

本地變量vs環境變量

  • 本地變量只在bash進程內部有效,不會被子進程繼承下去
  • 環境變量通過讓所有的子進程繼承的方式,實現自身的全局性!

如果我們把PATH該為空字符串,我們可以發現有些指令可以運行,而有些指令卻不可以運行

Linux的命令分類:

  • 常規命令,shell 通過fork讓子進程成執行的,像ls touch ,所以PATH為空后不能執行。
  • 內建命令,shell命令行的一個函數,向pwd,cd,是可以直接讀取shell內部定義的本地變量

和環境變量相關的命令

  1. echo: 顯示某個環境變量值
  2. export: 設置一個新的環境變量
  3. env: 顯示所有環境變量
  4. unset: 清除環境變量
  5. set: 顯示本地定義的shell變量和環境變量

沒有export 的變量都是本地變量。可以通過set顯示,unset清除

本篇結束!

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

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

相關文章

商用中央空調市場分析:預計2028年將達到628億元

商用空調一直以來都沒有一個相對比較明確的概念&#xff0c;一直以來被認為是制冷空調市場的一個細分子行業。現在比較一致的觀點是&#xff0c;可以納入商用空調范疇的產品可以包括戶式中央空調產品、部分傳統中央空調產品以及部分家用空調。商用空調已普遍采用直流變頻領先技…

網絡計算機模擬實現

今天給大家說說前幾天完成的一個模擬的網絡計算機吧&#xff0c;雖然計算機的模擬實現的原理很簡單&#xff0c;但是如果要想寫乘網絡的&#xff0c;個人認為是不簡單的。基本上算是包涵了套接字編程的三分之一的知識點&#xff0c;此處的套接字編程指的是在理解TCP/IP五層協議…

泡沫玻璃市場分析:預計2028年將達到14億美元

泡沫玻璃最早是由美國匹茲堡康寧公司發明的&#xff0c;是由碎玻璃、發泡劑、改性添加劑和發泡促進劑等&#xff0c;經過細粉碎和均勻混合后&#xff0c;再經過高溫熔化&#xff0c;發泡、退火而制成的無機非金屬玻璃材料。它是由大量直徑為1~2毫米的均勻氣泡結構組成。其中吸聲…

Linux 常用命令----mktemp 命令

文章目錄 基本用法實例演示高級用法注意事項 mktemp 命令用于創建一個臨時文件或目錄&#xff0c;這在需要處理臨時數據或進行安全性測試時非常有用。使用 mktemp 可以保證文件名的唯一性&#xff0c;避免因文件名沖突而導致的問題。 基本用法 創建臨時文件: 命令 mktemp 默認…

Go語言基礎知識學習(一)

Go基本數據類型 bool bool型值可以為true或者false,例子&#xff1a; var b bool true數值型 類型表示范圍int8有符號8位整型-128 ~ 127int16有符號16位整型-32768 ~ 32767int32有符號32位整型-2147783648 ~ 2147483647int64有符號64位整型uint8無符號8位整型0 ~ 255uint16…

優思學院|如何建立公司運營指標體系?如何推行六西格瑪改進運營指標?

關鍵績效指標 (KPI) 是測量您團隊或組織朝重要商業目標進展表現如何的量化指標&#xff0c;組織會在多個層面使用 KPI&#xff0c;這視乎您想要追蹤何指標而定&#xff0c;您可以設定全組織的、特定團隊的、或甚至是個人 KPI。 良好的KPI能讓公司管理者掌握組織的營運是否進度…

使用React 18、Echarts和MUI實現溫度計

關鍵詞 React 18 Echarts和MUI 前言 在本文中&#xff0c;我們將結合使用React 18、Echarts和MUI&#xff08;Material-UI&#xff09;庫&#xff0c;展示如何實現一個交互性的溫度計。我們將使用Echarts繪制溫度計的外觀&#xff0c;并使用MUI創建一個漂亮的用戶界面。 本文…

點評項目——分布式鎖

2023.12.10 集群模式下的并發安全問題及解決 隨著現在分布式系統越來越普及&#xff0c;一個應用往往會部署在多臺機器上&#xff08;多節點&#xff09;&#xff0c;通過加鎖可以解決在單機情況下的一人一單安全問題&#xff0c;但是在集群模式下就不行了。見下圖&#xff1a…

在 Android WebView 中實現和 JavaScript 的互操作

前言 在 APP 中內嵌一個 H5 來實現特定的業務功能已經是非常成熟且常用的方案了。 雖然 H5 已經能夠實現大多數的需求&#xff0c;但是對于某些需求還是得依靠原生代碼來實現然后與 JavaScript 進行交互&#xff0c;例如我目前所負責的項目就是一個 “智能硬件” 設備&#x…

【PyTorch】卷積神經網絡

文章目錄 1. 理論介紹1.1. 從全連接層到卷積層1.1.1. 背景1.1.2. 從全連接層推導出卷積層 1.2. 卷積層1.2.1. 圖像卷積1.2.2. 填充和步幅1.2.3. 多通道 1.3. 池化層&#xff08;又稱匯聚層&#xff09;1.3.1. 背景1.3.2. 池化運算1.3.3. 填充和步幅1.3.4. 多通道 1.4. 卷積神經…

實現React18加TS,解決通用后臺管理系統,實戰方案落地有效實踐經驗

隨著前端技術的不斷發展和更新&#xff0c;使用React 18結合TypeScript&#xff08;TS&#xff09;來構建通用后臺管理系統已成為一種常見的選擇。本文將介紹如何在項目中應用React 18和TS&#xff0c;并分享一些實戰方案的有效實踐經驗。 一、搭建React 18 TS項目 首先&…

12.2每日一題(1無窮型冪指函數:二倍角公式+三部曲+等價無窮小代換(只有整體的因子不為0才能先算出來))

注意&#xff1a;求極限不能想先算哪里就先算哪里&#xff0c;只有整體的因子不為0才能先算出來&#xff0c;部分不為0不可以先算

外貿老業務也棘手的一個問題

這幾天有2個老業務都被一個類同的問題纏住了。 客戶定購了三臺車&#xff0c;由于是非常規要求所以我建議收取全款或者最少收50%的定金。但是業務員為了當月業績或者為了拿到就收了客戶20% 或者30% &#xff0c;定金收到了&#xff0c;我也不好再逼著業務員去加收定金。 訂單就…

記錄 | ubuntu上安裝fzf

在 ubuntu 上采用命令行安裝 fzf 的方式行不通 指的是采用下面的方式行不通&#xff1a; sudo apt install fzf # 行不通 sudo snap install fzf --classic # 行不通正確的安裝方式是&#xff1a; ● 到 fzf 的 git 倉庫&#xff1a;https://github.com/junegunn/fzf/re…

在高數據量中如何優化MySQL的Group by語句?

在實際開發環境中&#xff0c;MySQL的GROUP BY操作的優化需要結合具體的業務場景和數據特點。以下是一些建議&#xff0c;可以幫助你在實際開發中優化GROUP BY查詢&#xff1a; 使用合適的索引&#xff1a; 確保GROUP BY和ORDER BY中的列上存在索引。這有助于加速分組和排序操作…

計算機畢業設計 基于SpringBoot的電動車租賃系統的設計與實現 Java實戰項目 附源碼+文檔+視頻講解

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精…

場景示例:有贊商城 × 微盛企微管家,助力零售企業,實現私域運營自動化

1 場景描述 在零售行業內&#xff0c;線上渠道已經是零售行業的主要銷售渠道&#xff0c;大多數零售企業都會將產品上架到有贊商城&#xff0c;并使用微盛企微管家系統進行客戶管理和服務&#xff0c;希望能對客戶畫像進行精細化管理&#xff0c;以提升銷售和服務效率。 然而&a…

2023年最新prometheus + grafana搭建和使用+gmail郵箱告警配置

一、安裝prometheus 1.1 安裝 prometheus官網下載地址 sudo -i mkdir -p /opt/prometheus #移動解壓后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #創建一個專門的prometheus用戶&#xff1a; -M 不創建家目錄&#xff0c; -s 不讓登錄 useradd…

女士內衣市場分析:預計2028年將達到643.08億美元

內衣 (英文名:Underwear)&#xff0c;是指貼身穿的衣物。內衣有保暖及污穢的危害作用&#xff0c;有時會被視為性征。女士內衣行業生產的主要原料是各類織布或無紡布&#xff0c;成分有海綿、邊、定型紗、骨膠、肩帶等&#xff0c;布面料在內衣企業的生產成本中所占比重較大。女…

Python基礎(四、探索迷宮游戲)

Python基礎&#xff08;四、探索迷宮游戲&#xff09; 游戲介紹游戲說明 游戲介紹 在這個游戲中&#xff0c;你將扮演一個勇敢的冒險者&#xff0c;進入了一個神秘的迷宮。你的任務是探索迷宮的每個房間&#xff0c;并最終找到隱藏在其中的寶藏。 游戲通過命令行界面進行交互…