GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプトを使用して /etc/hosts ファイルに行を追加します

Mac を使用している場合、またはこれに sudo 権限が必要な場合は、これを試してください:

sudo -- sh -c -e "echo '192.34.0.03   subdomain.domain.com' >> /etc/hosts";

引き続きパスワードを要求されます。

@kainjow からの別の方法

echo '192.34.0.03 subdomain.domain.com' | sudo tee -a /etc/hosts

-i を必ず使用してください sed のオプション .

-i[SUFFIX], --in-place[=SUFFIX]
  edit files in place (makes backup if extension supplied)

sed -i "2i192.241.xx.xx  venus.example.com venus" /etc/hosts

そうでなければ、

echo "192.241.xx.xx  venus.example.com venus" >> /etc/hosts

ファイルの最後に行を追加すると、期待どおりに機能します。


エントリの挿入/更新

ホスト エントリを bash を使用してプログラムで挿入/更新する場合は、そのために私が書いたスクリプトを次に示します。

#!/bin/bash

# insert/update hosts entry
ip_address="192.168.x.x"
host_name="my.hostname.example.com"
# find existing instances in the host file and save the line numbers
matches_in_hosts="$(grep -n $host_name /etc/hosts | cut -f1 -d:)"
host_entry="${ip_address} ${host_name}"

echo "Please enter your password if requested."

if [ ! -z "$matches_in_hosts" ]
then
    echo "Updating existing hosts entry."
    # iterate over the line numbers on which matches were found
    while read -r line_number; do
        # replace the text of each line with the desired host entry
        sudo sed -i '' "${line_number}s/.*/${host_entry} /" /etc/hosts
    done <<< "$matches_in_hosts"
else
    echo "Adding new hosts entry."
    echo "$host_entry" | sudo tee -a /etc/hosts > /dev/null
fi

このスクリプトは OS X での使用を意図していますが、少し調整するだけで Linux でも動作します。


Linux
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. シェルスクリプトでバッファにデータを追加する方法は?

  3. 関数とパラメータを変数として持つシェルスクリプト?

  1. /etc/shadow および /etc/passwd ファイルの変更を Auditd で監視するにはどうすればよいですか?

  2. Linux の /etc/hosts ファイルについて

  3. シェル スクリプトを使用してユーザーを sudoers に追加する

  1. bash の改行でテキストをエコーする

  2. echo または print /dev/stdin /dev/stdout /dev/stderr

  3. /etc/hosts と /etc/resolv.conf の違い