标签: pipe

FIFO(命名管道)保持“打开”状态多久?

例如,我有一个脚本将时间写入 /etc/pipe 中的管道。它在 while true 循环中连续写入。管道中的数据可以读取多长时间?如果我只决定在一天后使用 cat /etc/pipe 读取管道,我是否会从我开始写入时获得所有时间值?

相反,如果我的循环每 10 分钟只写一次时间会怎样。一天后我可以访问所有内容吗?

最后,假设我的循环连续写入时间(就像我的第一个示例一样),并且我每 30 分钟读取一次管道。如果我的计算机在我读取管道之前关闭,当我重新启动时管道是空的还是会保存所有数据?

linux unix pipe named-pipe fifo

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

达到某个 ulimit 后被主机锁定

所以,我在远程主机上有一个 sudoer 帐户,我在其中创建了一个具有数千个线程和套接字的进程。问题是,如果我创建了太多线程/套接字(不确定是哪一个,甚至可能是其他一些限制),我就会被主机锁定:我的 ssh 连接丢失,如果我尝试重新使用 ssh,我收到一条Write failed: Broken pipe错误消息。

除了要求其他用户进入sudo killall -9 -u myusername该机器之外,我如何才能重新进入系统?主机通常可供其他用户访问。

linux ssh pipe ulimit

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

程序检测其输出上的管道以禁用着色

有些程序有彩色输出(例如grepemerge在我的 gentoo 系统上),但如果它们的输出通过管道传输到less例如或文件中,则彩色输出将被禁用。

然而,我知道less能够显示彩色输出,如命令

ccze -A < /var/log/emerge.log | less
Run Code Online (Sandbox Code Playgroud)

显示彩色文本。所以我这里有两个问题:

  • 是否有可能“欺骗”其他彩色输出程序来保持颜色?
    我想保留颜色,例如:

    emerge -puND world | less
    
    Run Code Online (Sandbox Code Playgroud)
  • 这些程序如何检测它们的输出被重定向?

linux bash pipe

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

Unix 伪装文件有多少种方式?

我知道 Unix 文件系统有时看起来像是文件但实际上不是文件。中的文件dev实际上指向设备。也可以创建命名管道,这些管道看起来也是文件,但实际上是各种先进先出的消息队列。该proc目录包含基于进程、内存、硬件等的文件。

我试图更好地理解这些抽象,以决定我可以使用哪些抽象。Unix 伪装文件有多少种方式,管理员可以轻松实现/使用哪些方式?(即命名管道和符号链接很容易使用。)如果我知道这些概念的正确术语,我也许可以在网上找到详细信息。

unix filesystems pipe named-pipe

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

管道到“less”的 PHP 输出在每个命令之后都需要 &lt;enter&gt;

将 PHP 输出传送到 linux 'less' 命令会导致 'less' 真正起作用。(CentOS 6.2,CentOS 5 没有。)

当我将 php 的输出通过管道传输到 'less' 时,它需要enter在每个命令之后按下该键,即使在 'j' 命令(向下滚动一行的命令)之后也是如此。此外,命令键显示在屏幕上,而“少”不会清理屏幕。

所以,运行后:

$ php -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' | less
Run Code Online (Sandbox Code Playgroud)

然后输入j(通常向下滚动一行),我看到一个 'j' 字符出现在屏幕底部的 ':' 字符之后。按下enter导致 less 最终“接受”j 命令,它确实滚动,但现在我看到输出的两个相邻行之间的“:j”:

10
:j
11
Run Code Online (Sandbox Code Playgroud)

将 less 与 python 的等效输出一起使用时,一切都很好,并且不太正常:

$ python -c 'for i in xrange(1, 300): print i' | less
Run Code Online (Sandbox Code Playgroud)

这是怎么回事,我该如何解决?

更多信息:

$ less --version
less 436
Copyright (C) 1984-2009 Mark Nudelman

less comes with …
Run Code Online (Sandbox Code Playgroud)

less php-cli pipe

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

如何保存控制台输出仍然显示它

我需要对 telnet 会话进行故障排除并将其结果发送给另一个人。当我使用重定向时,我保存了会话的内容,但我无法在控制台上看到它。

如何管道当前终端/程序并仍然在当前控制台上显示它。

