目录
1 和 2 在 Linux 中代表什么" >1 和 2 在 Linux 中代表什么
关于2>&1的含义" >关于2>&1的含义
为什么2>&1要放在后面" >为什么2>&1要放在后面
每次都写">log 2>&1"太麻烦,能简写吗?" >每次都写">log 2>&1"太麻烦,能简写吗?
首页 运维 linux运维 深入理解Linux shell中2>&1的含义(全网最全,看完就懂)

深入理解Linux shell中2>&1的含义(全网最全,看完就懂)

Aug 03, 2023 pm 04:14 PM
linux shell


1 和 2 在 Linux 中代表什么

在Linux系统中0 1 2是一个文件描述符

深入理解Linux shell中2>&1的含义(全网最全,看完就懂)

从上表看的出来,我们平时使用的

echo "hello" > t.log
登录后复制

其实也可以写成

echo "hello" 1> t.log
登录后复制

关于2>&1的含义

关于输入/输出重定向本文就不细说了

  • 含义:将标准错误输出重定向到标准输出
  • 符号>&是一个整体,不可分开,分开后就不是上述含义了。
    • 比如有些人可能会这么想:2是标准错误输入,1是标准输出,>是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"2>1"就行了?是这样吗?
    • 如果是尝试过,你就知道2>1的写法其实是将标准错误输出重定向到名为"1"的文件里去了
  • 写成2&>1也是不可以的

为什么2>&1要放在后面

考虑如下一条shell命令

nohup java -jar app.jar >log 2>&1 &
登录后复制

(最后一个&表示把条命令放到后台执行,不是本文重点,不懂的可以自行Google)

为什么2>&1一定要写到>log后面,才表示标准错误输出和标准输出都定向到log中?

我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:

本来1----->屏幕 (1指向屏幕)
执行>log后, 1----->log (1指向log)
执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
``
再来分析下
登录后复制

nohup java -jar app.jar 2>&1 >log &

本来1----->屏幕 (1指向屏幕)
执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
执行>log后, 1----->log (1指向log,2还是指向屏幕)
登录后复制

所以这就不是我们想要的结果。

搜索公众号GitHub猿后台回复“打飞机”,获取一份惊喜礼包。

简单做个试验测试下上面的想法:

java代码如下:

public class Htest {
    public static void main(String[] args) {
        System.out.println("out1");
        System.err.println("error1");
    }
}
登录后复制

javac编译后运行下面指令:

java Htest 2>&1 > log
登录后复制

你会在终端上看到只输出了"error1",log文件中则只有"out1"

每次都写">log 2>&1"太麻烦,能简写吗?

有以下两种简写方式

&>log
>&log
登录后复制

比如上面小节中的写法就可以简写为:

nohup java -jar app.jar &>log &
登录后复制

上面两种方式都和">log 2>&1"一个语义。

那么 上面两种方式中&>和>&有区别吗?

语义上是没有任何区别的,但是第一中方式是最佳选择,一般使用第一种。

以上是深入理解Linux shell中2>&1的含义(全网最全,看完就懂)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在Linux中使用正则表达式(REGEX)进行模式匹配? 如何在Linux中使用正则表达式(REGEX)进行模式匹配? Mar 17, 2025 pm 05:25 PM

本文介绍了如何在Linux中使用正则表达式(REGEX)进行模式匹配,文件搜索和文本操作,详细列式,命令和工具,例如GREP,SED和AWK。

如何在Linux中实现SSH的两因素身份验证(2FA)? 如何在Linux中实现SSH的两因素身份验证(2FA)? Mar 17, 2025 pm 05:31 PM

本文提供了有关使用Google Authenticator在Linux上设置两因素身份验证(2FA)的指南,详细介绍了安装,配置和故障排除步骤。它突出了2FA的安全益处,例如增强的SEC

如何使用TOP,HTOP和VMSTAT等工具来监视Linux中的系统性能? 如何使用TOP,HTOP和VMSTAT等工具来监视Linux中的系统性能? Mar 17, 2025 pm 05:28 PM

本文讨论了使用TOP,HTOP和VMSTAT监视Linux系统性能,并详细介绍其独特功能和自定义选项,以进行有效的系统管理。

如何使用软件包管理器(APT,YUM,DNF)管理Linux中的软件包? 如何使用软件包管理器(APT,YUM,DNF)管理Linux中的软件包? Mar 17, 2025 pm 05:26 PM

文章讨论了使用APT,YUM和DNF在Linux中管理软件包,涵盖安装,更新和删除。它比较了它们对不同分布的功能和适用性。

如何使用sudo向Linux的用户授予高架特权? 如何使用sudo向Linux的用户授予高架特权? Mar 17, 2025 pm 05:32 PM

本文解释了如何管理Linux中的Sudo特权,包括授予,撤销和安全性最佳实践。关键重点是安全和sudoers安全和限制访问。Character数量:159

关键Linux操作:初学者指南 关键Linux操作:初学者指南 Apr 09, 2025 pm 04:09 PM

Linux初学者应掌握文件管理、用户管理和网络配置等基本操作。1)文件管理:使用mkdir、touch、ls、rm、mv、cp命令。2)用户管理:使用useradd、passwd、userdel、usermod命令。3)网络配置:使用ifconfig、echo、ufw命令。这些操作是Linux系统管理的基础,熟练掌握它们可以有效管理系统。

如何解读Debian Sniffer的输出结果 如何解读Debian Sniffer的输出结果 Apr 12, 2025 pm 11:00 PM

DebianSniffer是一个网络嗅探工具,用于捕获和分析网络数据包时间戳(Timestamp):显示数据包捕获的时间,通常以秒为单位。源IP地址(SourceIP):发送数据包的设备的网络地址。目标IP地址(DestinationIP):接收数据包的设备的网络地址。源端口(SourcePort):发送数据包的设备使用的端口号。目标端口(Destinatio

Linux的5支支柱:了解他们的角色 Linux的5支支柱:了解他们的角色 Apr 11, 2025 am 12:07 AM

Linux系统的五大支柱是:1.内核,2.系统库,3.Shell,4.文件系统,5.系统工具。内核管理硬件资源并提供基本服务;系统库为应用程序提供预编译函数;Shell是用户与系统交互的接口;文件系统组织和存储数据;系统工具用于系统管理和维护。

See all articles