비침투적으로 파일에 대한 쓰기 액세스를 테스트하는 방법은 무엇입니까?

비침투적으로 파일에 대한 쓰기 액세스를 테스트하는 방법은 무엇입니까?

쉘 스크립트에서 어떻게 쉽게 할 수 있습니까?비침습적실제로 파일을 수정하려고 시도하지 않고 파일에 대한 쓰기 액세스를 테스트하시겠습니까?

출력을 구문 분석할 수 있지만 stat통계 출력이 구현 및 타이밍에 얼마나 큰 차이를 가져올지는 잘 모르겠지만 이는 매우 복잡하고 불안정할 수 있습니다.

파일 끝에 추가하여 성공하는지 확인할 수 있지만 이는 두 가지 이유로 위험할 수 있습니다.

  1. 이제 추가 항목을 제거해야 합니다. 이는 내 줄이 더 이상 마지막 줄이 아니기 때문에 다른 프로세스가 파일에 쓰는 경우 즉시 매우 중요해집니다.
  2. 파일을 읽는 모든 프로세스에는 파일 내용에 대한 임의의 요구 사항이 있을 수 있으며 이로 인해 응용 프로그램이 중단될 수도 있습니다.

답변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 ]

그게 제일이야선험적으로.

관련 정보