Używam niestandardowego komputera z systemem Linux, więc nie wszystkie polecenia systemu Linux są dostępne .
Wykonuję polecenia związane z siecią, więc muszę ustawić domyślną bramę tuż przed uruchomieniem polecenia, a następnie natychmiast ją usunąć.
Aby to zrobić, uruchamiam wszystkie moje polecenia w jednym wierszu:
/sbin/route add default gw 10.10.10.10;my command;/sbin/route del default gw 10.10.10.10;
Problem polega na tym, że z jakiegoś powodu znalazłem 2 domyślne bramy na tym samym komputerze, co spowodowało awarię wszystkich moich poleceń, ponieważ nawet jeśli ustawię moją domyślną bramę przed uruchomieniem testu, nadal jest pomieszana i nie mogę uruchomić testu.
Czy istnieje sposób na usunięcie WSZYSTKICH bram domyślnych za pomocą jednego polecenia ? Mam dużą liczbę maszyn, które rosną i nie będzie praktyczne umieszczanie skryptu na każdej maszynie. Potrzebuję polecenia tak prostego, jak:
/sbin/route del all default;set my default gw;mycommand;/sbin/route del all default;
Wszystko znalazłem tak daleko jest polecenie, aby usunąć z domyślną bramę, ale nie wszystkie z nich
/sbin/route del default
, które nie będą działać dla mnie.
/sbin/route
Pomoc wyświetla następujące
/sbin/route --help
Usage: route [{add|del|delete}]
Edit the kernel's routing tables
Options:
-n Don't resolve names
-e Display other/more information
-A inet Select address family
Aby usunąć wszystkie domyślne bramy za pomocą
ip
źródło
Wszystkie odpowiedzi są świetne, ale rozwiązałem ten problem, stosując inne podejście, użyłem polecenia, aby dodać tylko jedną bramę domyślną, ale zawiodłem, jeśli już istnieje. I w ten sposób ostatecznie usuń niewłaściwą bramę na końcu polecenia. Powinno to działać po raz drugi isa.
ip route add default via my-gateway
ip route del default
źródło
Jeśli Twój kod łamie się z wieloma bramami domyślnymi, prawdopodobnie powinieneś również szukać wielu adresów IP na urządzenie.
Jak już otrzymałeś odpowiedź, oto inne podejście, ponieważ NIGDY nie powinieneś zmieniać konfiguracji systemu tylko dlatego, że chcesz uruchomić / przetestować skrypt. Może zamiast tego użyjesz sieciowych nazw. Krótkie wprowadzenie na temat dodawania urządzeń wirtualnych do NS (przestrzeni nazw) znajduje się na stronie http://code.google.com/p/coreemu/wiki/Namespaces .
Aby utworzyć przestrzeń nazwaną test i uruchomić polecenie w tym obszarze, po prostu uruchom
gdzie COMMAND może być na przykład twoją powłoką lub tylko skryptem serwera.
źródło