วิธีการตั้งค่า / etc / ปัญหาเพื่อแสดงที่อยู่ IP สำหรับ eth0


12

ฉันมีลินุกซ์เสมือนสองเครื่องที่มีอินเทอร์เฟซบริดจ์และฉันต้องการที่อยู่ IP ของเครื่องเพื่อแสดงหลังจากการบู๊ตเครื่อง (ในการเข้าสู่ระบบซึ่งมักจะแสดงรีลีสและเคอร์เนล)

จากสิ่งที่ฉันสามารถบอกได้ว่าข้อความถูกหยิบขึ้นมาจาก / etc / ปัญหา แต่ฉันไม่แน่ใจว่าจะเขียนเมื่อไหร่และอย่างไร


เฮ้บรูโน่คุณเปลี่ยนคำตอบที่ยอมรับเป็น PabloC ได้ไหม? คำตอบของเขายอดเยี่ยมมาก การค้นหาเอกสารสำหรับสิ่งนี้ยากมากและคำตอบของเขานั้นสมบูรณ์มาก
ปีเตอร์เซนนา

คำตอบ:


13

มันเป็นเพียงไฟล์ข้อความ ... คุณเขียนมันในแบบเดียวกับที่คุณส่งข้อความไปยังไฟล์ด้วยเชลล์สคริปต์อื่น ๆ สิ่งนี้จะแทนที่ / etc / ปัญหาด้วยที่อยู่ IP ของคุณ:

ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue

เห็นได้ชัดว่าคุณสามารถทำให้สิ่งนี้ซับซ้อนมากขึ้นโดยพลการขึ้นอยู่กับข้อมูลที่คุณต้องการใน/etc/issueไฟล์ของคุณ

คุณสามารถเขียนไฟล์นี้ในโลคัล /etc/rc.d/rc.local ของคุณ (ซึ่งโดยทั่วไปจะเรียกใช้งานหลังจากสคริปต์เริ่มต้นอื่น ๆ ทั้งหมด)


5
Linuxy มากขึ้นเล็กน้อยที่จะบอกว่าip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Sorpigal

ฉันไม่แน่ใจว่ามันเป็นลินุกซ์มากขึ้น แต่ใช่ว่ามันทำงานได้ดีเช่นกัน
larsks

1
@larks: มันเป็น linuxy มากกว่าเพราะใน linux ipเป็นเครื่องมือที่คุณควรใช้กับสิ่งเหล่านี้ ifconfigในทางเทคนิคเป็นเพียงความเข้ากันได้
Sorpigal

34

บนCentOS 7และDebian 8 (และอื่น ๆ เช่นกัน) เพียงต่อท้ายบรรทัดต่อไปนี้/etc/issue

My IP address: \4

และจะแก้ไขไปยังที่อยู่ IPv4 ของเครื่อง หากคุณมีอินเตอร์เฟซเครือข่ายหลายตัวและคุณต้องการเลือกอย่างใดอย่างหนึ่งคุณสามารถระบุด้วย

My IP address: \4{eth0}

ตรวจสอบman gettyรายการของ escape sequences ที่สนับสนุนในการแจกจ่ายของคุณ


ใช้งานได้กับ CentOS 8 :)
Orsiris de Jong

สิ่งนี้ทำงานได้อย่างสมบูรณ์บน Centos 7 vm ของฉัน
เควินเมสัน

6

สคริปต์นี้จะเพิ่ม / ลบที่อยู่ IP ไปยัง / จาก/etc/issueไฟล์ตามที่ต้องการ:

#!/bin/sh
PREFIX="Local IP addresses:"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tr "\n" " ")

perl -i -p -0777 -e "s/^$PREFIX[^\n]*\n\n//m; s/$/\n$PREFIX $IPADDRS\n/ if length('$IPADDRS')>6" /etc/issue

หากคุณใช้ Distrobased Debian ทางที่ดีควรวางสคริปต์ไว้ที่ตำแหน่งเหล่านี้:

/etc/network/if-up.d/update-issue
/etc/network/if-post-down.d/update-issue

วิธีนี้สคริปต์จะถูกดำเนินการทุกครั้งที่อินเทอร์เฟซปรากฏขึ้นหรือลง การวางลงใน/etc/rc.d/rc.localนั้นมีข้อเสียของ beeing ที่ดำเนินการเพียงครั้งเดียวในระหว่างการบูต


3
สำหรับทุกคนที่ค้นหาใน Red Hat / CentOS / etc /sbin/if{up,down}-localสคริปต์นี้จะเป็น (หากมีอยู่ก็จะถูกเรียกใช้/etc/sysconfig/network-scripts/ip{up,down}-post)
Aaron Copley

