sudo -u 사용자 이름 -s "cmd arg"는 명령을 찾을 수 없음을 반환합니다.

sudo -u 사용자 이름 -s "cmd arg"는 명령을 찾을 수 없음을 반환합니다.

나는 다음 명령을 실행하곤 했습니다.

sudo -u elasticsearch -s "ulimit -Hn"

Ubuntu 11.10에서 시도할 때까지 사용자 elasticsearch에서 볼 수 있는 ulimit -Hn 값을 반환합니다. 거기에서 다음이 반환됩니다.

/bin/bash: ulimit -Hn: command not found

몇 가지 다른 명령을 시도했지만 매개 변수를 사용할 때 항상 "명령을 찾을 수 없습니다"라는 메시지가 나타납니다.

$ sudo -u elasticsearch -s "ls all.sh"
/bin/bash: ls all.sh: command not found

매개변수가 필요한 명령을 실행하는 방법에 대한 아이디어가 있습니까 sudo?

답변1

큰따옴표를 제거해야 합니다. "ulimit -Hn"이라는 명령을 단일 명령(공백 등 포함)으로 실행하려고 시도합니다. 명령줄 의 마지막 옵션 -s이어야 하며 다음 인수는 모두 실행에 전달됩니다 .sudosudo$SHELL -c

sudo -u elasticsearch -s ulimit -Hn

현재 방식 에서는 명령줄에서 인수를 이스케이프 처리하여 공백이 포함된 인수를 전달할 수 있기 때문에 처리 방식이 -s변경된 것 같습니다.$SHELL

$ touch '/tmp/foo bar'
$ sudo -s rm '/tmp/foo bar'

이전 매개변수 처리 방법에서는 '/tmp/foo bar'매개변수를 두 부분으로 분할하여 명령을 중단했습니다.

관련 정보