1. 程式人生 > 其它 >Linux作業系統基礎知識

Linux作業系統基礎知識

技術標籤:Linuxlinux

Linux作業系統基礎知識

1、Linux簡介與程式開發環境

1.1 什麼是Linux?

Linux是一個可以自由釋出的類UNIX核心實現,它是一個作業系統的底層核心。Linux是由芬蘭赫爾辛基大學的Linus開發,期間得到了網上廣大UNIX程式設計師的幫助。它最初是受其教授的Minix(一個小型的類UNIX系統)啟發而開發的程式,純屬個人的愛好,但是後來它自身逐步發展成為一個完整的系統。
要理解什麼是Linux,首先要了解在Linux之前誕生的系統和應用程式——UNIX和GNU軟體。

1.1.1 什麼是UNIX?

UNIX作業系統最初是由貝爾實驗室開發的,當時的貝爾實驗室是電信巨頭AT&T(美國電報電話公司)旗下的一員。如今,它已經成為一種非常流行的多使用者、多工作業系統。UNIX作業系統可以執行在大量不同種類的硬體平臺上,其適用範圍從PC機到多處理器伺服器和超級計算機。

在UNIX上進行程式開發有些典型的風格和特點:

1)簡單性:許多很有用的UNIX工具是非常簡單的。“小而簡單”是一種值得學習的技術。越大、越複雜的系統註定會包含越大、越複雜的錯誤。
2)集中性:讓一個程式很好地執行一項任務好過把所有功能都堆在一起。功能臃腫的程式難於使用和維護,單一目標的程式更容易隨著更好的演算法被開發出來而得到改進。在UNIX中,當用戶出現新的需求時,我們通常是把小工具組合起來完成更復雜的任務,而不是試圖將一個使用者期望的所有功能放在一個大程式裡。
3)可重用的元件:將應用程式的核心實現為庫。具有簡單而靈活的程式設計介面的庫可以幫助其他人開發出同類程式,或者把這些技術應用到新的應用領域。

1.1.2 GNU專案和自由軟體基金會

有了作業系統核心還不夠,Linux能夠發展到今天是無數人共同努力的結果。作業系統核心本身僅僅是可用開發系統的一小部分。一般的UNIX系統還包括提供系統服務和工具的應用程式,對於Linux系統,這些程式是由許多程式設計師編寫並自由釋出的。
Linux社群支援自由軟體的概念,即軟體本身不應受限,它們遵守GNU(GNU是GNU’s Not UNIX的遞迴縮寫)通用公共許可證(GPL)。
自由軟體基金會(Free Software Foundation)是由Richard Stallman創立,其宗旨是:試圖建立一個與UNIX系統相容,但並不受UNIX名字和原始碼私有權限制的作業系統和開發環境。

GNU專案已經為軟體社群提供了許多UNIX系統上應用程式的仿製品。例如大名鼎鼎的:
GCC:GNU編譯器集,它包括GNU C編譯器。
G++:G++編譯器,是GCC的一部分。
GDB:原始碼級的偵錯程式。
GNU make
bash:命令直譯器(shell的一種)
有了這些可用的自由軟體,再加上Linux核心,我們可以說:建立一個GNU的、自由的類UNIX系統的目標已經通過Linux系統實現了。由於GNU軟體做出的貢獻,現在許多人通常把Linux系統稱為GNU/Linux。

1.2 程式開發環境

工欲善其事必先利其器,想要進行Linux程式開發需要先搭建開發環境。

1.2.1 Linux環境安裝

進行 Linux 開發需要安裝一個 linux 系統環境,一般使用 VMWare 安裝Ubuntu 系統進行開發。具體安裝過程大家可以參考以下帖子https://zhuanlan.zhihu.com/p/38797088這裡我就不做過多介紹。

