답변:
설명하는 것은 절대 경로를 사용하고 있고 -f
( "파일이 존재하고 일반 파일입니다") 실제로 수행하려는 테스트입니다.
/
질문에 게시 한 내용에 후행이 표시 됩니다. 디렉토리를 테스트하고 있습니까? -d
또는 이어야합니다 -e
( "유형에 관계없이 해당 이름으로 존재")
또한 길을 따라 뭔가를 읽을 수없는 경우를 제외하고 있습니다 test
( [
) 루트가 소유 한 파일이 존재 여부 (예 여부를 말할 수 있어야 [ -f /root/.ssh/known_hosts ]
/root/.ssh 디렉토리가 적어도하지 (또는 때문에, 아마 실패 할 것이다 shouldn 't은 수 ) 일반 사용자가 읽을. [ -f /etc/crontab ]
성공한다).
sudo
명령이 실패하면 (잘못된 암호, / etc / sudoers에서 허용되지 않는 등) 파일이 존재하지 않는 것과 동일한 결과를 제공합니다.
sudo
:) 부분 작업
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
특정 사용자가 파일이나 디렉토리를 읽을 수 있는지 루트에서 확인하려면 반대편에서 작업을 완료하십시오.
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
다른 답변에 추가하여 테스트 또는 sudo 인증 실패를 구별하는 것은 먼저 실행하여 수행 할 수 있습니다 sudo true
. 내가 아는 대부분의 sudo 구현은 짧은 기간 내에 재 인증을 요구하지 않습니다.
예를 들면 다음과 같습니다.
if sudo true; then
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
else
echo "SUDO AUTHENTICATION FAILED"
fi