在shell腳本如何驗證如果給定主機名爲localhost在一個shell腳本如何驗證,如果給定主機名屬於localhostname家庭
例如: -
localhost
127.0.0.1
myhostname.com
::1
都屬於到同一臺機器的名字,有沒有什麼辦法,以確定一個給定主機名屬於localhostname家庭
在shell腳本如何驗證如果給定主機名爲localhost在一個shell腳本如何驗證,如果給定主機名屬於localhostname家庭
例如: -
localhost
127.0.0.1
myhostname.com
::1
都屬於到同一臺機器的名字,有沒有什麼辦法,以確定一個給定主機名屬於localhostname家庭
通常所有本地主機的名字都在/ etc/hosts文件:
grep -c machine_name /etc/hosts
如果機器名是本地主機之間的上述收益大於或等於1的命令,否則爲0。
例如:
grep -c myhostname.com /etc/hosts
1
grep -c google.com /etc/hosts
0
不知道這是否正是你要找的,但我希望這會有所幫助。
請注意部分匹配,例如,如果您在/ etc/hosts grep -c host
中的'myhost'也將返回1。在這種情況下,您需要使用正則表達式或使用cut,awk和類似工具解析/ etc/hosts文件。或者使用下面的命令:
grep -c '\bmachine name\b'
要跳過註釋使用下面的命令:
grep -v '^#.*' /etc/hosts | grep -c machine_name
充滿命令
grep -v '^#.*' /etc/hosts | grep -c '\bmachine_name\b'
你可以檢查
sysctl kernel.hostname
即
sysctl kernel.hostname | grep -c "my_hostname"
我使用以下方法來檢查提供的主機名是否是相同的爲localhost:
hostname_ip(){
host "$1" | sed -e 's/.* \([^ ]*[^ .]\)\.*$/\1/'
}
normalize_hostname(){
local normalized="$1"
grep -q "^\(\([0-9]{1,3}\)\.\)\{3\}\([0-9]{1,3}\)$" <<< "$normalized" || normalized="$(hostname_ip "$normalized")"
normalized="$(hostname_ip "$normalized")"
echo "$normalized"
}
myname="$(normalize_hostname "$(hostname)")"
argname="$(normalize_hostname "$1")"
if [[ "$myname" == "$argname" || "$argname" == "localhost" ]]; then
...
首先,歸一化參數供給到由宿主效用通過運行兩次設置格式。如果提供IP地址 - 通過正則表達式檢查 - 只運行一次。
然後將該值與主機名實用程序或字符串「localhost」的標準化值進行比較。
非常不可靠。 –
@Ignacio:我已經更新了答案,認爲你的意思是這個問題。 – AlecTMH
這不會起作用,在像#google.com這樣的場景中,這是在/ etc/hosts – anish