版權聲明🤸🏽♀️:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/tianxiawushanu/article/details/141902361
前言
在操作系統 && 常用指令(上)這篇文章中,我給大家講解操作系統概念的同時還介紹了一些基本的Linux操作指令🍽。諸如:ls指令、pwd指令、mkdir指令、touch指令等等👩🏼🦱。說"操作系統是一款管理軟硬件的程序",對下管理資源,對上提供服務!
當然🚵🏽,Linux的基本常用指令遠不止上述文章所講的那麼的少。本文會繼續講解Linux常用基本指令的同時,根據現象提出一些Linux的基礎知識🌉!!!
話不多說,讓我們開啟Linux基礎指令的探索吧🗣!⚉!!🚢⚓⚓⚓

1. Linux基礎常用指令
在講Linux的基本指令之前,我給大家先來一個Linux的符號—— “*
”通配符
1.1 通配符 “*
”
什麼是通配符?
從名字可以看出一點端倪,就是可以替代某些字符串或字符的一種符號🧗♂️。
如果你還不理解上面的我想傳達的意思😌,沒有關系🤵🏽。我給大家創建一些實際的應用場景,幫助大家理解上面的話語👨🦱。請給位公子/公主把目光聚焦到下面的例子中。
假如,現在我有一個名為ddir1的目錄(文件夾),裡面有十分多的文件。有一天🎷,我想在這個的ddir1這個目錄下,查找一系列後綴名為.txt的文件📣。
第一種方法🎗:打開ddir1目錄,一個個的去找。這個方法顯然是out的!
第二種方法:使用“*”這個通配符。(為了方便演示,這裡我就不創建太多的文件了🤟🏼🌊,大家在腦海中有這個概念就行)
通配符"*“的演示👭🏼:
這個是用來測試目錄下面的所有文件:

現在我要查找後綴名為.txt的所有文件♣️:

如果我想查找更加詳細的文件信息💇🏼♂️🫁,還可以這樣做:

OK,上面的例子足以展示通配符的重要性🧙🏿♂️。當然通配符”*
"不僅僅只在查找方面有特點,在刪除等方面也起著一定的作用。
可以這麼理解,在查找的角度,有通配符"*
"就相當于批量查找。在刪除的角度,那就是批量刪除。至于通配符的使用場景🚶🏻➡️👩👩👦,大家下來可以自行探索!!👧🏻!
1.2 man指令(重要)
我們先給出man指令的功能,再來談談為什麼要學習man指令。
man指令功能💙:訪問Linux的手冊頁。
這個手冊頁,大家可以理解為一本Linux的指令說明書。
相信講到這裡,大家也意識到了這指令的重要性了。Linux下的指令死鬼多,我們不可能每一個都記得住🛴。但是只要我們能夠知道這個指令的名稱,再通過man指令的幫助🚵🏼♂️,我們就能查找到man指令的具體用法和功能講解了。
1.2.1 man指令的語法
man語法: man [選項] 命令
常用的選項:
Linux的手冊分為8個章節👐🏿:
1 是普通的命令
2 是系統調用,如open,write之類的(通過這個➰,至少可以很方便的查到調用這個函數👩🏻🎨,需要加什麼頭文件)
3 是庫函數,如printf,fread
4是特殊文件,也就是/dev下的各種設備文件
5 是指文件的格式,比如passwd, 就會說明這個文件中各個字段的含義
6 是給遊戲留的,由各個遊戲自己定義
7 是附件還有一些變量,比如向environ這種全局變量在這裡就有說明
8 是系統管理用的命令,這些命令只能由root使用,如ifconfig
舉個例子,我們現在要查找ls指令的用法,我們可以這樣寫❤️🔥:


可能有一種特殊的情況🖖🏽,就是不同的章節中會存在相同名稱的指令或函數🪥,那這時候該怎麼做🍌?
這裡我就不跟大家賣關子了🧀,其中有一個特殊的指令就是printf。

可能有的人就問了,那這個不久跟那個C語言裡面的printf函數一樣的嗎?
我要跟大家說的是🙆🏿♀️,這兩個不是一個同一個東西,不要混為一談!
在Linux下🔶,printf會被看成是一條指令🤷🏼♀️,而在C語言中printf是一個函數。
那我們用man查找時🧛🏿♀️,是怎樣查找的呢?


可以看到的是,它優先在手冊1上去查找🧑🏻🎓,找到了就直接返回。那如果我們只想看看手冊3裡面的printf,又該怎麼做呢?

輸入這條指令即可🎢。
可以總結一點經驗🙀👯♀️,就是man和待查指令中間可以加入手冊的編號,進行指定編號內的手冊查找🈸。

