VIM 高級特性
插入模式
- 按
i
進入插入模式。 - 按
o
在當前行下方插入空行并進入插入模式。 - 按
O
在當前行上方插入空行并進入插入模式。
命令模式
:set nu
顯示行號。:set nonu
取消顯示行號。:100
光標跳轉到第 100 行。G
光標跳轉到文件最后一行。gg
光標跳轉到文件第一行。30G
跳轉到第 30 行。dd
刪除(剪切)當前行。Ndd
剪切當前行及下方N-1
行(如5dd
剪切 5 行)。cc
替換當前行并進入插入模式。d^
刪除當前光標至行首的所有字符。d$
刪除當前光標至行尾的所有字符。dw
刪除當前光標至當前單詞末尾的所有字符。P
(大寫)在光標前粘貼剪切板內容。p
(小寫)在光標后粘貼剪切板內容。u
撤銷上一次操作。yy
復制當前行。Nyy
復制當前行及下方N-1
行(如3yy
復制 3 行)。:set ignorecase
或:set ic
忽略大小寫。:%s/no/yes/g
全局替換文件中的no
為yes
(%
表示整個文件,g
表示全局替換)。
文件查找
/word
從當前光標向下查找word
。?word
從當前光標向上查找word
。n
跳轉至下一個匹配項。N
跳轉至上一個匹配項。u
撤銷最近一次操作(多次按u
可撤銷多步)。U
撤銷當前行的所有修改。Ctrl-r
恢復最后一次撤銷。.
重復上一次操作。
文本處理工具
cat 命令
說明:用于查看文件內容,合并文件或創建新文件。
使用規則:
cat [選項] [文件名]
常見選項:
-n
:顯示行號-b
:顯示非空行行號-s
:壓縮連續空行
示例:cat file.txt
顯示文件內容cat file1.txt file2.txt > merged.txt
合并文件
less 命令
說明:分頁查看文件內容,支持上下滾動和搜索。
使用規則:
less [選項] [文件名]
常見操作:
- 空格:向下翻頁
b
:向上翻頁/關鍵詞
:搜索內容q
:退出
示例:less large_file.log
分頁查看大文件
more 命令
說明:與 less
類似,但功能更簡單,僅支持向下翻頁。
使用規則:
more [選項] [文件名]
常見操作:
- 空格:向下翻頁
Enter
:向下逐行滾動q
:退出
示例:more long_text.txt
逐頁查看文件
nl 命令
說明:顯示文件內容并添加行號。
使用規則:
nl [選項] [文件名]
常見選項:
-b a
:為所有行編號(包括空行)-b t
:僅非空行編號(默認)
示例:nl script.sh
顯示文件并標注行號
綜合對比
- cat:適合快速查看小文件或合并文件。
- less/more:適合查看大文件,
less
功能更豐富。 - nl:需顯示行號時使用,類似
cat -n
但更靈活。
注意:所有命令均支持輸入重定向(如 cat < file.txt
)和管道操作(如 ls | less
)。
tail 命令簡介
tail
是 Linux/Unix 系統中常用的命令行工具,用于顯示文件的末尾內容。默認顯示文件的最后 10 行,適合查看日志文件或實時監控文件更新。
基本語法
tail [選項] [文件]
常用選項
-n <行數>
或 --lines=<行數>
指定顯示文件的末尾行數。例如顯示最后 20 行:
tail -n 20 filename
-f
或 --follow
實時跟蹤文件變化,常用于監控日志文件。按 Ctrl+C
退出:
tail -f filename
-q
或 --quiet
不顯示文件名標題(多文件時默認顯示文件名)。
tail -q file1 file2
-v
或 --verbose
始終顯示文件名標題(默認多文件時生效)。
tail -v filename
-c <字節數>
或 --bytes=<字節數>
顯示文件的末尾字節數。例如顯示最后 100 字節:
tail -c 100 filename
使用示例
顯示文件最后 10 行(默認)
tail filename
顯示文件最后 5 行
tail -n 5 filename
實時監控日志文件
tail -f /var/log/syslog
顯示多個文件的末尾內容
tail file1 file2
從第 100 行開始顯示到文件末尾
tail -n +100 filename
高級用法
結合管道與其他命令
將 tail
輸出傳遞給其他工具(如 grep
)過濾內容:
tail -f /var/log/nginx/access.log | grep "404"cat /etc/vsftpd/vsftpd.conf |grep -v ^# |grep -v ^$grep -v ^$ 表示過濾空行
反向顯示文件內容(需結合 tac
)
tail
本身不提供反向顯示功能,但可通過以下方式實現:
tac filename | head -n 10
?查看日志分析方法
tail -f /var/log/nginx/access.log | grep -A3 -B3 -E '(err|warn)'
-E
?啟用擴展正則表達式,匹配模式?(err|warn)
?表示查找包含?err
?或?warn
?的行。-A3
?顯示匹配行及其后 3 行(After)-B3
?顯示匹配行及其前 3 行(Before)
注意事項
- 若文件不存在或無權限訪問,會報錯提示。
-f
模式下,文件被刪除后需重新跟蹤(可用--follow=name
保持跟蹤)。- 大文件處理時建議結合
-n
限制行數以避免性能問題。
grep 定義
grep
(Global Regular Expression Print)是 Unix/Linux 系統中的命令行工具,用于在文件或標準輸入中搜索匹配指定模式(正則表達式或固定字符串)的行,并將匹配的行輸出。
grep 常用選項
grep
的選項分為以下幾類:
搜索模式控制
-i
:忽略大小寫(case-insensitive)。-v
:反向匹配,輸出不包含模式的行。-w
:僅匹配完整單詞(word-regexp)。-x
:僅匹配整行(line-regexp)。
輸出控制
-c
:統計匹配的行數而非輸出內容。-n
:顯示匹配行及其行號。-l
:僅輸出包含匹配的文件名(不輸出具體行)。-L
:輸出未包含匹配的文件名。-o
:僅輸出匹配的部分(而非整行)。-q
:靜默模式(不輸出結果,用于腳本判斷)。
文件處理
-r
或-R
:遞歸搜索目錄中的文件。--include
:指定搜索的文件擴展名(如--include="*.txt"
)。--exclude
:排除特定文件(如--exclude="*.log"
)。
正則表達式類型
-E
:啟用擴展正則表達式(等效于egrep
)。-F
:禁用正則表達式,僅匹配固定字符串(等效于fgrep
)。-P
:啟用 Perl 兼容正則表達式(需支持 PCRE)。
參數說明
模式
:搜索的正則表達式或固定字符串。文件
:目標文件或目錄(可省略,默認從標準輸入讀取)。
使用規則與示例
基礎搜索
grep "error" log.txt # 在 log.txt 中搜索 "error"
grep -i "warning" file # 忽略大小寫搜索 "warning" cat? /etc/vsftpd/vsftpd.conf |grep -v '#'? ?反向選擇非#號的內容。
cat /etc/vsftpd/vsftpd.conf |grep ^# 過濾以#號開頭的內容
cat /etc/vsftpd/vsftpd.conf |grep ^# |grep -i yes$ 過濾以#號開頭的內容,顯示yes結尾的。
遞歸搜索目錄
grep -r "pattern" /path/to/dir # 遞歸搜索目錄中的所有文件
正則表達式匹配
grep -E "[0-9]{3}-[0-9]{4}" contacts.txt # 匹配電話號碼格式
grep -P "\d+" data.txt # 使用 Perl 正則匹配數字
多文件處理
grep "text" *.log # 搜索當前目錄下所有 .log 文件
grep -l "success" *.txt # 僅列出包含 "success" 的文件名 cat /etc/passwd |grep -i /bin/bash$ |grep -v ^roo |cut -d: -f 1 > userlist.txt
grep -v ^roo
排除以 roo 開頭的用戶行(-v 反向匹配,^ 匹配行首),主要避免包含 root 或類似特權用戶。cut -d: -f 1
按冒號(:)分隔每行內容(-d:),提取第一個字段(-f 1),即用戶名。> userlist.txt
將最終結果(符合條件的用戶名列表)重定向輸出到文件 userlist.txt。典型輸出示例
管道結合
cat log.txt | grep "error" # 從管道輸入中搜索
ps aux | grep "nginx" # 過濾進程列表
排除與包含文件
grep -r --include="*.py" "import" /code # 僅搜索 .py 文件
grep -r --exclude="*.tmp" "data" /var # 排除 .tmp 文件
注意事項
- 正則表達式需根據
-E
或-P
選項調整語法(如+
、|
需擴展模式支持)。 - 特殊字符(如
$
、*
)需用單引號或反斜杠轉義(如grep '\$' file
)。 - 遞歸搜索時避免系統目錄(如
/proc
),可能引發權限問題。