【Linux】文件内容查看命令——cat,tac,more,less,head,tail,od

news2024/9/21 20:34:30

        如果我们要查看一个文件的内容时,该如何是好?

这里有相当多有趣的命令可以来分享一下:最常使用的显示文件内容的命令可以说是cat与more及less了。

此外,如果我们要查看一个很大的文件(好几百MB时),但是我们只需要后面的几行字而已,那么该如何是好?

呵呵,用tail呀。此外,tac这个命令也可以达到这个目的。好了,说说各个命令的用途。

  1. cat :由第一行开始显示文件内容。
  2. tac:从最后一行开始显示,可以看出tac是cat的倒着写、
  3. nl:显示的时候,同时输出行号。
  4. more:一页一页地显示文件内容。
  5. less:与more类似,但是比more更好的是,它可以往前翻页。
  6. head:只看前面几行。
  7. tail :只看后面几行。
  8. od :以二进制的方式读取文件内容。

1.直接查看文件内容

直接查看一个文件的内容可以使用cat/tac/nl这几个命令。

1.1.cat ( concatenate)

选项与参数:

  • -A:相当于-vET的整合选项,可列出一些特殊字符而不是空白而已;
  • -b:列出行号,仅针对非空白行做行号显示,空白行不标行号;
  • -E:将结尾的换行符S显示出来;
  • -n:打印出行号,连同空白行也会有行号,与-b的选项不同;
  • -T:将[tab]按键以^I(大写的i)显示出来;
  • -v :列出一些看不出来的特殊字符;

范例一:查看/etc/issue 这个文件的内容

范例二:承上题,如果还要打印行号?

所以这个文件有三行,看到了吧!可以列出行号。这对于大文件要找某个特定的行时,有点用处.

#如果不想要显示空白行的行号,可以使用【cat -b /etc/issue 】,自己测试看看。


范例三:将/etc/man db.conf的内容完整的显示出来(包含特殊字符)。



……(下面省略)…….

上面的结果限于篇幅,我删除掉了很多数据。另外,输出的结果并不会有特殊字体,

上面的特殊字体是要让您发现差异点在哪里,

基本上,在一般的环境中,使用[tab]与空格键的效果差不多,都是一堆空白。我们无法知道两者的差别。 此时使用cat -A就能够发现那些空白的地方是啥鬼东西了。

[tab]会以^I表示,换行符则是以表示$表示

所以你可以发现每一行后面都是$,不过换行符在Windows/Linux则不太相同,Windows的换行符是^M$.

        嘿嘿,Linux里面有“猫”命令?不是的,cat是Concatenate(串联)的简写,主要的功能是将一个文件的内容连续打印在屏幕上面。例如上面的例子中,我们将/etc/issue打印出来,如果加上-n或-b的话,则每一行前面还会加上行号。

        个人比较少用cat。毕竟当你的文件内容的行数超过40行以上,根本来不及在屏幕上看到结果。所以,配合等一下要介绍的more或是 less来执行比较好。

        此外,如果是一般的DOS文件时,就需要特别留意一些奇怪的符号了,例如换行与[Tab]等要显示出来,就得加入-A之类的选项。

1.2.tac(反向列示)

与刚刚上面的范例一比较,是由最后一行先显示。

        tac 这个好玩了。怎么说?详细看一下,cat与tac,有没有发现?

对,tac 刚好是将cat反写动来,所以它的功能就跟cat相反,cat 是由第一行到最后一行连续显示在屏幕上,而tac则是由最尽一行到第一行反向在屏幕上显示出来,很好玩吧!

1.3.nl(添加行号打印)

选项与参数

-b:指定行号指定的方式,主要有两种

  • -b a:表示不论是否为空行,也同样列出行号(类似cat -n);
  • -b  t:如果有空行,空的那一行不要列出行号(默认值);

-n:列出行号表示的方法,主要有三种:

  • -n 1n:行号在屏幕的最左方显示;
  • -n rn:行号在自己栏位的最右方显示,且不加0;
  • -n rz:行号在自己栏位的最右方显示,且加0;行号栏位的占用的字符数。

-w:行号栏位占用的字符数

范例一:用nl列出/etc/issue的内容.