1.3 何為"指令"?(附帶知識)
我們在上述說可以用man指令來查找相關指令的用法,我們只知道輸入指令𓀜,操作系統就能完成相應的功能。
那指令到底是什麼呢?在我們輸入完指令後,操作系統又做了那些事呢🛬?
為了減輕大家的代碼負擔,這裡我就用一個已經編譯執行完畢的a.out的一個C語言程序給大家做講解🍄🟫。

我們可以用這個指令運行a.out這個可執行程序🔥:

確實是打印出來了。
仔細一想,那指令好像也是這樣水靈靈的輸進去,就直接執行了👩✈️。
沒錯💓!!!對!🕶!!你沒有猜錯!!!
指令其實就是可執行程序!!👨🏻🦱!
理解這一點後,我們再來從現象挖其本源✴️。請大家,看下面出現的現象:

這個是我胡亂輸入的,它顯示指令未被找到🦶🏼,這是無可厚非的。
這裡我想說的是🙅🏻♀️:
這個現象提供給我們一個重要的線索👨🏻🦱,就是我們輸入指令會先被操作系統所查找。如果找不到的話🦶🏽,就會告訴我們指令沒有找到,那如果找到的話,指令就會被直接執行。
那這裡又會引出一個問題,指令到底存放在哪裡?
指令會被存放在這個目錄之下:/usr/bin/
我們可以用這個指令去查看:ls /usr/bin
,或者我們可以用一下which指令來查看指令被存放的位置⬜️👸。

總結:到這裡,我們就知道了我們平常輸入的指令其實就是一個可執行文件👩🏻🦯➡️,與我們平常自己寫的程序編譯之後生成的可執行程序沒有本質的區別🤱🏿。要說用區別的話,那就是別人寫的功能比你的更加完善!
1.4 echo指令
語法:echo string
作用𓀉:將字符串的內容,輸出到屏幕中🤗。
使用演示:

注意:這裡可以不用加雙引號。甚至可以用單引號將字符串給引起來👮🏼♂️🕎!🙍🏻♀️!👪!
總之記住一個點,echo指令後面跟的參數都會被視作字符串🚴。
比如:

那迄今為止,我們學習了如何查看/刪除一個文件,但是我們還沒學習怎樣將內容寫入到一個文件中🚣♀️。沒有關系👩🏿🦲,echo指令會教你做事!
我們只需要這樣做👩🏼⚖️,就可以將內容寫入到文件中👧🏿,
echo [字符串] > 文件名
(注意別忘記了空格)
作用🦹🏿:將指定內容寫入到文件中。

這裡補充兩個點:
如果指定的文件名不存在的話🕺🏼,操作系統會給你先創建這個文件名再寫入數據。
echo指令會自動加上一個換行符🤚。所以不需要我們手動換行🙆🏼。
我們現在是寫進去了🔭,但是怎麼驗證呢🕵🏽?此時我們先學另一條指令,學完後再回來講這個問題。
1.5 cat指令
語法:cat [選項] [文件]
功能:查看目標文件的內容
常用選項🙏🏼:
-b 對非空輸出行編號
-n 對輸出的所有行編號
-s 不輸出多行空行
有了cat指令,我們就可以驗證echo指令是否真正的把內容寫入到test.txt文件中◼️。

確實🌜!🫶🏽!!"hello Linux"確實被寫入到了文件中。
為了驗證cat的選項所帶來的效果⚠,我們現在把test.txt的內容變為這樣(至于指令是怎樣編寫的🙆🏼♂️,我先不說,埋下一個伏筆🙋🏽♂️。後面講)🤘:




我們當然也可以組合選項一起使用🧑🏽🍳,比如:

好了。以上就是cat指令的詳細用法了。

