Domyślnie ifconfig
pokażą mi wszystkie dostępne interfejsy, ale co jeśli chcę tylko je wyświetlić active
? Na przykład en0
tylko poniżej.
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 14:10:9f:e0:eb:c9
inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4
inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
nd6 options=1<PERFORMNUD>
media: autoselect
**status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether 32:00:14:e7:4f:80
media: autoselect <full-duplex>
**status: inactive**
Zawiadomienie ifconfig en0
nie spełni, en0
nie zawsze jest aktywne;)
Używam Mac OS X.
command-line
networking
osx
interface
qweruiop
źródło
źródło
ifconfig
implementacje są różne. Ponadto, dlaczego użycieifconfig
jest wymagane? Jaki jest twój cel końcowy?Odpowiedzi:
Aby uzyskać pełny opis wszystkich aktywnych usług, spróbuj:
Ten prosty regex powinien odfiltrowywać tylko aktywne interfejsy i wszystkie ich informacje. Sugeruję umieszczenie aliasu w tym pliku ~ / .profile lub ~ / .bash_profile (może ifactive?)
Aby uzyskać nazwę interfejsu (przydatną w skryptach), użyj:
Aby to zadziałało, musisz zainstalować program pcregrep . Jest na Macports w pakiecie pcre. Alternatywnie, powinno to działać z użyciem GNU grep
grep -Pzo
zamiast,pcregrep -M -o
ale z resztą to samo, ale nie przetestowałem tego.źródło
Jeśli chcesz wydrukować tylko „wpis”, jeśli on zawiera
status: active
, możesz użyć czegoś takiego jak ten program awk jako filtra do wyjścia ifconfig :Kiedy zaczyna się każda „pozycja” (linia jest pusta lub nie zaczyna się od tabulatora), zacznij zapisywać pozycję w buforze. Dołącz do tego bufora wszelkie kolejne wiersze rozpoczynające się od Tab. Uważaj na magiczny sznurek
status: active
; jeśli taka linia była widoczna, wydrukuj bufor (poprzedni „wpis”), gdy rozpocznie się nowy „wpis” (lub wejście się zakończy).Zapisz powyższy tekst programu w pliku i użyj go w następujący sposób:
Lub, jeśli masz
chmod +x
plik, możesz go trochę uprościć:źródło
Jeśli nie masz negatywnego wpływu na niektóre skrypty bash, możesz to zrobić:
Spowoduje to wyświetlenie aktywnych interfejsów sieciowych. Testowane na Mac OS X 10.13.
Zaletą jest to, że nie trzeba niczego instalować. Po prostu uruchom powyższe w terminalu.
źródło
ifconfig -lu
nie będzie działać na Debianie. Ale OP i tak używa MacOS, więc to rozwiązanie będzie działać na systemach z BSDifconfig
. Poniżej zamieściłem inną odpowiedź, która robi to samo bez użyciaifconfig -lu
Czytając komentarze i pytania, wydaje się, że naprawdę chcesz po prostu uzyskać interfejsy, które mają przypisany adres IP.
Możesz to zrobić szybko za pomocą
ifconfig
igrep
.Uruchomienie polecenia:
Powinien produkować coś podobnego do:
Spowodowałoby to wyświetlenie każdej linii z nazwą interfejsu i adresem IP, jeśli takowe miały.
Niektóre bardziej szczegółowe magie REGEX mogą zapewnić ci dokładnie to, czego potrzebujesz.
źródło
active
rozważanie?Chciałbym, żeby pytanie było nieco jaśniejsze. Zakładając, że przez
Active interface only
, chciałeś pokazać tylko nazwę aktywnych interfejsów (w moim przypadkuUP
iRUNNING
statusieactive
) bez żadnych innych szczegółów. Następnie spróbuj tego:Dane wyjściowe wyglądałyby następująco:
Dostosuj
grep -v
pole i dodaj więcej niechcianych interfejsów, takich jakloopback
->lo
itp., Jeśli to konieczne.Teraz, jeśli chcesz i musisz sprawdzić, czy znalezione interfejsy są obecnie aktywne. Następnie możemy po prostu przekazać je jako argument za
ifconfig <interface>
jak pokazano poniżej:[[ $(ifconfig en0 | grep -w active) ]] && echo "en0 is active"
Dalsze uproszczenie i wdrożenie w funkcji:
Wykonanie tej funkcji zwróci tylko aktywne interfejsy. W moim przypadku:
źródło
Poniżej zostaną wydrukowane tylko te interfejsy, które są skonfigurowane do posiadania adresu IP
źródło
Uzyskaj tylko interfejs MAC AKTYWNY:
źródło
ip
domyślnie; potrzebujesz do tego HomeBrew, a następnie uruchombrew install iproute2mac
raz. Kod źródłowy jest na github.com/brona/iproute2macJak to działa:
źródło
Spowoduje to wyświetlenie statusu połączenia Ethernet en0
źródło