Hash all files linux

Hash all files linux

Команда hash является встроенной командой командной оболочки bash, предоставляющей пользователям доступ к кэшу путей к исполняемым файлам. Дело в том, что командная оболочка bash в процессе своей работы использует хэш-таблицу для кэширования путей к исполняемым файлам, причем эти пути определяются обычным образом с учетом значения переменной окружения PATH. Данный механизм предназначен для оптимизации производительности командной оболочки и может вообще не использоваться пользователями. Содержимое хэш-таблицы хранится до перезапуска командной оболочки и не сохраняется в каких-либо файлах, кроме того, оно может редактироваться пользователями.

Базовый синтаксис команды выглядит следующим образом:

Команда поддерживает различные параметры, позволяющие модифицировать кэш путей к исполняемым файлам. В частности, параметр -r позволяет очистить кэш путей к исполняемым файлам команд, параметр -d позволяет удалить путь к исполняемому файлу команды с заданным именем из кэша, параметр -p позволяет добавить путь к исполняемому файлу команды с заданным именем в кэш и параметр -t позволяет вывести хранящиеся в кэше пути к исполняемым файлам каждой из заданных команд.

Примеры использования

Вывод списка кэшированных путей к исполняемым файлам команд

Для вывода списка кэшированных путей к исполняемым файлам команд, выполненных с помощью командной оболочки, следует использовать команду hash без каких-либо параметров:

$ hash
вызовы команда
1 /usr/bin/whoami
1 /usr/bin/id
1 /bin/ls

Команда выведет длинный список команд с количеством вызовов каждой из них.

Блокировка механизма кэширования путей к исполняемым файлам команд

Если вы не хотите, чтобы пути к исполняемым файлам команд кэшировались командной оболочкой, вы можете использовать встроенную команду set. По сути, вы можете использовать команду set +h для деактивации соответствующего механизма и set -h для его активации:

$ set +h
$ hash
bash: hash: хэширование отключено
$ set -h
$ hash
вызовы команда
1 /usr/bin/whoami
1 /usr/bin/id
1 /bin/ls

Очевидно, что при деактивации кэш путей к исполняемым файлам команд не очищается.

Удаление путей к исполняемым файлам отдельных команд

Для удаления пути к исполняемому файлу отдельной команды достаточно использовать параметр -d команды hash и задать имя этой команды:

$ hash
вызовы команда
1 /usr/bin/whoami
1 /usr/bin/id
1 /bin/ls

$ hash -d ls
$ hash
вызовы команда
1 /usr/bin/whoami
1 /usr/bin/id

Очевидно, что запись, соответствующая команде ls, пропала из листинга.

Добавление в кэш пути к исполняемому файлу команды

Для того, чтобы добавить в кэш путь к исполняемому файлу команды, следует использовать параметр -p команды hash вместе с путем к исполняемому файлу добавляемой команды и именем этой команды:

$ helloworld
helloworld: команда не найдена
$ hash -p /home/alex/helloworld helloworld
$ helloworld
Hello world!

В данном случае я добавил в кэш путь к исполняемому файлу с именем helloworld для команды helloworld. После этого команда стала работать так, как нужно. Этот метод запуска бинарных файлов очень похож на метод с использованием псевдонимов командной оболочки. Вероятно, это единственный прием работы с командой hash, который может быть полезен для многих пользователей.

Получение путей к исполняемым файлам заданных команд

Для того, чтобы получить список путей к исполняемым файлам интересующих вас команд, достаточно использовать параметр -t команды hash и перечислить эти команды через пробел:

$ hash -t id helloworld
id /usr/bin/id
helloworld /home/alex/helloworld

Читайте также:  Можно с флешки поставить windows

Следует отметить, что в данном случае не выводятся значения количества вызовов каждой из команд.

Очистка кэша путей к исполняемым файлам команд

Для очистки списка кэшированных путей к исполняемым файлам команд, выполненных с помощью командной оболочки, следует использовать команду hash с параметром -r:

$ hash
вызовы команда
2 /home/alex/helloworld
1 /usr/bin/whoami
2 /usr/bin/id
$ hash -r
$ hash
hash: таблица хэшей пустая

После очистки кэша он будет заполняться по новой, если вы не отключите соответствующий механизм.

Источник

How to Verify Checksum on Linux [Beginner Guide]

Last updated April 10, 2020 By Munif Tanjim 35 Comments

Brief: This beginner’s guide tells you what a checksum checks, what MD5, SHA-256 and SHA-1 checksums are, why checksums are used and how to verify checksums on Linux.

You’ll learn the following in this tutorial:

What is a Checksum?

A checksum is like the digital fingerprint of a file. In technical terms,

A checksum is a small-sized datum from a block of digital data for the purpose of detecting errors which may have been introduced during its transmission or storage.

So a checksum is a long string of data containing various letters and numbers. You’ll generally find them when downloading files from the web, e.g. Linux distribution images, software packages, etc.

The most common use of checksums is for checking if a downloaded file is corrupted.