注意看,这个文件其实有三行,第三行为空白(没有任何字符),
因为它是空白行,所以nl不会加上行号,如果确定要加上行号,可以这样做。

#呵呵,行号加上来,那么如果要让行号前面自动补上0?可以这样。

嘿嘿,自动在自己栏位的地方补上0了,默认栏位是六位数,如果想要改成3位数?

nl 可以将输出的文件内容自动地加上行号,其默认的结果与cat-n有点不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动补齐0等的功能。

有的复杂啊!!!不过别担心,这个基本不用的

2.可翻页查看

nl与cat、tac等,都是一次性地将数据一口气显示到屏幕上面,那有没有可以进行一页一页翻动的命令?

让我们可以一页一页的观察,才不会前面的数据看不到。有,那就是more与less。

2.1.more(一页一页翻动)

这样子 文件里的内容就一页一页的展示给我们了

重点在最后一行,你的光标也会在这里等待你的命令

        仔细地给它看到上面的范例,如果more后面接的文件内容行数大于屏幕输出的行数时,就会出现类似上面的图例。重点在最后一行,最后一行会显示出目前显示的百分比,而且还可以在最后一行输入一些有用的命令。

在more 这个程序的运行过程中,你有几个按键可以使用:

  1. 空格键(space):代表向下翻一页;
  2. Enter:代表向下翻一行;
  3. /字符串:代表在这个显示的内容当中,向下查找字符串这个关键词;
  4. :f:立刻显示出文件名以及目前显示的行数;
  5. q:代表立刻离开more,不再显示该文件内容;
  6. b或[ctrl]-b:代表往回翻页,不过这操作只对文件有用,对管道无用。

要离开more 这个命令的显示工作,可以按下q就能够离开。而要向下翻页,使用空格键即可。

比较有用的是查找字符串的功能,

举例来说,我们使用more /etc/man_db.conf来观察该文件,若想要在该文件内查找MANPATH这个字符串时,可以在底行处输入/MANPATH

输入了/之后,光标就会自动跑到最下面一行等待输入

如同上面的说明,输入了/之后,光标就会跑到最下面一行,并且等待你的输入,你输入了字符串并按下[enter]之后,more就会开始向下查找该字符串,而重复查找同一个字符串,可以直接按下n即可。最后,不想要看了,就按下q即可离开more。

more的缺点就是只能往后翻!!!!!

2.2.less(一页一页翻动)

我们先看例子

和more好像差不多?

        less的用法比起more又更加有弹性,在more的时候,我们并没有办法向前面翻,只能往后面看,但若使用了less 时,就可以使用【pageup]、[pagedown]等按键的功能来往前往后翻看文件,你看是不是更容易观看一个文件的内容了。

除此之外,在less 里面可以拥有更多的查找功能。不止可以向下查找,也可以向上查找,实在是很不错,基本上,可以输入的命令有:

  1. 空格键:向下翻动一页;
  2. [pagedown]:向下翻动一页;
  3. [pageup]:向上翻动一页;
  4. /字符串:向下查找字符串的功能;
  5. ?字符串:向上查找字符串的功能;
  6. n:重复前一个查找(与/或?有关);
  7. N:反向的重复前一个查找(与/或?有关);
  8. g:前进到这个数据的第一行;
  9. G:前进到这个数据的最后一行去(注意大小写);
  10. q:离开less这个程序。

查看文件内容还可以进行查找的操作,看,less是否很不错?其实less还有很多的功能,详细的你是否会觉得 less 使用的画面与环境与man page非常类似?

        没错,因为man这个命令就是询用less来显示说明文件的内容,现在你是否觉得less很重要?
使用方式请使用man less查询一下。

3.数据截取

我们可以将输出的数据作一个最简单的截取,那就是取出文件前面几行(head)或取出后面几行(tail)文字的功能。

不过,要注意的是head与tail都是以“行”为单位来进行数据截取的。

3.1.head(取出前面几行)

  • head [-n number]文件

选项与参数:

  • -n:后面接数字,代表显示几行的意思。


 默认的情况中,显示前面十行,若要显示前 20行,就得要这样。

范例:如果后面 100行的数据都不打印,只打印/etc/man_db.conf的前面几行,该如何是好?

        head的英文意思就是“头”,那么这个东西的用法自然就是显示出一个文件的前几行,没错,就是这样。

