Linux之環境變量(內容由淺入深,層層遞進)

一、概念介紹(來源:比特就業課)

  • 環境變量一般是指在操作系統中用來指定操作系統運行環境的一些參數

  • 環境變量通常具有某些特殊用途,并且在系統中通常具有全局特性

二、現象引入與解答

1.為什么像ls這樣的系統指令可以直接執行,而我們生成的可執行程序不能像這樣運行呢,而應該寫成路徑+文件名的形式呢?
在這里插入圖片描述
解答:因為系統指令ls會自動默認的去環境變量PATH中去查找,若能夠在眾多路徑下找到,便能夠成功執行,否則報以上錯誤。可以見一見:
在這里插入圖片描述
可以看到ls是可以找到的,PATH環境變量的值中路徑用:分隔,查找時從左到右依次查找。(解決方法最后)
2.main函數有沒有參數呢?
解答:其實是有的,那么參數有哪些呢?這里我把他們全部展示出來,見如下:
在這里插入圖片描述
3.這些參數是由哪個傳遞的呢?
解答:其實是該程序的父進程Shell(bash)傳遞的。
4.前連個參數具體代表什么呢?
解答:我們在命令行中輸入的任何指令,比如“ ls -a -l”都是以字符串(整體)的形式給到bash進程進行分割處理,得到“ls”, “-a”,“-l”,然后用一個char* argv[]把分割的字符串給管理起來,這樣一張表就叫做“命令行參數表”,“ls”就是我們要執行的程序,“-a,“-l”是選項,用于實現該程序的不同的子功能,其中argc就是分割后字符串的個數,argv用NULL結尾,表示參數傳遞完畢。為了能夠更形象,可見下圖:在這里插入圖片描述
在這里插入圖片描述
5.最后一個參數代表什么呢?
解答:首先我們需要明確,要執行一個程序,必須先找到它,其次系統中的環境變量(PATH)是用來幫助系統找到要執行的目標二進制文件,是系統中搜索指令的默認搜索路徑!環境變量的形式為:名稱=內容(這種類似鍵值的形式)。如何理解環境變量呢?需要從存儲的角度,即bash會形成一張環境變量表,該環境變量表同命令行參數表一樣也是char* argv[]類型的,那么環境變量,最開始是從哪里來的呢?答案是從系統的相關配置文件中來的,見圖如下:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
舉例說明:比如執行ls命令就回到PATH中去找,又比如cd ~指令,就會找到HOME這個環境變量。
在這里插入圖片描述
結論:bash會有兩張表,一張叫命令行參數表argv,另一張叫環境變量表env(重要)
推導:如果Linux系統有10個用戶登錄,就存在10個bash,那么每個bash都會有從配置文件中來的環境變量,形成一張環境變量表

三、獲取環境變量的方法

指令方式:
①export 環境變量(需要注意的是,export屬于內建命令,不會創建新進程,export會被bash直接執行,調用相關的系統調用)
在這里插入圖片描述
②env(直接運行該指令便可以看到所有的環境變量,如果做了第一個操作,那么也可在看到)
③echo $環境變量(直接顯示該環境變量的內容)
在這里插入圖片描述
④unset 環境變量 (直接刪除該環境變量)
在這里插入圖片描述
代碼方式:
①方法一:父進程(bash)的環境變量可以被子進程繼承
②方法二:使用getenv()
在這里插入圖片描述
③方法三:extern char** environ,使用全局指針(需聲明)

四、理解環境變量的特性

①環境變量具有全局特性
②bash會記錄兩套變量:環境變量、本地變量(本地變量不會被子進程繼承,只會在bash內部被使用)

五、認識更多的環境變量

常見的:
在這里插入圖片描述
HOSTNAME:主機名
TREM:終端類型(如xterm、xterm-256color、screen、vt100等)
SHELL:命令行解釋器的類型
USER:用戶名
PATH:默認搜索路徑
PWD:記錄當前用戶所在的路徑
HOME:家目錄
LOGNAME:登錄用戶名
OLDPWD:記錄舊的路徑(舉例:cd -)
HISTSIZE:定義Shell歷史命令巨鹿的最大條數
LANG:定義系統的默認語言和字符編碼

六、解決方法

①方法一:直接將程序移動到PATH環境變量中的任何一個路徑下
②方法二:直接將程序所在的路徑追加到PATH環境變量值之后(例:export PATH=$PATH:想要添加的路徑)
③方法三:修改配置文件.bash_profile(適用于登錄Shell)/.bashrc(適用于交互式Shell)

