Generate md5 checksum for all files in a directory
I would like to create a md5 checksum list for all files in a directory. I want to cat filename | md5sum > ouptput.txt . I want to do this in 1 step for all files in my directory. Any assistance would be great.
In case one wants to include subdirectories but do separate checksum files inside each subdir, this answer might be helpful: stackoverflow.com/a/71286224/111036
7 Answers 7
You can pass md5sum multiple filenames or bash expansions:
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches * $ md5sum -c checklist.chk # runs through the list to check them cron: OK database.sqlite3: OK fabfile.py: OK fabfile.pyc: OK manage.py: OK nginx.conf: OK uwsgi.ini: OK
If you want to get fancy you can use things like find to drill down and filter the files, as well as working recursively:
find -type f -exec md5sum "<>" + > checklist.chk
♦ how to use the above for getting md5sum of the files inside sub directories, the above md5sum * emitting going into subdirectory level by saying . is a directory
Sorry for asking by running find -type f -exec md5sum ‘<>‘ + and `find -type f -exec md5sum ‘<>‘ ` I was able to get it. Thanks 🙂
If you’re using a shell that’s happy to evaluate ** recursively (such as zsh), it’s even simpler: md5sum **/* 2>/dev/null
if the process will take a while, you can run it through pv to track progress. use it in line mode w/ pv -l : find . -type f -exec md5sum ‘<>‘ \; | pv -l -s $(find . -type f | wc -l) > ~/md5sum.txt . just make sure both of your find filters match: the main one and the one in the pv subshell
A great checksum creation/verification program is rhash .
- It can create SFV compatible files, and check them too.
- It supports md4, md5, sha1, sha512, crc32 and many many other.
- It can do recursive creation ( -r option) like md5deep or sha1deep .
- Last but not least, you can format the output of the checksum file. For example:
rhash --md5 -p '%h,%p\n' -r /home/ > checklist.csv
I also find the -e option to rename files by inserting crc32 sum into the name extremely useful.
Note that you can also change md5sum with rhash in the PhoenixNL72 examples.
I think it’s an error, it certainly errors for me. The -p is the format for the output. I’ll correct it.
Here are two more extensive examples:
- Create an md5 file in each directory which doesn’t already have one, with absolute paths:
find "$PWD" -type d | sort | while read dir; do [ ! -f "$"/@md5Sum.md5 ] && echo "Processing " "$" || echo "Skipped " "$" " @md5Sum.md5 already present" ; [ ! -f "$"/@md5Sum.md5 ] && md5sum "$"/* > "$"/@md5Sum.md5 ; chmod a=r "$"/@md5Sum.md5;done
find "$PWD" -type d | sort | while read dir; do cd "$"; [ ! -f @md5Sum.md5 ] && echo "Processing " "$" || echo "Skipped " "$" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "$"/@md5Sum.md5 ;done
What differs between 1 and 2 is the way the files are presented in the resulting md5 file.
The commands do the following:
- Build a list of directory names for the current folder. (Tree)
- Sort the folder list.
- Check in each directory if the file @md5sum.md5 exists. Output Skipped if it exists, output Processing if it doesn’t exist.
- If the @md5Sum.md5 file doesn’t exist, md5Sum will generate one with the checksums of all the files in the folder. 5) Set the generated @md5Sum.md5 file to read only.
The output of this entire script can be redirected to a file (. ;done > test.log) or piped to another program (like grep). The output will only tell you which directories where skipped and which have been processed.
After a successful run, you will end up with an @md5Sum.md5 file in each subdirectory of your current directory
I named the file @md5Sum.md5 so it’ll get listed at the top of the directory in a samba share.
Verifying all @md5Sum.md5 files can be done by the next commands:
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "$"; md5sum -c @md5Sum.md5; done > checklog.txt
Afterwards you can grep the checklog.txt using grep -v OK to get a list of all files that differ.
To regenerate an @md5Sum.md5 in a specific directory, when you changed or added files for instance, either delete the @md5Sum.md5 file or rename it and run the generate command again.
Как подсчитать контрольные суммы файлов в Linux
Контрольная сумма, это последовательность букв и цифр для проверки целостности файлов. При скачивании файлов, может возникнуть ошибка, по этому, важно проверять контрольную сумму что бы убедиться, что файл был скачан целиком, без ошибок. Для примера возьмем iso образ дистрибутива Linux. На нем и будем проводить подсчет контрольной суммы.
В случае iso образа, ошибка при скачивании может привести к неработоспособности дистрибутива. И лучше это выяснить перед установкой, чем во время нее. Для проверки контрольной суммы используются команды: cksum, md5sum, sha1sum, sha256sum, sha512sum.
Принцип проверки контрольной суммы довольно простой, указываете команду, к примеру sha512sum, а затем название файла.
Подсчет контрольной суммы файлов
Итак, для примера был взят образ дистрибутива Debian. На странице скачивания iso образа пользователю предлагается контрольная сумма:
Важно, что бы эти контрольные суммы совпадали. Для проверки контрольной суммы открываем терминал, вводим команду sha512sum и название файла, после чего высветится его контрольная сумма. Останется ее только сравнить, и в случае, если она совпадает, значит файл был скачан без ошибок:
Заключение
Как видите, подсчет контрольной суммы производится довольно легко. Сравнить последовательность цифр и букв контрольной суммы могут помочь онлайн-сервисы. Рекламировать какой-то конкретный не стану. Но, если не прибегать к онлайн-сервисам, достаточно сравнить начало и конец контрольной суммы, чаще всего этого бывает достаточно.
Также обратите внимания на то, что копировать команды с сайтов, а затем вставлять их в терминал, может быть весьма опасно, о чем вы можете прочесть перейдя по этой ссылке .
А на этом сегодня все, если статья оказалась вам полезна, подписывайтесь на рассылку журнала в pdf формате, а так же на социальные сети журнала Cyber-X:
По вопросам работы сайта, сотрудничества, а так же по иным возникшим вопросам пишите на E-Mail . Если вам нравится журнал и вы хотите отблагодарить за труды, вы можете перечислить донат на развитие проекта.
Проверка контрольной суммы Linux
Контрольная сумма — это цифра или строка, которая вычисляется путем суммирования всех цифр нужных данных. Ее можно использовать в дальнейшем для обнаружения ошибок в проверяемых данных при хранении или передаче. Тогда контрольная сумма пересчитывается еще раз и полученное значение сверяется с предыдущим.
В этой небольшой статье мы рассмотрим что такое контрольная сумма Linux, а также как выполнять проверку целостности файлов с помощью контрольных сумм md5.
Что такое MD5?
Контрольные суммы Linux с вычисляемые по алгоритму MD5 (Message Digest 5) могут быть использованы для проверки целостности строк или файлов. MD5 сумма — это 128 битная строка, которая состоит из букв и цифр. Суть алгоритма MD5 в том, что для конкретного файла или строки будет генерироваться 128 битный хэш, и он будет одинаковым на всех машинах, если файлы идентичны. Трудно найти два разных файла, которые бы выдали одинаковые хэши.
В Linux для подсчета контрольных сумм по алгоритму md5 используется утилита md5sum. Вы можете применять ее для проверки целостности загруженных из интернета iso образов или других файлов.
Эта утилита позволяет не только подсчитывать контрольные суммы linux, но и проверять соответствие. Она поставляется в качестве стандартной утилиты из набора GNU, поэтому вам не нужно ничего устанавливать.
Проверка контрольных сумм в Linux
Синтаксис команды md5sum очень прост:
$ md5sum опции файл
Опций всего несколько и, учитывая задачи утилиты, их вполне хватает:
- -c — выполнить проверку по файлу контрольных сумм;
- -b — работать в двоичном формате;
- -t — работать в текстовом формате;
- -w — выводить предупреждения о неверно отформатированном файле сумм;
- —quiet — не выводить сообщения об успешных проверках.
Сначала скопируйте файл /etc/group в домашнюю папку чтобы на нем немного поэкспериментировать:
Например, давайте подсчитаем контрольную сумму для файла /etc/group:
Или вы можете сохранить сразу эту сумму в файл для последующей проверки:
Затем каким-либо образом измените этот файл, например, удалите первую строчку и снова подсчитайте контрольные суммы:
Как видите, теперь значение отличается, а это значит, что содержимое файла тоже изменилось. Дальше верните обратно первую строчку root:x:0: и скопируйте этот файл в groups_list и
Затем опять должна быть выполнена проверка контрольной суммы linux:
Сумма соответствует первому варианту, даже несмотря на то, что файл был переименован. Обратите внимание, что md5sum работает только с содержимым файлов, ее не интересует ни его имя, ни его атрибуты. Вы можете убедиться, что оба файла имеют одинаковые суммы:
md5sum groups groups_list
Вы можете перенаправить вывод этой команды в файл, чтобы потом иметь возможность проверить контрольные суммы:
md5sum groups groups_list > groups.md5
Чтобы проверить, не были ли файлы изменены с момента создания контрольной суммы используйте опцию -c или —check. Если все хорошо, то около каждого имени файла появится слово OK или ЦЕЛ:
Но теперь вы не можете переименовывать файлы, потому что при проверке утилита будет пытаться открыть их по имени и, естественно, вы получите ошибку. Точно так же все работает для строк:
echo -n «Losst» | md5sum —
$ echo -n «Losst Q&A» | md5sum —
Выводы
Из этой статьи вы узнали как выполняется получение и проверка контрольной суммы linux для файлов и строк. Хотя в алгоритме MD5 были обнаружены уязвимости, он все еще остается полезным, особенно если вы доверяете инструменту, который будет создавать хэши.
Проверка целостности файлов Linux — это очень важный аспект использования системы. Контрольная сумма файла Linux используется не только вручную при проверке загруженных файлов, но и во множестве системных программ, например, в менеджере пакетов. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение небольшое видео по теме:
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.