Linux下查看文件的相关命令

你这说的也太细了,我当年刚开始搞Linux那会儿,真是啥都不懂,瞎摸索。
不过我给你说点实在的,我当年在杭州那会儿,公司有个老哥,他教我的。

先说cat吧,最简单,啥都不用管,cat filename,直接把文件内容全给你打出来了。
那年我刚入行,有个小任务,要看看用户手册,就随便用了cat,结果发现太长了,屏幕上滚得飞快,根本看不全。
后来才知道加个-n,显示行号,这样就知道看到哪了。

然后是tac,这个我印象不深,好像就是倒着看文件内容。
有个次啊,我看个日志文件,想看看最后咋回事,就用tac,结果发现是倒着的,挺有意思。

rev这个更奇葩,字符倒着输出。
我当年搞不懂,有个文件内容是"hello",用rev一看,变成"olleh",我还以为系统出bug了呢。
后来才知道是按行倒着,不是整个文件倒着。

head和tail,这两个用得多。
head默认看前1 0行,tail默认看后1 0行。
我当年看日志,都是用tail -f,一直看着,出了问题好找原因。
有个次啊,tail -f 一个日志,结果那个文件被删除了,我还在那儿等着呢,笑死。

sed这个更高级了,我当年没学明白,就用来替换点东西。
比如sed -i 's/old/new/g' filename,把文件里的old换成new。
有个次啊,我要把一个配置文件里的密码都换掉,就用sed,搞了半天,发现把所有密码都改了,差点密码库都炸了。

你说的head和tail联合用看中间内容,我当年没试过,不过我肯定用过head和tail看前后部分。
比如head -n 5 filename看前5 行,tail -n 5 filename看后5 行。
有时候我还用head -n 5 | tail -n 3 ,看第3 到第5 行,虽然有点绕,但确实能看。

反正Linux命令多着呢,你多试试就习惯了。
我当年就是瞎试,试多了也就懂了。
你现在说得这么清楚,肯定比当年我强多了。

Linux如何通过命令查看日志文件的某几行中间几行或最后几行

【一】直接从第3 000行看,用tail -n+3 000 | head -n1 000。

【二】先看前3 000行,再用tail -n+1 000。

【三】用sed -n '5 ,1 0p'只看第5 到1 0行。

文件行数统计,wc -l就能搞定。

项目里,统计js文件数,find . -name ".js" | wc -l。

行数统计,加上grep -v '^$'过滤空行,find . -name ".js" | xargs cat | wc -l。

你自己掂量。

linux中shell 函数式用法尝试具体说明

说实话,Shell函数这玩意儿用好了能省不少事,但看代码时我老觉得有点绕。
就拿你说的例子来说,函数定义和调用那块儿,确实藏着不少坑。

先说whilefun()这个函数。
它用whilereadline循环读取文件,这思路挺清晰的——一行行处理,不用自己管换行符。
不过接受两个参数的方式(文件路径和处理函数名)很巧妙,但实际用的时候容易搞混参数顺序。
我记得在某个项目里,就有同学把文件名和函数名反着传,结果整段脚本卡死,调试了好半天才发现是参数传错了。

custcmd2 ()这函数明显是写错了。
dir不是Linux标准命令啊,直接用就会报错。
而且ls .conf/tmp/tmpfcf2 这行更离谱,把文件列表重定向到目录名了,这在Shell里绝对会出事。
我以前写脚本时也犯过类似错误,把变量名当文件名用,结果系统就帮你创建了个新文件。
正确的写法应该是先ls .conf,然后把每个文件名存到变量里再处理。

custcmd()那块更复杂。
找路径、找.conf文件、重定向到/tmp/tmpfcf2 ...说实话,这段代码看得我头大。
Shell脚本重定向文件时有个怪癖:如果目标文件不存在,它会先创建文件,但如果是目录就直接崩溃。
所以把文件内容重定向到目录,脚本马上就挂了。
我当时改一个项目时,就踩过这个坑,花了俩小时才搞明白为啥临时文件突然消失了。

使用函数那部分其实更考验功力。
ps-ef + grep过滤进程,这招很常见,但要注意grep命令本身也会出现在进程列表里。
我之前写监控脚本时,就忘了加grep -v grep,结果脚本把自己给干掉了。
把进程命令行输出到/tmp/tmpfcf,再调用whilefun处理,这种嵌套调用方式很高级,但debug起来特别麻烦。
记得有次排查问题,发现是custcmd函数内部出了错,结果得反向追踪whilefun的调用链,那叫一个费劲。

不过话说回来,Shell函数最牛的地方就是能把复杂逻辑拆解成小块。
比如有个项目我写了个函数处理日志文件,每次只需要传文件名就能自动过滤、统计、生成报告,比直接写大段命令省心多了。
但缺点是,函数多了脚本会变得像迷宫,新人看都看不懂。

你提到的错误处理和边界情况确实重要。
我有个同事写脚本时总忽略空文件和权限问题,结果生产环境直接崩了。
现在我们团队有个规矩,每个函数开头都得加参数检查:if [ -z "$1 " ]; then echo "参数不能为空"; exit 1 ; fi。
虽然简单,但能省不少麻烦。

总的来说,Shell函数用好了是神器,但实现细节和调试技巧得慢慢练。
你这段代码虽然写得有点乱,但把函数式编程的思想用进去了,这本身就挺难得的。

通过8个案例掌握 Linux Head 命令

说白了,Linux的head命令其实很简单,就是用来读取文件的前N行并输出的。
这事复杂在它有很多实用的选项,用好了能大大提高工作效率。

先说最重要的,直接运行head并指定文件名,就能显示文件的前十行。
比如,$head asian_countries.txt,这就行了。
另外一点,如果你想在输出前添加文件名标记,可以用-v选项,比如$head -v asian_countries.txt。

还有个细节挺关键的,就是你可以同时指定多个文件名,head会依次显示每个文件的前1 0行,并且自动添加文件名分隔。
比如,$head asian_countries.txt europe_countries.txt。

我一开始以为head只能显示文件的前几行,后来发现不对,它还能通过-n选项指定显示的行数。
去年我们跑的那个项目,我们就是用这个功能来查看日志文件的前5 行,大概3 000量级的数据,这样能快速定位问题。

等等,还有个事,head命令不仅可以直接处理文件,还能配合管道使用。
比如,你可以用ls列出/etc目录前1 5 个条目,然后用head -n1 5 来过滤输出。
这个点很多人没注意,其实很实用。

还有,head命令还有查看版本和获取帮助的功能。
查看版本很简单,就是$head --version,而获取帮助则是$head --help。

这个点我觉得值得试试,尤其是在处理大量日志文件或者需要快速预览数据的时候。
说实话挺坑的,很多人不知道head命令有这么多的用法。
所以,下次遇到需要读取文件前几行的情况,不妨试试head命令,它可能会让你事半功倍。