《前端運維》一、Linux基礎--基礎命令(1)

Zaking發表於2021-05-09

在開始之前,你需要做一些準備工作,去阿里買一臺伺服器,伺服器的具體細節其實並不是十分重要,我也不會在這裡一步一步的教大家如何去買一個伺服器。百度一下足夠了,但是還是要貼一下這篇文章中,我所使用的伺服器系統及其版本:

 版本之間應該不會有太大的差異,但是最好不要選太新的版本,因為還不夠穩定。好了,下面我們開始進入正題。

一、目錄

作為一臺電腦,我們首先要知道的就是其目錄的含義及用處,在後面的學習中十分重要,這些都是最基礎的概念。我們可以先來看一下,linux中都有哪些目錄:

 我們看到一共有這些目錄,那麼下面我們一一解釋一下:

  1. /,即系統的根目錄。注意,在linux中並沒有windows中的C盤、D盤這樣的分割槽,所以“/”就可以簡單理解為windows的C盤目錄。用於存放系統檔案。
  2. /boot,啟動目錄,啟動相關檔案。
  3. /dev,裝置檔案
  4. /etc,配置檔案
  5. /home,普通使用者的家目錄,可以操作
  6. /lib,系統庫儲存目錄
  7. /mnt,移動裝置掛載目錄
  8. /media,光碟掛載目錄
  9. /misc,磁帶機掛載目錄
  10. /root,超級使用者的家目錄,可以操作
  11. /tmp,臨時目錄,可以操作
  12. /proc,正在執行的核心資訊對映,主要輸出程式資訊、記憶體資源資訊和磁碟分割槽資訊等等
  13. /sys,硬體裝置的驅動程式資訊
  14. /var,變數
  15. /bin,普通的基本命令,如ls、chmod等,一般的使用者也都可以使用。
  16. /sbin,基本的系統命令,如shutdown、reboot,用於啟動系統,修復系統,只有管理員才可以執行
  17. /usr/bin,後期安裝的一些軟體的執行指令碼
  18. /usr/sbin,放置一些使用者安裝的系統管理的必備程式

以上只是簡單地目錄結構,還不夠詳細,但是目前這些足夠了,更細緻的內容會在後面的學習中更加深入。

二、命令的基本格式

1、命令提示符

我們先來看個圖:

 上面的圖中實際上有四個關鍵資訊,是這樣的[當前登入使用者@主機名 當前工作目錄]提示符。我們再來看上圖:

  1. root,即當前登入使用者,
  2. @後面的一串就是主機名(我買的時候就這樣啊,可以改的)。
  3. ~即當前使用者的家目錄,root就是/root,普通使用者就是/home/使用者名稱。(這個很簡單,可以自己驗證一下)
  4. 中括號後面的#就是提示符,超級使用者是#,普通使用者就是$。

2、命令格式

這個我就簡單說下吧,很好理解。命令格式就是這樣的:

命令 [選項][引數]

其中當有多個選項的時候,可以寫在一起,引數呢有簡化和完整寫法,是等效的。

3、ls命令

ls [選項][目錄或檔案],即查詢目錄中的內容,選項有這些:

  • -a,顯示所有檔案,包括隱藏檔案。
  • -l,顯示詳細資訊。
  • -d,檢視檔案本身的屬性,而非子檔案。
  • -h,人性化的方式顯示檔案大小。
  • -i,顯示inode,也就是i節點,每個節點都有ID號。

以上的命令,其實都不復雜,大家自己要去試一下。

那麼這裡有個需要詳細說明一下的內容,就是當我們使用ls -l命令,顯示的資訊是什麼意思,如下圖所示:

 我們先分解下紅框裡的內容:

d rwx r-x r-x .   2 root root 6 May 4 19:18 readbook
檔案型別和許可權 硬連結引用計數 所有者 所屬組 檔案大小 最後修改時間 檔名

這裡面唯一要多解釋一下的就是檔案型別和許可權,表格中的部分我都用空格分割開了,一一解釋一下:

  • d,代表檔案的型別,可能的值有這些,其中-和d是最常見的型別:
    • -:普通檔案,
    • d:目錄檔案,
    • l:連結檔案,
    • b:裝置檔案,
    • c:字元裝置檔案,
    • p:管道檔案。
  • 後面的三部分其實都由rwx組成:
    • r:read、讀、4
    • w:write、寫、2
    • x:execute、執行、1
    • 其中-即代表沒有對應許可權。後面的數字代表著對應的許可權數值。分為的三組,按照順序分別代表著檔案所有者、檔案所屬組、其他使用者。
  • 最後的".",代表ACL許可權,簡單來說就是我們給指定的使用者指定目錄分配指定的許可權,也就是 ACL 許可權的分配。

