每次执行以下命令时,我都会看到错误。为什么?
$crontab -l
no crontab for server
Run Code Online (Sandbox Code Playgroud)
其中server是用户帐户。
出现这个问题是因为 crontab 中的脚本不起作用,所以我试图分解问题。这是我投入使用的内容crontab -e:
crontab -e
@reboot /usr/bin/teamspeak3-server_linux-amd64/ts3server_minimal_runscript.sh
Run Code Online (Sandbox Code Playgroud)
我按 ctrl + o 并保存它,重新启动并发现脚本无法启动(即使我从 GUI 双击脚本本身也能工作)。如果我crontab -l在重新启动后执行,我发现我收到与上述相同的错误。即使在重新启动之前,如果我crontab -e在文件中保存此命令后尝试打开它,代码行也不存在。
我正在使用 Debian,我想在启动器上创建一个图标,单击它可以打开我的 Teamspeak 服务器。目前,我必须转到终端并键入以下命令。
cd /usr/bin/teamspeak3-server_linux-amd64
./ts3server_minimal_runscript.sh
Run Code Online (Sandbox Code Playgroud)
这会启动我的 Teamspeak 3 服务器,让终端保持打开状态,这很费时,而且仅为此目的而打开终端很烦人。在 Ubuntu 中,我只是制作了一个 .desktop 文件并将图标拖到我的启动器上,这要好得多。不确定如何在 Debian 上做到这一点,有人可以建议吗?
我认为下面的行应该以不同的方式编写,并且该命令应该会出错。
$ echo $((x=2, y=3, x+y))
5
Run Code Online (Sandbox Code Playgroud)
我认为写这个的方法是:
$ echo $((x=2, y=3, $x+$y))
5
Run Code Online (Sandbox Code Playgroud)
两者都有效,这现在让我感到困惑。我假设我在某个地方有误解,所以我将解释我如何确定第一个回声是错误的。x+y 没有引用变量,所以 bash 怎么可能知道 x 和 y 是变量。如果你告诉我这是因为表达式开头的 $ ,那么你一定是错的,因为 x 和 y 会被定义在 $x=2 和 $y=2 处,这将是定义变量的不正确方法。所以我完全不知道 bash 如何知道 x 和 y 是变量。
我有许多不使用网络管理器的计算机,仅使用 dhcpcd 来设置 IP 地址。例如,我的树莓派4。我在/etc/dhcpcd.conf文件中静态分配了IP地址,并且它有效,我很高兴。我想要做的是,如果我输入 nslookup machine2 (例如),它会将配置的域附加到该查找。
在另一台使用 dhcpcd 的机器(我的 ArchLinux PC)中,我通过 dhcpcd 将地址配置为使用 dhcp(即这次不是静态的)。在我的 DHCP 服务器上,我已将其设置为将“域名”字段指定为返回给客户端的选项。结果是我的 /etc/resolv.conf 文件更新为以下行:
域名 mydomain.local
由于此“域”值是在此文件中设置的,因此我只需键入 nslookup machine2,它将 mydomain.local 附加到该查询,并且我的 dns 服务器会解析 machine2.mydomain.local 的 fqdn 的 IP。
所以理想情况下,我想模仿这个设置,这样我的树莓派 pi4 就会做同样的事情,但是它是静态设置的,那么我该怎么做呢?
请注意,我尝试将“search domain.local”添加到 /etc/resolv.conf 文件中,并且它执行了我想要的操作,但是这些设置在重新启动时会丢失,因此我无法在此处设置此值。我需要一个正确的 dhcpcd 工作解决方案。
更新:
我被要求将 /etc/resolv.conf 的输出放在这里:
$ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 10.10.0.1
Run Code Online (Sandbox Code Playgroud) 我正在尝试理解Debian Wikisudo上的文档。对此,它使用了下面的两个示例。但是我不明白它们之间的区别。与root 的( ) 选项相比,为什么组 sudo 具有 ( ) ?命令的每个部分的作用是什么。ALL:ALLALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
#Default rule for root.
root ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud) 我有两个虚拟机的 VirtualBox。一个是完全安装的 Debian VM,它在来宾版本中运行良好。另一个是我创建的用于安装 CentOS 的新 VM。问题是,当我启动新的 VM 时,我无法在 CentOS 的安装屏幕上使用鼠标。它在 VirtualBox 上给出了“虚拟机报告客户操作系统在当前视频模式下不支持鼠标指针集成”的错误。每个人都在 Google 上说您需要主机上的访客版本。我可以确认我已经安装了它,因为它在我的 Debian 机器上运行,并且我主机上的包管理器显示它已安装(如下所示):
$ pacman -Q virtualbox-guest-iso
virtualbox-guest-iso 6.0.4-1
Run Code Online (Sandbox Code Playgroud)
我还尝试了所有不同的视频模式(VMSVGA、VBoxVGA、VBoxSVGA),但都没有成功。奇怪的是,我似乎能够在 VM 内单击/移动物理鼠标并选择内容,只是没有光标。那么我该如何解决这个问题呢?我需要我的鼠标在 CentOS 安装屏幕上工作,这就是我想要的。
编辑:我尝试在这个新 VM 上安装许多不同的 ISO,包括 Debian、RedHat、Fedora 和 CentOS。我似乎只有在尝试安装 CentOS 和 RedHat 时才会遇到这个问题。
我正在使用手册页进行“测试”。除了以下两行之外,我明白了所有内容。有人能给我一个如何实际使用它的例子吗,因为到目前为止我一直在使用一维测试(即在我的测试中是 x = y 之类的东西),所以比较表达式在我的脑海中没有多大意义。我想如果有人能给我展示一个例子或用例我就会明白。
EXPRESSION1 -a EXPRESSION2
both EXPRESSION1 and EXPRESSION2 are true
EXPRESSION1 -o EXPRESSION2
either EXPRESSION1 or EXPRESSION2 is true
Run Code Online (Sandbox Code Playgroud) 我读到一本 bash 书的一部分,它试图向我展示您可以使用 read 语句与 while 循环结合来读取文件的每一行,然后将前两个单词捕获到两个变量中。不过,我编写了自己的脚本来测试它。
$ cat hoststest
192.168.1.1 pc1 word3 word4
192.168.1.2 pc2 word3 word4
$ cat t13
#!/bin/bash
while read ip_address pc_number restofstuff
do
if [ ! -z "$ip_address" ]; then
echo "IP is $ip_address and its for $pc_number"
fi
done < "/home/john/hoststest"
$ ./t13
IP is 192.168.1.1 and its for pc1
IP is 192.168.1.2 and its for pc2
Run Code Online (Sandbox Code Playgroud)
在我最初的测试中,我没有第三个变量“restofstuff”。发生的情况是,pc_number 变量不是仅获取 pc1 或 pc2 作为其值,而是将 pc_number 存储为该行的其余部分。因此,我添加了第三个变量,只是为了不将该行的所有其余部分作为 pc_number 的一部分。我所做的现在可以使用这个“restofstuff”变量,但感觉我做得不对。我基本上只是创建了一个不执行任何操作的“死”变量。如果我尝试继续使用 read + while 循环,那么正确的方法是什么(注意,这是我正在使用/学习的 while 循环 + …
我有一个 RAID 阵列,每次我的计算机重新启动时我都必须手动安装它。有没有办法自动化这个?每次我的电脑启动时,我都会输入这个。
sudo mount /dev/md0 /mnt/raiddrives
Run Code Online (Sandbox Code Playgroud)
我只希望 Debian 自动执行此操作。
在 bash 手册https://www.gnu.org/software/bash/manual/html_node/Pipelines.html \nit 中指出:
\n\n\n\n
|&如果使用\xe2\x80\x98 \xe2\x80\x99,command1则 \xe2\x80\x99s 标准错误除了其标准输出之外,还command2通过管道连接到 \xe2\x80\x99s 标准输入;它是 的简写2>&1 |。
我向社区提出的问题是,它的实际意义是什么。我做了一个测试来证明为什么我认为它没有任何作用。
\n在这里,我创建了一个有效的循环,然后在最后一行创建了一个错误:
\nitems="frog cat"\nfor item in $items\ndo \necho $item\ndone\n\nfor item i will make error this line\nRun Code Online (Sandbox Code Playgroud)\n因此,手册暗示的是,除非我使用 |&,否则 stderr 将不会在 stdout 中输出,因为它通过管道传输到下一个命令。所以我测试了一下:
\n## this shows a regular pipe without &. As you can see stderr gets written anyway\n$ ./testing.sh | grep error\n./testing.sh: line 7: syntax error near unexpected token `i\'\n./testing.sh: line …Run Code Online (Sandbox Code Playgroud) 我一直无法让 crontab 在启动时执行我的任何脚本。我想知道为什么它不起作用。下面是我尝试使用它的示例,我已尝试提供尽可能多的故障排除信息。
$crontab -l
no crontab for server
$crontab -e
#I scroll down to the bottom of the file and add the line below in
@reboot /usr/bin/teamspeak3-server_linux-amd64/ts3server_minimal_runscript.sh
#I make a carriage return at the bottom of the file
Run Code Online (Sandbox Code Playgroud)
我按 ctrl+o 保存文件(因为它在 nano 中打开),然后按 ctrl+z 退出。我现在发出“crontab -e”来检查内容是否存在。该文件显示出来,只是没有我对它所做的更改。我什至尝试在 crontab 文件中只添加一条注释行,这也没有保存。无论如何,我检查了脚本确实正常工作。
$cd /usr/bin/teamspeak3-server_linux-amd64/
$./ts3server_minimal_runscript.sh
Run Code Online (Sandbox Code Playgroud)
然后它在读取脚本并完美加载脚本时提供大量输出。所以我 ctrl+c 退出应用程序,并检查权限。
$ls -l | grep ts3server_minimal
-rwxr-xr-x 1 server server bla bla bla ts3server_minimal_runscript.sh
Run Code Online (Sandbox Code Playgroud)
所以每个人都可以执行它。无论如何我重新启动,发现应用程序没有启动。为什么?
bash ×4
cron ×2
arithmetic ×1
automounting ×1
dns ×1
domain ×1
nano ×1
resolv.conf ×1
sudo ×1
virtualbox ×1