LINUX查看文件内容命令cat vi/vim more tail head的区别

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-13 12:09:20

缘起

用过linux的同学应该都知道,在linux中查看文件内容有好几个命令都可以实现,包括但不限于以下这些

  1. cat
  2. vi
  3. more
  4. tail
  5. head

那么这些命令都有什么区别呢?又分别在什么时候用呢?下面一一道来。

这些命令的区别与联系

cat

Cat不单单是查看文件内容,还可以创建文件或者附加文件内容。
cat的语法结构

cat [参数] [文件]... 

参数

  1. -n 或 --number:由 1 开始对所有输出的行数编号。
  2. -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
  3. -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
  4. -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
  5. -E 或 --show-ends : 在每行结束处显示 $。
  6. -T 或 --show-tabs: 将 TAB 字符显示为 ^I。
  7. -A, --show-all:等价于 -vET。
  8. -e:等价于"-vE"选项;
  9. -t:等价于"-vT"选项;

实例
把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:

cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:

cat -b textfile1 textfile2 >> textfile3

清空 /etc/test.txt 文档内容:

cat /dev/null > /etc/test.txt

cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:

cat /dev/fd0 > OUTFILE

相反的,如果想把 image file 写到软盘,输入:

cat IMG_FILE > /dev/fd0

vi/vim

vi/vim可以查看文件的同时也可以对文件内容进行修改,且可以进行文件内容搜索。
vi的语法结构

vi 文件名

vi/vim 共分为三种模式,分别是命令模式输入模式底线命令模式。
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。输入以下命令可以执行命令

  1. i 切换到输入模式,以输入字符。
  2. x 删除当前光标所在处的字符。
  3. : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):

  1. q 退出程序
  2. w 保存文件

按ESC键可随时退出底线命令模式。

输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:

  1. 字符按键以及Shift组合,输入字符
  2. ENTER,回车键,换行
  3. BACK SPACE,退格键,删除光标前一个字符
  4. DEL,删除键,删除光标后一个字符
  5. 方向键,在文本中移动光标
  6. HOME/END,移动光标到行首/行尾
  7. Page Up/Page Down,上/下翻页
  8. Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  9. ESC,退出输入模式,切换到命令模式

vi/vim 按键说明
由于vi/vim的命令非常多,本处没法列举完全,可以参考这个链接

more

Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
more语法结构

more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]

参数

  1. -num 一次显示的行数
  2. -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
  3. -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
  4. -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
  5. -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
  6. -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
  7. -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  8. -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
  9. +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
  10. +num 从第 num 行开始显示
  11. fileNames 欲显示内容的文档,可为复数个数

实例
从第 20 行开始显示 testfile 之文档内容。

more +20 testfile

常用操作命令

  1. Enter 向下n行,需要定义。默认为1行
  2. Ctrl+F 向下滚动一屏
  3. 空格键 向下滚动一屏
  4. Ctrl+B 返回上一屏
  5. = 输出当前行的行号
  6. :f 输出文件名和当前行的行号
  7. V 调用vi编辑器
  8. !命令 调用Shell,并执行命令
  9. q 退出more

tail

tail 命令常用于查看文件的最后几行命令,并且不停的刷新,比较适合实时观察程序的日志情况。
tail语法结构

tail [参数] [文件]  

参数

  1. -f 循环读取
  2. -q 不显示处理信息
  3. -v 显示详细的处理信息
  4. -c<数目> 显示的字节数
  5. -n<行数> 显示文件的尾部 n 行内容
  6. –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
  7. -q, --quiet, --silent 从不输出给出文件名的首部
  8. -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

实例
要显示 notes.log 文件的最后 10 行,请输入以下命令:

tail notes.log

显示文件 notes.log 的内容,从第 20 行至文件末尾:

tail +20 notes.log

显示文件 notes.log 的最后 10 个字符:

tail -c 10 notes.log

显示a.log的最后200行并且不断刷新显示

tail -200f a.log

head

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
head语法结构

head [参数] [文件]

参数

  1. -q 隐藏文件名
  2. -v 显示文件名
  3. -c<字节> 显示字节数
  4. -n<行数> 显示的行数

实例
显示文件的前n行

head -n 5 log2014.log

显示文件前n个字节

head -c 20 log2014.log

输出文件的除了最后n个字节以外的内容

head -n -32 log2014.log

输出文件除了最后n行的全部内容

head -n -6 log2014.log
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!