一、Linux基礎指令
1. ls
ls
:對于目錄,列出該目錄下的所有子目錄與文件,對于文件,將列出文件名以及其他信息。
-a:列出目錄下的所有文件,包含以.開頭的隱藏文件
-l:列出文件的詳細信息
-d:將目錄像文件一樣顯示,而不是顯示目錄下的文件
-i:輸出文件的索引信息
注:這些選項也可以混合使用
。
2. pwd
pwd
:顯示用戶當前所在的目錄。
3. cd
在了解cd命令之前,需要對路徑有一個初步的認識。
路徑:絕對路徑、相對路徑。
/
:代表根目錄。
家目錄:/home/username或~
(一般是這樣,root用戶除外),指定用戶登錄的時候,默認所處的路徑叫做家目錄。
絕對路徑
:一般從/(根目錄)開始,不依賴于其他目錄定位文件的方式。
相對路徑
:相對于當前用戶所處目錄位置,定位文件的路徑方式。
路徑存在的意義:樹狀組織方式,為了保證快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案來實現。其中任何一個節點(目錄/文件)都只有一個父節點(父目錄)并且在同一目錄下不能有同名文件,所以,從根目錄開始,路徑具有唯一性
。
使用場景:絕對路徑一般在配置文件中使用,相對路徑在命令行中使用較多。
.
:表示當前目錄。
..
:表示上一級目錄。
cd
:改變工作目錄。將當前工作目錄改變到指定目錄下。
目錄名:絕對路徑/相對路徑
-:直接回退到最近一次所處的目錄
~:快速進入家目錄
跳轉至最近一次路徑
。
4. touch
touch
:touch命令參數可更改文檔或目錄的日期時間,包括存取時間和更改時間,或者新建一個不存在的文件。
-a:修改access time
-m:修改modify time
-c:修改modify time
文件名:創建文件
不同的系統會有差別。
access time包括訪問文件內容和文件屬性
修改modify time,所以change time也會修改,modify time也屬于文件屬性,所以access time也會修改
。
5. mkdir
mkdir
:在當前目錄下創建目錄。
-p:可以是一個路徑名稱。此時若路徑中的某些目錄不存在,加上此選
項后,系統將自動建立好那些不存在的目錄,即一次可以創建多個目
錄。
6. rmdir
rmdir
:刪除空目錄。
適用對象:具有當前目錄操作權限的所有使用者。
-p:當子目錄被刪除后,如果父目錄也變成空目錄,就連帶父目錄一起
刪除。
7. rm
適用對象:所有使用者。
rm
:刪除文件或目錄。
-f:直接刪除
-i:刪除前逐一確認
-r:刪除目錄及其下所有文件
8. man
man
:查看手冊(就像字典一樣)。
用法:man -k 查找內容
簡單介紹一下man手冊,分為9章:
1.普通命令
2.系統調用
3.庫函數
4.特殊文件
5.文件格式
9. cp
cp
:復制文件或目錄。
用法:cp 選項 源文件/目錄 目標文件/目錄
-f:強制復制文件或目錄
-i:覆蓋文件之前先詢問
-r:遞歸處理,將指定目錄下的文件與目錄一并處理
如果目標文件存在就覆蓋
遞歸強制拷貝整個目錄
10. mv
mv
:用來移動文件或者將文件改名,經常用來備份文件或者目錄。
用法:mv 選項 源文件/目錄 目標文件/目錄
-f:如果目標文件已存在,不會詢問直接覆蓋
-i:若目標文件已存在,就會詢問是否覆蓋
若存在相同文件,改名即覆蓋
。
11. cat
cat
:查看目標文件的內容。
cat 選項 文件
-b:對非空輸出行編號
-n:對輸出的所有行編號
-s:不輸出多行空行(多行空行壓縮成一行空行)
12. more
more
:功能類似于cat,查看大文件,只能往下翻,不能往上翻。
-n:指定輸出行數
q:退出
13. less
less
:與more類似,但less可以隨意瀏覽文件,而且less在查看之前不會加載整個文件。
-i:忽略搜索時的大小寫
-N:顯示每行的行號
/關鍵詞:向下搜索
?關鍵詞:向上搜索
n:重復前一個搜索
N:反向重復前一個搜索
q:退出
14. head
head
:用來顯示文件的開頭至標準輸出中,默認head命令打印其相應文件的開頭10行。
-n:顯示的行數
15. tail
tail
:用來顯示指定文件末尾內容。不指定文件時,作為輸入信息進行處理,常用來查看日志文件。
-f:循環讀取
-n:顯示行數
16. date
date
:顯示時間。
%Y:年份
%m:月份
%d:日期
%H:小時
%M:分鐘
%S:秒數
%X:相當于%H:%M:%S
%F:相當于%Y:%m:%d
%s:時間戳
17. cal
cal
:用來查看日歷等時間信息,如只有一個參數,則表示年份,如有兩個參數,則表示月份和年份。
-3:顯示系統前一個月,當前月,下個月的日歷
-j:顯示在當年中的第幾天(一年日期按天算,從一月一號開始算起,默
認顯示當前月在一年中的天數)
-y:顯示當前年份的日歷
18. find
find
:在文件樹中查找文件,并做出相應處理。
查找小于1M的文件
查找大于1M的文件
19. which
which
:搜索系統指定的命令。
20. whereis
whereis
:用于找到程序的源,二進制文件或手冊。
21. alias
alias
:設置命令的別名。
22. grep
grep
:在文件中搜索字符串,將找到的行打印出來。
-i:忽略大小寫的不同
-n:輸出行號
-v:反向匹配
23. top
top
:查看和管理系統的進程資源占用情況。
-d:刷新的時間間隔
-n:刷新的次數
q:退出
24. zip、unzip
zip
:將目錄或文件壓縮成zip格式。
-r:遞歸處理,將指定目錄下的所有文件和子目錄一并處理。
unzip
:解壓。
25. lsb_release
-a:查看當前操作系統發行版詳細信息
26. rzsz
sz
:從遠程服務器下載文件到本地計算機。
用法:sz 文件名
rz
:從本地計算機上傳文件到遠程服務器。
用法:rz
27. tar
tar
:打包/解包。
-c:建立一個壓縮文件
-z:是否同時具有gzip的屬性(即是否需要用gzip壓縮)
-v:壓縮的過程中顯示文件
-f:使用檔名,f之后要立即接檔名,不要再加參數
-x:解開一個壓縮文件
-C:解壓到指定目錄
28. bc
bc
:進行浮點運算。
29. uname
uname
:獲取操作系統和電腦的相關信息。
-a:詳細輸出所有信息。
二、重要的幾個熱鍵
Tab按鍵
:具有命令補全和檔案補齊的功能。
Ctrl+c按鍵
:讓當前的進程停掉。
三、shell命令及運行原理
命令的本質:Linux系統中指定目錄下的可執行文件
。
舉一個簡單的例子來理解一下外殼程序和操作系統的關系。
故事:有一個內向的男人小張,他喜歡一個女人如花,但是他并不善于和異性打交道,因此,需要一個媒婆去幫他說媒,所以,媒婆帶著小張的需求去詢問如花,媒婆說小張不僅條件好,而且長得帥,但是如花說不喜歡小張。于是媒婆帶著結果找到了小張,告訴了小張。
看到這里,大家應該會有些問題。
1.為什么要有外殼?
小張是真心喜歡如花的,所以他還不想就這樣放棄,于是讓王婆再一次去幫他說媒,但是當王婆走到如花家門口的時候,看到如花家里坐著另一個男人李四,王婆一看到這個情況,連門都沒進去直接就回去了,這樣就保護了如花和李四的感情。
總結:為了保護操作系統
。
從這里就可以看出,小張雖然不善于和異性打交道,但是和王婆打交道還是可以的。
總結:方便用戶操作,減少用戶使用操作系統的成本
。
2.外殼是怎么工作的?
王婆一再將小張的要求搞砸了,這樣下去會影響王婆的口碑啊,以后誰還敢找王婆說媒呢!于是王婆成立了一個媒婆婚介所,招了一批實習生,讓實習生去說媒,這樣即使搞砸了也不會影響自己的口碑。
總結:shell的子進程去解釋執行的
。
shell是外殼程序的統稱,在linux中叫做bash。
3.什么是操作系統?為什么要有操作系統?
先給結論:操作系統是一款進行軟硬件資源管理的軟件
。
計算機的軟硬件體系結構是層狀的,最底層往往是硬件,包括鼠標,硬盤,網卡,內存,cpu等各種設備,這些硬件都是需要對應的驅動程序的。舉個例子,鼠標在連接計算機時,在一兩秒內你去動鼠標可能會沒有反應,等一會可能會在計算機右下角顯示某某驅動程序已安裝好,這個時候你去動鼠標他就會有反應。驅動程序就是用來控制硬件工作的。操作系統扮演的角色是管理者,它要進行內存管理,進程管理,文件管理,硬件管理等。操作系統為什么要進行管理呢?比如說,你在玩游戲時,總是動不動就黑屏,卡退,刷抖音時,總是閃退,重啟,那么就會造成非常不好的體驗,所以,操作系統進行管理就是為了給用戶提供一個良好的運行環境。所以為什么要有操作系統呢?對下要做好軟硬件的管理工作(手段),對上要提供一個良好的運行環境(目的)
。
如何定義什么是良好的運行環境呢?
1.穩定 2.高效 3.安全
四、Linux權限
在談Linux權限之前,先來看看Linux中文件類型。
1.文件類型
在windows中,區分文件類型是根據文件名后綴來進行區分的。
Linux區分文件類型,是用文件的屬性列區分的
。
-
:代表普通文件
d
:代表目錄/文件夾
除此之外。還有許多文件類型。
軟鏈接
塊設備:支持隨機讀取,以塊為單位
(磁盤)。
字符設備:不支持隨機讀取,按照字符為單位
(顯示器,鍵盤)。
管道文件(用來實現進程間的通信
)
2.Linux用戶
任何一款操作系統都叫做多用戶操作系統。
那么,這些用戶也有區分,Linux中用戶被分為兩類,root(Linux管理員,只能有一個),普通用戶(可以有多個)
說到這里了,就不得不說一下,用戶登錄和切換問題了?
先來看以下幾個命令。
adduser username:添加用戶,創建家目錄
userdel -r username:刪除用戶,并刪除家目錄
id username:檢查用戶是否被刪除
用戶切換
root用戶切換普通用戶,直接切換,不需要密碼(root用戶擁有操作Linux的最高權限
)
普通用戶不能直接切換普通用戶(需要密碼)
su username:單純的進行身份切換,但不會改變家目錄
如果我要做一件提高權限的事情,但是不想變成root,怎么辦呢?
sudo指令提權功能,以root身份運行該命令
sudo cp myfile.txt /usr/bin失敗了,是因為默認新增的用戶,無法執行sudo,不受系統信任
。那么該怎么辦呢?這就相當于你進入了好友的黑名單了,你要在白名單里才可以使用sudo命令。這個時候就要以root身份去將你添加到系統的白名單里(/etc/sudoers)才可以
。
將新增的用戶添加到白名單里。
3.權限的理論理解
結論:權限 = 人 + 事物屬性
舉個簡單的例子:你想在愛奇藝上寫代碼,這是不可能的,愛奇藝是用來看電影的,它并不具備寫代碼的屬性。
在linux上,一切皆文件
。
那么,文件權限 = 用戶 + 文件權限屬性
。
文件的權限屬性包括r(讀),w(寫),x(可執行)
。
文件權限決定的是能不能干這件事情。
用下面的一張圖來認識一下權限。
可以看到,文件權限擁有九個字符,而文件權限也就只包含了r(讀),w(寫),x(可執行),按理來說只需要三個字符就可以了呀,這是為什么呢?這是因為系統要對文件權限進行管理,一個文件可能會有很多用戶去使用,系統對這些用戶進行了管理,分為擁有者,所屬組,other。而文件權限被劃分為三組,三個為一組,分別代表擁有者,所屬組,other
。那么在上面的圖中,為什么沒有顯示other組呢?這是因為用戶太多了,系統記不全,所以只要是除了擁有者,所屬組之外的用戶都屬于other組的。
注:
r(具有讀權限) / -(不具有讀權限)
w(具有寫權限) / -(不具有寫權限)
x(具有可執行權限) / -(不具有可執行權限)
擁有者,所屬組,other是三種角色,而root , lc等屬于具體的人。是由具體的人來扮演角色的。
4.權限的操作實驗
文件權限 = 用戶 + 文件權限屬性。所以,操作實驗就是從兩個方面來進行論證的。用戶或者文件權限屬性。
4.1 改變文件權限屬性
方法一:
改變擁有者權限
改變所屬組的權限
改變other的權限
同時對多人進行修改權限。
方法二:
有權限用1來表示,無權限用0來表示,所以也可以用8進制的方式來修改權限。
普通用戶無法進入到root的目錄里
root用戶可以進入到普通用戶的目錄里
root用戶(既不屬于擁有者也不屬于所屬組)只有 r 權限,卻可以向test.txt文件里寫內容。這是為什么呢?因為root用戶可以無視權限的約束
。
即使是擁有者自己,沒有相應的權限也不允許執行相應的動作。
看到這里,大家應該會有一個問題。lc既是擁有者也是所屬組,雖然擁有者沒有相應的權限,但是所屬組有權限啊,為什么還是會執行失敗呢?
這是因為匹配身份的時候只會匹配成功一次,一旦匹配成功,執行失敗,也不會再去匹配下一個角色身份了
。
4.2 改變用戶
直接改變擁有者是不被允許的。
舉個簡單的例子:你有一個東西想要給別人,你可以給,但是別人有權利拒絕不要。所以,這種直接切換用戶的操作是不被允許的。我們可以使用sudo來進行提權。
文件權限的修改只有root用戶和文件擁有者可以修改,其他人不允許。可以使用sudo提權(相當于是以root的身份)來修改
。
更快捷的改變擁有者,所屬組。
以上都是基于普通文件的權限實驗。那如果是一個目錄呢?
要進入目錄,需要什么權限呢?
結論:通過對比可以得出,進入目錄需要x權限
。
那么,r 權限和 w 權限又是影響什么的呢?
結論:是否允許查看指定目錄下的文件信息,需要r權限
。
結論:指定目錄下新建文件、刪除文件,修改文件名需要w權限
。
大家此時有沒有疑問呢?若是沒有的話,我來提幾個問題吧!
1.為什么新建一個文件或者目錄的時候,缺省的權限,剛好是我們看到的樣子?
這是因為權限掩碼的緣故。
不同的系統,權限掩碼默認值可能不一樣。
普通文件的起始權限是666,目錄的起始權限是777
。
什么是權限掩碼?
權限掩碼:過濾掉在權限掩碼中出現的權限
。
所以,最終權限 = 起始權限 & (~umask)
如何證明呢?
我們只需要更改一下umask值,查看文件的最終權限是否和我們所預想的一致就可以得到答案了。
2.為什么普通用戶可以刪除root用戶創建的文件呢?
文件可以讀可以寫是取決于文件本身的權限
,那么普通用戶為什么可以刪除root用戶創建的文件呢?這是因為該文件是否可以被刪除依賴于所處的目錄是否具有w權限
。
到了這里,我們就能發現一個現象。root賬號,憑什么在我的路徑下新建文件。
普通用戶的家目錄,只有root和自己能進入
。
那如果我想讓多個普通賬號之間,進行文件或者數據共享呢?那就只能放在root賬號公共目錄下了,因為普通用戶之間是無法進入到另一個普通用戶的家目錄去的,更無法進入到其它路徑下
。
這種方法可以實現數據共享,但是也會存在互刪的情況,避免引起混亂,所以有了粘滯位。
粘滯位只能對目錄進行設置
,設置了粘滯位的目錄,其下的文件只能由1.超級管理員刪除 2.該目錄的所有者刪除 3.該文件的所有者刪除
。
file命令:查看文件更詳細的信息