【匯總】centos常用命令、使用技巧




一、序章

1.1 一些概念

  • 字段分隔符

           IFS是shell腳本中的一個重要概念,在處理文本數據時,它是相當有用的。IFS可以是White Space(空白鍵)、Tab( 表格鍵)、Enter( 回車鍵)中的一個或幾個。
           IFS(Internal Field Seperator)在Linux的shell中預設的分隔符,用來把command line分解成word(字段)。
           IFS的設置方法很簡單,和普通變量設置方法類似:
           IFS=":"
           建議設置IFS前保存原IFS的值,在使用后及時恢復。



1.2 shell常用快捷鍵

按鍵 解釋
上下方向鍵 輸入欄填充歷史命令
tab鍵 自動補全命令、文件名
ctrl+w 刪除前一個單詞【單詞首字母(符)到光標處】,在shell中以空格分隔單詞,在vi中以符號分隔
ctrl+u 刪除一行(行首到光標處)

獲取命令幫助,首選 man cmd 次選 cmd -h cmd --help



1.3 shell特殊符號

符號 作用
\ 轉義字符,比如在行尾使用\可以轉義回車為換行,可以起下一行繼續使用命令
命令中使用\可以轉義空格,不必使用單雙引號聲明字符串參數
; 順序地獨立執行各條命令, 彼此之間不關心是否失敗, 所有命令都會執行
分隔路徑?待考證
&& 上一條命令成功后才執行下一條命令
& 后台運行,不像Windows是同時執行命令
| 管道
|| 上一條命令失敗后才執行下一條命令
> [cmd] > [file] 重定向,覆蓋,空格嚴格要求
>> [cmd] >> [file] 重定向,追加,空格嚴格要求
~ 用戶home目錄
cd - 返回上一個操作目錄,-等同於 $OLDPWD 但是 - 只能在cd中使用,在其它命令中使用會被視為命令選項
! 上一條命令,!^ !$ !* 上一條命令第一個、最后一個、所有參數
!:n上一條命令的第n個參數
!s 打印並執行最近一條以s開頭的命令
使用較少,感覺!s用法比較實用
若要使用!作為邏輯非,有時需要\轉義
$ 腳本中使用較多
$$ Shell本身的PID(ProcessID)
$! Shell最后運行的后台Process的PID
$? 最后運行的命令的結束代碼(返回值)
$- 使用Set命令設定的Flag一覽
$* 所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。
$@ 所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
$# 添加到Shell的參數個數
$0 Shell本身的文件名
$1~$n 添加到Shell的各參數值。$1是第1參數、$2是第2參數…



1.4 獲取上一條命令的內容

有時我們寫命令時會想獲取上一條命令的輸出,簡單的我們可以使用管道,如果下一條命令無法從管道接收數據,我們可以使用xargs配合

但是有時我們想將上一條命令的輸出處理后再使用,那么管道不太合適

有兩種辦法,效果都一樣

  • `command` 反引號,執行命令,返回結果

  • $(command) 執行命令,返回結果,和上面不一樣的是,此方法支持嵌套

  • $? 特殊變量,但是這個只是返回值,大多為0或1,無法獲得命令行輸出



二、常用命令

2.1 防火牆

centos7防火牆是firewall

基本設置:https://www.cnblogs.com/heqiuyong/p/10460150.html

# 查看防火牆規則
firewall-cmd --list-all 
# 查看防火牆所有開放的端口
firewall-cmd --zone=public --list-ports
# 查看防火牆狀態
firewall-cmd --state
systemctl status firewalld.service

# 開放端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent   # 開放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent  #關閉5672端口
firewall-cmd --reload   # 配置立即生效

開放端口(段)給指定IP(段)。如開放給局域網192.168.1.1-192.168.1.255。https://www.cnblogs.com/xiaohanlin/p/11641273.html

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080-8081" accept'
# 192.168.1.0表示網段,/24表示子網掩碼二進制中連續1的個數,所以/24即255.255.255.0
# 局域網(也可稱為“私網”或“Lan側”)通常情況都使用私有IP地址:
# A類:10.0.0.0-10.255.255.255
# B類:172.16.0.0-172.31.255.255
# C類:192.168.0.0-192.168.255.255
# 所以表示方式為
# 10.0.0.0/8
# 172.16.0.0/16
# 192.168.0.0/16

# 刪除上述規則:
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080" accept'
# 查看rich-rule規則:
firewall-cmd --permanent --list-rich-rule

開放服務,服務是端口和/或協議入口的組合。區域是定義的網絡連接的可信等級,此外永久、端口轉發參見:https://www.jianshu.com/p/90ed497f49cf

