คำสั่งเทอร์มินัลใดที่จะได้รับเพียงที่อยู่ IP และไม่มีอะไรอื่น


118

ฉันพยายามใช้แค่ที่อยู่ IP (inet) เป็นพารามิเตอร์ในสคริปต์ที่ฉันเขียน

มีวิธีง่ายๆใน Unix Terminal เพื่อรับเฉพาะที่อยู่ IP แทนที่จะมองผ่านifconfigหรือไม่?


ใช่หรือตัวระบุเฉพาะอื่น ๆ เกี่ยวกับเครื่องที่ฉันคิด
Mason

1
คุณได้รับตัวเลือกที่ไม่ถูกต้องในชื่อโฮสต์ -i?
Ken

4
ชื่อโฮสต์ไม่น่าเชื่อถือเท่ากับ ifconfig
joel

2
joel พูดถูกโดยเฉพาะคุณที่พูดถึง MAC OS แล้วก็ Ubuntu
zackaryka

2
เมื่อเรียกดูผ่านคำตอบดังต่อไปนี้เก็บไว้ในใจว่าการส่งออกของง่ายมากที่จะทำงานร่วมกับกว่าการส่งออกของip -o address ip address
jlh

คำตอบ:


177

คุณสามารถเขียนสคริปต์ที่ส่งคืนเฉพาะ IP เช่น:

/sbin/ifconfig eth0 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}'

สำหรับ MAC:

ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\  -f2

หรือสำหรับระบบ linux

hostname -i | awk '{print $3}' # Ubuntu 

hostname -i # Debian

4
hostname -iบนของฉันมันกลับมา:::1 127.0.1.1 192.168.1.100
Book Of Zeus

1
บน Debian ฉันมีเพียงหนึ่ง ip ดังนั้นการใช้งานhostnameจึงไม่ใช่แบบพกพา
Timofey Stolbov

1
มันบอกว่า -i และ -I เป็นตัวเลือกที่ผิดกฎหมาย
เมสัน

3
โดยสรุป: วิธีแรกขึ้นอยู่กับอะแดปเตอร์ซึ่งไม่เหมือนกันเสมอไป อันที่สองสำหรับฉันแสดงที่อยู่ IP สองรายการและสองรายการสุดท้ายไม่ทำงานบน Mac
แมตต์

4
ifconfig เลิกใช้งานแล้วและไม่น่าเชื่อถือที่นี่เช่น grep ล้มเหลวบน debian 9 (stretch) เนื่องจากไม่ส่งออก "inet addr: 172.17.0.4" อีกต่อไป แต่จะส่งออกเฉพาะ "inet 172.17.0.4" ใช้ "IP" แทนตามที่อธิบายในstackoverflow.com/a/26694162/72717
jamshid

61

สิ่งนี้จะให้อินเทอร์เฟซ IPv4 ทั้งหมดรวมถึงลูปแบ็ค 127.0.0.1:

ip -4 addr | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

สิ่งนี้จะแสดงเฉพาะeth0:

ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

และด้วยวิธีนี้คุณจะได้รับที่อยู่ IPv6:

ip -6 addr | grep -oP '(?<=inet6\s)[\da-f:]+'

eth0IPv6 เท่านั้น:

ip -6 addr show eth0 | grep -oP '(?<=inet6\s)[\da-f:]+'

ความgrep -oPล้มเหลวใน busybox v1.24.1: ตัวเลือกที่ไม่ถูกต้อง - P
Pro Backup