三、檔案處理命令

 我們先羅列一下常用命令及其含義:

  1. mkdir [目錄名],建立目錄,
    • -p,允許建立目錄及其子目錄,比如mkdir -p a/b/c。
  2. cd  [目錄名],切換目錄。相對路徑是根據當前所在目錄而言。絕對路徑是從根目錄開始。TAB可以補全命令或目錄。
    • ~,家目錄。
    • . ,當前目錄
    • .. ,上級目錄
  3. pwd,顯示當前目錄
  4. rmdir  [目錄名],刪除目錄
  5. rm  [檔案或目錄名],刪除檔案或者目錄。
    • -r,遞迴刪除目錄
    • -f,強制刪除
    • -rf,遞迴強制刪除所有目錄。慎用!
  6. cp  [原始檔或目錄名] [目標檔案或目錄名],複製。
    • -r,複製目錄,預設是複製檔案
    • -p,連帶檔案屬性複製
    • -d,若原始檔是連結檔案,則複製連結屬性
    • -i,可重新命名檔案,會在複製的時候提示,如果存在同名檔案,是否覆蓋
    • -a,相當於-rpd。
  7. mv [原始檔或目錄名] [目標檔案或目錄名],移動檔案或者改名。
  8. ln [原始檔] [目標檔案],連結命令,生成連結檔案。可以理解成windows桌面上的快捷方式。
    • 硬連結,擁有相同的i節點和儲存block塊,可以看做是同一個檔案,可以通過i節點訪問,不能跨分割槽,不能針對目錄使用,一般不使用。
    • 軟連線,-s即建立軟連線,類似windows的快捷方式,軟連線擁有自己的i節點和block塊,但是資料塊中只儲存原始檔的檔名和i節點號,並沒有實際的檔案資料。軟連線的檔案許可權都是777,修改任意一個檔案,另一個都會改變,刪除原始檔,軟連線不可以使用,軟連線原始檔必須寫絕對路徑。

以上,我們已經瞭解了一些基本的檔案處理命令,那麼下面,我們基於此來看一些例子:

 ok,我們先執行cd /,來到根目錄

 然後,我們執行mkdir a/b/c

 哦吼,他報錯了,當然它肯定會報錯的,我們回憶一下,好像缺了點什麼

 是的,我們缺了一個“-p”的選項,好了,目錄建立完了,我們進去看看吧。執行cd a

 一如我們所料,那...我想把b檔案刪了,該怎麼辦呢?哦對了,rmdir命令。我們來試一下

 可惜,又報錯了,好像又缺了點什麼,它說資料夾不是空的,哦對了,剛才我們建立了一個遞迴的目錄,所以b下面還有c,所以以此可以知道rmdir不能刪除非空資料夾,那在怎麼辦呢?

 根據上面學習的內容試了下-r和-f,好像都不行,哎?給了提示,試一下--help。哦,好像用-p可以:

 終於可以了。

除此以外,還有另外一種方法,rm -r也可以。

 但是這樣好像有點麻煩,它會一級一級的讓你去確認,有沒有更舒服一點的方法呢,那我們把刪除掉的b/c復原一下(復原過程省略)。於是我們的目錄又變成這樣了:

 我們使用rm -rf

 這裡尤其強調一下,如果在實際工作中,你有root許可權,請一定要小心使用這個命令,如上圖所示,刪除了所有的東西又不會有任何提示。

好了,我們上面是刪除的目錄,那我刪除個檔案試試:

 刪除檔案會有提示。

以上,我們經歷了簡單地建立資料夾、進入資料夾、刪除資料夾及檔案等內容。下面我們繼續。

首先我們先想一個問題,假設我不是root使用者,我剛進入伺服器,或者我經歷了大量的操作,忘記了當前目錄在哪。怎麼辦呢?

 pwd命令可以告訴你所處的位置。

那,我們現在來試試複製一個資料夾或檔案:

我們進入到a目錄,把之前存在的b目錄刪掉,然後建立兩個資料夾b1和b2,所以我們的目錄現在是這樣的:

 然後呢,我們進入b1,建立個檔案,名字叫c1.js好了。

 最後呢,我們把c1.js複製到b2中去:

 這樣就完成了複製。

