linux标准输入/输出/错误及重定向
Published on 2023-05-15 14:33 in None with _STAyy

linux标准输入/输出/错误及重定向

    标准输入/输出/错误

    linux下每个进程在运行的过程中都会打开一系列的文件,可以通过lsof -p $pid来查看进程号为pid打开的文件,在/proc/pid/fd/下是该进程打开的文件的链接。其中有三个比较特殊的文件是每个进程都会打开,其文件描述符分为0,1,2,默认分别链接到标准输入(STDIN_FILENO)设备(/dev/stdin)、标准输出(STDOUT_FILENO)设备(/dev/stdout)、标准错误(STDERR_FILENO)(/dev/stderr)设备。

    进程在运行的过程中默认情况下产生的输出会写到stdout文件,产生的错误信息写到stderr文件,默认这两个文件会链接到屏幕设备,许多进程从标准输入stdin获取输入,默认链接为键盘设备。如果更改这几个文件的链接位置,就可以实现对其他文件的输入输出。

    更换标准输入/输出/错误

    • >: 输出重定向到一个文件或设备,覆盖原来的内容
    • >>: 输出重定向到一个文件或设备,追加到末尾
    • <: 输入重定向一个程序
    • <<
    1. 输出
    # echo hello > out.log
    # echo hello 1> out.log
    

    这两个命令的作用是相同的,都是讲echo进程的输出重定向到out.log文件,在这里>左边的1可以省略。

    1. 错误
    # echo hello 2> err.log
    hello
    # echoo hello 2> err.log
    

    2>表示将进程的错误信息重定向到err.log文件,第一行的命令没有错误信息,因此会输出hello到标准输出,即会显示到屏幕上,第二行输出了一个不存在的指令,这时的错误输出信息会输入到err.log中。

    如果需要把输出信息和错误信息都重定向到某个文件:

    # echoo hello 1> err.log 2>&1
    

    这里的1>和前面的用法相同,2>&1是将错误信息追加到标准输出中。>&是一个整体,不可分开。

    一些例子:

    # 错误信息重定向到标准输出,输出重定向到out.log
    # cat file 2>&1 >out.log
    # 将输出重定向到out.log,错误定向到输出
    # cat file >out.log 2>&1
    # 将错误和输出重定向更简单的写法
    # cat file &> out.log
    
    1. 输入

    将一个命令的输入重定向为其他文件。

    # cat < file.in
    

    另外还有一种<<的方式,称为here文档,它会从标准输入中持续读入字符,直到匹配到指定的token读取结束。例如cat命令:

    cat << EOF > out.log
    > hello
    > world
    > EOF
    

    这种方式是将cat 命令的输出重定向到out.log中,其内容是从第二行开始到EOF之前结束,EOF是结束token,可以人为指定为其他字符,例如:

    cat << ENDOFFILE > out.log
    > 1
    > 2
    > 3
    > ENDOFFILE
    

    另一种写法是

    cat > out.log << EOF
    > 1
    > 2
    > 3
    > ENDOFFILE
    

    结果和上面的一致。

    posted @   _STAyy  阅读(1360)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
    · 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
    · 【自荐】一款简洁、开源的在线白板工具 Drawnix
    · 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
    · Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
    点击右上角即可分享
    微信分享提示