小编amp*_*ine的帖子

通过多个主机 ssh

为了到达我办公室的机器,目前我正在这样做:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
me@unix.department:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以自动化这个过程,也许我可以在最后使用一个命令?

ssh multiple-machines

39
推荐指数
3
解决办法
8974
查看次数

避免 shell 脚本中的“BASH 主义”

是否存在类似于Perl::Critic的工具来检查您的 shell 脚本并指出缺陷、可移植性问题、使用非标准程序而没有回退、折旧的程序使用等?

我意识到这set -o posix将禁用非 POSIX 使用,但这不会告诉我我想知道的事情,例如 zsh 索引 shell 数组从 1 开始,bash 从 0 开始,而 ash 根本不支持数组。

shell bash zsh ash

37
推荐指数
1
解决办法
2453
查看次数

打开的文件句柄死后去哪儿了?

在文件句柄对它们打开时被删除的文件会发生什么?

自从我发现我可以在MPlayer中播放视频文件时删除它并且它仍然可以播放到最后,我一直想知道这一点。它从哪里提取数据?它仍然来自硬盘驱动器吗?一旦我删除了文件,它是否被复制到 RAM 中?

如果它仍在硬盘驱动器上,如果我在程序运行时从实质上未分配的空间中读取文件系统而填满了文件系统,会发生什么?如果它在 RAM 中缓冲,如果我刷新缓冲区会发生什么?

如果文件位于 NFS 共享上会发生什么情况——它是否存储在服务器上?(这难道不是一个安全风险——被大量打开的远程文件句柄引起的 DoS?)

做一个lsof -n |grep '(deleted)'有时会产生有趣的结果;如果我正在升级交换共享库文件的包,那么运行已经使用这些库的程序仍然可以使用它们,就好像没有任何改变一样。

额外问题:在这种情况下,有什么方法可以从死者身上取回数据吗?

filesystems open-files

15
推荐指数
3
解决办法
3513
查看次数

段错误程序的管道输出

我有一个脚本调用一个程序(特别ttf2afm是 tetex 3.0 的一部分),该程序有时会出现段错误,有时不会。我需要的信息总是在出现段错误之前打印出来,但是我很难阻止管道重定向失败并且在程序失败时不向管道输出任何内容。

我尝试通过 FIFO 重定向,true在最后用括号括起进程,从 shell 函数执行并封装在 中sh -c,但脚本似乎从未让进程输出任何内容,重定向或以其他方式 - 甚至不输出到 stderr。

我知道它能够输出,因为它完全能够从命令行提供它,但由于某种原因不能从脚本提供。

我的问题是,脚本有没有办法忽略程序段错误并给我输出的事实?

我正在运行 BASH 4.1.10(2)-release。

shell io pipe segmentation-fault

13
推荐指数
2
解决办法
3127
查看次数

内核模块可以使用多少 strip(1)-ing?

我经常为 Slackware Linux 创建包,这个过程的一部分是剥离二进制文件,以便它们占用更少的空间。我发现如果我strip --strip-all(或strip没有选项)内核模块,它们通常无法插入:

致命:插入 cloop 时出错 (/lib/modules/2.6.38.7-smp/kernel/fs/cloop/cloop.ko):模块格式无效

内核模块推荐什么级别的剥离?如果我使用--strip-debug,我是否会删除会对系统性能和/或错误记录产生负面影响的调试符号?

strip kernel-modules

9
推荐指数
1
解决办法
1万
查看次数

安全执行“分叉炸弹”

我们都见过“分叉炸弹”,它会使主机无响应,即使在非特权 shell 中执行:

警告:不要执行以下 shell 脚本。只是不要。

:(){ :|:& };:
Run Code Online (Sandbox Code Playgroud)

我也知道cgroups,Linux 内核级进程分组结构,可以分配“控制器”来限制内存、CPU 消耗、I/O 调度优先级等。

从理论上讲,应该可以使用这种控制机制来允许用户在他们自己的 shell 中执行一个 fork 炸弹,而不会导致主机系统陷入困境。

由于我并不真正了解分叉炸弹如何消耗资源,因此我不确定如何使用 cgroups 来执行此操作。

linux shell cgroups

6
推荐指数
1
解决办法
1677
查看次数