Linux系统递归生成目录中文件的md5的方法

linux下使用md5sum递归生成整个目录的md5
今天要用md5sum操作目录,递归生成目录下所有文件的md5值,结果发现它不支持递归操作于是写了个php脚本处理下
代码:

  <?php  

  $path ='/data/www/bbs/source';
  $outfile = 'file.md5';
  get_file_md5($path, $outfile);  

  function get_file_md5($path, $outfile)
  {
    $path = rtrim($path, '/');
    if(function_exists('scandir'))
    {
      $files = scandir($path);
      foreach($files as $v)
      {
        if($v != '.' && $v != '..')
        {
          $file = $path.'/'.$v;
          if(is_dir($file))
          {
            get_file_md5($file, $outfile);
          }else
          {
            file_put_contents($outfile, md5_file($file)." ".$file."\n", FILE_APPEND);
          }
        }
      }
    }else
    {
      $files = opendir($path);
      while(($f = readdir($files)) !== false)
      {
        if($f == '.' || $f == '..')
          continue;
        $file = $path.'/'.$f;
        if(is_dir($file))
        {
          get_file_md5($file, $outfile);
        }else
        {
          file_put_contents($outfile, md5_file($file)." ".$file."\n", FILE_APPEND);
        }
      }
      closedir($files);
    }
  }

注意:生成的md5值和文件之间是两个空格,否则导致错误如下

代码如下:

md5sum: file1.md5: no properly formatted MD5 checksum lines found

在来个更简单的,使用linux的find命令一句搞定
代码:

  find /data/www/bbs/source -type f -print0 | xargs -0 md5sum > file2.md5

测试

  md5sum -c file1.md5
  md5sum -c file2.md5

如图所示

这样把所有检测结果输出到屏幕上来了,如果最后一条显示这样的信息 md5sum: WARNING: 2 of 1147 computed checksums did NOT match 则说明在总共1147条中有2条是不符合的
然后我们可以

  md5sum -c file1.md5 | grep FAILED

就很容易知道是哪些文件的篡改过

(0)

