У меня также были проблемы со сценарием. Мне не пришлось делать это дважды. Через минуту или около того все снова заработало. Но это все равно раздражало. Я решил, что это делает ненужные изменения маршрутизации. Нет никаких причин, по которым нормальный трафик от хоста не должен использовать физический интерфейс. Вам нужно использовать macvlan только для доступа к вашим виртуальным машинам. По этой причине единственные изменения маршрутизации, которые вам действительно нужны, это
ip route flush dev $MACVLN
ip route add $VMHOST dev $MACVLN metric 0
На тот момент у меня больше не было никаких проблем.
Также ничего не стоит, по крайней мере, на Centos 7, /sbin/ifup -local запускается systemctl перезапуском сети в конце запуска интерфейса. Таким образом, вы можете поместить сценарий туда, хотя он должен начинаться примерно так, поскольку вы не хотите запускать его при появлении других интерфейсов.
если ! тест "$1" = "em1"; тогда выход 0 фи
Вам, вероятно, также не нужен цикл проверки связи, когда он /sbin/ifup -локальный. На самом деле это опасно, поскольку это бесконечный цикл, поэтому, если есть какая-то проблема с сетью, система может не решить это как часть запуска.
С join
, sort
иgrep
join <(sort /path/to/source) <(sort /path/to/destination) | grep '<string to check>
Тесты
cat source
a.txt
b.txt
c.txt
d.txt
cat destination
c.txt
a.txt
d.txt
join <(sort source) <(sort destination) | grep 'a.txt'
a.txt
join <(sort source) <(sort destination) | grep 'b.txt'
Если требуется проверить, не совпадает ли содержимое двух файлов -, можно ввести следующую команду
cmp --silent <(sort source) <(sort destination) || echo "files are different"
Тесты
cmp --silent <(sort source) <(sort destination) || echo "files are different"
files are different
Чтобы добавить все строки исходного файла, не содержащиеся в целевом файле, в файл /var/tmp/unmatched
comm -23 <(sort source) <(sort destination) > /var/tmp/unmatched
Чтобы удалить из исходного файла все строки, не содержащиеся в целевом файле
comm -1 <(sort source) <(sort destination) >| source
Поскольку мы находимся в bash и если вы установили noclobber как set -o noclobber
, вам следует использовать синтаксис >|
.
Выполнено с помощью приведенной ниже команды awk
f2count=`awk 'END{print NR}' p2`
f1count=`awk 'END{print NR}' p1 `
comm_p1_p2=`awk 'NR==FNR{a[$0];next}($0 in a){print $0}' p1 p2| awk 'END{print NR}'`
if [[ $f1count -eq $f2count ]] && [[ $f1count -eq $comm_p1_p2 ]]; then echo "both files p1 and p2 content are same"; else echo "different content found on file p1 and p2"; fi