[LINUX]重定向


概要

1重定向


1.1      重定向符號

>               輸出重定向到一個文件或設備 覆蓋原來的文件
>!              輸出重定向到一個文件或設備 強制覆蓋原來的文件
>>             輸出重定向到一個文件或設備 追加原來的文件
<               輸入重定向到一個程序 

1.2標准錯誤重定向符號

2>             將一個標准錯誤輸出重定向到一個文件或設備 覆蓋原來的文件  b-shell
2>>           將一個標准錯誤輸出重定向到一個文件或設備 追加到原來的文件
2>&1         將一個標准錯誤輸出重定向到標准輸出 注釋:1 可能就是代表 標准輸出
>&             將一個標准錯誤輸出重定向到一個文件或設備 覆蓋原來的文件  c-shell
|&              將一個標准錯誤 管道 輸送 到另一個命令作為輸入

1.3命令重導向示例

在 bash 命令執行的過程中,主要有三種輸出入的狀況,分別是:
1. 標准輸入;代碼為 0 ;或稱為 stdin ;使用的方式為 <
2. 標准輸出:代碼為 1 ;或稱為 stdout;使用的方式為 1>
3. 錯誤輸出:代碼為 2 ;或稱為 stderr;使用的方式為 2>


[test @test test]# ls -al > list.txt
將顯示的結果輸出到 list.txt 文件中,若該文件以存在則予以取代!


[test @test test]# ls -al >> list.txt
將顯示的結果累加到 list.txt 文件中,該文件為累加的,舊數據保留!


[test @test test]# ls -al  1> list.txt   2> list.err
將顯示的數據,正確的輸出到 list.txt 錯誤的數據輸出到 list.err


[test @test test]# ls -al 1> list.txt 2> &1
將顯示的數據,不論正確或錯誤均輸出到 list.txt 當中!錯誤與正確文件輸出到同一個文件中,則必須以上面的方法來寫!不能寫成其它格式!

[test @test test]# ls -al 1> list.txt 2> /dev/null
將顯示的數據,正確的輸出到 list.txt 錯誤的數據則予以丟棄! /dev/null ,可以說成是黑洞裝置。為空,即不保存。

1.4為何要使用命令輸出重導向

• 當屏幕輸出的信息很重要,而且我們需要將他存下來的時候;
• 背景執行中的程序,不希望他干擾屏幕正常的輸出結果時;
• 一些系統的例行命令(例如寫在 /etc/crontab 中的文件)的執行結果,希望他可以存下來時;
• 一些執行命令,我們已經知道他可能的錯誤訊息,所以想以『 2> /dev/null 』將他丟掉時;
• 錯誤訊息與正確訊息需要分別輸出時。

語法

1.以O_WRONLY|O_CREAT模式打開FILE,綁定到COMMAND進程的文件描述符FD

 

COMMAND [FD]> FILE

 

 

2.以O_WRONLY|O_APPEND|O_CREAT模式打開FILE,綁定到COMMAND進程的文件描述符FD

 

COMMAND [FD]>> FILE

 

 

3.以O_RDONLY模式打開FILE,綁定到COMMAND進程的文件描述符FD

COMMAND [FD]<  FILE

 示例代碼,把文件重定向到stdin,進程內讀取文件內容,並且復制到新的文件上:

#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
    #define BUFFER 4096
    char err_1[] = "Opps~an error occurred when copy.";
    char buf[BUFFER];
    short rnum = 0;
    char copy_1_pth[] = "./c14_copy.dat";
    int copy_1_fd = open(copy_1_pth, O_RDWR|O_CREAT, 0777);
    while((rnum = read(STDIN_FILENO, buf, BUFFER)) != 0){
        if(rnum != write(copy_1_fd, buf, rnum)){
            write(STDERR_FILENO, err_1, strlen(err_1));
            break;
        }
    }
    printf("Okay.\n");
}

4.以O_RDWR模式打開FILE,綁定到COMMAND進程的文件描述符FD

COMMAND [FD]<>  FILE

 5.在一個進程內,除了把COMMAND [FD]重定向到FILE [FD1]外,再把COMMAND [FD2]重定向到FILE 的[FD1]

COMMAND [FD]> FILE [FD1]>&[FD2]

示例,把test的stdout定位到log.txt stdin,再把test的stderr定位到log.txt stdin:

./test > log.txt 2>&1

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM