2 萬字系統總結,帶你實現 Linux 命令自由?
點選進入“PHP開源社群”
免費獲取進階面試、文件、影片資源
前言
Linux 的學習對於一個程式設計師的重要性是不言而喻的。前端開發相比後端開發,接觸 Linux
機會相對較少,因此往往容易忽視它。但是學好它卻是程式設計師必備修養之一。
如果本文對你有所幫助,請點個:+1: 吧。
作者使用的是阿里雲伺服器 ECS
(最便宜的那種) CentOS 7.7
64位。當然你也可以在自己的電腦安裝虛擬機器,虛擬機器中再去安裝 CentOS
系統(這就完全免費了)。至於它的安裝教程可以去谷歌搜尋下,相關教程非常多。
Linux 基礎
作業系統
作業系統 Operating System
簡稱 OS
,是軟體的一部分,它是硬體基礎上的第一層軟體,是硬體和其它軟體溝通的橋樑。
作業系統會控制其他程式執行,管理系統資源,提供最基本的計算功能,如管理及配置記憶體、決定系統資源供需的優先次序等,同時還提供一些基本的服務程式。

什麼是 Linux
Linux 系統核心與 Linux 發行套件的區別
-
Linux
系統核心指的是由Linus Torvalds
負責維護,提供硬體抽象層、硬碟及檔案系統控制及多工功能的系統核心程式。 -
Linux Linux Linux
總結:真正的 Linux
指的是系統核心,而我們常說的 Linux
指的是“發行版完整的包含一些基礎軟體的作業系統”。
Linux 對比 Windows
-
穩定且有效率;
-
免費(或少許費用);
-
漏洞少且快速修補;
-
多工多使用者;
-
更加安全的使用者與檔案許可權策略;
-
適合小核心程式的嵌入系統;
-
相對不耗資源。
Linux 系統種類
-
Linux RHEL Linux
-
Fedora RHEL Fedora RHEL
-
CentOS RHEL Linux
-
Deepin
:中國發行,對優秀的開源成品進行整合和配置。 -
Debian
:穩定性、安全性強,提供了免費的基礎支援,在國外擁有很高的認可度和使用率。 -
Ubuntu Debian Ubuntu Fedora Linux Ubuntu
終端連線阿里雲伺服器

通過執行 ssh [email protected]
命令,然後輸入伺服器連線密碼就可以順利登陸遠端伺服器。從現在開始我們就可以在本地電腦操作遠端伺服器。
-
這個黑色的面板就是終端也就是
Shell
(命令列環境)。 -
ssh [email protected]
這是一條命令,必須要在Shell
中才能執行。
Shell
Shell
這個單詞的原意是“外殼”,跟 kernel
(核心)相對應,比喻核心外面的一層,即使用者跟核心互動的對話介面。
-
Shell command line interface CLI Shell
-
Shell Shell Shell Shell
-
Shell
是一個工具箱,提供了各種小工具,供使用者方便地使用作業系統的功能。
Shell 的種類
Shell
有很多種,只要能給使用者提供命令列環境的程式,都可以看作是 Shell
。
歷史上,主要的 Shell
有下面這些:
-
Bourne Shell(sh)
-
Bourne Again shell(bash)
-
C Shell(csh)
-
TENEX C Shell(tcsh)
-
Korn shell(ksh)
-
Z Shell(zsh)
-
Friendly Interactive Shell(fish)
其中 Bash
是目前最常用的 Shell
。 MacOS
中的預設 Shell
就是 Bash
。
通過執行 echo $SHELL
命令可以檢視到當前正在使用的 Shell
。還可以通過 cat /etc/shells
檢視當前系統安裝的所有 Shell
種類。
命令
命令列提示符
進入命令列環境以後,使用者會看到 Shell
的提示符。提示符往往是一串字首,最後以一個美元符號 $
結尾,使用者可以在這個符號後面輸入各種命令。
執行一個簡單的命令 pwd
:
[[email protected] ~]# pwd
/root
複製程式碼
命令解析:
-
root
:表示使用者名稱; -
iZm5e8dsxce9ufaic7hi3uZ
:表示主機名; -
~ root /root /home
-
# root # $
-
執行
whoami
命令可以檢視當前使用者名稱; -
執行
hostname
命令可以檢視當前主機名;
關於如何建立、切換、刪除使用者,在後面的使用者與許可權會具體講解,這裡先使用 root
使用者進行演示。
[備註] root
是超級使用者,具備作業系統的一切許可權。
命令格式
command parameters(命令 引數)
複製程式碼
長短引數
單個引數:ls -a(a 是英文 all 的縮寫,表示“全部”)
多個引數:ls -al(全部檔案 + 列表形式展示)
單個長引數:ls --all
多個長引數:ls --reverse --all
長短混合引數:ls --all -l
複製程式碼
引數值
短引數:command -p 10(例如:ssh [email protected] -p 22)
長引數:command --paramters=10(例如:ssh [email protected] --port=22)
複製程式碼
快捷方式
在開始學習 Linux
命令之前,有這麼一些快捷方式,是必須要提前掌握的,它將貫穿整個 Linux
使用生涯。
-
通過上下方向鍵 ↑ ↓ 來調取過往執行過的
Linux
命令; -
命令或引數僅需輸入前幾位就可以用
Tab
鍵補全; -
Ctrl + R history ! !2
-
Ctrl + L
:清除螢幕並將當前行移到頁面頂部; -
Ctrl + C
:中止當前正在執行的命令; -
Ctrl + U
:從游標位置剪下到行首; -
Ctrl + K
:從游標位置剪下到行尾; -
Ctrl + W
:剪下游標左側的一個單詞; -
Ctrl + Y
:貼上Ctrl + U | K | Y
剪下的命令; -
Ctrl + A
:游標跳到命令列的開頭; -
Ctrl + E
:游標跳到命令列的結尾; -
Ctrl + D
:關閉Shell
會話;
檔案和目錄
檔案的組織

檢視路徑
pwd
顯示當前目錄的路徑

which
檢視命令的可執行檔案所在路徑, Linux
下,每一條命令其實都對應一個可執行程式,在終端中輸入命令,按回車的時候,就是執行了對應的那個程式, which
命令本身對應的程式也存在於 Linux
中。
總的來說一個命令就是一個可執行程式。

瀏覽和切換目錄
ls
列出檔案和目錄,它是 Linux
最常用的命令之一。
【常用引數】
-
-a
顯示所有檔案和目錄包括隱藏的 -
-l
顯示詳細列表 -
-h
適合人類閱讀的 -
-t
按檔案最近一次修改時間排序 -
-i inode inode

