? ? ? ? 前言:本節內容標題雖然為指令,但是并不只是講指令, 更多的是和指令相關的一些原理性的東西。 如果友友只想要查一查某個指令的用法, 很抱歉, 本節不是那種帶有字典性質的文章。但是如果友友是想要來學習的, 那么本篇文章很適合, 而且非常適合初入linux的小白。
目錄
基本指令
常見指令
文件的屬性與類型
.文件的作用
路徑
..文件的作用
其他基本指令
基本指令2
如何看待指令
重定向與閱讀文本
基本指令
常見指令
ls、 cd、 pwd、mkdir、 touch
- ls:顯示當前目錄下的文件信息
- cd:進入某一個文件夾
- pwd:查看當前路徑
- mkdir:創建文件夾
- touch:創建普通文件
文件的屬性與類型
? ? ? ? 在linux中, 可以將文件分為兩類, 一類是普通文件, 也就是touch出來的; 一類是文件夾, 也就是mkdir出來的。 對應我們windows中的文件夾(如圖紅框框)和普通文件(如圖藍框框)
另外, 指令也可以攜帶選項。 比如ls -a就是顯示隱藏文件。 ls -l就是詳細的顯示文件的屬性。?
????????第一個紅框框是顯示隱藏文件,是的, 文件也是有隱藏文件和非隱藏文件的區別的。“."這個其實就是一個隱藏文件夾, 表示當前目錄。 ".."也是一個隱藏文件夾, 表示上級目錄。
????????第二個紅框框是詳細的顯示文件屬性。 文件 = 文件的數據 + 文件的屬性。 文件的屬性也是數據, 是數據就要存儲, 那么就要占用空間。 所以當我們創建一個空文件, 里面即使沒有保存任何信息, 這個文件也要占用磁盤空間。所以, ls顯示文件信息, 本質上就是在顯示文件的屬性。
? ? ? ? 同時, 文件的操作 = 文件內容的操作 + 文件屬性的操作。
? ? ? ? 現在來看一下下面這張圖中前面的一個長條紅框框。 框起來的部分就是文件的類型。?
文件的類型分為: 文件目錄——以d開頭、 普通文件——以-開頭。
? ? ? ? 第三個紅框框是ls -al, 這個指令是將ls -a 和ls -l的后面的選項合起來。 這樣用是沒有問題的。 結果就是既顯示隱藏文件, 也會詳細的將文件屬性顯示出來。
.文件的作用
在linux中, 任何文件目錄下面都有兩個隱藏文件"."和".."為什么? 他們有什么用?
????????首先來看".", 這個隱藏文件是表示當前目錄。 我們在執行某些程序或者操作(本質上都是文件, linux下一切皆文件)時, 可能需要確定是哪個路徑下的程序或者操作。 這個時候, 如果要執行當前目錄下的程序或者文件, 我們就要用到".", 表示執行當前目錄下的某些操作。如圖a.out是一個可執行文件:
路徑
? ? ? ? 在了解“..”的作用之前, 我們要先了解路徑的相關概念:
????????這里可以思考一個問題, 那就是對于一個文件夾來說, 它可以放另一個目錄或者放普通文件。 那么就決定了我們的目錄結構, 我們的目錄結構一定是一個多叉樹的樣子。
????????linux的目錄結構的葉子節點一定是一個空目錄或者一個普通文件。而它路上的節點, 一定是一個非空目錄。所以 我們對于文件目錄的增刪查改, 實際上都是對這棵多叉樹的增刪查改。?
? ? ? ? 對于一個文件來說, 我們找到這個文件就要有這個文件的路徑。 也就是多叉樹上面的路徑。那么為什么可以使用路徑呢??
? ? ? ? 這是因為路徑具有唯一性。 對于一棵多叉樹來說, 每一個根節點都只有一個父親節點。 那么就是說這個根節點回推到某一節點, 只有一條路可以走。 所以路徑具有唯一性。
? ? ? ? 接下來看一下路徑分隔符,?這個小斜杠就是路徑分隔符:
???路徑分為絕對路徑和相對路徑?
- ? ? ? ? ?絕對路徑:絕對路徑就是從我們的根目錄下(/), 定位到某一個特定位置, 具有唯一性的路徑叫做絕對路徑, 如圖:
- ????????相對路徑:如果我們目前在dir2目錄下, 如果_mian_yang目錄下還有一個dir3.那么../dir3就是dir3相對于dir2的相對路徑。
? ? 兩個路徑的比較
- 絕對路徑通常比較長, 但是永遠不會變, 一般在一定場景, 如文件配置。
- 相對路徑往往比較短, 一般命令行輸入, 比較常用相對路徑。
..文件的作用
?????????而"..", 就可以用在相對路徑中, 比如cd ../dir3路徑, 意思是進入上級目錄中的dir3兄弟文件夾中。?
其他基本指令
//ls -F
ls -F能夠顯示文件的類型, 在最后顯示/代表文件夾, 在最后顯示*代表可執行文件, 什么都不帶代表普通文件。
//whoami
查看自己當前的賬戶
在linux中, 所有普通用戶賬號都會放到home目錄下面, 進入路徑是: /home
?home目錄對應著windows中的用戶:
//cd~
cd~的作用是返回當前賬戶的家目錄:
普通用戶返回家目錄:
root用戶返回家目錄:
//mkdir -p 一串文件
//cd -, cd - 可以返回到上一級的路徑中
基本指令2
rm
rm是刪除指令,后面什么都不加時, 可以刪除普通文件。 但是如果要刪除一個目錄文件就會刪除失敗。
rm -r 可以刪除目錄文件, r的意思是遞歸。 這條指令也就是遞歸刪除。?
在默認情況下, 我們的普通用戶刪除東西時, 系統不會確認我們是否刪除?
但是如果是root賬戶, 我們刪文件(這個的所有者是root)時, 系統就會確認我們是否刪除, 并且如果刪除一個目錄文件, 還會一層一層的問我們是否刪除。?
那如果我們普通用戶下想要讓系統問我們就要使用 rm -i。
如果我們root賬戶下不想讓系統問我們就要使用 rm -f。
//man手冊
使用方式 man + 指令
man man就是詢問自己的功能, 查看自己的詳細信息。
man有版本的說法, man1一般就是指令接口, man2一般就是系統接口,man3一般就是c語言接口。
man手冊在查找的時候, 如果不加編號, 那么默認會從第一號手冊開始, 一個手冊一個手冊往下找, 直到找到或者所有手冊找完也沒有找到。(退出用q)
//先來簡單的說一說echo,和cat
echo可以將后面的字符串默認加上換行符并打印到顯示器上。
但是, 當我們在字符串的后面加 > 文件名的時候, 就會發生輸出重定向, 原本應該打印到顯示器上的內容就會被打印到文件里。?
然后要看到hl.txt文件里面的內容就要使用cat, cat + 文件名 是在文件里面讀取數據打印到顯示器上面。
//cp
cp的功能是拷貝,就是用一個文件拷貝出另一個文件, 文件名可以不同, 但內容相同。相當于windows里面的cv。
????????cp 文件1 文件2, 這里的文件1就是原版本, 這里的文件2就是要拷貝出來的文件。 文件2默認被拷貝在當前目錄, 但是嘗試告訴我們相同目錄不能又相同名字的文件, 所以當前目錄如果又和它同名的文件, 這個文件就會被覆蓋。
? ? ? ? cp 文件1 路徑, 將文件1拷貝到相應路徑上, 這個更加靈活,根據上面所學的相對路徑或者絕對路徑, 可以隨便拷貝到一個路徑下面。 需要注意的是, 如果路徑的末尾是目錄, 那么就會拷貝到目錄下面,并且文件名默認就是文件1的名稱。但是如果路徑的末尾是普通文件, 那么就會生成這個文件, 如果存在同名, 就把它覆蓋掉。(這個應該是常識, 和windows上一樣, 這里只是梳理一下, 其實文件1也可以是一條路徑, 就是將某個路徑下的文件拷貝到某個路徑下)
? ? ? ? 需要注意的是, 當cp在覆蓋的時候, 系統會確認我們的操作, 如果我們不想看到這個確認, 就可以加上-f選項。 同理, -i選項就是想要被他詢問。?
//mv
mv是剪切并重命名, 有了上面學習cp的基礎, mv就比較簡單了。 我們可以直接這樣記
????????mv 路徑1/文件名1?路徑2/文件名2?其實就是將一個路徑下的文件, 剪切到一個路徑下。 就是將路徑1里面的文件1剪切到路徑2里面并且重命名。 需要注意的是如果有重名的,同樣會將原本的那個覆蓋掉。 還有, 如果文件2是一個目錄, 那么就是將文件文件1剪切到文件2里面。 名字是默認的文件1的名稱。?
知道了剪切, 我們就可以做一些操作了。
如何看待指令
? ? ? ? 我們應該如何去看待指令呢?
? ? ? ? 其實, 指令和我們寫的可執行程序a.out都是可執行的, 所以指令的本質其實就是一個可執行程序
? ? ? ? 那么看這樣一個例子:
這里我亂寫了一串指令, 很顯然, 系統中不存在這條指令。 那么它為什么知道不存在?是不是因為系統查找了所有指令,但是找不到一條和我要的相同的? 所以, 我們就可以推斷, 指令在執行之前, 系統會先尋找指令。 那么這個指令在哪里尋找呢? 答案就是/usr/bin里面。 這里就是系統查找指令的地方, 所有指令都在這里放著————即:指令是在系統的特定路徑下存在的, 它一定是某種可執行程序。
那么, 如果我們將我們自己寫的程序,放到這里面, 是不是就相當于我們自己寫的程序也是一條指令了? 這個過程, 其實就是安裝程序。 現在我們來自己寫一個a.out并把它放在/usr/bin里面, 下次我們使用的時候就不需要加./了:
所以, 指令的本質就是可執行程序, 和我們自己寫的代碼, 編譯好的程序, 沒有本質區別。 但是如果我們不想要這個指令的時候還可以把他從/usr/bin里面移出來, 這個過程就是卸載程序:
綜上,我們可以得到, 指令的本質就是一個可執行文件, 只不過這個可執行文件被自動安裝到了系統的搜索目錄下面。
-----------------------下面接著講其他指令
//alias取別名
alias的用法是: alias 取的別名='指令'
ll其實就是一個別名, 要查看這個別名, 我們可以使用which,這里會告訴我們ll的原型是什么。
?我們可以自己給某個指令取一下別名:
然后取消別名就是將這個la的別名變成空指令的別名:
------------------
重定向與閱讀文本
現在先來了解一個概念:linux下一切皆文件, 顯示器, 鍵盤, 磁盤文件。 都是文件
?我們使用cat指令,如果我們cat后面什么都沒加, 那么cat就會默認在鍵盤上面讀取:
????????注意, 這里我們雖然輸入字符s, 顯示器上就有一個s, 回車又會打印一個s。 為什么是從鍵盤上讀取, 而不是從顯示器上讀取?因為這里本質上其實就是從鍵盤上讀取字符, 而我們之所以輸入一個字符, 能夠在顯示器上顯示出來, 是因為我們在鍵盤上輸入后, 顯示器給我們回顯到了屏幕上。 所以本質還是從鍵盤上讀取。
? ? ? ? 對于顯示器來說, 它沒有讀方法(NULL), 只有寫方法(fwrite)。 對于鍵盤來說, 他只有讀方法(fread), 沒有寫方法(NULL)。 而普通文件讀方法和寫方法都有。 而在linux的視角下,NULL也是有, 所以linux下面所有文件都有讀寫方法。?
? ? ? ? 所以, 這里可以重新來理解一下重定向: 把本應該寫到顯示器文件上的內容寫到了普通的磁盤文件中, 這就叫做重定向。
關于重定向, 我們還要了解到就是, 其實我們使用重定向, 它一共做了兩個步驟:
1、清空文件
2、向文件中寫入內容。
比如下面這個例子, 就是什么都沒寫, 只清空了文件。
//>>追加重定向
????????>是先清空再向文件中寫入內容。但是如果我們不想要清空文件, 就要是用>>, 這個是在文件的后面追加內容。
? ? ? ? 這里echo默認后面會添加換行符, 如果不想添加換行符, 就要使用printf
//<輸入重定向
cat當什么都不加的時候是默認從鍵盤上讀取數據。但是如果我們cat < 文件名, 就相當于cat 文件名, 意思是從文件中讀取數據。另外, cat還有一些選項:
cat -n 文件名, 對文件打印, 并且打印行號。
cat -b 文件名, 對文件帶你, 并且對非空行打印行號。
cat -s 文件名, 對文件打印, 如果有多個空行連起來, 那么只打印一個空行。
//more和less讀取大文件?
cat不適合讀取大文件,more和less更適合讀取大文件。 當我們用cat讀取大文件時:
我們智能使用鼠標向上滑動地翻找。
我們使用more讀取大文件, 文件會只將屏幕打滿, 我們向下翻找只需要按空格。
并且可以輸入行號跳轉到相應行數:
但是還有一些問題, 那就是不能上翻。 所以我們通常很少使用more, 更多的是使用less閱讀大文件, less閱讀大文件, 按上就是向上翻, 按下就是向下翻。
//head 和 tail 和 管道
head可以拿到文件中的前n行。 用法是 : head -行數 文件名:
tail 可以拿到文件中的倒數n行。 用法是: tail -行數 文件名:
????????如果此時我們要拿到中間5000行左右的數據怎么辦?
????????我們可以先拿到前5000行數據放到一個新的文件中, 然后再對新的文件取后幾十行, 就能拿到中間5000行左右的數據了。 但是這個方法有個問題, 就是必須創建中間文件, 但是我們不想創建中間文件。 怎么辦?
? ? ? ? 這里可以使用管道 | : 管道也是管道文件, 它是一種內存級文件(什么意思,博主也不懂)。
但是管道文件的作用就是將符號左邊的數據結果放到自己里面, 再將數據交給右邊進行計算。 相當于起到中轉的作用。在計算機中, 數據就是資源, 而管道文件就是輸送數據這種資源。 用法:
--------------
以上, 就是本節全部內容。
?//ps:下面都是一些對于操作系統的理解與一些課堂筆記, 友友們沒有興趣自行退出即可
????????操作系統是管理軟硬件資源的軟件。 計算機中最底層的就是硬件——比如cpu、顯卡、網卡、顯示器、鍵盤等等。 這些硬件的上一層就是驅動器, 驅動器是用來驅動硬件進行工作的。 而這些驅動器的上一層就是操作系統, 操作系統通過管理驅動器, 進而管理硬件。最上層其實就是應用軟件。 應用軟件提出需求, 操作系統根據需求間接管理硬件, 讓硬件做出相應的工作。
? ? ? ? 綜上, 操作系統, 驅動器, 硬件就是三層軟硬件資源, 提供了一套軟硬件服務。
? ? ? ? 如圖:
? ? ? ? 對于如圖四層資源, 我們可以這樣理解:
- ? ? ? ? 操作系統: 管理和決策——相當于boss
- ? ? ? ? 設備驅動: 溝通底層硬件, 接收操作系統的命令——相當于項目經理
- ? ? ? ? 硬件: 執行工作, 辦事——相當于程序員
- ? ? ? ? 應用程序: 向操作系統提出需求——相當于用戶
在日常中, 需要有各種各樣服務的軟件,來滿足用戶各種各樣的需求。? ? ? ?
? ? ? ? 個人筆記:
那么, 一個好的操作系統的衡量指標是什么, 為什么要有操作系統呢?
????????首先一個好的操作系統, 不能用著用著藍屏——要穩定; 其次, 一個好的操作系統不能用著非常卡, 體驗不好——要快, 流暢; 最后, 一個好的操作系統, 用戶的信息要安全, 否則信息很容易被盜取, 用戶的體驗不好——要安全。
? ? ? ? 至于為什么要有操作系統, 這就涉及到了操作系統的核心工作, 操作系統的核心工作就是通過對下管理好軟硬件資源的手段, 達到對上提供良好的, 穩定快速安全的操作環境。
? ? ? ? 個人筆記:
????????那么, 我們如何理解我們在計算機中執行的各種操作呢?
????????比如我們使用printf在顯示器上打印, 向磁盤中寫入數據, 玩游戲時像網絡中發送請求等等這些操作。 這些軟件操作其實最終都會被轉化為硬件操作。
? ? ? ? 也就是說, 我們日常在計算機上面執行的各種行為, 最終都會被轉化為硬件行為。
? ? ? ? 比如說我們使用printf, printf最終會打印到我們的顯示器上。 其實本質就是通過軟件將內容打印到了硬件上。? ? ? ? 我們向磁盤中寫入數據, 其實就是將代碼——軟件, 寫到了磁盤——硬件上。? ? ? ? ?還有我們打網絡游戲時, 為什么我們能夠同步的看到別人的狀態情況,其實就是因為我們每個人的電腦都在向服務端推送數據, 而這個推送的過程中, 就要先將數據輸入到網卡上面。
? ? ? ? ?綜上, 我們任何軟件的行為, 最終都會轉換為硬件行為。 并且這個過程自頂向下, 貫穿整個計算機軟硬件結構, 而軟件的下層挨著的就是操作系統。所以未來我們進行各種計算機操作, 都和操作系統直接或者間接的相關!
? ? ? ? 個人筆記:
----------
下面是本節全部的筆記(個人筆記,整理很亂, 友友們自行選擇是否觀看):