현재 개인 프로젝트를 진행 중인데 다음과 같이 echo 명령을 사용하여 간단히 로그를 작성하고 싶습니다.
내 질문은 echo 명령이 동시에 동일한 파일에 액세스하는 경우 스왑 파일이 생성됩니까? 아니면 상황을 순서대로 유지하기 위해 echo 명령 내부에 대기열이 있습니까?
예:
$ cat a.txt
aa
bb
cc
$ echo "apple" >> a.txt
aa
bb
cc
apple
답변1
echo
명령 보다는리디렉션. >
명령의 출력을 파일로 사용하거나 리디렉션하는 경우 >>
,껍데기파일을 열고 프로세스에 중간 임시 파일 없이 직접 씁니다. 따라서 두 프로세스가 동시에 동일한 파일에 쓰려고 하면 한 프로세스가 다른 프로세스가 쓴 텍스트를 덮어쓰는 등 예상치 못한 결과가 발생할 수 있습니다.
한 가지 가능한 해결책은 flock
주어진 시간에 하나의 프로세스만 파일에 액세스할 수 있도록 하는 것입니다. 그리고 다른 프로세스가 거기에 쓰려고 하면 명령은 flock
파일 잠금이 해제될 때까지 기다립니다. 예를 들어:
flock a.txt echo "apple" >> a.txt