相关推荐

  • PHP中MD5函数使用实例代码

    一般来说,一个提供会员注册的网站必定需要采集用户的密码,如何保存用户密码就是个问题.我们当然不能将密码以明文的方式储存在数据库中,因为这样的话,一般的管理员就可以查看到用户密码,显然对用户来说是件相当危险的事情. 那如何解决这个问题呢,我们可以采取这样的策略. 首先介绍一下PHP中MD5函数的使用方法: 复制代码 代码如下: <?php  $pswd1=md5("cenusdesign");  echo $pswd1;     //运行结果为:fc60ec37d1c08d5b0f

  • php md5下16位和32位的实现代码

    复制代码 代码如下: <?php   echo substr(md5("admin"),8,16);  // 16位MD5加密   echo "<hr>";   echo md5("admin");    // 32位MD5加密   ?> 16位的MD5加密用substr函数截取了字符得到实现.... 不想深入研究了 :)  要把脑力放到其他关键的地方~~ 今天做了个php链接mssql数据库,数据库中的表中字段使用MD5

  • php 的加密函数 md5,crypt,base64_encode 等使用介绍

    不可逆的加密函数为:md5().crypt() md5() 用来计算 MD5 哈稀.语法为:string md5(string str); crypt() 将字符串用 UNIX 的标准加密 DES 模块加密.这是单向的加密函数,无法解密.欲比对字符串,将已加密的字符串的头二个字符放在 salt 的参数中,再比对加密后的字符串.语法为:string crypt(string str, string [salt]); 可逆转的加密为:base64_encode().urlencode() 相对应的解

  • Linux系统递归生成目录中文件的md5的方法

    linux下使用md5sum递归生成整个目录的md5 今天要用md5sum操作目录,递归生成目录下所有文件的md5值,结果发现它不支持递归操作于是写了个php脚本处理下 代码: <?php $path ='/data/www/bbs/source'; $outfile = 'file.md5'; get_file_md5($path, $outfile); function get_file_md5($path, $outfile) { $path = rtrim($path, '/'); if

  • 新装linux系统/etc/sysconfig目录下无iptables文件的解决方法

    今天新装了Linux,希望去做些防火墙的策略,使用service iptables status查看防火墙的状态时,无任何反应,且使用service iptables start也启动不聊.后来发现在/etc/sysconfig目录下没有iptables文件(防火墙的策略一般都写在此文件中). 原因:在新安装的Linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件. 解决方法: 在控制台使用iptables命令随便写

  • 虚拟机中使用linux系启用文件共享之后的文件存在的位置方法

    一.使用共享文件夹传输数据 在自己建立的win7系统中的共享文件夹中存放一些文件,然后在linux系统中访问,其中Linux中的访问路径为:/mnt/hgfs/自己建立的文件夹名称 比如我在win7上建立的共享文件夹名称为shareFolder,则我的操作如下: [root@master shareFolder]# cd /mnt/hgfs/shareFolder/ 在这个目录下就能看win7上的文件,也可以从linux中拷贝文件到这个目录,则在win7上也能看见./p> 以上这篇虚拟机中使用l

  • PHP统计目录中文件以及目录中目录大小的方法

    本文实例讲述了PHP统计目录中文件以及目录中目录大小的方法.分享给大家供大家参考,具体如下: <?php //循环遍历目录中所有的文件,并统计目录和文件的大小 $dirName="phpMyAdmin"; $dir=opendir($dirName); //返回一个资源类型 while($fileName=readdir($dir)){ $file=$dirName."/".$fileName; if($fileName!="." &

  • Linux系统下移植busybox中mkfs.vfat命令

    为了延长磁盘寿命来存储音视频文件,打发在格式化磁盘过程中将簇的大小设置大点.因为存储的音视频文件现对较大,那么将簇大小设置得尽可能大,这样可以增强磁盘读取数据的性能,同时也不会浪费太多空间. 但发现我们设备的mkfs.vfat不支持-s参数设置簇的大小. 于是打算重新移植mkfs.vfat. 思路1 重新移植busybox 1.官网上下载最新的busybox源码 2.修改Makefile ARCH =arm CROSS_COMPILE = /opt/hisi-linux-nptl/arm-his

  • Linux系统利用cp命令实现强制覆盖功能的方法

    前言 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误. 语法 cp(选项)(参数) 选项 -a:此参数的效果和同时指定"-dpR"参数相同: -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录: -f:强行复制文件或目录,不论目标文件或目录是

  • jmeter在linux系统下运行及本地内存调优的方法详解

    1.在linux系统下安装跨系统传输文件工具 root用户下 根目录输入 yum -y install lrzsz 2.把apache-jmeter-4.0zip包 用rz命令上传到linux系统的根目录下 解压 3.配置jmeter环境变量 vim /etc/profile 添加 export PATH=/apache-jmeter-4.0/bin/:$PATH 注意路径 4.使用 rz命令上传jdk1.8 linux 64位版本 解压到 usr/local 目录下 下载jdk安装包 下载地址

  • linux系统虚拟主机开启支持Swoole Loader扩展的方法

    特别说明:只是安装支持Swoole扩展,主机并没有安装服务端.目前支持版本php5.4-php7.2. 1.登陆主机控制面板,找到[远程文件下载]这个功能. 2.远程下载文件填写http://download.myhostadmin.net/vps/SwooleLoader_linux.zip 下载保存的路径填写/others/ 或者从我们下载 3.点击控制面板[php版本],选择php5.3或以上版本,示例选择的是php5.5版本(注意:php5.2版本不能编辑php.ini,所以要选择以上版

  • 解析PHP生成静态html文件的三种方法

    本文将介绍Php 生成静态html文件的三种方法 .1,下面使用模版的一个方法! 复制代码 代码如下: <?php $fp = fopen ("templets.html","a"); if ($fp){ $fup = fread ($fp,filesize("templets.html")); $fp2 = fopen ("html.shtml","w"); if ($fwrite ($fp2,$f

  • Node中文件断点续传原理和方法总结

    目录 原理介绍 普通上传 大文件上传 断点续传 方法总结 普通文件 前端部分 大文件 实战演练 普通文件 导语:之前做过一个小项目,其中用到了文件上传,在大文件上面使用了断点续传,降低了服务器方面的压力,现在就这个开发经验做一个细致的总结. 原理介绍 这里先介绍一下文件上传的原理,帮助理清这个头绪. 普通上传 一般网站上都是普通上传的比较多,大多数都是上传一些用户的头像,用户的动态评论附带图片什么的,所以先来说一下这个的原理. 用户选择文件后,js检测文件大小是否超出限制和格式是否正确: 检查后

随机推荐