标签: bash

Shell 命令在使用管道时速度较慢,使用中间文件时速度较快

有没有人理解处理时间、使用中间文件或使用管道时的巨大差异?我在新的 debian 挤压服务器上使用标准工具将 tiff 转换为 pdf。执行此操作的标准方法是先转换为 ps。

无管:

root@web5:~# time tiff2ps test.tif > test.ps

real    0m0.860s
user    0m0.744s
sys 0m0.112s

root@web5:~# time ps2pdf13 -sPAPERSIZE=a4 test.ps > test.pdf

real    0m0.667s
user    0m0.612s
sys 0m0.060s
Run Code Online (Sandbox Code Playgroud)

配管:

root@web5:~# time tiff2ps test.tif | ps2pdf13 -sPAPERSIZE=a4 - > test.pdf

real    1m6.098s
user    0m15.861s
sys 0m50.9
Run Code Online (Sandbox Code Playgroud)

在最后一条命令期间,gs 进程始终处于 100%。

更新
这是 ps 生成的 strace 输出:

root@web5:~# strace tiff2ps test.tif > test.ps
execve("/usr/bin/tiff2ps", ["tiff2ps", "test.tif"], [/* 28 vars */]) = 0
brk(0)                                  = 0x1395000
access("/etc/ld.so.nohwcap", F_OK) …
Run Code Online (Sandbox Code Playgroud)

scripting linux bash pipe shell-scripting

20
推荐指数
1
解决办法
4284
查看次数

计算从一个进程传输到另一个进程的字节数

我正在运行一个 shell 脚本,它将数据从一个进程传输到另一个进程

process_a | process_b
Run Code Online (Sandbox Code Playgroud)

有谁知道一种方法来找出两个程序之间传递了多少字节?目前我能想到的唯一解决方案是编写一个小的 c 程序,从标准输入读取,写入标准输出并计算所有传输的数据,将计数存储在环境变量中,例如:

process_a | count_bytes | process_b
Run Code Online (Sandbox Code Playgroud)

有没有人有更简洁的解决方案?

shell bash pipe

19
推荐指数
3
解决办法
2万
查看次数

我如何收回已否认的进程?

与之前的许多问题类似,我发现自己正在运行一项我希望在屏幕上运行的工作。我被迫否认这个过程,因为我需要断开连接。现在我已经重新连接,我看到进程仍在运行。我怎样才能“回收”这个过程,以便我可以看到它的输出并给它输入?

这个问题与仅仅将正在运行的进程移动到屏幕不同,因为它涉及重新打开丢失的 stdin/out/err 句柄。

bash terminal

19
推荐指数
2
解决办法
3万
查看次数

使用 bash,如何从数字列表中找出平均值、最大值和最小值?

我有一系列管道式 grep、awks 和 seds,它们生成一个数字列表,每行一个。像这样的东西:

1.13
3.59 
1.23
Run Code Online (Sandbox Code Playgroud)

我怎样才能把它传递给输出平均值、最大值和最小值的东西?

linux bash command-line-interface

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

让 ssh 真正安静

我写了一个 nagios 脚本的一半,我对 SSH 感到烦恼。

根据手册页:

-q       Quiet mode.  Causes all warning and diagnostic messages to be
         suppressed.
Run Code Online (Sandbox Code Playgroud)

然而,如果我启用了 quiet 标志然后传递了一个无效的端口,我仍然会收到一个错误:

$ ssh user@localhost -q -p test
Bad port 'test'
Run Code Online (Sandbox Code Playgroud)

这是一个问题,因为这将使该消息成为第一行,而这正是 Nagios 抓取的内容。!= 0从 ssh 获取退出代码后,我需要输出类似“警告|SSH 错误”的内容,但我可以输出的第一行将是第 2 行。

我怎样才能让 SSH 真正安静下来?

注意:我不确定是在 serverfault、超级用户还是 stackoverflow 上发布这个问题。我选择了 serverfault,因为用户群可能对 cli SSH 和 cli 脚本解决方法最有经验。

ssh bash nagios

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

sudo -i 和 sudo su - 有什么区别

commandsudo -i和 和有sudo su -什么不一样?

他们是一样的吗?

linux ubuntu debian bash command-line-interface

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

linux下用ip命令删除IP

如果我像这样添加两个IP:

ip addr add 1.1.1.1/24 dev eth2
ip addr add 1.1.1.2/24 dev eth2
Run Code Online (Sandbox Code Playgroud)

然后我尝试删除这样的一个:

ip addr del 1.1.1.2/24 dev eth2
Run Code Online (Sandbox Code Playgroud)

两个IP都将被删除,我不知道如何处理。

有谁知道如何解决它?

networking bash ip ubuntu-12.04

19
推荐指数
2
解决办法
11万
查看次数

是否有像 cron 这样的实用程序,可以为以后安排工作(但只有一次)?

我正在尝试设计一个程序,当某个(非周期性)事件发生时发送文本。现在,我想要一个脚本来查找此事件何时发生,然后安排一个(类似 cron 的)作业,该作业将在该事件发生之前发送文本。

更具体的示例如下所示:

  1. 脚本 A 运行并检测事件的下一次

  2. 脚本 A 使用 ??? 安排脚本 B 在 $time 运行

  3. 在 $ 时间,???调用发送文本的脚本 B。

问题是,事件可能发生在 11 天内的随机时间,而且只会发生一次。Cron 似乎不适合这个——我不希望这个工作运行不止一次。

所以我猜(简而言之),是否有一个实用程序可以提供非周期性脚本的延迟执行?

linux bash cron

19
推荐指数
2
解决办法
628
查看次数

ulimit -n 不改变 - 值limits.conf 没有效果

我正在尝试为 ubuntu 机器上的所有用户提高打开文件描述符的最大值。

这个问题有点像这个问题的后续。

即使需要 pam_limits.so,ulimit 也不会读取打开的文件描述符limits.conf 设置

除了我在limits.conf中添加了所需的“root”条目

这是条目

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000
Run Code Online (Sandbox Code Playgroud)

相关的pam_limits.so行在 /etc/pam.d/ 中的所有相关文件中已取消注释,并fs.file-max已在 /etc/sysctl.conf 中正确设置

然而,我仍然看到

abc@machine-2:/etc/pam.d$ ulimit -n
1024
Run Code Online (Sandbox Code Playgroud)

重启后。

可能是什么问题呢?

我的默认 shell 是 /bin/sh 并且我不能使用 chsh 来更改我的默认 shell,因为我的机器上的用户是通过某种分布式身份验证方案进行身份验证的。

linux ubuntu bash ulimit pam

19
推荐指数
3
解决办法
5万
查看次数

将 PostgreSQL 完全重置为默认值?

有没有办法在 Linux 上完全重置 PostgreSQL 安装,使其与我安装时的状态相同?

主意

我考虑过

rm -rf /var/lib/pgsql/*
rm -rf /var/lib/pgsql/backups/*
rm -rf /var/lib/pgsql/data/*
Run Code Online (Sandbox Code Playgroud)

但也许这不是推荐的方法。

目的

这对于摆脱以前使用过它的程序的遗留物会很方便。

postgresql linux ubuntu bash centos

19
推荐指数
3
解决办法
6万
查看次数