介绍Linux下使用grep命令显示上下文信息的方法

说实话,我当年第一次用grep的时候,对这堆参数真是搞不懂。
后来在一个深夜调试Apache日志,突然发现-B和-A参数救了我命。
你知道不?当时日志里有个错误,光看那一行根本看不出前因后果,结果加上-B3 参数一看,嚯,前几行有个配置改错了,这不就定位问题了吗?
有意思的是这些参数的交互特别灵活。
我有个习惯,用-C的时候喜欢手写-C2 ,不是觉得省事儿,而是觉得这样最直观——匹配行加上它上面一行、下面一行,总共三行,不多不少,刚好能看到关键上下文。
你要是文件就十行出头,-C5 反而会显示乱码,这时候就该用脚本判断文件总行数,动态调整参数了。

多文件搜索这点特别实用。
我之前在服务器上管一堆PHP日志,直接用grep -A1 "Fatal error" .php,结果发现有个文件权限问题,通配符直接报错。
后来改用find . -name ".php" | xargs grep -A1 "Fatal error",这才搞定。
这细节我记了好久,每次跟新人讲都会说:通配符前加个find,比直接用grep高级多了。

版本问题我踩过坑。
有回用grep的--color=always看日志,结果发现颜色全不对劲。
查了半天发现是系统自带的grep太老了,新版本有这个参数。
后来自己编译了GNU grep,直接装到/home/zzz/bin下,改了PATH,从此告别乱码问题。
你要是也遇到类似情况,记住grep -V输出版本号是快速定位方法。

权限问题我也遇到过。
有一次在测试环境用grep -A1 0 "unauthorized" access.log,结果发现权限不够,只显示了匹配行和后面九行。
当时还以为grep出bug了,后来发现是测试环境日志文件权限改了。
所以用通配符搜索前,顺手用ls -l check一下,省得浪费时间debug。

这些细节其实都在用中学到的,没有谁会一上来就全记住。
我有个笔记本,专门记这些小技巧,比如-B参数在文件开头会智能处理,-A参数在文件结尾也同理,这些都不用刻意背,用多了就自然懂了。

如何在LinuxVi中显示行数linuxvi显示行数

说白了,在Linux Vi里显示行数就三招:用命令临时开、改配置永久用、装插件玩花样。

展开讲:先用:set number命令,去年我们跑那个监控脚本项目,半夜调试突然忘行号了,输入这句立马全出来了,但关文件就没了;另外一点是改~/.vimrc,去年我们给团队统一配置时,发现注释掉的set number像被隐形贴纸盖着,取消后永久生效,不过得用sudo改全局文件,说实话挺坑的;还有个细节挺关键的,装插件比如Vim-airline,我们去年重构日志分析工具时,用它把行号、CPU占用、插件图标全整在状态栏,但装pip和vim-plug折腾了俩小时,而且更新插件还得同步git pull,量级大的时候卡得不行,用行话说叫雪崩效应,其实就是前面一个小延迟把后面全拖垮了。

我一开始也以为改/etc/vim/vimrc最稳,后来发现不对,普通用户连文件都打不开。
等等,还有个事,现在很多IDE都自带Vi模式,像VS Code里装vim插件,连行数都带,但代码同步和插件冲突老出问题。

建议先试试:set number,不习惯命令行就找现成的插件,别硬改系统配置。

如何在Linux命令行中统计文件内容?

wc命令是Linux下统计文件内容神器,简单实用。

统计行数:wc -l 文件名 统计单词数:wc -w 文件名 统计字节数:wc -c 文件名 统计字符数:wc -m 文件名
处理日志文件:grep "error" log.txt | wc -l 统计目录文件数:ls | wc -l 统计代码行数:grep -v "^$" code.py | wc -l
注意编码和目录统计细节。

自己掂量。

linux怎么查看文件最后几行数据

哎,tail这个命令,在Linux里头,真的挺常用的。
主要是看文件尾巴那点内容。
我以前刚开始用的时候,也犯迷糊。

你想啊,最简单的,就是看最后几行。
比如,我要看一个叫log.txt的文件,最后1 0行,就直接打 tail log.txt 就行了。
这是默认的,不带参数的时候,就给你1 0行。

你要是只想看5 行呢?就打 tail -n 5 log.txt。
注意那个 -n,后面跟数字,就是看多少行。
这个 -n,有时候也可以省略,比如 tail -5 log.txt,也是看5 行。
我当时就搞不清,有时候用 -n,有时候用 -5 ,感觉差不多,其实有细微差别,可能我偏激了,觉得都一样。

你要是看字节数呢?比如我看最后1 00字节,就用 tail -c 1 00 log.txt。
这个 -c,后面跟的是字节个数。
而且,这个字节后面,还可以加个后缀,比如 k 代表1 02 4 字节,m 代表1 02 4 1 02 4 字节。
比如 tail -c 1 k log.txt,就是看最后1 02 4 个字节。
这在看二进制文件或者需要精确看某部分内容的时候,挺有用的。

还有啊,看日志的时候,经常用 tail -f。
这个 -f,就是实时看,文件有新内容了,就自动刷新显示出来。
我以前看系统日志 /var/log/syslog,就常用这个。
tail -f /var/log/syslog,然后就一直显示在那个地方,新的日志来了,嗖一下就看到了。
这个 -f,有时候也得配合别的参数用。

比如,你要是用了 tail -f,但想指定一个进程ID,当这个进程结束了,就不继续追加了,就用 --pid=1 2 3 4 就是 tail -f --pid=1 2 3 4 /var/log/syslog。
这个 1 2 3 4 ,就是你那个进程的ID。
这个我印象不深了,可能用得少。

另外,-f 还可以跟 -s 一起用,就是设置刷新的间隔。
比如 tail -f -s 2 /var/log/syslog,就是每隔2 秒,检查一下文件有没有变,有变了就刷新一下显示。
这样就不会一直全屏滚动了,比较省事。

还有啊,你要是看多个文件,比如 tail file1 .txt file2 .txt,那它显示的时候,会每个文件前面都标个文件名,哪个文件的内容,一看就知道了。
这个挺好。

你要是想看标准输入的内容呢?文件名写成 -,就是 tail -n 5 -。
然后你就可以把其他命令的输出,重定向给这个 tail 命令看。
这个我用得也少。

最逗的是啥呢?你要是从文件开头往后看,而不是从尾巴往前看,咋办?就用 + 号。
比如 tail -n +5 log.txt,就是从第5 行开始,一直看到文件末尾。
这个我更少用,一般都看尾巴。

哦对了,多文件那个 -q,就是安静模式,不加 -q 的话,每个文件前面都有一堆 file1 .txt: 之类的,加 -q 就去掉这些标题,直接显示内容。
有时候多个文件看,觉得那标题挺烦人的,就用这个。

还有就是,看文件,肯定得有权限啊。
你要是没权限,打 tail log.txt,屏幕上立马就报错 Permission denied。
这个很常见。
所以,有时候要先用 chmod 改改权限。

总的来说,tail这命令,参数挺多的,组合起来用,能干的事儿不少。
看日志啊,看文件尾巴啊,挺方便的。
就是刚开始用,得慢慢摸索。