cd
cd
是英語 change directory
的縮寫,表示切換目錄。
cd / --> 跳轉到根目錄
cd ~ --> 跳轉到家目錄
cd .. --> 跳轉到上級目錄
cd ./home --> 跳轉到當前目錄的home目錄下
cd /home/lion --> 跳轉到根目錄下的home目錄下的lion目錄
cd --> 不新增任何引數,也是回到家目錄
複製程式碼
[注意] 輸入 cd /ho
+ 單次 tab
鍵會自動補全路徑 + 兩次 tab
鍵會列出所有可能的目錄列表。
du
列舉目錄大小資訊。
【常用引數】
-
-h
適合人類閱讀的; -
-a
同時列舉出目錄下檔案的大小資訊; -
-s
只顯示總計大小,不顯示具體資訊。
瀏覽和建立檔案
cat
一次性顯示檔案所有內容,更適合檢視小的檔案。
cat cloud-init.log
複製程式碼
【常用引數】
-
-n
顯示行號。
less
分頁顯示檔案內容,更適合檢視大的檔案。
less cloud-init.log
複製程式碼
【快捷操作】
-
空格鍵:前進一頁(一個螢幕);
-
b
鍵:後退一頁; -
回車鍵:前進一行;
-
y
鍵:後退一行; -
上下鍵:回退或前進一行;
-
d
鍵:前進半頁; -
u
鍵:後退半頁; -
q
鍵:停止讀取檔案,中止less
命令; -
=
鍵:顯示當前頁面的內容是檔案中的第幾行到第幾行以及一些其它關於本頁內容的詳細資訊; -
h
鍵:顯示幫助文件; -
/
鍵:進入搜尋模式後,按n
鍵跳到一個符合專案,按N
鍵跳到上一個符合專案,同時也可以輸入正則表示式匹配。
head
顯示檔案的開頭幾行(預設是10行)
head cloud-init.log
複製程式碼
【引數】
-
-n
指定行數head cloud-init.log -n 2
tail
顯示檔案的結尾幾行(預設是10行)
tail cloud-init.log複製程式碼
【引數】
-
-n
指定行數tail cloud-init.log -n 2
-
-f -s tail -f -s 4 xxx.log
touch
建立一個檔案
touch new_file複製程式碼
mkdir
建立一個目錄
mkdir new_folder複製程式碼
【常用引數】
-
-p
遞迴的建立目錄結構mkdir -p one/two/three
檔案的複製和移動
cp
拷貝檔案和目錄
cp file file_copy --> file 是目標檔案,file_copy 是拷貝出來的檔案cp file one --> 把 file 檔案拷貝到 one 目錄下,並且檔名依然為 filecp file one/file_copy --> 把 file 檔案拷貝到 one 目錄下,檔名為file_copycp *.txt folder --> 把當前目錄下所有 txt 檔案拷貝到 folder 目錄下複製程式碼
【常用引數】
-
-r
遞迴的拷貝,常用來拷貝一整個目錄
mv
移動(重新命名)檔案或目錄,與cp命令用法相似。
mv file one --> 將 file 檔案移動到 one 目錄下mv new_folder one --> 將 new_folder 資料夾移動到one目錄下mv *.txt folder --> 把當前目錄下所有 txt 檔案移動到 folder 目錄下mv file new_file --> file 檔案重新命名為 new_file複製程式碼
檔案的刪除和連結
rm
刪除檔案和目錄,由於 Linux
下沒有回收站,一旦刪除非常難恢復,因此需要謹慎操作
rm new_file --> 刪除 new_file 檔案rm f1 f2 f3 --> 同時刪除 f1 f2 f3 3個檔案複製程式碼
【常用引數】
-
-i
向用戶確認是否刪除; -
-f
檔案強制刪除; -
-r
遞迴刪除資料夾,著名的刪除操作rm -rf
。
ln
英文 Link
的縮寫,表示建立連結。
學習建立連結之前,首先要理解連結是什麼,我們先來看看 Linux
的檔案是如何儲存的:
Linux
檔案的儲存方式分為3個部分,檔名、檔案內容以及許可權,其中檔名的列表是儲存在硬碟的其它地方和檔案內容是分開存放的,每個檔名通過 inode
標識繫結到檔案內容。
Linux 下有兩種連結型別:硬連結和軟連結。
硬連結
使連結的兩個檔案共享同樣檔案內容,就是同樣的 inode
,一旦檔案1和檔案2之間有了硬連結,那麼修改任何一個檔案,修改的都是同一塊內容,它的缺點是,只能建立指向檔案的硬連結,不能建立指向目錄的(其實也可以,但比較複雜)而軟連結都可以,因此軟連結使用更加廣泛。
ln file1 file2 --> 建立 file2 為 file1 的硬連結複製程式碼

如果我們用 rm file1
來刪除 file1
,對 file2
沒有什麼影響,對於硬連結來說,刪除任意一方的檔案,共同指向的檔案內容並不會從硬碟上刪除。只有同時刪除了 file1
與 file2
後,它們共同指向的檔案內容才會消失。
軟連結
軟連結就類似 windows
下快捷方式。
ln -s file1 file2複製程式碼

執行 ls -l
命名檢視當前目錄下檔案的具體資訊
total 0-rw-r--r-- 1 root root 0 Jan 14 06:29 file1lrwxrwxrwx 1 root root 5 Jan 14 06:42 file2 -> file1 # 表示file2 指向 file1複製程式碼
其實 file2
只是 file1
的一個快捷方式,它指向的是 file1
,所以顯示的是 file1
的內容,但其實 file2
的 inode
與 file1
並不相同。如果我們刪除了 file2
的話, file1
是不會受影響的,但如果刪除 file1
的話, file2
就會變成死連結,因為指向的檔案不見了。
使用者與許可權
使用者
Linux
是一個多使用者的作業系統。在 Linux
中,理論上來說,我們可以建立無數個使用者,但是這些使用者是被劃分到不同的群組裡面的,有一個使用者,名叫 root
,是一個很特殊的使用者,它是超級使用者,擁有最高許可權。

自己建立的使用者是有限許可權的使用者,這樣大大提高了 Linux
系統的安全性,有效防止誤操作或是病毒攻擊,但是我們執行的某些命令需要更高許可權時可以使用 sudo
命令。
sudo
以 root
身份執行命令
sudo date --> 當然檢視日期是不需要sudo的這裡只是演示,sudo 完之後一般還需要輸入使用者密碼的複製程式碼
useradd + passwd
-
useradd
新增新使用者 -
passwd
修改使用者密碼
這兩個命令需要 root
使用者許可權
useradd lion --> 新增一個lion使用者,新增完之後在 /home 路徑下可以檢視passwd lion --> 修改lion使用者的密碼複製程式碼
userdel
刪除使用者,需要 root
使用者許可權
userdel lion --> 只會刪除使用者名稱,不會從/home中刪除對應資料夾userdel lion -r --> 會同時刪除/home下的對應資料夾複製程式碼
su
切換使用者,需要 root
使用者許可權
sudo su --> 切換為root使用者(exit 命令或 CTRL + D 快捷鍵都可以使普通使用者切換為 root 使用者)su lion --> 切換為普通使用者su - --> 切換為root使用者複製程式碼
群組的管理
Linux
中每個使用者都屬於一個特定的群組,如果你不設定使用者的群組,預設會建立一個和它的使用者名稱一樣的群組,並且把使用者劃歸到這個群組。
groupadd
建立群組,用法和 useradd
類似。
groupadd friends複製程式碼
groupdel
刪除一個已存在的群組
groupdel foo --> 刪除foo群組複製程式碼
groups
檢視使用者所在群組
groups lion --> 檢視 lion 使用者所在的群組複製程式碼
usermod
用於修改使用者的賬戶。
【常用引數】
-
-l
對使用者重新命名。需要注意的是/home
中的使用者家目錄的名字不會改變,需要手動修改。 -
-g usermod -g friends lion lion friends
-
-G
一次性讓使用者新增多個群組,例如usermod -G friends,foo,bar lion
。 -
-a -G -a append
chgrp
用於修改檔案的群組。
chgrp bar file.txt --> file.txt檔案的群組修改為bar複製程式碼
chown
改變檔案的所有者,需要 root
身份才能執行。
chown lion file.txt --> 把其它使用者建立的file.txt轉讓給lion使用者chown lion:bar file.txt --> 把file.txt的使用者改為lion,群組改為bar複製程式碼
【常用引數】
-
-R chown -R lion:lion /home/frank frank lion
檔案許可權管理
chmod
修改訪問許可權。
chmod 740 file.txt複製程式碼
【常用引數】
-
-R
可以遞迴地修改檔案訪問許可權,例如chmod -R 777 /home/lion
修改許可權的確簡單,但是理解其深層次的意義才是更加重要的。下面我們來系統的學習 Linux
的檔案許可權。
[[email protected] ~]# ls -ldrwxr-xr-x 5 root root 4096 Apr 13 2020 climblrwxrwxrwx 1 root root 7 Jan 14 06:41 hello2.c -> hello.c-rw-r--r-- 1 root root 149 Jan 13 06:14 hello.c複製程式碼
其中 drwxr-xr-x
表示檔案或目錄的許可權。讓我們一起來解讀它具體代表什麼?
-
d
:表示目錄,就是說這是一個目錄,普通檔案是-
,連結是l
。 -
r
:read
表示檔案可讀。 -
w
:write
表示檔案可寫,一般有寫的許可權,就有刪除的許可權。 -
x
:execute
表示檔案可執行。 -
-
:表示沒有相應許可權。
許可權的整體是按使用者來劃分的,如下圖所示:

