#linux #shell #amazon-s3 #wget
#linux #оболочка #amazon-s3 #wget
Вопрос:
Я пытаюсь загрузить файл с S3 от Amazon, используя сценарий оболочки и команду wget. Файл в cuestion имеет общедоступные разрешения, и я могу загрузить его с помощью стандартных браузеров. Пока это то, что у меня есть в скрипте:
wget --no-check-certificate -P /tmp/soDownloads https://s3-eu-west-1.amazonaws.com/myBucket/myFolder/myFile.so
cp /tmp/soDownloads/myFile.so /home/hadoop/lib/native
Проблема для меня немного странная. Хотя я могу загрузить файл непосредственно с терминала (просто введя команду wget), при попытке выполнить сценарий оболочки, содержащий ту же самую командную строку (сценарий выполняется с> sh myScript.sh ).
--2014-06-26 07:33:57-- https://s3-eu-west-1.amazonaws.com/myBucket/myFolder/myFile.so
Resolving s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)... XX.XXX.XX.XX
Connecting to s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)|XX.XXX.XX.XX|:443... connected.
WARNING: cannot verify s3-eu-west-1.amazonaws.com's certificate, issued by ‘/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3’:
Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 403 Forbidden
2014-06-26 07:33:57 ERROR 403: Forbidden.
Теперь я знаю, что это может быть просто начальной ошибкой с моей стороны, но я не могу обнаружить какие-либо ошибки или ошибки любого типа. Я был бы признателен за любую помощь, которую вы можете мне предоставить для решения этой проблемы.
В качестве примечания я хотел бы заметить, что я запускаю скрипт в экземпляре EC2, предоставленном платформой Amazon Elastic MapReduce, если это как-то связано с проблемой.
Ответ №1:
Я подозреваю, что редактор, который вы использовали для написания этого сценария, оставил вам небольшой «подарок».
Командная строка не та же самая. Посмотрите внимательно:
--2014-06-26 07:33:57-- ... myFolder/myFile.so
^^^ what's this about?
Это urlencoding для ASCII CR
, десятичный 13 шестнадцатеричный 0x0D
. У вас есть встроенный символ возврата каретки в скрипте, которого там не должно быть, и wget видит его как последний символ в URL-адресе и отправляет его на S3.
Используя less
утилиту для просмотра файла или подобный редактор vi
, этот случайный символ может отображаться как ^M
… или, если они находятся по всему файлу, когда вы открываете его с vi
помощью, вы должны увидеть это внизу экрана:
"foo" [dos] 1L, 5C
^^^^^
Если вы это видите, то внутри vi…
:set ff=unix[enter]
:x[enter]
… преобразует окончания строк и сохраняет файл в том, что должно быть удобным форматом, если это действительно проблема, с которой вы столкнулись.
Если вы редактируете файлы в Windows, вам нужно использовать редактор, который понимает, как сохранять файлы с новыми строками, а не с возвратом каретки.
Комментарии:
1. Действительно, этот возвращаемый символ был причиной проблемы. Я писал скрипт в Windows notepad . Я попытался записать файл с помощью nano (из linux), и проблема была успешно решена. Спасибо за ответ!