Различные 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 открыт или читается

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 
  • Как легко обновить список md5sums?
  • использование sed для замены шаблона с помощью хэш-значений
  • С чем я могу сделать SHA3SUM?
  • Как определить ошибку в определенном файле при проверке контрольной суммы (какой файл имеет проблему при проверке) в сценарии оболочки
  • Улучшить время выполнения для рекурсивной проверки md5sum?
  • Вычислить md5sum CD / DVD
  • Контрольная сумма ubuntu iso sha256
  • wpa_supplicant хранить пароль как хэш (WPA-EAP с фазой2 = "auth = PAP")
  • Могу ли я восстановить файл gzip точно, учитывая исходный несжатый файл?
  • md5 Строка и файл разные
  • Как создать список, сгенерированный md5deep в алфавитном порядке относительных путей?
  • Linux и Unix - лучшая ОС в мире.