現在再來理解這句許可權 drwxr-xr-x
的意思:
-
它是一個資料夾;
-
它的所有者具有:讀、寫、執行許可權;
-
它的群組使用者具有:讀、執行的許可權,沒有寫的許可權;
-
它的其它使用者具有:讀、執行的許可權,沒有寫的許可權。
現在理解了許可權,我們使用 chmod
來嘗試修改許可權。 chmod
它不需要是 root
使用者才能執行的,只要你是此檔案所有者,就可以用 chmod
來修改檔案的訪問許可權。
數字分配許可權
許可權 | 數字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
因此要改變許可權,只要做一些簡單的加法就行:
chmod 640 hello.c # 分析6 = 4 + 2 + 0 表示所有者具有 rw 許可權4 = 4 + 0 + 0 表示群組使用者具有 r 許可權0 = 0 + 0 + 0 表示其它使用者沒有許可權對應文字許可權為:-rw-r-----複製程式碼
用字母來分配許可權
-
u
:user
的縮寫,使用者的意思,表示所有者。 -
g
:group
的縮寫,群組的意思,表示群組使用者。 -
o
:other
的縮寫,其它的意思,表示其它使用者。 -
a
:all
的縮寫,所有的意思,表示所有使用者。 -
+
:加號,表示新增許可權。 -
-
:減號,表示去除許可權。 -
=
:等於號,表示分配許可權。
chmod u+rx file --> 檔案file的所有者增加讀和執行的許可權chmod g+r file --> 檔案file的群組使用者增加讀的許可權chmod o-r file --> 檔案file的其它使用者移除讀的許可權chmod g+r o-r file --> 檔案file的群組使用者增加讀的許可權,其它使用者移除讀的許可權chmod go-r file --> 檔案file的群組和其他使用者移除讀的許可權chmod +x file --> 檔案file的所有使用者增加執行的許可權chmod u=rwx,g=r,o=- file --> 檔案file的所有者分配讀寫和執行的許可權,群組其它使用者分配讀的許可權,其他使用者沒有任何許可權複製程式碼
查詢檔案
locate
搜尋包含關鍵字的所有檔案和目錄。後接需要查詢的檔名,也可以用正則表示式。
安裝 locate
yum -y install mlocate --> 安裝包updatedb --> 更新資料庫複製程式碼locate file.txtlocate fil*.txt複製程式碼
[注意] locate
命令會去檔案資料庫中查詢命令,而不是全磁碟查詢,因此剛建立的檔案並不會更新到資料庫中,所以無法被查詢到,可以執行 updatedb
命令去更新資料庫。
find
用於查詢檔案,它會去遍歷你的實際硬碟進行查詢,而且它允許我們對每個找到的檔案進行後續操作,功能非常強大。
find <何處> <何物> <做什麼>複製程式碼
-
何處:指定在哪個目錄查詢,此目錄的所有子目錄也會被查詢。
-
何物:查詢什麼,可以根據檔案的名字來查詢,也可以根據其大小來查詢,還可以根據其最近訪問時間來查詢。
-
做什麼:找到檔案後,可以進行後續處理,如果不指定這個引數,
find
命令只會顯示找到的檔案。
根據檔名查詢
find -name "file.txt" --> 當前目錄以及子目錄下通過名稱查詢檔案find . -name "syslog" --> 當前目錄以及子目錄下通過名稱查詢檔案find / -name "syslog" --> 整個硬碟下查詢syslogfind /var/log -name "syslog" --> 在指定的目錄/var/log下查詢syslog檔案find /var/log -name "syslog*" --> 查詢syslog1、syslog2 ... 等檔案,萬用字元表示所有find /var/log -name "*syslog*" --> 查詢包含syslog的檔案 複製程式碼
[注意] find
命令只會查詢完全符合 “何物” 字串的檔案,而 locate
會查詢所有包含關鍵字的檔案。
根據檔案大小查詢
find /var -size +10M --> /var 目錄下查詢檔案大小超過 10M 的檔案find /var -size -50k --> /var 目錄下查詢檔案大小小於 50k 的檔案find /var -size +1G --> /var 目錄下查詢檔案大小查過 1G 的檔案find /var -size 1M --> /var 目錄下查詢檔案大小等於 1M 的檔案複製程式碼
根據檔案最近訪問時間查詢
find -name "*.txt" -atime -7 --> 近 7天內訪問過的.txt結尾的檔案複製程式碼
僅查詢目錄或檔案
find . -name "file" -type f --> 只查詢當前目錄下的file檔案find . -name "file" -type d --> 只查詢當前目錄下的file目錄複製程式碼
操作查詢結果
find -name "*.txt" -printf "%p - %u\n" --> 找出所有後綴為txt的檔案,並按照 %p - %u\n 格式列印,其中%p=檔名,%u=檔案所有者find -name "*.jpg" -delete --> 刪除當前目錄以及子目錄下所有.jpg為字尾的檔案,不會有刪除提示,因此要慎用find -name "*.c" -exec chmod 600 {} \; --> 對每個.c結尾的檔案,都進行 -exec 引數指定的操作,{} 會被查詢到的檔案替代,\; 是必須的結尾find -name "*.c" -ok chmod 600 {} \; --> 和上面的功能一直,會多一個確認提示覆制程式碼
軟體倉庫
Linux
下軟體是以包的形式存在,一個軟體包其實就是軟體的所有檔案的壓縮包,是二進位制的形式,包含了安裝軟體的所有指令。 Red Hat
家族的軟體包字尾名一般為 .rpm
, Debian
家族的軟體包字尾是 .deb
。
Linux
的包都存在一個倉庫,叫做軟體倉庫,它可以使用 yum
來管理軟體包, yum
是 CentOS
中預設的包管理工具,適用於 Red Hat
一族。可以理解成 Node.js
的 npm
。
yum 常用命令
-
yum update | yum upgrade
更新軟體包 -
yum search xxx
搜尋相應的軟體包 -
yum install xxx
安裝軟體包 -
yum remove xxx
刪除軟體包
切換 CentOS 軟體源
有時候 CentOS
預設的 yum
源不一定是國內映象,導致 yum
線上安裝及更新速度不是很理想。這時候需要將 yum
源設定為國內映象站點。國內主要開源的映象站點是網易和阿里雲。
1、首先備份系統自帶 yum
源配置檔案 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下載阿里雲的 yum
源配置檔案到 /etc/yum.repos.d/CentOS7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo複製程式碼
3、生成快取
yum makecache複製程式碼
閱讀手冊
Linux
命令種類繁雜,我們憑藉記憶不可能全部記住,因此學會查用手冊是非常重要的。
man
安裝更新 man
sudo yum install -y man-pages --> 安裝sudo mandb --> 更新複製程式碼
man 手冊種類
-
可執行程式或
Shell
命令; -
系統呼叫(
Linux
核心提供的函式); -
庫呼叫(程式庫中的函式);
-
檔案(例如
/etc/passwd
); -
特殊檔案(通常在
/dev
下); -
遊戲;
-
雜項(
man(7)
,groff(7)
); -
系統管理命令(通常只能被
root
使用者使用); -
核心子程式。
man + 數字 + 命令
輸入 man + 數字 + 命令/函式,可以查到相關的命令和函式,若不加數字, man
預設從數字較小的手冊中尋找相關命令和函式
man 3 rand --> 表示在手冊的第三部分查詢 rand 函式man ls --> 查詢 ls 用法手冊複製程式碼
man 手冊核心區域解析:(以 man pwd
為例)
NAME # 命令名稱和簡單描述 pwd -- return working directory nameSYNOPSIS # 使用此命令的所有方法 pwd [-L | -P]DESCRIPTION # 包括所有引數以及用法 The pwd utility writes the absolute pathname of the current working directory to the standard output. Some shells may provide a builtin pwd command which is similar or identical to this utility. Consult the builtin(1) manual page. The options are as follows: -L Display the logical current working directory. -P Display the physical current working directory (all symbolic links resolved). If no options are specified, the -L option is assumed.SEE ALSO # 擴充套件閱讀相關命令 builtin(1), cd(1), csh(1), sh(1), getcwd(3)複製程式碼
help
man
命令像新華詞典一樣可以查詢到命令或函式的詳細資訊,但其實我們還有更加快捷的方式去查詢, command --help
或 command -h
,它沒有 man
命令顯示的那麼詳細,但是它更加易於閱讀。
Linux 進階
文字操作
grep
全域性搜尋一個正則表示式,並且列印到螢幕。簡單來說就是,在檔案中查詢關鍵字,並顯示關鍵字所在行。
基礎語法
grep text file # text代表要搜尋的文字,file代表供搜尋的檔案# 例項[[email protected] ~]# grep path /etc/profilepathmunge () { pathmunge /usr/sbin pathmunge /usr/local/sbin pathmunge /usr/local/sbin after pathmunge /usr/sbin afterunset -f pathmunge複製程式碼
常用引數
-
-i
忽略大小寫,grep -i path /etc/profile
-
-n
顯示行號,grep -n path /etc/profile
-
-v
只顯示搜尋文字不在的那些行,grep -v path /etc/profile
-
-r grep -r hello /etc grep -r
高階用法
grep
可以配合正則表示式使用。
grep -E path /etc/profile --> 完全匹配pathgrep -E ^path /etc/profile --> 匹配path開頭的字串grep -E [Pp]ath /etc/profile --> 匹配path或Path複製程式碼
sort
對檔案的行進行排序。
基礎語法
sort name.txt # 對name.txt檔案進行排序複製程式碼
例項用法
為了演示方便,我們首先建立一個檔案 name.txt
,放入以下內容:
ChristopherShawnTedRockNoahZacharyBella複製程式碼
執行 sort name.txt
命令,會對文字內容進行排序。
常用引數
-
-o
將排序後的檔案寫入新檔案,sort -o name_sorted.txt name.txt
; -
-r
倒序排序,sort -r name.txt
; -
-R
隨機排序,sort -R name.txt
; -
-n
對數字進行排序,預設是把數字識別成字串的,因此 138 會排在 25 前面,如果添加了-n
數字排序的話,則 25 會在 138 前面。
wc
word count
的縮寫,用於檔案的統計。它可以統計單詞數目、行數、字元數,位元組數等。
基礎語法
wc name.txt # 統計name.txt複製程式碼
例項用法
[[email protected] ~]# wc name.txt 13 13 91 name.txt複製程式碼
-
第一個13,表示行數;
-
第二個13,表示單詞數;
-
第三個91,表示位元組數。
常用引數
-
-l
只統計行數,wc -l name.txt
; -
-w
只統計單詞數,wc -w name.txt
; -
-c
只統計位元組數,wc -c name.txt
; -
-m
只統計字元數,wc -m name.txt
。
uniq
刪除檔案中的重複內容。
基礎語法
uniq name.txt # 去除name.txt重複的行數,並列印到螢幕上uniq name.txt uniq_name.txt # 把去除重複後的檔案儲存為 uniq_name.txt複製程式碼
【注意】它只能去除連續重複的行數。
常用引數
-
-c
統計重複行數,uniq -c name.txt
; -
-d
只顯示重複的行數,uniq -d name.txt
。
cut
剪下檔案的一部分內容。
基礎語法
cut -c 2-4 name.txt # 剪下每一行第二到第四個字元複製程式碼
常用引數
-
-d
用於指定用什麼分隔符(比如逗號、分號、雙引號等等)cut -d , name.txt
; -
-f
表示剪下下用分隔符分割的哪一塊或哪幾塊區域,cut -d , -f 1 name.txt
。
重定向 管道 流
在 Linux
中一個命令的去向可以有3個地方:終端、檔案、作為另外一個命令的入參。
命令一般都是通過鍵盤輸入,然後輸出到終端、檔案等地方,它的標準用語是
stdin
、 stdout
以及 stderr
。
-
標準輸入
stdin
,終端接收鍵盤輸入的命令,會產生兩種輸出; -
標準輸出
stdout
,終端輸出的資訊(不包含錯誤資訊); -
標準錯誤輸出
stderr
,終端輸出的錯誤資訊。