如果我想複製的時候改名的話,可以試一下-i選項。

ok,我們完成了複製,那我想把c1.js從b1目錄移動到b2目錄怎麼辦呢?我們使用時光機,回到b1資料夾中有c1.js而b2中沒有的那個時刻,然後移動c1.js到b2目錄

 很簡單,這樣我們就完成了移動。

最後,我們來看下連結怎麼使用。我們先到b2裡。然後執行命令

 這樣,我們就建立了一個硬連結。然後,我們再來建立個軟連線:

 那,這也看不出來軟和硬到底有啥區別啊,那我們這樣:

 可以看到一點區別了吧,具體的內容跟我上面說過的一樣哦,如果不理解,可以回過頭去看一下之前的內容。

 

承前一篇,之前我們已經簡單地瞭解了linux的一些基本命令,這一篇文章,我們繼續往下。首先,我們先學習下檔案搜尋命令。

四、檔案搜尋命令

按照我們之前的方式,先把相關的命令羅列一下:

  1. locate,搜尋檔案所在位置,比如locate 1.js
    • 需要依賴mlocate,通過yum install mlocate -y來安裝
    • 資料儲存在/var/lib/mlocate後臺資料庫,每天更新一次
    • 可以updatedb命令立刻更新資料庫
    • 只能搜尋檔名
  2. whereis,搜尋命令所在路徑以及幫助文件所在位置,比如 whereis ls
    • -b,只查詢可執行檔案
    • -m,只查詢幫助檔案
  3. which,可以查詢別名,比如which ls
  4. 環境變數,通過echo $PATH命令可以檢視,定義的是系統搜尋命令的路徑
  5. find,檔案搜尋命令,find [搜尋範圍] [搜尋條件]
    • 按名稱搜尋,避免大範圍的搜尋,會十分消耗效能。比如:find / -name 1.js
    • 萬用字元,其實就是類似於js正則。
      • *匹配任意內容
      • ?匹配任意一個字元
      • []匹配任意一箇中括號中的內容
    • -i,不區分大小寫,比如find / -iname A.js
    • -user,按所有者進行搜尋 
      • find /root -user root
      • find /root -nouser
    • 按時間搜尋,find /a/1.js -mtime -5
      • mtime:檔案訪問時間,ctime:改變檔案屬性時間,mtime:修改檔案內容時間
      • -5:五天內修改的內容,5:五天前當前修改的檔案,+5:五天前修改的檔案。
    • 按大小搜尋,-size,find . -size 100k
      • -8k:小於8k,8k:等於8k,+8k:大於8k,+8M:大於8M
    • -inum,按照i節點搜尋,比如find . -inum 123456,find . 中.的意思是搜尋範圍為當前目錄下的所有檔案
    • -a,既and,邏輯與,兩個條件都滿足。-o,既or,邏輯或,滿足一個條件即可。比如:find /tmp -size +10k -a -size -20k
  6. grep,在檔案當中匹配符合條件的字串,也就是匹配的是檔案中的內容,而不是檔名。
    • -i,忽略大小寫
    • -v,排除指定字串

我們來實踐一下我們學習過的命令:

1、首先,我們在根目錄建立一個demo資料夾,在demo資料夾內建立一個test.js的檔案,那麼現在我們的目錄結構看起來是這樣的:

 然後,要注意的是locate命令需要依賴一個mlocate資料庫。我們通過yum install mlocate -y安裝即可。然後我們使用locate test.js命令:

 結果什麼也沒發生,好像不太對勁,哦對了,mlocate是依賴資料庫的,它大概每五分鐘更新一次,所以,剛才我們建立的test.js檔案還未更新,我們可以使用updatedb命令立即更新資料庫,然後再執行查詢命令:

 這樣就達到我們的目的啦。

2、whereis是用來查詢我們所使用的命令的相關檔案在哪裡,很簡單:

 那麼第一個路徑就是它的執行檔案路徑,第二個就是幫助頁面所在路徑、後面就是它的原始檔。如果只是想檢視它的可執行檔案路徑,可以使用:

 3、which比較簡單,就是查詢別名

 輸出的結果什麼意思呢,就是我們使用的ls實際上是命令ls --color=auto的別名,執行ls就相當於執行ls --color=auto了。

4、列印環境變數,這個也沒啥好說的

 5、find命令的選項比較多,需要大家都試一下。

 6、這個要注意,它查詢的是檔案的內容,而不是檔名啊什麼的。那,我們現在test裡面通過vim(下節會講)寫東西:

 

 

