Přiznám se, že(s vědomím toho, o čem článek píše) příkaz ifconfig pořád poměrně často používám.
Je to zvyk, do příkazu ip se musím dlouhá léta prostě často nutit - ano, často to bez něj nejde.
Už tenkrát se projevilo takové jisté "bordelářství" a neúcta k Unixu, které dnes vyvrcholilo hrůzným systemd.
Syntaxe utility ip je totiž do značné míry klasickému unixovému systému cizí. Nechápu, proč ji bylo, v rámci zlepšovatelského hnutí, třeba pojmout zrovna takto.... klidně mohla být "klasická" s tím, že ifconfig mohl být už pak pouze link...
Někdy se divím, co všechno se pod "neúcta k..." dá schovat.
Rozzuřenej Ovčáček si těžoval u RRTV, že se nemohl blýsknout v přímým přenosu jeho tiskovky. Důvod? "Neúcta k prezidentovi republiky".
Putin má zase cenzurní zákon, na základě kterýho může soudit oponenty. Zdůvodnění? "Budeme trestat neúctu k pravoslavné církvi a (voleným) zástupcům lidu".
Manželka jiné kremlofilní bestie si zase po zvolení manžela na hrad stěžovala na "neúctu k" tomu jejímu ožralovi, který zneuctil korunovační klenoty a snažila se tím ovlivňovat (vydírat) média v jeho prospěch.
Takže ne, tenhle argument neberu. Diskutujme věcně.
Osobně mám největší výhradu k CLI v tom, že si člověk musí pamatovat názvy všech prográmků. Pro jednu skupinyu činností jich existuje klidně i několik desítek (pro správu souborů a adresářů třeba rm, mkdir, ls, cp, mv, ....). Když si nevzpomene na název prográmku, tak má smůlu.
Nebo jde činnosti rozdělit do skupin. git, ip, yum/apt/rpm,... Pak stačí mít na paměti, že pokud chci dělat něco s sítí, začíná to na ip, takže další navigace ip --help rychle a jednoduše poradí. Je to na orientaci mnohem jednodušší.
Takže za sebe, Já společný prefix "ip" pro síťařinu vítám.
Co je spatneho na slove "neucta"?
Proc do toho zatahujete politiku?
Btw dival jsem se, jak se soudruzi postavili k IPv6 (a ano, "ip" je ocividne preferovany) http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/
No kdyz si nekdo ze stare verze vybere syntax tak aby podporil jeho hypotezu, to je pak tezka diskuse.
Predpokladam, ze 90% lidi s unixovym backgroundem pouziva stary system s podstatne jednodussi syntaxi:
nastaveni ip adresy
ifconfig eth0 x.x.x.x
nastaveni default route
route add default gw x.x.x.x
Ne ze bych nesouhlasil s obsahem clanku - ip ma rozhodne proti ifconfig-u spoustu prednosti ale podle mne je prave nekompatibni syntax a absence detailni dokumentace duvod proc jeste spousta lidi pouziva ifconfig.
nepoukazoval jsem na delku zapisu ale spis na to, ze tam nevidim duvod, proc to neni unixove, jak psal nekdo vysse.
kdyz uz jste napsal spravnou syntaz tak pak mi to prijde tuplem skoro stejne :)
ip r a default via x.x.x.x
route add default gw x.x.x.x
poradna dokumentace chybi, o tom zadna. ale kdyz sahnu na ifconfig, spis jen nastavuju ty ip a na to nic moc nepotrebuju. kdyz chci toho vic tak pak je problem. ale nejsem si jisty, ze me pak dokumentace ifconfigu spasi
Je k něčemu dobré uvádět brd +
?
A vůbec, potřebovali jste někdy v životě explicitně nastavovat broadcast adresu?
Jinak si myslím, že není chyba použít zastaralé příkazy tam, kde je to efektivnější a výsledek dopadne stejně. Třeba místo ip li set dev eth0 up
radši napíšu kratší ifconfig eth0 up
. Když chci ale vidět adresy, radši napíšu ip a
, než ifconfig
, nejen proto, že je to kratší, ale hlavně proto, že mi ten výstup ip a
připadá mnohem přehlednější.
Ono to je asi vcelku jedno. Pokud broadcast adresa neni specifikovana, tak se sice nenastavi jako soucast adresy, ale kernel stejne automaticky zavede prislusnou broadcast routu do local tabulky, takze broadcast komunikace funguje stejne jako kdyz se to nastav s b+.
Maximalne to muze zmast nektere programy, ktere broadcast adresu ctou z konfigurace rozhrani a nepocitaji s tim, ze tam byt nemusi.
Přijde mi že ze všech iproute2 příkazů je ip ještě ten na který se přešlo nejvíce (a je nejvíce připomínán, aspoň si pamatuju diskuse na abclinuxu - no dobře, teď koukám že z let 2005-2006).
Užitečnější (ve smyslu více užitečné, ne že by nebylo fajn ho občas připomenout) by mi přišlo upozorňovat na netstat vs. ss a třeba na tc.
že konečně někde vychází článek s pořádným popisem příkazu ip. Ale ono zase nic, jen trocha prázdné propagace a pár nejjednodušších příkladů.
A přitom ip je mocný a komplexní nástroj a svou komplexností by si zasloužil celý seriál. Zvláště proto, že k němu prakticky neexistuje dokumentace (stručný přehled parametrů v man stránkách za dokumentaci opravdu označit nelze). A neexistence dokumentace je jeden z podstatných důvodů, proč se mu lidé (i já) vyhýbají.
Proc nema iw stejnou syntaxi jako ip? Je mi dost lito, ze se Linux tak zkazil a s UNIXem uz nema skoro nic spolecneho ...
Proc nepouzivam prikaz ip? Protoze delam s hlavne s UNIXy a tam je pouze ifconfig. Treba takove OpenBSD ma ifconfig implementovano velice dobre, ze s nim jde ovladat i wifi.
Rozdil ve vypisu mezi "netstat -lp" a "ss -lp" je markantni, to ss je tak NEPREHLEDNE. DVA radky u ss misto jednoho u netstat ? Na sirokouhlem FHD monitoru je to teda debilita
root@server /home/username # netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:http *:* LISTEN 17293/apache2
tcp 0 0 *:ssh *:* LISTEN 402/sshd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 10163 464/snmpd /var/agentx/master
root@server /home/username # ss -lp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:ntpd/24927 *
p_raw UNCONN 0 0 *:eth1 *
users:(("lldpd",pid=442,fd=11))
Je pekne, ze vypisuji vsechny uzivatele navesene na ty porty/sockety, ale ten vypis je teda fakt opruzove neprehledny.
Ted jsem si vsiml, ze tam maji snad divny sloupce ci co ? Jakmile je delsi nazev procesu na portu, tak se posouva zbytek toho radku klidne na dalsi radek, takze vam to na dalsim radku zobrazi NIC nebo hvezdicku...:
LocalAddress:Port
9:kernel --> vejde se na cely radek
15:systemd/1 --> NEvejde se na cely radek
...wtf.
asi nějakej asciiart
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 rtnl:3493 * nl UNCONN 0 0 rtnl:chrome/27206 * nl UNCONN 0 0 rtnl:kernel * nl UNCONN 0 0 rtnl:ntpd/15148 * nl UNCONN 0 0 rtnl:3575 * nl UNCONN 0 0 tcpdiag:kernel * nl UNCONN 0 0 10:kernel * nl UNCONN 0 0 15:pulseaudio/4977 * nl UNCONN 0 0 15:X/3814 * nl UNCONN 0 0 15:udisksd/18271 * nl UNCONN 0 0 15:chrome/27206 * nl UNCONN 0 0 15:2035 * nl UNCONN 0 0 15:pulseaudio/4500 * nl UNCONN 0 0 15:kernel * nl UNCONN 0 0 15:upowerd/16234 * nl UNCONN 63488 0 15:slim/3810 * nl UNCONN 63488 0 15:su/6667 * nl UNCONN 0 0 16:kernel * nl UNCONN 0 0 16:3158 * nl UNCONN 0 0 18:kernel *
Ono vubec nejde o chyby a syntax. Hlavni technicky rozdil mezi ifconfig a ip je v tom, ze ifconfig pouziva 'tradicni' API (pomoci SIOCGIFxxx ioctl() operaci), zatimco ip pouziva API zalozene na Netlinku.
Nove funkce ve starem API vubec nejsou dostupne, takze by to znamenalo cely ifconfig stejne prepsat na Netlink. Coz se vlastne udelalo, akorat se zvolila nova syntax, ktera je uniformni a nezatizena minulosti, a vysledek se jmenuje ip.
Popravdě právě netlink (respektvice spíš rtnetlink), je na celém ip největší šílenost, která mi nepřipadá jako vhodné systémové řešení, narozdíl od standardního ioctl. Navíc není rtnetlink v podstatě vůbec z dokumentovaný. Manuálová stránka rozhodně nestačí k jeho použití. Takže kdo chce toto api použít jinak než skrze utilitu ip, tak si musí přečíst celé zdrojáky ip a navíc ještě odpovídající kód z kernelu, kde je dobré připomenout, že toto api se stále ještě mění.
Toto je také nejspíš důvod, proč se někdo nesebral a nenapsal sadu utilit se stejnou funkčností, ale jinou syntaxí, nebo nerozšířil funkce ifconfig, route atd.. Jakkoli to totiž vypadá triviálně, tak se stačí podívat do kódu ip a zjistíte, že je to hotové peklo, kde je parser argumentů přímo generuje paket pro rtnetlink, jehož podoba je známa jen autorům ip.
No, jako vyvojar software pouzivajici primo rtnetlink bych k tomu neco dodal:
1) Dokumentace k rtnetlink je malo jako u vetsiny linuxoveho API, relativne k ostatnim jde ale o nadprumer. Je tu nekolik manualovych stranek, pomerne obsahle RFC 3549 a hlavickove soubory, drive nebo pozdeji clovek ale stejne sahne ke zdrojakum jadra. Nejde ani tak o konretni API (to je vcelku primocare), jako o chovani linuxoveho sitoveho stacku.
2) Ony ioctl bych neoznacoval za standardni rozhrani, pokud vim POSIX ani SUS je nedefinuji, spise se jedna o tradicni rozhrani. V Linuxu nejsou dokumentovany o moc lepe nez rtnetlnk. Jejich feature-set je beznadejne zastaraly a navic nejsou dobre rozsiritelne narozdil od rtnetlinku, ktery pouziva TLV model zprav.
3) Na BSD-variantach take nemaji tyto ioctl jako nativni rozhrani, ale pouzivaji message-based API pripominajici netlink.
Zdrojaky jsou v OSS mozna vyvojarska dokumentace. Rozhodne ne dokumentace pro adminy/usery!!! To je to co me na ekosystemu GNU/ Linuxu velmi vytaci. Neni dokumentacni kazen any u takovych dulezitych komponent jako ip utils.
V momente kdy resim pruser tak posledni vec co bych delal je studovat zdrojaky jadra a nejake api. Bohuzel u linuxovych progrosu jde hodne videt ze v podstate toho moc nevi o unixove filosofii a nedokumentace toolu nebo jen kratky neaktualni canc se stal standardem.
Pokud by šlo, ocenil bych, kdyby v dalším díle byly zmíněné ekvivalenty výpisu přenesených dat na portech. Pouhé zadání ifconfig mi vypíše přehledně kolik dat jednotlivé síťové karty přenesly. U ip, co jsem se díval se musí asi používat -s, ale to to zase ukazuje jenom v bajtech. Tak kdyby někdo věděl...
Boha jeho. Chlapci vstavejte ti co jste ve wn zustali.
1. Ujasnete si o jake pakety na jake vrstve mi jde?
ifconfig a ethtool -S resi na counterech ethernet frames. Navic ethtool je driver dependent takze ho nejde pouzit _univerzalne_
qdisc IMHO resi pakety na IP vrstve
2. Proc te proboha zajima interrupt? Je to hw dependent. TO NERES! Nektery sitovky ti za kazdym udelaj interrupt a nektery az po milionu paketu. Jsou sitovky co dokonce interrupty negeneruji(embedded) a potrebujou polling nebo kombinaci obojiho.
Skusal som zmenit MAC pomocou ip link set dev wlan0 down ; ip link set dev eth0 address 11:22:33:44:55:66 ; ip link set dev wlan0 up a nedochadza k zmene. Ani ked pouzivam ifconfig. Mam USB wifi adapter ITEC , lsusb vypisuje 8171 Realtek Semiconductor Corp. RTL8188SU 802.11n WLAN Adapter Uz to riesim dhsie, nikde mi nevedia pomoct, skusal som aj iny USB adapter, pouzivam PCLinuxOS 64-bit LXDE. V prikazovom riadku (cez root samozrejme) vypise len 8171 Realtek Semiconductor Corp. RTL8188SU 802.11n WLAN Adapter
Tak len jedna ukazka preco asi nejeden admin (zjavne este nezvyknuty na citanie sialenych xml konfigov modernej doby) pouziva ifconfig nad ip. Ktory vystup je citatelnejsi?
T3: c@laptop: ~ $ ip route
default via 192.168.0.17 dev wlp4s0 proto static metric 600
10.0.0.0/8 via 10.226.52.1 dev tun0 proto static metric 50
10.226.52.0/22 dev tun0 proto kernel scope link src 10.226.52.208
10.226.52.0/22 dev tun0 proto kernel scope link src 10.226.52.208 metric 50
62.168.56.1 via 192.168.0.17 dev wlp4s0 proto static metric 600
192.168.0.0/20 dev wlp4s0 proto kernel scope link src 192.168.0.27
192.168.0.0/20 dev wlp4s0 proto kernel scope link src 192.168.0.27 metric 600
T3: c@laptop:
T3: c@laptop: ~ $ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.17 0.0.0.0 UG 600 0 0 wlp4s0
10.0.0.0 10.226.52.1 255.0.0.0 UG 50 0 0 tun0
10.226.52.0 0.0.0.0 255.255.252.0 U 0 0 0 tun0
10.226.52.0 0.0.0.0 255.255.252.0 U 50 0 0 tun0
62.168.56.1 192.168.0.17 255.255.255.255 UGH 600 0 0 wlp4s0
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 wlp4s0
192.168.0.0 0.0.0.0 255.255.240.0 U 600 0 0 wlp4s0
Tak mám dojem, že je to podobný problém, jako přesunutí ovládacích tlačítek oken u ubuntu kdysi před lety. V praxi jde o to, že uživatel efektivně něco používá, a pak, aniž by k tomu byl nějaký zřejmý důvod, se stejná věc začne dělat jinak, a je to prezentováno jako pokrok.
Proč?
Proč nemůžeme používat ifconfig, route a arp který bude mít víc funkcí a updaty jako v BSD?
Proč nemohou zůstat tlačítka vpravo?
Protože imbecilní developeři se chtějí stát něčím zajímaví a přinutí zbytek světa klikat doleva místo doprava anebo psát ip route místo route, místo toho, aby pracovali na kvalitách svého software a ctili unixovou zásadu "dont fix what works".
Howgh
IpAddress() {
echo "######################################################"
echo "### 'ifconfig' is obsolete. Using: 'ip address' ###"
echo "### 'unalias ifconfig' restores the original state ###"
echo "######################################################"
ip address
}
alias ifconfig='IpAddress'
Asi na tomto portále patřím spíš ke starší generaci a tudíž se není co divit, že převážně používám ifconfig, ale ip se nebráním. Spíš bych si postesknul, že IT je obor, kde jsou zkušenosti často víc na obtíž, než k užitku. Kolegové strojaři kolem mě s věkem zkušenosti úročí a já musím dělat dost pro to, abych nezakrněl a občas musím zkušenosti zahazovat. Na Linuxu se mi líbí právě to, že staré dobré utility nezahazuje a zkušenosti vám zůstávají v daleko větší míře, než u Windows. Docela chápu, že notebooky systemd potřebovaly jak sůl, ale u serverů bych uvítal konzervativnost. Přece jen při upgradu si přečíst release notes a udělat pár úprav je něco jiného, než překopávat firemní fungující systém málem od začátku :-) .
notebooky systemd nepotrebovaly, co je to za divnej mytus ??? pokud jde o paralelni spousteni a rychlejsi start - obdoba upstart v ubuntu ciste jako init by bylo dostatecne - notebook startuje cca 6s na i5+SSD, nehlede na to ze notebook se nestartuje ale probouzi z hibernace nebo spanku... :)
Jo, s tou solí jsem to trochu přehnal. Nicméně se správně časovaným initem na dvou desítkách počítačů ve dvou různých pobočkách (prostředích s různými síťovými prvky a různou kvalitou) jsem se docela natrápil.
Ještě se vrátím k ip příkazu. Nevím, jaký je dnes stav u BSD a AIX, ale ifconfig byl docela jistota (no, s mírnými odlišnostmi, ale man umí číst každý) u libovolného OS UNIXového typu. Tomuto stavu se dnes vzdalujeme.
Z tohoto duvodu jsem pred casem opustil linux a pouzivam ho jen bokem. Preferuji BSD a stabilni komercni unixy kde reseni postavene pred 3mi lety mohu pouzit znovu. Kde se nemusim ucit veci ktere neprinaseji zadnou pridanou hodnotu a vznikly jen lennartovskym huronskym krikem. Tam pokud se neco prekope z gruntu tak je to kvuli tomu ze stavajici zpusob uz je znacne neprehledny a nesystemovy nebo zastaraly. Byva vsak zachovana moznost delat i ty veci postaru az do nake prelomove verze za 5-10 let.
Mainframy drzi zpetnou kompatibilitu prakticky po celou dobu sve existence.
> Na Linuxu se mi líbí právě to, že staré dobré utility nezahazuje a zkušenosti vám zůstávají v daleko větší míře, než u Windows.
Mno... Mám doma knížku o FreeBSD 4 (vyšlo 15 let zpátky) a většina věcí pořád funguje. Možná to už dneska není nejlepší řešení daného problému, ale funguje to.
Ve stejné době vyšel RH 7 (tenkrát ještě ani ne "Enterprise Linux"), docela by stálo za pokus, co z tehdejší dokumentace by ještě dneska fungovalo :)
Oprava, to eth0 som tam vlozil kopirovanim, samozrejme ze zadavam wlan0
v root terminale zadam:
ip link set dev wlan0 down ; ip link set dev wlan0 address 11:22:33:44:55:66 ; ip link set dev wlan0 up
a terminal mi odpise: RTNETLINK answers: Cannot assign requested address
a po zadani ifconfig opat ukazuje povodnu MAC adresu USB wifi adaptera.
Zaujimave je aj to, ze aj ked zadam ip link set dev wlan0 down po chvili wlan0 sam nabehne bez toho aby som zadal up. Pouzivam PCLinuxOS 64bit LXDE.