linux中grep命令的使用

说白了,grep就是Linux里用来找文本的利器,用正则表达式就能精准定位,而且谁都能用。

先说最重要的,去年我们跑那个监控系统,日志动不动就几GB,纯手工翻根本不行,用grep -n "错误"瞬间定位问题行号,效率高到吓人。
另外一点,有个场景特别典型:比如grep -I "Warning" .log,那些日志文件都是二进制的,不加-I直接报错,说实话挺坑的。
还有个细节挺关键的,比如匹配连续5 个小写字符,得用grep '[a-z]{5 }' file,这个点很多人没注意,以为就能搞定。

我一开始也以为grep就这功能,后来发现不对,比如用grep -v "成功"能直接翻出反例,调试起来太方便了。
等等,还有个事,grep -l "Bug"配合find找带Bug的文件,这个组合拳用多了会上瘾。

建议试试grep -r "关键"递归搜整个目录,不过注意性能,小数据量还行,上万个文件就得加-n限制行号,不然CPU干烧。

Linux ls -l与stat命令使用技巧

哈,Linux系统里的ls -l和stat命令,真是文件管理的两把好手啊。
我自己也经常用到。

上周有个客人问我,怎么在Linux下查看一个文件的详细属性,比如大小、权限、修改时间啥的。
我就给他介绍了ls -l。
这命令输出的信息一目了然,文件类型、权限、所有者、大小、修改时间啥的都在一行里。

比如说,我执行ls -l /home/user,它会这样显示:
-rw-r--r-
1 user user 4 09 6 Jan 8 1 0:2 0 test.txt
这行里头,第一位是文件类型,-表示普通文件。
接着的rw-r--r--是权限位,说明用户有读写权限,组和其他用户只有读权限。
再后面是硬链接数、所有者、所属组、大小、修改时间,最后是文件名。

不过有时候,我们可能需要更详细的信息,这时候stat命令就派上用场了。
比如,我可以用stat /home/user/test.txt来查看更详细的文件状态信息,包括文件名与设备号、inode编号、权限、uid/gid和三个时间戳等。

我之前遇到过一个问题,就是需要脚本自动检查某个文件是否可执行。
这时候,stat命令的输出配合grep就能派上用场了。
比如这样:
stat --format='%f' test.sh | grep -q '1 ed'
这行命令会检查test.sh文件是否有执行权限。

当然,这两个命令各有千秋。
ls -l适合日常使用,信息简洁直观,而stat适合脚本处理,可以获取精确的文件信息。
不过要注意的是,频繁调用stat可能会影响性能,尤其是在网络文件系统上。

总之,掌握这两个命令,对于文件管理和问题排查来说,效率能提升不少。
反正你看着办,用得越多,就越觉得方便。
我还在想,怎么在脚本中结合这两个命令,自动化处理一些文件管理任务呢。

linux日志查询常用命令

grep啊,这个命令挺好用的。
我之前在调试系统问题的时候,经常用。
比如你要查/var/log/syslog里有没有"错误"这两个字,就直接敲:grep "错误" /var/log/syslog。
特别快,一下子就能找到相关行。
支持正则表达式,这点很方便。

tail也是老常用了。
要看最新的日志,比如nginx的访问日志,我一般会敲:tail -f /var/log/nginx/access.log。
这个-f啊,就是实时追踪,日志更新了它就显示出来。
不用一直刷新。
你看最后1 00行,就用tail -n 1 00 /var/log/messages。

head呢,跟tail相反,看前面的。
比如要看/var/log/auth.log开头2 0行,就用head -n 2 0 /var/log/auth.log。
分析日志结构的时候常用。

awk这个就厉害了。
可以提取特定字段。
我举个例子,查/var/log/syslog,只看第1 列和第3 列,敲:awk '{print $1 , $3 }' /var/log/syslog。
或者筛选月份,比如只看Jan的,用awk '$1 == "Jan" {print $0}' /var/log/messages。
结构化日志处理特方便。

sed啊,主要是改文本。
比如把/var/log/syslog里所有"错误"都改成"警告",就用:sed 's/错误/警告/g' /var/log/syslog。
或者删注释行,比如删/etc/nginx/nginx.conf里所有以开头的行,用:sed '/^d' /etc/nginx/nginx.conf。
不过直接改文件要注意备份,我一般会用sed -i.bak 's/old/new/g' file,这样有个备份文件。

journalctl是systemd系统的日志工具。
现在系统都用这个。
看所有日志,直接敲journalctl。
看某个服务的,比如nginx,敲journalctl -u nginx.service。
按时间查也方便,比如查2 02 4 年1 月1 号到2 号间的日志,敲:journalctl --since "2 02 4 -01 -01 " --until "2 02 4 -01 -02 "。

用这些命令啊,要根据情况。
比如要快速定位错误,用grep "error" /var/log/app.log或者journalctl -p err。
要实时监控,用tail -f /var/log/nginx/access.log。
要分析结构,head -n 5 0 /var/log/syslog | awk '{print $1 , $2 , $5 }'。
批量改日志要小心,sed -i 's/old_ip/new_ip/g' /var/log/app.log。

总之啊,这些命令组合用起来,效率高多了。