For instance, the Ubuntu MATE download page includes an SHA-256 checksum for every image it makes available. So after you’ve downloaded an image, you can generate an SHA-256 checksum for it and verify that the checksum value matches the one listed on the site.

If it doesn’t, that means your downloaded image’s integrity is compromised (maybe it was corrupted during the download process). We will use an Ubuntu MATE “ubuntu-mate-16.10-desktop-amd64.iso” image file for this guide.

How is a Checksum generated?

Each checksum is generated by a checksum algorithm. Without going into the technical details let’s just say it takes a file as input and outputs the checksum value of that file. There are various algorithms for generating checksums. The most popular checksum algorithms are:

  • Secure Hash Algorithms and variants (SHA-1, SHA-2 etc.)
  • MD5 algorithm

Let’s see how to verify a checksum on Linux.

How to use checksum to verify file integrity [GUI way]

If you’re looking for a graphical solution, you can use GtkHash.

GtkHash is a nifty tool for generating and verifying various checksums. It supports a wide range of checksum algorithms, including SHA, MD5 and others. Here’s a list of supported algorithms:

GtkHash supported Checksum Algorithms

Installing GtkHash on Ubuntu

To install GtkHash on your Ubuntu system, simply run the following command:

That’s it. Then select the checksum algorithms to use:

  • Go to Edit >Preferences in the menu.
  • Select the ones you’d like to use.
  • Hit the Close button.

By default, MD5, SHA-1 and SHA256 are selected.

Using GtkHash

Using it is quite straight-forward.

  • Select the file you want to check.
  • Get the Checksum value from the website and put it in the Check box.
  • Click the Hash button.
  • This will generate the checksum values with the algorithms you selected.
  • If any one of them matches with the Check box, it will show a small tick sign beside it.

Here’s an example showing GtkHash generating a checksum for the Ubuntu MATE iso image (ubuntu-mate-16.10-desktop-amd64.iso):

GtkHash with UbuntuMATE iso

Verify checksums via Linux command line

Every Linux distribution comes with tools for various checksum algorithms. You can generate and verify checksums with them. The command-line checksum tools are the following:

  • MD5 checksum tool is called md5sum
  • SHA-1 checksum tool is called sha1sum
  • SHA-256 checksum tool is called sha256sum

There are some more available, e.g. sha224sum, sha384sum, etc. All of them use similar command formats. Let’s see an example using sha256sum. We’ll use the same “ubuntu-mate-16.10-desktop-amd64.iso” image file that we used before.

Читайте также:  Odis vag windows 10

Generating and Verifying SHA256 Checksum with sha256sum

First go to the directory where the .iso image is stored:

Now, to generate the SHA-256 checksum, enter the following command:

You’ll see the SHA-256 checksum in your terminal window! Easy, isn’t it?

Generating SHA256 Checksum for UbuntuMATE iso

If the generated checksum matches the one provided on the Ubuntu MATE download page, that will mean no data was changed while you downloaded the file – in other words, your downloaded file is not corrupted.

The other tools mentioned work similarly.

How accurately does this work?

If you’re wondering how accurately these checksums detect corrupted files – if you delete or change even one character from any one of the text files inside the iso image, the checksum algorithm will generate a totally different value for that changed image. And that will definitely not match the checksum provided on the download page.

Do you checksum?

One of the suggested steps while installing Linux is to verify the checksum of your Linux ISO. Do you always follow this step or do you do it only when something goes wrong with the installation?

Was this guide helpful? If you have any questions, let us know! And if you need a similar guide for something else, reach out to us, we’re here to help.

Like what you read? Please share it with others.

Источник

Linux: вычислить один хэш для данной папки и содержимого?

конечно, должен быть способ сделать это легко!

Я пробовал приложения командной строки linux sha1sum & md5sum, но они, похоже, только могут вычислять хэши отдельных файлов и выводить список хэш-значений, по одному для каждого файла.

Мне нужно создать хэш для всего содержимого папки (не только имена).

Я хотел бы сделать что-то вроде

Edit: чтобы уточнить, мои файлы находятся на несколько уровней в дереве каталогов, они не все находятся в одной корневой папке.

14 ответов

один из возможных способов такой:

если есть целое дерево каталогов, вам, вероятно, лучше использовать find и xargs. Одна из возможных команд будет

редактировать: хорошо, это, вероятно, хорошая вещь, чтобы отсортировать список файлов, так:

и, наконец, если вам также нужно учитывать разрешения и пустые каталоги:

аргументы stat заставит его напечатать имя файл, а затем его восьмеричные разрешения. Эти две находки будут выполняться одна за другой, вызывая удвоение объема ввода-вывода диска, первый находит все имена файлов и контрольную сумму содержимого, второй находит все имена файлов и каталогов, имя печати и режим. Список «имена файлов и контрольные суммы», за которым следует «имена и каталоги с разрешениями», будет затем контрольной суммой для меньшей контрольной суммы.

зафиксируйте каталог в git, используйте хэш фиксации. См.метахранилища для способа также контролировать разрешения.

используйте инструмент обнаружения вторжений файловой системы, например помощник.

