Tisztán csak azért, mert néha igazán jó ötleteket lehet kapni: hogy lehetne ezt jobban csinálni?
tr -d : < /sys/class/net/$(nmcli con show| awk '/ethernet/ {print $1}')/address
Feltételezem, hogy csak egy ethernet interfész van (licencszerver, szóval ha több lenne, azzal csak magunkkal tolnánk ki), ezért ezzel a résszel nem kell foglalkozni.
A feladat az az, hogy Red Hat - mégpedig 9 - környezetben ki kell kotorni az interfész MAC címét, és kivenni belőle a kettőspontokat (kötőjeleket). A kisbetű->nagybetű átalakítás elvileg nem kell.
A fenti példa működik, nekem meg haladnom kell a melóval, viszont hátha van elegánsabb megoldás is. Mivel RedHat, ezért az nmcli viszonylag adott, de a hordozhatóság jegyében bármi használható.
Örömmel veszem az ötleteket azoktól, akiknek van kedve és ideje ezzel foglalkozni :)
- 322 megtekintés
Hozzászólások
A robot aszondja, hogy:
Az általad megosztott parancs működik, de van néhány lehetőség, hogy egyszerűbbé és olvashatóbbá tedd a megoldást. Az
nmcli
parancs és a MAC-cím manipulálása többféleképpen is megoldható. Íme néhány javaslat, amelyeket érdemes megfontolni:
Az általad megosztott parancs működik, de van néhány lehetőség, hogy egyszerűbbé és olvashatóbbá tedd a megoldást. Az `nmcli` parancs és a MAC-cím manipulálása többféleképpen is megoldható. Íme néhány javaslat, amelyeket érdemes megfontolni:
1. **Egyszerűbb parancs szerkezet:**
Lehetőség van arra, hogy az `awk` használatát elkerüljük és egy kicsit optimalizáljuk a parancsot. Az `nmcli` segítségével közvetlenül hozzáférhetünk az interfész adataihoz, így nem szükséges az `/sys/class/net/.../address` fájlra hivatkozni.2. **Példa egyszerűbb parancsra:**
Ha az `nmcli`-t használjuk, a MAC-címet közvetlenül lekérhetjük:```
nmcli -g GENERAL.HWADDR device show $(nmcli -g DEVICE,TYPE connection show --active | awk -F: '/ethernet/ {print $1}') | tr -d :
```**Magyarázat:**
- `nmcli -g GENERAL.HWADDR device show` segítségével közvetlenül kérdezhetjük le az aktív Ethernet interfész MAC-címét.
- A `nmcli -g DEVICE,TYPE connection show --active` parancs lekéri az aktív kapcsolatok listáját, és az Ethernet típusú eszköz nevét választjuk ki.
- Végül a `tr -d :` törli a kettőspontokat a MAC-címből.3. **Hordozhatóság növelése:**
Az `nmcli` eszköz egy Red Hat-specifikus megoldás, de ha hordozhatóbb megoldást szeretnél, használhatsz más parancsokat, mint például az `ip` vagy `ifconfig`. Azonban az `nmcli` biztosítja a legegyszerűbb és legszabványosabb hozzáférést az interfész adataihoz Red Hat környezetben.Ez a megoldás egy kicsit olvashatóbb és jobban használja az `nmcli` beépített lehetőségeit.
1904.04.08.
RIP Jákub.
neut @
- A hozzászóláshoz be kell jelentkezni
Jóhát szarabbat könnyen tudok írni, AI nélkül is. Plusz előjön az "AI" jelenség, amikor nem érti, hogy mit ír: "Lehetőség van arra, hogy az `awk` használatát elkerüljük", de azért ott figyel benne az awk.
- A hozzászóláshoz be kell jelentkezni
Ezt nehogy említsed így, hogy az AI szar. Vannak erre fanboyok, akik ezen meg fognak sértődni.
Egyébként szerintem nem nagyon lehet sokkal elegánsabban csinálni, mint ami a topikindítóban van. Alapvetően /sys/-ből kell kimókolni, és valami interfacelistából grep-pel vagy awk-kel leszűkítve a szükséges azonosítót.
“Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”
- A hozzászóláshoz be kell jelentkezni
Vagyunk itt paran olyanok is, akik nem utasitjuk el elbol az AI-t, viszont tudjuk a hatarait, mert tisztaban vagyunk vele, hogyan mukodik.
Legalabb ezt mindenkepp ajanlom, de van egy sorozata is. Kisebb python tudas mindenkepp ajanlott az utobbihoz, elobbihez semmi nem kell.
A strange game. The only winning move is not to play. How about a nice game of chess?
- A hozzászóláshoz be kell jelentkezni
-
- A hozzászóláshoz be kell jelentkezni
Aki AI-al akar ügyeskedni, annak nagyon ajánlom legalább ezt az egy kurzust végighallgatni: https://www.coursera.org/learn/generative-ai-prompt-engineering-for-eve…
Ha sok, akkor legalább az első rész utolsó egy percét (már ha jól emlékszem), ahol elmondja a jóember, hogy mi kell egy propmtba.
- A hozzászóláshoz be kell jelentkezni
Én biztos, hogy nem az nmcli-vel kezdenék, értem, hogy redhat és ott biztos van, de egy
ip link list | awk '/link\/ether/ {print $2}'
parancs kiadja az összes létező MAC addresst a rendszerben, onnan azt csinálsz vele, amit akarsz. És ha csak azt akarod ellenőrizni, hogy egy adott licenc mac-ja szerepel, akkor egyszerűen megnézed, hogy a licenc megfelelő része szerepel-e ebben a listában, és akkor az sem probléma, ha több interface van.
- A hozzászóláshoz be kell jelentkezni
Hmm, jogos. Végül is feltételezem, hogy egy interfész van, csak épp a nevét nem tudom (igen, ebben az esetben nem is számít).
Viszont akkor:
tr -d : < /sys/class/net/!(lo)/address
Oké, ehhez kell extglob, de az a frissen telepített gépen - úgy látszik - be van kapcsolva.
Nha, ezen kéne még optimalizálni :D
- A hozzászóláshoz be kell jelentkezni
Nálam ez Debianon nem működik. Talán egy kicsit hordozhatóbb változat:
ip -j l | jq '.[].address' | tr -d ':"'
Ez az ip parancs JSON kimenetén dolgozik, ez kisebb eséllyel törik mint a sima ip link kimenet vagy sysfs
- A hozzászóláshoz be kell jelentkezni
Hát, /sys/class/net/<iface>/address az a 2.6.12-es kernel óta létezik, ezt bevállalom :)
Debian:
fisher@s2:~$ jq
-bash: jq: command not found
Őszintén meglep, hogy a Red Hat 9-en ott van.
Aha, valszeg azért nem működik, mert több interfész van, ami az esetemben/adott esetben biztosan nem így van. Ez gondolom működik:
fisher@s2:~$ cat /sys/class/net/!(lo)/address| tr -d : | head
024298b74e22
02423351d8e7
0242ffc7446c
024220de40fb
0242abf0d17d
02428d31979b
024276b2a2a0
0242726e9b50
024252f2b736
Vagy akár:
tr -d : <<< $(cat /sys/class/net/!(lo)/address)
- A hozzászóláshoz be kell jelentkezni
Nem az az érdekes mióta van hanem hogy azóta konzisztens-e a formátuma vagy meddig lesz még ugyanaz a formátum. Nem gyakori, hogy változnak, de törtek már el scriptjeim amik a sysfs-t parseolták (igaz ebből pár eset volt csak hogy core kernel válozás volt, nagyrészt driver exposure volt sysfs-el amin a driver író jóindulátára vagy utalva).
HA ez nem gond, mert a környezet (OS verzió, stb) nem fog változni, SELinux nem korlátozza a sysfs elérést (vagy root vagy) akkor tökéletes a legalsó is, vagy bármelyik tetszőlegesen.
- A hozzászóláshoz be kell jelentkezni
Ez meg megnézi a default route-ot, és azt az interfészt nézi:
ip link list $(ip ro | awk '/^default/ { print $5}') | awk '/link\/ether/ {gsub(":" , "", $2 ); print $2}'
de ha tényleg csak egy fizikai interfészed van, akkor:
lshw -c LAN 2>/dev/null | awk '/serial:/ { gsub(":" , "", $2 ); print $2 }'
is jó lehet
- A hozzászóláshoz be kell jelentkezni