重定向
把本來要顯示在終端的命令結果,輸送到別的地方(到檔案中或者作為其他命令的輸入)。
輸出重定向 >
>
表示重定向到新的檔案, cut -d , -f 1 notes.csv > name.csv
,它表示通過逗號剪下 notes.csv
檔案(剪下完有3個部分)獲取第一個部分,重定向到 name.csv
檔案。
我們來看一個具體示例,學習它的使用,假設我們有一個檔案 notes.csv
,檔案內容如下:
Mark1,951/100,很不錯1Mark2,952/100,很不錯2Mark3,953/100,很不錯3Mark4,954/100,很不錯4Mark5,955/100,很不錯5Mark6,956/100,很不錯6複製程式碼
執行命令: cut -d , -f 1 notes.csv > name.csv
最後輸出如下內容:
Mark1Mark2Mark3Mark4Mark5Mark6複製程式碼
【注意】使用 >
要注意,如果輸出的檔案不存在它會新建一個,如果輸出的檔案已經存在,則會覆蓋。因此執行這個操作要非常小心,以免覆蓋其它重要檔案。
輸出重定向 >>
表示重定向到檔案末尾,因此它不會像 >
命令這麼危險,它是追加到檔案的末尾(當然如果檔案不存在,也會被建立)。
再次執行 cut -d , -f 1 notes.csv >> name.csv
,則會把名字追加到 name.csv
裡面。
Mark1Mark2Mark3Mark4Mark5Mark6Mark1Mark2Mark3Mark4Mark5Mark6複製程式碼
我們平時讀的 log
日誌檔案其實都是用這個命令輸出的。
輸出重定向 2>
標準錯誤輸出
cat not_exist_file.csv > res.txt 2> errors.log複製程式碼
-
當我們
cat
一個檔案時,會把檔案內容列印到螢幕上,這個是標準輸出; -
當使用了
> res.txt
時,則不會列印到螢幕,會把標準輸出寫入檔案res.txt
檔案中; -
2> errors.log
當發生錯誤時會寫入errors.log
檔案中。
輸出重定向 2>>
標準錯誤輸出(追加到檔案末尾)同 >>
相似。
輸出重定向 2>&1
標準輸出和標準錯誤輸出都重定向都一個地方
cat not_exist_file.csv > res.txt 2>&1 # 覆蓋輸出cat not_exist_file.csv >> res.txt 2>&1 # 追加輸出複製程式碼
目前為止,我們接觸的命令的輸入都來自命令的引數,其實命令的輸入還可以來自檔案或者鍵盤的輸入。

