lock 명령을 사용하여 파일을 잠그려고 합니다. 구문은 다음과 같습니다.
./lock </path/to/file/name>
특정 디렉터리에 있는 여러 파일을 잠가야 합니다. 이를 위해 두 개의 스크립트를 사용합니다.
parent.sh
child.sh
parent.sh
child.sh
각 파일마다 하나의 프로세스가 호출됩니다. 따라서 9개의 파일을 잠가야 한다면 parent.sh
9개의 파일을 생성 해야 child.sh
하지만 불행하게도 그런 일은 일어나지 않았습니다.
[root@localhost /]# cat parent.sh
#!/bin/ksh
for f in /vol4/commit/file[1-9]
do
sh /child.sh & $f
done
[root@localhost /]# cat child.sh
#!/bin/ksh
./lock $1
실행하면 sh parent.sh
다음 오류가 발생합니다.
[root@localhost /]# sh parent.sh
parent.sh: line 4: /vol4/commit/file1: Permission denied
parent.sh: line 4: /vol4/commit/file2: Permission denied
parent.sh: line 4: /vol4/commit/file3: Permission denied
parent.sh: line 4: /vol4/commit/file4: Permission denied
parent.sh: line 4: /vol4/commit/file5: Permission denied
parent.sh: line 4: /vol4/commit/file6: Permission denied
parent.sh: line 4: /vol4/commit/file7: Permission denied
parent.sh: line 4: /vol4/commit/file8: Permission denied
parent.sh: line 4: /vol4/commit/file9: Permission denied
저는 루트로 실행 중이기 때문에 여기에 권한 문제가 있을 것이라고는 예상하지 못했지만, 제가 본 것은 그렇습니다.
답변1
4번째 줄 parent.sh
에 sh /child.sh & $f
. & 기호는 아래와 같이 명령 끝에 배치되어야 합니다 sh /child.sh $f &
.
귀하의 경우 sh /child.sh
백그라운드에서 실행한 다음 포그라운드에서 실행하려고 하면 파일이 실행 가능하지 않다고 $f
가정할 수 있으므로 권한이 거부됩니다 ./vol4/commit/file[1-9]
또한 파일이 읽기 전용인 경우 루트에 대해서도 편집하거나 쓰기 잠금을 획득할 수 없다는 점에 유의하시기 바랍니다.