相对经常,我发现自己想退出,less但留下我在屏幕上看到的内容,以供参考。有没有办法做到这一点?解决方法?
(我目前的解决方法是退出,然后使用more。所以任何比这更好的解决方法都是受欢迎的。理想的是我已经在里面后可以使用的东西less,也许有一个 shell 设置或一些脚本。)
我的桌面是 OSX,但我使用 RHEL 和 Ubuntu 服务器。
在经历了令人沮丧的头砖墙接触之后,我发现了这一点:
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/steve/bin
$ sudo bash
# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)
但
$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
$ sudo bash -Ec 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin
Run Code Online (Sandbox Code Playgroud)
我从另一篇文章中收集到sudo路径是从中读取的/etc/sudoers- 但为什么呢?设置是否$PATH在/root/.profile任何意义,或者是只是上面的混乱配方(即产卵实际外壳导致不同$PATH的是,在不经意中使用sudo的命令......)?
我在 RHEL 6.4 上使用 bash。
我正在尝试通过没有 nc 的服务器设置自动 SSH 跳转。
这从命令行工作:
ssh -A gateway ssh steve@target
Run Code Online (Sandbox Code Playgroud)
(我已将我的公钥添加到 SSH 代理中)。
但是,将其添加到 ~/.ssh/config 不会:
Host target
User steveb
ProxyCommand ssh -A gateway ssh steve@targetip
$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
^CKilled by signal 2.
Run Code Online (Sandbox Code Playgroud)
试图强行解决问题-t很有趣但无济于事。
ProxyCommand ssh -A -t gateway ssh steve@targetip
$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal. …Run Code Online (Sandbox Code Playgroud) 我在将公钥复制到authorized_keys并用额外的换行符或空格或其他东西结束时遇到了问题。
有没有办法简单地验证密钥看起来像有效密钥?我没有私钥。
我正在查找 kern.log 中特定问题的原因。有许多条目的时间戳为 00:00:00:
Jun 11 00:00:00 mymachine kernel: [ 0.000000] Initializing cgroup subsys cpusetJun 11 00:00:00 mymachine kernel: [ 0.000000] Initializing cgroup subsys cpu
Jun 11 00:00:00 mymachine kernel: [ 0.000000] Linux version 3.2.0-33-virtual (buildd@batsu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #52-Ubuntu SMP Thu Oct 18 16:48:3
7 UTC 2012 (Ubuntu 3.2.0-33.52-virtual 3.2.31)
Jun 11 00:00:00 mymachine kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.2.0-33-virtual root=LABEL=cloudimg-rootfs ro console=ttyS0
Run Code Online (Sandbox Code Playgroud)
假设我实际上并没有在午夜启动机器 - 00:00:00 时间戳是否意味着启动过程的特定阶段?他们这样做有什么特别的原因吗?
(这是一个托管在 OpenStack 上的 Ubuntu Precise VM,如果这很重要。我认为这次启动是在从另一个映像克隆之后立即启动的。)
编辑更多信息:
据我所知 ( …
我有一个新的 QNAP TS-451 NAS,带有两个新的 3TB 驱动器,作为 RAID 1 对安装。当我将数据复制到它时,它似乎在接下来的几个小时内“同步”RAID 组。(Web 控制台显示类似“正在同步 (4.3%)”的状态)
为什么是这样?是什么阻止系统同时写入两个磁盘,从而保持 RAID 组始终同步?
(我不确定这是否是这里的主题,我不知道这是否是 QNAP 特定的问题。)
编辑截图:

将重定向与 here 文档结合起来似乎很合乎逻辑:
$ bash > foo <<EOF
echo Hello
EOF
$ less foo
Hello
Run Code Online (Sandbox Code Playgroud)
但是对于管道,它的行为有所不同:
$ bash | tee foo <<EOF
echo Hello
EOF
$ less foo
echo Hello
Run Code Online (Sandbox Code Playgroud)
同样奇怪的是,如果您立即输入“历史记录”:
$ bash | tee foo <<EOF
echo Hello
EOF
$ history
$ history
1 ...
Run Code Online (Sandbox Code Playgroud)
也就是说,第一个命令似乎仍然在新创建的 bash 中。这是怎么回事?为什么管道的行为不同?
我想检查输入字符串是否指的是文件名 -而不是像*.txt.
这不起作用:
if [ -f "$1" ];
Run Code Online (Sandbox Code Playgroud)
因为$1被扩展到*.txt,它被扩展到,比如说foo.txt bar.txt,它被传递到test -f。
除了明确检查通配符之外,是否有一种通用的方法来执行 shell 替换,然后防止任何通配符?
我注意到在这个问题中,一个回答者使用了双括号,而另一个回答者使用了方括号:
if (( $(fileSize FILE1.txt) != $(fileSize FILE2.txt) )); then
Run Code Online (Sandbox Code Playgroud)
...
if [ $(fileSize FILE1.txt) != $(fileSize FILE2.txt) ]; then
Run Code Online (Sandbox Code Playgroud)
我以前从未见过双括号 - 谷歌搜索也无济于事。它们的含义完全相同吗?便携性有区别吗?偏爱其中一个的原因?