如何知道 openssh-server 已经安装了?

如何知道 openssh-server 已经安装了?

我使用安装脚本,这是我的两个安装命令:

function InstallChrome()
{
    if ( which google-chrome 1>/dev/null ); then
        echo "Chrome is installed"
        return
    fi

    echo "Installing Google Chrome ..."

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O chrome
    sudo dpkg -i chrome

    echo "Installed Google Chrome"
}

所以基本上我会搜索安装的程序apt,如果它存在,我不会运行命令apt

原因是它比让apt支票快得多。

然而,这段代码不起作用:

function InstallSshServer()
{
    if ( which openssh-server 1>/dev/null ); then
        echo "SSH Server is installed"
        return;
    fi

    echo "Installing SSH Server ..."

    sudo apt install openssh-server -y

    echo "Installed SSH Server"
}

openssh-server我的机器上安装的程序的名称是什么?如何检查它是否已经安装?

答案1

openssh-server安装/usr/sbin/sshd,你应该寻找它。软件包不一定会安装同名的二进制文件,并且它们安装的二进制文件不一定位于所有用户的路径上。因此,明确地:

[ -x /usr/bin/sshd ] || sudo apt install -y openssh-server

dpkg -L如果安装了某个包,将告诉您该包安装了哪些文件。可以使用以下命令列出二进制文件:

dpkg -L openssh-server | grep bin/

apt-file list将显示包安装的文件,而无需先安装它。

作为旁白,为什么不用“哪个”呢?那该用什么呢?将为您的脚本提供有用的阅读。

答案2

我会用什么做

if ! type -p sshd &>/dev/null; then
    sudo apt-get install -y openssh-server
fi

答案3

这是我为类似案例编写的一个小脚本的改编版:

#!/bin/bash

prompt_confirm() {
    while true; do
            read -r -n 1 -p "${1:-} [y/n]: " REPLY
            case ${REPLY} in
                    [yY]) echo ; return 0 ;;
                    [nN]) echo ; return 1 ;;
                    *) printf " \033[31m %s \n\033[0m" "Incorrect input, please type y (yes) ou n (no)."
            esac
    done
}

# Check if openssh-server is installed
if ! command -v sshd &> /dev/null
then
    echo -e "\nThe openssh-server is not installed."
    if prompt_confirm "Would you like to install it now?";
    then
            apt install -y openssh-server
    else
            echo -e "\nOk, quitting.\n"
            exit
    fi
fi

当然,您可以只使用检查部分,不需要提示符y/n。

command -v是测试命令在系统上是否可用的推荐方法。

相关内容