Ubuntu 20.04服务器批量替换全文件(含root权限文件)内旧IP为新IP的命令求助
Ubuntu 20.04服务器批量替换全文件(含root权限文件)内旧IP为新IP的命令求助
兄弟,太懂你这种换IP要挨个扒配置文件的痛苦了——手动排查不仅耗时间,还极容易漏掉某个文件导致服务出问题。不用纠结grep,咱们用find+sed的组合就能搞定批量替换,而且能轻松处理root权限的文件,下面给你详细步骤:
第一步:先做好备份(重中之重!)
不管操作多熟练,替换前一定要留好后路。下面的命令会自动给每个修改的文件生成.bak后缀的备份,等确认替换没问题后再清理备份即可。
第二步:定义旧IP和新IP
先把要替换的IP定义成变量,方便你修改,重点注意:旧IP里的每个点要加反斜杠转义(因为正则里.代表任意字符,不转义会误匹配其他内容):
OLD_IP="192\.168\.1\.100" # 换成你的旧IP,记得每个点前面加\ NEW_IP="10.0.0.200" # 换成你的新IP,这里不需要转义
第三步:执行批量替换命令
这条命令会遍历系统内大部分文件(特意排除了/proc、/sys这类系统动态生成文件的目录,避免报错),匹配你提到的.conf、.bak、.txt以及其他所有类型的文件,批量替换旧IP为新IP:
sudo find / -type f \( -name "*.conf" -o -name "*.bak" -o -name "*.txt" -o -name "*" \) -not \( -path "/proc/*" -o -path "/sys/*" -o -path "/dev/*" -o -path "/run/*" \) -exec sed -i.bak "s/$OLD_IP/$NEW_IP/g" {} \;
命令各部分解释:
sudo:获取root权限,才能访问系统深层的配置文件find /:从根目录开始搜索所有文件-type f:只处理普通文件,跳过目录\( -name "*.conf" -o -name "*.bak" -o -name "*.txt" -o -name "*" \):匹配你提到的后缀文件,最后-name "*"是匹配所有其他类型文件,如果只想替换指定后缀,可以删掉这部分-not \( ... \):排除系统临时/动态目录,这些目录里的文件不需要修改,强行修改会报错-exec sed -i.bak "s/$OLD_IP/$NEW_IP/g" {} \;:对每个找到的文件执行sed替换,-i.bak会生成备份文件,g代表全局替换(一行里出现多次旧IP都会替换)
额外建议:先测试再替换
如果担心替换出错,可以先执行测试命令,只输出匹配到的行,不修改文件:
sudo find / -type f \( -name "*.conf" -o -name "*.bak" -o -name "*.txt" -o -name "*" \) -not \( -path "/proc/*" -o -path "/sys/*" -o -path "/dev/*" -o -path "/run/*" \) -exec sed -n "s/$OLD_IP/$NEW_IP/gp" {} \;
确认输出的内容都是你想要替换的,再执行正式的替换命令。
替换完成后的清理
如果确认所有替换都正确,可以用下面的命令删除所有生成的.bak备份文件:
sudo find / -name "*.bak" -delete
备注:内容来源于stack exchange,提问作者DanRan




