linux 重定向中的 &> 和 >的作用?

2025-04-11 11:26:37
推荐回答(3个)
回答(1):

linux重定向中&>和>&是一个意思,是“复制一个文件描述符”的意思。


一、linux重定向的设备代码


  1.   标准输入(stdin) 代码为 0 ,实际映射关系:/dev/stdin -> /proc/self/fd/0 

  2.   标准输出(stdout)代码为 1 , 实际映射关系:/dev/stdout -> /proc/self/fd/1

  3.  标准错误输出(stderr)代码为 2 ,实际映射关系: /dev/stderr ->/pro/self/fd/2

    举例:正常输出和错误信息都不显示,把标准输出和标准错误都重定向到/dev/null

 # ls 1>/dev/null 2>/dev/null


二、linux重定向的符号意义


    1.  > 和 < 分别代表重定向的方向,是从左到右还是从右到左

    2.  >> 和 << 代表追加,也就是不改变重定向目标文件原有的内容,追加在后面。

#举例: 将执行 "ls -lag" 命令的结果追加到文件 lee.dat 中
ls -lag >> lee.dat

    3.  >&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;


    4.  <&n 标准输入复制自文件描述符 n;

#举例: 让标准错误输出和标准输入一样都被存入到文件中
find /home -name lee* > all_lee 2>& 1

    5.  n<&- 表示将 n 号输入关闭
    6.  <&- 表示关闭标准输入(键盘)
    7.  n>&- 表示将 n 号输出关闭
    8.  >&- 表示将标准输出关闭

#举例: 关闭 1 ,2 文件描述符
ls test.sh test1.sh  1>&- 2>&-

回答(2):

&> 等如 2>&1 , > 等如 1> ,那是缩写,
1 是 STDOUT, 2 是 STDERR, 2>&1 就是 STDOUT 和 STDERR
同导向到同一文件里, 例

nc10@your-5554c55be4 ~
$ ls llllllll
ls: 无法访问 llllllll: No such file or directory

nc10@your-5554c55be4 ~
$ ls llllllll 2> log.txt

nc10@your-5554c55be4 ~
$ ls page1.html > log2.txt

nc10@your-5554c55be4 ~
$ cat log.txt log2.txt
ls: 无法访问 llllllll: No such file or directory
page1.html

nc10@your-5554c55be4 ~
$ ls llllllll page1.html > log3.txt 2>&1

nc10@your-5554c55be4 ~
$ cat log3.txt
ls: 无法访问 llllllll: No such file or directory
page1.html

nc10@your-5554c55be4 ~
$ ls llllllll page1.html &> log4.txt

nc10@your-5554c55be4 ~
$ cat log4.txt
ls: 无法访问 llllllll: No such file or directory
page1.html

nc10@your-5554c55be4 ~
$

回答(3):

"> 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空;一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节);
>>这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响,另外你是感兴趣的话可以看下刘遄老师写的《Linux就该这么学》作为入门的书籍,觉得不错的话采纳下哦~
"