sudo를 사용하여 파일이 있는지 어떻게 확인할 수 있습니까? 일반 사용자로 실행

파일이 존재하는지 확인하고 싶습니다.

[ -f /path/to/file/ ]

그러나이 명령을 일반 사용자로 실행 중이며 파일은 루트가 소유합니다. sudo를 사용하여 이것을 달성하려면 어떻게해야합니까?

sudo [ -f /path/to/file/ ] 작동하지 않습니다.



답변

설명하는 것은 절대 경로를 사용하고 있고 -f( “파일이 존재하고 일반 파일입니다”) 실제로 수행하려는 테스트입니다.

/질문에 게시 한 내용에 후행이 표시 됩니다. 디렉토리를 테스트하고 있습니까? -d또는 이어야합니다 -e( “유형에 관계없이 해당 이름으로 존재”)

또한 길을 따라 뭔가를 읽을 수없는 경우를 제외하고 있습니다 test( [) 루트가 소유 한 파일이 존재 여부 (예 여부를 말할 수 있어야 [ -f /root/.ssh/known_hosts ]/root/.ssh 디렉토리가 적어도하지 (또는 때문에, 아마 실패 할 것이다 shouldn ‘t은 수 ) 일반 사용자가 읽을. [ -f /etc/crontab ]성공한다).


답변

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


답변