Почему делает изменение .sh файла md5sum при копировании в другую папку?

Я загрузил sh файл с веб-страницы. Я хочу скопировать его в другую машину, таким образом, я могу установить его там. Другая машина является imx6 крошечным королем. Я попробовал к copy/move/scp к моей машине Ubuntu к другой, и это, кажется, хорошо, но как только я пытаюсь выполнить его, это делает md5 сравнение, говоря, что md5 изменился и остановка процесса.

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

Существует ли способ скопировать его (или перемещение, я не возражаю), хранение того же md5? Это была бы хорошая идея смолить его?

2
задан 16 October 2017 в 11:14

1 ответ

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

Этот ответ пробегается через различные частые причины и решения этого вида проблемы. Но если Вы хотите попробовать что-то сразу, затем да: Ваша идея заархивировать файл с tar может работать. (См. ниже для деталей.)

Проверьте, был ли файл загружен правильно во-первых.

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

Без определенной информации о том, как Вы загружаете файл, трудно знать наиболее вероятные причины повреждения. С установщиками, предоставленными, поскольку, сценарии оболочки, которые содержат двоичные данные, иногда веб-сервер, говорят Вашему браузеру неправильный тип MIME для файла. У меня была эта проблема самого, несколько раз, с .sh файлы я загрузил с веб-сайтов поставщиков программного обеспечения. Но у меня нет определенной причины думать, именно это происходит в Вашем случае.

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

Удостоверьтесь, что передали файл между своими машинами правильный путь.

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

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

  • Чтобы быть уверенными, Вы отправляете его как двоичный файл в ftp или подобная утилита, можно выйти binary команда (в ftp> запросите, после того как Вы соединены и готовы передать файл), Вам нужно сказать 200 Type set to I, и затем можно выйти put управляйте сразу позже для отправки файла.

Многие современные клиенты FTP автоматически выясняют, передать ли файл как текст или двоичные данные путем взгляда на то, как файл называют. Файлы с расширениями как .txt, например, может быть отправлен как текст. Если сценарий называют способом, чтобы указать, что это - сценарий - например, если это заканчивается .sh, когда Вы, казалось, указали, это делает - затем, такой клиент ftp может предположить, что это состоит только из текста, как большинство сценариев оболочки делает.

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

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

  • Скажите Вашей программе передавать файл как двоичный файл. Например, Вы могли временно заставить его передать все файлы как двоичный файл, или Вы могли отредактировать белый список расширений файла (.sh) или шарики (*.sh) удалить запись, которая заставляет это рассматривать этот конкретный файл как простой текст.

  • Заархивируйте или сожмите файл так, чтобы это были однозначно двоичные данные. Используя tar, поскольку Вы предложили, это один способ сделать это. Обратите внимание, что при использовании клиента FTP, где Вы вводите команды вручную, и это принимает значение по умолчанию к текстовому режиму (который является давним, традиционным поведением для интерактивных клиентов ftp командной строки), затем это, вероятно, не поможет. Но поскольку большинство клиентских людей ftp использует эти дни, это должно помочь.

  • Используйте другой протокол. А именно, используйте протокол, где файлы различных типов не рассматривают по-другому. Например, если можно передать файл с sftp или scp, это не подвергается этой проблеме - который всегда рассматривает файлы как двоичные данные, и она проверяет, чтобы удостовериться, что они отправляются правильно, также (хотя можно было все еще повредить файл в месте назначения из-за усечения).

    Многие графические клиенты FTP также поддерживают SFTP, хотя необходимо сказать им о желании этого которое часто достигается путем выбора SFTP в меню или добавления префикса целевого имени хоста с sftp://.

Сжатие или архивация файла для передачи

Как Вы предположили, можно использовать tar. Помещать script.sh в a tar архив:

tar cf script.sh.tar script.sh

Затем в месте назначения:

tar xf script.sh.tar

С другой стороны, можно сжать его с gzip:

gzip -k script.sh

Без -k, gzip замены script.sh со сжатым файлом script.sh.gz. Таким образом, если Вы хотите исходный файл, удаленный в источнике, затем можно просто опустить -k и выполненный gzip script.sh (или просто удалите файл впоследствии).

Затем в месте назначения:

gunzip script.sh.gz

Существуют другие методы сжатия, такой как bzip2 и xz, но так как не имеет значения, как хорошо (или даже если) файл сжат, можно придерживаться с gzip (или использовать tar, как выше).

Это могло бы даже работать, чтобы просто переименовать файл.

Конечно, если проблема состоит в том, что Ваш клиент FTP (или другая программа, используемая для передачи файла), неправильно выводит, что файл является простым текстом на основе его называемый с суффиксом как .sh, затем должно быть достаточно переименовать файл.

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

3
ответ дан 2 December 2019 в 02:48

Другие вопросы по тегам:

Похожие вопросы: