У меня была такая же проблема. [ftp://192.168.122.1/repodata/repomd.xml:[Errno 14] Ошибка FTP 550 -Сервер отказал вам в переходе в указанный каталог]
Первоначально думал, что это связано с разрешением или какой-то проблемой безопасности, но это не так.
Когда я попытался загрузить файл repomd.xml с клиентского компьютера с помощью wget [wgetftp://192.168.122.1/repodata/repomd.xml] , он сказал, что файл не найден.
В моем случае проблема заключалась в том, что в файле конфигурации /etc/vsftp.conf мой каталог реподанных должен был быть /var/ftp(anon _root=/var/ftp/pub ), но я хранил под /var/ftp/. Ожидается, что «repodata/repomd.xml» будет помещен в «/var/ftp» в соответствии с настройками в vsftp.conf
.
Затем я просто переместил свои подкаталоги внутрь /var/ftp::
root@uday-linux:/var/ftp# pwd
/var/ftp
root@uday-linux:/var/ftp# ls
openstack-queens-rdo-repo
root@uday-linux:/var/ftp# ls openstack-queens-rdo-repo/
openstack-queens rdo-qemu-ev repodata rhel-7-server-extras-rpms rhel-7-server-optional-rpms rhel-7-server-rh-common-rpms rhel-7-server-rpms
root@uday-linux:/var/ftp# ls
openstack-queens-rdo-repo
root@uday-linux:/var/ftp# mv openstack-queens-rdo-repo/*.
root@uday-linux:/var/ftp# rmdir openstack-queens-rdo-repo
root@uday-linux:/var/ftp# ls
openstack-queens rdo-qemu-ev repodata rhel-7-server-extras-rpms rhel-7-server-optional-rpms rhel-7-server-rh-common-rpms rhel-7-server-rpms
root@uday-linux:/var/ftp#
root@uday-linux:/var/ftp#
О, конечно, просто это нужно сделать в два этапа. Как двухшаговое танго:
$ printf "$(printf '\\x%s' 48 65 6c 6c 6f)"; echo
Hello
Или, альтернативно:
$ test () { printf "$(printf '\\x%s' "$@")"; echo; }
$ test 48 65 6c 6c 6f
Hello
Или, чтобы не печатать «без аргументов»:
$ test () { [ "$#" -gt 0 ] && printf "$(printf '\\x%s' "$@")"; echo; }
$ test 48 65 6c 6c 6f
Hello
$
Это предполагает, что аргументы являются десятичными значениями от 1 до 127. (пустые аргументы будут подсчитаны, но при печати произойдет сбой ).
\x
должно следовать буквальное шестнадцатеричное значение:
$ printf '\x48\n'
H
$ c=48
$ printf '\x%s\n' "$c"
bash: printf: missing hex digit for \x
\x48
Предположительно, это связано с тем, что printf
будет расширять любые шестнадцатеричные литералы в строке формата в качестве отдельного шага перед использованием результирующей строки в качестве формата.
Что вы можете сделать вместо этого:
unhexlify() {
for character
do
format="\x${character}"
printf "$format"
done
printf '\n'
}
Тест:
$ unhexlify 48 65 6c 6c 6f
Hello
Используя perl и его функцию pack
, мы упаковываем две шестнадцатеричные цифры и печатаем представление ASCII.
charx() {
perl -le 'print pack "(H2)*", @ARGV' -- "$@"
}
Мы используем настольный калькулятор dc для ввода базы 16 и распечатки их символов ASCII с помощью команды a .
charx() {
dc <<eof
16i
$(echo "$@" | tr a-f A-F)
[SAz0<a]sa
[LAanln1-dsn0<b]sb
[zsnlaxlbxAan]sc
z0<c
eof
}
Используется как:
charx 48 65 6c 6c 6f
Результат
Hello