本篇文章給大家帶來了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
可以看出,當前 ubuntu IP 地址為 192.168.176.148
4)測試 ssh 登錄
在 Ubuntu 上安裝完成 ssh 服務器后,接下來在 windows 系統下使用 MobaXterm 進行連接,測試 ssh 服務器是否安裝成功。 操作步驟如下:
運行 Xterm 軟件,選擇“Session”,如下圖所示:
點擊“SSH”并進行設置,如下圖所示:
在該對話框中,選擇“協議”為“SSH”, “主機名”為 ubuntu 的 IP 地址,用戶名為當前用戶名。端口號使用默認值 22。 設置完成后,點擊”OK”,出現如下命令行終端,表示已經連接上虛擬機的ubuntu系統。
通過這種方法,確定主機和開發板之間網絡通訊正常后,即可以登錄到開發板上。
5)安裝 visual studio Code
Visual Studio Code(簡稱 vscode)是微軟出的一款免費的編輯器,有 Windows、 Linux 和 macos 三個版本,是一款跨平臺編輯器。 安裝過程大家可以自行搜索,這里主要介紹用于C/C++程序開發的擴展包,安裝步驟見下圖:
常用的有如下插件需要安裝:
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最基礎的17個命令。
1、清屏
clear
2、查看服務器ip地址
ip addr
3、查看時間
date
4、目錄和文件
文件系統像一棵樹,樹干是/(根)目錄,樹枝是子目錄,樹枝后面還有樹枝(子目錄中還有子目錄),目錄的最后是文件。
目錄和文件的路徑分為絕對路徑和相對路徑,絕對路徑是從根(/)算起,例如/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. 根目錄與系統的開機、修復、還原密切相關;
因此,根目錄必須包含開機軟件、核心文件、開機所需程序、函數庫、修復系統程序等文件,如下表所示。
2)Linux /usr目錄
usr(注意不是 user),全稱為 Unix Software Resource,此目錄用于存儲系統軟件資源。FHS 建議開發者,應把軟件產品的數據合理的放置在 /usr 目錄下的各子目錄中,而不是為他們的產品創建單獨的目錄。
Linux 系統中,所有系統默認的軟件都存儲在 /usr 目錄下,/usr 目錄類似 Windows 系統中 C:Windows + C:Program files 兩個目錄的綜合體。
FHS 建議,/usr 目錄應具備下表所示的子目錄。
3)Linux /var 目錄
/var 目錄用于存儲動態數據,例如緩存、日志文件、軟件運行過程中產生的文件等。通常,此目錄下建議包含如表 4 所示的這些子目錄。
5、查看當前目錄
pwd
6、改變當前工作目錄
cd 目錄名
示例:
1)進入/tmp目錄
cd /tmp
2)進入上一級目錄
cd ..
3)進入用戶的主目錄
cd
7、列出目錄和文件信息
ls是list的縮寫,通過 ls 命令不僅可以查看目錄和文件信息,還可以查看目錄和文件的權限、大小、主人和組等信息。
選項 -l 列出目錄和文件的詳細信息。
示例:
1)列出當前工作目錄下全部的目錄和文件名信息
ls
2)列出當前工作目錄下全部的目錄和文件名詳細的信息
ls -l
3)正則表達式
正則表達式又稱規則表達式、通配符,目錄和文件名都支持正則表達式,正則表達式的規則比較多,在這里我們只需要掌握最常用的兩種:星號 “*” 。
星號?“*”?:匹配任意數量的字符。
例如:ls open*.zip
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
2)向百度 www.baidu.com.cn 的服務器ping五個包
ping -c 5 www.baidu.com.cn
可以看出百度的服務器是可以ping通的。
3)向谷歌 www.google.com 的服務器ping五個包。
ping -c 5 www.google.com
可以看出谷歌的服務器是ping不通的。
12、顯示文本文件的內容
顯示文本文件的內容有三個命令:cat、more和tail。
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 文件名
14、搜索文件中的內容
grep “內容” 文件名
注意,如果內容中沒有空格等特殊字符,可以不用雙引號括起來。
示例:
1)在main.cpp文件中搜索signal
grep signal main.cpp
15、搜索文件
1)find
find 目錄名 -name 文件名
參數說明:
目錄名:待搜索的目錄,搜索文件的時候,除了這個目錄名,還包括它的各級子目錄。
文件名:待搜索的文件名匹配的規則。
示例:
從 OPC 目錄開始搜索,把全部的 *.cpp 文件顯示出來。
find OPC -name *.cpp
2)locate
locate 文件名
示例:
搜索open62541.c文件
locate open62541.c
注意:第一次使用該命令,可能需要更新數據庫,按照提示的命令執行一下就好了.
find多用于在某個目錄下進行模糊搜索,而locate則是進行全盤準確定位。
16、chmod命令
用于改變linux文件或目錄的訪問權限。該命令有兩種用法。一種是包含字母和操作符表達式的文字設定法;另一種是包含數字的數字設定法。
每一文件或目錄的訪問權限都有三組,每組用三位表示,分別為文件屬主的讀、寫和執行權限;與屬主同組的用戶的讀、寫和執行權限;系統中其他用戶的讀、寫和執行權限。
舉例:ls -l example
第一列共有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
2)給 example 的屬主分配讀、寫、執行(7)的權限,給 example 的所在組分配讀、執行(5)的權限,給其他用戶分配執行(1)的權限
chmod 751 example -c
3)將aaa目錄及其子目錄所有文件添加可讀權限
chmod u+r,g+r,o+r -R text/ -c
17、查看系統磁盤空間
df [-h] [-T]
選項-h以方便閱讀的方式顯示信息:
df -h
選項-T列出文件系統類型:
df -h -T
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命令查看當前用戶全部的環境變量。
上圖只截取了部分環境變量,并非全部。
注:用env命令的時候,滿屏顯示了很多環境變量,不方便查看,可以用grep篩選。
env|grep 環境變量名
例如查看環境變量名中包含PATH的環境變量。
env|grep PATH
2)echo命令
echo $環境變量名
例如:echo $LANG
3.2.2 常用的環境變量
1)PATH
可執行程序的搜索目錄,可執行程序包括Linux系統命令和用戶的應用程序,PATH變量的具體用法本文后面的章節中有詳細的介紹。
2)LANG
Linux系統的語言、地區、字符集。
echo $LANG
3)HOSTNAME
服務器的主機名。
echo $HOSTNAME
4)SHELL
用戶當前使用的Shell解析器。
echo $SHELL
5)HISTSIZE
保存歷史命令的數目。
6)USER
當前登錄用戶的用戶名。
echo $USER
7)HOME
當前登錄用戶的主目錄。
echo $HOME
8)PWD
當前工作目錄。
echo $PWD
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
3)在/etc/bashrc文件中設置環境變量。
該文件配置的環境變量將會影響全部用戶使用的bash shell。但是,Linux也不建議在/etc/bashrc文件中設置系統環境變量。
3.3.2 用戶環境變量
用戶環境變量只對當前用戶生效,設置用戶環境變量也有多種方法。
在用戶的主目錄,有幾個特別的文件,用ls是看不見的,用ls .bash*可以看見。
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目錄下
此時我們執行命令 export PATH= 將PATH變量清空,再執行ls命令,系統會提示找不到ls命令。
采用絕對路徑就可以使用,/bin/ls
為環境變量PATH添加/bin目錄后,ls也可以執行了。
3)如果PATH變量中沒有包含圓點.,執行當前目錄下的程序需要加./或使用絕對路徑。
示例:
在當前目錄下執行 example 命令,提示無法執行。
將圓點.添加到環境變量PATH之后,便可以執行了。
export PATH=$PATH:.
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中配置,不建議在其它腳本文件中配置環境變量,會增加系統運維的麻煩,容易出錯。
相關推薦:《Linux視頻教程》