0

特定の書式設定が必要なホスト ファイル内の重複行を削除する方法があるかどうかを知りたいです。これは、最初の部分をそのままにしておく必要があることを意味する例ですが、2 番目の部分では、他のすべての行と比較してすべての行が必要であり、ファイルがほぼ 1GB であるため、重複を削除する必要があります。

また、誰もが提案するスクリプトを使用して、ping を使用して 2 番目の部分のすべての行をインターネット上に存在するかどうかを確認し、存在しない場合は削除して、この編集されたすべての情報を新しいファイル名に配置できます。

{FIRST PART}  {SECOND PART}
 127.0.0.1        WWW.BLAHDOTTEST,COM
 127.0.0.1        WWW.HHHHHH.COM 
 127.0.0.1        WWW.JJJJJJ.COM
 127.0.0.1        WWW.PPPPPPP.COM
 127.0.0.1        WWW.BLAHDOTTEST,COM
 127.0.0.1        WWW.HHHHHH.COM 

したがって、これらのアドレスがすべて有効なものであると仮定すると、新しいファイルは次のようになります。

{FIRST PART}  {SECOND PART}
 127.0.0.1        WWW.BLAHDOTTEST,COM
 127.0.0.1        WWW.JJJJJJ.COM
 127.0.0.1        WWW.PPPPPPP.COM
 127.0.0.1        WWW.HHHHHH.COM 

御時間ありがとうございます。

4

1 に答える 1

1

もちろん。

sort -u /etc/hosts > /tmp/hosts.new && mv /tmp/hosts.new /etc/hosts

これは、自分がマシンを制御しており、他のユーザーが /tmp 内のファイルを改ざんしないことがわかっていることを前提としています。

ping について: ループバック インターフェイスを指しているホスト ファイルにそれらがあることを考えると、それは不可能です。ホスト内のものは常に有効です。(破棄しない限り、すべてが失敗します。)

ファンキーな大きな hosts ファイルなしで数分間実行できる場合は、邪魔にならないように (システム関連のエントリを残して) mv し、重複が既に取り出されている場合は、次のような素朴なことを行うことができます。

自分のユーザーとして、次の操作を行います。

vi cleaner
i
<copy & paste script now>
ESC
:wq
chmod +x cleaner
cp /etc/hosts .
./cleaner

完了したら、(自宅で) newfile を見てください。よろしければ、/etc/hosts にコピーしてください。

sudo cp newfile /etc/hosts

これはcleanに入るものです:

#!/bin/bash
while read line
do
  IP=$( echo $line| awk '{print $2}' )
  if $( ping -c 1 -W 2 $IP >> errors 2>&1 ); then
    echo $line >> newfile
  fi 
done < hosts

PS: Linux/Unix ボックスを保守するつもりなら、基本的なことを学ぶべき時です。

于 2013-04-28T18:03:29.323 に答える