Netbean, JDK와 같이 자동으로 설치되는 일부 응용 프로그램은 /usr/local
루트가 아닌 일반 사용자가 설치하고 실행하는 경우가 많습니다.
하지만 다른 응용 프로그램은 tar.gz
파일을 추출하고 실행하면 됩니다. 일반 사용자에서는 명령을 사용하여 디렉터리 cp
에서 디렉터리로 복사 할 수 없으며 루트 사용자(명령)를 사용해야 합니다 .Download
/usr/local
su
하지만 루트 사용자로 복사하기 때문에 이 디렉토리는 루트에 속하므로 일반 사용자로는 실행할 수 없습니다. 그것은 내 두통을 만든다. 위에 나열된 다른 응용 프로그램과 같이 일반 사용자로 어떻게 실행할 수 있습니까? 아니면 설치하는 다른 방법이 있나요?
답변1
/usr/local
그리고 그 하위 디렉터리( bin
, lib
, share
등)는 누구나 소유한 루트에 있어야 하며 누구나 그곳에서 작업을 실행할 수 있도록 755를 설정해야 합니다.
압축을 풀고 복사한 경우 개별 바이너리에 대한 권한이 될 수 있으며 일반적인 사용을 허용하려면 이 권한도 755여야 합니다.
작동 방식을 명심하세요 $PATH
. JDK의 예는 이와 관련하여 혼란스러울 수 있지만 실행 파일을 에 , 라이브러리를 에 , 문서와 같은 기타 항목을 에 ./configure
넣을 일반 타르볼입니다 . 이는 적절한 경로이며 동일한 패턴을 따라야 합니다. 즉, 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