# 獲取所有支持的服務
firewall-cmd --get-services
# 查看開放的服務
firewall-cmd --list-services
# 向默認區域添加開放的服務
firewall-cmd --add-service=
# 刪除開放的服務
firewall-cmd --remove-service=

端口流量轉發。端口可以映射到另一台主機的同一端口,也可以是同一主機或另一主機的不同端口。端口號可以是一個單獨的端口 或者是端口范圍 - 。協議可以為 tcp 或udp 。

firewall-cmd --permanent [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
# 例
firewall-cmd --add-forward-port='port=80:proto=tcp:toport=10050'
firewall-cmd --add-forward-port='proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080'
# 移除規則add改remove



2.2 進程和端口

# 查看監聽的端口
netstat -lnpt
# 檢查端口被哪個進程占用
netstat -lnpt |grep 5672
# 查看進程的詳細信息
ps 6832
# 中止進程
kill -9 6832
# 查找進程,前三列是UID、PID、PPID,最后一列是CMD
ps -ef|grep
# 殺死相關進程
ps -ef|grep ${0}|grep -v grep|cut -c 9-15|xargs kill -9
# ps -e 顯示所有進程 ; -f : 全格式 ; grep -v grep 結果中去掉含grep的一行,即搜索命令這個進程 ; cut -c 剪切指定字符,這里是提取進程號
# xargs 結合管道使用,將前面的值作為 kill -9 的參數



2.3 后台運行

當我們在終端運行程序時,程序不停,就會一直占用終端。如果關閉終端則程序也會停止

將程序放到后台運行,可以釋放終端,也不用擔心程序會終止

# 格式 nohup [cmd] [重定向] &
# 實例
nohup command > myLog.log 2>&1 &      # 返回進程PID
# > myout.file將日志輸出到文件
# 2>&1,將標准錯誤輸出重定向到標准輸出,少了這條命令,錯誤信息不會被輸出到日志中,而是打印到屏幕上
# 1前有&表示重定向的目標不是一個文件,而是一個文件描述符 https://zhuanlan.zhihu.com/p/47765176
# 關閉后台進程只能找出PID然后kill -9

實際由nohup和&構成

&:后台運行,但當用戶退出(掛起)的時候,命令自動也跟着退出

nohup: 即no hang up,不掛斷的運行

nohup命令可以將日志輸入到文件中,如果不指定輸出文件,默認輸出到當前目錄下的nohup.out文件,如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

其它后台運行的方法:

我們知道 ctrl+c 能結束當前進程。將當前進程 暫停 並放到后台是命令 CTRL+Z ,可暫停多個進程,終端退出進程退出

jobs # 查看后台進程
# 也可以查看nohub運行的后台進程,注意:jobs只在當前shell有效,一旦關閉終端,再重開jobs無法查找出之前nohub運行的后台進程

fg #將后台任務切換到前台執行。如果后台中有多個命令,可以用bg %jobnumber將選中的命令調出

bg #將一個在后台暫停的命令,變成在后台繼續執行。如果后台中有多個命令,可以用bg %jobnumber將選中的命令調出

screen也可以實現后台運行,需要下載



2.4 文件查看

命令 解釋 常用選項
cat 輸出文件內容 -n 顯示行號
head 輸出文件前幾行 -[numb] 輸出多少行
tail 輸出文件后幾行 -[numb] 輸出多少行
wc 統計文件字數 -l 行數;-w 字數;-c 字節數
grep 查找文件內容,輸出匹配的行
more 瀏覽內容
less 瀏覽內容

我們可以用管道組合幾個命令來實現更多功能,比如查看文件第10和11行 cat a.txt|head -11|tail -2 ,這存在一個小問題,就是大家搜文件習慣用cat開頭,其實沒必要,tail、grep都能接文件路徑,沒必要以cat開頭

查看文件中間幾行的最優解:sed -n '[numb],[numb]p' [文件名] ,記得第二數字后接字母p

詳說grep這個強大的命令

grep選項 解釋
-n 顯示行號
-i 忽略大小寫地匹配
-v [string] 反選,也可以理解為去掉某行
-G 啟用基本正則表達
-E 啟用擴展正則表達,grep -E也可以縮寫為egrep
-A [numb] 額外顯示每個匹配行之前[numb]行
-B [numb] 額外顯示每個匹配行之后[numb]行
-C [numb] 額外顯示每個匹配行之前之后[numb]行

more和less

單論瀏覽內容的話,cat是最拉跨的,全部輸出

more能翻頁瀏覽,空格往下,b鍵往上,= 顯示當前行號

less功能最為強大,能用pageup、down鍵上下翻頁,支持vi的 / ?搜索,支持 G 跳行,= 顯示行號



2.5 文件編輯 vi/vim sed

1) vi/vim

