sh 脚本 sed -i是什么意思
时间: 2023-07-19 08:56:29 浏览: 169
`sed -i` 是一个 Linux 命令中的选项,它的意思是 "in-place",表示直接修改文件中的内容而不是输出到终端。`-i` 选项后面必须跟一个备份文件的后缀名,例如 `sed -i.bak`,表示在修改文件的同时备份原始文件,并将备份文件的后缀名设置为 `.bak`。在使用 `sed -i` 命令时,可以使用正则表达式来匹配要替换的文本,并使用替换字符串来替换匹配到的文本。
相关问题
在sh脚本里执行ls -t /home/| sed -n '5,$p' | xargs -I {} rm -rf {},删除不了/home/下面的文件
如果你在Shell脚本中执行 `ls -t /home/| sed -n '5,$p' | xargs -I {} rm -rf {}` 命令来删除 `/home/` 目录下的文件,但是没有成功删除文件,可能是因为文件名中包含特殊字符或空格导致命令无法正确处理。
为了解决这个问题,你可以尝试使用 `find` 命令来删除目录下的文件,它可以更好地处理特殊字符和空格。你可以将以下内容保存为一个Shell脚本并执行:
```bash
#!/bin/bash
find /home/ -type f -printf '%T@ %p\n' | sort -nr | tail -n +5 | awk '{$1=""; print $0}' | xargs -I {} rm -rf {}
```
上述脚本使用 `find` 命令来获取 `/home/` 目录下的所有文件,并按照修改时间进行排序。然后使用 `tail` 命令来截取排序后的结果,保留从第5行开始的所有行。接下来使用 `awk` 命令去除每行中的时间戳部分,最后使用 `xargs` 命令来逐个删除文件。
请注意,在删除文件时要谨慎操作,确保你要删除的文件是正确的。在尝试运行脚本之前,最好先进行备份或测试。
将当前shell脚本承载业务使用python实现出来 ··· sh /srv/root_password.sh getenforce#查看SELinux 安全机制 setenforce 0#将 SELinux 的执行模式从强制模式(Enforcing)切换为宽松模式(Permissive) cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.old.service sed -i -e 's/^Type=.*/Type=simple/g' -e '/ExecStart=/{s/\/usr\/sbin\/sshd/\/usr\/local\/sbin\/sshd/g}' /usr/lib/systemd/system/sshd.service#将文件中以"Type="开头的行替换为"Type=simple";包含"ExecStart="的行中,将"/usr/sbin/sshd"替换为"/usr/local/sbin/sshd" sed -i "s/GSSAPIAuthentication/#GSSAPIAuthentication/" /etc/ssh/sshd_config#将/etc/ssh/sshd_config文件中的"GSSAPIAuthentication"替换为"#GSSAPIAuthentication" sed -i "s/GSSAPICleanupCredentials/#GSSAPICleanupCredentials/" /etc/ssh/sshd_config sed -i "s/#PermitRootLogin yes/PermitRootLogin yes/" /etc/ssh/sshd_config sed -i "s/#UsePAM yes/UsePAM yes/" /etc/ssh/sshd_config chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chmod 600 /etc/ssh/ssh_host_ed25519_key ···
下面是将您提供的Shell脚本转换为Python代码的示例:
```python
import subprocess
# 执行命令的函数
def run_command(command):
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output, _ = process.communicate()
return output.decode().strip()
# 执行脚本中的命令
run_command("sh /srv/root_password.sh")
run_command("setenforce 0")
run_command("cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.old.service")
run_command("sed -i -e 's/^Type=.*/Type=simple/g' -e '/ExecStart=/{s/\\/usr\\/sbin\\/sshd/\\/usr\\/local\\/sbin\\/sshd/g}' /usr/lib/systemd/system/sshd.service")
run_command("sed -i 's/GSSAPIAuthentication/#GSSAPIAuthentication/' /etc/ssh/sshd_config")
run_command("sed -i 's/GSSAPICleanupCredentials/#GSSAPICleanupCredentials/' /etc/ssh/sshd_config")
run_command("sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config")
run_command("sed -i 's/#UsePAM yes/UsePAM yes/' /etc/ssh/sshd_config")
run_command("chmod 600 /etc/ssh/ssh_host_rsa_key")
run_command("chmod 600 /etc/ssh/ssh_host_ecdsa_key")
run_command("chmod 600 /etc/ssh/ssh_host_ed25519_key")
```
上述代码使用`subprocess`模块执行Shell命令,并将其转换为Python函数`run_command()`。然后,按照原始脚本中的顺序调用这些命令。
请注意,Python代码的执行结果可能会与直接在Shell中运行命令时略有不同。如果有任何问题,请及时反馈。
阅读全文