当前位置: 代码迷 >> 综合 >> cat、diff、vimdiff、grep、touch、lin、file、cp、find、rm
  详细解决方案

cat、diff、vimdiff、grep、touch、lin、file、cp、find、rm

热度:34   发布时间:2024-01-30 21:12:07.0

将文件的内容打印到标准输出的命令 cat
先建立一个测试文件,文件名为"daidai"在这里插入图片描述
测试文件内容如下:#cat daidai
在这里插入图片描述

-n 或 --number:由 1 开始对所有输出的行数编号在这里插入图片描述

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。在这里插入图片描述

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。在这里插入图片描述

-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。 在这里插入图片描述

-E 或 --show-ends : 在每行结束处显示 $。
在这里插入图片描述

-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
在这里插入图片描述

-A, --show-all:等价于 -vET。在这里插入图片描述
-e:等价于"-vE"选项;
在这里插入图片描述

-t:等价于"-vT"选项;在这里插入图片描述

比较文件的差异的命令 di?
di?命令在简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将 来自标准输入。di?命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将 会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作

命令语法
diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][–help][–left-column][–suppress-commonline][文件或目录1][文件或目录2]

命令选项

  • 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。

  • -a或–text diff预设只会逐行比较文本文件。

  • -b或–ignore-space-change 不检查空格字符的不同。

  • -B或–ignore-blank-lines 不检查空白行。

  • -c 显示全部内文,并标出不同之处。 -C或–context 与执行"-c-"指令相同。

  • -d或–minimal 使用不同的演算法,以较小的单位来做比较。

  • -D或ifdef 此参数的输出格式可用于前置处理器巨集。

  • -e或–ed 此参数的输出格式可用于ed的script文件

  • -f或-forward-ed 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。

  • -H或–speed-large-files 比较大文件时,可加快速度。

  • -l或–ignore-matching-lines 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或 字符串,则不显示这两个文件的差异。

  • -i或–ignore-case 不检查大小写的不同。

  • -l或–paginate 将结果交由pr程序来分页。

  • -n或–rcs 将比较结果以RCS的格式来显示。

  • -N或–new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N 参数,则diff会将文件A与一个空白的文件比较。

  • -p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称

  • -P或–unidirectional-new-file 与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时, 才会将这个文件与空白的文件做比较。

  • -q或–brief 仅显示有无差异,不显示详细的信息

  • 。 -r或–recursive 比较子目录中的文件。

  • -s或–report-identical-files 若没有发现任何差异,仍然显示信息。

  • -S或–starting-file 在比较目录时,从指定的文件开始比较。

  • -t或–expand-tabs 在输出时,将tab字符展开。

  • -T或–initial-tab 在每行前面加上tab字符以便对齐。

  • -u,-U或–unified= 以合并的方式来显示文件内容的不同。

  • -v或–version 显示版本信息。

  • -w或–ignore-all-space 忽略全部的空格字符。

  • -W或–width 在使用-y参数时,指定栏宽在这里插入图片描述

  • -x或–exclude 不比较选项中所指定的文件或目录。

  • -X或–exclude-from 您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件。

  • -y或–side-by-side 以并列的方式显示文件的异同之处。在这里插入图片描述

  • –help 显示帮助。

  • –left-column 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。

  • –suppress-common-lines 在使用-y参数时,仅显示不同之处
    先创立两个演示文件“仙女1”“仙女2”
    #vim 仙女1 在这里插入图片描述

#vim 仙女2在这里插入图片描述
#diff 仙女1 仙女2
在这里插入图片描述

vimdiff
相对于diff,vimdiff更加实用,用vimdiff打开对比文件可以更加直观的看不同之处,可以直接编辑,需要先下载一个vimdiff的软件包:#yum install vimdiff
运行vimdiff比较文件仙女1与仙女2的区别
#vimdiff 仙女1 仙女2

在这里插入图片描述
过滤文本的命令 grep
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出 来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。Linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

grep --help
匹配模式选择:
-E, --extended-regexp 扩展正则表达式egrep
-F, --fixed-strings 一个换行符分隔的字符串的集合fgrep
-G, --basic-regexp 基本正则
-P, --perl-regexp 调用的perl正则
-e, --regexp=PATTERN 后面根正则模式,默认无
-f, --file=FILE 从文件中获得匹配模式
-i, --ignore-case 不区分大小写
-w, --word-regexp 匹配整个单词
-x, --line-regexp 匹配整行
-z, --null-data 一个 0 字节的数据行,但不是空行

