脚本 /dev/null 起什么作用?

脚本 /dev/null 起什么作用?

我被su引导到另一个用户来运行屏幕,但出现了错误Cannot open your terminal '/dev/pts/4' - please check.

我找到了一个解决方案:script /dev/null然后我就可以使用屏幕了。为什么这样做有效?它会创建一个新的伪终端吗?

答案1

在 UNIX 上,这是一个可以写入的虚拟文件。写入此文件的数据将被丢弃。它类似于 Windows 计算机上的文件调用 NUL。

关键点;当 root 一台机器时,入侵者通常会将日志重定向到/dev/null例如,该命令ln -s /dev/null .bash_history将导致系统停止记录 bash 命令。

通俗地说,它的意思和黑洞差不多。典型用法:如果你不喜欢我所说的,请将你的评论发给/dev/null

可以将 /dev/null 视为“黑洞”。它最接近于只写文件。写入其中的所有内容都会永远消失。尝试从中读取或输出将一无所获。尽管如此,/dev/null 在命令行和脚本中都非常有用。

  • 它丢弃所有写入的数据但报告写入操作成功。
  • 这意味着将标准输出和错误重定向到/dev/null
  • 它可以防止脚本显示任何内容。就像 windows 的“echo off”

script /dev/null阻止任何消息出现在您的屏幕上。它通过将其引导至“黑洞”来抑制消息。

另外,看看为什么将“脚本”重定向到 /dev/null/ 会允许“屏幕”在以其他用户身份运行?

来源:Linux 词典

答案2

基本上,脚本将所有终端对话保存到一个文件中,当您指定 /dev/null 作为文件时,脚本保存到文件中的所有内容都会保存到黑洞中。

答案3

script FILE COMMAND...用于运行COMMAND保存所有输入和输出的副本FILE,同时仍可通过终端启用交互式输入/输出。

script /dev/null COMMAND...因此运行COMMAND,并且输出的副本转到文件/dev/null,即bitbucket,换句话说,它被删除了;但输出仍然会转到你的终端,就像你没有使用一样script

这样做的目的是什么?这听起来像是一个毫无意义的步骤,没有任何用处——复制输出,然后将副本发送到任何地方。然而,它确实有一个有用的副作用。

某些命令使用该isatty()函数来确定 stdin/stdout/stderr 是否是终端,并且它们的行为会根据终端是否是终端而有所不同 - 例如,如果 stdout 是终端,它们可能会输出 ANSI 颜色代码,但如果不是终端,则不会输出。这通常是您想要的 - 如果您将输出发送到文件或通过管道传输到另一个程序,通常不希望该输出中包含 ANSI 转义码。但是,如果您真的需要呢?即使输出不是终端,您如何让程序发送包含 ANSI 转义码的输出?某些程序具有命令行选项或环境变量,即使 stdout 不是终端,也可以强制彩色输出,但并非所有程序都有。对于缺乏强制彩色输出功能的程序,script /dev/null可以用作解决方法。它将分配一个伪终端,将其作为 stdout 传递给命令,然后将发送到该伪终端的输出复制到其自己的(非终端)stdout。类似地,如果 stdin 不是终端,某些程序(用于交互式使用)会拒绝接收输入,因此您无法从另一个程序通过管道向它们输入数据或从文件重定向它们的输入;script /dev/null可以用来解决这个问题。

相关内容