Linux是一個可以自由釋出的類UNIX核心實現,它是一個作業系統的底層核心。Linux是由芬蘭赫爾辛基大學的Linus開發,期間得到了網上廣大UNIX程式設計師的幫助。它最初是受其教授的Minix(一個小型的類UNIX系統)啟發而開發的程式,純屬個人的愛好,但是後來它自身逐步發展成為一個完整的系統
要理解什麼是Linux,首先要了解在Linux之前誕生的系統和應用程式——UNIX和GNU軟體。
UNIX作業系統最初是由貝爾實驗室開發的,當時的貝爾實驗室是電信巨頭AT&T(美國電報電話公司)旗下的一員。如今,它已經成為一種非常流行的多使用者、多工作業系統。UNIX作業系統可以執行在大量不同種類的硬體平臺上,其適用範圍從PC機到多處理器伺服器和超級計算機。
在UNIX上進行程式開發有些典型的風格和特點:
1)簡單性:許多很有用的UNIX工具是非常簡單的。「小而簡單」是一種值得學習的技術。越大、越複雜的系統註定會包含越大、越複雜的錯誤。
2)集中性:讓一個程式很好地執行一項任務好過把所有功能都堆在一起。功能臃腫的程式難於使用和維護,單一目標的程式更容易隨著更好的演演算法被開發出來而得到改進。在UNIX中,當使用者出現新的需求時,我們通常是把小工具組合起來完成更復雜的任務,而不是試圖將一個使用者期望的所有功能放在一個大程式裡。
3)可重用的元件:將應用程式的核心實現為庫。具有簡單而靈活的程式設計介面的庫可以幫助其他人開發出同類程式,或者把這些技術應用到新的應用領域。
有了作業系統核心還不夠,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。
工欲善其事必先利其器,想要進行Linux程式開發需要先搭建開發環境。
進行 Linux 開發需要安裝一個 linux 系統環境,一般使用 VMWare 安裝Ubuntu 系統進行開發。具體安裝過程大家可以參考以下貼文https://zhuanlan.zhihu.com/p/38797088這裡我就不做過多介紹。
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的安全網路協定。傳統的網路服務程式,如 FTP、 Pop 和 Telnet 其本質上都是不安全的;因為它們在網路上用明文傳送資料、使用者帳號和使用者口令,很容易受到中間人攻擊方式的攻擊。
SSH 分為使用者端 openssh-client 和伺服器 openssh-server,我們需要在 ubuntu 系統下安裝 ssh 伺服器,以便使用 ssh 使用者端登入到系統。
sudo apt update
sudo apt install openssh-server
sudo service ssh start
ip addr show
命令檢視 ubuntu 系統 ip可以看出,當前 ubuntu IP 地址為 192.168.176.148
在 Ubuntu 上安裝完成 ssh 伺服器後,接下來在 Windows 系統下使用 MobaXterm 進行連線,測試 ssh 伺服器是否安裝成功。 操作步驟如下:
執行 Xterm 軟體,選擇「Session」,如下圖所示:
點選「SSH」並進行設定,如下圖所示:
在該對話方塊中,選擇「協定」為「SSH」, 「主機名」為 ubuntu 的 IP 地址,使用者名稱為當前使用者名稱。埠號使用預設值 22。 設定完成後,點選"OK",出現如下命令列終端,表示已經連線上虛擬機器器的ubuntu系統。
通過這種方法,確定主機和開發板之間網路通訊正常後,即可以登入到開發板上。
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 檔案轉換成其他格式。
Linux的命令有幾百個,對於初學者來說,常用的並不多,並不需要全部掌握。在平時的學習和工作過程中,遇到了陌生的Linux命令,多查資料,日積月累,自然就記住了。下面為大家介紹Linux最基礎的17個命令。
clear
ip addr
date
檔案系統像一棵樹,樹幹是/(根)目錄,樹枝是子目錄,樹枝後面還有樹枝(子目錄中還有子目錄),目錄的最後是檔案。
目錄和檔案的路徑分為絕對路徑和相對路徑,絕對路徑是從根(/)算起,例如/usr/etc/readme.txt。相對路徑是從當前工作目錄算起,如果當前工作目錄是/usr,etc/readme.txt等同於/usr/etc/readme.txt。此外,需要注意的是:一個圓點.表示當前工作目錄;兩個圓點…表示當前工作目錄的上一級目錄。
下面為大家簡單介紹Linux系統目錄結構,為了避免諸多使用者對 Linux 系統目錄結構天馬行空,Linux 基金會發布了 FHS 標準。多數 Linux 發行版系統都遵循這一標準。注:FHS(Filesystem Hierarchy Standard),檔案系統層次化標準,該標準規定了 Linux 系統中所有一級目錄以及部分二級目錄(/usr 和 /var)的用途。釋出此標準的主要目的就是為了讓使用者清楚地瞭解每個目錄應該存放什麼型別的檔案。
FHS 認為,Linux 系統的根目錄(/)最為重要,其原因有以下 2 點:
1. 所有目錄都是由根目錄衍生出來的;
2. 根目錄與系統的開機、修復、還原密切相關;
因此,根目錄必須包含開機軟體、核心檔案、開機所需程式、函數庫、修復系統程式等檔案,如下表所示。
usr(注意不是 user),全稱為 Unix Software Resource,此目錄用於儲存系統軟體資源。FHS 建議開發者,應把軟體產品的資料合理的放置在 /usr 目錄下的各子目錄中,而不是為他們的產品建立單獨的目錄。
Linux 系統中,所有系統預設的軟體都儲存在 /usr 目錄下,/usr 目錄類似 Windows 系統中 C:\Windows\ + C:\Program files\ 兩個目錄的綜合體。
FHS 建議,/usr 目錄應具備下表所示的子目錄。
/var 目錄用於儲存動態資料,例如快取、紀錄檔檔案、軟體執行過程中產生的檔案等。通常,此目錄下建議包含如表 4 所示的這些子目錄。
pwd
cd 目錄名
範例:
cd /tmp
cd ..
cd
ls
是list的縮寫,通過 ls
命令不僅可以檢視目錄和檔案資訊,還可以檢視目錄和檔案的許可權、大小、主人和組等資訊。
選項 -l
列出目錄和檔案的詳細資訊。
範例:
ls
ls -l
正規表示式又稱規則表示式、萬用字元,目錄和檔名都支援正規表示式,正規表示式的規則比較多,在這裡我們只需要掌握最常用的兩種:星號 「*」 。
星號 「*」 :匹配任意數量的字元。
例如:ls open*.zip
mkdir aaa
mkdir aaa/bbb -p
rm [-rf]
目錄或檔案
選項-r
可以刪除目錄,如果沒有-r只能刪除檔案。
選項-f
表示強制刪除,不需要確認。
rm aaa -r
rm -f ccc.c
mv 舊目錄或檔名 新目錄或檔名
mv book.c book1.c
mv book.c OPC/test3
mv book.c OPC/test3
cp [-r] 舊目錄或檔名 新目錄或檔名
注:-r 是遞迴的意思,英文 recursion
選項-r
可以複製目錄,如果沒有選項-r
只能複製檔案。
範例:
cp book1.c book2.c
cp aaa bbb -r
cp book1.c aaa/book1.c
cp book1.c aaa/.
以上兩個命令的效果相同。
cp -r aaa /tmp/aaa
cp -r aaa /tmp/.
以上兩個命令的效果相同。
ping -c 包的個數 ip地址或域名
ping用於確定本地主機是否能與另一臺主機成功交換封包,判斷網路是否通暢。
ping -c 5 127.0.0.1
ping -c 5 www.baidu.com.cn
可以看出百度的伺服器是可以ping
通的。
ping -c 5 www.google.com
可以看出谷歌的伺服器是ping
不通的。
顯示文字檔案的內容有三個命令:cat
、more
和tail
。
cat 檔名
cat命令一次顯示整個檔案的內容。
cat main.cpp
more 檔名
為了方便閱讀,more命令分頁顯示檔案的內容,按空格鍵顯示下一頁,按b鍵顯上一頁,按q鍵退出。
tail -f 檔名
tail -f
用於顯示文字檔案的最後幾行,如果檔案的內容有增加,就實時的重新整理。對程式設計師來說,tail -f
極其重要,可以動態顯示後臺服務程式的紀錄檔,用於偵錯和跟蹤程式的執行。
wc(word count)功能為統計指定的檔案中位元組數、字數、行數,並將統計結果輸出
wc 檔名
grep "內容" 檔名
注意,如果內容中沒有空格等特殊字元,可以不用雙引號括起來。
範例:
grep signal main.cpp
find 目錄名 -name 檔名
引數說明:
目錄名:待搜尋的目錄,搜尋檔案的時候,除了這個目錄名,還包括它的各級子目錄。
檔名:待搜尋的檔名匹配的規則。
範例:
從 OPC 目錄開始搜尋,把全部的 *.cpp 檔案顯示出來。
find OPC -name *.cpp
locate 檔名
範例:
搜尋open62541.c檔案
locate open62541.c
注意:第一次使用該命令,可能需要更新資料庫,按照提示的命令執行一下就好了.
find多用於在某個目錄下進行模糊搜尋,而locate則是進行全盤準確定位。
用於改變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 :特殊許可權
範例:
chmod a-x example
chmod 751 example -c
chmod u+r,g+r,o+r -R text/ -c
df [-h] [-T]
選項-h
以方便閱讀的方式顯示資訊:
df -h
選項-T
列出檔案系統型別:
df -h -T
程式(作業系統命令和應用程式)的執行都需要執行環境,這個環境是由多個環境變陣列成的。
系統環境變數:公共的,對全部的使用者都生效。
使用者環境變數:使用者私有的、自定義的個性化設定,只對該使用者生效。
永久環境變數:在環境變數指令碼檔案中設定,使用者每次登入時會自動執行這些指令碼,相當於永久生效。
臨時環境變數:使用時在Shell中臨時定義,退出Shell後失效。
Linux環境變數也稱之為Shell環境量變,以下劃線和字母打頭,由下劃線、字母(區分大小寫)和數位組成,習慣上使用大寫字母,例如PATH、HOSTNAME、LANG等。
在Shell下,用env命令檢視當前使用者全部的環境變數。
上圖只擷取了部分環境變數,並非全部。
注:用env命令的時候,滿屏顯示了很多環境變數,不方便檢視,可以用grep篩選。
env|grep 環境變數名
例如檢視環境變數名中包含PATH的環境變數。
env|grep PATH
echo $環境變數名
例如:echo $LANG
可執行程式的搜尋目錄,可執行程式包括Linux系統命令和使用者的應用程式,PATH變數的具體用法本文後面的章節中有詳細的介紹。
Linux系統的語言、地區、字元集。
echo $LANG
伺服器的主機名。
echo $HOSTNAME
使用者當前使用的Shell解析器。
echo $SHELL
儲存歷史命令的數目。
當前登入使用者的使用者名稱。
echo $USER
當前登入使用者的主目錄。
echo $HOME
當前工作目錄。
echo $PWD
C/C++語言動態連結庫檔案搜尋的目錄,它不是Linux預設的環境變數,但對C/C++程式設計師來說非常重要,具體用法本文後面的章節中有詳細的介紹。
export 變數名='值'
如果環境變數的值沒有空格等特殊符號,可以不用單引號包含。
範例:
export PATH=$PATH:.
以上命令為當前shell的環境變數PATH新增.目錄(是.)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
以上命令為當前shell的環境變數LD_LIBRARY_PATH新增.目錄
採用export設定的環境變數,在退出Shell後就會失效,下次登入時需要重新設定。如果希望環境變數永久生效,需要在登入指令碼檔案中設定。
系統環境變數對全部的使用者生效,設定系統環境變數有三種方法。
使用者登入時執行/etc/profile檔案中設定系統的環境變數。但是,Linux不建議在/etc/profile檔案中設定系統環境變數。
/etc/profile在每次啟動時會執行 /etc/profile.d下全部的指令碼檔案。/etc/profile.d比/etc/profile好維護,不想要什麼變數直接刪除 /etc/profile.d下對應的 shell 指令碼即可。
/etc/profile.d目錄下有很多指令碼檔案,例如:
ls /etc/profile.d
該檔案設定的環境變數將會影響全部使用者使用的bash shell。但是,Linux也不建議在/etc/bashrc檔案中設定系統環境變數。
使用者環境變數只對當前使用者生效,設定使用者環境變數也有多種方法。
在使用者的主目錄,有幾個特別的檔案,用ls
是看不見的,用ls .bash*
可以看見。
當使用者登入時執行,每個使用者都可以使用該檔案來設定專屬於自己的環境變數。
當使用者登入時以及每次開啟新的Shell時該檔案都將被讀取,不推薦在裡面設定使用者專用的環境變數,因為每開一個Shell,該檔案都會被讀取一次,效率肯定受影響。
當每次退出系統(退出bash shell)時執行該檔案。
儲存了當前使用者使用過的歷史命令。
環境變數指令碼檔案的執行順序如下:
/etc/profile->/etc/profile.d->/etc/bashrc->使用者的.bash_profile->使用者的.bashrc
同名的環境變數,如果在多個指令碼中有設定,以最後執行的指令碼中的設定為準。
可執行程式的搜尋目錄,可執行程式包括Linux系統命令和使用者的應用程式。如果可執行程式的目錄不在PATH指定的目錄中,執行時需要指定目錄。
export PATH=目錄1:目錄2:目錄3:…目錄n:.
範例:
ls /bin/ls
可以檢視到ls
命令位於/bin目錄下
此時我們執行命令 export PATH=
將PATH變數清空,再執行ls
命令,系統會提示找不到ls
命令。
採用絕對路徑就可以使用,/bin/ls
為環境變數PATH新增/bin目錄後,ls
也可以執行了。
範例:
在當前目錄下執行 example 命令,提示無法執行。
將圓點.新增到環境變數PATH之後,便可以執行了。
export PATH=$PATH:.
C/C++語言動態連結庫檔案搜尋的目錄,它不是Linux預設的環境變數,但對C/C++程式設計師來說非常重要。
LD_LIBRARY_PATH環境變數存放的也是目錄列表,目錄之間用冒號:分隔,最後的圓點.表示當前目錄,與PATH的格式相同。
export LD_LIBRARY_PATH=目錄1:目錄2:目錄3:......目錄n:.
這個環境變數我們會在下次課講解Linux靜態庫與動態庫時詳細介紹。
1)在Shell下,用export設定的環境變數對當前Shell立即生效,Shell退出後失效。
2)在指令碼檔案中設定的環境變數不會立即生效,退出Shell後重新登入時才生效,或者用source命令讓它立即生效,例如:
source /etc/profile
雖然設定環境變數的方法有多種,但是建議大家系統環境變數在/etc/profile.d目錄中設定,使用者環境變數在使用者的.bash_profile中設定,不建議在其它指令碼檔案中設定環境變數,會增加系統運維的麻煩,容易出錯。
相關推薦:《Linux視訊教學》
以上就是一起聊聊linux作業系統的常用命令及環境變數的詳細內容,更多請關注TW511.COM其它相關文章!