sudo -u를 사용할 때 경로에서 와일드카드 문자를 이스케이프하는 방법명령[중복]

sudo -u를 사용할 때 경로에서 와일드카드 문자를 이스케이프하는 방법명령[중복]

루트 호박이 활성화된 NFS 파일 서버의 파일에 액세스해야 합니다. 저는 Arch Linux에서 bash를 사용하고 있습니다. 나는 이런 유형의 명령을 사용하고 있습니다.

# sudo -u authduser ls /mounted/filesystem/path/aa.user.js

이는 성공하고 출력은 다음과 같습니다.

/mounted/filesystem/path/aa.user.js

그러나 bb.user.js와 같은 파일이 여러 개 있습니다. 다음 명령을 시도하면 실패합니다.

# sudo -u authduser ls /mounted/filesystem/path/*.user.js

출력은 다음과 같습니다

ls: '/mounted/filesystem/path/*.user.js'에 액세스할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.

나는 인용, 이스케이프 및 기타 다양한 방법을 시도했지만 성공하지 못했습니다. 올바른 접근 방식은 무엇입니까?

답변1

와일드카드의 문제점은 sudo명령을 실행하기 전에 쉘에 의해 확장된다는 것입니다.

authduser아래의 파일 만 나열할 수 /mounted/filesystem/path/있고 명령을 실행하는 사용자는 나열할 수 없는 sudo경우 쉘은 와일드카드를 확장할 수 없으며 수정되지 않은 상태로 전달됩니다. 와일드카드 자체를 확장하지 않으므로 ls표시되는 오류가 발생합니다.

바라보다와일드카드 문자를 사용한 sudo mv 작업이 작동하지 않는 이유는 무엇입니까?더 알아보기.

이 문제를 해결하려면 대상 사용자로 쉘을 생성하는 sudo' -s인수를 사용할 수 있습니다(단순히 명령을 직접 실행하는 대신). 이 경우 명령도 제공하면 옵션 -c( 이는 쉘이 와일드카드 확장을 포함하여 명령을 해석하고 실행하는 일반적인 옵션입니다.)

sudo이 경우 명령을 실행하는 셸이 명령을 해석하지 않고 sudo대상 사용자로 생성된 명령 만 해석하도록 명령을 따옴표(가급적 작은따옴표)로 묶어야 합니다 .

# sudo -u authduser -s 'ls /mounted/filesystem/path/*.user.js'

보다sudo 맨페이지자세한 내용은 이 -s옵션을 참조하세요.

고쳐 쓰다:실제로 여기서 명령을 사용하는 것은 불가능합니다 sudo -s. 바라보다"sudo -s"는 셸에서 명령을 실행하지만 와일드카드나 메타 문자가 작동하지 않습니다.자세한 내용은.

답변2

다음 방법이 유효합니다.

sudo -u authduser bash -c "ls /mounted/filesystem/path/*.user.js"

무루가 맞습니다. 질문은 다음과 비슷합니다.와일드카드 문자를 사용한 sudo mv 작업이 작동하지 않는 이유는 무엇입니까?, 와는 별개로반대루트에는 권한이 없지만 일반 사용자에게는 권한이 있습니다. 문제는 작업의 우선순위로 귀결되며 해결 방법은 sudo 작업 전이 아닌 뒤에 와일드카드를 확장하는 것입니다.

관련 정보