md5sum выводит только хеш в файл
Привет, я хочу создать bash-файл на linux, который проверяет хэш md5 файла по резервному хешу md5, так что я знаю, был ли подделан исходный файл. Сценарий должен вывести хэш md5 из двух файлов, а затем сравнить два созданных хеш-файла:
md5sum file1 > file1.md5 | cut -c -32
if [ file1.md5 =! backup.md5 ] then;
#send email
но это не работает, в файле.md5 все еще есть имя файла, кто-то знает, как получить только файл.md5?
4 ответа
Есть несколько проблем с вашим скриптом.
Сначала вы подаете заявку cut -c -32
после того, как вы уже перенаправили вывод md5sum в file1.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
...
Re: "есть еще имя файла в md5
[строка], ... как получить только хеш?"
Строка, которая md5sum
return - это (или, по крайней мере, по структуре) запись с двумя полями или кортеж с двумя элементами. Например,
$ md5sum filename.txt
8d7dd71ff51614e69339b03bd1cb86ac filename.txt
Чтобы получить только хеш (первое поле / элемент), попробуйте передать строку в awk следующим образом:
$ md5sum filename.txt | awk '{print $1}'
8d7dd71ff51614e69339b03bd1cb86ac
Я отправляю этот ответ на эту конкретную часть вопроса ОП, заданного более года назад для тех, кто работает над аналогичными проблемами и наткнулся на эту тему, как и я.
У вас неправильный порядок команд. Написать
md5sum file1 | cut -c -32 > file1.md5
Труба находится в неправильном положении. Используйте так:
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