хэш смоляной шар каталога:

tar cvf — /path/to/folder | sha1sum

код что-то самому, как ватин oneliner:

find /path/to/folder -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum

можно сделать tar -c /path/to/folder | sha1sum

Если вы просто хотите проверить, изменилось ли что-то в папке, я бы рекомендовал это:

Он просто даст вам хэш вывода ls, который содержит папки, подпапки, их файлы, их временную метку, размер и разрешения. Почти все, что вам нужно, чтобы определить, изменилось ли что-то.

обратите внимание, что эта команда не будет генерировать хэш для каждого файла, но именно поэтому она должна быть быстрее, чем найти.

Если вы просто хотите хэшировать содержимое файлов, игнорируя имена файлов, вы можете использовать

убедитесь, что у вас есть файлы в том же порядке, при вычислении хэш:

но у вас не может быть каталогов в вашем списке файлов.

Читайте также:  Windows 10 для смартфонов nokia lumia

для этого есть скрипт python:

Если вы измените имена файлов без изменения их алфавитного порядка, хэш-скрипт не обнаружит его. Но, если вы измените порядок файлов или содержимое любого файла, запуск скрипта даст вам другой хэш, чем раньше.

Я бы передал результаты для отдельных файлов через sort (чтобы предотвратить простое переупорядочение файлов для изменения хэша) в md5sum или sha1sum , какой бы вы ни выбрали.

еще один инструмент для достижения этого:

Как звучит: как md5sum, но также рекурсивный, плюс другие функции.

Я написал отличный скрипт для этого:

Вы можете настроить использование, чтобы избежать печати каждого файла, изменить хэш, вынуть хеширования каталогов и т. д. Я протестировал его против тестовых данных NIST, и он работает так, как ожидалось. http://www.nsrl.nist.gov/testdata/

попробуйте сделать это в два шага:

  1. создайте файл с хэшами для всех файлов в папке
  2. хэш этого файла

или сделать все это сразу:

Вы можете sha1sum для создания списка хэш-значений, а затем sha1sum снова списке, это зависит от того, что именно вы хотите достичь.

надежный и чистый подход

  • перво-наперво, не Хог доступной памяти! Хэш файла в кусках, а не кормить весь файл.
  • различные подходы для различных потребностей / целей (все ниже или выбрать то, что когда-либо применяется):
    • хэш только имя записи всех записей в дереве каталогов
    • хэш содержимое файла всех записей (оставляя мета, как, номер индекса, ctime, atime, mtime, размер, etc., вы получаете идею)
    • для символической ссылки ее содержимое является именем референта. Хэш его или выберите пропустить
    • следовать или не следовать(разрешенное имя) символической ссылке при хэшировании содержимого записи
    • если это каталог, его содержимое — это просто записи каталога. Во время рекурсивного обхода они будут хэшироваться в конечном итоге, но должны ли имена записей каталога этого уровня быть хэшированы, чтобы пометить этот каталог? Полезно в случаях использования, когда хэш требуется быстро идентифицировать изменение без необходимости глубокого хеширования содержимого. Примером может быть изменение имени файла, но остальная часть содержимого остается прежней, и все они являются довольно большими файлами
    • обрабатывать большие файлы хорошо (опять же, обратите внимание на ОЗУ)
    • обрабатывать очень глубокие деревья каталогов (обратите внимание на открытые дескрипторы файлов)
    • обрабатывать нестандартные имена файлов
    • как поступить с файлами, розетки, трубы/порта, блок устройств, устройства char? Хэшировать их?
    • не обновляйте время доступа к любой записи во время прохождения, потому что это будет побочным эффектом и контрпродуктивным(интуитивным?) в некоторых случаях.

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

пример использования и вывода dtreetrawl .

фрагмент человеческого дружественного вывода:

мне пришлось проверить весь каталог для изменения файлов.

но с исключением, метками времени, владельцами каталогов.

цель состоит в том, чтобы получить одинаковую сумму в любом месте, если файлы идентичны.

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

Он генерирует список хэшей по файлам, а затем объединяет эти хэши в один.

это путь более быстро чем Смолка метод.

на более сильная конфиденциальность в наших хэшах мы можем использовать sha512sum по тому же рецепту.

хэши также идентичны в любом месте с помощью sha512sum но нет известного способа обратить его вспять.

вот простой, короткий вариант в Python 3, который отлично работает для небольших файлов (например, исходное дерево или что-то еще, где каждый файл по отдельности может легко поместиться в ОЗУ), игнорируя пустые каталоги, основанные на идеях из других решений:

он работает следующим образом:

  1. найти все файлы в каталоге рекурсивно и отсортировать их по имени
  2. вычислить хэш (по умолчанию: SHA-1) каждого файла (считывает весь файл в память)
  3. сделайте текстовый индекс со строками «filename=hash»
  4. Закодируйте этот индекс обратно в строку байта UTF-8 и хэш, который

вы можете пройти в разные хэш-функции как второй параметр если ша-1 нет вашей чашки чая.

Источник

Оцените статью