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
),可能引发权限问题。