쉘 스크립트에서 어떻게 쉽게 할 수 있습니까?비침습적실제로 파일을 수정하려고 시도하지 않고 파일에 대한 쓰기 액세스를 테스트하시겠습니까?
출력을 구문 분석할 수 있지만 stat
통계 출력이 구현 및 타이밍에 얼마나 큰 차이를 가져올지는 잘 모르겠지만 이는 매우 복잡하고 불안정할 수 있습니다.
파일 끝에 추가하여 성공하는지 확인할 수 있지만 이는 두 가지 이유로 위험할 수 있습니다.
- 이제 추가 항목을 제거해야 합니다. 이는 내 줄이 더 이상 마지막 줄이 아니기 때문에 다른 프로세스가 파일에 쓰는 경우 즉시 매우 중요해집니다.
- 파일을 읽는 모든 프로세스에는 파일 내용에 대한 임의의 요구 사항이 있을 수 있으며 이로 인해 응용 프로그램이 중단될 수도 있습니다.
답변1
그냥 사용 - w
플래그test
공익사업:
[ -w /path/to/file ] && echo "writeable" || echo "write permission denied"
나중에 파일에 쓰려고 하면 여전히 파일에 쓰지 못할 수도 있습니다. 파일이 이동되었거나 권한이 변경되었을 수 있습니다. 다음과 같은 상황도 발생할 수 있습니다.-w
쓰기 권한이 감지되었지만 파일을 쓸 수 없게 만들기 위해 다른 요인이 개입했습니다..
답변2
또 다른 방법:
if >> /path/to/file
then
echo "writeable"
else
echo "write permission denied"
fi
그러면 추가할 파일을 열려고 시도하고 성공하면 달리기주문 불가(즉,빈 명령 실행) 파일로 출력합니다.
파일이 존재하지 않으면 빈 파일이 생성됩니다.
-w
명령 운영자는 test
단지 a를 수행 stat
한 다음 사용자에게 액세스 권한이 있어야 하는지 여부를 결정하려고 시도할 수 있습니다. 일부 특별한 경우에는 위의 대안이 test
셸이 아닌 커널에 의해 액세스 확인을 강제로 수행하기 때문에 이 방법보다 더 안정적입니다. 예를 들어,
- 파일이 Unix가 아닌 파일 시스템에 있는 경우(특히 Unix가 아닌 파일 서버에서 원격으로 마운트하는 경우)
stat
잘못된 모드 값이 반환될 수 있습니다. - 파일이 읽기 전용으로 마운트된 파일 시스템에 있는 경우.
- 파일에 ACL이 있고 패턴은 액세스 권한이 있어야 하는 것처럼 보이지만 ACL이 이를 거부하거나 그 반대의 경우입니다.
- 일부 보안 프레임워크(AppArmor, SELinux 등)가 파일에 대한 액세스를 거부하는 경우.
답변3
G-man 말이 맞아요: [ -w ]
아니요.언제나솔직히 말하자면. 존재하지 않는 파일을 처리하고허가가 거부되었습니다셸에서 보낸 메시지:
( [ -e /path/to/file ] && >> /path/to/file ) 2> /dev/null &&
echo writable ||
echo not writable
고쳐 쓰다: 좀 무서운 것 같지 않나요? 글쎄요. 글쎄... 어떻게 표현할까요... 예상대로 작동해야 하는 상황에 있다는 것을 완전히 알지 않는 한 이것을 사용하지 마십시오. Stephen의 의견을 참조하십시오.
그러면 어떤 결론이 내려지나요? 사실을 말하지 않아도 [ -w ]
명령은 이것 뿐이야고의로작업을 수행합니다. 그렇지 않다면 우리는 그것을 비난하고 버그 보고서를 작성합니다. 그러면 앞으로는 작동할 것입니다. 그것이 작동하고 사용되는 조건을 더 잘 확인하십시오 [ -w ]
. 특별한 경우를 위한 특별한 코드를 작성하십시오. 솔루션에는 자체 조건이 있습니다.
[ -w /path/to/file ]
그게 제일이야선험적으로.