@powpow: ทำไม "ที่อยู่ IP ท้องถิ่น" --all-ip-addressesเอาท์พุทยังที่อยู่ IP "สาธารณะ" อาจเป็นเช่น "ที่อยู่ IP ของอินเทอร์เฟซภายนอกทั้งหมดของโฮสต์นี้:" เหมาะสมกว่า
ypid

4

คุณสามารถเขียนได้ครั้งเดียว น่าเสียดายที่ไม่มี getty escape sequence เพื่อแสดงที่อยู่ ip ของ eth0 แต่มี escape sequence ที่คุณสามารถใช้ใน / etc / issue เพื่อแสดงชื่อโฮสต์: \ n

คุณสามารถตั้งค่า IP ของเครื่องใน / etc / issue แบบคงที่ได้เสมอโดยเขียนลงในไฟล์โดยตรง ระวังว่าไฟล์ /etc/issue.net จะใช้สำหรับการเข้าสู่ระบบจากระยะไกลดังนั้นคุณอาจต้องการแก้ไขมันเช่นกัน

อย่างไรก็ตามหลังจากทำงานในหน้าต่างเทอร์มินัลคุณจะหลวมหน้าจอเริ่มต้นและข้อมูลที่อยู่ ip / โฮสต์ด้วย วิธีที่ดีที่สุดคือการตั้งชื่อโฮสต์ในพรอมต์ (ส่วนใหญ่ linux distros ทำ) โดยใช้ \ h หรือ \ H หรืออีกครั้งการตั้งค่าที่อยู่ IP แบบคงที่คุณรู้ว่าตั้งอยู่บนโฮสต์ในตัวแปร PS1 คุณสามารถตั้งค่าตัวแปร PS1 ใน / etc / โปรไฟล์บน distros linux ส่วนใหญ่


1
แค่นี้ก็รู้ว่าสิ่งที่ IP เพื่อเชื่อมต่อไปหลังจากบูต VM เพื่อตั้งขึ้นเป็น larsks บอกว่าเป็นพอ :)
บรูโน่โลเปส

1

ขอบคุณ @larsks สำหรับการเริ่มต้น ฉันพบว่าฉันมีปัญหากับการเขียนสคริปต์ให้เสร็จก่อนที่จะต้องการไฟล์ปัญหาของฉันจึงว่างเปล่าเสมอ ดังนั้นฉันจึงเพิ่มการหยุดชั่วคราว 1 วินาทีและวนซ้ำ ฉันไม่ใช่สแคปเตอร์นักทุบตีจริงๆดังนั้นหากมีวิธีที่ดีกว่าในการทำสิ่งนี้โปรดแจ้งให้เราทราบ ฉันได้เพิ่มCOUNTเพื่อให้แน่ใจว่ามันไม่วนซ้ำตลอดไป

#!/bin/sh

COUNT=1

while [ $COUNT -lt 10 ]
do
  echo $COUNT

  COUNT=$((COUNT + 1))
  IP=`ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: `
  if [ -n "$IP" ]; then
    break
  fi 
  sleep 1
done


echo "IP: " $IP | cat > /etc/issue

/etc/network/if-up.d/ฉันวางสคริปต์นี้ใน


1

Systemd ทำให้เรื่องนี้ค่อนข้างง่าย systemctl edit getty@ด้วยเนื้อหาที่ชอบ:

[Service]
ExecStartPre=-/bin/bash -c '[ ! -f /etc/.issue.orig ] && cp /etc/issue /etc/.issue.orig; int=`ls /sys/class/net|grep enp|head -1`; sed -r "s/\\\\\\n/[\\\\\\4\{$$int\}]/" < /etc/.issue.orig > /etc/issue'

แล้วก็ systemctl daemon-reload && systemctl restart getty@tty1


0

สำหรับทุกคนที่มาที่นี่ที่ใช้ Ubuntu 19.04 ฉันลงเอยด้วยการนำคำตอบของ @ powpow มาใช้

ฉันสร้างไฟล์: /etc/network/if-up.d/update-issueโดยมีเนื้อหาดังต่อไปนี้:

#!/bin/sh
PREFIX="Ubuntu 19.04 - dev"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n | head -1 | tr "\n" " ")
echo "$PREFIX\n\nIP: $IPADDRS\n" > /etc/issue

จากนั้นฉันทำเครื่องหมายไฟล์เป็นไฟล์เรียกทำงาน: chmod 0755 /etc/network/if-up.d/update-issue

ใช้งานได้ดี!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.