シェル スクリプトで、指定されたホスト名が localhost であるかどうかを検証する方法
例えば :-
localhost
127.0.0.1
myhostname.com
::1
すべてが同じマシン名に属しています, 特定のホスト名が localhostname ファミリーに属していることを識別する方法はありますか?
シェル スクリプトで、指定されたホスト名が localhost であるかどうかを検証する方法
例えば :-
localhost
127.0.0.1
myhostname.com
::1
すべてが同じマシン名に属しています, 特定のホスト名が localhostname ファミリーに属していることを識別する方法はありますか?
通常、すべてのローカル ホスト名は /etc/hosts ファイルにあります。
grep -c machine_name /etc/hosts
マシン名が localhost にある場合、上記のコマンドは 1 以上を返し、そうでない場合は 0 を返します。
例えば:
grep -c myhostname.com /etc/hosts
1
grep -c google.com /etc/hosts
0
これがまさにあなたが探しているものかどうかはわかりませんが、お役に立てば幸いです。
部分一致に注意してください。たとえば、/etc/hosts に 'myhost' がある場合grep -c host
、同様に 1 が返されます。この場合、正規表現を使用するか、/etc/hosts ファイルをカット、awk、および同様のツールで解析する必要があります。または、次のコマンドを使用します。
grep -c '\bmachine name\b'
コメントをスキップするには、次のコマンドを使用します。
grep -v '^#.*' /etc/hosts | grep -c machine_name
完全なコマンドは
grep -v '^#.*' /etc/hosts | grep -c '\bmachine_name\b'
以下を使用して、指定されたホスト名が 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
...
最初に、指定されたパラメーターをホストユーティリティで設定された形式に正規化し、2 回実行します。IP アドレスが指定されている場合 (正規表現で確認)、一度だけ実行します。
次に、値をホスト名ユーティリティの正規化された値または文字列「localhost」と比較します。
あなたはチェックすることができます
sysctl kernel.hostname
すなわち
sysctl kernel.hostname | grep -c "my_hostname"