求助:在EC2 Ubuntu实例中用sed替换行并跳过注释行的正确语法
嘿,我懂你现在的麻烦——用find+sed修改java.security的时候顺顺利利,结果要恢复默认值的时候卡壳了对吧?别着急,咱们分情况来解决:
1. 如果你提前备份了原始文件(最稳妥的方案)
- 先回忆下修改前有没有做过备份,比如当时执行过类似这样的命令:
sudo cp /etc/java-*-openjdk/security/java.security /etc/java-*-openjdk/security/java.security.bak - 要是有备份文件,直接覆盖回去就行:
sudo cp /etc/java-*-openjdk/security/java.security.bak /etc/java-*-openjdk/security/java.security - 注意:把命令里的
java-*-openjdk换成你实际用的JDK版本路径,比如java-11-openjdk,可以用ls /etc/java*查看具体的目录名称。
2. 没备份?用包管理工具恢复默认配置
如果之前没留备份也没关系,Ubuntu的包管理系统能帮你找回默认的java.security文件:
- 第一步,先找到这个配置文件所属的软件包:
执行后会输出类似这样的内容:dpkg -S /etc/java-11-openjdk/security/java.securityopenjdk-11-jre-headless:amd64: /etc/java-11-openjdk/security/java.security,其中openjdk-11-jre-headless就是对应的包名。 - 然后用
dpkg重新配置这个包,恢复默认文件:sudo dpkg-reconfigure openjdk-11-jre-headless - 或者也可以直接从包文件里提取默认配置:
# 下载对应包文件 sudo apt-get download openjdk-11-jre-headless # 解压到临时目录 sudo dpkg-deb -x openjdk-11-jre-headless_*.deb /tmp/tempjdk # 替换现有配置文件 sudo cp /tmp/tempjdk/etc/java-11-openjdk/security/java.security /etc/java-11-openjdk/security/java.security # 清理临时文件 sudo rm -rf /tmp/tempjdk openjdk-11-jre-headless_*.deb
3. 记得修改内容?用sed反向替换回去
如果你清楚之前用sed做了哪些修改,比如之前的修改命令是:
sudo find /etc/java* -name java.security -exec sed -i 's/原内容/修改后的内容/g' {} \;
那直接把替换内容反过来,就能改回默认值:
sudo find /etc/java* -name java.security -exec sed -i 's/修改后的内容/原内容/g' {} \;
不过这个方法只适合你能准确回忆起所有修改项的情况,不然容易漏改或者改错,不如前两种方法稳妥。
最后提个醒:以后修改系统配置文件前,一定要先备份,比如cp 原文件 原文件.bak这个小动作,能帮你避免很多恢复文件的麻烦!
内容的提问来源于stack exchange,提问作者Laucien
相关产品推荐
相关产品推荐

