Различные MD5Sum для одного и того же файла в том же каталоге

Мне кажется странным, поскольку мне удалось получить другой md5sum, используя тот же самый файл из того же каталога. Выход:

[root@testlabs Config]# ls Backup_Files hostname1-config.uac hostname2-config.uac hostname3-config.uac [root@testlabs Config]# ls hostname1-config.uac | md5sum 2a52f0eb11f6478a4f8aeee1c0ac90dd - [root@testlabs Config]# md5sum hostname1-config.uac d41d8cd98f00b204e9800998ecf8427e hostname1-config.uac 

Могу ли я узнать, какой правильный способ получить правильный результат md5sum? Спасибо.

Я сделал это, чтобы сравнить MD5 двух файлов (исходный файл и файл резервной копии). Соглашение об именах исходного файла – hostname1-config.uac, а файл резервной копии – имя хоста1-201411071649.uac; но они всего лишь копии (cp -p).

Первый метод

(Не работает)

  #!/bin/bash # ... # ls hostname1-config.uac | md5sum hostname1-config.uac > /tmp/md5sum.tmp ARCHIVE_DIR="/tmp/Archive" FULL_HOSTNAME=`/bin/sort -d /tmp/full_hostname.tmp` TIMESTAMP=`/bin/date +%Y%m%d%H%M -r $FULL_HOSTNAME` for HOSTNAME in `/bin/sort -d /tmp/hostname.tmp` do ls $ARCHIVE_DIR | grep -i --text $HOSTNAME-$TIMESTAMP.uac | md5sum -c /tmp/md5sum.tmp >> /tmp/md5sum2.tmp done 

Второй метод

(Отлично работает в командной строке, но не в скрипте)

В командной строке

 [root@testlabs Config]# md5sum hostname1-config.uac ca3434263400ea2b4ffbc107ef729b8a hostname1-config.uac [root@testlabs Config]# md5sum hostname1-config.uac > md5.tmp [root@testlabs Config]# cd /tmp/Archive [root@testlabs Archive]# md5sum hostname1-config.uac ca3434263400ea2b4ffbc107ef729b8a hostname1-config.uac [root@testlabs Archive]# echo 'Tampered!' > hostname1-config.uac [root@testlabs Archive]# cat hostname1-config.uac | md5sum - c /Network_Backup/Config/md5.tmp hostname1-config.uac: FAILED md5sum: WARNING: 1 of 1 computed checksum did NOT match [root@testlabs Archive]# rm -f hostname1-config.uac [root@testlabs Archive]# cd /tmp/Config [root@testlabs Config]# cp -p hostname1-config.uac /tmp/Archive [root@testlabs Config]# cd /tmp/Archive [root@testlabs Archive]# cat hostname1-config.uac | md5sum -c /Network_Backup/Config/md5.tmp hostname1-config.uac: OK 

В скрипте

 #!/bin/bash # ... # CONFIG_DIR="/tmp/Config" ARCHIVE_DIR="/tmp/Archive" HOSTNAME=`/bin/sort -d /tmp/hostname.tmp` FULL_HOSTNAME=`/bin/sort -d /tmp/full_hostname.tmp` TIMESTAMP=`/bin/date +%Y%m%d%H%M -r $FULL_HOSTNAME` cd $CONFIG_DIR md5sum $FULL_HOSTNAME > /tmp/md5sum.tmp cd $ARCHIVE_DIR cat $HOSTNAME-$FILE_TIMESTAMP.uac | md5sum -c /tmp/md5sum.tmp >> /tmp/md5sum2.tmp 

Возвращенный результат в файле /tmp/md5sum2.tmp:
hostname1-config.uac: FAILED открыт или читается

  • Как передать хеш md5 в оболочку
  • Могу ли я восстановить файл gzip точно, учитывая исходный несжатый файл?
  • Измените только один бит в файле
  • Вычислить md5sum CD / DVD
  • md5 Строка и файл разные
  • Найти файл, когда вы знаете его контрольную сумму?
  • Самый быстрый метод хэширования в OpenWRT?
  • Преимущество использования нескольких контрольных сумм для группы в AIDE
  • 2 Solutions collect form web for “Различные MD5Sum для одного и того же файла в том же каталоге”

    Ответ FAILED открыт или читается, когда файл, указанный в файле контрольной суммы md5 (md5sum.tmp в вашем случае), не существует.

    Например.

     [user@localhost tmp]$ cd /tmp/testfolder [user@localhost testfolder]$ touch dog [user@localhost testfolder]$ md5sum dog > /tmp/md5sum.tmp [user@localhost testfolder]$ md5sum -c /tmp/md5sum.tmp dog: OK [user@localhost testfolder]$ cd .. [user@localhost tmp]$ md5sum -c /tmp/md5sum.tmp md5sum: dog: No such file or directory dog: FAILED open or read md5sum: WARNING: 1 listed file could not be read 

    Обратите внимание, что я считаю, что программа md5sum не смотрит на стандартный ввод при передаче опции -c. Он просто просматривает контрольные суммы в файле, указанном параметром -c. Если они существуют и имя файла совпадает, то оно сравнивается, и все довольны.

    Хотя, вероятно, лучший способ, сохранение результата двух отдельных md5sums в переменной, а затем сравнение их с оператором if, вероятно, является подходом, который я бы взял.

    Вот как.

     #!/bin/bash firstfile=`cat dog | md5sum ` # alternately could have used firstfile=$(md5sum < dog ) to ovoid UUOC secondfile=`cat mouse | md5sum ` if [ "$firstfile" == "$secondfile" ]; then echo "They Match!" else echo "They Don't Match!" fi 

    Последний. Когда вы запустите ls file | md5sum ls file | md5sum , вы получаете md5sum строкового file\n а не содержимое файла.

    Как правило, вы никогда не передаете файл с ls file | command ls file | command , почти нет случаев, когда это будет делать то, что вы хотите. Если вы хотите дать имя файла команде и ожидать, что она что-то сделает с этим файлом, вы дадите ее в качестве аргумента:

     command file 

    Итак, в случае md5sum вы должны запустить

     $ md5sum hostname1-config.uac 
    Interesting Posts

    Остановить zsh от завершения родительских каталогов

    Случайное удаление содержимого / etc / fstab в Centos 7.2

    Конфигурация Apache FreeBSD vs Debian

    Как отображать цифровые часы на мониторе поверх всего?

    Почему мой системный блок не запускается при перезагрузке сервера?

    Команда для запуска дочернего процесса «offline» (без внешней сети) в Linux

    Как полностью управлять пользователями и группами с помощью веб-графического интерфейса и создавать шаблоны для новых пользователей?

    Сжатие дерева каталогов в нескольких архивах tar в один xz

    Невозможно установить яркость экрана Acer Aspire S3

    Что делает `set $ variable`?

    Нажмите любую клавишу, чтобы остановить цикл

    Закрытие всех окон Nautilus с терминала

    mount не удалось обработать возможно поврежденный компакт-диск

    Arch Linux не подключается к Wi-Fi больше

    ssh возвращает сообщение «Ошибка пересылки X11 не удалось на канале 1»

    Linux и Unix - лучшая ОС в мире.