杂项:
-s, --no-messages 不显示错误信息
-v, --invert-match 显示不匹配的行
-V, --version 显示版本号
–help 显示帮助信息
–mmap use memory-mapped input if possible

输入控制:
-m, --max-count=NUM 匹配的最大数
-b, --byte-offset 打印匹配行前面打印该行所在的块号码。
-n, --line-number 显示的加上匹配所在的行号
–line-buffered 刷新输出每一行
-H, --with-filename 当搜索多个文件时,显示匹配文件名前缀
-h, --no-filename 当搜索多个文件时,不显示匹配文件名前缀
–label=LABEL print LABEL as filename for standard input
-o, --only-matching 只显示一行中匹配PATTERN 的部分
-q, --quiet, --silent 不显示任何东西
–binary-files=TYPE 假定二进制文件的TYPE 类型;
TYPE 可以是binary',text’, 或`without-match’
-a, --text 匹配二进制的东西
-I 不匹配二进制的东西
-d, --directories=ACTION 目录操作,读取,递归,跳过
-D, --devices=ACTION 设置对设备,FIFO,管道的操作,读取,跳过
-R, -r, --recursive 递归调用
–include=PATTERN 只查找匹配FILE_PATTERN 的文件
–exclude=PATTERN 跳过匹配FILE_PATTERN 的文件和目录
–exclude-from=FILE 跳过所有除FILE 以外的文件
-L, --files-without-match 匹配多个文件时,显示不匹配的文件名
-l, --files-with-matches 匹配多个文件时,显示匹配的文件名
-c, --count 显示匹配的行数
-Z, --null 在FILE 文件最后打印空字符

文件控制:
-B, --before-context=NUM 打印匹配本身以及前面的几个行由NUM控制
-A, --after-context=NUM 打印匹配本身以及随后的几个行由NUM控制
-C, --context=NUM 打印匹配本身以及随后,前面的几个行由NUM控制
-NUM 根-C的用法一样的
–color[=WHEN],
–colour[=WHEN] 使用标志高亮匹配字串;

-U, --binary 使用标志高亮匹配字串;
-u, --unix-byte-offsets 当CR 字符不存在,报告字节偏移(MSDOS 模式)
创建一个测试文件daidai,内容如下在这里插入图片描述
匹配含有root的行在这里插入图片描述

配以root开头或者以zhang开头的行,注意反斜杠在这里插入图片描述

匹配以root开头或者以zhang开头的行,注意反斜杠,根上面一个例子一样,-e默认是省去的在这里插入图片描述

匹配以bin开头的行,用的egrep,在这里可以换成-F,-G在这里插入图片描述

在匹配的行前面加上该行在文件中,或者输出中所在的行号在这里插入图片描述

不匹配以bin开头的行,并显示行号在这里插入图片描述

显示匹配的个数,不显示内容在这里插入图片描述

匹配system,没有加-i没有匹配到东西在这里插入图片描述

j,匹配zhan没有匹配到东西,匹配zhangy能匹配到,因为在test文件中,有zhangy这个单词在这里插入图片描述
匹配含有“82:82"的上两行和下两行在这里插入图片描述
改变指定文件的访问时间和修改时间的命令 touch

一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来; 二是用来创建新的空文件
stat+文件名 查看文件属性在这里插入图片描述

命令选项

-a 只修改文件的access(访问)时间. 在这里插入图片描述

-c 或–no-create 不创建不存在的文件 在这里插入图片描述

-d 使用指定的日期时间,而非现在的时间在这里插入图片描述

-m 指修改Modify(修改)时间,而不修改access(访问)时间在这里插入图片描述

-r file 使用指定file文件的时间戳(access,modify)更新文件的时间戳(access,modify) 注:access 表示后一次访问(仅仅是访问,没有改动)文件的时间 modify 表示后一次修改文件的时间 change 表示后一次对文件属性改变的时间,包括权限,大小,属性等等 在这里插入图片描述

-t 将时间修改为参数指定的日期,如:07081556代表7月8号15点56分 在这里插入图片描述

在文件或目录之间创建链接的命令 ln
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情 况下,ln 命令产生硬链接。

硬链接
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都 给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在 的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文
件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。 硬连接的作用是允许一个文件 拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因 为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有 当后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与 之相关的所有硬连接文件均被删除。
具体实例:
在opt目录下创建根下文件chenyi1的硬链接daidai
[root@chenyi /opt]#ln /chenyi1 daidai
在这里插入图片描述
注意:不能将硬链接指向目录,硬链接删掉源文件和链接文件互不影响