若没有加上-n这个选项时,默认只显示十行,若只要一行?那就加入“head-n 1 filename”即可。

        另外那个-n选项后面的参数较有趣,如果接的是负数,例如上面范例的-n -100时,代表列出前面所有行数,但不包括后面 100行。举例来说CentOS 7.1的 /etc/man_db.conf 共有131行,则上述的命令“head-n-100 /etc/man_db.conf”就会列出前面31行,后面100行不会打印出来了。这样说,比较容易懂了吧?

3.1.tail(取出后面几行)

选项与参数:

  • -n:后面接数字,代表显示几行的意思。
  • -f:表示持续刷新显示后面所接文件中的内容,要等到按下[ctrl]-c才会结束

默认的情况中,显示最后的十行。若要显示最后的20行,就得要这样:

范例一:如果不知道/etc/man db,conf有几行,却只想列出100行以后的数据时?

范例二:持续检测/var/log/messages的内容

要等到输入[crtl]-c之后才会结束执行tail这个命令.

        有head自然就有tail(尾巴),没错,这个tail的用法跟head的用法类似,只是显示的是后面
几行。默认也是显示十行,若要显示非十行,就加-n number的选项即可。

        范例一的内容就有趣啦,其实与head-n-xx有异曲同工之妙。当执行 tail -n +100 /etc/man db.conf 代表该文件从100行以后都会被列出来,同样,在man_db.conf共有131行,因此第100-131行就会被列出来,前面的99行都不会被显示出来。

        至于范例二中,由于/var/log/messages随时会有数据写入,你想要让该文件有数据写入时就立刻显示到屏幕上,就利用-f这个选项,它可以一直刷新显示/var/log/messages这个文件,新加入的数据都会被显示到屏幕上,直到你按下[crtl]-c才会结束 tail 这个命令的执行,由于messages必须要 root权限才能看,所以该范例得要使用root来查询。

例题

假如我想要显示/etc/man_db.conf的第11到第20行?

        答:这个应该不算难,想一想,在第11到第20行,那么我取前20行,再取后十行,所以结果就是:【head -n 20 /etc/man_db.conf | tail -n 10】,这样就可以得到第11到第20行之间的内容了。

        这两个命令中间有个管道(|)的符号存在,这个管道的意思是:前面的命令所输出的信息,通过管道交由后续的命令继续使用。所以,head-n20/etc/man_db.conf会将文件内的20行取出来,但不输出到屏幕上,而是转交给后续的tai 命令继续处理。因此 tal不需要接文件名,因为tai 所需要的数据是来自于head处理后的结果

例题
        承上一题,那如果我想要列出正确的行号?就是屏幕上仅列出letc/man_db.conf的第11到第20行,且有行号存在?

        答:我们可以通过 cat-n来显示出行号,然后再通过head/tail 来截取数据即可,所以就变成了如下的模样:【cat -n /etc/man db.conf | head -n 20 | tail -n 10】

有没有头晕呢?

4.非纯文本文件:od

我们上面提到的都是在查看纯文本文件的内容。那么万一我们想要查看非文本文件呢??

举例来说,例如/usr/bin/passwd这个执行文件的内容时,又该如何去读出信息呢?

        事实上,由于执行文件通常是二进制文件(binary file),使用上面提到的命令来读取它的内容时,确实会产生类似乱码的数据。那怎么办?

没关系,我们可以利用od 这个命令来读取。

  • od[-t TYPE]文件

选项或参数:

