Как установить постоянные статические маршруты в KDE Desktop System с NetworkManager и Systemd?

Вы хотите awk. По-моему, почти никогда не причина использовать sed по awk, для чего-либо кроме тривиальных замен (не намного более сложный, чем sed-e 's/this/that' ). В этом случае это особенно контрпродуктивно.

можно сказать awk использовать, как разделитель, с помощью -F, . Мы можем также поместить запятую в awk's переменная OFS (выходной разделитель полей) так, чтобы печать команда, которая повторно комбинирует позиционные поля, объединила их с запятой:

awk -F, 'BEGIN { OFS="," } ...'

Теперь мы всовываем логику. Awk поддерживает своего рода "реактивное программирование", в котором он позволяет присвоение на позиционные полевые переменные 1$ , 2$ ... Когда вы присваиваете любому из них, это автоматически воссоздает 0$ переменная, которая первоначально остается на входной линии. Это воссоздает его путем объединения позиционных полей, с промежуточный OFS. Таким образом мы можем сделать:

awk -F, 'BEGIN { OFS="," }
         { if ($6 == 1) $6 = "Cos4"
           else if ($6 == 2) $6 = "Cos6"
           print }' yourfile

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

вышеупомянутый код может быть оптимизирован немного путем факторизации условных тестов в отдельные правила awk. То есть:

awk -F, 'BEGIN { OFS="," }
         $6 == 1 { $6 = "Cos4" }
         $6 == 2 { $6 = "Cos6" }
         { print }' yourfile

, Кроме того, мы можем "кодировать гольф" {печать} путем замены его 1 :

awk -F, 'BEGIN { OFS="," }
         $6 == 1 { $6 = "Cos4" }
         $6 == 2 { $6 = "Cos6" }
         1' yourfile

константа 1 служит булевым истинным условием. Условие не имеет никакого действия, таким образом, Awk предоставляет действие по умолчанию, которое является {печать} . Однако теперь, если вы пересматриваете это шесть месяцев спустя, необходимо будет помнить это; сокращение программ таким образом иногда создает будущий долг.

, С другой стороны, хорошее преобразование, так как мы устанавливаем OFS в эти , НАЧИНАЕТСЯ блок, должно сторониться опция-F и просто установить FS в том же блоке:

awk 'BEGIN { FS = OFS = "," }
     $6 == 1 { $6 = "Cos4" }
     $6 == 2 { $6 = "Cos6" }
     { print }' yourfile

Мы можем использовать составленное присвоение, много как на языке C. Подобные, связанные вещи должны быть сделаны близко друг к другу похожим способом, если это возможно.

0
15.10.2018, 04:36
1 ответ

Во-первых, удалите параметр шлюза по умолчанию для eth1везде, где вы его добавили. Если вы не уверены, запустите nmcli device status:, если он говорит, что состояние eth1равно unmanaged, тогда eth1вообще не контролируется NetworkManager.

Шлюз по умолчанию не является обязательным элементом конфигурации для каждого сетевого интерфейса. :его следует настраивать только для интерфейса, если оба )этого интерфейса подключены к сегменту сети, работающий маршрутизатор/шлюз в Интернет и b )вы действительно хотите использовать этот интерфейс для подключения к Интернету.

Если вы хотите использовать интерфейс только для доступа к сегменту сети, к которому он напрямую подключен, вы можете и должны полностью исключить настройку шлюза по умолчанию для этого интерфейса.

Если в сегменте, к которому подключен интерфейс, есть маршрутизатор/шлюз, но вы хотите подключиться только к определенному сегменту сети (или сегментам )через него, вам следует вместо этого добавить более конкретный маршрут entry (/entries ), чтобы указать, что это за сегменты.

Если вы настроили eth1с NetworkManager, сначала запустите nmcli connection show, чтобы определить имя сетевого подключения , которое NetworkManager в настоящее время использует для eth1. Запустите nmcli connection show <connection-name>, чтобы просмотреть все настройки для этого соединения.

Затем используйте, например,. sudo nmcli connection modify <connection-name> ipv4.gateway ""для постоянного удаления ложного шлюза из настроек статического подключения для этого подключения.

Затем снимите флажок «игнорировать автоматически полученные маршруты» для eth0и отключите и снова -включите соединение для eth0. Если ваш DHCP работает правильно, теперь вы должны получить шлюз по умолчанию через eth0, а поскольку eth1в настоящее время не имеет шлюза по умолчанию, NetworkManager + ваш DHCP-клиент теперь должны автоматически принимать настройку шлюза по умолчанию из информации DHCP для eth0.

Если ваш DHCP-сервер предоставляет вам IP-адрес, но не предоставляет информацию о шлюзе по умолчанию для eth0, вам следует попытаться исправить DHCP-сервер. Если вы не можете этого сделать, вы можете обойти это, добавив отсутствующую информацию о шлюзе через NetworkManager или через файл конфигурации вашего DHCP-клиента -, но DHCP-сервер, который не предоставляет информацию о шлюзе по умолчанию, когда он не должен делает свою работу.

1
28.01.2020, 02:42

Теги

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