일부 자동 설치 애플리케이션(예: Netbean, JDK)은 종종 /usr/local
일반 사용자(루트 대신)에게 설치되어 실행됩니다.
하지만 다른 응용 프로그램에서는 tar.gz
파일을 추출하고 실행하면 됩니다. 일반 사용자에서는 명령을 사용하여 한 디렉터리에서 다른 디렉터리로 복사할 수 없으며 cp
루트 사용자(명령)를 사용해야 합니다.Download
/usr/local
su
하지만 루트 사용자로 복사했기 때문에 이 디렉터리는 루트에 속해 있으므로 일반 사용자로는 실행할 수 없습니다. 이것은 나에게 두통을 준다. 위에 나열된 다른 앱처럼 일반 사용자로 어떻게 실행합니까? 아니면 다른 설치 방법이 있나요?
답변1
/usr/local
그리고 그 하위 디렉터리( bin
, lib
등 share
)는 루트가 소유해야 하며(아마도) 누구든지 그곳에서 작업을 실행할 수 있도록 755로 설정해야 합니다.
압축을 풀고 복사한 경우 개별 바이너리의 권한일 수 있으며 일반적인 사용을 허용하려면 이 권한도 755여야 합니다.
그것이 어떻게 $PATH
작동하는지 기억하십시오. JDK 예제는 이와 관련하여 혼란스러울 수 있지만 실행 파일은 ./configure
일반 tarball 에 , 라이브러리는 에 , 문서와 같은 기타 항목은 . 이는 적절한 경로이며 동일한 패턴을 따라야 합니다. 즉, bin/(예: 패키지의 단일 디렉터리)이나 하위 디렉터리의 아무 곳에나 콘텐츠를 배치하는 것만으로는 작동하지 않습니다.make install
/usr/local/bin
/usr/local/lib
/usr/local/share
/usr/local
답변2
발생할 수 있는 두 가지 잠재적인 문제가 있습니다.
첫 번째 질문 - 디렉토리의 실행 권한
/usr/local에 복사한 디렉터리 중 하나에 대한 권한이 올바르게 설정되지 않았을 수 있습니다. 루트가 아닌 사용자가 이 디렉터리에서 프로그램/스크립트를 실행할 수 있도록 디렉터리에 대한 권한이 있어야 합니다.
"다른" 사용자가 디렉터리 외부에서 응용 프로그램을 실행할 수 있도록 디렉터리에 대한 권한을 설정해야 할 수도 있습니다.
예를 들어
# don't have permissions on directory
root$ cd /usr/local
$ ls -ld somedir
drwxr-x--- 2 root root 4096 Apr 25 13:27 somedir
# have permissions on the script
root$ ls -l somedir/testscript.bash
-rwxr-xr-x 1 root root 23 Apr 25 13:27 somedir/testscript.bash
이 경우 다른 사용자가 해당 스크립트에 대한 실행 권한을 가지고 스크립트를 읽고 실행할 수 있더라도 해당 스크립트가 위치한 디렉터리에 대한 읽기 및 실행 권한이 없기 때문에 허용되지 않습니다.
액세스를 허용하도록 디렉터리의 권한을 변경합니다.
user$ ls -ld somedir/
drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/
user$ somedir/testscript.bash
hi
전체 문제는 tar.gz 파일에서 추출된 디렉터리의 권한을 변경하고 스크립트가 포함된 모든 디렉터리를 찾아 chmod +rx <dir>
해당 디렉터리에서 명령을 실행하여 해결할 수 있습니다.
두 번째 질문 - 파일 실행 권한
.tar.gz 파일의 파일에 대한 권한이 설정되지 않았을 수 있으므로 압축을 풀 때 아카이브에 있는 응용 프로그램이나 스크립트가 이러한 권한을 잃을 수 있습니다. 이 특정 문제가 있는 파일을 해결 하면 chmod +x <script>
문제가 해결됩니다.
### For example
user$ ls -ld somedir
drwxr-xr-x 2 root root 4096 Apr 25 13:27 somedir/
user$ ls -l somedir/testscript.bash
-rw-r--r-- 1 root root 23 Apr 25 13:27 somedir/testscript.bash
user$ somedir/testscript.bash
bash: somedir/testscript.bash: Permission denied