-t:后面可以接各种【类型(TYPE)】的输出,例如:

  • a :利用默认的字符来输出;
  • c  :使用ASCII字符来输出;
  • d[size]:利用十进制(decimal)来输出数据,每个整数占用size Bytes;
  • f[sizel:利用浮点数值(floating)来输出数据,每个数占用size Bytes;
  • o[size]:利用八进制(octa1)来输出数据,每个整数占用 size Bytes;
  • x[size]:利用十六进制(hexadecimal)来输出数据,每个整数占用size Bytes;


范例一:请将/usr/bin/passwd的内容使用ASCII方式来显示。

 ……(后面省略)……

最左边第一列是以八进制来表示Bytes数.

以上面范例来说,第二栏0000020代表开头是第16个byte(2x8)的内容之意。

范例二:请将/etc/issue这个文件的内容以八进制列出存储值与ASCII的对照表。


如上所示,可以发现每个字符可以对应到的数值是什么。

要注意的是,该数值是八进制.例如S对应的记录数值为123,转成十进制:1x8^2+2x8+3=83.

        利用这个命令,可以将数据文件(data file)或是二进制文件(binary file)的内容数据读出来虽然读出来的数值默认是使用非文本文件,亦即是十六进制的数值来显示,不过,我们还是可以通过-t c的选项与参数来将数据内的字符以ASCII类型的字符来显示,虽然对于一般用户来说,这个命令的用处可能不大,但是对于工程师来说,这个命令可以将二进制文件(binary file)的内容作一个大致的输出,他们可以看得出其中的意义。
        如果对纯文本文件使用这个命令,你甚至可以发现ASCII与字符的对照表,非常有趣,例如上述的范例二,你可以发现到每个英文字S对照到的数字都是123,转成十进制你就能够发现那是83。

        如果你有任何程序语言的书,拿出来对照一下ASCII的对照表,就能够发现真是正确。

我不想查Google,想要立刻找到password 这几个字的ASCI对照,该如何通过od来判断?
        答:其实可以通过刚刚上一个小节谈到的管道命令来处理。如下所示:
【echo password | od -t oCc】
echo可以在屏幕上面显示任何信息,而这个信息不由屏幕输出,而是传给od去继续处理,就可以得到ASCIl code对照。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据合并 26-30题(30 天 Pandas 挑战)

数据合并 1. 知识点1.27 左连接1.28 数据填充与交叉连接1.29 获取列值列表 题目2.26 合作过至少三次的演员和导演2.27 使用唯一标识码替换员工ID2.28 学生们参加各科测试的次数2.29 至少有5名直接下属的经理2.30 销售员 1. 知识点 1.27 左连接 datapd.merge(employees,employ…

2024图纸加密软件TOP8排行丨企业保护数据安全最佳选择

图纸往往包含了设计人员的创意和智慧,是企业的重要资产。加密可以防止未经授权的复制、分发或使用,保护设计的原创性和独特性不被侵犯。 许多图纸可能含有公司的商业秘密,比如特定的技术参数、生产流程或是产品设计等。这些信息若泄露给竞争…

美国Facebook直播网络卡顿问题怎么解决?

美国Facebook直播为用户提供了与当地客户、粉丝实时互动的机会,然而,有时由于网络问题,直播可能会出现卡顿现象,影响用户体验。本文将介绍解决美国Facebook直播网络卡顿问题的一种可能解决方案——接入海外直播网络专线。 了解美国…

国内知名源码交易平台及其特点,建议收藏!

​在数字化时代,源码交易平台成为连接开发者与项目需求的重要桥梁。这些平台不仅提供了丰富的源码资源,还促进了技术交流与合作。本文小编将分享介绍几个国内知名的源码交易平台,包括帮企商城、春哥技术博客、86资源网、春哥技术源码论坛以及…

如何选择高性价比的土壤检测仪器?

在现代农业与环保领域,土壤检测仪器的选择显得尤为关键。它不仅关系到土壤养分管理、作物健康生长,还涉及到环境保护和可持续发展。那么,面对市场上琳琅满目的土壤检测仪器,我们该如何选择一款实用的设备呢? 首先&…

智慧安防/智慧工厂/视频分析EasyCVR视频监控汇聚平台如何关闭国标设备的自动检索功能?

安防监控视频融合汇聚平台EasyCVR兼容性强,可支持Windows系统、Linux系统以及国产化操作系统等,平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-…

用R在地图上绘制网络图的三种方法

地理网络图与传统的网络图不同,当引用地理位置进行节点网络可视化时,需要将这些节点放置在地图上,然后绘制他们之间的连结。Markus konrad的帖子(https://datascience.blog.wzb.eu/2018/05/31/three-ways-of-visualizing-a-graph-on-a-map/)&…

绝地求生PUBG兰博基尼怎么兑换 兰博基尼怎么获得

绝地求生采用虚幻4引擎制作,玩家们会在一个偏远的岛屿上出生,然后展开一场赢家通吃的生存竞赛,最后只会有1个人存活。当然,和其他生存游戏一样,玩家需要在广袤复杂的地图中收集武器、车辆、物资,而且也会有…

数字化设计与分析助力建造印度最大污水处理厂

利用 STAAD 开展结构分析和设计,为不稳定土体上的复杂水池系统开发稳定的基础 治理河流 新德里不仅是印度的首都,一个多世纪以来也一直是印度最重要的城市之一。这座城市于 1911 年作为新的政府所在地,历经 20 年时间建成了许多宏伟建筑&…

tomcat的优化和tomcat和nginx实现动静分离:

tomcat的优化 tomcat自身的优化 tomcat的并发处理能力不强。大项目不使用tomcat做为转发动态的中间件(k8s集群,python,rubby),小项目会使用(内部使用),动静分离。 优化tomcat的启动…

什么是离散化?

离散化 题目 你会这个题 吗? 题目 假定有一个无限长的数轴,数轴上每个坐标上的数都是 0 0 0。 现在,我们首先进行 n n n 次操作,每次操作将某一位置 x x x 上的数加 c c c。 接下来,进行 m m m 次询问&#x…

方圆资源网,方圆资源官网

在当今这个信息化高速发展的时代,方圆资源网络已成为推动社会进步、促进经济发展的重要力量。方圆资源网不仅汇聚了海量的信息资源,更为我们提供了一个高效、便捷的信息交流平台。本文旨在详细介绍资源网的概念、特点、功能以及其在现代社会中的重要意义…

基于Java的数码论坛系统设计与实现

你好,我是计算机领域的研究者。如果你对数码论坛系统开发感兴趣或有相关需求,欢迎联系我。 开发语言: Java 数据库: MySQL 技术: Java技术、MySQL数据库、B/S架构、SpringBoot框架 工具: Eclipse、MySQ…

Django文档简化版——Django快速入门——创建一个基本的投票应用程序

Django快速入门——创建一个基本的投票应用程序 准备工作1、创建虚拟环境2、安装django 1、请求和响应(1)创建项目(2)用于开发的简易服务器(3)创建投票应用(4)编写第一个视图1、编写…

数据库基础复习

数据库简介 关系型数据库:Mysql 、Oracle 、SqlServer.... DB2 达梦 非关系型数据库:Redis 、MongoDB... MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管…

【45 Pandas+Pyecharts | 去哪儿海南旅游攻略数据分析可视化】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 日期处理,提取年份、月份2.4 经费处理2.5 天数处理 🏳️‍🌈 3. Pyecharts数据可视化3.1 出发日期_…

mysql在linux系统下重置root密码

mysql在linux系统下重置root密码 登录服务器时候mysql密码忘记了,没办法只能重置,找了一圈,把行之有效的方法介绍在这里。 错误展示: 我还以为yes就可以了呢,这是不行的意思。 关掉mysql服务 sudo systemctl stop …

基于大数据的电商产品评论数据分析与可视化--Python

基于大数据的电商产品评论数据分析与可视化 1绪论 1.1研究背景与意义阐述 随着电子商务领域的迅猛扩张,电商平台累积了海量的用户评价信息。这些建议不只是包含了消费者对产品的评价和经验分享,更重要的是,它们包含了丰富且价值巨大的信息。深度分析在线用户反馈不仅揭示…

【java web 01】3小时快速学习前端知识(收藏备用)

3小时快速学习前端知识【全栈专用】 一、教程简介1.1 Java 开发为何学Web技术1.2 课程设计1.3 课前准备 二、HTML2.1 Html简介2.1.1 HTML、CSS、JS分别有什么作用2.1.2 什么是HTML2.1.3 什么是标记语言 2.2 Hello,Html2.2.1 HTML基础结构2.2.2 专业词汇2.2.3 语法细…

SpringBoot后端验证码-防止密码爆破功能

一、简介 为了防止网站的用户被通过密码典爆破。引入验证码的功能是十分有必要的。而前端的验证码又仅仅是只防君子不防小人。通过burpsuit等工具很容易就会被绕过。所以后端实现的验证码才是对用户信息安全的一大重要保障。 实现思路: 1.引入图形生成的依赖 2.生成…