![쉘 스크립트에서 파일을 잠그는 방법은 무엇입니까? [복사]](https://linux55.com/image/94212/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%9E%A0%EA%B7%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
파일 잠금을 통해 두 개의 Bash 스크립트를 동기화하고 싶습니다. 어떻게 해야 하나요? Zsh에는 zsystem flock
호출이 있지만 Bash에서도 작동하는 좀 더 "껍질 같은" 접근 방식이 있습니까?
답변1
파일 자체를 잠그는 것 외에도 잠금 역할을 하는 파일(잠금 파일)을 만들 수 있습니다. procmail
이를 달성하기 위한 다음과 같은 많은 유틸리티가 있습니다.lockfile
, 데비안에서 이 liblockfile-bin
패키지는 dotlockfile
대부분의 시스템에서 사용할 수 있을 만큼 일반적입니다.
그러나 기본적으로 다음과 같이 요약됩니다.
tempfile=$(mktemp ./lock.XXXX)
lockfile=./lockfile
if ln $tempfile $lockfile ; then
echo got it
# do something
rm $lockfile # after you're done
else
echo did not succeed
fi
rm $tempfile
ln
이와 달리 echo > file
대상이 이미 존재하는 경우 대상을 삭제하지 않고 대신 확인할 수 있는 오류가 발생합니다.
노트:잠그고 싶다면네트워크 파일 시스템, 이 목적을 위해 만들어진 일부 도구를 사용합니다. NFS를 통한 동시 파일 액세스의 의미는... 아무리 말해도 흥미롭습니다.