1.2.2 SSH

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的安全網路協議。傳統的網路服務程式,如 FTP、 Pop 和 Telnet 其本質上都是不安全的;因為它們在網路上用明文傳送資料、使用者帳號和使用者口令,很容易受到中間人攻擊方式的攻擊。
SSH 分為客戶端 openssh-client 和伺服器 openssh-server,我們需要在 ubuntu 系統下安裝 ssh 伺服器,以便使用 ssh 客戶端登入到系統。

1)安裝ssh

sudo apt update

sudo apt install openssh-server

2)啟動ssh

sudo service ssh start

3)使用ip addr show命令檢視 ubuntu 系統 ip

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-uFXkhSSn-1609830692261)(/uploads/knowledge-space/images/m_3acaa296fa911d4e48534ebe977e4f2f_r.png)]

可以看出,當前 ubuntu IP 地址為 192.168.176.148

4)測試 ssh 登入

在 Ubuntu 上安裝完成 ssh 伺服器後,接下來在 Windows 系統下使用 MobaXterm 進行連線,測試 ssh 伺服器是否安裝成功。 操作步驟如下:
執行 Xterm 軟體,選擇“Session”,如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-dIvZrBza-1609830692273)(/uploads/knowledge-space/images/m_31e28b68657c3056ca72ba6f443c7285_r.png)]

點選“SSH”並進行設定,如下圖所示:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-pOamZZh1-1609830692275)(/uploads/knowledge-space/images/m_9d334f083b99432ea294190df49be3cc_r.png)]

在該對話方塊中,選擇“協議”為“SSH”, “主機名”為ubuntu的 IP 地址,使用者名稱為ubuntu 的使用者名稱。埠號使用預設值 22。 設定完成後,點選"OK",出現如下命令列終端,表示已經連線上虛擬機器的ubuntu系統。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-U7WmI4L6-1609830692277)(/uploads/knowledge-space/images/m_a093d0585ee454f23fc4f6f3489ffa95_r.png)]

通過這種方法,確定主機和開發板之間網路通訊正常後,即可以登入到開發板上。

5)安裝 Visual Studio Code

Visual Studio Sode(簡稱 VSCode)是微軟出的一款免費的編輯器,有 Windows、 Linux 和 macOS 三個版本,是一款跨平臺編輯器。 安裝過程大家可以自行搜尋,這裡主要介紹用於C/C++程式開發的擴充套件包,安裝步驟見下圖:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-CalA88kr-1609830692278)(/uploads/knowledge-space/images/m_c40ae15fe144a53c73ebd52393488d9d_r.png)]

常用的有如下外掛需要安裝:
C/C++。
C/C++ Snippets,即 C/C++重用程式碼塊。
C/C++ Advanced Lint,即 C/C++靜態檢測 。
Code Runner,即程式碼執行。
Include AutoComplete,即自動標頭檔案包含。
Rainbow Brackets,彩虹花括號,有助於閱讀程式碼。
One Dark Pro, VSCode 的主題。
GBKtoUTF8,將 GBK 轉換為 UTF8。
ARM,即支援 ARM 彙編語法高亮顯示。
Chinese(Simplified),即中文環境。
vscode-icons, VSCode 圖示外掛,主要是資源管理器下各個資料夾的圖示。
compareit,比較外掛,可以用於比較兩個檔案的差異 
DeviceTree,裝置樹語法外掛。
Markdown Preview Enhanced, markdown 預覽外掛。
Maridown pdf,將.md 檔案轉換成其他格式。 

2、Linux常用命令

Linux的命令有幾百個,對於初學者來說,常用的並不多,並不需要全部掌握。在平時的學習和工作過程中,遇到了陌生的Linux命令,多查資料,日積月累,自然就記住了。下面為大家介紹Linux最基礎的25個命令。

1、清屏

clear

2、檢視伺服器ip地址

ip addr

3、檢視時間

date

4、目錄和檔案

