123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- #****************************************************************#
- # Create Date: 2017-01-06 17:58
- #***************************************************************#
- import socket
- import shutil
- from time import gmtime, strftime
- # get host_name
- host_name = socket.gethostname()
- tmp_file = "/tmp/.lark-fix-host.hosts"
- host_file = "/etc/hosts"
- bak_file_name = "/tmp/hosts-fix-bak.%s" % ( strftime("%Y-%m-%d_%H-%M-%S", gmtime()) )
- # load /etc/hosts file context
- FH = open(host_file,"r")
- file_lines = [ i.rstrip() for i in FH.readlines()]
- FH.close()
- file_lines_reverse = file_lines[::-1]
- new_lines = []
- bad_lines = []
- last_match_line = ""
- for line in file_lines_reverse:
- if line.find(host_name) < 0: # 不匹配的行直接跳过
- new_lines.append(line + "\n")
- continue
- cols = line.split()
- new_cols = []
- if cols[0].startswith("#"): # 跳过已经注释掉的行
- new_lines.append(line + "\n")
- continue
- for col in cols:
- if not col == host_name: # 跳过不匹配的列
- new_cols.append(col)
- continue
- if cols[0] == "127.0.0.1": # 如果第一列是 127.0.0.1 就跳过匹配的列, 防止 hostname -i 返回 127.0.0.1
- continue
- # 如果已经发现过匹配的列, 就丢掉重复的列
- if not len(last_match_line) == 0:
- continue
- new_cols.append(col)
- last_match_line = line
- # 跳过 xx.xx.xx.xx hostname 这样的重复列
- if len(new_cols) == 1:
- continue
- new_l = "%s\n" % " ".join(new_cols)
- new_lines.append(new_l)
- # save tmp hosts
- FH2=file(tmp_file,"w+")
- FH2.writelines( new_lines[::-1])
- FH2.close()
- # mv to /etc/hosts
- shutil.copy(host_file, bak_file_name)
- shutil.move(tmp_file, host_file)
|