나는이 foo.sh
나의 현재의 디렉토리에 파일을. 실행하려고하면 다음 ./foo.sh
과 같은 결과가 나타납니다.
-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied
그러나 내가 /bin/sh ./foo.sh
달리면 잘 돌아갑니다.
이 문제를 어떻게 해결하여 바로 실행할 ./foo.sh
수 있고 / bin / sh를 사용하여 자동으로 실행할 수 있습니까?
편집 : 좋아, 이것은 Chrome OS 이며이 특정 폴더는로 마운트됩니다 noexec
. 분명히 그것은 단지 달리는 능력을 망쳐 놓는다 ./foo.sh
. 그런데 왜? 왜 sh foo.sh
똑같은 것을 달성하기 위해 여전히 달리는가? 그러면 어떤 보안이 noexec
제공됩니까?
답변
noexec
즉, “예상”행동 할 것이기 때문에 플래그는 적절하게, 스크립트에 적용됩니다.
그러나 설정 noexec
은 자신이하는 일에 대해 잘 모르는 사람들 만 막습니다. 실행 sh foo.sh
하면 실제로로 마운트 된 파일 시스템에없는 sh
기본 위치 (아마도 /bin
) 에서 실행 됩니다 noexec
.
당신은 주위를 얻을 수 있습니다 noexec
호출하여 일반 바이너리 파일을 ld
직접.
cp /bin/bash $HOME
/lib/ld-2.7.so $HOME/bash
이것으로 마운트 된 파일 시스템에 있는지 여부에 관계없이 bash를 실행합니다 noexec
.
답변
MS-DOS 2 바이트 (캐리지 리턴 줄 바꿈) 줄 끝으로 파일을 실행하려고하면이 오류 (또는 매우 유사한 메시지)가 표시 될 수도 있습니다.
Vim은 요즘 너무 똑똑해서 캐리지 리턴을 ‘^ M’으로 표시하지 않아도됩니다. 따라서 Vim이 “파일 형식”이라고 생각하는 것을 확인하지 않고 화면 모양에만 의존하면 속일 수 있습니다.
이 경우 “#! / bin / sh ^ M”은 커널이 “/ bin / sh ^ M”을 찾지 못하도록합니다. 실제로 나쁜 통역사.
답변
USB 스틱 (또는 기타 이동식 미디어)에서 스크립트 나 프로그램을 실행할 수있는 옵션이 있으면 마운트를 해제하고 수동으로 다시 마운트 해보십시오.
-
USB 스틱 연결
-
USB 스틱 장치 찾기
$ mount
-
참고하십시오. 그것이 있다고 가정하자
/dev/sdb1
-
USB 스틱 마운트 해제 :
$ cd /media/removable $ sudo umount mountpoint
마지막으로 USB 스틱을 다시 마운트하십시오.
$ sudo mount /dev/sdb1 mountpoint
마운트 포인트를 사용하면 USB 스틱의 마운트 이름
답변
ChromeOS / ChromiumOS의 시스템 보안상의 이유로 특정 폴더가 표시 noexec
되어 있으므로 아래 명령으로 다시 마운트하거나 noexec
두 번째 예제와 같이 설정 되지 않은 대체 경로를 사용해야합니다 .
이 명령은 최소한 개발자 모드에 있고 sudo 비밀번호를 알고있을 뿐 아니라 shell
with에 액세스 할 수 있다고 가정 합니다.chronos@localhost / $
crosh>
sudo mount -i -o remount,exec /home/chronos/user/
Google은 /usr/local
개발자 를 위해 대부분을 보유하고 있으므로 업그레이드 후에도 지속 가능한보다 지속 가능한 방법 :
sudo mkdir -p /usr/local/bin/ && sudo chown -R chronos: /usr/local/bin/
cp ${HOME}/Downloads/foo.sh /usr/local/bin/
여기에 물건을 넣어의 또 다른 이점은에 있다는 것입니다 $PATH
이미 (시도 echo $PATH
당신이에 스크립트 나 바이너리 실행하는 전체 경로를 사용할 필요가 없습니다 있도록이 확인) /usr/local/bin
하고 있었다 chmod +x
그들에 실행합니다.
답변
나는 같은 질문을했다. 내 문제는 SD 카드에 관한 것이었다. 이것은 저에게 효과적이며 여기의 다른 답변보다 훨씬 간단합니다. Crouton issue # 928 에서 배웠습니다 .
$ sudo mount -o remount,exec /media/removable/SD\ Card
장치 (/ dev / mmcblk1p1)가 아닌 마운트 지점을 사용해야합니다. 귀하의 경우 USB (/ dev / sdb1)와 동일합니다. 마운트 지점 만 다릅니다.
$ sudo mount -o remount,exec /media/removable/USB\ Drive
쿼리 할 때 “noexec”가 마운트 옵션에서 사라 지므로 원하는 효과가 있음을 알 수 있습니다.