Linux環境變量

環境變量

  • 一.基本概念
  • 二.常見的環境變量
    • 1.PATH:指令搜索路徑
    • 2.HOME: 指定用戶的主工作目錄
    • 3.SHELL:當前Shell,它的值通常是/bin/bash
  • 三.查看環境變量的方法
  • 四.命令行參數
  • 五.環境變量增加和刪除
  • 六.本地變量

一個問題:我們在寫一段代碼并編譯成可執行程序后,想要執行它需要加./,而在使用ls,pwd等指令時卻不需要加當前路徑,這是怎么回事呢?這就要提到環境變量了。

一.基本概念

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

二.常見的環境變量

1.PATH:指令搜索路徑

查看PATH

在這里插入圖片描述

它的內容是由一串路徑+冒號+另一串路徑+冒號+…。它用冒號作為分割符,定義出了許多路徑。那么像ls,pwd這些指令在執行時就會在PATH里挨個尋找路徑,執行正確的路徑;而我們自己的可執行程序的路徑并不在定義里,所以需要加./。

我們也可以將自己的可執行程序的路徑添加到PATH里。

在這里插入圖片描述

2.HOME: 指定用戶的主工作目錄

查看HOME

在這里插入圖片描述

剛登陸xshell時的目錄所處的目錄是/home/chz,為什么當一個用戶登陸時會自動到它的家目錄里呢?這是因為當你登陸xshell時,xshell會自動識別用戶,然后填充該用戶的HOME變量。

3.SHELL:當前Shell,它的值通常是/bin/bash

查看SHELL

在這里插入圖片描述

通過$SHELL可以看到當前shell的可執行程序。

三.查看環境變量的方法

通過指令查看
在這里插入圖片描述
在這里插入圖片描述

通過系統接口查看

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

四.命令行參數

一個小知識:main函數可以帶參

在這里插入圖片描述

第一個參數是整形,第二個參數是指針數組。argc代表argv里的元素個數。接下來打印出來看看。

在這里插入圖片描述

在這里插入圖片描述

main函數在用戶層面上看是入口函數,但實際上main函數并不是第一個被調用的函數,它會先被其他函數調用,而argc,argv就是傳的參。在我們看來我們輸入的是./mycmd-a但bash實際上是以空格為分隔符直接解釋成了"./mycmd" "-a"兩個字符串。再把字串的個數存入argc,每個子串的首地址保存在argv里。將字符串打散這一過程就是命令行解析。

為什么要這么做,看一段代碼

在這里插入圖片描述

在這里插入圖片描述

所以命令行參數有一個重要功能就是為指令提供多個選項。

main函數只有這兩個參數嗎

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

我們直接遍歷env[]也可以獲得全部的環境變量。并且我們可以發現這里的環境變量與env指令里的環境變量一模一樣,所以其實我們寫的程序的環境變量是繼承于父進程的。這也是為什么環境變量具有全局性。

結論:我們所運行的進程,都是子進程,bash本身在啟動的時候,會從操作系統的配置文件中讀取環境變量信息,子進程會繼承父進程交給我的環境變量!

五.環境變量增加和刪除

增加

在這里插入圖片描述

在這里插入圖片描述

同時在這里也可以通過執行自己寫的子程序發現子程序里的環境變量也有了MY_VALUE,進而進一步驗證了環境變量是由父進程里繼承而來的。

刪除

在這里插入圖片描述

六.本地變量

本地變量就是我們可以直接在命令行里定義的變量

在這里插入圖片描述

查看

set可以查看所有變量包括環境變量和本地變量

在這里插入圖片描述

在這里插入圖片描述

本地變量只在本BASH內部有效,不會繼承。

又一個問題:既然本地變量不能被子進程繼承,那么我們為什么可以使用echo將它打印出來呢?這其實是因為echo不需要創建子進程。

在這里插入圖片描述

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

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

相關文章

Kotlin~Bridge橋接模式

概念 抽象和現實之間搭建橋梁,分離實現和抽象。 抽象(What)實現(How)用戶可見系統正常工作的底層代碼產品付款方式定義數據類型的類。處理數據存儲和檢索的類 角色介紹 Abstraction:抽象 定義抽象接口&…

《Go 語言第一課》課程學習筆記(五)

入口函數與包初始化:搞清 Go 程序的執行次序 main.main 函數:Go 應用的入口函數 Go 語言中有一個特殊的函數:main 包中的 main 函數,也就是 main.main,它是所有 Go 可執行程序的用戶層執行邏輯的入口函數。 Go 程序在…

一起創建Vue腳手架吧

目錄 一、安裝Vue CLI1.1 配置 npm 淘寶鏡像1.2 全局安裝1.3 驗證是否成功 二、創建vue_test項目2.1 cmd進入桌面2.2 創建項目2.3 運行項目2.4 查看效果 三、腳手架結構分析3.1 文件目錄結構分析3.2 vscode終端打開項目 一、安裝Vue CLI CLI:command-line interface…

日常BUG——微信小程序提交代碼報錯

😜作 者:是江迪呀??本文關鍵詞:日常BUG、BUG、問題分析??每日 一言 :存在錯誤說明你在進步! 一、問題描述 在使用微信小程序開發工具進行提交代碼時,報出如下錯誤: Invalid a…

Git提交規范指南

