stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

exit_status

빈 디렉토리에서 시작합니다.

$ touch aFile
$ ls
aFile

그런 다음 ls두 개의 인수 중 하나가이 디렉토리에 없습니다. 두 출력 스트림을 모두 output. >>동시에 쓰는 것을 피하기 위해 사용 합니다.

$ ls aFile not_exist >>output 2>>output
$ cat output
ls: cannot access 'not_exist': No such file or directory
aFile

작동하는 것 같습니다. 이 접근 방식에 위험이 있습니까?

이끼

아니요, 표준만큼 안전하지 않습니다 >>bar 2>&1.

글을 쓸 때

foo >>bar 2>>bar

를 사용하여 bar파일을 두 번 열고 O_APPEND완전히 독립적 인 파일 객체 [1]를 생성하고 각각 고유 한 상태 (포인터, 열기 모드 등)를 사용합니다.

이것은 2>&1단순히 dup(2)시스템 호출을 호출하는 것과는 매우 다르며 동일한 파일 객체에 대해 stderr 및 stdout 별칭을 교환 할 수 있도록합니다.

이제 문제가 있습니다.

O_APPEND둘 이상의 프로세스가 한 번에 파일에 데이터를 추가하면 NFS 파일 시스템의 파일이 손상 될 수 있습니다. 이는 NFS가 파일에 추가를 지원하지 않기 때문에 클라이언트 커널이이를 시뮬레이션해야하므로 경쟁 조건 없이는 수행 할 수 없습니다.

당신은 일반적으로 같은 파일의 확률에 의지 할 수 bar있는 foo >>bar 2>&1매우 낮은 것으로 두 개의 별도의 장소에서 같은 시간에 기록된다. 그러나 >>bar 2>>bar당신은 이유없이 그것을 수십 배 증가 시켰습니다.

[1] POSIX 용어의 "파일 설명 열기".

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

분류에서Dev

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

분류에서Dev

stderr 및 stdout을 동일한 파일로 리디렉션하는 방법

분류에서Dev

stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

분류에서Dev

Laravel artisan queue : 작업이 stderr / stdout을 파일로 리디렉션

분류에서Dev

스크립트 stderr 및 stdout을 파일로 리디렉션하지만 stdout도 tty로 유지합니까?

분류에서Dev

stdout과 stderr를 모두 파일로 리디렉션 할 때 stderr에서 stdout으로 리디렉션해야하는 이유는 무엇입니까?

분류에서Dev

Python, 디렉토리의 파일을 처리하는 것이 안전합니까?

분류에서Dev

stdout / stderr을 로그 파일로 리디렉션 할 수 없습니다.

분류에서Dev

stdout을 파일로 리디렉션하고 stdout + stderr을 다른 파일로 리디렉션하는 방법은 무엇입니까?

분류에서Dev

stdout 및 stderr를 파일로 리디렉션하는 POSIX 호환 방법

분류에서Dev

STDERR을 파일과 콘솔로 리디렉션하고 STDOUT을 파일로만 리디렉션하는 방법

분류에서Dev

stdin 및 stdout과 동일한 파일을 사용하면 빈 파일이 생성됩니다.

분류에서Dev

Cron은 stdout 및 stderr를 다른 파일로 리디렉션합니다.

분류에서Dev

ContentRoot 디렉토리에 로그 파일을 저장하는 것이 안전합니까?

분류에서Dev

nohup을 사용하여 stdout을 파일로 리디렉션이 작동하지 않습니다.

분류에서Dev

WinSCP는 파일 전송을 자동화합니다. 배치 및 스크립트 파일이 가상 또는 로컬 디렉터리에 있어야합니까?

분류에서Dev

bash 명령을 실행하고 stdout / stderr를 각각 50K로 제한되는 다른 파일로 리디렉션합니다.

분류에서Dev

쓰기 권한이없는 파일로 stdout 리디렉션

분류에서Dev

동일한 접두사로 시작하는 동영상 파일 및 하위 디렉토리 (예 : 자막)의 파일 이름을 바꾸는 방법