檔案系統像一棵樹,樹幹是/(根)目錄,樹枝是子目錄,樹枝後面還有樹枝(子目錄中還有子目錄),目錄的最後是檔案。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-2WWVaSNL-1609830692279)(/uploads/knowledge-space/images/m_04a5ce2aa9fe1d9cde90438f55dc80eb_r.png)]

目錄和檔案的路徑分為絕對路徑和相對路徑,絕對路徑是從根(/)算起,例如/usr/etc/readme.txt。相對路徑是從當前工作目錄算起,如果當前工作目錄是/usr,etc/readme.txt等同於/usr/etc/readme.txt。此外,需要注意的是:一個圓點.表示當前工作目錄;兩個圓點…表示當前工作目錄的上一級目錄。
下面為大家簡單介紹Linux系統目錄結構,為了避免諸多使用者對 Linux 系統目錄結構天馬行空,Linux 基金會發布了 FHS 標準。多數 Linux 發行版系統都遵循這一標準。注:FHS(Filesystem Hierarchy Standard),檔案系統層次化標準,該標準規定了 Linux 系統中所有一級目錄以及部分二級目錄(/usr 和 /var)的用途。釋出此標準的主要目的就是為了讓使用者清楚地瞭解每個目錄應該存放什麼型別的檔案。

1)Linux 根目錄(/)

FHS 認為,Linux 系統的根目錄(/)最為重要,其原因有以下 2 點:
1. 所有目錄都是由根目錄衍生出來的;
2. 根目錄與系統的開機、修復、還原密切相關;
因此,根目錄必須包含開機軟體、核心檔案、開機所需程式、函式庫、修復系統程式等檔案,如下表所示。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-1PXkUcTu-1609830692280)(/uploads/knowledge-space/images/m_bccc444e5983e7e832a00f5e6ce0d8a7_r.png)]

2)Linux /usr目錄

usr(注意不是 user),全稱為 Unix Software Resource,此目錄用於儲存系統軟體資源。FHS 建議開發者,應把軟體產品的資料合理的放置在 /usr 目錄下的各子目錄中,而不是為他們的產品建立單獨的目錄。
Linux 系統中,所有系統預設的軟體都儲存在 /usr 目錄下,/usr 目錄類似 Windows 系統中 C:\Windows\ + C:\Program files\ 兩個目錄的綜合體。
FHS 建議,/usr 目錄應具備下表所示的子目錄。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-wMqBknpl-1609830692281)(/uploads/knowledge-space/images/m_ee0d0487e93d6929cd040af413691b8b_r.png)]

3)Linux /var 目錄

/var 目錄用於儲存動態資料,例如快取、日誌檔案、軟體執行過程中產生的檔案等。通常,此目錄下建議包含如表 4 所示的這些子目錄。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-mIckxkS6-1609830692281)(/uploads/knowledge-space/images/m_cd59bd68c03c9a2bb29ccfa5abdb8051_r.png)]

5、檢視當前目錄

pwd

6、改變當前工作目錄

cd 目錄名

示例:

1)進入/tmp目錄

cd /tmp

2)進入上一級目錄

cd ..

3)進入使用者的主目錄

cd

7、列出目錄和檔案資訊

ls是list的縮寫,通過 ls 命令不僅可以檢視目錄和檔案資訊,還可以檢視目錄和檔案的許可權、大小、主人和組等資訊。
選項 -l 列出目錄和檔案的詳細資訊。
示例:

1)列出當前工作目錄下全部的目錄和檔名資訊

ls

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-z7QBOQET-1609830692282)(/uploads/knowledge-space/images/m_293402e9b541f2b5c31fb13ceb96867b_r.png)]

2)列出當前工作目錄下全部的目錄和檔名詳細的資訊

ls -l

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-DoXm3yFo-1609830692283)(/uploads/knowledge-space/images/m_7b050ab76ee8691805766c81cdbe7a31_r.png)]

3)正則表示式