好了,我們把之前學過的命令都簡單實踐了一遍,我們往下繼續學下壓縮。

五、壓縮與解壓縮命令

  1. zip格式
    • 壓縮檔案,zip [壓縮檔名] [原檔案]
    • 壓縮目錄,zip -r [壓縮檔名] [源目錄]
    • 解壓,unzip [壓縮檔名]
  2. gzip格式
    • gzip [原始檔],gzip a.txt,壓縮為.gz格式的壓縮檔案,原始檔會消失
    • gzip -c [原始檔] > [壓縮檔案],gzip -c yum.txt > yum.txt.gz,壓縮為.gz格式的壓縮檔案,原始檔會消失
    • gzip -r [目錄],gzip -r xx,壓縮目錄下的所有子檔案,但是不壓縮目錄
    • gzip -d [壓縮檔名],gzip -d yum.txt.gz,解壓縮檔案,不保留壓縮包
    • gunzip [壓縮檔案],gunzip yum.txt.gz,解壓縮檔案,不保留壓縮包
  3. tar,打包命令,只打包,不壓縮
    • -c,打包
    • -v,顯示過程
    • -f,指定打包後的檔名
    • -x,解打包
  4. bz2格式,不能壓縮目錄
    • bzip2 原始檔,bzip2 1.txt,壓縮為.bz2格式的檔案,不保留原始檔
    • bzip2 -k 原始檔,bzip2 -k 1.txt,壓縮為.bz2格式的檔案,保留原始檔
    • bzip2 -d 壓縮檔名,bzip2 -d 1.txt.bz2,解壓壓縮包
    • bunzip2 壓縮檔名,bunzip2 1.txt.bz2,解壓壓縮包
  5. tar.gz壓縮,zip可以壓縮目錄,但是壓縮效率不高,gzip壓縮效率高但是不能壓縮目錄,所以先通過tar打包後再通過gzip壓縮。
    • tar -zcvf book.tar.gz book,壓縮
    • tar -zxvf book.tar.gz

我們繼續實踐:

1、我們繼續使用之前的test.js檔案來實踐壓縮命令即可:

 多了個zip檔案,那名字是我們隨便寫的麼?

 答案是是的。解壓縮的命令,大家可以自己去試一下哦。有驚喜哦。

2、

六、關機和重啟命令

這個就簡單說一下

  1. shutdown,關機命令
    • -c,取消前一個關機命令
    • -h,關機
    • -r,重啟,shutdown -r 06:00
  2. init,關機
    • init 0,關機
    • init 6,重啟
    • 系統的執行級別:
      • 0 關機
      • 1 但使用者
      • 2 不 完全多使用者,不包含NFS服務
      • 3 完全多使用者
      • 4 未分配
      • 5 圖形介面
      • 6 重啟
  3. logout,退出登入

七、檢視使用者登入資訊

  1. w,檢視登入使用者資訊,結果列表中的含義分別是:
    • USER 登入的使用者名稱
    • TTY 登入的終端 tty1 本地終端 pts/0遠端終端
    • FROM 登入的IP
    • LOGIN 登入時間
    • IDLE 使用者閒置時間
    • JCPU 該終端所有程式佔用的時間
    • PCPU 當前程式所佔用的時間
    • WHAT 正在執行的命令
  2. who,檢視登入使用者資訊:
    • USER 登入的使用者名稱
    • TTY 登入的終端 tty1 本地終端 pts/0遠端終端
    • LOGIN 登入時間(登入的IP)
  3. last,檢視當前登入和過去登入的使用者資訊 預設讀取 /var/log/wtmp 檔案
    • 使用者名稱
    • 登入終端
    • 登入IP
    • 登入時間
    • 退出時間(線上時間)
  4. lastlog,檢視所有使用者的最後一次登入時間
    • 使用者名稱
    • 登入終端
    • 登入IP
    • 最後一次登入時間

八、檢視檔案命令

  1. cat,
  2. more,
  3. head,
  4. tail,tail -f

今天就到此為止了,我們總結一下目前學過的內容:

1、我們簡單學習了linux系統的基本目錄結構。以及/和~都是什麼。

2、還學習了命令的基本格式。

3、然後,我們還學習了一些常用的增刪改查的命令,以及軟硬連結的區別。

4、最後我們一起對學習過的命令進行了實際的操作

 

好了,今天我們就先到這裡,下集繼續。

相關文章