輸入重定向 <
<
符號用於指定命令的輸入。
cat < name.csv # 指定命令的輸入為 name.csv複製程式碼
雖然它的執行結果與 cat name.csv
一樣,但是它們的原理卻完全不同。
-
cat name.csv cat notes.csv
-
cat < name.csv cat notes.csv cat cat
輸入重定向 <<
將鍵盤的輸入重定向為某個命令的輸入。
sort -n << END # 輸入這個命令之後,按下回車,終端就進入鍵盤輸入模式,其中END為結束命令(這個可以自定義)wc -m << END # 統計輸入的單詞複製程式碼
管道 |
把兩個命令連起來使用,一個命令的輸出作為另外一個命令的輸入,英文是 pipeline
,可以想象一個個水管連線起來,管道算是重定向流的一種。

舉幾個實際用法案例:
cut -d , -f 1 name.csv | sort > sorted_name.txt # 第一步獲取到的 name 列表,通過管道符再進行排序,最後輸出到sorted_name.txtdu | sort -nr | head # du 表示列舉目錄大小資訊# sort 進行排序,-n 表示按數字排序,-r 表示倒序# head 前10行檔案grep log -Ir /var/log | cut -d : -f 1 | sort | uniq# grep log -Ir /var/log 表示在log資料夾下搜尋 /var/log 文字,-r 表示遞迴,-I 用於排除二進位制檔案# cut -d : -f 1 表示通過冒號進行剪下,獲取剪下的第一部分# sort 進行排序# uniq 進行去重複制程式碼
流
流並非一個命令,在電腦科學中,流 stream
的含義是比較難理解的,記住一點即可: 流就是讀一點資料, 處理一點點資料。其中資料一般就是二進位制格式。
上面提及的重定向或管道,就是把資料當做流去運轉的。
到此我們就接觸了,流、重定向、管道等 Linux
高階概念及指令。其實你會發現關於流和管道在其它語言中也有廣泛的應用。 Angular
中的模板語法中可以使用管道。 Node.js
中也有 stream
流的概念。
檢視程序
在 Windows
中通過 Ctrl + Alt + Delete
快捷鍵檢視軟體程序。
w
幫助我們快速瞭解系統中目前有哪些使用者登入著,以及他們在幹什麼。
[[email protected] ~]# w 06:31:53 up 25 days, 9:53, 1 user, load average: 0.00, 0.01, 0.05USER TTY FROM [email protected] IDLE JCPU PCPU WHATroot pts/0 118.31.243.53 05:56 1.00s 0.02s 0.00s w 06:31:53:表示當前時間up 25 days, 9:53:表示系統已經正常運行了“25天9小時53分鐘”1 user:表示一個使用者load average: 0.00, 0.01, 0.05:表示系統的負載,3個值分別表示“1分鐘的平均負載”,“5分鐘的平均負載”,“15分鐘的平均負載” USER:表示登入的用於 TTY:登入的終端名稱為pts/0 FROM:連線到伺服器的ip地址 [email protected]:登入時間 IDLE:使用者有多久沒有活躍了 JCPU:該終端所有相關的程序使用的 CPU 時間,每當程序結束就停止計時,開始新的程序則會重新計時 PCPU:表示 CPU 執行當前程式所消耗的時間,當前程序就是在 WHAT 列裡顯示的程式 WHAT:表示當下使用者正執行的程式是什麼,這裡我執行的是 w複製程式碼
ps
用於顯示當前系統中的程序, ps
命令顯示的程序列表不會隨時間而更新,是靜態的,是執行 ps
命令那個時刻的狀態或者說是一個程序快照。
基礎語法
[[email protected] ~]# ps PID TTY TIME CMD 1793 pts/0 00:00:00 bash 4756 pts/0 00:00:00 ps PID:程序號,每個程序都有唯一的程序號 TTY:程序執行所在的終端 TIME:程序執行時間 CMD:產生這個程序的程式名,如果在程序列表中看到有好幾行都是同樣的程式名,那麼就是同樣的程式產生了不止一個程序複製程式碼
常用引數
-
-ef
列出所有程序; -
-efH
以喬木狀列舉出所有程序; -
-u
列出此使用者執行的程序; -
-aux CPU ps -aux | less
-
-aux --sort -pcpu CPU -aux --sort -pmem
-
-axjf ps -axjf pstree
top
獲取程序的動態列表。
top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07Tasks: 67 total, 1 running, 66 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1882072 total, 552148 free, 101048 used, 1228876 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 1594080 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 956 root 10 -10 133964 15848 10240 S 0.7 0.8 263:13.01 AliYunDun 1 root 20 0 51644 3664 2400 S 0.0 0.2 3:23.63 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd 4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 複製程式碼
-
top - 07:20:07 up 25 days, 10:41, 1 user, load average: 0.30, 0.10, 0.07
相當w
命令的第一行的資訊。 -
展示的這些程序是按照使用處理器
%CPU
的使用率來排序的。
kill
結束一個程序, kill + PID
。
kill 956 # 結束程序號為956的程序kill 956 957 # 結束多個程序kill -9 7291 # 強制結束程序複製程式碼
管理程序
程序狀態
主要是切換程序的狀態。我們先了解下 Linux
下程序的五種狀態:
-
狀態碼
R
:表示正在執行的狀態; -
狀態碼
S
:表示中斷(休眠中,受阻,當某個條件形成後或接受到訊號時,則脫離該狀態); -
狀態碼
D
:表示不可中斷(程序不響應系統非同步訊號,即使用kill命令也不能使其中斷); -
狀態碼
Z
:表示僵死(程序已終止,但程序描述符依然存在,直到父程序呼叫wait4()
系統函式後將程序釋放); -
T SIGSTOP SIGSTP SIGTIN SIGTOU
前臺程序 & 後臺程序
預設情況下,使用者建立的程序都是前臺程序,前臺程序從鍵盤讀取資料,並把處理結果輸出到顯示器。例如執行 top
命令,這就是一個一直執行的前臺程序。
後臺程序的優點是不必等待程式執行結束,就可以輸入其它命令。在需要執行的命令後面新增 &
符號,就表示啟動一個後臺程序。
&
啟動後臺程序,它的缺點是後臺程序與終端相關聯,一旦關閉終端,程序就自動結束了。
cp name.csv name-copy.csv &複製程式碼
nohup
使程序不受結束通話(關閉終端等動作)的影響。
nohup cp name.csv name-copy.csv複製程式碼
nohup
命令也可以和 &
結合使用。
nohup cp name.csv name-copy.csv &複製程式碼
bg
使一個“後臺暫停執行”的程序,狀態改為“後臺執行”。
bg %1 # 不加任何引數的情況下,bg命令會預設作用於最近的一個後臺程序,如果新增引數則會作用於指定標號的程序複製程式碼
實際案例1:
1. 執行 grep -r "log" / > grep_log 2>&1 命令啟動一個前臺程序,並且忘記新增 & 符號2. ctrl + z 使程序狀態轉為後臺暫停3. 執行 bg 將命令轉為後臺運行復制程式碼
實際案例2:
前端開發時我們經常會執行 yarn start 啟動專案此時我們執行 ctrl + z 先使其暫停然後執行 bg 使其轉為後臺執行這樣當前終端就空閒出來可以幹其它事情了,如果想要喚醒它就使用 fg 命令即可(後面會講)複製程式碼
jobs
顯示當前終端後臺程序狀態。
[[email protected] ~]# jobs[1]+ Stopped top[2]- Running grep --color=auto -r "log" / > grep_log 2>&1 &複製程式碼
fg
fg
使程序轉為前臺執行,用法和 bg
命令類似。
我們用一張圖來表示前後臺程序切換:

