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


13

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

[ -f /path/to/file/ ]

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

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


2
내 시스템에서 작동합니다. 증상은 무엇입니까? -e가 아니라 -f를 사용 하시겠습니까?
b0fh

답변:


11

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

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

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


4
문제가있을 수 있습니다. sudo명령이 실패하면 (잘못된 암호, / etc / sudoers에서 허용되지 않는 등) 파일이 존재하지 않는 것과 동일한 결과를 제공합니다.
Gordon Davisson

1
@Gordon - 진실 : 내 대답은에 입각 sudo:) 부분 작업
voretaq7

13
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

Luca Borrione의 답변은 저에게 완벽하게 효과가있었습니다. 루트로만 읽을 수있는 디렉토리 안에있는 파일이 있는지 테스트해야했습니다.
wallheater

1

다른 답변에 추가하여 테스트 또는 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.