正則表示式又稱規則表示式、萬用字元,目錄和檔名都支援正則表示式,正則表示式的規則比較多,在這裡我們只需要掌握最常用的兩種:星號 “*” 。

星號 “*” :匹配任意數量的字元。

例如:ls open*.zip

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-eNpcRf6t-1609830692284)(/uploads/knowledge-space/images/m_9b1ff134c81e379b7f10893d59d5a691_r.png)]

8、建立目錄

1)在當前工作目錄下建立aaa目錄

mkdir aaa

2)在當前工作目錄下建立aaa目錄,並在aaa目錄下建立bbb目錄

mkdir aaa/bbb -p

9、刪除目錄和檔案

rm [-rf]目錄或檔案

選項-r可以刪除目錄,如果沒有-r只能刪除檔案。

選項-f表示強制刪除,不需要確認。

1)刪除aaa目錄

rm aaa -r

2)強制刪除當前工作目錄下的ccc.c檔案

rm -f ccc.c

9、移動目錄和檔案

mv 舊目錄或檔名 新目錄或檔名

1)把當前工作目錄中的 book.c 檔案重新命名為 book1.c

mv book.c book1.c

2)如果OPC/test3是一個已經存在的目錄,以下命令將把當前工作目錄下的 book.c 檔案移動到 OPC/test3 目錄中。

mv book.c OPC/test3

3)如果 OPC/test3目錄不存在,以下命令將把當前工作目錄下的 book.c 檔案改名為 OPC/test3。

mv book.c OPC/test3

10、複製目錄和檔案

cp [-r] 舊目錄或檔名 新目錄或檔名

注:-r 是遞迴的意思,英文 recursion

選項-r可以複製目錄,如果沒有選項-r只能複製檔案。

示例:

1)把當前工作目錄下的book1.c檔案複製為book2.c

cp book1.c book2.c

2)把當前工作目錄下的aaa目錄複製為bbb

cp aaa bbb -r

3)把當前工作目錄下的book1.c檔案複製為aaa/book1.c

cp book1.c aaa/book1.c

cp book1.c aaa/.

以上兩個命令的效果相同。

4)把當前工作目錄下的aaa目錄複製為/tmp/aaa

cp -r aaa /tmp/aaa

cp -r aaa /tmp/.

以上兩個命令的效果相同。

11、判斷網路是否連通

ping -c 包的個數 ip地址或域名

ping用於確定本地主機是否能與另一臺主機成功交換資料包,判斷網路是否通暢。

1)向本地主機(127.0.0.1)ping五個包

ping -c 5 127.0.0.1

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-FJWLek06-1609830692285)(/uploads/knowledge-space/images/m_7600e3a8cd8bf272440a5dd7ee3faea9_r.png)]

2)向百度 www.baidu.com.cn 的伺服器ping五個包

ping -c 5 www.baidu.com.cn

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-jDvRTJf0-1609830692285)(/uploads/knowledge-space/images/m_8d74a35052cc22cc8f25e11316497455_r.png)]

可以看出百度的伺服器是可以ping通的。

3)向谷歌 www.google.com 的伺服器ping五個包。

ping -c 5 www.google.com

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-vPSatzhb-1609830692286)(/uploads/knowledge-space/images/m_ba02e164454544411d95dbf622bc2a29_r.png)]

可以看出谷歌的伺服器是ping不通的。

12、顯示文字檔案的內容

顯示文字檔案的內容有三個命令:catmoretail

1)cat 命令

cat 檔名

cat命令一次顯示整個檔案的內容。

cat main.cpp

2)more 命令

more 檔名

為了方便閱讀,more命令分頁顯示檔案的內容,按空格鍵顯示下一頁,按b鍵顯上一頁,按q鍵退出。

3)tail 命令

tail -f 檔名

