我有一个在后台运行的脚本(没有终端窗口或 TTY),偶尔会做一些事情。
我现在希望它在做某事时做另一件事,那就是打开一个 Gnome 终端窗口并执行 2 个命令。实际上,我只需要执行 1 个命令,但我想让终端窗口保持打开状态,以便我可以看到命令的输出。该命令在 stdout 和 stderr 上都打印,并且其输出会随着时间的推移而变化,因此仅将其写入文件并发送某种通知并不能很好地完成这项工作。
我可以让 Gnome 终端打开一个窗口并执行 1 个命令:
gnome-terminal -e "sleep 10"
Run Code Online (Sandbox Code Playgroud)
sleep为简单起见,我选择了长时间运行的命令。但是,添加另一个命令时,不会打开终端窗口:
gnome-terminal -e "echo test; sleep 10"
Run Code Online (Sandbox Code Playgroud)
解决这个问题的方法是什么?
免责声明:
我刚刚浏览了 StackExchange 站点列表大约 20 分钟,试图找出发布此内容的位置。如果您知道任何更合适的网站,请将这个问题移到那里。我在这里发布这个是因为 unix 时间让我思考。
众所周知,有 unix 时间和 UTC。Unix 时间一直在滴答作响,计算秒数——每秒一秒——而 UTC 试图以我们使用的人类可读格式来保持时间,与地球自转的相位保持一致。为此,UTC 会不时插入闰秒。
由于时间与经历时间的物体所受到的重力、其他类型的加速度和相对速度有关,这导致了 2 个问题。让我们先解决一个简单的问题:unix 时间在哪里测量?如果 Alice 和 Bob 开始同意当前时间是 1467932496.42732894722748,当他们在同一个地方时(当然,一秒被定义为 9'192'631'770 辐射周期,对应于铯 133 的两个能级之间的跃迁)原子在静止和 0 K),由于爱丽丝生活在海平面上而鲍勃生活在高山上,或者爱丽丝生活在北极而鲍勃生活在赤道,因此遇到了双重悖论,他们不会再同意了。那么unix时间是如何精确定义的呢?
一开始您可能看不到 UTC 的问题,因为每个人都可以就地球何时完成轨道运行达成一致(这当然忽略了大陆板块运动,但我认为我们已经很好地解决了这个问题,因为使用 GPS 可以测量它们的运动非常精确,我们可以假设它们处于我们模型中的固定位置,并且不会随着大陆板块的移动而移动),无论它们是在山上、海平面上、赤道上还是在北极。可能会有一些时差,但它们不会累积。
但是一秒被定义为 9'192'631'770 个辐射周期,对应于静止和 0 K 时铯 133 原子的两个能级之间的跃迁,铯 133 原子不关心地球轨道。因此,UTC 决定在何处插入闰秒,但必须在地球轨道相位与原子钟某处测量的时间之间存在测量或预测的偏移。那是什么地方?
我有两个文件:大约有 10 000 行的 file1 和有几百行的 file2。我想检查 file2 的所有行是否都出现在 file1 中。那是: ?线 ?? 文件2:?? 文件 1
是否有人不知道这些符号的含义或“检查文件 2 的所有行是否都出现在文件 1 中”的含义:任一文件中的几行等效行不会影响检查是否返回文件满足要求。
我该怎么做呢?
我有一个三星 840 PRO 系列 SSD,想更新它的固件,以便为这个问题找到替代解决方案。
我从这个页面下载了“Samsung Magician Software for Enterprise SSD”,因为三星只为 Windows 的消费者 SSD 提供魔术师。根据此 reddit 帖子的最高回复,它应该可以工作。
然而,在试图确定我的 SSD 的 ID 时,魔术师声称没有找到三星 SSD,尽管目前连接到我的笔记本电脑的唯一存储介质是第一段中提到的 SSD。
# ./magician -L
================================================================================================
Samsung(R) SSD Magician DC Version 2.0
Copyright (C) 2015 SAMSUNG Electronics Co. Ltd. All rights reserved.
================================================================================================
Magician is now configuring the environment for LSI MegaRAID SAS.
Magician is now configuring the environment for LSI SAS IT/IR Controller.
Magician is now configuring the environment for LSI …Run Code Online (Sandbox Code Playgroud) 编写命令行应用程序时是否有使用错误的指南?令我惊讶的是,我在谷歌搜索时没有找到任何东西。
特别是,我现在关心的问题是是否使用stdout或stderr用户何时使用非法参数调用程序。但是,非常感谢更全面的答案,因为这肯定不是需要明确规则来编写按照用户期望的方式运行的程序的唯一情况。
我在使用 FreeBSD 时偶然发现了 zsh 的这种行为:
% dd if=/dev/zero bs=1M count=1 of=~/test2
dd: failed to open '~/test2': No such file or directory
Run Code Online (Sandbox Code Playgroud)
这真的让我很困惑,因为同样的事情在 bash 中工作得很好。
我可以touch在 zsh 中使用波浪号文件,然后ls它们:
% touch ~/test2
% ls ~/test2
/home/christoph/test2
Run Code Online (Sandbox Code Playgroud)
起初,我认为 zsh 没有意识到后面有一条路径,of=所以它没有扩展~。但是自动完成文件名工作得很好。事实上,如果使用现有文件名,以 开头~,然后在某个时候按 Tab,路径会在我输入的命令中展开。
为什么 zsh 传递~/test2给dd,而不是/home/christoph/test2?
zsh 在 Linux 上的行为相同。事实上,我执行了上面的这些命令,并在 Linux 机器上复制了它们的输出。
基本上整个问题都在标题中:ssh 是否通过网络发送密码?当然假设使用通过用户名和密码登录。
我问是因为如果 ssh 不通过网络发送密码,即使用户将所谓的主机添加到其 known_hosts 文件中,中间人也无法获得用户的密码。
有人说必须,所以我在评论中写了一个反例。由于现在反复出现它可能如何工作的问题,我在此处复制该评论。
服务器可以告诉客户端使用哪个散列。[用于对服务器影子文件中的密码进行散列的同一个。] 然后客户端可以计算散列?哪个应该在服务器的影子文件中,但让我们调用服务器上的那个?”。所以服务器和客户端都知道?。然后客户端可以选择随机盐?向服务器发送 (hash(?.?), ?)(.连接运算符在哪里)。服务器然后散列 ?'.? 并检查它从客户端收到的元组的第一个元素是否与该哈希匹配。如果是,则客户端知道密码。
我认为以下内容会起作用:
mkdir /tmp/chrootTest # Create chroot folder.
mkdir /tmp/chrootTest/bin # Create `/bin` in the chroot folder.
sudo mount -B /bin /tmp/chrootTest/bin/ # Bind-mount the real system's `/bin` to the chroot's `/bin`.
sudo chroot /tmp/chrootTest/ /bin/bash # Execute (open) `/bin/bash` in the chroot.
Run Code Online (Sandbox Code Playgroud)
但是最后一个命令产生:
chroot: failed to run command ‘/bin/bash’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我也试图复制/bin到/tmp/chrootTest/bin,并给予它充分的权限。但是,这也不起作用。
看到一条错误消息通知我/bin/bash无法在其非常基本的 chroot 中工作,因为找不到其他文件,我不会完全感到惊讶。但是,打印的错误消息令人惊讶,因为该文件显然存在。
为什么会发生这种情况?在 chroot 中成功打开 bash 需要什么?
我购买了便宜的 2 TB HDD(每个 60 欧元),并想在使用它们之前检查它们是否返回读取时提供的数据。我检查了一些廉价的拇指驱动器,方法是复制我放在它们身边的大文件并检查它们返回的数据的哈希值(并发现那些在实际存储容量耗尽后将数据扔掉的)。不幸的是,我没有任何 2 TB 的文件。
我现在想生成 2 TB 的伪随机数据,将其写入磁盘,然后对磁盘进行散列。然后我想将相同的数据直接写入散列函数并获得它应该以这种方式产生的散列。伪随机函数不必以任何方式加密安全,它只需要快速生成具有高熵的数据。
如果我编写的脚本只是对包含数字的变量进行散列,将散列打印到标准输出,增加变量并重复,则数据速率太慢,即使在使用快速 CPU 时也是如此。像 5 个数量级太慢(甚至不是 60 kByte/s)。
现在,我可以尝试这样做,tee但这似乎是一个非常糟糕的主意,我不能一遍又一遍地重现相同的数据。
理想情况下,我会向程序传递一些简短的参数(一个数字、一个字符串,我不在乎)并在其标准输出中获取任意大量的数据,并且每次调用时这些数据都是相同的。
假设您运行的命令需要一些时间才能返回,并希望在执行后执行不同的命令,但您没有提前计划。
我知道可以选择按Ctrl + Z然后提交fg && otherCommand。但是,这有两个主要缺陷:
command1 && command2或command1; command2)的组合,则它不起作用,因为第一个提交的行的后续命令不会被执行。我也知道你可以在执行一个命令时输入下一个命令,然后点击Enter它。但是,这也有两个主要缺陷:
stdin.在执行一个命令时,是否有一种快速的方法可以将更多命令排队,可能涉及使用特殊的终端仿真器或多个终端?
bash ×2
command-line ×2
chroot ×1
conventions ×1
development ×1
firmware ×1
openssh ×1
password ×1
random ×1
samsung ×1
shell ×1
ssd ×1
ssh ×1
stderr ×1
stdout ×1
tilde ×1
time ×1
timestamps ×1
zsh ×1