1.6 Linux下一切皆文件!
針對于echo指令,我相信大家有很多問題還沒有弄懂👊🏻。比如,為什麼加一個">“就能把內容寫入到指定文件中?”>"符號又是個什麼東東?
沒有關系,下面我來給大家逐一講解🤰🏽:
1.6.1 “>” 輸出重定向
">"表示輸出重定向。
在剛開始使用echo指令時🧝♀️,我們在沒有使用">“時,內容會被打印到屏幕上💟。在使用”>"時,屏幕上卻沒有打印出這個內容了。為什麼呢?
這個就是輸出重定向的作用,同時也印證了一個觀點:Linux下一切皆文件🤙🏼。
解釋🧘🏽♂️:Linux下一切皆文件的觀點(粗略版)
文件🆖,就有相應讀取文件和寫入文件的方式。
顯示器是一種輸出設備,站在操作系統的角度,我們能對顯示器寫入數據🪷,也就是我們相當于擁有了寫文件的方式🤼♂️。那我們可以從顯示器讀數據嗎?顯然是不需要🔔,因此讀文件的方式可以設為空🚿,這個是對于顯示器這個外部設備的。
那對于鍵盤來說🏄🏿♂️,站在操作系統的角度,我們能從鍵盤讀取數據🌮,也就是我們相當于擁有了讀文件的方式。那我們可以從寫數據嗎?顯然是不需要,因此寫文件的方式可以設為空,這個是對于鍵盤這個外部設備的⛹🏻。
那對于普通文件來說📔,站在操作系統角度,我們可以對文件進行讀或者寫操作。因此我們就擁有了讀文件和寫文件的方式。
從以上的描述🎵,我們在心中大概有了一個概念,那就是無論是顯示器🪬、鍵盤還是普通文件🏰👨🏿🦰,其都有自己對應的讀寫方式,那我們就可以將顯示器🎪、鍵盤等外部設備稱為文件,因為它具備讀寫方式。注意這裡知識粗略的講解🫵🏿。
在進行拓展的話🗞,我們就清楚的了解了一句話:Linux下一切皆文件👤🐚!🌂!!
回到重定向講解中🤽♂️,它的運作機制就是將內容重定向輸出到你指定的文件中
為什麼這麼說呢?在我們沒有加">“時,會把內容輸出到顯示器中,由于Linux下一切皆文件✝️,顯示器也是一個文件啊🙆,為此echo指令就默認將內容輸出顯示器這個文件中。當我們用了”>“符號並加上指定的文件名後,內容就會被寫入到了這個指定的文件中,就相當于輸出的內容換了一個方向輸入到了指定文件中。這也就是為什麼我們稱”>"其為輸出重定向!
1.6.2 ">>"符號
還記得我之前給大家埋下的一個伏筆嗎,就是在cat指令,我創建了一大串文本是怎樣做的?

用的就是">>“符號👨🏼🌾。可能有的人又會有問題了✈️。這個和”>"符號有什麼區別
異同👦🏽:
“>”:輸出重定向。以
覆蓋寫的方式,去寫文件!
“>>”:輸出重定向🍖。以
追加寫的方式,去寫文件!
我們可以做個驗證:

好了,到此echo指令和cat指令就告一段落了!
1.7 cp指令(重要)
語法🍁:cp [選項] 源文件或目錄 目標文件或目錄
功能🤹🏽♀️:複制文件或目錄
常用選項🦻🏼:
-f 或 --force 強行複制文件或目錄🍨, 不論目的文件或目錄是否已經存在
-i 或 --interactive 覆蓋文件之前先詢問用戶
-r 遞歸處理,將指定目錄下的文件與子目錄一並處理。若源文件或目錄的形態🦹🏽♀️,不屬于目錄或符號鏈接,則一律視為普通文件處理(針對的是複制目錄)
使用演示:

如果當你想要拷貝的文件不存在時📢,它會自動創建目標文件,再將內容拷貝到目標文件上,這個點跟echo指令很像👩🏼🏫。

我們也可以通過改變路徑,將拷貝之後的文件放到上級目錄上:

以上都是關于文件的拷貝,那如果我想要拷貝一個目錄該怎麼辦?
答案💬,就是搭配選項-r
一起使用。

這裡要說明在使用cp拷貝目錄一個點:
cp指令用于複制文件或目錄,如同時指定兩個以上的文件或目錄🏑,且最後的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄複制到此目錄中😙。若同時指定多個文件或目錄🤵🏻♀️,而最後的目的地並非一個已存
在的目錄👨🏻🎨,則會出現錯誤信息。
1.8 mv指令(重要)
語法⛹️♂️:mv [選項] 源文件或者目錄 目標文件或目錄
作用🌬🚵:對文件進行剪切或者是將文件重命名
常用選項:
由于這條指令比較有意思,我會分幾種情況給大家講解🆙:

其實有個通用的記憶方法🤵🏻♀️,現在我來給你說到說到:
可以看到,當mv指令的第二個參數不同時,效果好像是不一樣的。但是這也僅僅只是你看到的那樣。仔細思考一下,mv mytest.txt code.txt
是不是等價于mv mytest.txt ./code.txt
。mv指令如果後面路徑後面沒有加文件名就默認使用源文件的名稱💌🏉。根據以上兩點,我們就可以總結出,無論mv指令的第二種參數為何種情況,它都表達一個意思🧷,那就是:先對文件進行剪切操作後👸🏽,再進行重命名操作
那mv指令針對文件的操作我講了⏭,那對于目錄的操作有怎麼說呢?
mv指令針對目錄的操作:

至此,關于本文的內容我就講完了!
由于本文的內容較為豐富,這裡就給大家做一個小結👨🏽🍳:
我們講了通配符"*
",各種基本指令以及輸出重定向,指令的本質和Linux下一切皆文件的觀點。
如果覺得本文寫得還不錯的話,麻煩給偶點個讚吧!↩️!!