tail -f用於顯示文字檔案的最後幾行,如果檔案的內容有增加,就實時的重新整理。對程式設計師來說,tail -f極其重要,可以動態顯示後臺服務程式的日誌,用於除錯和跟蹤程式的執行。

13、統計文字檔案的行數、單詞數和位元組數

wc(word count)功能為統計指定的檔案中位元組數、字數、行數,並將統計結果輸出

wc 檔名

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-5WJ0ee5H-1609830692287)(/uploads/knowledge-space/images/m_c2f26cd251a2e24572e8fc7a92a5ce74_r.png)]

14、搜尋檔案中的內容

grep "內容" 檔名

注意,如果內容中沒有空格等特殊字元,可以不用雙引號括起來。

示例:

1)在main.cpp檔案中搜索signal

grep signal main.cpp

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-dHVBYmDC-1609830692288)(/uploads/knowledge-space/images/m_a0421d1bebc5110b8d60192112e3f4f4_r.png)]

15、搜尋檔案

1)find

find 目錄名 -name 檔名

引數說明:
目錄名:待搜尋的目錄,搜尋檔案的時候,除了這個目錄名,還包括它的各級子目錄。
檔名:待搜尋的檔名匹配的規則。
示例:
從 OPC 目錄開始搜尋,把全部的 *.cpp 檔案顯示出來。

find OPC -name *.cpp

2)locate

locate 檔名

示例:
搜尋open62541.c檔案

locate open62541.c

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-XxkjY4Tq-1609830692288)(/uploads/knowledge-space/images/m_5e530ccb42a80da066fdab82f8cb2507_r.png)]

注意:第一次使用該命令,可能需要更新資料庫,按照提示的命令執行一下就好了.

find多用於在某個目錄下進行模糊搜尋,而locate則是進行全盤準確定位。

16、chmod命令

用於改變linux檔案或目錄的訪問許可權。該命令有兩種用法。一種是包含字母和操作符表示式的文字設定法;另一種是包含數字的數字設定法。

每一檔案或目錄的訪問許可權都有三組,每組用三位表示,分別為檔案屬主的讀、寫和執行許可權;與屬主同組的使用者的讀、寫和執行許可權;系統中其他使用者的讀、寫和執行許可權。

舉例:ls -l example

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-unwbQZOx-1609830692289)(/uploads/knowledge-space/images/m_94a44a8276b3927346546e6b3af918e4_r.png)]

第一列共有10個位置,第一個字元指定了檔案型別。在通常意義上,一個目錄也是一個檔案。如果第一個字元是橫線,表示是一個非目錄的檔案。如果是d,表示是一個目錄。從第二個字元開始到第十個共9個字元,3個字元一組,分別表示了3組使用者對檔案或者目錄的許可權。許可權字元用橫線代表空許可,r代表只讀,w代表寫,x代表可執行。

   常用引數:

   -c 當發生改變時,報告處理資訊

   -R 處理指定目錄以及其子目錄下所有檔案

   許可權範圍:

   u :目錄或者檔案的當前的使用者

   g :目錄或者檔案的當前的群組

   o :除了目錄或者檔案的當前使用者或群組之外的使用者或者群組

   a :所有的使用者及群組

   許可權代號:

   r :讀許可權,用數字4表示

   w :寫許可權,用數字2表示

   x :執行許可權,用數字1表示

   - :刪除許可權,用數字0表示

   s :特殊許可權

示例:

1)刪除檔案 example 所有使用者可執行許可權

chmod a-x example

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-Vjm7lKhu-1609830692289)(/uploads/knowledge-space/images/m_702e21593054a5a8580cdbf6f653636d_r.png)]

2)給 example 的屬主分配讀、寫、執行(7)的許可權,給 example 的所在組分配讀、執行(5)的許可權,給其他使用者分配執行(1)的許可權

chmod 751 example -c

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-WNmLG4TP-1609830692290)(/uploads/knowledge-space/images/m_aeba7bc34b67d4dfeeb6780d7e9df9ff_r.png)]

