Что делают эти команды grep и sed

Мне помогло снижение MTU соединения OpenVPN.

Из руководства OpenVPN:

--mssfix max Announce to TCP sessions running over the tunnel that they should limit their send packet sizes such that after OpenVPN has encapsulated them, the resulting UDP packet size that OpenVPN sends to its peer will not exceed max bytes. The default value is 1450.

The max parameter is interpreted in the same way as the --link-mtu parameter, i.e. the UDP packet size after encapsulation overhead has been added in, but not including the UDP header itself. Resulting packet would be at most 28 bytes larger for IPv4 and 48 bytes for IPv6 (20/40 bytes for IP header and 8 bytes for UDP header). Default value of 1450 allows IPv4 packets to be transmitted over a link with MTU 1473 or higher without IP level fragmentation.

The --mssfix option only makes sense when you are using the UDP protocol for OpenVPN peer-to-peer communication, i.e. --proto udp.

--mssfix and --fragment can be ideally used together, where --mssfix will try to keep TCP from needing packet fragmentation in the first place, and if big packets come through anyhow (from protocols other than TCP), --fragment will internally fragment them.

Both --fragment and --mssfix are designed to work around cases where Path MTU discovery is broken on the network path between OpenVPN peers.

The usual symptom of such a breakdown is an OpenVPN connection which successfully starts, but then stalls during active usage.

If --fragment and --mssfix are used together, --mssfix will take its default max parameter from the --fragment max option.

Therefore, one could lower the maximum UDP packet size to 1300 (a good first try for solving MTU-related connection problems) with the following options:

--tun-mtu 1500 --fragment 1300 --mssfix

Я добавил следующее в конфигурацию OpenVPN:

mssfix 1200

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

0
02.06.2019, 21:45
1 ответ

Неверный способ написания команды sed. Это должен быть либо такой скрипт:

1i{
s/\s*\([0-9]*\)\s*\(.*\)/"\2": \1,/
$a}

или вот так в одну строку:

sed -e '1i{' -e 's/\s*\([0-9]*\)\s*\(.*\)/"\2": \1,/' -e '$a}'

Буквально все, что вы помещаете после команд iи aдо новой строки или конца выражения (с -e ), напрямую выводится на стандартный вывод.

Что он делает, давайте разберем:

1i{

1— адрес строки. Он сообщает sed, когда выполнять команду. Когда содержимое первой строки считывается в пространство шаблонов (без завершающей новой строки ), оно iвставляет '{' в стандартный вывод в отдельной строке. Обратите внимание, что пространство шаблонов не изменилось, оно не добавило к нему '{'.

s— это команда поиска и замены, самая универсальная команда в sed. \sсоответствует пробелу. \(regex\)регулярное выражение группируется внутри него, как в математике, но также сохраняет то, что было им сопоставлено, в числовом регистре в соответствии с порядком этой группы :от \1 до \9.

Вывод uniq -cпримерно такой:

    occurrences string
    3 user

Теперь сложная часть:

\s*\([0-9]*\)\s*\(.*\)

Все еще в строке 1. Пространство шаблона представляет собой набор пробелов, затем «3 пользователя». Чтобы соответствовать этому, мы ищем пробел ноль или более раз, затем много раз цифру, то есть число, (, по-моему, это должен был быть + вместо *), который хранится в регистре \1, затем пробел (*не нужен я думаю ), тогда любой символ много раз (опять же + было бы лучше ), который хранится в регистре \2. А сейчас,вхождение находится в \1, а строка/пользователь в \2.

"\2": \1,

Сопоставлена ​​вся строка и сохранены куски, теперь мы заменяем то, что совпало, на кавычку, затем пользователя, затем кавычку, двоеточие, пробел, вхождение и запятую.

$a}

$также является адресом строки. Если текущая строка является последней, а на данный момент нет, вызовите команду a, чтобы добавить '}' к стандартному выводу на отдельной строке.

Это конец обработки кода для этой строки, автоматическая печать пространства шаблонов, как оно есть после выполнения манипуляции, затем считывается содержимое второй строки, и весь цикл повторяется.

Пример вывода:

{
"user": 3,
}

Это в основном формат файла JSON, хотя и с неправильным отступом.

Вот именно. Извините за романы:)

2
28.01.2020, 02:30

Теги

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