我如何重新生成 System V 符号链接?

我如何重新生成 System V 符号链接?

我意外删除了 中的所有符号链接/etc/rc1.d/。我该如何重新生成它们?

答案1

恢复符号链接的最可靠方法是重新安装包含启动脚本的软件包。

我注意到,无论是dpkg-reconfigure还是都apt-get --reinstall install没有恢复符号链接。并非所有脚本都符合 LSB 标准,并且不提供一行# Default-(Start|Stop)

以下(经过测试的)脚本在软件包的安装后脚本中查找update-rc.d添加启动脚本的命令。必须删除以前的链接才能工作,因此有此update-rc.d -f [script-name] remove行。我已验证所有链接均已正确放回,唯一缺少的文件是一个README文件,但这并不重要。

#!/bin/bash
cd /etc/init.d && for file in *; do
    if [ -x "$file" ]; then
        pkg=$(dpkg-query -S "/etc/init.d/$file" | cut -d: -f1)
        if [ -z "$pkg" ]; then
            echo "**WARNING** No related package found, skipping file: $file"
        else
            postinst="/var/lib/dpkg/info/$pkg.postinst"
            if [ -r "$postinst" ]; then
                update=$(grep -Po "(?<!#)\s*update-rc\.d\s+$file\s+((start|stop|defaults)[\s\dS\.]+)+" "$postinst" | sed -e 's/^\s*//' -e 's/\s\+/ /g')
                if [ -n "$update" ]; then
                    sudo update-rc.d -f "$file" remove
                    sudo $update
                else
                    if [ -e "/etc/init/$file.conf" ]; then
                        echo "$file has been moved to Upstart"
                    else
                        echo "No update-rc.d line found for $file"
                    fi
                fi
            else
                echo "No post-installation script found for $pkg"
            fi
        fi
    else
        echo "Not an executable, ignoring file: $file"
    fi
done

如果您想手动修复它,您可以使用以下命令:

  • dpkg-query -S /etc/init.d/[script-name]- 检索负责该文件的包名称
  • less /var/lib/dpkg/info/[package-name].postinst- 搜索“update-rc.d”以获取安装启动脚本所需的命令

资源:

相关内容