3

シェル スクリプトで、指定されたホスト名が localhost であるかどうかを検証する方法

例えば ​​:-

localhost
127.0.0.1
myhostname.com
::1

すべてが同じマシン名に属しています, 特定のホスト名が localhostname ファミリーに属していることを識別する方法はありますか?

4

3 に答える 3

1

通常、すべてのローカル ホスト名は /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'
于 2013-01-15T14:28:16.520 に答える
0

以下を使用して、指定されたホスト名が 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」と比較します。

于 2015-07-20T12:10:24.980 に答える
0

あなたはチェックすることができます

sysctl kernel.hostname

すなわち

sysctl kernel.hostname | grep -c "my_hostname"
于 2013-01-15T15:05:28.410 に答える