md5sum выводит только хеш в файл

привет, я хочу создать файл bash в linux, который проверяет хэш md5 файла по сравнению с резервным хэшем md5, поэтому я знаю, был ли изменен исходный файл. Сценарий должен вывести хэш md5 двух файлов, а затем сравнить два созданных хеш-файла:

md5sum file1 > file1.md5 | cut -c -32
if [ file1.md5 =! backup.md5 ] then;
   #send email

но это не работает, в файле .md5 все еще есть имя файла, есть у кого-нибудь идея, как получить только файлы в файле .md5?


person MadMax    schedule 28.04.2017    source источник


Ответы (4)


Есть несколько проблем с вашим сценарием.

Сначала вы применяете cut -c -32 после, вы уже перенаправили вывод md5sum в файл1.md5, поэтому он ничего не делает.

Вместо этого вы должны реструктурировать его следующим образом:

md5sum file1 | cut -c -32 > file1.md5

Далее, вы не можете напрямую сравнивать файлы с =!, вместо этого вам нужно читать и сравнивать их содержимое, например:

[ "$(cat file1.backup.md5)" != "$(cat file1.real.md5)" ]

Также обратите внимание, что md5sum уже имеет «режим проверки», поэтому вы можете просто сделать это:

#Save MD5 sum of your file to backup.md5, in md5sum native format
md5sum file1 > backup.md5

#Later on ...
if ! md5sum -c backup.md5; then
...
person zeppelin    schedule 28.04.2017
comment
спасибо, режим проверки не сработал, потому что я всегда копирую файл в другое место перед созданием хэша md5, поэтому я могу быть уверен, что он не зашифрован - person MadMax; 28.04.2017

У вас неправильный порядок команд. Написать

md5sum file1 | cut -c -32 > file1.md5
person TMS    schedule 28.04.2017

Труба находится в неправильном положении. Используйте следующим образом:

 md5sum file1| cut -c -32 > file1.md5

Или для полной реализации без сохранения сумм md5 в файлы:

ORG_SUM=`md5sum org_file | cut -c -32`
BCK_SUM=`md5sum bck_file | cut -c -32`
if [ "${ORG_SUM}" != "${BCK_SUM}" ]; then
   #send email
fi
person derkan    schedule 28.04.2017

Re: "в md5 [строка] все еще есть имя файла... как получить только хэш?"

Строка, которую возвращает md5sum, представляет собой (или, по крайней мере, имеет похожую структуру) запись с двумя полями или кортеж с двумя элементами. Например.,

$ md5sum filename.txt 8d7dd71ff51614e69339b03bd1cb86ac filename.txt

Чтобы получить только хэш (первое поле/элемент), попробуйте передать строку в awk следующим образом:

$ md5sum filename.txt | awk '{print $1}' 8d7dd71ff51614e69339b03bd1cb86ac

Я отправляю этот ответ на эту конкретную часть вопроса ОП, заданного более года назад, для других, которые работают над аналогичными проблемами и натыкаются на эту тему, как и я.

person Karl Baker    schedule 11.09.2018