echo 'export MY_VAR="value"' >> ~/.bash_profile
source ~/.bash_profile
echo 'export MY_VAR="value"' >> ~/.bashrc  # 追加到文件末尾
source ~/.bashrc                           # 立即生效(無需重啟)

方法四:使用export直接設置

export MY_VAR="value"  # 設置環境變量
echo $MY_VAR           # 檢查是否生效
//特點:
//僅在當前 Shell 及其子進程(如新開的終端、腳本)中有效。
//重新連接 SSH 后會消失(因為新會話會重新加載 Shell 配置文件)。

七、相關代碼

#include<stdio.h>
#include<stdlib.h>
//main有參數嗎?有
#include<unistd.h>
int main(int argc,char* argv[],char* env[]){(void)argv;(void)argc;(void)env;extern char** environ;for(int i=0;environ[i];i++){printf("env[%d]=>%s\n",i,environ[i]);}return 0;
}//int main(int argc,char* argv[],char* env[]){
//  (void)argv;
//  (void)argc;
//  (void)env;
//  char* path=getenv("PATH");
//  printf("PATH=%s\n",path);
//  return 0;
//}//int main(int argc,char* argv[],char* env[]){
//  (void)argv;
//  (void)argc;
//  for(int i=0;env[i];i++){
//    printf("env[%d]=>%s\n",i,env[i]);
//  }
//  return 0;
//}//int main(int argc,char* argv[]){
//  for(int i=0;i<argc;i++){
//    printf("argv[%d]:%s\n",i,argv[i]);
//  }
//  return 0;
//}

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

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

相關文章

監控 Linux 服務器資源

使用 Bash 腳本監控 Linux 服務器資源并發送告警郵件前言一、&#x1f6e0;? 腳本功能概覽二、 &#x1f4dc; 腳本核心邏輯分解2.1. 變量初始化2.2. CPU 使用率監控2.3. 內存使用率監控2.4. 磁盤使用率監控2.5. 磁盤 IO 延遲監控&#xff08;await&#xff09;2.6. 網絡流量監…

隨機獲取數組內任意元素

Math.random() * arr.length 是 JavaScript 中常用的表達式&#xff0c;用于生成一個范圍在 [0, arr.length) 之間的隨機浮點數&#xff08;包含 0&#xff0c;但不包含數組長度本身&#xff09;。 作用說明&#xff1a; Math.random() 生成一個 [0, 1) 區間的隨機浮點數&#…

android studio gradle 訪問不了

1.通過國內鏡像站 2.通過本地部署 參考這個搞定 https://blog.csdn.net/2401_82819685/article/details/144542784

科普:企業微信的第三方應用涉及的“配置應用權限”

企業微信的第三方應用涉及“配置應用權限”&#xff0c;它在不同階段含義不同&#xff1a;開發階段意指應用自身所需的功能權限&#xff0c;安裝階段意指企業管理員對應用使用范圍的控制&#xff0c;產生此歧義的問題&#xff0c;歸根到低還是語言的縮寫問題&#xff0c;設想一…

YOLOv11改進大全:從卷積層到檢測頭,全方位提升目標檢測性能

## 1 引言YOLO&#xff08;You Only Look Once&#xff09;系列作為目標檢測領域的重要算法&#xff0c;以其**高效推理**和**良好精度**贏得了廣泛認可。2024年9月&#xff0c;Ultralytics團隊正式發布了YOLOv11&#xff0c;在先前版本基礎上引入了**多項架構改進**和**訓練優…

JWT全面理解

目錄 一、JWT是什么 1、身份認證&#xff08;最核心用途&#xff09; 2、信息交換 3、授權控制 二、JWT的核心價值 三、如何理解JWT的結構和工作原理 1、三部分結構解析 2、核心工作流程 四、JWT的使用步驟 1、添加依賴 2、添加配置文件 3、創建實體類 4、創建JWT…

量子文件傳輸系統:簡單高效的文件分享解決方案

&#x1f310; 在線體驗地址&#xff1a;https://share-file.narutogis.com/ &#x1f4e4; 項目概述 量子文件傳輸系統是一款基于Python Flask開發的高效文件管理與分享工具&#xff0c;致力于提供簡單、安全、可靠的文件傳輸解決方案。系統支持用戶管理、文件上傳下載、自動…

基于 GitHub Actions 的零成本自動化部署:把 Vite/Vue3 項目一鍵發布到 GitHub Pages 的完整實戰

1. 實現自動化部署1.1. 創建 vue 項目# 1. 安裝/確認 Node.js&#xff08;>14&#xff09; node -v # 推薦 20.x# 2. 創建項目&#xff08;交互式&#xff0c;選 Vue3 Router 等&#xff09; npm init vuelatest github-actions-demo # 創建vite項目 # 或&#xff1a;v…