3)將aaa目錄及其子目錄所有檔案新增可讀許可權

chmod u+r,g+r,o+r -R text/ -c

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-diZiHxp4-1609830692290)(/uploads/knowledge-space/images/m_cacb177e32671dcbd0eee1626e1af0b2_r.png)]

17、檢視系統磁碟空間

df [-h] [-T]

選項-h以方便閱讀的方式顯示資訊:

df -h

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-YrikrQD9-1609830692291)(/uploads/knowledge-space/images/m_f86e503ae01397eefb3911ae8aaa78df_r.png)]
其中/dev/sdal為可用的磁碟。

選項-T列出檔案系統型別:

df -h -T

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-z0fLVzpw-1609830692292)(/uploads/knowledge-space/images/m_8f8d047a5403826cbe6d29c91493a716_r.png)]

3、Linux環境變數講解

3.1 環境變數的概念

3.1.1 什麼是環境變數?

程式(作業系統命令和應用程式)的執行都需要執行環境,這個環境是由多個環境變數組成的。

3.1.2 環境變數的分類

1)按生效的範圍分類。

系統環境變數:公共的,對全部的使用者都生效。

使用者環境變數:使用者私有的、自定義的個性化設定,只對該使用者生效。

2)按生存週期分類。

永久環境變數:在環境變數指令碼檔案中配置,使用者每次登入時會自動執行這些指令碼,相當於永久生效。

臨時環境變數:使用時在Shell中臨時定義,退出Shell後失效。

3)Linux環境變數

Linux環境變數也稱之為Shell環境量變,以下劃線和字母打頭,由下劃線、字母(區分大小寫)和數字組成,習慣上使用大寫字母,例如PATH、HOSTNAME、LANG等。

3.2 常用的環境變數

3.2.1 檢視環境變數

1)env命令

在Shell下,用env命令檢視當前使用者全部的環境變數。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-ZjeYzjJh-1609830692292)(/uploads/knowledge-space/images/m_7b716fdfaf10a18ce41b49f9f3a50739_r.png)]
上圖只截取了部分環境變數,並非全部。

注:用env命令的時候,滿屏顯示了很多環境變數,不方便檢視,可以用grep篩選。

env|grep 環境變數名

例如檢視環境變數名中包含PATH的環境變數。

env|grep PATH

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-cTaDjG17-1609830692293)(/uploads/knowledge-space/images/m_7688e5c03a49dd27c7e08bc746cdd60e_r.png)]

2)echo命令

echo $環境變數名

例如:echo $LANG

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-T6M1NFwy-1609830692294)(/uploads/knowledge-space/images/m_6fb13bcc6dea633f2797e848c6424e72_r.png)]

注意,符號$不能缺少,Linux系統就像人類社會,給錢就給你看資訊,哈哈。

3.2.2 常用的環境變數

1)PATH

可執行程式的搜尋目錄,可執行程式包括Linux系統命令和使用者的應用程式,PATH變數的具體用法本文後面的章節中有詳細的介紹。

2)LANG

Linux系統的語言、地區、字符集。

echo $LANG

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-z0deaOQb-1609830692294)(/uploads/knowledge-space/images/m_82b6a1e0a6e9aedc1349f3ea014de088_r.png)]

3)HOSTNAME

伺服器的主機名。

echo $HOSTNAME

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-3u90Jx9K-1609830692295)(/uploads/knowledge-space/images/m_0f583b89380f3411d614ec26eb7eea9d_r.png)]

4)SHELL

使用者當前使用的Shell解析器。

echo $SHELL

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-4Jrdrn7T-1609830692296)(/uploads/knowledge-space/images/m_f8cb1b58e702cd7b2e61cd3d3d110499_r.png)]

5)HISTSIZE

儲存歷史命令的數目。

6)USER

當前登入使用者的使用者名稱。