当我使用下面的命令时,我可以保存程序的输出,但我无法在控制台上看到它。

telnet ADDRESS PORT >> myoutputfile
Run Code Online (Sandbox Code Playgroud)

我可以使用 telnet 输出选项,我正在寻找一种独立于命令的方式来做到这一点。

该问题特定于 telnet 会话,但适用于任何其他命令,包括那些没有“将输出保存到文件选项”的命令。

linux telnet console pipe

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

使用 dd 作为管道缓冲区的正确方法(如果有)?

问题

当我在 *NIX 中寻找管道缓冲工具时,我看到了使用buffermbuffer或的建议pv。然而,前两者并不总是在发行版的官方存储库中(例如 Arch),而pv(从 1.6.0 开始)有一个错误阻止了此功能。在其他几个问题中,我看到提到dd用作缓冲区,我想探索它,因为dd它总是存在。然而,没有一个足够详细以具有真正的意义,所以在这里我要求一种“正确”的使用方式。

提到的问题dd包括https://unix.stackexchange.com/questions/345072/can-dd-be-used-to-add-a-buffer-to-a-pipehttps://unix.stackexchange.com/questions /21918/管道中无限制数据量缓冲区的实用程序

为了便于测试,我在下面提供了一个测试脚本,以及一些关于我自己的实验的评论。详细信息将在代码清单后解释。运行前请确保您已pv安装且内存至少256M!

#!/bin/sh

producer() {
    while [ 1 ]; do
    dd if=/dev/zero bs=64M count=1 iflag=fullblock status=none
    sleep 4
    done
}

buffer() {
    # Works, but long
    # Must at least fill 32M before consumer starts
    # So, must choose small obs and chain more to look
    # more like a proper "buffer"
    dd …
Run Code Online (Sandbox Code Playgroud)

linux bash command-line dd pipe

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

如何将输出从 stdout 重定向到 vim?

我想echo在vim中查看输出,并在查看后保存到文件中。我试过了echo $PATH | vim,但出现以下错误:

Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...

Vim: Finished.
Run Code Online (Sandbox Code Playgroud)

我能做什么?

vim pipe stdout

5
推荐指数
2
解决办法
3082
查看次数

如果输出是通过管道传输的,为什么 make 会忽略转义序列

在 Makefile 中,我想打印一个以十六进制数字表示的字节并将其传递给另一个程序的 STDIN。由于某种原因,它不起作用:

without-pipe:
    @printf '\x66\x6f\x6f'

with-bash-and-pipe:
    @/bin/bash -c "printf '\x66\x6f\x6f' | cat"

with-pipe:
    @printf '\x66\x6f\x6f' | cat
Run Code Online (Sandbox Code Playgroud)

运行该文件会产生:

$ make without-pipe 
foo

$ make with-bash-and-pipe 
foo

$ make with-pipe 
\x66\x6f\x6f
Run Code Online (Sandbox Code Playgroud)

我缺少什么功能make以及使最后一个目标产生相同输出的正确方法是什么。这with-bash-and-pipe是一种解决方法。

pipe make escape-characters binary-files

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

ffmpeg 更简洁,不隐藏进度条

如果不从源代码进行编辑和重新编译ffmpeg,如何隐藏开始编码时打印的许多行中的一些,而不隐藏编码每秒更新一次的进度条?

\n

进度条:
\nframe=14759 fps=3226 \xe2\x80\xa6 bitrate=8509.2kbits/s speed= 108x

\n

典型命令:
\nffmpeg -hide_banner in.mov out.mp4

\n

典型噪音:十几行或更多行,例如

\n
  Duration: 00:59:19.45, start: 0.257200, bitrate: 9623 kb/s\n    Stream #0:0[0x1bf]: Data: dvd_nav_packet\n    Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, smpte170m, bottom first), 720x480 [SAR 8:9 DAR 4:3], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc\n    Stream #0:2[0xa0]: Audio: pcm_dvd, 48000 Hz, stereo, s16, 1536 kb/s\nStream mapping:\n  Stream #0:1 -> #0:0 (copy)\n  Stream #0:2 -> #0:1 (pcm_dvd (native) …
Run Code Online (Sandbox Code Playgroud)

ffmpeg stderr pipe buffer progress-bar

5
推荐指数
2
解决办法
5808
查看次数