這篇文章為大家帶來了linux作業系統基礎知識,其中包含程式開發環境、常用指令以及環境變數的相關知識,希望對大家有幫助。
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 檔案轉換成其他格式。 2、Linux常用指令Linux的指令有幾百個,對於初學者來說,常用的並不多,並不需要全部掌握。在平時的學習和工作過程中,遇到了陌生的Linux指令,多查資料,日積月累,自然就記住了。以下為大家介紹Linux最基礎的17個指令。
clear
#ip addr
#date
目錄和檔案的路徑分為絕對路徑和相對路徑,絕對路徑是從根(/)算起,例如/usr/etc/readme.txt。相對路徑是從目前工作目錄算起,如果目前工作目錄是/usr,etc/readme.txt等同於/usr/etc/readme.txt。此外,需要注意的是:一個圓點.表示目前工作目錄;兩個圓點…表示目前工作目錄的上一層目錄。
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
1)將目前工作目錄中的book.c 檔案重新命名為book1.c
2)如果OPC/test3是一個已經存在的目錄,以下指令將會將目前工作目錄下的book.c 檔案移到OPC/test3 目錄中。
#3)如果OPC/test3目錄不存在,以下指令將把目前工作目錄下的book.c 檔案改名為OPC/test3。
mv book.c OPC/test3
#10、複製目錄和檔案
cp [-r] 舊目錄或檔名新目錄或檔名
選項-r
可以複製目錄,如果沒有選項
1)把目前工作目錄下的book1.c檔案複製為book2.c
2)把目前工作目錄下的aaa目錄複製成bbb
cp aaa bbb -r
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
#可以看出Google的伺服器是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 當改變時,報告處理資訊
chmod a-x example
#3)將aaa目錄及其子目錄所有檔案加入可讀權限
選項
以方便閱讀的方式顯示資訊:
選項
列出文件系統類型:
#3、Linux環境變數解說
使用者環境變數:使用者私有的、自訂的個人化設置,只對該使用者生效。
2)依生存週期分類。
臨時環境變數:使用時在Shell中暫時定義,退出Shell後失效。
3)Linux環境變數
上圖只截取了部分環境變量,並非全部。
註:用env指令的時候,滿屏顯示了很多環境變量,不方便查看,可以用grep篩選。
例如查看環境變數名稱中包含PATH的環境變數。
2)echo指令
例如:
2)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後就會失效,下次登入時需要重新設定。如果希望環境變數永久生效,則需要在登入腳本檔案中設定。
3.3.1 系統環境變數
1)在/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檔案中設定環境變數。
3.3.2 使用者環境變數
在使用者的主目錄,有幾個特別的文件,用
ls可以看見。
當使用者登入時執行,每個使用者都可以使用該檔案來配置專屬於自己的環境變數。
2).bashrc當使用者登入時以及每次開啟新的Shell時該檔案都將被讀取,不建議在裡面配置使用者專用的環境變量,因為每開一個Shell,該檔案都會被讀取一次,效率肯定會受影響。
3).bash_logout
同名的環境變量,如果在多個腳本中有配置,以最後執行的腳本中的配置為準。
######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
也可以執行了。
範例:
在目前目錄下執行 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作業系統的常用指令及環境變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!