从 cat、tail、grep 到 find、sort、diff、chmod,把文件查看、日志排查、文本处理和权限调整。
本文目录
01 内容查看
02 分页阅读
03 头尾查看
04 数量统计
05 文件查找
06 快速定位
07 命令定位
08 文本搜索
09 排序处理
10 连续去重
11 差异比较
12 权限修改
13 属主修改
cat:快速查看文件内容
| catfile.txtcat-nfile.txt# 显示行号catfile1.txtfile2.txt# 合并显示多个文件cat>newfile.txt<<EOF# 创建并写入内容HelloWorldThisisatestEOF |
cat 适合查看短文件,也能合并多个文件内容;文件很大时别硬 cat,容易刷屏,换 less 或 tail 更稳。
less / more:分页阅读大文件
| lesslarge_file.logmorelarge_file.log# less 快捷键:# q: 退出# /关键词: 向下搜索# ?关键词: 向上搜索# n: 下一个匹配# G: 跳到末尾# gg: 跳到开头 |
less / more 像给大文件加了翻页器,查日志时比 cat 友好;less 里用 /关键词 搜索,按 q 退出。
head / tail:查看文件头尾
| head-n20file.txt# 查看前20行tail-n30file.txt# 查看后30行tail-f/var/log/syslog# 实时跟踪日志tail-f-n50app.log# 实时跟踪最后50行head-c100file.txt# 查看前100字节 |
head 看开头,tail 看结尾,tail -f 是实时追日志的常用姿势;线上排查时可以配合 -n 控制初始输出行数。
wc:统计行数、字数、字节数
| wcfile.txt# 输出: 行数 字数 字节数 文件名wc-lfile.txt# 仅统计行数wc-wfile.txt# 仅统计单词数wc-cfile.txt# 仅统计字节数 |
wc 用来做文件数量感知,像给文本做体检;最常用 wc -l 统计行数,排查日志量和数据量时很顺手。
find:按条件查找文件
| find/home-name"*.txt"# 按名称查找find/var-typef-name"*.log"# 查找.log文件find.-size+100M# 查找大于100MB的文件find/tmp-mtime+7# 查找7天前修改的文件find.-userroot# 按所有者查找find.-perm755# 按权限查找find.-empty# 查找空文件/目录find.-name"*.py"-execrm{}\;# 查找并执行命令find.-typed-name"node_modules"-prune-execrm-rf{}\;# 删除node_modules |
find 是服务器文件定位主力,可以按名称、大小、时间、属主、权限查;带 -exec 执行删除前务必先只查不删,确认范围再动手。
locate:快速定位文件名
| locateconfig.iniupdatedb# 更新数据库locate-i"readme"# 忽略大小写 |
locate 依赖索引数据库,所以查得快;如果新文件搜不到,先 updatedb 更新索引,这个坑很常见。
which / whereis / type:定位命令来源
| whichpythonwhereispythontypelstype-acd# 显示所有类型 |
这组命令用来搞清楚一个命令到底从哪来;type 能识别 shell 内建命令,排查 PATH 和别名问题很好用。
grep:文本搜索与上下文定位
| grep"error"app.loggrep-rn"TODO"./src/# 递归搜索并显示行号grep-i"warning"syslog# 忽略大小写grep-v"^#" config.cfg # 排除注释行grep-E"error|fail"log.txt# 匹配多个模式grep-c"function"*.js# 统计每个文件的匹配数psaux|grepnginx# 结合管道使用grep-A5"error"log.txt# 显示匹配后5行grep-B3"error"log.txt# 显示匹配前3行grep-C2"error"log.txt# 显示匹配前后各2行 |
grep 是日志排查核心,-r 递归、-n 显示行号、-v 反向过滤;查异常时常配 -A/-B/-C 带出上下文,别只看孤零零一行。
sort:对文本行排序
| sortfile.txt# 默认按字母排序sort-nnumbers.txt# 按数字排序sort-rfile.txt# 倒序排序sort-k2data.txt# 按第2列排序sort-ufile.txt# 去重后排序sort-t','-k2-ncsv.csv# 指定分隔符,按第2列数字排序 |
sort 像给文本行排队,默认按字母,-n 按数字,-k 指定列;处理 CSV 时记得用 -t 指定分隔符。
uniq:去除连续重复行
| uniqfile.txt# 去除连续重复行uniq-cfile.txt# 统计重复次数uniq-dfile.txt# 只显示重复行sortfile.txt|uniq-c# 先排序再统计(推荐用法) |
uniq 只处理连续重复行,所以通常先 sort 再 uniq;统计重复次数时 sort file.txt | uniq -c 是很经典的组合。
diff:比较文件差异
| difffile1.txtfile2.txtdiff-ufile1.txtfile2.txt# 统一格式输出diff-rdir1/dir2/# 递归比较目录diff-yfile1.txtfile2.txt# 并排显示差异 |
diff 用来比较两个文件或目录的不同,像给文本做变更对账;看补丁风格输出时优先用 diff -u。
chmod:修改文件权限
| chmod755script.sh# 数字法设置权限chmodu+xscript.sh# 给所有者添加执行权限chmodg+w,o-rfile.txt# 组添加写权限,其他人移除读权限chmod-R755/var/www/# 递归修改权限chmoda+rwxfile.txt# 所有人添加读写执行权限 |
chmod 负责改读写执行权限,数字法 7/6/5/4 要熟;生产环境别随手 chmod 777,够用原则更安全。
chown:修改所有者和所属组
| chownuserfile.txt# 修改所有者chownuser:groupfile.txt# 修改所有者和组chown-Rwww-data:www-data/var/www/# 递归修改chgrpdevelopersfile.txt# 只修改所属组 |
chown 用来调整文件归属,常见于 Web 目录和部署目录;递归 -R 很方便,但也要先确认路径,别把系统目录属主改乱。
感谢观看本次分享,觉得有用的话,欢迎点赞、在看、转发给需要的朋友。
关注公众号,获取更多技术干货。