我們可以使程式在後臺執行,成為後臺程序,這樣在當前終端中我們就可以做其他事情了,而不必等待此程序執行結束。
守護程序
一個執行起來的程式被稱為程序。在 Linux
中有些程序是特殊的,它不與任何程序關聯,不論使用者的身份如何,都在後臺執行,這些程序的父程序是 PID
為1的程序, PID
為1的程序只在系統關閉時才會被銷燬。它們會在後臺一直執行等待分配工作。我們將這類程序稱之為守護程序 daemon
。
守護程序的名字通常會在最後有一個 d
,表示 daemon
守護的意思,例如 systemd
、 httpd
。
systemd
systemd
是一個 Linux
系統基礎元件的集合,提供了一個系統和服務管理器,執行為 PID 1
並負責啟動其它程式。
[[email protected] ~]# ps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.2 51648 3852 ? Ss Feb01 1:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 22複製程式碼
通過命令也可以看到 PID
為1的程序就是 systemd
的系統程序。
systemd
常用命令(它是一組命令的集合):
systemctl start nginx # 啟動服務systemctl stop nginx # 停止服務systemctl restart nginx # 重啟服務systemctl status nginx # 檢視服務狀態systemctl reload nginx # 過載配置檔案(不停止服務的情況)systemctl enable nginx # 開機自動啟動服務systemctl disable nginx # 開機不自動啟動服務systemctl is-enabled nginx # 檢視服務是否開機自動啟動systemctl list-unit-files --type=service # 檢視各個級別下服務的啟動和禁用情況複製程式碼
檔案壓縮解壓
-
打包:是將多個檔案變成一個總的檔案,它的學名叫存檔、歸檔。
-
壓縮:是將一個大檔案(通常指歸檔)壓縮變成一個小檔案。
我們常常使用 tar
將多個檔案歸檔為一個總的檔案,稱為 archive
。然後用 gzip
或 bzip2
命令將 archive
壓縮為更小的檔案。

