Я загрузил sh файл с веб-страницы. Я хочу скопировать его в другую машину, таким образом, я могу установить его там. Другая машина является imx6 крошечным королем. Я попробовал к copy/move/scp к моей машине Ubuntu к другой, и это, кажется, хорошо, но как только я пытаюсь выполнить его, это делает md5 сравнение, говоря, что md5 изменился и остановка процесса.
Я пытался переместиться в другую папку в своей машине Ubuntu, и я получаю тот же результат.
Существует ли способ скопировать его (или перемещение, я не возражаю), хранение того же md5? Это была бы хорошая идея смолить его?
MD5 широко используется в качестве быстрого способа видеть, был ли файл неумышленно изменен. Те же данные всегда имеют тот же хеш MD5, поэтому если Вы передаете файл, и это имеет другой хеш MD5 в месте назначения, чем в источнике, затем файл был поврежден.
Этот ответ пробегается через различные частые причины и решения этого вида проблемы. Но если Вы хотите попробовать что-то сразу, затем да: Ваша идея заархивировать файл с tar
может работать. (См. ниже для деталей.)
Во-первых, лучше проверять, что файл был загружен правильно во-первых. Веб-сайт, где Вы загрузили его, может содержать инструкции для того, как сделать это. Если это - сценарий, который звонит md5sum
, или некоторая такая утилита, для вычислений ее собственного хеша MD5, и Вы можете запустить скрипт на машине, где Вы загружаете его, который является одним способом протестировать его.
Без определенной информации о том, как Вы загружаете файл, трудно знать наиболее вероятные причины повреждения. С установщиками, предоставленными, поскольку, сценарии оболочки, которые содержат двоичные данные, иногда веб-сервер, говорят Вашему браузеру неправильный тип MIME для файла. У меня была эта проблема самого, несколько раз, с .sh
файлы я загрузил с веб-сайтов поставщиков программного обеспечения. Но у меня нет определенной причины думать, именно это происходит в Вашем случае.
Подобная проблема могла происходить при передаче файла между двумя машинами. Если так, той проблемой является та, которую можно решить легко.
Во-вторых, необходимо исследовать, как Вы передаете файл от одной машины до другого. Некоторые установщики, предоставленные как сценарии оболочки, содержат двоичные данные в здесь документ, и некоторые протоколы раньше передавали файлы - такие как FTP - имеют отдельные режимы для текстовых файлов и двоичных файлов. Если файл содержит двоичные данные, который неправильно интерпретируется как текст, в то время как он передается, целевой файл может быть поврежден.
При использовании клиента FTP старого стиля, где необходимо вручную установить, передать ли файл как текст или двоичный файл, используйте режим двоичного счета каждый раз, когда файл мог бы содержать двоичные данные, включая в этой ситуации.
ftp
или подобная утилита, можно выйти binary
команда (в ftp>
запросите, после того как Вы соединены и готовы передать файл), Вам нужно сказать 200 Type set to I
, и затем можно выйти put
управляйте сразу позже для отправки файла.Многие современные клиенты FTP автоматически выясняют, передать ли файл как текст или двоичные данные путем взгляда на то, как файл называют. Файлы с расширениями как .txt
, например, может быть отправлен как текст. Если сценарий называют способом, чтобы указать, что это - сценарий - например, если это заканчивается .sh
, когда Вы, казалось, указали, это делает - затем, такой клиент 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
, затем должно быть достаточно переименовать файл.
Однако, если бы какой-либо другой механизм используется для обнаружения типа файла, то это повредилось бы - кроме того, это могло сбивать с толку, чтобы иметь файлы, лежащие, вокруг которого названы способом, который мог ввести в заблуждение Вас. Я поэтому полагаю, что метод просто переименования файла является хрупким, и я предлагаю, чтобы Вы использовали один из методов выше вместо этого. (Они не немного тяжелее, чем переименование - каждый метод принимает просто единственное управление в источнике и другую единственную команду для отмены его в месте назначения.)