분류에서Dev

버퍼없이 stderr을 파일로 리디렉션하는 방법은 무엇입니까?

분류에서Dev

Maven Shade로 애플리케이션 jar을 빌드 할 때 모든 META-INF / versions 디렉토리 / 파일을 제외하는 것이 안전합니까?

분류에서Dev

심볼릭 링크를 사용하여 시스템 폴더 (예 : 프로그램 파일, 사용자 등)를 리디렉션하는 것이 안전합니까?

분류에서Dev

stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

분류에서Dev

stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

분류에서Dev

SFTP 파일 관리자를 통해 파일을 업로드하는 동안 SSH를 통해 서버에서 작업하는 것이 안전합니까?

분류에서Dev

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

분류에서Dev

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

분류에서Dev

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

Related 관련 기사

  1. 1

    stdout 및 stderr을 파일 설명자 복사본없이 동일한 파일로 리디렉션하는 것이 안전합니까?

  2. 2

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

  3. 3

    stderr 및 stdout을 동일한 파일로 리디렉션하는 방법

  4. 4

    stdout 및 stderr을 파일로, stderr을 stdout으로 리디렉션

  5. 5

    Laravel artisan queue : 작업이 stderr / stdout을 파일로 리디렉션

  6. 6

    스크립트 stderr 및 stdout을 파일로 리디렉션하지만 stdout도 tty로 유지합니까?

  7. 7

    stdout과 stderr를 모두 파일로 리디렉션 할 때 stderr에서 stdout으로 리디렉션해야하는 이유는 무엇입니까?

  8. 8

    Python, 디렉토리의 파일을 처리하는 것이 안전합니까?

  9. 9

    stdout / stderr을 로그 파일로 리디렉션 할 수 없습니다.

  10. 10

    stdout을 파일로 리디렉션하고 stdout + stderr을 다른 파일로 리디렉션하는 방법은 무엇입니까?

  11. 11

    stdout 및 stderr를 파일로 리디렉션하는 POSIX 호환 방법

  12. 12

    STDERR을 파일과 콘솔로 리디렉션하고 STDOUT을 파일로만 리디렉션하는 방법

  13. 13

    stdin 및 stdout과 동일한 파일을 사용하면 빈 파일이 생성됩니다.

  14. 14

    Cron은 stdout 및 stderr를 다른 파일로 리디렉션합니다.

  15. 15

    ContentRoot 디렉토리에 로그 파일을 저장하는 것이 안전합니까?

  16. 16

    nohup을 사용하여 stdout을 파일로 리디렉션이 작동하지 않습니다.

  17. 17

    WinSCP는 파일 전송을 자동화합니다. 배치 및 스크립트 파일이 가상 또는 로컬 디렉터리에 있어야합니까?

  18. 18

    bash 명령을 실행하고 stdout / stderr를 각각 50K로 제한되는 다른 파일로 리디렉션합니다.

  19. 19

    쓰기 권한이없는 파일로 stdout 리디렉션

  20. 20

    동일한 접두사로 시작하는 동영상 파일 및 하위 디렉토리 (예 : 자막)의 파일 이름을 바꾸는 방법

  21. 21

    버퍼없이 stderr을 파일로 리디렉션하는 방법은 무엇입니까?

  22. 22

    Maven Shade로 애플리케이션 jar을 빌드 할 때 모든 META-INF / versions 디렉토리 / 파일을 제외하는 것이 안전합니까?

  23. 23

    심볼릭 링크를 사용하여 시스템 폴더 (예 : 프로그램 파일, 사용자 등)를 리디렉션하는 것이 안전합니까?

  24. 24

    stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

  25. 25

    stderr 및 stdout을 다른 파일로 리디렉션하고 터미널에 표시하는 방법은 무엇입니까?

  26. 26

    SFTP 파일 관리자를 통해 파일을 업로드하는 동안 SSH를 통해 서버에서 작업하는 것이 안전합니까?

  27. 27

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

  28. 28

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

  29. 29

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

뜨겁다태그

보관