minio 文件批量下載

MinIO 批量下載功能說明 1. 功能描述 前端勾選多個對象文件后&#xff0c;一次性將這些對象從 MinIO 拉取并打包成 ZIP&#xff0c;通過瀏覽器直接下載。整體特性&#xff1a; 支持跨桶批量下載&#xff08;不同 bucket 的對象可同時下載&#xff09;。服務端采用流式壓縮邊…

機器學習11——特征選擇與稀疏學習

上一章&#xff1a;機器學習10——降維與度量學習 下一章&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備[TOC] 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到…

整理python快速構建數據可視化前端的Dash庫

一.Dash框架# 導入 Dash 相關庫 import dash from dash import dcc, html # dcc 是 Dash 核心組件庫&#xff0c;html 是 HTML 組件庫 from typing import Generic# 創建一個 Dash 應用實例 app dash.Dash(__name__)# 定義應用的布局 app.layout html.Div(children[# 添加一…

RNN循環神經網絡(一):基礎RNN結構、雙向RNN

RNN循環神經網絡 什么是循環神經網絡&#xff1f; 循環神經網絡&#xff08;Recurrent Neural Network, RNN&#xff09;是一類專門用于處理序列數據的神經網絡架構。與傳統的前饋神經網絡不同&#xff0c;RNN具有"記憶"能力&#xff0c;能夠捕捉數據中的時間依賴關系…

#C語言——刷題攻略:牛客編程入門訓練(十):攻克 循環控制(二),輕松拿捏!

&#x1f31f;菜鳥主頁&#xff1a;晨非辰的主頁 &#x1f440;學習專欄&#xff1a;《C語言刷題合集》 &#x1f4aa;學習階段&#xff1a;C語言方向初學者 ?名言欣賞&#xff1a;"代碼行數決定你的下限&#xff0c;算法思維決定你的上限。" 目錄 1. BC82 乘法表…

daily notes[16]

文章目錄意大利語單詞 **“bello”**一、核心含義二、變形規則&#xff1a;最重要的部分1. 當 “bello” 位于 **名詞前面** 時2. 當 “bello” 位于 **名詞后面** 或 **動詞后面** 時三、用法總結與對比四、其他用法和常見表達references意大利語單詞 “bello” 融合了 指示形…

【知識庫】計算機二級python操作題(二)

文章目錄基本操作題1基本操作題2基本操作題3簡單應用題1簡單應用題2綜合應用題1基本操作題1考生文件夾下存在一個文件PY101.py&#xff0c;請寫代碼替換橫線&#xff0c;不修改其他代碼&#xff0c;實現以下功能&#xff0c;隨機選擇一個手機品牌屏幕輸出。 # 請在...處使用一行…

Nginx 服務用戶與防盜鏈配置

目錄 Nginx 服務用戶與防盜鏈配置 1. 隱藏版本號 1.1 配置方法 1.2 生效與驗證 2. 修改當前程序賬號 2.1 操作步驟 3. 緩存時間 3.1 配置方法 3.2 說明 4. 日志分割 4.1 實現方式&#xff08;腳本自動分割&#xff09; 5. 連接超時時間 5.1 核心超時指令&#xff0…

域格4G模塊通信協議之HTTP(三):下載大文件的兩種方式

域格ASR系列模塊支持HTTP下載大文件&#xff0c;本文將提供兩種方式。一、直接通過URC上報數據基礎操作核心指令說明配置說明響應說明應用示例注意點二、HTTP Range分段下載核心指令說明注意點一、直接通過URC上報數據 若文件體積適中&#xff0c;且需要 MCU 即時處理數據&…

Android 圖片 OOM 防護機制設計:大圖加載、內存復用與多級緩存

1. 為什么圖片加載總讓 Android 開發抓狂? 圖片是 Android 應用中不可或缺的元素,從用戶頭像到高清壁紙,從商品詳情頁到動態表情包,圖片無處不在。然而,圖片加載是內存管理的雷區,稍不留神就可能觸發臭名昭著的 OutOfMemoryError(OOM)。為啥圖片這么“吃內存”?原因很…

9月9日

TCP 服務器端#include <myhead.h> #define SER_PORT 8888 //服務器端口號 #define SER_IP "192.168.108.179" //服務器IP地址 int main(int argc, const char *argv[]) {//創建一個用于連接的套接字文件描述符int sfd socket(AF_INET, SOCK_STRE…