Usando o iproute2
comando ip address delete
(ou encurtado ip a d
) permite deletar um endereço de protocolo (veja man ip address
)
O problema ip a d
é bastante inconveniente em seu uso, exigindo mais parâmetros do que o necessário para ter especificado suficientemente sua tarefa. Sério? exemplo:
user@box$> ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 24:ee:9a:00:00:01 brd ff:ff:ff:ff:ff:ff
inet 10.192.0.174/24 brd 10.192.0.255 scope global dynamic noprefixroute wlo1
valid_lft 415283sec preferred_lft 415283sec
user@box$> ip a d 10.192.0.174
Not enough information: "dev" argument is required.
user@box$> ip a d 10.192.0.174 dev wlo1
Warning: Executing wildcard deletion to stay compatible with old scripts.
Explicitly specify the prefix length (172.22.52.254/32) to avoid this warning.
This special behaviour is likely to disappear in further releases,
fix your scripts!
Caso em questão, já que na maioria dos casos o endereço IP atribuído é atribuído apenas a um único dispositivo de rede, eu realmente me pergunto como fazer iproute2
apenas agir em conjunto e excluir o endereço IP já, em vez de me fazer copiar inutilmente a máscara de rede e o dispositivo de rede .
Mesmo que eu atualmente lute para ver um caso de uso em que vários dispositivos de rede seriam atribuídos ao mesmo IP, ou casos em que um endereço IP é atribuído várias vezes com máscaras de sub-rede divergentes (que, aliás, devem ter sido os casos que iproute2
não são disposto a ignorar), estou certo de que mesmo esses casos podem ser ajudados iproute2
se realmente acontecer (ou seja, apenas em caso de ambiguidade).
Alguém encontrou uma maneira de tornar ip a d
menos inutilmente worksome?
BTW/Bonus: existe uma maneira de ter como ip a a [ipadress]
padrão uma máscara de rede menos inútil do que /32
/ 255.255.255.255
(ou há uma razão para essa escolha?) ?
Primeiro: concordo completamente com a resposta de @Yurko. No entanto, aqui está uma resposta que ainda deve resolver seu problema.
Se você deseja excluir um endereço sem considerar a interface, não deve usar
ip address del
masip address flush
, como sugere a página de ajuda:Este subcomando é usado para fazer a remoção em massa de endereços. Você pode limitar seu escopo de várias maneiras. Uma maneira é o
to PREFIX
.Então, para o seu caso, isso funcionará:
Ele até removerá esse endereço várias vezes em configurações complexas onde ele aparece em várias interfaces.
A indicação de uma máscara de rede selecionaria todo o intervalo para procurar candidatos à exclusão, portanto, provavelmente é melhor deixar sem máscara de rede. Este é um comportamento diferente de
del
, porque a função do comando é diferente. Por exemploip address flush to 192.0.2.100/31
, selecionaria qualquer prefixo começando com 192.0.2.100 ou 192.0.2.101, qualquer que fosse sua própria máscara de rede (que poderia ser /32 /24 ou qualquer outro), para exclusão.delete
provavelmente responderia que não existe esse endereço.iproute2: sim, existem razões, incluindo múltiplas interfaces, interfaces virtuais, roteamento complexo, interfaces de ligação, etc., finalmente legado e o mesmo comportamento em todos os sistemas *nix.
Você precisa configurá-lo uma vez e esquecê-lo, então não há motivos para inventar uma roda novamente.
Se você tiver que fazer isso várias vezes, o iproute2 fornece um conjunto completo de ferramentas para criar scripts facilmente em poucos minutos e esquecê-lo.
A máscara de rede 255.255.255.255 é padrão por um motivo, ela coloca cada dispositivo em sua própria sub-rede, forçando-os a se comunicar através do roteador de forma a chegar a qualquer outro dispositivo... rede. Mas, novamente, você pode tê-lo facilmente roteirizado ou até mesmo simplesmente alterado criando um alias.