Shell命令-文件及目录操作之file、md5sum

文件及目录操作 - file、md5sum

1. file:显示文件的类型

file命令的功能说明

用于辨识文件类型。通过 file 指令,我们得以辨识该文件的类型。

file命令的语法格式

file [-bchiklLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname]
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]

file命令的选项说明

file 参数很多,表1为 file 命令的参数及说明:

表1: file命令的参数及说明

参数选项 解释说明
-b  列出辨识结果时,不显示文件名称。
-c  详细显示指令执行过程,便于排错或分析程序执行的情形。
-f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-L  直接显示符号连接所指向的文件的类别。
-m<魔法数字文件>  指定魔法数字文件。
-v  显示版本信息。
-z  尝试去解读压缩文件的内容。
  • [文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。

file命令的实践操作

范例1: 显示文件类型:

[[email protected] /test]# file /test/
/test/: directory

--------------------------------------------------------------
==>不显示文件名称<==
--------------------------------------------------------------
[[email protected] /test]# file -b /test/
directory

--------------------------------------------------------------
==>显示MIME类别<==
--------------------------------------------------------------
[[email protected] /test]# file -i /test/
/test/: inode/directory; charset=binary

[[email protected] /test]# file -b -i /test/
inode/directory; charset=binary
[[email protected] /test]# 

范例2:显示符号链接的文件类型

--------------------------------------------------------------
==>创建一个软连接文件<==
--------------------------------------------------------------
[[email protected] /test]# touch oldboy.txt
[[email protected] /test]# ln -s oldboy.txt oldboy_soft_link

--------------------------------------------------------------
==>查看的结果<==
--------------------------------------------------------------
[[email protected] /test]# file oldboy_soft_link
oldboy_soft_link: symbolic link to `oldboy.txt‘
[[email protected] /test]# ll oldboy_soft_link
lrwxrwxrwx 1 root root 10 4月  13 10:57 oldboy_soft_link -> oldboy.txt
[[email protected] /test]# file -L oldboy_soft_link
oldboy_soft_link: empty

--------------------------------------------------------------
==>empty是空的意思,内面没有内容<==
--------------------------------------------------------------
[[email protected] /test]# file oldboy.txt
oldboy.txt: empty
[[email protected] /test]# file -L oldboy.txt
oldboy.txt: empty

--------------------------------------------------------------
==>添加内容,再次查看<==
--------------------------------------------------------------
[[email protected] /test]# echo "I love linux"  > oldboy.txt
[[email protected] /test]# cat oldboy.txt
I love linux
[[email protected] /test]# file oldboy.txt
oldboy.txt: ASCII text
[[email protected] /test]# file -L oldboy.txt
oldboy.txt: ASCII text

2. md5sum:md5校验

md5sum命令的功能说明

在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。

md5sum命令的语法格式

md5sum [OPTION]... [FILE]...
md5sum [参数] [文件]

md5sum命令的选项说明

md5sum 参数不常用,表1为 md5sum 命令的参数及说明:

表1: md5sum命令的参数及说明

参数选项 解释说明
-b 以二进制模式读入文件内容
-t 以文本模式读入文件内容
-c 根据已生成的md5值,对现存文件进行校验
--status 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断。

md5sum命令的实践操作

范例1: 不加参数,直接生成文件md5值(md5sum file

--------------------------------------------------------------
==>直接生成文件md5值<==
--------------------------------------------------------------
[[email protected] /test]# md5sum oldboy.txt
d41d8cd98f00b204e9800998ecf8427e  oldboy.txt

--------------------------------------------------------------
==>往文本里写内容<==
--------------------------------------------------------------
[[email protected] /test]# echo "I love linux"  > oldboy.txt

--------------------------------------------------------------
==>md5值发生了变化<==
--------------------------------------------------------------
[[email protected] /test]# md5sum oldboy.txt
553430bbfd91aca9db36ae6addccd06c  oldboy.txt

md5sum校验的是文件内容,与文件名无关

范例2: 以文本模式或二进制模式读入文件并对其进行校验

[[email protected] /test]# file oldboy.txt
oldboy.txt: ASCII text
[[email protected] /test]# md5sum oldboy.txt
553430bbfd91aca9db36ae6addccd06c  oldboy.txt
[[email protected] /test]# md5sum -b oldboy.txt
553430bbfd91aca9db36ae6addccd06c *oldboy.txt
[[email protected] /test]# md5sum -t oldboy.txt
553430bbfd91aca9db36ae6addccd06c  oldboy.txt

虽然是不同的读入模式,但是在进行求md5的时候,是一样的,因为是逐位校验的。

范例3: md5值重定向(可以留着做校验而用的)

 [[email protected] /test]# md5sum oldboy.txt > oldboy.md5
[[email protected] /test]# md5sum oldboy.txt
553430bbfd91aca9db36ae6addccd06c  oldboy.txt
[[email protected] /test]# cat oldboy.md5
553430bbfd91aca9db36ae6addccd06c  oldboy.txt

范例3: md5校验,(-c参数)如果一致,则返回OK,否则返回错误信息

--------------------------------------------------------------
==>-c参数校验<==
--------------------------------------------------------------
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 确定

--------------------------------------------------------------
==>往oldboy.txt里追加内容<==
--------------------------------------------------------------
[[email protected] /test]# echo "Me too" >> oldboy.txt
[[email protected] /test]# cat oldboy.txt
I love linux
Me too

--------------------------------------------------------------
==>失败<==
--------------------------------------------------------------
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 失败
md5sum: 警告:1 个校验和不匹配

范例4: 不显示校验信息,(--status参数)以命令返回值来判断,校验一致返回0,不一致返回1

--------------------------------------------------------------
==>不一致返回1<==
--------------------------------------------------------------
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 失败
md5sum: 警告:1 个校验和不匹配
[[email protected] /test]# md5sum -c --status  oldboy.md5
[[email protected] /test]# echo $?
1

--------------------------------------------------------------
==>校验一致返回1<==
--------------------------------------------------------------
[[email protected] /test]# md5sum oldboy.txt > oldboy.md5
[[email protected] /test]# md5sum -c oldboy.md5
oldboy.txt: 确定
[[email protected] /test]# md5sum -c --status  oldboy.md5
[[email protected] /test]# echo $?
0

特殊说明
1)md5sum 是校验文件内容,与文件名是否相同无关
2)md5sum值逐位校验,所以文件越大,校验时间越长。

总结
通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。

工作实践应用场景:
需要比较2个rc1.tar.gz 包和rc2.tar.gz两个包,变更是不是和开发说的一致

  1. 获取包,确保包正确无误
    获取包后,验证包的MD5值:md5sum rc*.tar.gz
  2. 解压缩到指定目录
    确保对应的目录存在
tar -zxvf  rc1.tar.gz -C ./test_rc1
tar -zxvf  rc2.tar.gz -C ./test_rc2
  1. 递归生成各文件的的MD5值
find ./test_rc1 -type f -print0| xargs -0 md5sum >> rc1_md5.txt
find ./test_rc2 -type f -print0| xargs -0 md5sum >> rc2_md5.txt
  1. 比较两文件的MD5值
diff -c rc1_md5.txt  rc2_md5.txt

或者用UltraCompare Professional比对结果

今天就写到这里,有什么疑问或出现什么错误,随时欢迎大神们发表评论指点迷津

原文地址:https://blog.51cto.com/14068656/2378590

时间: 2024-11-17 03:37:30

Shell命令-文件及目录操作之file、md5sum的相关文章

Shell命令-文件及目录操作之ls、cd

文件及目录操作 - ls.cd 1.ls:列出目录的内容及其内容属性信息 ls命令的功能说明 ls命令用于列出目录的内容及其内容属性信息. ls命令的语法格式 ls [OPTION]... [FILE]...ls [参数选项] [文件或目录] ls命令的选项说明 ls 选项很多,表1为ls命令的参数及说明: 表1:ls命令的参数及说明 参数选项 解释说明(带*的为重点) -l 长格式显示文件属性* -a 显示所有字目录和文件(包含隐藏文件)* -d 只显示目录* -i 显示Inode号 -h 人

Shell命令-文件及目录操作之pwd、rm

文件及目录操作 - pwd.rm 1.pwd:显示当前所在位置信息 pwd命令的功能说明 pwd命令用于显示当前工作目录的绝对路径,以便在各个目录间来回切换. pwd命令的语法格式 pwd [OPTION]... pwd [参数选项] pwd命令的选项说明 pwd 选项就两个,不常用,就不细说了: pwd命令的实践操作 范例1: 不使用任何参数执行 pwd命令 [[email protected] ~]# pwd /root <-->绝对路径 [[email protected] ~]# cd

Shell命令-文件及目录操作之touch、tree

文件及目录操作 - touch.tree 1.touch:创建文件或更改文件时间戳 touch命令的功能说明 touch命令用于创建新的空文件或改变已有文件的时间戳属性. touch命令的语法格式 touch [OPTION]... FILE...touch [参数选项] [文件] touch命令的选项说明 touch 选项不常用,就不细说了: touch命令的实践操作 范例1: 创建文件(文件事先不存在的情况) [[email protected] ~]# mkdir -p /test [[e

Shell命令-文件及目录操作之cp、find

文件及目录操作 - cp.find 1.cp:复制文件或目录 cp命令的功能说明 cp命令用于复制文件或目录. cp命令的语法格式 cp [OPTION]... SOURCE... DIRECTORYcp [参数选项] [源文件或源目录] [目标文件或目录] cp命令的选项说明 cp 选项就几个,表1为 cp命令的参数及说明: 表1: cp命令的参数及说明 参数选项 解释说明(带*的为重点) -r 复制目录 * -p 保持文件或目录属性 -a 相当于同时使用参数-d,-p,-r * -i 提示是

Shell命令-文件及目录操作之chattr、lsattr

文件及目录操作 - chattr.lsattr 1. chattr:改变文件属性 chattr命令的功能说明 chattr命令用于改变文件属性.这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式: a:让文件或目录仅供附加用途. b:不更新文件或目录的最后存取时间. c:将文件或目录压缩后存放. d:将文件或目录排除在倾倒操作之外. i:不得任意更动文件或目录. s:保密性删除文件或目录. S:即时更新文件或目录. u:预防意外删除. chattr命令的语法格式 c

计算机程序的思维逻辑 (59) - 文件和目录操作

前面两节我们介绍了如何通过流的方式读写文件内容,本节我们介绍文件元数据和目录的一些操作. 文件和目录操作最终是与操作系统和文件系统相关的,不同系统的实现是不一样的,但Java中的java.io.File类提供了统一的接口,底层它会通过本地方法调用操作系统和文件系统的具体实现,本节,我们就来介绍File类. File类中的操作大概可以分为三类: 文件元数据 文件操作 目录操作 在介绍这些操作之前,我们先来看下File的构造方法. 构造方法 File既可以表示文件,也可以表示目录,它的主要构造方法有

Java编程的逻辑 (59) - 文件和目录操作

前面两节我们介绍了如何通过流的方式读写文件内容,本节我们介绍文件元数据和目录的一些操作. 文件和目录操作最终是与操作系统和文件系统相关的,不同系统的实现是不一样的,但Java中的java.io.File类提供了统一的接口,底层它会通过本地方法调用操作系统和文件系统的具体实现,本节,我们就来介绍File类. File类中的操作大概可以分为三类: 文件元数据 文件操作 目录操作 在介绍这些操作之前,我们先来看下File的构造方法. 构造方法 File既可以表示文件,也可以表示目录,它的主要构造方法有

【Linux命令详解】2、文件和目录操作管理

2.文件和目录操作管理 本节主要学习在Linux下如何使用命令对文件和目录进行操作,这些命令pwd.cd.ls等. 2.1 pwd:显示工作目录路径 使用pwd命令可以显示当前用户所处的工作目录的绝对路径. 2.1.1命令语法: pwd[选项] 2.1.2参数选项: 选项 选项含义 -L 目录链接时,输出链接路径 -P 输出物理路径 2.1.3实例: 例1:显示用户当前工作目录路径. [[email protected] ~]# pwd /root //用户当前的工作路径是root 例2:显示用

python文件和目录操作函数小结

本文主要介绍python文件和目录操作函数小结,主要涉及到os模块和shutil模块的一些方法. python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()返回指定目录下的所有文件和目录名:os.listdir()函数用来删除一个文件:os.remove()删除多个目录:os.removedirs(r"c:\python")检验给出的路径是否是一个文件:os.path.isf