1
grep ไม่ได้ติดตั้งบนตัวเทียบท่าทุกตัวสำหรับ prod ดังนั้นแม้ว่าคำสั่งเหล่านี้จะเป็นคำสั่งที่ดี แต่ก็จะไม่มีประโยชน์กับคอนเทนเนอร์ :-(
AndyGee

1
คำตอบที่ดีที่สุดสำหรับกรณีเฉพาะของฉัน คุณต้อง-Pเปลี่ยนสำหรับนิพจน์ทั่วไปของ Perl มิฉะนั้นเราไม่สามารถใช้(?<=inet\s)โทเค็นlookbehind ได้ คุณสามารถได้ผลลัพธ์ที่คล้ายกันโดยการเรียกใช้grep -oe 'inet [0-9\.]\+'หรือgrep -oe 'inet6 [0-9a-f:]\+'แต่วิธีนี้ฉันไม่สามารถกำจัดคำแรกได้ ใน SuSE man grepรายงานว่า-Pแฟล็กเป็นแบบทดลอง
Jorge Bellon

นี่คือคำตอบที่ดีที่สุด ifconfig เลิกใช้งานไปหลายปีแล้วในระบบปฏิบัติการส่วนใหญ่
pozcircuitboy

2
คำสั่งที่สองเวอร์ชันสั้นกว่า:ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
tukusejssirs

41

โดยทั่วไปจะไม่รับประกันว่าระบบจะมีที่อยู่ IP เพียงแห่งเดียวตัวอย่างเช่นคุณสามารถมีทั้งการเชื่อมต่ออีเธอร์เน็ตและ wlan และหากคุณมีการเชื่อมต่อ VPN ที่ใช้งานอยู่คุณจะมีที่อยู่ IP อื่น

ลินุกซ์

บน Linux hostname -Iจะแสดงรายการที่อยู่ IP ปัจจุบัน การใช้มันส่งคืนที่อยู่ IP เดียวมักจะไม่ทำงานตามที่คาดไว้ในบางสถานการณ์ (เช่นลิงก์ VPN เปิดใช้งาน) ดังนั้นวิธีที่น่าเชื่อถือกว่าคือการแปลงผลลัพธ์เป็นอาร์เรย์แล้ววนซ้ำองค์ประกอบ:

ips=($(hostname -I))

for ip in "${ips[@]}"
do
    echo $ip
done

OSX

บน OSX หากคุณรู้จักอินเทอร์เฟซคุณสามารถใช้:

~$ ipconfig getifaddr en0
192.168.1.123

ซึ่งจะส่งคืนเฉพาะที่อยู่ IP

หรือคุณสามารถวนซ้ำชื่ออินเทอร์เฟซที่เป็นไปได้โดยเริ่มต้นด้วยคำต่อท้ายเช่นen:

for NUMBER in $(seq 0 5); do
    ip=`ipconfig getifaddr en$NUMBER`
    if [ -n "$ip" ]; then
        myip="$ip"
        break
    fi
done

echo $myip

นอกจากนี้การรับที่อยู่ IP จะไม่สามารถกำหนดได้ในกรณีที่มีการเชื่อมต่อสายเคเบิลและ wifi เมื่อเครื่องมีอินเทอร์เฟซอีเธอร์เน็ตมากกว่าหนึ่งอินเทอร์เฟซหรือเมื่อมีอุโมงค์ VPN

รับ IP ภายนอก

หากคุณต้องการ IP ภายนอกคุณสามารถสอบถามบริการโหมดข้อความได้เช่นcurl https://ipecho.net/plainส่งคืนIP ภายนอกแบบข้อความธรรมดา

และวิธีที่เร็วยิ่งขึ้นในการรับ IP ภายนอกคือการค้นหาเซิร์ฟเวอร์ DNS ที่รู้จัก:

dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short

วิธีรับที่อยู่ IP LAN
diEcho

17
hostname -I  

คำสั่งนี้จะให้ที่อยู่ IP ที่แน่นอนตามที่คุณต้องการใน Ubuntu


เมื่อเทียบกับจำนวนคำตอบที่มีอยู่แล้ว (และได้รับการโหวตสูง) ฉันไม่คิดว่าคำตอบนี้จะเพิ่มมูลค่าใด ๆ ...
Mischa

4
นอกจากนี้ใน Centos hostname -I (ตัวพิมพ์ใหญ่ i)
zzapper

1
สิ่งนี้ช่วยฉันได้จริง - ตัวพิมพ์ใหญ่ 'i' ที่ระบุไว้เป็นกุญแจสำคัญ
ChronoFish

2
เช่นเดียวกันนี้ทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องใช้เครื่องมือพิเศษและไม่จำเป็นต้องเรียกไบนารีสิบห้ารายการติดต่อกันเพื่อล้างข้อมูลออก ขอบคุณ!
Ulrar

11

ในUbuntuเวอร์ชันล่าสุด( 14.04 - 16.04 ) คำสั่งนี้ใช้เคล็ดลับสำหรับฉัน

hostname -I | awk '{print $1}'

1
จากหน้าคู่มือ: "[... ] ตัวเลือกนี้จะระบุที่อยู่ที่กำหนดค่าไว้ทั้งหมดบนอินเทอร์เฟซเครือข่ายทั้งหมด [... ] อย่าตั้งสมมติฐานใด ๆ เกี่ยวกับลำดับของเอาต์พุต" ประโยคสุดท้ายบอกคุณว่าprint $1อาจให้ผลลัพธ์ที่ถูกต้องหรือไม่ก็ได้
0 0

7

หากคุณมีสภาพแวดล้อมที่ จำกัด คุณสามารถใช้คำสั่งนี้:

ip -4 addr show dev eth0 | grep inet | tr -s " " | cut -d" " -f3 | head -n 1

3
หรือแม้กระทั่ง:ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
Jose Alban

ใช่คุณถูก. แต่ระวังถ้า eth0 มีที่อยู่ IP มากกว่าหนึ่งรายการจะแสดงที่อยู่ทั้งหมด
caglar

bash-4.4 # ip -4 addr แสดง dev eth0 | grep inet | tr -s "" | ตัด -d "" -f3 | หัว -n 1 172.17.0.3/16 ดังนั้นไม่ดีกับ / 16
AndyGee

เพิ่มอีกหนึ่งในลูป: ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1. สำหรับทั้ง v4 และ v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
Sumit Murari

หากไม่รู้จักชื่ออินเทอร์เฟซ (หรือแตกต่างกันระหว่างแพลตฟอร์ม) แต่คุณค้นหาที่อยู่ IP ส่วนตัวแทนที่จะip -4 addr show eth0 | grep inetทำ a:ip -4 addr show | grep 192
cyberbird

6

ในการรับเฉพาะที่อยู่ IP บนMac OS Xคุณสามารถพิมพ์คำสั่งต่อไปนี้:

ipconfig getifaddr en0

4

คำสั่งifconfigถูกยกเลิกและคุณควรใช้ipคำสั่งบน Linux

นอกจากนี้ยังip aให้ขอบเขตในบรรทัดเดียวกับ IP เพื่อให้ใช้งานได้ง่ายขึ้น

คำสั่งนี้จะแสดง IP ส่วนกลาง (ภายนอก) ของคุณ:

ip a | grep "scope global" | grep -Po '(?<=inet )[\d.]+'

IPv4 ทั้งหมด (เช่น 127.0.0.1):

ip a | grep "scope" | grep -Po '(?<=inet )[\d.]+'

IPv6 ทั้งหมด (ด้วย :: 1):

ip a | grep "scope" | grep -Po '(?<=inet6 )[\da-z:]+'

4

เราสามารถใช้เพียง 2 คำสั่ง (ifconfig + awk) เพื่อรับ IP (v4) ที่เราต้องการดังนี้:

บน Linux สมมติว่าได้รับที่อยู่ IP จากeth0อินเทอร์เฟซให้รันคำสั่งต่อไปนี้:

/sbin/ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'

บน OSX สมมติว่าได้รับที่อยู่ IP จากen0อินเทอร์เฟซให้รันคำสั่งต่อไปนี้:

/sbin/ifconfig en0 | awk '/inet /{print $2}'

หากต้องการทราบ IP สาธารณะ / ภายนอกของเราให้เพิ่มฟังก์ชันนี้ใน ~/.bashrc

whatismyip () {
    curl -s "http://api.duckduckgo.com/?q=ip&format=json" | jq '.Answer' | grep --color=auto -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
}

จากนั้นเรียกใช้ whatismyip


4

ในการพิมพ์เฉพาะที่อยู่ IP ของeth0โดยไม่มีข้อความอื่น:

ifconfig eth0 | grep -Po '(?<=inet )[\d.]+'

ในการตรวจสอบอินเทอร์เฟซหลักของคุณ (เนื่องจากอาจไม่ใช่ "eth0") ให้ใช้:

route | grep ^default | sed "s/.* //"

สองบรรทัดข้างต้นสามารถรวมเป็นคำสั่งเดียวได้ดังนี้:

ifconfig `route | grep ^default | sed "s/.* //"` \
  | grep -Po '(?<=inet )[\d.]+'

3

ฉันต้องการอะไรง่ายๆที่ใช้เป็นนามแฝง Bash ฉันพบว่าhostname -Iทำงานได้ดีที่สุดสำหรับฉัน (ชื่อโฮสต์ v3.15) hostname -iส่งคืน IP แบบวนกลับด้วยเหตุผลบางประการ แต่hostname -Iให้ IP ที่ถูกต้องสำหรับ wlan0 และไม่ต้องไพพ์เอาต์พุตผ่าน grep หรือ awk ข้อเสียเปรียบคือhostname -Iจะส่งออกIP ทั้งหมดหากคุณมีมากกว่าหนึ่ง


2

นั่นจะทำเคล็ดลับใน Mac:

ping $(ifconfig en0 | awk '$1 == "inet" {print $2}')

ที่แก้ไขping 192.168.1.2ในเครื่องของฉัน

เคล็ดลับสำหรับมืออาชีพ : $(...)หมายถึงเรียกใช้สิ่งที่อยู่ในวงเล็บใน subshell และส่งกลับเป็นค่า


2

นอกจากman hostnameนี้ยังมีวิธีที่ง่ายกว่าซึ่งจะไม่รวม IP แบบวนกลับโดยอัตโนมัติและแสดงเฉพาะรายการที่คั่นด้วยช่องว่างของทั้งหมดที่กำหนดให้กับที่อยู่ IP ของโฮสต์:

root@srv:~# hostname --all-ip-addresses
11.12.13.14 192.168.15.19 

root@srv:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
  link/void 
  inet 11.12.13.14/32 scope global venet0:0
  inet 192.168.15.19/32 scope global venet0:1

2

คุณยังสามารถใช้คำสั่งต่อไปนี้:

ip route | grep src

หมายเหตุ:สิ่งนี้จะใช้ได้เฉพาะเมื่อคุณมีการเชื่อมต่อกับอินเทอร์เน็ต


2

คำตอบไม่กี่ปรากฏจะใช้ใหม่ipคำสั่ง (แทนifconfig) เพื่อให้ที่นี่เป็นหนึ่งที่ใช้ip addr, grepและawkเพียงแค่พิมพ์ที่อยู่ IPv4 ที่เกี่ยวข้องกับwlan0อินเตอร์เฟซ:

ip addr show wlan0|grep inet|grep -v inet6|awk '{print $2}'|awk '{split($0,a,"/"); print a[1]}'

แม้ว่าจะไม่ใช่โซลูชันที่กะทัดรัดหรือหรูหราที่สุด แต่ก็เป็น (เนื้อหา) ที่เข้าใจง่าย (ดูคำอธิบายด้านล่าง) และแก้ไขเพื่อวัตถุประสงค์อื่นเช่นรับ 3 อ็อกเต็ตสุดท้ายของที่อยู่ MAC ดังนี้:

ip addr show wlan0|grep link/ether|awk '{print $2}'|awk '{split($0,mac,":"); print mac[4] mac[5] mac[6]}'

คำอธิบาย: ip addr show wlan0เอาต์พุตข้อมูลที่เกี่ยวข้องกับอินเตอร์เฟสเครือข่ายที่ชื่อwlan0ซึ่งควรจะคล้ายกับสิ่งนี้:

4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:04:06:ab brd ff:ff:ff:ff:ff:ff
    inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::d340:5e4b:78e0:90f/64 scope link 
       valid_lft forever preferred_lft forever

ถัดไปgrep inetฟิลเตอร์ออกเส้นที่ไม่ได้มี "inet" (IPv4 และ IPv6 การตั้งค่า) และgrep -v inet6ฟิลเตอร์ออกเส้นที่เหลือที่ทำมี "inet6" ซึ่งจะส่งผลให้เป็นเส้นเดียวเช่นนี้:

    inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0

ในที่สุดโปรแกรมแรกจะawkแยกฟิลด์ "172.18.18.1/24" และอันที่สองจะลบชวเลขมาสก์เครือข่ายออกโดยเหลือเพียงที่อยู่ IPv4

นอกจากนี้ฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงว่าหากคุณกำลังเขียนสคริปต์มักจะมีเครื่องมือที่สมบูรณ์กว่าและ / หรือมีประสิทธิภาพมากกว่ามากมายสำหรับการรับข้อมูลนี้ซึ่งคุณอาจต้องการใช้แทน ตัวอย่างเช่นถ้าใช้ Node.js ก็มีipaddr-linuxถ้าใช้ Ruby ก็มีlinux-ip-parserเป็นต้น

ดูเพิ่มเติมที่/unix/119269/how-to-get-ip-address-using-shell-script



1

นี่คือเวอร์ชันของฉันซึ่งคุณสามารถส่งผ่านรายการอินเทอร์เฟซโดยเรียงลำดับตามลำดับความสำคัญ:

getIpFromInterface()
{
    interface=$1
    ifconfig ${interface}  > /dev/null 2>&1 && ifconfig ${interface} | awk -F'inet ' '{ print $2 }' | awk '{ print $1 }' | grep .
}

getCurrentIpAddress(){
    IFLIST=(${@:-${IFLIST[@]}})
    for currentInterface in ${IFLIST[@]}
    do
        IP=$(getIpFromInterface  $currentInterface)
        [[ -z "$IP" ]] && continue
    echo ${IP/*:}
    return
    done
}

IFLIST=(tap0 en1 en0)
getCurrentIpAddress $@

ดังนั้นหากฉันเชื่อมต่อกับ VPN, Wifi และอีเธอร์เน็ตที่อยู่ VPN ของฉัน (บนอินเทอร์เฟซ tap0) จะถูกส่งคืน สคริปต์ทำงานได้ทั้งบน linux และ osx และสามารถรับอาร์กิวเมนต์ได้หากคุณต้องการแทนที่ IFLIST

โปรดทราบว่าหากคุณต้องการใช้ IPV6 คุณจะต้องแทนที่ 'inet' ด้วย 'inet6'


1

ฉันมักจะต้องการสิ่งนี้ในเวลาที่ไม่คาดคิดที่สุดและโดยไม่ล้มเหลวให้ค้นหาเธรดแบบนี้ใน SO ดังนั้นฉันจึงเขียนสคริปต์ง่ายที่จะได้รับอยู่ IPv4 ผ่าน netstat เรียกว่าechoip- คุณสามารถพบได้ที่นี่ bash สำหรับที่อยู่เครือข่ายมีลักษณะเช่นนี้มันยังรับที่อยู่สาธารณะของคุณจาก ipecho.net:

IPV4='\d+(\.\d+){3}'
INTERFACES=`netstat -i | grep -E "$IPV4" | cut -d ' ' -f 1`
INTERFACE_IPS=`netstat -i | grep -oE "$IPV4"`

for i in "${!INTERFACES[@]}"; do
  printf "%s:\t%s\n" "${INTERFACES[$i]}" "${INTERFACE_IPS[$i]}"
done

echoipสคริปต์ผลผลิตออกเช่นนี้:

$ echoip
public: 26.106.59.169
en0:    10.1.10.2

1

ใช้สคริปต์บรรทัดเดียวนี้: ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}' mac & linux (ทดสอบใน ubuntu) ทั้งสองทำงาน


ดีที่ใช้งานได้ทั้งสองอย่าง นอกจากนี้คุณสามารถโทรหาifconfig en0หรือifconfig eth1อื่น ๆ ได้หากคุณรู้จักอินเทอร์เฟซที่คุณต้องการ :)
jaygooby

1

ฉันไม่ต้องการใช้awkและในสคริปต์ .. ipมีตัวเลือกในการส่งออกเป็น JSON

หากคุณออกไป$interfaceคุณจะได้รับที่อยู่ IP ทั้งหมด:

ip -json addr show $interface | \
  jq -r '.[] | .addr_info[] | select(.family == "inet") | .local'

ฉันชอบวิธีผลลัพธ์ของคำสั่งในรูปแบบโครงสร้าง json เช่นคำสั่ง ip นี่เป็นอีกวิธีหนึ่งในการรับที่อยู่ IP ที่คล้ายกับด้านบน bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
Jack Liu Shurui



0
#!/bin/sh
# Tested on Ubuntu 18.04 and Alpine Linux 
# List IPS of following network interfaces:
# virtual host interfaces
# PCI interfaces
# USB interfaces
# ACPI interfaces
# ETH interfaces
for NETWORK_INTERFACE in $(ls /sys/class/net -al | grep -iE "(/eth[0-9]+$|vif|pci|acpi|usb)" | sed -E "s@.* ([^ ]*) ->.*@\1@"); do 
    IPV4_ADDRESSES=$(ifconfig $NETWORK_INTERFACE | grep -iE '(inet addr[: ]+|inet[: ]+)' | sed -E "s@\s*(inet addr[: ]+|inet[: ]+)([^ ]*) .*@\2@")
    IPV6_ADDRESSES=$(ifconfig $NETWORK_INTERFACE | grep -iE '(inet6 addr[: ]+|inet6[: ]+)' | sed -E "s@\s*(inet6 addr[: ]+|inet6[: ]+)([^ ]*) .*@\2@")
    if [ -n "$IPV4_ADDRESSES" ] || [ -n "$IPV6_ADDRESSES" ]; then
        echo "NETWORK INTERFACE=$NETWORK_INTERFACE"
        for IPV4_ADDRESS in $IPV4_ADDRESSES; do 
            echo "IPV4=$IPV4_ADDRESS"
        done
        for IPV6_ADDRESS in $IPV6_ADDRESSES; do 
            echo "IPV6=$IPV6_ADDRESS"
        done
    fi
done

0

เมื่อค้นหาที่อยู่ IP ภายนอกของคุณบนโฮสต์ NATed คำตอบไม่กี่คำแนะนำให้ใช้วิธีการตาม HTTP ifconfig.meเช่น:

$ curl ifconfig.me/ip

ในช่วงหลายปีที่ผ่านมาฉันได้เห็นไซต์เหล่านี้จำนวนมากไปมาฉันพบว่าวิธีการตาม DNS นี้มีประสิทธิภาพมากกว่า:

$ dig +short myip.opendns.com @resolver1.opendns.com

ฉันมีนามแฝงที่มีประโยชน์นี้ใน~/.bashrc:

alias wip='dig +short myip.opendns.com @resolver1.opendns.com'

0

สองวิธีนี้ใช้ได้ผลสำหรับฉัน:

เพื่อรับที่อยู่ IP ของอินเทอร์เฟซของคุณ eth0. แทนที่ eth0 ในตัวอย่างด้านล่างด้วยชื่ออินเทอร์เฟซของคุณ ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "

การใช้ชื่อโฮสต์: สิ่งนี้จะทำให้คุณมี IPAddress ของ etho ของคุณ การใช้ -I จะให้ค่า inet ของอินเทอร์เฟซทั้งหมดไม่ว่าจะมีค่านี้อยู่ก็ตาม

hostname -i


-1
curl ifconfig.co 

สิ่งนี้จะส่งคืนเฉพาะที่อยู่ IP ของระบบของคุณ


1
สิ่งนี้ต้องใช้การเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้และจะส่งคืนที่อยู่ IP ที่เปิดเผยต่อสาธารณะซึ่งอาจใช่หรือไม่ใช่สิ่งที่คุณต้องการ
jlh

-2

ฉันจะใช้Hostname -Lเพื่อรับ IP เพื่อใช้เป็นตัวแปรในสคริปต์


บางทีคุณอาจจะพยายามพูดhostname -iหรือhostname -I?
jlh

user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$ 1. ทุนHไม่ถูกต้อง 2. ไม่มีเช่นนั้น-L
Sabrina
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.