echo $USER

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-FHiX1He6-1609830692296)(/uploads/knowledge-space/images/m_a80c441657d3b9989b54f3b714baf5e2_r.png)]

7)HOME

當前登入使用者的主目錄。

echo $HOME

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-IuvqPIFS-1609830692297)(/uploads/knowledge-space/images/m_014b018d5cf417f4fc20a50de87c0aec_r.png)]

8)PWD

當前工作目錄。

echo $PWD

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-8JtoOOQI-1609830692297)(/uploads/knowledge-space/images/m_a8a0ea2dbdf3c4242b5db4449114b312_r.png)]

9)LD_LIBRARY_PATH

C/C++語言動態連結庫檔案搜尋的目錄,它不是Linux預設的環境變數,但對C/C++程式設計師來說非常重要,具體用法本文後面的章節中有詳細的介紹。

3.3 設定環境量

export 變數名='值'

如果環境變數的值沒有空格等特殊符號,可以不用單引號包含。

示例:

export PATH=$PATH:.

以上命令為當前shell的環境變數PATH新增.目錄(是.)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

以上命令為當前shell的環境變數LD_LIBRARY_PATH新增.目錄

採用export設定的環境變數,在退出Shell後就會失效,下次登入時需要重新設定。如果希望環境變數永久生效,需要在登入指令碼檔案中配置。

3.3.1 系統環境變數

系統環境變數對全部的使用者生效,設定系統環境變數有三種方法。

1)在/etc/profile檔案中設定。

使用者登入時執行/etc/profile檔案中設定系統的環境變數。但是,Linux不建議在/etc/profile檔案中設定系統環境變數。

2)在/etc/profile.d目錄中增加環境變數指令碼檔案,這是Linux推薦的方法。

/etc/profile在每次啟動時會執行 /etc/profile.d下全部的指令碼檔案。/etc/profile.d比/etc/profile好維護,不想要什麼變數直接刪除 /etc/profile.d下對應的 shell 指令碼即可。

/etc/profile.d目錄下有很多指令碼檔案,例如:

ls /etc/profile.d

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-k7amcCYX-1609830692298)(/uploads/knowledge-space/images/m_80b0b1c776fafc38064f0dce696d1428_r.png)]

3)在/etc/bashrc檔案中設定環境變數。

該檔案配置的環境變數將會影響全部使用者使用的bash shell。但是,Linux也不建議在/etc/bashrc檔案中設定系統環境變數。

3.3.2 使用者環境變數

使用者環境變數只對當前使用者生效,設定使用者環境變數也有多種方法。

在使用者的主目錄,有幾個特別的檔案,用ls是看不見的,用ls .bash*可以看見。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-8NIvXDmS-1609830692298)(/uploads/knowledge-space/images/m_3b4ad902be8d05577f352129521c9ee4_r.png)]

1).bash_profile(推薦首選)

當用戶登入時執行,每個使用者都可以使用該檔案來配置專屬於自己的環境變數。

2).bashrc

當用戶登入時以及每次開啟新的Shell時該檔案都將被讀取,不推薦在裡面配置使用者專用的環境變數,因為每開一個Shell,該檔案都會被讀取一次,效率肯定受影響。

3).bash_logout

當每次退出系統(退出bash shell)時執行該檔案。

4).bash_history

儲存了當前使用者使用過的歷史命令。

3.3.3 環境變數指令碼檔案的執行順序

環境變數指令碼檔案的執行順序如下:

/etc/profile->/etc/profile.d->/etc/bashrc->使用者的.bash_profile->使用者的.bashrc

同名的環境變數,如果在多個指令碼中有配置,以最後執行的指令碼中的配置為準。

3.4 重要環境變數的詳解

1、PATH環境變數

可執行程式的搜尋目錄,可執行程式包括Linux系統命令和使用者的應用程式。如果可執行程式的目錄不在PATH指定的目錄中,執行時需要指定目錄。

