Необходимо будет провести его через некоторый тип вида, its' просто вопрос когда. Но то, что я подозреваю, что Вы ищете, является одноразовым соглашением. Ваш метод ваше дело, и существуют различные пути, которые могут быть быстрее.
Это сделало задание, но не стесняйтесь играть вокруг с другими путями.
echo "$(echo fine-grained | cat - sorted.txt | sort)" > sorted.txt
Вскрытый противоречия, начиная с внутренней подоболочки, чтобы не усекать файл прежде, чем считать его, свяжите отраженный вход с diskfile. Повторение его заключило в кавычки, сохраняет разрывы строки. Затем отсортируйте его.
Или уплотненный, с предложением Giles sort -m
(и избегающий UUOC).
echo "$(echo fine-grained | sort -m - sorted.txt)" > sorted.txt
В конце концов, ответ на этот вопрос заключался в том, что провайдеры VPS openVZ должны иметь ядро, которое поддерживает ipsec и должно включать модули ipsec на хост-машине. Некоторые из наших провайдеров не стали бы делать этого, так как это было бы большим изменением для хост-машины. Вместо этого мы обнаружили, что все наши провайдеры поддерживают протокол openvpn и включили 'tun' на всех наших openvz VPS с нашими провайдерами.
У меня была похожая проблема при попытке заставить openswan/ipsec/pluto работать в контейнере Docker. С моей точно такой же базовой конфигурацией он работал на виртуальной машине VirtualBox Ubuntu 14.04.
Проблема, с которой я столкнулся, заключалась в запуске образа Ubuntu 14.04 с Docker на моей основной машине Arch Linux.
Я считаю, что суть проблемы заключается в этой строке:
pluto[439]: no public interfaces found
Чтобы действительно разобраться в этом, мне пришлось обратиться к исходному коду:
apt-get source openswan
Который можно найти здесь:
openswan-2.6.38/programs/pluto/server.c:462:find_ifaces(void)
openswan-2.6.38/programs/pluto/sysdep_bsd.c:201: find_raw_ifaces4(void)
openswan-2.6.38/programs/pluto/server.c:477:loglog(RC_LOG_SERIOUS, "no public interfaces found");
В то время как на VirtualBox Ubuntu 14.04 прекрасно находит eth0 и его адрес.
По сути, возможно, именно этот код не возвращает никаких интерфейсов:
openswan-2.6.38/programs/pluto/sysdep_bsd.c:243: find_raw_ifaces4() : if (ioctl(master_sock, SIOCGIFCONF, &ifconf) == -1)
Пытаясь решить эту проблему, я обнаружил, что Docker ограничивает доступ к сетевым устройствам (по умолчанию он создает мост к хосту) и загрузке/выгрузке модулей ядра (ipsec загружает и выгружает модули ядра). Поэтому мне пришлось предоставить Docker доступ ко всему, включая использование необработанного сетевого интерфейса моего хоста:
docker run --cap-add=ALL --net=host -it ubuntu /bin/bash
Хотя это и не полный ответ на вопрос, надеюсь, он поможет другим понять, что не так в их собственной конфигурации. В идеале pluto должен давать больше информации о том, какие сетевые устройства он находит и почему другие не подходят (т.е. не являются общедоступными).