shell 1>&2 2>&1 &>filename重定向的含义和区别: 当初在shell中, 看到”>&1″和”>&2″始终不明白什么意思.经过在网上的搜索得以解惑.其实这是两种输出. 在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 0 是一个文件描述符,表示标准输入(stdin) 1 是一个文件描述符,表示标准输出(stdout) 如果此处错写成 1>2, 就表示把1输出重定向到文件2中. 2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道. 1>&2 意思是把标准输出重定向到标准错误。 2>&1 意思是把标准错误输出重定向到标准输出。 &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中。 答: >&2 即 1>&2 也就是把结果输出到和标准错误一样;之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件 如:ls 2>a1 >&2 (等同 ls >a1 2>&1
在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是 0,1,2 。 > 默认为标准输出重定向,与 1> 相同 1>&2 意思是把标准输出重定向到标准错误. 2>&1 意思是把标准错误输出重定向到标准输出。 &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中. >&2即1>&2也就是把结果输出到和标准错误一样 /dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉 rumenz.txt > cat out.log > out.log将标准输出重定向到文件,但是1>&2将标准输出重定向到了错误输出,所以out.log里面什么也没有. > ls rumenz.txt out.log将标准输出重定向到文件,但是2>&1将错误输出重定向到标准输出,所以out.log里面既有正常的输出也有错误的输出.
末尾追加内容 文件描述符 每个输入源和输出地都有一个描述符,标准输入的描述符为0,标准输出的描述符为1,标准错误的描述符为2。 文件: $ sort < input 1>> output 2> error 组合标准输出和标准错误 下面的命令将标准输出重定向为output文件,标准错误仍然显示在屏幕上: $ sort < input > output 下面的命令将标准输出重定向为output文件,将标准错误重定向为error文件: $ sort < input > output 2> error 下面的命令将标准输出重定向为output 文件,使用2>&1将标准错误重定向为标准输出: $ sort < input > output 2>&1 上面的例子中,标准输出和标准错误都会被重定向为output文件。 注意,下面的命令将导致标准输出和标准错误的相互覆盖,因此不可使用: $ sort < input > output 2> output
在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是 0,1,2 。 > 默认为标准输出重定向,与 1> 相同 1>&2 意思是把标准输出重定向到标准错误. 2>&1 意思是把标准错误输出重定向到标准输出。 &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中. >&2即1>&2也就是把结果输出到和标准错误一样 /dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉 rumenz.txt > cat out.log > out.log将标准输出重定向到文件,但是1>&2将标准输出重定向到了错误输出,所以out.log里面什么也没有. > ls rumenz.txt out.log将标准输出重定向到文件,但是2>&1将错误输出重定向到标准输出,所以out.log里面既有正常的输出也有错误的输出.
在shell脚本中,默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入)、标准输出(输出到屏幕)、标准错误(也是输出到屏幕),它们分别对应的文件描述符是 0,1,2 。 > 默认为标准输出重定向,与 1> 相同 1>&2 意思是把标准输出重定向到标准错误. 2>&1 意思是把标准错误输出重定向到标准输出。 &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中. >&2即1>&2也就是把结果输出到和标准错误一样 /dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉 rumenz.txt > cat out.log > out.log将标准输出重定向到文件,但是1>&2将标准输出重定向到了错误输出,所以out.log里面什么也没有. > ls rumenz.txt out.log将标准输出重定向到文件,但是2>&1将错误输出重定向到标准输出,所以out.log里面既有正常的输出也有错误的输出.
文件描述符为 2。stdin 是标准输入流,向命令提供输入。文件描述符为 0。输出重定向使用 >> 或 > 将输出流重定向到文件。 &1,2 和 1 分别是 stderr 和 stdout,即将 stderr 重定向到 stdout。 ls /usr /not-exist > output.txt 2>&1 这一行的意思是将 stdout 重定向到 output.txt,且 stderr 重定向到 stdout,即全部重定向到文件。 如果写成 2>1 则表示 stderr 重定向到 1 这个文件,所以有了 2>&1 这样特别的语法。 重定向和 sudo正常的重定向无法配合 sudo 使用,解决的方法是通过 root 调用一个子 shell,在这个子 shell 里面进行重定向。
/bin/bash # shell函数和重定向 # shell 函数 # 函数的定义格式如下 # [ function ] funname [()] # { # action; # [return # 函数参数 # 在Shell中,调用函数时可以向其传递参数。 $#个" } funWithParam 2 4 5 6 # 输出重定向 # 一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件: # 标准输入文件(stdin):stdin的文件描述符为 # 默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。 # 如果希望屏蔽 stdout 和 stderr,可以这样写:command > /dev/null 2>&1 # shell文件包含 # . filename 或者 source filename
m 和 n 合并 需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR) 二、输出重定向 重定向一般通过在命令间插入特定的符号来实现 /p' < test.log > test2.log 从test.log文件中读取含有"shell"字符串的每行内容输出到test2.log文件中 四、重定向解析 一般情况下linux做重定向会打开如下三个文件 如果只想将错误信息输出: command 2>file 错误信息追加到文件末尾: command 2>>file stdout 和 stderr 合并后重定向到 file,可以这样写: command > file 2>&1 结束语 ❤️❤️❤️请大家记得订阅我的专栏【Linux系列】哟❤️❤️❤️ linux相关文章索引 文章链接 Shell 流程控制 Shell 流程控制 Shell 基本运算符 Shell 基本运算符 Shell 变量 Shell 变量 Linux命令篇(一):文件管理部分 Linux命令篇(一):文件管理部分 Linux命令篇(二):文档编辑部分 Linux命令篇(二):文档编辑部分
---- 重定向命令 ? 需要注意的是文件描述符: 0 通常是标准输入(STDIN), 1 是标准输出(STDOUT), 2 是标准错误输出(STDERR)。 追加到文件末尾,例如: $ echo "xiaogongjiang_shell" >> users $ cat users xiaogongjiang xiaogongjiang_shell $ 输入重定向 ---- 如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写: $ command > file 2>&1 或者 $ command >> file 2>&1 ---- 如果希望对 stdin 和 stdout 都重定向,可以这样写: $ command < file1 >file2 command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2 ---- Here Document Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。
/proc/self/fd/2 使用 2> 或 2>> 一条shell命令执行,都会继承父进程的文件描述符因此,所有运行的shell命令,都会有默认3个文件描述符。 标准错误输出重定向 错误命令 2 > 文件 以覆盖的方式,把命令的错误的输出,输出到指定文件或者设备中 标准错误输出重定向 错误命令 2 >> 文件 以追加的方式,把命令的错误输出,输出到指定文件或者设备之中 1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件,不存在直接创建, 无论左边命令执行是否成功,右边文件都会变为空 2、“>>”操作符,判断右边文件,如果不存在就先创建 0x02 高级管道命令 <<EOF 描述:Here Document(”嵌入文档“)是 Shell 中的一种特殊的重定向方式,它的基本的形式如下: << delimiter 将开始标记 delimiter EOF #示例2.在shell脚本中进行使用 #!
在这一篇中,我们介绍了一点关于输入输出重定向和管道的基础知识,本篇将继续重定向的话题。 在开始前,先说一说shell中的引用。 跟在重定向操作符后面的word会经过扩展。 1、输入重定向 [n]<word 2、输出重定向 [n]>word word的扩展结果文件会被命令的输出所覆盖(文件不存在会被创建)。 3、追加输出重定向 [n]>>word 4、重定向标准输出和标准错误 &>word >&word 两种写法同理,相当于>word 2>&1。 /bin/bash #多个重定向出现的顺序有时会影响结果 #标准输出和标准错误都重定向至文件file ls hello file >file 2>&1 #标准错误输出至终端,标准输出重定向至文件 ls hello file 2>&1 >file #重定向出现的位置无关紧要。
数据流重定向:就是某个命令执行后应该要出现在屏幕上的数据传输到其他的地方。 标准输入(stdin):代码为0,使用<或<<; 标准输出(stdout):代码为1,使用>或>>; 标准错误输出(stderr):代码为2,使用2>或2>> 一:标准输出 >:1文件不存在会自动创立 2文件存在,先将文件清空,然后将数据写入 3若文件中已经存在内容,则将文件内容覆盖(若不想覆盖,可用>>,在原文上进行追加) 二:标准错误输出 2>:以覆盖的方法将错误的数据输出到指定文件或者设备上 2>>:以累加的方法,将错误的数据输出到指定的文件或者设备上 #find /home -name .bashrc >list_right 2>list_error 注意: 1 #find /home -name .bashrc 2> /dev/null 2:怎样将正确错误信息统统写入同一个文件??
/proc/self/fd/2 使用 2> 或 2>> 一条shell命令执行,都会继承父进程的文件描述符因此,所有运行的shell命令,都会有默认3个文件描述符。 ,把命令的正确输出,输出到指定文件或者设备之中 标准错误输出重定向 错误命令 2 > 文件 以覆盖的方式,把命令的错误的输出,输出到指定文件或者设备中 标准错误输出重定向 错误命令 2 >> 文件 以追加的方式 1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件,不存在直接创建, 无论左边命令执行是否成功,右边文件都会变为空 2、“>>”操作符,判断右边文件,如果不存在就先创建 0x02 高级管道命令 <<EOF 描述:Here Document(”嵌入文档“)是 Shell 中的一种特殊的重定向方式,它的基本的形式如下: << delimiter 将开始标记 delimiter EOF #示例2.在shell脚本中进行使用 #!
这里说Linux重定向的原因主要还是为了详细了解一下Linux中的反弹shell 目录 0x01 文件描述符 0x02 重定向 0x03 反弹shell 0x04 交互重定向 0x05 命令变形 0x01 文件描述符 Linux的文件描述符有以下三种 标准输入:0 标准输出:1 错误输出:2 对于文件描述符就先知道这些就可以了,具体的使用会在重定向中来说,重定向就是对文件描述符的操作 0x02 重定向 我们这里的输出重定向>,就相当于是1>,输入重定向 <,就相当于是0< 那如果要使用错误输出的话,就必须写成 2> ? 0>&1 将标准输入和标准输出重定向到指定的文件中 如果把这条命令改成2>&1可能会更容易理解一点 ? ? 0x04 交互重定向 理解了上面的内容之后,我们在一步步分解一下交互式shell 使用下面的语句可以将输出内容发送到攻击机上 ? ?
2. 2>&1 这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。 linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符 执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。 刚才提到了,linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令。 /dev/null,将标准输出1重定向到/dev/null中。
这3个文件和其他打开的文件都可以被重定向. 对于重定向简单的解释就是捕捉一个文件, 命令, 程序, 脚本, 或者是脚本中的代码块的输出, 然后将这些输出作为输入发送到另一个文件, 命令, 程序, 或脚本中. 每个打开的文件都会㹿分配一个文件描述符. stdin, stdout, 和stderr的文件描述符分别是0, 1,和 2. 除了这3个文件, 对于其他那些需要打开的文件, 保留了文件描述符3到9. 在经过复杂的重定向和刷新之后需要把它们恢复成正常状态 ? ? ? ?
——前言—— 在Shell编程中,重定向和管道符是两个极其重要的概念,它们让你能够高效地管理输入输出流,并实现强大的命令组合。 在本篇指南中,我们将深入探索重定向和管道符的使用技巧,带你掌握这些强大工具的应用,为你的Shell编程技能注入新的活力。让我们一起开始吧! 重定向和管道符是shell中常用的两种用于控制命令输入输出的技术,它们在shell脚本中有广泛的应用,可以提高脚本的效率和灵活性。 root@localhost ~] uname -r >> 1.txt [root@localhost ~] cat 1.txt x86_64 3.10.0-1160.114.2.el7.x86_64 2. 在 Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息。
理解和掌握输入输出重定向是提高 Shell 使用效率的关键。本文旨在用简单易懂的语言,为你揭开 Shell 重定向的神秘面纱。 在 Shell 中,有三个基本的文件描述符:0 - 标准输入(stdin),默认从键盘读取1 - 标准输出(stdout),默认输出到显示器2 - 标准错误输出(stderr),默认也是输出到显示器了解这三个文件描述符对于理解接下来的内容至关重要 2>> 用于将命令的错误输出重定向到文件中,如果文件已存在,则追加。正确输出和错误信息同时保存command >file 2>&1 将标准输出和错误输出都重定向到同一个文件中,覆盖模式。 command >>file 2>&1 同上,追加模式。command >file1 2>file2 将标准输出和错误输出分别重定向到两个不同的文件中,覆盖模式。 掌握这些技巧后,你就可以更加高效地使用 Shell 进行各种任务处理了。希望本文能帮助你理解和应用 Shell 输入输出重定向的基本概念和技巧。
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。 ---- 输出重定向 重定向一般通过在命令间插入特定的符号来实现。 如果希望 stderr 重定向到 file,可以这样写: $ command 2>file 如果希望 stderr 追加到 file 文件末尾,可以这样写: $ command 2>>file 2 表示标准错误文件 如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写: $ command > file 2>&1 或者 $ command >> file 2>&1 如果希望对 stdin 和 stdout 都重定向,可以这样写: $ command < file1 >file2 command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。 ---- Here Document Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。
文件描述符 0 通常是标准输入(STDIN) 1 是标准输出(STDOUT) 2 是标准错误输出(STDERR)。 2>&1 nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & > out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中 最后一个&。让该命令在后台执行