tar
建立一個 tar
歸檔。
基礎用法
tar -cvf sort.tar sort/ # 將sort資料夾歸檔為sort.tartar -cvf archive.tar file1 file2 file3 # 將 file1 file2 file3 歸檔為archive.tar複製程式碼
常用引數
-
-cvf create verbose file
-
-tf
顯示歸檔裡的內容,並不解開歸檔; -
-rvf
追加檔案到歸檔,tar -rvf archive.tar file.txt
; -
-xvf
解開歸檔,tar -xvf archive.tar
。
gzip / gunzip
“壓縮/解壓”歸檔,預設用 gzip
命令,壓縮後的檔案字尾名為 .tar.gz
。
gzip archive.tar # 壓縮gunzip archive.tar.gz # 解壓複製程式碼
tar 歸檔+壓縮
可以用 tar
命令同時完成歸檔和壓縮的操作,就是給 tar
命令多加一個選項引數,使之完成歸檔操作後,還是呼叫 gzip
或 bzip2
命令來完成壓縮操作。
tar -zcvf archive.tar.gz archive/ # 將archive資料夾歸檔並壓縮tar -zxvf archive.tar.gz # 將archive.tar.gz歸檔壓縮檔案解壓複製程式碼
zcat、zless、zmore
之前講過使用 cat less more
可以檢視檔案內容,但是壓縮檔案的內容是不能使用這些命令進行檢視的,而要使用 zcat、zless、zmore
進行檢視。
zcat archive.tar.gz複製程式碼
zip/unzip
“壓縮/解壓” zip
檔案( zip
壓縮檔案一般來自 windows
作業系統)。
命令安裝
# Red Hat 一族中的安裝方式yum install zip yum install unzip 複製程式碼
基礎用法
unzip archive.zip # 解壓 .zip 檔案unzip -l archive.zip # 不解開 .zip 檔案,只看其中內容zip -r sort.zip sort/ # 將sort資料夾壓縮為 sort.zip,其中-r表示遞迴複製程式碼
編譯安裝軟體
之前我們學會了使用 yum
命令進行軟體安裝,如果碰到 yum
倉庫中沒有的軟體,我們就需要會更高階的軟體安裝“原始碼編譯安裝”。
編譯安裝
簡單來說,編譯就是將程式的原始碼轉換成可執行檔案的過程。大多數 Linux
的程式都是開放原始碼的,可以編譯成適合我們的電腦和操縱系統屬性的可執行檔案。
基本步驟如下:
-
下載原始碼
-
解壓壓縮包
-
配置
-
編譯
-
安裝
實際案例
1、下載
我們來編譯安裝 htop
軟體,首先在它的官網下載原始碼: bintray.com/htop/source…
[1]
下載好的原始碼在本機電腦上使用如下命令同步到伺服器上:
scp 檔名 使用者名稱@伺服器ip:目標路徑scp ~/Desktop/htop-3.0.0.tar.gz [email protected]121.42.11.34:.複製程式碼
也可以使用 wegt
進行下載:
wegt+下載地址wegt https://bintray.com/htop/source/download_file?file_path=htop-3.0.0.tar.gz複製程式碼
2、解壓檔案
tar -zxvf htop-3.0.0.tar.gz # 解壓cd htop-3.0.0 # 進入目錄複製程式碼
3、配置
執行 ./configure
,它會分析你的電腦去確認編譯所需的工具是否都已經安裝了。
4、編譯
執行 make
命令
5、安裝
執行 make install
命令,安裝完成後執行 ls /usr/local/bin/
檢視是否有 htop
命令。如果有就可以執行 htop
命令檢視系統程序了。
網路
ifconfig
檢視 ip
網路相關資訊,如果命令不存在的話, 執行命令 yum install net-tools
安裝。
[[email protected] ~]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.31.24.78 netmask 255.255.240.0 broadcast 172.31.31.255 ether 00:16:3e:04:9c:cd txqueuelen 1000 (Ethernet) RX packets 1592318 bytes 183722250 (175.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1539361 bytes 154044090 (146.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0複製程式碼
引數解析:
-
eth0 eth Ethernet eht0 eth1 eth2
-
lo Local Loopback ip 127.0.0.1 127.0.0.1:3000 web
-
wlan0
表示無線區域網(上面案例並未展示)。
host
ip
地址和主機名的互相轉換。
軟體安裝
yum install bind-utils複製程式碼
基礎用法
[[email protected] ~]# host github.combaidu.com has address 13.229.188.59 [[email protected] ~]# host 13.229.188.5959.188.229.13.in-addr.arpa domain name pointer ec2-13-229-188-59.ap-southeast-1.compute.amazonaws.com.複製程式碼
ssh 連線遠端伺服器
通過非對稱加密以及對稱加密的方式(同 HTTPS
安全連線原理相似)連線到遠端伺服器。
ssh 使用者@ip:port1、ssh [email protected]172.20.10.1:22 # 埠號可以省略不寫,預設是22埠2、輸入連線密碼後就可以操作遠端伺服器了複製程式碼
配置 ssh
config
檔案可以配置 ssh
,方便批量管理多個 ssh
連線。
配置檔案分為以下幾種:
-
全域性
ssh
服務端的配置:/etc/ssh/sshd_config
; -
全域性
ssh
客戶端的配置:/etc/ssh/ssh_config
(很少修改); -
當前使用者
ssh
客戶端的配置:~/.ssh/config
。
【服務端 config
檔案的常用配置引數】
服務端 config 引數 | 作用 |
---|---|
Port | sshd 服務埠號(預設是22) |
PermitRootLogin | 是否允許以 root 使用者身份登入(預設是可以) |
PasswordAuthentication | 是否允許密碼驗證登入(預設是可以) |
PubkeyAuthentication | 是否允許公鑰驗證登入(預設是可以) |
PermitEmptyPasswords | 是否允許空密碼登入(不安全,預設不可以) |
[注意] 修改完服務端配置檔案需要重啟服務 systemctl restart sshd
【客戶端 config
檔案的常用配置引數】
客戶端 config 引數 | 作用 |
---|---|
Host | 別名 |
HostName | 遠端主機名(或 IP 地址) |
Port | 連線到遠端主機的埠 |
User | 使用者名稱 |
配置當前使用者的 config
:
# 建立configvim ~/.ssh/config# 填寫一下內容Host lion # 別名 HostName 172.x.x.x # ip 地址 Port 22 # 埠 User root # 使用者複製程式碼
這樣配置完成後,下次登入時,可以這樣登入 ssh lion
會自動識別為 root
使用者。
[注意] 這段配置不是在伺服器上,而是你自己的機器上,它僅僅是設定了一個別名。
免密登入
ssh
登入分兩種,一種是基於口令(賬號密碼),另外一種是基於金鑰的方式。
基於口令,就是每次登入輸入賬號和密碼,顯然這樣做是比較麻煩的,今天主要學習如何基於金鑰實現免密登入。
基於金鑰驗證原理
客戶機生成金鑰對(公鑰和私鑰),把公鑰上傳到伺服器,每次登入會與伺服器的公鑰進行比較,這種驗證登入的方法更加安全,也被稱為“公鑰驗證登入”。
具體實現步驟
1、在客戶機中生成金鑰對(公鑰和私鑰) ssh-keygen
(預設使用 RSA 非對稱加密演算法)
執行完 ssh-keygen
會在 ~/.ssh/
目錄下,生成兩個檔案:
-
id_rsa.pub
:公鑰 -
id_rsa
:私鑰
2、把客戶機的公鑰傳送到服務
執行 ssh-copy-id [email protected]
( ssh-copy-id
它會把客戶機的公鑰追加到伺服器 ~/.ssh/authorized_keys
的檔案中)。
執行完成後,執行 ssh [email protected]
就可以實現免密登入伺服器了。
配合上面設定好的別名,直接執行 ssh lion
就可以登入,是不是非常方便。
wget
可以使我們直接從終端控制檯下載檔案,只需要給出檔案的HTTP或FTP地址。
wget [引數][URL地址]wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip複製程式碼
wget
非常穩定,如果是由於網路原因下載失敗, wget
會不斷嘗試,直到整個檔案下載完畢。
常用引數
-
-c
繼續中斷的下載。
備份
scp
它是 Secure Copy
的縮寫,表示安全拷貝。 scp
可以使我們通過網路,把檔案從一臺電腦拷貝到另一臺電腦。
scp
是基於 ssh
的原理來運作的, ssh
會在兩臺通過網路連線的電腦之間建立一條安全通訊的管道, scp
就利用這條管道安全地拷貝檔案。
scp source_file destination_file # source_file 表示原始檔,destination_file 表示目標檔案複製程式碼
其中 source_file
和 destination_file
都可以這樣表示: [email protected]:file_name
, user
是登入名, ip
是域名或 ip
地址。 file_name
是檔案路徑。
scp file.txt [email protected]192.168.1.5:/root # 表示把我的電腦中當前資料夾下的 file.txt 檔案拷貝到遠端電腦scp [email protected]:/root/file.txt file.txt # 表示把遠端電腦上的 file.txt 檔案拷貝到本機複製程式碼
rsync
rsync
命令主要用於遠端同步檔案。它可以同步兩個目錄,不管它們是否處於同一臺電腦。它應該是最常用於“增量備份”的命令了。它就是智慧版的 scp
命令。
軟體安裝
yum install rsync複製程式碼
基礎用法
rsync -arv Images/ backups/ # 將Images 目錄下的所有檔案備份到 backups 目錄下rsync -arv Images/ [email protected]192.x.x.x:backups/ # 同步到伺服器的backups目錄下複製程式碼
常用引數
-
-a
保留檔案的所有資訊,包括許可權,修改日期等; -
-r
遞迴呼叫,表示子目錄的所有檔案也都包括; -
-v
冗餘模式,輸出詳細操作資訊。
預設地, rsync
在同步時並不會刪除目標目錄的檔案,例如你在源目錄中刪除一個檔案,但是用 rsync
同步時,它並不會刪除同步目錄中的相同檔案。如果向刪除也可以這麼做: rsync -arv --delete Images/ backups/
。
系統
halt
關閉系統,需要 root
身份。
halt複製程式碼
reboot
重啟系統,需要 root
身份。
reboot
複製程式碼
poweroff
直接執行即可關機,不需要 root
身份。
Vim 編輯器
Vim 是什麼?
Vim
是從 vi
發展出來的一個文字編輯器。其程式碼補完、編譯及錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。和 Emacs
並列成為類 Unix
系統使用者最喜歡的編輯器。
Vim 常用模式
-
互動模式
-
插入模式
-
命令模式
-
可視模式
互動模式
也成為正常模式,這是 Vim
的預設模式,每次執行 Vim
程式的時候,就會進入這個模式。
例如執行 vim name.txt
則會進入互動模式。
互動模式特徵:
-
在這個模式下,你不能輸入文字;
-
它可以讓我們在文字間移動,刪除一行文字,複製黏貼文字,跳轉到指定行,撤銷操作,等等。
插入模式
這個模式是我們熟悉的文字編輯器的模式,就是可以輸入任何你想輸入的內容。進入這個模式有幾種方法,最常用的方法是按字母鍵 i
( i、I、a、A、o、O
都可以進入插入模式,只是所處的位置不同),退出這種模式,只需要按下 Esc
鍵。
-
i, I Insert mode i I
-
a, A Insert mode a A
-
o, O Insert mode o O
命令模式
命令模式也稱為底線命令模式,這個模式下可以執行一些命令例如“退出”,“儲存”,等動作。
也可以用這個模式來啟用一些 Vim
配置,例如語法高亮,顯示行號,等。甚至還可以傳送一些命令給終端命令列,例如 ls、cp
。
為了進入命令模式,首先要進入互動模式,再按下冒號鍵。
用一張圖表示三種模式如何切換:
基本操作
開啟 Vim
在終端命令列中輸入 vim
回車後 Vim
就會被執行起來,也可以用 Vim
來開啟一個檔案,只需要在 vim
後面再加檔名。如 vim file.name
,如果檔案不存在,那麼會被建立。
插入
進入檔案之後,此時處於互動模式,可以通過輸入 i
進入插入模式。
移動
在 Vim
的互動模式下,我們可以在文字中移動游標。
-
h
向左移動一個字元 -
j
向下移動一個字元 -
k
向上移動一個字元 -
i
向右移動一個字元
當然也可以使用四個方向鍵進行移動,效果是一樣的。
跳至行首和行末
-
行首:在互動模式下,為了將游標定位到一行的開始位置,只需要按下數字鍵
0
即可,鍵盤上的Home
鍵也有相同效果。 -
行末:在互動模式下,為了將游標定位到一行的末尾,只需要按下美元符號鍵
$
即可,鍵盤上的End
鍵也有相同效果。
按單詞移動
在互動模式下,按字母鍵 w
可以一個單詞一個單詞的移動。
退出檔案
在互動模式下,按下冒號鍵 :
進入命令模式,再按下 q
鍵,就可以退出了。
如果在退出之前又修改了檔案,就直接想用 :q
退出 Vim
,那麼 Vim
會顯示一個紅字標明錯誤資訊。此時我們有兩個選擇:
-
儲存並退出
:wq
或:x
; -
不儲存且退出
:q!
。
標準操作
刪除字元
在互動模式下,將游標定位到一個你想要刪除的字元上,按下字母鍵 x
你會發現這個字元被刪除了。
也可以一次性刪除多個字元,只需要在按 x
鍵之前輸入數字即可。
刪除(剪下)單詞,行
-
刪除一行:連按兩次
d
來刪除游標所在的那一行。 -
刪除多行:例如先輸入數字
2
,再按下dd
,就會刪除從游標所在行開始的兩行。 -
刪除一個單詞:將游標置於一個單詞的首字母處,然後按下
dw
。 -
刪除多個單詞:例如先按數字鍵
2
再按dw
就可以刪除兩個單詞了。 -
從游標所在位置刪除至行首:
d0
。 -
從游標所在位置刪除至行末:
d$
。
複製單詞,行
-
複製行:按兩次
y
會把游標所在行復制到記憶體中,和dd
類似,dd
用於“剪下”游標所在行。 -
複製單詞:
yw
會複製一個單詞。 -
複製到行末:
y$
是複製從游標所在處到行末的所有字元。 -
複製到行首:
y0
是複製游標所在處到行首的所有字元。
貼上
如果之前用 dd
或者 yy
剪下複製過來的,可以使用 p
來貼上。同樣也可以使用 數字+p
來表示複製多次。
替換一個字元
在互動模式下,將游標置於想要替換的字元上。按下 r
鍵,接著輸入你要替換的字元即可。
撤銷操作
如果要撤銷最近的修改,只需要按下 u
鍵,如果想要撤銷最近四次修改,可以按下4,再按下 u
。
重做
取消撤銷,也就是重做之前的修改使用 ctrl + r
。
跳轉到指定行
Vim
編輯的檔案中,每一行都有一個行號,行號從1開始,逐一遞增。
行號預設是不顯示,如果需要它顯示的話,可以進入命令模式,然後輸入 set nu
,如果要隱藏行號的話,使用 set nonu
。
-
跳轉到指定行:
數字+gg
,例如7gg
,表示跳轉到第7行。 -
要跳轉到最後一行,按下
G
。 -
要跳轉到第一行,按下
gg
。
高階操作
查詢
處於互動模式下,按下 /
鍵,那麼就進入查詢模式,輸入你要查詢的字串,然後按下回車。游標就會跳轉到檔案中下一個查詢到的匹配處。如果字串不存在,那麼會顯示 "pattern not found"
。
-
n
跳轉到下一個匹配項; -
N
跳轉到上一個匹配項。
[注意] 用斜槓來進行的查詢是從當前游標處開始向檔案尾搜尋,如果你要從當前游標處開始,向檔案頭搜尋則使用 ?
,當然也可以先按下 gg
跳轉到第一行在進行全文搜尋。
查詢並替換
替換游標所在行第一個匹配的字串:
# 語法:s/舊字串/新字串# 例項:s/one/two複製程式碼
替換游標所在行所有舊字串為新字串:
# 語法:s/舊字串/新字串/g複製程式碼
替換第幾行到第幾行中所有字串:
# 語法:n,m s/舊字串/新字串/g# 例項:2,4 s/one/two/g複製程式碼
最常用的就是全文替換了:
# 語法:%s/舊字串/新字串/g複製程式碼
合併檔案
可以用冒號 +r
( :r
) 實現在游標處插入一個檔案的內容。
:r filename # 可以用Tab鍵來自動補全另外一個檔案的路徑
複製程式碼
分屏
Vim
有一個特別便捷的功能那就是分屏,可以同時開啟好幾個檔案,分屏之後,螢幕每一塊被稱為一個 viewport
,表示“視口”。
-
橫向分屏
:sp 檔名
-
垂直分屏
:vsp 檔名
分屏模式下的快捷鍵
-
Ctrl + w Ctrl + w viewport viewport
-
Ctrl + w
再加 “方向鍵”,就可以移動到這個方向所處的下一個視口了; -
Ctrl + w
再加+
號,表示擴大當前視口; -
Ctrl + w
再加-
號,表示縮小當前視口; -
Ctrl + w
再加=
號,表示平均當前視口; -
Ctrl + w
再加r
鍵,會反向調換視口位置; -
Ctrl + w
再加q
鍵,會關閉當前視口; -
Ctrl + w
再加o
鍵,會關閉除當前視口以外的所有視口;
執行外部命令 :!
在 Vim
中可以執行一些終端命令,只要先輸入 :!
,然後接命令名稱。
例如:
:!ls # 在Vim中開啟的檔案所在的目錄執行ls命令
複製程式碼
可視模式
前面只講了 Vim
的三種模式,其實還有一種模式叫做可視模式。
進入它的三種方式(都是從互動模式開始):
-
v
字元可視模式,進入後配合方向鍵選中字元後,然後再按d
鍵可以刪除選中。 -
V
行可視模式,進入後游標所在行預設被選中,然後再按d
鍵可以刪除所在行。 -
Ctrl + v d I
同時選中多行,並在選中行頭部插入內容的具體操作步驟:
1. ctrl + v 進入塊可視模式
2. 使用方向鍵進行選中(上下左右)假設選中5行
3. 輸入 I 鍵進行多行同時插入操作
4. 插入完成後連續按兩下 esc 鍵,實現多行同時插入相同字元
複製程式碼
進入可視模式之後的操作鍵:
-
d
鍵,表示刪除選中; -
I
鍵,表示在選中之前插入; -
u
鍵,表示選中變為小寫; -
U
鍵,表示選中變為大寫;
Vim 配置
選項引數
在 Vim
被啟動後,可以執行一些指令來啟用一些選項引數,但是這些選項引數的配置在退出 Vim
時會被忘記,例如前面講解的啟用行號。如果希望所在的配置是永久性的,那麼需要在家目錄( cd ~
)建立一個 Vim
的配置檔案 .vimrc
。
.vimrc
set number " 顯示行號
syntax on " 啟用語法高亮
set showcmd " 實時看到輸入的命令
set ignorecase " 搜尋時不區分大小寫
set mouse=a " 啟用滑鼠,用滑鼠選中時相當於進入可視模式
複製程式碼
Vim
配置非常豐富,我們可以通過個性化配置把 Vim
打造成屬於自己的 IDE
等等。在 github
上也可以搜尋到一些強大的 Vim
配置檔案。
總結
相信通過本文的學習,你應該會對 Linux
有一個更加全面的認識。
都看到這裡了,就點個:+1: :+1: :+1: 吧。
原文連結:https://juejin.cn/post/6938385978004340744
END
PHP開源社群
掃描關注 進入”PHP資料“
免費獲取進階
面試、文件、影片資源
- php Carbon 時間處理類 超詳細講解(一)
- 如何用 10 行 bash shell 指令碼監控 Linux?
- PDO方式連線資料庫、PHP連線資料庫
- php雪花演算法SnowFlake生成唯一ID
- 淺述 Docker 的容器編排
- php實現rabbitMQ訊息列隊(必須收藏)
- 參考https加解密思路 實現自己網路請求資料傳輸的安全性,一致性,防篡改。(對稱加密 非對稱加密)
- Linux 中檢查磁碟空間的 12 個有用的 df 命令
- ThinkPHP5模型關聯
- php 陣列的相關處理函式
- Yii2之資料庫遷移
- PHP正則表示式
- PHP如何在兩個大檔案中找出相同的記錄?
- Docker 疑難雜症彙總
- php【websocket】
- php面向物件高階應用講解
- 一把王者的時間,我就學會了 Nginx!
- 這些Redis知識點你都吃透了,在面試中胸有成竹啊
- 基於原生PHP完成小程式支付對接踩坑
- PHP IO程式設計epoll實現方案