pexels-pixabay-355770.jpg

Photo by Pixabay: https://www.pexels.com/photo/mountain-covered-with-snow-digital-wallpaper-355770/

运行 Linux命令 但又不想打印日志不想让该命令占用终端窗口使得不能再运行其他命令,可以使用以下方法。

Linux 命令构成

Linux Command Line Interface.png

首先,了解一下 Linux命令 的构成;

Linux命令由命令名称、选项和参数构成。一个命令可以由以上三个部分组成,也可以只包含命令名称和选项,或者只包含命令名称和参数。

举例:

ls -l /home/user/documents

这个命令的构成如下:命令名称:ls、选项:-l、 参数:/home/user/documents。
这个命令的含义是:以长格式显示 /home/user/documents 目录的内容。

在Linux环境中,命令(command) 和 命令行(command line, CL) 是两个不同的概念。

命令(command):是一个程序或实用程序,用于执行特定的操作,例如复制文件、创建目录或运行程序。它们是Linux 系统进行管理的核心,例如 ls (显示目录内容), cd (改变目录), mkdir (创建目录), rm (删除文件)。

linux-command-line.jpg

命令行(command line, CL):是你输入 ls 的那一行文本框?

命令行界面(command line interface, CLI):是指整个通过命令行与计算机交互的过程和用户体验。它是一种用户界面,用户通过文本输入与计算机交互而不是通过图形界面用于接受用户输入的指令,并将其传递给操作系统执行。它是一个程序运行的入口,也是用户与操作系统交互的主要方式;它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。

运行命令不输出日志的方法

使用重定向符号

在Linux 中,要运行命令并抑制其输出可以使用重定向符号或者命令本身的选项> /dev/null 2>&1 可以重定向所有输出(标准输出标准错误输出)到 /dev/null,从而实现不输出日志。一些命令也提供 -q 或 --quiet 等选项来关闭输出。

使用重定向符号

command > /dev/null 2>&1

这会将命令 command 的所有输出(stdout 和stderr) 重定向到 /dev/null, /dev/null 是一个特殊文件,所有写入到它的数据都会被丢弃,所以不会在终端显示.

使用命令本身的选项

具体视命令提供的选项而定;

command -q

如,sudo apt update 命令用于更新软件包列表。 当我们运行该命令时,系统会连接到软件源(repository),检查是否有可用的软件包更新。 以下是 sudo apt update 命令的主要功能:连接软件源: sudo apt update 命令会连接到配置的软件源,从中获取软件包信息和更新。

以静默形式更新软件包列表,这个 -q 选项由该命令提供;

apt update -q 

想要了解命令自带哪些选项,可以在命令后加选项 -h ,可以了解更多,如 运行 apt update -h;

apt update -h

使用nohup 命令

nohup 命令可以将命令在后台运行,即使终端被关闭或用户注销,命令也会继续运行。默认情况下,nohup 会将输出重定向到名为 nohup.out 的文件,但也可以通过重定向操作符将输出丢弃。

nohup command > /dev/null 2>&1 &

nohup: 确保命令在后台运行,并且即使终端被关闭也不会停止。
> /dev/null 2>&1: 丢弃标准输出和标准错误输出。
&: 将命令在后台运行。

使用 &

将命令的末尾加上 & 可以将命令在后台运行。然而,在后台运行的命令的输出默认情况下仍然会显示在终端上。为了静默运行,需要结合重定向操作符。

command > /dev/null 2>&1 &

⚠️:以下命令也是可行的,运行 command & 后 按 CTRL + C 再退出即可(不再打印日志,但服务程序仍会继续运行...)

command & 

注意事项

隐藏潜在问题:屏蔽输出可能会隐藏重要的错误或警告信息。在生产环境中,谨慎使用此方法。

针对特定命令:使用命令选项是最有效的方法,因为它更精确地控制输出。

修改全局日志配置:对于部分命令,可以修改其全局日志配置来关闭日志输出,例如修改 /etc/rsyslog.conf 或 /etc/logrotate.conf

附注

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN)1 是标准输出(STDOUT)2 是标准错误输出(STDERR)。更多文件描述符知识参阅

AI 总结

在Linux 中重定向所有输出(stdout /1和stderr/2) 通常使用 &> 命令,或者使用单独的重定向操作符结合 tee 命令。

1.使用 &>:

command &> output.txt

此命令会将 command 的所有输出(标准输出和标准错误输出)合并,并重定向到 output.txt 文件。如果文件已经存在,会被覆盖。

2.使用单独的重定向操作符:

command > output.txt 2>&1

这个命令的第一部分将标准输出重定向到 output.txt 文件。2>&1 部分将标准错误输出(stderr) 重定向到标准输出(stdout),从而也将其重定向到 output.txt 文件。

3.使用 tee:

command | tee output.txt

此命令将 command 的标准输出复制到 output.txt 文件,同时标准输出也显示在终端上。它不影响标准错误输出。

解释:

  • >:将标准输出重定向到文件。如果文件存在,则会覆盖。
  • >>:将标准输出追加到文件。
  • 2>:将标准错误输出重定向到文件。如果文件存在,则会覆盖。
  • 2>>:将标准错误输出追加到文件。
  • &>:将标准输出标准错误输出一起重定向到文件。
  • 1> file:将标准输出重定向到 file
  • 2> file:将标准错误输出重定向到 file
  • 2>&1:将标准错误输出重定向到标准输出,通常用于将标准错误输出也重定向到文件。
  • |:管道,将一个命令的输出传递给另一个命令的输入。
  • tee:将输入复制到标准输出和指定文件。

Shell 输入/输出重定向:https://www.runoob.com/linux/linux-shell-io-redirections.html
Shell 教程:https://www.runoob.com/linux/linux-shell.html

最后修改:2025 年 06 月 11 日 09 : 45 AM