tee를 사용하여 여러 명령 출력을 동일한 파일에 동시에 파이프하는 것이 안전합니까?

산 제이 프라자 파트

다음과 같은 터미널을 사용하여 동시에 여러 명령의 출력을 동일한 파일로 파이프하고 있습니다.

cmd1 | tee -a /tmp/file
cmd2 | tee -a /tmp/file
cmd3 | tee -a /tmp/file

사용하는 것이 안전합니까? 이 방법으로 데이터 손실 또는 읽기 / 쓰기 권한 문제가 있습니까?

편집 : 출력이 섞여도 괜찮습니다. 모든 것이 파일에 기록되는지 확인하고 싶습니다. 두 명령이 정확히 같은 시간에 파일에 출력을 쓰려고하면 충돌이 발생합니까?

앤디 달튼

append( -a) 모드 와 함께 tee를 사용 하면 추가 작업이없는 파일 시스템 (예 : NFS)을 제외하고 데이터 손실 위험이 없습니다. 에서 append모드 tee으로 파일이 열립니다 O_APPEND플래그.

$ echo 1 | strace tee -a /tmp/file 2>&1 | grep open | grep /tmp/file
openat(AT_FDCWD, "/tmp/file", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3

에서 man 2 openat:

O_APPEND
     The file is opened in append mode.  Before each write(2), the
     file offset is positioned at the end of the file, as if with
     lseek(2).  The modification of the file offset and the write
     operation are performed as a single atomic step.

핵심 문장 은 파일 오프셋 수정 및 쓰기 작업이 단일 원자 단계로 수행됩니다 . write()인스턴스에 대한 모든 호출 tee은 파일 오프셋을 파일 끝에 원자 적으로 배치 한 다음 데이터를 씁니다.

openat매뉴얼 페이지 사용이 패턴 (앞에서 언급 한 바와 같이) NFS 파일 시스템에 안전하지 않습니다 유의을 수행합니다

     O_APPEND may lead to corrupted files on NFS filesystems if more
     than one process appends data to a file at once.  This is be‐
     cause  NFS does not support appending to a file, so the client
     kernel has to simulate it, which can't be done without a race
     condition.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

tee를 사용하여 여러 명령 출력을 동일한 파일에 동시에 파이프하는 것이 안전합니까?

분류에서Dev

파이프 뒤에 여러 인수를 사용하여 동일한 명령을 여러 번 실행

분류에서Dev

시스템 명령을 사용하여 stdout 및 stderr 출력을 파일로 리디렉션하는 것이 Perl에서 작동하지 않습니다.

분류에서Dev

파일 리디렉션 또는 파이프를 사용하여 명령을 공급하는 것이 항상 작동하는 것은 아닙니다.

분류에서Dev

여러 명령의 출력을 동일한 파일에 저장

분류에서Dev

.zip 파일에서 cat 명령을 실행하는 것이 안전합니까?

분류에서Dev

배치로 파이프되는 두 명령에서 동일한 출력 파일을 사용하는 방법

분류에서Dev

명령 프롬프트를 사용하여 이미지 파일 (폴더에있는)을 하나의 파일로 덮어 쓰려면 어떻게합니까?

분류에서Dev

컴파일러에 전달 된 동일한 매개 변수를 사용하여 cmake에서 명령을 실행하는 방법은 무엇입니까?

분류에서Dev

파이프 명령을 사용하여 파일에 속성을 표시하려면 어떻게합니까?

분류에서Dev

파이프를 사용하여 동일한 프로세스에서 여러 쉘 명령을 실행할 때 교착 상태 읽기

분류에서Dev

소스 파일을 삭제하기 전에 md5 합계 비교를 사용하여 파일을 이동하는 스크립트 / rsync 명령 도움말 /

분류에서Dev

명령의 출력을 하나의 파일로 리디렉션 할 수 있지만 여전히 출력이 터미널에서 에코를 유지합니까?

분류에서Dev

HDFS 파일 대상을 사용하여 SSIS의 hdfs로 푸시하는 동안 파일에 타임 스탬프를 제공하는 방법이 있습니까?

분류에서Dev

파이프 명령에서 tee를 사용할 때 이상한 출력

분류에서Dev

메모장을 사용하여 생성하고 CSC 명령을 사용하여 컴파일 한 .CS 파일에 서명하는 방법이 있습니까?

분류에서Dev

기본 csv 라이브러리를 사용하여 여러 csv 파일을 동시에 열 수 있습니까?

분류에서Dev

exec 명령을 사용하는 동안 (로그 파일에 쓰는 동안) 왜 권한이 거부됩니까?

분류에서Dev

동일한 소스에서 C 전처리기를 여러 번 실행하는 것이 안전합니까?

분류에서Dev

노틸러스를 사용하여 삼바 드라이브에 연결하는 것과 동일한 명령 줄은 무엇입니까?

분류에서Dev

scp 명령을 사용하여 동일한 이름을 그대로 유지하는 파일을 전송 하시겠습니까?

분류에서Dev

파이썬을 사용하여 다른 파일 안에있는 여러 파일에서 데이터를 추출하는 방법은 무엇입니까?

분류에서Dev

Java를 사용하여 동일한 cmd.exe 창에서 여러 명령을 실행하십시오.

분류에서Dev

유닉스 명령을 사용하여 다른 폴더에 비슷한 이름의 여러 파일을 결합하는 방법은 무엇입니까?

분류에서Dev

MySQL에서 CSV 파일 또는 여러 INSERT 명령을로드하는 것이 더 빠릅니까?

분류에서Dev

rpm 사양 파일 내부를 사용하는 동안 date 명령이 잘못된 출력을 제공함

분류에서Dev

awk, sed 명령을 사용하여 lftp 로그 파일에서 파일 이름을 추출합니다.

분류에서Dev

xcopy는 / F를 사용하여 전체 파일 이름을 표시하는 경우에만 작동합니다.

분류에서Dev

파이프 명령에서 현재 파일 이름을 여러 번 사용하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    tee를 사용하여 여러 명령 출력을 동일한 파일에 동시에 파이프하는 것이 안전합니까?

  2. 2

    파이프 뒤에 여러 인수를 사용하여 동일한 명령을 여러 번 실행

  3. 3

    시스템 명령을 사용하여 stdout 및 stderr 출력을 파일로 리디렉션하는 것이 Perl에서 작동하지 않습니다.

  4. 4

    파일 리디렉션 또는 파이프를 사용하여 명령을 공급하는 것이 항상 작동하는 것은 아닙니다.

  5. 5

    여러 명령의 출력을 동일한 파일에 저장

  6. 6

    .zip 파일에서 cat 명령을 실행하는 것이 안전합니까?

  7. 7

    배치로 파이프되는 두 명령에서 동일한 출력 파일을 사용하는 방법

  8. 8

    명령 프롬프트를 사용하여 이미지 파일 (폴더에있는)을 하나의 파일로 덮어 쓰려면 어떻게합니까?

  9. 9

    컴파일러에 전달 된 동일한 매개 변수를 사용하여 cmake에서 명령을 실행하는 방법은 무엇입니까?

  10. 10

    파이프 명령을 사용하여 파일에 속성을 표시하려면 어떻게합니까?

  11. 11

    파이프를 사용하여 동일한 프로세스에서 여러 쉘 명령을 실행할 때 교착 상태 읽기

  12. 12

    소스 파일을 삭제하기 전에 md5 합계 비교를 사용하여 파일을 이동하는 스크립트 / rsync 명령 도움말 /

  13. 13

    명령의 출력을 하나의 파일로 리디렉션 할 수 있지만 여전히 출력이 터미널에서 에코를 유지합니까?

  14. 14

    HDFS 파일 대상을 사용하여 SSIS의 hdfs로 푸시하는 동안 파일에 타임 스탬프를 제공하는 방법이 있습니까?

  15. 15

    파이프 명령에서 tee를 사용할 때 이상한 출력

  16. 16

    메모장을 사용하여 생성하고 CSC 명령을 사용하여 컴파일 한 .CS 파일에 서명하는 방법이 있습니까?

  17. 17

    기본 csv 라이브러리를 사용하여 여러 csv 파일을 동시에 열 수 있습니까?

  18. 18

    exec 명령을 사용하는 동안 (로그 파일에 쓰는 동안) 왜 권한이 거부됩니까?

  19. 19

    동일한 소스에서 C 전처리기를 여러 번 실행하는 것이 안전합니까?

  20. 20

    노틸러스를 사용하여 삼바 드라이브에 연결하는 것과 동일한 명령 줄은 무엇입니까?

  21. 21

    scp 명령을 사용하여 동일한 이름을 그대로 유지하는 파일을 전송 하시겠습니까?

  22. 22

    파이썬을 사용하여 다른 파일 안에있는 여러 파일에서 데이터를 추출하는 방법은 무엇입니까?

  23. 23

    Java를 사용하여 동일한 cmd.exe 창에서 여러 명령을 실행하십시오.

  24. 24

    유닉스 명령을 사용하여 다른 폴더에 비슷한 이름의 여러 파일을 결합하는 방법은 무엇입니까?

  25. 25

    MySQL에서 CSV 파일 또는 여러 INSERT 명령을로드하는 것이 더 빠릅니까?

  26. 26

    rpm 사양 파일 내부를 사용하는 동안 date 명령이 잘못된 출력을 제공함

  27. 27

    awk, sed 명령을 사용하여 lftp 로그 파일에서 파일 이름을 추출합니다.

  28. 28

    xcopy는 / F를 사용하여 전체 파일 이름을 표시하는 경우에만 작동합니다.

  29. 29

    파이프 명령에서 현재 파일 이름을 여러 번 사용하는 방법은 무엇입니까?

뜨겁다태그

보관