软链接

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方 式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的 位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中 的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据 块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除 了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

硬链接: 链接到源文件的inode上;
软连接: 创建了一个文件,拥有自己的inode,对用的block中存放云文件的路径

具体实例:在opt目录下创建根下文件chenyi1的硬链接daidai
[root@chenyi /opt]#ln -s /chenyi1 daidai
在这里插入图片描述

Linux文件系统之 inode,block,superblock

    文件存储在硬盘上,硬盘的小存储单位叫做扇区sector,每个扇区存储512个字节,操作系统在读取硬盘数据 时,并不是一个一个扇区去读取,而是按照多个扇区,也就是一次性读取一块数据,这种由扇区组成的块(block) 是文件存取小单位,常见的块大小为4KB,即8个连续的sector组成一个block。#du -h ”文件名“#du -h daidai

在这里插入图片描述
查看每个分区的大小 #df -h在这里插入图片描述

  文件的数据都存在块上,我们知道一个文件除了存储的数据以外还有一部分数据,我们称为元数据,如文件创建 日期,大小等等,这种存放元数据的区域我们称为inode。Linux文件系统可以简单分为 inode table和data area,inode table中存有inode,每个inode中记录了文件的元 数据,Linux文件系统的文件权限(rwx)、文件属性(拥有者、群组、时间参数    等)以及文件的内容。 文件系统通常会将这 两部份的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际内容则放置到data block区块中。另 外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量 superblock:记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及档案系统的格式与 相关信息等;  inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的资料所在的block 号码;   block:实际记录文件的内容,若文件太大时,会占用多个block inode中包含文件的元数据,可以通过stat命令查看文件的元数据

|74|[root@chenyi ~]#stat daida
文件:“daidai”
大小:623 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:201392993 硬链接:1
权限:(0644/-rw-r–r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2020-07-20 18:07:58.095952523 +0800
最近更改:2020-07-20 17:19:07.957547428 +0800
最近改动:2020-07-20 18:07:58.095952523 +0800
创建时间:-

文件名称:daidai
文件大小:623
占用的磁盘块数:8
IO块大小:4096
普通文件:这里是显示文件的类型,这是一个普通文件
设备:所在设备fd00h/64768d
Inode:Inode节点号201392993
Links:被链接的次数,硬链接
Access(第一个):访问权限;
Uid:uid号和属主;
Gid:gid号和属组;
Access(第二个)最近访问:文件近一次的访问时间;
Modify最近更改:文件的修改时间;
Chang最近改动:文件的改变时间

inode也会消耗磁盘空间,在磁盘格式化时,操作系统会自动将磁盘分为两个区域,一个数据区,一个inode 区,存放inode所包含的信息,整个磁盘的可以使用容量由inode和磁盘空间共同决定,当inode消耗完之后,磁盘空 间还有剩余也无法存储数据。

显示文件类型的命令 ?le

?le命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件 类型,而不是像Windows通过扩展名来确定文件类型的。

命令语法
file [ -bchikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file …
查看家目录下文件chen1和呆呆的文件类型:
[root@chenyi ~]#file chen1
在这里插入图片描述

[root@chenyi ~]#file 呆呆
在这里插入图片描述

识别cd命令的编码格式:
[root@chenyi ~]#file /usr/bin/cd
在这里插入图片描述

命令选项
-b 列出文件辨识结果时,不显示文件名称。在这里插入图片描述

-c 详细显示指令执行过程,便于排错或分析程序执行的情形在这里插入图片描述

-f 列出文件中文件名的文件类型 在这里插入图片描述

-F 使用指定分隔符号替换输出文件名后的默认的":"分隔符。在这里插入图片描述

-i 输出mime类型的字符串 在这里插入图片描述

-L 查看对应软链接对应文件的文件类型 在这里插入图片描述

-z 尝试去解读压缩文件的内容

[root@chenyi]#/home/tnak# file -z test.bz2
test.bz2: empty (bzip2 compressed data, block size = 900k)

拷贝文件或目录的命令 cp
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且后的目的地是一个已经存在的目 录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而后的目的地 并非一个已存在的目录,则会出现错误信息
命令语法
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
命令选项
在家目录先用cp命令使文件daidai覆盖文件daidai1
在这里插入图片描述

常用选项:
-i:交互式复制,即覆盖之前提醒用户确认;
在这里插入图片描述

-f:强制覆盖目标文件;在这里插入图片描述

-r, -R:递归复制目录;在这里插入图片描述

-d:复制符号链接文件本身,而非其指向的源文件;在这里插入图片描述

-a:-dR --preserve=all, archive,用于实现归档;在这里插入图片描述

-p 或 --preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间
–preserv= mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
复制前file2如下在这里插入图片描述
[root@chenyi ~]#cp -p file2 file3
在这里插入图片描述

-P 或 --parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在 在这里插入图片描述
在指定的路径下查找指定文件的命令 ?nd

命令语法
find [-path……] -options [-print -exec -ok]

命令说明及选项
path:要查找的目录路径。
~ 表示$HOME目录
. 表示当前目录
/ 表示根目录

print:表示将结果输出到标准输出。print0表示不换行在这里插入图片描述

exec:对匹配的文件执行该参数所给出的shell命令。形式为command {} ;,注意{}与;之间有空格 在这里插入图片描述
在这里插入图片描述

ok:与exec作用相同, 区别在于,在执行命令之前,都会给出提示,让用户确认是否执行
在这里插入图片描述

options常用的有下选项:
-name:按照名字查找 在这里插入图片描述

-perm:安装权限查找 在这里插入图片描述

-prune:不再当前指定的目录下查找
-user:文件属主来查找 在这里插入图片描述

-group:文件所属组来查找  

在这里插入图片描述

-nogroup:查找无有效所属组的文件       -nouser:查找无有效属主的文件        -type:按照文件类型查找

在这里插入图片描述
Linux文件删除原理
硬链接知识小结
1、具有相同Inode节点号的多个文件是互为硬链接文件。
2、删除硬链接文件或者删除源文件任意之一,文件实体并未被删除。 3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
4、当所有硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也 会被系统回收。 5、硬链接文件就是文件的另一个入口。
6、可以通过给文件设置硬链接文件,来防止重要文件被误删。
7、硬链接文件可以用rm命令删除。
8、对于静态文件(没有进程正在调用的文件)来说,当对应硬链接数位0(i_link),文件就被删除。i_link的查看方法(ls l结构的第三列就是)

软链接知识小结:
1、 软链接类似windows的快捷方式(可以通过readlink查看其指向)。 2、 软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
3、 删除源文件,软链接文件依然存放,但是无法访问指向的源文件路径内容了。
4、 失效的时候一般是红字白底闪烁提示。
5、 软链接和源文件是不同类型的文件,也是不同的文件。inode号也不相同。
6、 删除软链接文件可以用rm命令。

目录链接:
1、 对于目录,不可以创建硬链接,但可以创建软链接
2、 目录的硬链接不能跨越文件系统
3、 每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“…”。 4、 在父目录里面创建一个子目录,父目录的链接数增加1(子目录里都有…来指向父目录)。但是在父目录里创建文件,父目 录的链接数不会增加
Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般 来说,每个文件都有2个link计数器:i_count 和 i_nlink。 i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以 理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。
当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增
加。
对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。这里就会有一个问题,如果一个文件正在被某个进 程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或 者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件 中正确的读取及写入内容。这又是为什么呢?
这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引 用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有 i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行

rm删除文件或目录

在.bashrc下可定义别名

用法:rm [选项]… 文件…
删除 (unlink) 文件。

-f, --force 强制删除。忽略不存在的文件,不提示确认在这里插入图片描述

-i 在删除前需要确认在这里插入图片描述

-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提
示内容更少,但同样可以阻止大多数错误发生
–interactive[=WHEN] 根据指定的WHEN 进行确认提示:never,once (-I),
或者always (-i)。如果此参数不加WHEN 则总是提示
–one-file-system 递归删除一个层级时,跳过所有不符合命令行参
数的文件系统上的文件
–no-preserve-roo 不特殊对待"/"
–preserve-root 不允许删除"/"(默认)
-d, --dir 删除空目录在这里插入图片描述

-r, -R, --recursive 递归删除目录及其内容在这里插入图片描述

-v, --verbose 详细显示进行的步骤
–help 显示此帮助信息并退出
–version 显示版本信息并退出在这里插入图片描述

默认时,rm 不会删除目录。使用–recursive(-r 或-R)选项可删除每个给定的目录,以及其下所有的内容。

  相关解决方案