• L14.linux命令每日一练 -- 第二章 文件和目录操作命令 -- md5sum和chown命令


    2.21 md5sum:计算和校验文件的MD5值

    2.21.1 命令详解

    【命令星级】 ★★★★☆

    【功能说明】

    ​ md5sum命令用于计算和校验文件的MD5值。MD5的全名为Message-Digest Algorithm(信息-摘要算法)5,它是一种不可逆的加密算法。

    ​ 软件或文件一般都有自己固定的文件格式或信息,简单一点说就是“世界上没有完全相同的两片叶子”,那么对于某些网上公开下载的软件、视频、尤其是镜像文件,如果被修改了可能会导致用不了或者其他的问题。因此发布者首先要通过MD5算法得出一组数值,然后让下载的用户进行MD5的数值对比,即MD5校验。基于MD5加密不可逆算的特性,如果数值一样,那么久表示文件没有受到修改。反之,则表示修改了。

    【语法格式】

    md5sum [option] [file]
    md5sum [选项] [文件]
    
    • 1
    • 2

    ​ **说明:**md5sum命令以及后面的选项和文件,每个元素之间都至少要有一个空格。

    【选项说明】

    ​ 表2-22针对该命令的参数选项进行了说明。

    ​ 表2-22 md5sum命令的参数选项及说明
    在这里插入图片描述

    2.21.2 使用范例

    2.21.2.1 基础范例

    ​ **范例2-89:**生成一个文件的MD5值。

    [root@centos7 ~]# touch neteagle.txt
    [root@centos7 ~]# md5sum neteagle.txt 	#md5sum命令直接接文件久可用得出文件的MD5值。
    d41d8cd98f00b204e9800998ecf8427e  neteagle.txt	#结果又两部分,第一部分是MD5值,后面是文件名。
    
    • 1
    • 2
    • 3

    ​ **范例2-90:**检验文件是否发生改变。

    [root@centos7 ~]# md5sum neteagle.txt >md5.log	#先生成校验文件。
    [root@centos7 ~]# cat md5.log 
    d41d8cd98f00b204e9800998ecf8427e  neteagle.txt
    [root@centos7 ~]# md5sum -c md5.log 	#检查使用-c参数。
    neteagle.txt: OK	#结果ok表示文件没有变化。
    [root@centos7 ~]# echo "neteagle" >neteagle.txt 	#修改文件。
    [root@centos7 ~]# md5sum -c md5.log 
    neteagle.txt: FAILED	#文件被修改,md5值肯定发生了改变,验证失败。
    md5sum: WARNING: 1 computed checksum did NOT match
    [root@centos7 ~]# md5sum --status -c md5.log 	#不直接输出结果,改用返回值判断结果。
    [root@centos7 ~]# echo $?
    1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.21.2.2 生产案例

    ​ **范例2-91:**利用md5sum命令检验备份文件是否遭到损坏。

    ​ md5sum命令用于备份任务的指纹检查。每次在备份完成之后生成指纹文件,将备份和指纹文件发送到备份服务器上,在备份服务器上又会通过md5sum命令和校验文件检验备份是否正确。这样做的目的是为了在第一时间发现可能因为网络传输而造成的文件损坏。

    ​ 下面展示的服务器备份脚本要求读者具有一定的Shell脚本功底:

    #!/bin/bash
    # Source function library
    . /etc/init.d/functions
    
    # Defined variables
    IP=$(infconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}')
    Path="/data/backup/$IP"
    TIME='/bin/date +%F'
    BackupFile=/server/scripts/backuplist
    
    # Judged the existence of variables
    [ ! -d $Path ] && mkdir -p $Path
    [ ! -f $BackupFile ] && {
    	echo "Please give me $BackupFile"
    	exit 1
    }
    
    # Defined result function
    function Msg(){
    		if [ $? -eq 0 ];then
    			action "$*" /bin/true
    		else
            	action "$*" /bin/false
            fi	
    }
    
    # Backup config files
    tar zcfh $Path/conf_${TIME}.tar.gz `cat $BackupFile`
    &>/dev/null
    Msg 'Backup config files'
    
    #Make a flag for backup
    find $Path -type f -name "*${TIME}.tar.gz" |xargs md5sum
    >$Path/flag_$TIME 2>/dev/null
    #备份成功建立md5sum文件指纹库。
    Msg ‘Make a flag for backup’
    
    # Send backup to backup server
    rsync -az $Path rsync_backup@rsync.etiantian.org::backup
    --password-file/etc/rsync.password &>/dev/null
    Msg 'Send backup to backup server'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    ​ 现在检查服务器备份情况,并邮件通知管理员:

    [root@rsync scripts]# cat backup_check.sh
    #!/bin/bash
    DIR=/data/backup
    TIME='/bin/date +%F'
    log=/tmp/$TIME-check.log
    
    [ -d $DIR ] &&{
    		find $DIR -type f -name "flag_$TIME" |xargs md5sum -c >$log 2>/dev/null #查找指纹库列表,重新验证所有文件对应的指纹与刚打包后生成的指纹是否一致。
    		mail -s "$(date +%F_%T) backup check result" 12345678@qq.com <$log
    }
    
    #Delete backup a week ago
    find $Path -type f -name "*.tar.gz" -mtime +7 |xargs rm -f &>/dev/null
    Msg 'Delete backup a week age'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.22 chown:改变文件或目录的用户和用户组命令

    2.22.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

    ​ chown命令用于改变文件或目录的用户和用户组。

    【语法格式】

    chown [option] [OWNER][:GROUP] [file]
    chown [选项] [用户:用户组] [<文件或目录>]
    
    • 1
    • 2

    ​ 常用授权命令语法格式:

    chown 用户 文件或目录	#仅授权用户。
    chown :用户组 文件或目录	#仅授权用户组,等同于“chgrp 用户组 文件或目录”。
    chown 用户:用户组 文件或目录	#同时授权用户和用户组。
    
    • 1
    • 2
    • 3

    说明:

    ​ 1)其中的“:”可以用"."代替。

    ​ 2)要授权的用户和组名,必须是Linux系统中真实存在的。

    【选项说明】

    ​ 表2-23针对chown命令的参数选项进行了说明。

    ​ 表2-23 chown命令的参数选项及说明

    在这里插入图片描述

    2.22.2 使用范例

    ​ **范例2-92:**更改文件所属的用户属性。

    [root@centos7 ~]# touch file1.txt
    [root@centos7 ~]# ll file1.txt 
    -rw-r--r--. 1 root root 0 Oct 21 21:28 file1.txt	#当前用户是root。
    [root@centos7 ~]# chown xxx file.txt
    chown: invalid user: ‘xxx’		#被授权的用户需要存在,否则会出错。
    [root@centos7 ~]# chown neteagle file1.txt	#授权neteagle用户,neteagle用户要提前创建。
    [root@centos7 ~]# ll file1.txt 
    -rw-r--r--. 1 neteagle root 0 Oct 21 21:28 file1.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ​ **范例2-93:**更改文件所属的组(用户组)属性。

    [root@centos7 ~]# chown  .neteagle file1.txt	#授权neteagle用户组,注意不要少了点号,此处点号也可用用冒号来代替。
    [root@centos7 ~]# ll file1.txt
    -rw-r--r--. 1 neteagle neteagle 0 Oct 21 21:28 file1.txt
    
    • 1
    • 2
    • 3

    ​ **范例2-94:**同时更改文件所属的用户和组属性。

    [root@centos7 ~]# chown root.root file1.txt	#可以使用":"或"."。
    [root@centos7 ~]# ll file1.txt 
    -rw-r--r--. 1 root root 0 Oct 21 21:28 file1.txt
    
    • 1
    • 2
    • 3

    ​ **范例2-95:**递归更改目录及目录下的所有子目录及文件的用户和用户组的属性。

    [root@centos7 ~]# mkdir /data/dir2
    [root@centos7 ~]# cp neteagle.txt /data/dir2
    [root@centos7 ~]# ll -d /data/dir2
    drwxr-xr-x. 2 root root 26 Oct 21 19:15 /data/dir2
    [root@centos7 ~]# chown -R neteagle.neteagle /data/dir2
    chown: invalid user: ‘neteagle.neteagle’
    [root@centos7 ~]# useradd neteagle
    [root@centos7 ~]# chown -R neteagle.neteagle /data/dir2
    [root@centos7 ~]# ll -d /data/dir2
    drwxr-xr-x. 2 neteagle neteagle 26 Oct 21 19:15 /data/dir2
    [root@centos7 ~]# ll /data/dir2
    total 4
    -rw-r--r--. 1 neteagle neteagle 9 Oct 21 19:15 neteagle.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Jenkins 相关内容
    WCDMA 无线网络规划
    【附源码】计算机毕业设计JAVA智慧养老院管理系统
    [面试直通版]操作系统之锁、同步与通信(下)
    窗口函数笔记
    如何通过日志的方式理解Redis主从复制
    xshell的基本命令
    【C++】哈希相关问题
    Python编程 基础数据类型
    【通信原理】第三章 随机过程——例题
  • 原文地址:https://blog.csdn.net/qq_25599925/article/details/125351682