《小團隊web技術搭建》(十)Linux初階入門(二)
theme: channing-cyan
歡迎關注系列專欄:《小團隊web技術搭建》
《小團隊web技術搭建》(一)環境和工具的準備-第一部分
《小團隊web技術搭建》(二)環境和工具的準備-第二部分
《小團隊web技術搭建》(三)環境和工具的準備-第三部分
《小團隊web技術搭建》(四)虛擬機器的安裝使用
《小團隊web技術搭建》(五)專案的簡單部署方式
《小團隊web技術搭建》(六)自動化部署方式(CI/CD)(一)
《小團隊web技術搭建》(七)自動化部署方式(CI/CD)(二)
《小團隊web技術搭建》(八)Docker+持續部署
《小團隊web技術搭建》(九)Linux初階入門(一)
持續更新中...
我們接著上一篇介紹的Linux入門內容,介紹其它一些基礎操作。
檔案檢視
cat:從首行顯示檔案內容
cat [-AbEnTv]
選項與引數:
- -A :相當於 -vET 的整合選項,可列出一些特殊字元而不是空白而已;
- -b :列出行號,僅針對非空白行做行號顯示,空白行不標行號!
- -E :將結尾的斷行位元組 $ 顯示出來;
- -n :列印出行號,連同空白行也會有行號,與 -b 的選項不同;
- -T :將 [tab] 按鍵以 ^I 顯示出來;
- -v :列出一些看不出來的特殊字元
示例: ```
檢視test.txt的檔案內容
cat /home/test.txt ```
tac:檔案內容從最後一行開始顯示
tac會從最後一行開始,倒著顯示檔案內容 示例: ```
倒行檢視test.txt的檔案內容
tac /home/test.txt ```
nl: 帶著行號顯示檔案內容
nl [-bnw] 檔案
選項與引數:
- -b :指定行號指定的方式,主要有兩種:
-b a :表示不論是否為空行,也同樣列出行號(類似 cat -n);
-b t :如果有空行,空的那一行不要列出行號(預設值); - -n :列出行號表示的方法,主要有三種:
-n ln :行號在熒幕的最左方顯示;
-n rn :行號在自己欄位的最右方顯示,且不加 0 ;
-n rz :行號在自己欄位的最右方顯示,且加 0 ; - -w :行號欄位的佔用的位數。
nl test.txt
more:可翻頁檢視檔案內容
在 more 這個程式的執行過程中,你有幾個按鍵可以按的:
- 空白鍵 (space):代表向下翻一頁;
- Enter :代表向下翻『一行』;
- /字串 :代表在這個顯示的內容當中,向下搜尋『字串』這個關鍵字;
- :f :立刻顯示出檔名以及目前顯示的行數;
- q :代表立刻離開 more ,不再顯示該檔案內容。
- b 或 [ctrl]-b :代表往回翻頁,不過這動作只對檔案有用,對管線無用。
示例:
```
如果檔案內容足夠長,你可以嘗試按enter鍵檢視下一行
more test.txt ```
less:與more類似,更接近vi編輯器操作
可以理解為只讀模式下的vi編輯器,功能與more很像。 less執行時可以輸入的命令有:
- 空白鍵 :向下翻動一頁;
- [pagedown]:向下翻動一頁;
- [pageup] :向上翻動一頁;
- /字串 :向下搜尋『字串』的功能;
- ?字串 :向上搜尋『字串』的功能;
- n :重複前一個搜尋 (與 / 或 ? 有關!)
- N :反向的重複前一個搜尋 (與 / 或 ? 有關!)
- q :離開 less 這個程式;
```
如果檔案內容足夠長,你可以嘗試按上下方向鍵檢視上下行
less test.txt ```
head:顯示前n行檔案內容
head [-n number] 檔案
選項與引數:
- -n :後面接數字,代表顯示幾行的意思
```
預設顯示10行
head test.txt
-n指定顯示行數
head -n 20 test.txt ```
tail:顯示後n行檔案內容,可實時讀取
在檢視類似日誌等檔案時,我們經常用到tail,因為它的-f引數可以實時顯示後面寫入的檔案內容。
tail [-n number] 檔案
選項與引數:
- -n :後面接數字,代表顯示幾行的意思
- -f :表示持續偵測後面所接的檔名,要等到按下[ctrl]-c才會結束tail的偵測
```
顯示最後10行
tail test.txt
監聽檔案寫入內容
tail -f nginx.log ```
檔案許可權
許可權描述
當我們輸入ls -l
或ll
命令時,會顯示當前檔案下的檔案及其許可權情況等資訊
```linux [[email protected] ~]# ls -l total 508 drwxr-xr-x 11 www users 8192 Nov 28 18:06 htop-2.0.2 -rw-r--r-- 1 root root 476364 Nov 28 18:05 htop-2.0.2.tar.gz -rw-r--r-- 1 root root 24567 Aug 18 2021 install.sh -rw-r--r-- 1 root root 2197 Jan 9 16:14 test.txt drwxr-xr-x 3 root root 18 Aug 20 2021 www
``` 上面最左側的資訊即為許可權資訊,其描述的資訊。許可權描述資訊有十位,第一位如果是d說明是資料夾,-則表示是檔案;後面三組rwx分別代表使用者、使用者組、其他的讀、寫、執行許可權,-代表沒有該許可權。
- 第2到4個字元表示此檔案所有者對此檔案的許可權
- 第5到7個字元表示此檔案所屬於的組裡面的賬戶對此檔案的許可權
- 第8到10個字元表示除了上面兩型別的其他使用者對此檔案的許可權
其中
r
(read):可讀,檔案可以被檢視。w
(write): 可寫,檔案可以被修改,刪除。x
(execute):可執行,如果檔案是指令碼活程式,可以被執行。-
:無以上許可權
比如:
-rw-r----- 1 root tomcat 57092 Dec 8 00:46 LICENSE
上面的語句表明,LICENSE 是一個檔案,其可以被其所有者讀寫,但不能執行。其僅僅可以被所屬的組的使用者檢視,對於其他使用者無權檢視、修改、執行此檔案。
chmod:修改檔案許可權
chmod [u|g|o|a] [=|+|-] [r|w|x] file
- u|g|o|a: u代表使用者user,g代表使用者組group,o代表其他other,a代表all
- =|+|-: =表示直接給許可權,+/-表示在原來許可權的基礎上加減許可權
- r|w|x: r表示讀許可權,w表示寫許可權,x表示可執行許可權
- file: 檔名
示例: ```
給檔案所屬於的組(root組)加上寫許可權
chmod g+w test.txt ```
chmod的引數還有一種數字描述形式:
chmod [user_num|group_num|other_num] file
第一位數字描述擁有者許可權,第二個數字是描述使用者組,第三位數字是描述其它使用者許可權,三個數字都是由讀寫、執行許可權的值相加而來。
我們先定讀、寫、執行的值為:
- r = 4
- w = 2
- x = 1
比如希望使用者許可權為可讀可寫可執行,使用者組和其他只能讀和執行,那麼可以用755代表權限。因為
7 = 4(r)+2(w)+1(x)
5 = 4(r)+1(x)
按照上面的描述,這些數字相加後可能的值有0、1、2、4、3、5、6、7,其中0代表無許可權 ```
擁有者許可權(7代表所有許可權),使用者組/其它使用者(5代表可讀、可執行)
chmod 755 test.txt
又比如比較粗暴的做法: 讓所有使用者獲得所有許可權
chmod 777 test.txt ```
檔案查詢
find:在指定目錄根據檔案資訊查詢
這是查詢檔案最強大、也是比較常用的命令,輸出結果是列出符合條件的檔案列表。可以根據檔案的命名、大小、修改時間、型別、許可權等資訊查詢。
find 搜尋路徑 [選項] 搜尋內容
find的選項特別多,這裡不一一列舉,我們從查詢場景去介紹它的使用會更好,更多引數如有需要可自行去查詢資料,或者直接
根據檔案命名查詢
```sh
在/root目錄查詢名叫"test.txt"的檔案,注意按實際需求限制查詢路徑範圍越小越好,不然查詢會慢
find /root -name test.txt
在當前目錄查詢名叫"test.txt"的檔案,忽略檔名大小寫
find . -iname test.txt
在當前目錄查詢結尾是".txt"的檔案
find . -name *.txt ```
根據檔案大小查詢
示例: ```
在當前目錄下搜尋檔案大小為100k的檔案
find . -size 100k
在當前目錄下搜尋檔案大小大於100M的檔案。
find . -size +100M ```
根據檔案修改時間查詢
我們需要注意幾個選項: - -atime[+|-]時間:按照檔案訪問時間搜尋 - -mtime[+|-]時間:按照檔案資料修改時間搜尋 - -ctime[+|-]時間:按照檔案狀態修改時間搜尋
以-mtime說明 - -mtime n:n為數字,意思是在n天之前的【一天之內】被更改過內容的檔案; - -mtime +n:列出在n天之前(不含n天本身)被更改過內容的文件名; - -mtime -n: 列出在n天之內(含n天本身)被更改過內容的文件名;
示例: ```
在當前目錄查詢內容修改發生在2天之內的檔案
find . -mtime -2
```
根據檔案型別查詢
注意選項: - -type d:查詢目錄 - -type f:查詢普通檔案 - -type l:查詢軟連結檔案
```
查詢當前檔案中的目錄
find . -type d ```
根據檔案許可權查詢
- -perm: 許可權模式:查詢檔案許可權剛好等於“許可權模式”的檔案
- -perm: -許可權模式:查詢檔案許可權全部包含“許可權模式”的檔案
- -perm: +許可權模式:查詢檔案許可權包含“許可權模式”的任意一個許可權的檔案
上面我們介紹過檔案許可權數字描述的含義,這裡也用到這些數字:
```
查詢許可權許可權等於755的檔案
find . -perm 755 ```
組合查詢
會用到邏輯符選項: - -a: and邏輯與 - -o: or邏輯或 - -not: not 邏輯非
示例: ```sh
在當前目錄下搜尋大於2KB,並且檔案型別是普通檔案的檔案
find . -size +2k -a -type f
在當前目錄下搜尋名字叫做test.txt或test.json的檔案
find . -name test.txt -o -name test.json
在當前目錄下查詢名字不叫test.txt的檔案
find . -not -name test.txt ```
對查詢結果進行操作
```
對查詢結果執行 -exec 後面的命令
find 搜尋路徑 [選項] 搜尋內容 -exec 命令 {} \;
需確認後對查詢結果執行 -ok 後面的命令
find 搜尋路徑 [選項] 搜尋內容 -ok 命令 {} \; ```
示例: ```
查詢當前目錄下檔名以.log結尾且24小時內更改過的檔案,並進行安全刪除操作(即刪除前會進行詢問)
find -name "*.log" -type f -mtime -1 -ok rm {} \; ```
grep: 根據檔案內容查詢
在實際使用中,我們經常管道符配合使用,即在某些命令輸出結果後使用grep過濾內容,比如: ```
檢視包含"java"字元的程序
ps -ef | grep java
grep的命令格式:
grep [OPTIONS] PATTERN [FILE...]
grep的引數也比較多,但使用不復雜,這裡不一一列舉,舉些例子:
/etc/nginx.conf中查詢包含'8080'的內容
grep "8080" /etc/nginx.conf
在多個檔案查詢內容
grep "root" /etc/passwd /etc/group
在當前目錄中遞迴查詢內容(即包含其下面多級子目錄)
grep -r "root" ./ ``` grep還有更多選項,比較靈活,但是不算常用,可自行查詢。
locate:更快的查詢
Linux為locate命令在/var/lib/mlocate目錄專門有一個檔案資訊的資料庫,用locate命令查詢檔案時,其實是在這樣的資料庫中查詢。
所以locate命令和find命令的區別就是,locate命令查詢檔案在資料庫中查詢,查詢的速度非常快,幾乎是馬上列出結果;而find命令查詢時則是直接查詢硬碟上的檔案,查詢的速度相應的非常慢。不過find命令查詢檔案比locate命令要可靠一些,因為locate的資料庫是每天更新一次,如果是剛剛新建的檔案,locate命令會找不到。
locate [OPTION]... [PATTERN]...
選項:
- -e 將排除在尋找的範圍之外。
- -1 如果 是 1.則啟動安全模式。在安全模式下,使用者不會看到許可權無法看到 的檔案。這會使速度減慢,因為 locate 必須至實際的檔案系統中取得檔案的 許可權資料。
- -f 將特定的檔案系統排除在外,例如我們沒有必要把 proc 檔案系統中的檔案 放在資料庫中。
- -q 安靜模式,不會顯示任何錯誤訊息。
- -n 至多顯示 n個輸出。
- -r 使用正規運算式 做尋找的條件。
- -o 指定資料庫存的名稱。
- -d 指定資料庫的路徑
- -h 顯示輔助訊息
- -V 顯示程式的版本訊息
```
查詢和log相關的檔案
locate log
使用正則:結尾是.log的檔案
locate -r ".log$" ```
which/where:查詢命令的存放位置
which比where更直白和簡潔的定位到程式的位置,whereis比which顯示的更豐富,可以同時顯示幫助及二進位制檔案。
``` which nginx /usr/sbin/nginx
whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
```
檔案傳輸
scp
scp 命令用於 Linux 之間複製檔案和目錄。scp 是 secure copy 的縮寫, scp 是 linux 系統下基於 ssh 登陸進行安全的遠端檔案拷貝命令。一般寫法:
scp [可選引數] file_source file_target
示例: ```
將本地test.txt檔案複製到54.138.182.10遠端機器的/home目錄下
scp /home/test.txt [email protected]:/home ```
ftp
FTP是ARPANet的標準檔案傳輸協議,該網路就是現今Internet的前身。
ftp [-dignv][主機名稱或IP地址]
- -d 詳細顯示指令執行過程,便於排錯或分析程式執行的情形。
- -i 關閉互動模式,不詢問任何問題。
- -g 關閉本地主機檔名稱支援特殊字元的擴充特性。
- -n 不使用自動登陸。
- -v 顯示指令執行過程。
ftp 54.138.182.10
檔案解壓縮/歸檔
tar:檔案歸檔、解壓縮
tar(英文全拼:tape archive )命令用於備份檔案(即檔案歸檔和解開歸檔)。 tar的引數比較多,我們列出常用的引數: - -c或--create 建立新的備份檔案。 - -t或--list 列出備份檔案的內容。 - -x或--extract或--get 從備份檔案中還原檔案。 - -v或--verbose 顯示指令執行過程。 - -z或--gzip或--ungzip 通過gzip指令處理備份檔案。 ```
將test1.txt和test2.txt壓縮打包為為test.tar.gz
tar -czvf test.tar.gz test1.txt test2.txt
解壓test.tar.gz
tar -xzvf test.tar.gz ```
zip/unzip:檔案解壓縮
命令引數較多,我們舉例子說明: ```
-r為遞迴處理,這裡是把/home/html下的所有檔案壓縮到html.zip
zip -r html.zip /home/html
將test1.txt和test2.txt壓縮打包為為test.zip
zip test.zip test1.txt test2.txt
檢視壓縮包裡的檔案
unzip -l test.zip
或
unzip -v test.zip
解壓test.zip
unzip test.zip ```
編輯器
熟悉linux基礎操作的過程就是熟悉命令和快捷鍵的過程,vi/vim也不例外。在沒有Gui情況下,操作指令非常多,我們可以按照需要記住一些常用的操作即可,在學習和查詢中不斷熟悉完善學習,下圖列舉了vi的使用指令:
學習vi或vim的技巧就是多去練習,慢慢熟悉它的操作習慣。
篇幅有限,具體vi編輯器的使用這裡不多做介紹,可以自行查詢教程學習。
你也可以通過檔案傳輸,在本地使用自己熟悉的編輯器編輯完文字後在上傳到linux(當然這比較麻煩),我還是推薦去掌握vi的使用。
程序管理
ps:檢視系統程序
介紹常用的ps用法: ```
檢視所有程序
ps -A
檢視目前所有的正在記憶體當中的程式
ps aux
帶(啟動)命令顯示程序
ps -ef
配合grep篩選顯示
ps -ef | grep java
```
top:實時檢視程序執行情況
選項:
- b:以批量模式執行,但不能接受命令列輸入;
- c:顯示命令列,而不僅僅是命令名;
- d:顯示兩次重新整理時間的間隔,比如 -d 5,表示兩次重新整理間隔為5秒;
- i:不顯示空閒程序和殭屍程序;
- n:更新的次數,完成後退出top。比如 -n 5,表示top更新5次資料就退出;
- p:引數為PID,僅監視指定程序的ID;PID是一個數值;
- q:不經任何延時就重新整理;
- s:安全模式執行,禁用一些效互指令;
- S:累積模式,輸出每個程序的總的CPU時間,包括已死的子程序;
top
lsof:列出當前系統開啟檔案的工具
lsof [options] filename
選項:
- -a:列出開啟檔案存在的程序。
- -c<程序名> :列出指定程序所開啟的檔案。
- -g:列出GID號程序詳情。
- -d<檔案號>:列出佔用該檔案號的程序。
- +d<目錄> :列出目錄下被開啟的檔案。
- +D<目錄> :遞迴列出目錄下被開啟的檔案。
- -n<目錄> :列出使用NFS的檔案。
- -i<條件> :列出符合條件的程序。(4、6、協議、:埠、 @ip )
- -p<程序號> :列出指定程序號所開啟的檔案。
- -u :列出UID號程序詳情。
- -h :顯示幫助資訊。
- -v :顯示版本資訊。
示例: ```
列出誰在使用某個埠。
命令:lsof -i:3306 ```
kill:結束程序
kill [選項] [程序號]
常用操作訊號對應的數字:
HUP 1 終端斷線
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
```
檢視操作訊號
kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
我們可以使用ps
命令檢視程序的第二列拿到程序號
ps aux
強制終止程序
kill –9 3268
```
磁碟資訊
- df -hl:檢視磁碟剩餘空間
- df -h:檢視每個根路徑的分割槽大小
- du -sh [目錄名]:返回該目錄的大小
- du -sm [資料夾]:返回該資料夾總M數
- du -h [目錄名]:檢視指定資料夾下的所有檔案大小(包含子資料夾)
防火牆
一般以下工具只留一種即可,免得配置複雜,最好是iptables。
iptables
其規則比較複雜,我們簡單介紹。 ```
檢視規則
iptables –L
開放3306埠
sudo iptables -I INPUT 2 -p tcp --dport 3306 -j ACCEPT
刪除INPUT列表中的第二條規則
sudo iptables -D INPUT 2
儲存規則
service iptables save
```
ufw
iptables很強大也很複雜,於是便有UFW和Firewalld。它們的命令簡單清晰很多,底層都是呼叫iptables。UFW是Ubuntu下防火牆。 ```sh
啟動ufw
systemctl start ufw
停用ufw
systemctl stop ufw
查詢ufw開啟狀態,列印規則
ufw status
允許80埠訪問
ufw allow 80
拒絕8000埠訪問
ufw deny 9000
拒絕ip為xxx.xxx.xxx.xxx訪問
ufw deny from xxx.xxx.xxx.xxx
允許通過tcp協議,9000-9002訪問
ufw allow 9000:9002/tcp
刪除規則
ufw delete allow http ```
Firewalld
Firewalld是Fedora/CentOS 8之後版本自帶的防火牆:
```
啟動
firewalld systemctl start firewalld
停用
firewalld systemctl stop firewalld
允許tcp協議8161埠訪問,--zone(作用域),--permanent(永久生效)
firewall-cmd --zone=public --add-port=8161/tcp --permanent
重新載入規則
firewall-cmd --reload
將80埠的流量轉發至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
將80埠的流量轉發至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1
將80埠的流量轉發至192.168.0.1的8080埠
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 ```
安裝命令
CentOS/RHEL/Fedora
格式:
yum [options] [command] [package ...]
- options 可選,選項包括-h(幫助),-y(當安裝過程提示選擇全部為 "yes"),-q(不顯示安裝的過程)等等。
- command 要進行的操作。
- package 安裝的包名。
示例:
```
列出所有可更新的軟體清單
yum check-update
更新所有軟體
yum update
安裝wget
yum install wget
確認安裝是否成功
rpm -qa | grep wget
刪除軟體包
yum remove
查詢軟體包
yum search
找出以 pam 為開頭的軟體
yum list pam* ```
Debian/Ubuntu
apt [options] [command] [package ...]
- options 可選,選項包括 -h(幫助),-y(當安裝過程提示選擇全部為"yes"),-q(不顯示安裝的過程)等等。
- command 要進行的操作。
- package:安裝的包名。
常用操作示例: ```
列出所有可更新的軟體清單
sudo apt update
升級軟體包
sudo apt upgrade
列出可更新的軟體包及版本資訊
apt list --upgradeable
升級軟體包,升級前先刪除需要更新軟體包
sudo apt full-upgrade
安裝指定的軟體命令
sudo apt install
安裝多個軟體包
sudo apt install
更新指定的軟體命令
sudo apt update
顯示軟體包具體資訊,例如:版本號,安裝大小,依賴關係等等
sudo apt show
刪除軟體包命令
sudo apt remove
清理不再使用的依賴和庫檔案:
sudo apt autoremove
移除軟體包及配置檔案:
sudo apt purge
查詢軟體包命令
sudo apt search
列出所有已安裝的包
apt list --installed
列出所有已安裝的包的版本資訊
apt list --all-versions ```
感謝閱讀!歡迎關注系列專欄:《小團隊web技術搭建》