1)PATH環境變數存放的是目錄列表,目錄之間用冒號:分隔,最後的圓點.表示當前目錄。

export PATH=目錄1:目錄2:目錄3:…目錄n:.

2)PATH預設包含了Linux系統命令所在的目錄(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含這些目錄,Linux的常用命令也無法執行(要輸入絕對路徑才能執行)。

示例:

ls /bin/ls 可以檢視到ls命令位於/bin目錄下

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-8Sb5xRKF-1609830692299)(/uploads/knowledge-space/images/m_2e3b92667325a0e24e5377a8d96adad3_r.png)]

此時我們執行命令 export PATH= 將PATH變數清空,再執行ls命令,系統會提示找不到ls命令。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-UyTqEPmn-1609830692300)(/uploads/knowledge-space/images/m_1de56e717bf184c4725db1a4df01e05b_r.png)]

採用絕對路徑就可以使用,/bin/ls

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-C5tz3ooy-1609830692300)(/uploads/knowledge-space/images/m_22a5a436c7ed1efd06a747de47177107_r.png)]

為環境變數PATH新增/bin目錄後,ls也可以執行了。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-7zy9V1YH-1609830692300)(/uploads/knowledge-space/images/m_57ac15e9d8291a9eed527c44eb8f09cd_r.png)]

3)如果PATH變數中沒有包含圓點.,執行當前目錄下的程式需要加./或使用絕對路徑。

示例:
在當前目錄下執行 example 命令,提示無法執行。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-QmS8KQrx-1609830692302)(/uploads/knowledge-space/images/m_33dadbbf978fad754d30bb88012c5a0c_r.png)]
將圓點.新增到環境變數PATH之後,便可以執行了。

export PATH=$PATH:.

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-lyx7rcCD-1609830692303)(/uploads/knowledge-space/images/m_816a7508de0c64467c3650c18729ad17_r.png)]

2、LD_LIBRARY_PATH環境變數

C/C++語言動態連結庫檔案搜尋的目錄,它不是Linux預設的環境變數,但對C/C++程式設計師來說非常重要。

LD_LIBRARY_PATH環境變數存放的也是目錄列表,目錄之間用冒號:分隔,最後的圓點.表示當前目錄,與PATH的格式相同。

export LD_LIBRARY_PATH=目錄1:目錄2:目錄3:......目錄n:.

這個環境變數我們會在下次課講解Linux靜態庫與動態庫時詳細介紹。

3.5 環境變數的生效

1)在Shell下,用export設定的環境變數對當前Shell立即生效,Shell退出後失效。

2)在指令碼檔案中設定的環境變數不會立即生效,退出Shell後重新登入時才生效,或者用source命令讓它立即生效,例如:

source /etc/profile

3.6 應用經驗

雖然設定環境變數的方法有多種,但是建議大家系統環境變數在/etc/profile.d目錄中配置,使用者環境變數在使用者的.bash_profile中配置,不建議在其它指令碼檔案中配置環境變數,會增加系統運維的麻煩,容易出錯。

4、課後作業

1)搭建Linux程式開發環境,安裝vmware虛擬機器,安裝ubuntu作業系統,在ubuntu上安裝VSCode。
2)配置環境變數PATH,使得每次登陸後執行使用者程式都無須輸入./
3)在第二題的基礎上,將/bin目錄下的ls複製到使用者家目錄下,清空環境變數PATH,執行ls。換個目錄執行ls看看能否執行。

5、參考資料

[1]https://www.runoob.com/linux/linux-intro.html
[2]https://blog.csdn.net/mmqluo/article/details/91365908
[3]https://blog.csdn.net/wucz122140729/article/details/97893770
[4]https://www.cnblogs.com/yinshoucheng-golden/p/6110925.html
[5]https://www.freecplus.net/ebfb46a0f8014f59a16c78ec8de73468.html