我們知道vi編輯文件時有三種工作模式

匯總一些好用的命令,命令模式和底行命令模式

按鍵 解釋
u 撤銷
. 恢復
yy 復制行
dd 刪除行
p 粘貼
ctrl+r 重復上一個動作
~ 更改大小寫
:set nu 顯示所有行號
:set nonu 取消顯示所有行號
nG 移動到行號是n的一行
G 移動到當前文件的最后一行
/[string] 向后搜索
?[string] 向前搜索
n 重復之前的搜索
N 反向重復之前的搜索
:set {list|nolist} 顯示和取消顯示換行等特殊字符
:set fileformat={unix|dos} 將文件格式轉成unix或dos格式

最后說說vi的特殊字符怎么輸入

  • Q:為什么需要輸入特殊字符?

    A:可能是腳本中需要用到

  • Q:vi中有哪些特殊字符?

    A:輸入 :help digraph-table 可以查看,如果是centos7,亂碼,可以發現打開的是.gz格式的幫助文檔,我們直接find搜索出這個gz文件,再gunzip解壓即可查看

char  digraph	hex	dec	official name ~
^@	NU	0x00	  0	NULL (NUL)
^A	SH	0x01	  1	START OF HEADING (SOH)
^B	SX	0x02	  2	START OF TEXT (STX)
^C	EX	0x03	  3	END OF TEXT (ETX)

             第一列為特殊字符,第二列為雙拼,第三列為十六進制表示, 第四列為十進制表示,第五列為該字符的官方名稱。

             一些不能顯示的功能按鍵會以^加字符顯示在vi中,並有高亮顏色,直接輸是沒法生效的

  • Q:如何輸入特殊字符?

    A:一是在 i 輸入模式下,ctrl+v就會出現高亮的^,按住不放再輸字符即可。

          二是在 i 輸入模式下,ctrl+v就會出現高亮的^,松開后,再輸入十進制數即可,注意十進制數如果不滿3位,需要在前面補零

          三是 ctrl+k 再加雙拼,但是博主 centos7 沒成功過

          上述字符和十進制數都需要查表

2) sed命令

sed命令可以操作文本,默認情況下,sed會讀取文本並根據動作進行操作,結果會輸出在控制台,不會修改文件,使用 -i 選項可以修改文件

-n 默認情況下,sed 會在所有的腳本指定執行完畢后,會自動輸出處理后的內容,而該選項會屏蔽啟動輸出,需使用 print 命令(p動作)來完成輸出

sed的動作如下

動作 說明 使用
a 新增,在指定行的下一行,一般不用引號 sed -i 4a\new\ line file.txt
4代表第四行,a代表新增
第一個反斜杠區分動作和動作參數,其實也可以用4a\ new\ line
"4a new line" 甚至 "4anew line",這都是作為一個參數給sed,最好分隔動作和字符串便於閱讀
i 插入,在指定行的上一行 同上
s 替換 s/pattern/replacement/flags 除了/也可以用 # % 等符號作分隔
每一行都會進行一次匹配和替換,默認啟用正則,因為有正則符號,所以一般用引號
常用flags:g,表示所有匹配的都進行替換,默認只替換每行的第一個匹配
n,數字,表示從第幾個匹配才開始替換,也可和g一起使用,如2g
用數字模式指定區間 指定動作在哪行執行 2代表第二行;2,4代表第二到第四行,包括第四行;2,$表示第二行到最后一行;3~2表示從第三行開始,每后兩行,即每隔一行,即3和后面的奇數行;1~1表示從第一行開始,每后一行,即整個文件
用文本模式指定區間 指定動作在哪行執行 sed '/123/ihello' 1.txt
在包含123的行之前插入hello,如果有多行包含123,則包含123的每一行之前都會插入hello
! 反選 行 可能需要\轉義!
p 會打印與替換命令中指定的模式匹配的行,此標記通常與 -n 選項一起使用 sed -n 5,$p file.txt 打印第五行到最后一行



2.6 其它雜項

  • echo字符轉義

    echo -e "\n" ,-e開啟字符轉義

  • cp強制覆蓋

    \cp -rf [src] [dest] 反斜杠是直接使用cp命令,而非~/.bashrc中的-i別名



三、使用技巧

3.1 自定義快捷指令

即重命名命令,編輯用戶家目錄下的 .bashrc 文件,添加,例如

alias tr='tree --dirsfirst -Cpu -L 2'

運行 source .bashrc 生效

使用時還可以繼續追加選項,如 tr -t,就等於 tree --dirsfirst -Cpu -L 2 -t



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM