这里有几个和我一样愚钝的人提出了问题,但我没有看到我的问题。
刚刚安装。
运行所有更新。
打开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 并替换test
为joke
。这样 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 ]]