Используют ли сами программы символические ссылки или только для пользователей?

Используя POSIX Awk и не беспокоясь о последовательности строк вывода:

echo | awk -v 'netids=10 20 30' -v 'names=eth1 eth2 eth3' '
  BEGIN {
    netidcount = split(netids, netid)
    namecount = split(names, name)
    if (netidcount != namecount) {
      print "Error: You must pass the same number of names and netids."
      exit 1
    }
    for (i in name) {
      for (j in name) {
        if (i == j) {
          continue
        }
        printf "iptables -I FORWARD -i %s -src 192.168.%s.0/24 -dst 192.168.%s.0/24 -j DROP\n", name[i], netid[i], netid[j]
      }
    }
  }'

Конечно, вы можете изменить это; например, вы можете поместить приведенный выше awk-скрипт в файл и вызвать его с помощью:

echo | awk -v... -v... -f script.awk

Или вы можете поместить сетевые идентификаторы и имена в data.txt, возможно, в таком формате:

eth1 10
eth2 20
eth3 30

И напишите файл сценария Awk script.awkвот так:

#!/bin/awk
NF != 2 {
  error = 1
  print "Error: Each line of input must contain one interface name and one number."
  exit
}
(($1 in nameseen) || ($2 in netidseen)) {
  error = 1
  print "Error: Each interface name and network id in input must be unique."
  exit
}
{
  name[NR] = $1
  netid[NR] = $2
  nameseen[$1]
  netidseen[$2]
}
END {
  if (error) {
    exit error
  }
  for (i in name) {
    for (j in name) {
      if (i == j) {
        continue
      }
      printf "iptables -I FORWARD -i %s -src 192.168.%s.0/24 -dst 192.168.%s.0/24 -j DROP\n", name[i], netid[i], netid[j]
    }
  }
}

А потом так и назови:

awk -f script.awk data.txt

Большой выбор.

Я бы, наверное, data.txtвыглядел как:

eth1 192.168.10.0/24
eth2 192.168.20.0/24
eth3 192.168.30.0/24

Изменение сценария для работы с этим форматом данных оставлено читателю в качестве упражнения. ;)


(Примечание. :Если вы используете этот код, не забудьте указать ссылку на этот ответ в качестве авторства.)

0
21.07.2020, 06:20
1 ответ

Если есть программы, которым требуется Python 2, они должны явно использовать/usr/bin/python2(или аналогичный )вместо простого /usr/bin/python. Однако могут быть некоторые, которые не были обновлены и все еще используют /usr/bin/python. Те вполне могли сломаться.

Если вы используете Ubuntu 20.04 или новее,python-is-python3явно делает /usr/bin/pythonPython 3. В более старых версиях я бы не рекомендовал менять эту символическую ссылку.

1
18.03.2021, 23:18

Теги

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