Questions tagged «file-descriptors»


7
什么时候使用附加的文件描述符?
我知道您可以创建文件描述符并将输出重定向到它。例如 exec 3<> /tmp/foo # open fd 3. echo a >&3 # write to it exec 3>&- # close fd 3. 但是您可以在没有文件描述符的情况下执行相同的操作: FILE=/tmp/foo echo a > "$FILE" 我正在寻找一个很好的示例,说明何时需要使用附加的文件描述符。

2
>&-是否比> / dev / null更有效?
昨天我读了这样的SO评论,它说在shell中(至少bash)>&-“具有与...相同的结果” >/dev/null。 该评论实际上是将ABS指南作为其信息来源。但是那个消息来源说>&-语法“关闭文件描述符”。 我不清楚关闭文件描述符并将其重定向到空设备这两个动作是否完全等效。所以我的问题是:是吗? 从表面上看,关闭描述符就像关闭一扇门,但是将其重定向到一个空设备则意味着陷入困境。这两个对我来说似乎并不完全相同,因为如果我看到一扇关闭的门,我不会尝试扔掉任何东西,但是如果我看到一扇敞开的门,我会假设我可以。 换句话说,我一直想知道是否>/dev/null意味着cat mybigfile >/dev/null将实际上处理文件的每个字节并将其写入/dev/null而忘记了它。另一方面,如果外壳遇到一个封闭的文件描述符,我倾向于认为(但不确定)它将根本不写任何内容,尽管问题仍然在于是否cat仍将读取每个字节。 这个评论说>&-和>/dev/null“ 应该 ”相同,但是对我来说却不是那么响亮的答案。我想有一个更权威的答案,参考或不参考标准或源核心。

5
/ dev / stdin,/ dev / stdout和/ dev / stderr的可移植性如何?
偶尔我需要指定一个“路径相当于”标准的IO流之一(的stdin,stdout,stderr)。由于我有99%的时间使用Linux,所以我只是假装/dev/get /dev/stdin等,这“ 似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为“当然,它似乎起作用”,直到不起作用为止)。此外,我对这种机动的便携性没有很好的认识。 所以我有几个问题: 在Linux中的情况下,它是安全(是/否)划上等号stdin, stdout以及stderr用/dev/stdin,/dev/stdout和 /dev/stderr? 更笼统地说,这种等效性“足够便携 ”吗? 我找不到任何POSIX参考。

3
了解/ dev及其子目录和文件
$ ls -l /dev/stdin /dev/fd/0 lrwx------ 1 tim tim 64 2011-08-07 09:53 /dev/fd/0 -> /dev/pts/2 lrwxrwxrwx 1 root root 15 2011-08-06 08:14 /dev/stdin -> /proc/self/fd/0 $ ls -l /dev/pts/2 /proc/self/fd/0 crw--w---- 1 tim tty 136, 2 2011-08-07 09:54 /dev/pts/2 lrwx------ 1 tim tim 64 2011-08-07 09:54 /proc/self/fd/0 -> /dev/pts/2 我想知道是否所有的文件/dev及其子目录都是设备的文件描述符? …

2
限制文件描述符的数量
我正在尝试安装389-ds,它给了我这个警告: WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections. 我了解文件描述符,但不了解软限制和硬限制。 当我跑步时cat /proc/sys/fs/file-max,我回来了590432。这意味着我最多可以打开590432文件(即,最多可以打开590432文件描述符)。 但是当我跑步时ulimit,它给我不同的结果: $ ulimit unlimited $ ulimit -Hn # Hard limit 4096 $ ulimit -Sn # Soft limit 1024 但是,硬/软限制来自ulimit什么?它们与存储在其上的数字/proc/sys/fs/file-max有何关系?

1
文件描述符和Shell脚本
我很难理解一个人如何在shell脚本中使用文件描述符。 我知道诸如 exec 5 > /tmp/foo 因此,将fd 5附加到foo进行编写。 exec 6 < /tmp/bar ...阅读。 exec 5>&- …关闭fd。 现在这是做什么的? #!/bin/bash exec 5 > /tmp/foo exec 6 < /tmp/bar cat <&6 | while read a do echo $a >&5 done 据我了解,&5关闭FD,那么每次调用后输出仍如何成功重定向? 这是来自的复制面食:这里 它声称通过简单的echo $a > file方法使用它会使其更快,但是我无法理解。我将不胜感激任何链接到体面的教程。我用google的功能似乎使我失望。

3
重定向顺序
我不太了解计算机如何读取此命令。 cat file1 file2 1> file.txt 2>&1 据我了解,2>&1只需将标准错误重定向到标准输出。 按照这种逻辑,命令对我的读取如下: 连接文件file1和file2。 stdout从此操作发送到file.txt。 发送stderr至stdout。 结束? 我不确定计算机在做什么。按照我的逻辑,该命令应为 cat file1 file2 2>&1 > file.txt 但这是不正确的。

1
bash'<(文件内容)'的语法是什么?
有关Security StackExchange的此答案使用了一种有趣的bash语法来内联生成文件: openssl req -new -x509 -nodes -newkey ec:&lt;(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650 这一点特别有趣: &lt;(openssl ecparam -name secp384r1) 仅运行: echo &lt;(openssl ecparam -name secp384r1) 我回来 /dev/fd/63 因此,这似乎可以创建一个包含文件内容的临时文件描述符。 这个叫什么?




2
文件描述符链接的可移植性
我一直想知道这一点,但从来没有花时间找出来,所以我现在就这样做-是使用便携式怎么这里显示的任一/proc/$$/fd/$N或/dev/fd/$N?我了解POSIX担保 /dev/null, /dev/tty, and /dev/console (尽管我是在阅读有关此答案的评论后的第二天才发现的),但是其他这些担保呢? 据我所知,它们很常见,但是我不能指望它们在哪些系统中找到?为什么不?找到一个比另一个更有可能吗?他们会总是表现出类似的属性吗? 我倾向于以各种方式广泛地使用这些设备,并且我想知道是否有机会尝试一下。 另外,上述问题应该被理解为仅是我想,我想知道,但是,因为我显然要问的第一个地方,我可能不知道最好在这方面,他们不应该被认为是严格要求答案。请告诉我,如果可以的话。

1
默认情况下分配的文件描述符3是什么?
$ ls -og /proc/self /proc/self/fd lrwxrwxrwx 1 64 Jun 18 11:12 /proc/self -&gt; 32157 /proc/self/fd: total 0 lrwx------ 1 64 Jun 22 2012 0 -&gt; /dev/tty1 lrwx------ 1 64 Jun 22 2012 1 -&gt; /dev/tty1 lrwx------ 1 64 Jun 22 2012 2 -&gt; /dev/tty1 lr-x------ 1 64 Jun 22 2012 …

1
如何终止bash本身建立的TCP连接?
我曾经使用exec 3&lt;&gt;/dev/tcp/192.168.0.101/6435192.168.0.101:6435建立TCP连接。而且我已经收到并通过pipe命令发送了一些消息。 现在,我要终止TCP连接。但是,ss -anpet从中我可以看到bash本身保持了此连接,而没有派生子进程。 我试图将信号9和15发送到bash进程,但是如您所知,bash无法杀死自己。 因此,我可以在不终止正在使用的pt的情况下终止已建立的TCP连接(既不通过root杀死它也不发送Ctrl + D)吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.