ubuntu 20.04.2 pi-hole 安装 cmd 不起作用

ubuntu 20.04.2 pi-hole 安装 cmd 不起作用

这里有几个和我一样愚钝的人提出了问题,但我没有看到我的问题。

刚刚安装。

运行所有更新。

打开cmd并输入sudo curl -sSL https://install.pi-hole.net I bash

sudo:curl:未找到命令

sudo apt install curl -sSL...

E:命令行选项‘S’无法理解

消除

E:命令行选项‘L’

希望您能看出我读了一篇很酷的文章并且理解了其中的含义。

答案1

第一个错误是您在I前面放了一个bash而不是一个|(竖线)。第二个错误是您的安装命令错误。它sudo apt install curl后面没有任何命令行选项。

因此 pi-hole 的安装如下:

sudo apt install curl
curl -sSL https://install.pi-hole.net | sudo bash

答案2

我想进一步解释一下@Aenfa 所说的内容。这样你才能理解(解决问题是好事,但了解自己做错了什么更好)。


我们将从 curl 的安装开始:

您执行了以下操作:sudo apt install curl -sSL...

你需要做的是:sudo apt install curl

为什么?因为-sSL有 curl 的选项。因此,在使用该curl命令时,您可以选择启用/使用它的一些选项(即:-s静音、-L无进度条以及-S 即使-s使用了仍显示错误)。这些被称为标志,并且一直都在使用。您可以看到执行命令时可用的标志(和一般用法)man [[command]]。因此在这种情况下man curl

当安装某些东西(在本例中为curl)时,你只需通过提供名称来选择要安装的内容。例如sudo apt install curl。或者sudo apt install wget。或者sudo apt install nano。你明白了。-sSL是 curl 命令的一部分,安装 curl 时,你没有使用 curl,因此这些标志不适用。你使用的是apt。并且apt不支持标志 -s、-S 和 -L,所以它会给出错误!


现在是I部分:

这个有点难,所以我建议你查一下。搜索linux piping explained。因为它被称为管道。你误解了。|管道I时,你使用|(键盘上的 shift 然后是 enter 上方的键)。

原来问题出在这里。你试图使用管道,但却使用了I|没关系。我们都会犯错!

但是管道是什么?

[[command 1]] | [[command 2]] | [[command 3]]

我再次建议搜索它,但简而言之,一个命令的输出将成为第二个命令的输入,第二个命令的输出将成为第三个命令的输入。

例子:

cas@Waveserver:~$ echo "this is a test"
this is a test
cas@Waveserver:~$ echo "this is a test" | sed "s/test/joke/"
this is a joke
cas@Waveserver:~$ echo "this is a test" | sed "s/test/joke/" | grep -o "joke"
joke

echo 命令的输出当然很简单。它只是回显的文本。

现在我们将把该输出通过管道传输到 sed 并替换testjoke。这样 echo 的输出就变成了 sed 的输入。因此它能够替换该单词,因为在其输入中test存在该单词。

现在,该输出将被传送到 grep 命令。这意味着this is a joke将成为 grep 的输入(请注意,我使用的是,没错,标志!当我们这样做man grep并向下滚动时,我们会看到这-o意味着--only-matching或“仅打印行的匹配部分,而不是将匹配的文本标记为红色”)。因此,grep 在其输入中搜索joke,它找到它,这将是它的输出!

因此执行了三个命令,但只有一个输出,因为第一个和第二个命令的输出(而不是输出到终端)被重定向到管道中以下命令的输入。

在您的例子中,您正在 curl 一个脚本(用于安装 pi-hole)并将其通过管道传输到命令bash,这基本上意味着:“运行脚本”。所以:

[[ get the script ]] | [[ run it ]]

您可以根据需要管道传输任意数量的命令。在我编写的一些脚本中,我将 8 个命令依次管道传输,而其他时候,我只管道传输 1 或 2 个命令!


我希望你现在明白了!

编辑:这是我在脚本中某处发现的一条长管!

curl -s -L https://plex.tv/pms/downloads/5.json | jq -M | grep -PA 3 "Ubuntu.*?64-bit" | tail -n 1 | grep -Po "\"\Khttp.*?(?=\")"

[[curl a webpage containing info about updates for plex media server]] | [[ pretty-print the json output ]] | [[ grab the string and three lines below (-..A 3) that string ]] | [[ from that output, only show the bottom line ]] | [[ grab the url that's inside the line ]]

相关内容