在開發過程中,Git每次提交代碼,都需要寫Commit message(提交說明),規范的Commit message有很多好處: 方便快速瀏覽查找,回溯之前的工作內容可以直接從commit 生成Change log(發布時用于說明版本…

5、flink任務中可以使用哪些轉換算子(Transformation)

1、什么是Flink中的轉換算子 在使用 Flink DataStream API 開發流式計算任務時,可以將一個或多個 DataStream 轉換成新的 DataStream,在應用程序中可以將多個數據轉換算子合并成一個復雜的數據流拓撲圖。 2、常用的轉換算子 Flink提供了功能各異的轉換算…

[論文筆記]ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE

引言 這是論文ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE的閱讀筆記。本篇論文提出了通過Pre-LN的方式可以省掉Warm-up環節,并且可以加快Transformer的訓練速度。 通常訓練Transformer需要一個仔細設計的學習率warm-up(預熱)階段:在訓練開始階段學習率需要設…

JDK 1.6與JDK 1.8的區別

ArrayList使用默認的構造方式實例 jdk1.6默認初始值為10jdk1.8為0,第一次放入值才初始化,屬于懶加載 Hashmap底層 jdk1.6與jdk1.8都是數組鏈表 jdk1.8是鏈表超過8時,自動轉為紅黑樹 靜態方式不同 jdk1.6是先初始化static后執行main方法。 jdk1.8是懶加…

設置PHP的fpm的系統性能參數pm.max_children

1 介紹 PHP從Apache module換成了Fpm,跑了幾天突然發現網站打不開了。 頁面顯示超時,檢查MySQL、Redis一眾服務都正常。 進入Fpm容器查看日志,發現了如下的錯誤信息: server reached pm.max_children setting (5), consider r…

python中的svm:介紹和基本使用方法

python中的svm:介紹和基本使用方法 支持向量機(Support Vector Machine,簡稱SVM)是一種常用的分類算法,可以用于解決分類和回歸問題。SVM通過構建一個超平面,將不同類別的數據分隔開,使得正負樣…

2023全國大學生數學建模競賽A題B題C題D題E題思路+模型+代碼+論文

目錄 一. 2023國賽數學建模思路: 賽題發布后會第一時間發布選題建議,思路,模型代碼等 詳細思路獲取見文末名片,9.7號第一時間更新 二.國賽常用的模型算法: 三、算法簡介 四.超重要!!&…

msvcp140.dll丟失的解決方法,如何預防msvcp140.dll丟失

在電腦操作系統中經常會彈出類似msvcp140.dll丟失的錯誤提示窗口,導致軟件無法正常運行。為什么會出現msvcp140.dll丟失的情況呢?出現這種情況應該如何解決呢?小編有三種解決方法分享給大家。 一.msvcp140.dll丟失的原因 1.安裝過程中受損:在…

前端框架學習-ES6新特性(尚硅谷web筆記)

ECMASript是由 Ecma 國際通過 ECMA-262 標準化的腳本程序設計語言。javaScript也是該規范的一種實現。 新特性目錄 筆記出處:b站ES6let 關鍵字const關鍵字變量的解構賦值模板字符串簡化對象寫法箭頭函數rest參數spread擴展運算符Promise模塊化 ES8async 和 await E…

云原生周刊:Kubernetes v1.28 新特性一覽 | 2023.8.14

推薦一個 GitHub 倉庫:Fast-Kubernetes。 Fast-Kubernetes 是一個涵蓋了 Kubernetes 的實驗室(LABs)的倉庫。它提供了關于 Kubernetes 的各種主題和組件的詳細內容,包括 Kubectl、Pod、Deployment、Service、ConfigMap、Volume、…

CF1013B And 題解

題目傳送門 題目意思: 給你一個長度為 n n n 的序列 a i a_i ai?,再給一個數 x x x。每一步你可以將序列中的一個數與上 x x x。請問最少要多少步才可以使得序列中出現兩個相同的數,如果無解輸出 ? 1 -1 ?1。 思路: 首…

Vue頁面刷新常用的4種方法

Vue項目里,有時候我們需要刷新頁面,重新加載頁面數據,常用方法如下: 方法一:location.reload() 方法全局刷新 使用 location.reload() 方法可以簡單地實現當前頁面的刷新,這個方法會重新加載當前頁面,類似于用戶點擊瀏覽器的刷新按鈕。 在 Vue 中,可以將該方法綁定到…

題解 | #M.Fair Equation# 2023牛客暑期多校10

M.Fair Equation 簽到題 題目大意 給定一個式子 A B C ABC ABC ,其中正整數 A , B , C ≤ 1 0 6 A,B,C\le 10^6 A,B,C≤106 問能否在 A , B , C A,B,C A,B,C 其中一個數的某一位置(可以是開頭和結尾)插入一個數字,使得等式…

Elasticsearch 查詢之Function Score Query

前言 ES 的主查詢評分模式分為兩種,是信息檢索領域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 從版本 5.0 開始引入了 BM25 算法作為默認的文檔評分(relevance scoring)算法。在此之前,Elasticsearch 使…

sip網絡號角喇叭 sip音柱 POE供電廣播音箱 ip網絡防水對講終端 sip網絡功放

SV-7042TP網絡號角喇叭 一、描述 SV-7042TP是我司的一款SIP網絡號角喇叭,具有10/100M以太網接口,內置有一個高品質揚聲器,將網絡音源通過自帶的功放和喇叭輸出播放,可達到功率30W。SV-7042TP作為SIP系統的播放終端,可…

【腳踢數據結構】常見樹總結(圖碼結和版)

(??? ),Hello我是祐言QAQ我的博客主頁:C/C語言,Linux基礎,ARM開發板,軟件配置等領域博主🌍快上🚘,一起學習,讓我們成為一個強大的攻城獅!送給自己和讀者的…