일부 오류 해결 방법
10141 단어 linux서버Permissiongroups사용자 로그인
Execute permission denied
또는 The parameter list is too long
오류 메시지가 발생했습니까?잘못된 원인을 알고 싶으십니까?이것은 UNIX와 Linux 초보자들이 자주 겪는 오류입니다. 그들은 이러한 문제를 어떻게 피해야 할지 모를 수도 있습니다.본고는 이러한 오류를 해석하고 해결 방법을 제공한다../foo: 0403-006 Execute permission denied.
새 셸 스크립트를 작성하거나 다운로드했습니다. 시도하고 싶습니다.이것은 듣기에는 괜찮지만, 이 명령을 실행하려고 할 때 오류 메시지를 받았다
./foo: 0403-006 Execute permission denied
.어떻게 된 일입니까?이 메시지는 두 가지 문제에서 비롯될 수 있습니다.이 명령을 실행할 충분한 권한이 없습니다
사용 권한을 확인하는 가장 간편한 방법은 서버에 로그인한 사용자를 확인하고
ls �Cl
출력을 보는 것입니다.# iduid=5008(cormany) gid=330(atc) groups=110(sales),201(sshd)
# ls -l foo-rwxrw-r-- 1 cormany atc 75 Jun 10 18:46 foo
이 예시에 따르면, 사용자인cormany로 로그인하고, 셸 스크립트의 소유자는cormany이며, rwx 권한 (즉 읽기, 쓰기, 실행) 을 가지고 있습니다.이것은 문제없기 때문에 우리는 다음 가능한 원인을 고려한다.
스크립트에 정의된 셸에 대해 충분한 권한이 없습니다. 셸이 스크립트와 명령을 어떻게 설명해야 하는지 알려줄 수 없습니다.
스크립트의 내부를 살펴보겠습니다.
# cat foo#!/bin/ksh.new
echo "This is a just a test"
exit 0
첫 줄에 따르면 이 스크립트는 Korn 셸 스크립트로 해석해야 할 것 같습니다.사용된 셸의 권한을 확인하여 실제로 사용할 수 있는지 확인할 수 있습니다.
# ls �Cl /bin/ksh.new-r-xr-x--- 5 bin bin 289072 May 27 19:03 /bin/ksh.new
root 사용자로서 사용할 셸의 파일 권한을 수정한 다음 다시 시도하십시오.
# su -root's Password:
# iduid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp)
# chmod 555 /bin/ksh.new
# ls -l /bin/ksh.new-r-xr-xr-x 1 bin bin 289072 Jun 10 18:45 /bin/ksh.new
su
, 원래 사용자로 복구: # exit# iduid=5008(cormany) gid=330(atc) groups=110(sales),201(sshd)
# ./fooThis is a just a test
페이지 맨 위로 돌아가기
ksh: bar: not found.
다른 스크립트bar를 작성하여 ~cormany/scripts 디렉터리에 저장합니다.전체 경로를 사용하거나 현재 작업 디렉터리 (~cormany/scripts) 에서 이 스크립트를 실행할 때 정상적으로 작동합니다.그러나 어떤 이유로 다른 디렉터리에 스크립트 이름만 입력하면 실행할 수 없습니다.
# pwd/home/cormany/scripts
# /home/cormany/scripts/barThis is another test
# ./barThis is another test
# cd# pwd/home/cormany
# barksh: bar: not found.
모든 것이 정상입니다. 다른 디렉터리에서 이 스크립트를 실행할 수 없습니다.이러한 오류 메시지는 일반적으로 세 가지 경우가 있습니다.
실행 중인 파일에 대한 권한이 없습니다.
완전히 제한된 경로를 제공할 때나 명령 디렉터리에 있을 때 이 스크립트를 실행할 수 있기 때문에 그런 이유가 아니라는 것을 알고 있습니다.만약 이러한 가능성을 배제할 수 없다면, 파일 권한을 검사하는 것이 문제의 원인을 발견하는 데 도움이 될 것이다.
# ls -la ~cormany/scriptstotal 56
drwxr-xr-x 2 cormany atc 512 Jun 12 08:30 .
drwxr-xr-x 6 cormany atc 512 Jun 10 08:21 ..
-rwxr-xr-x 1 cormany atc 42 Sep 06 16:20 amdc
-rw-rw-rw- 1 cormany atc 154 Jan 27 23:23 atc
-rwxr-xr-x 1 cormany atc 206 Aug 04 20:57 atc.2
-rwxr-xr-x 1 cormany atc 48 Jun 12 08:21 bar
-rwxr-xr-x 1 cormany atc 87 Feb 22 16:11 pac
이 파일은 사용자, 그룹, 다른 사용자에게만 읽기와 쓰기 권한을 설정하기 때문에
~cormany/scripts/atc
명령을 실행하는 데 실패합니다.집행 권한을 늘리기만 하면 이 문제를 해결할 수 있다.다른 디렉터리에 있는 다른 명령 (예를 들어 ~cormany/scripts.old/cujo) 을 실행할 수 없다면, 그 파일의 권한을 검사해야 합니다.
# ls -l ~cormany/other_scripts/cujols: 0653-345 /home/cormany/other_scripts/cujo: Permission denied.
처음에는 읽을 수 있는 권한도 없어 보였습니다.우리는 목표 목록을 보고 어떻게 된 일인지 봅시다.
# cd ~cormany/scripts.old/cujoksh: /home/cormany/other_scripts: Permission denied.
# ls -l ~cormany/scripts.old/cujols: /home/cormany/scripts.old: The file access permissions do
not allow the specified action.
total 0
여기서 무슨 일이 일어났습니까?이것은 다른 형식의 권한 오류입니다.권한 오류가 항상 파일 자체에 나타나지 않고 파일 경로의 디렉터리에 나타날 수도 있습니다.
# ls -ld ~cormany/scripts.oldd--------- 2 cormany atc 512 Jan 22 08:42 /home/cormany/scripts.old
파일 자체에 충분한 권한이 있다면, 디렉터리 경로의 권한을 바로잡으면 실행 문제가 해결될 것입니다.
# chmod 755 ~cormany/other_scripts# cd ~cormany/other_scripts# ls �Cl cujo-rwxr-xr-x 1 cormany atc 48 Jan 26 08:21 cujo
이제 원래의 ~cormany/scripts/bar 문제로 돌아갑니다.
파일이 존재하지 않거나 사용자가 생각하는 디렉터리에 없습니다.
마찬가지로
ls
명령을 사용하여 빠른 검사를 실행하면 이 파일이 존재하는지 확인할 수 있습니다.# ls -l ~cormany/scripts/bar-rwxr-xr-x 1 cormany atc 48 Oct 05 08:21 /home/cormany/scripts/bar
원래 디렉토리에 이 파일이 없으면 다음 메시지가 표시됩니다.
# ls -l ~cormany/scripts/barls: 0653-341 The file /home/cormany/scripts/bar does not exist.
이 파일이 사용자 cormany의 홈 디렉터리에 있는 다른 곳에 있다고 생각되면
find
명령으로 검색할 수 있습니다.# find ~cormany -name "bar" -ls16409 1 -rwxr-xr-x 1 cormany atc 48 Sep 06 08:06 /home/cormany/atc/bar
590040 1 -rwxr-xr-x 1 cormany atc 48 Sep 09 08:42 /home/cormany/test/bar
파일이 존재하고 예상된 위치에 있습니다. 이 파일에 대한 충분한 권한이 있습니다.
이전에 성공적으로 실행되었을 때 사용한 방법은 완전히 제한된 명령 경로를 제공하거나 명령 디렉터리에 있고 현재 작업 디렉터리를 입력하는 것이다 (즉, 사용
./
.현재 명령 디렉터리에 없고 전체 경로를 입력하지 않는 이상 PATH 환경 변수의 값을 확인하겠습니다.# echo ${PATH}/usr/bin:/etc:/usr/sbin:/usr/ucb:/bin:/usr/bin/X11:/sbin:/usr/
java5/jre/bin:/usr/java5/bin:/usr/ushare/bin:/usr/local/bin
디렉터리/home/cormany/scripts는 경로에 없습니다.이 문제를 바로잡는 데는 두 가지 방법이 있다.
~cormany/scripts
.이 수정은 쉽게 실행되지만, PATH 변수에 디렉터리를 추가할 때마다 셸은 명령을 검색할 때 디렉터리를 더 검색합니다.만약 시간의 추이에 따라 10개의 디렉터리를 추가한다면, 셸이 파일을 찾을 수 없는 결과를 되돌려주기 전에 10개의 디렉터리를 더 검색해야 합니다.이렇게 하려면 다음 명령을 실행하십시오. # export PATH=${PATH}:/home/cormany/scripts# echo $PATH/usr/bin:/etc:/usr/sbin:/usr/ucb:/bin:/usr/bin/X11:/sbin:/usr/
java5/jre/bin:/usr/java5/bin:/usr/ushare/bin:/usr/local/bin:/
home/cormany/scripts
주의: 사용자의 PATH 변수에 경로를 추가하는 것은 일반적으로 현명하지 않습니다.이렇게 하면 불필요한 명령을 집행할 수 있다.만약 당신이 반드시 하나의 경로를 시작에 두어야 한다고 생각한다면, 반드시 신중해야 한다.페이지 맨 위로 돌아가기
ls: 0653-341 The file . does not exist.
~cormany/scripts 디렉터리에서 일하고 있습니다.갑자기 이 디렉터리의 스크립트를 찾을 수 없습니다. 현재 작업 디렉터리가 더 이상 존재하지 않는다는 이상한 메시지를 받았습니다.
# ls -ltotal 40
-rwxr-xr-x 1 cormany atc 42 Sep 06 16:20 amdc
-rw-rw-rw- 1 cormany atc 154 Jan 27 23:23 atc
-rwxr-xr-x 1 cormany atc 206 Aug 04 20:57 atc.2
-rwxr-xr-x 1 cormany atc 48 Jun 12 08:21 bar
-rwxr-xr-x 1 cormany atc 87 Feb 22 16:11 pac
# ./barThis is another test
# pwd/home/cormany/scripts
# ./barksh: ./bar: not found.# ls -lls: 0653-341 The file . does not exist.
이 경우
rm
명령을 통해 원래 작업 디렉터리를 삭제했습니다.파일 설명자가 다르기 때문에 같은 이름의 새 디렉터리를 만드는 것만으로는 이 문제를 해결할 수 없습니다.이런 사고가 발생하는 것은 종종 당신이 다른 창에서 명령을 집행했기 때문이다.이런 사고를 피하기 위해
rm
명령을 통해 디렉터리 이름을 수정할 수 있다.디렉터리 이름을 수정하면 원래 디렉터리의 사용자는 다른 디렉터리 이름을 사용할 수 있습니다. 파일 설명자가 여전히 같기 때문입니다.# ls -ltotal 40
-rwxr-xr-x 1 cormany atc 42 Sep 06 16:20 amdc
-rw-rw-rw- 1 cormany atc 154 Jan 27 23:23 atc
-rwxr-xr-x 1 cormany atc 206 Aug 04 20:57 atc.2
-rwxr-xr-x 1 cormany atc 48 Jun 12 08:21 bar
-rwxr-xr-x 1 cormany atc 87 Feb 22 16:11 pac
# ./barThis is another test
# pwd/home/cormany/scripts
마찬가지로, 다른 세션에서 작업 중인 디렉터리를 ~cormany/scripts로 바꾸는 사람이 있다고 가정하십시오.20090601.디렉터리를 옮기고 디렉터리 이름만 수정하기 때문에 작업을 계속할 수 있습니다.
# ./barThis is another test
# pwd/home/cormany/scripts.20090601
페이지 맨 위로 돌아가기
./foo: /usr/bin/ls: 0403-027 The parameter list is too long.
IBM AIX 컴퓨터에서 몇 달 동안 프로그램이 실행되었지만 문제가 없습니다.단, 이 프로그램이 실행될 때, 몇 분마다 같은 로그 디렉터리에 파일을 만듭니다.파일 이름은 f.
mv
명령의 응답 시간이 현저히 증가합니다.디렉터리에 파일이 너무 많아서 이해할 수 있습니다.또 몇 달이 지났지만, 이 AIX 프로그램은 계속 실행되어 여전히 문제가 없다.현재 f.로 시작하는 파일 100000개와 e.로 시작하는 파일 100000개가 있습니다.이제 이 로그 디렉터리를 정리하고 f.로 시작하는 파일을 삭제하려고 하면 다음과 같은 메시지가 표시됩니다.
# rm ~cormany/logs/f.*
ksh: /usr/bin/rm: 0403-027 The parameter list is too long.
나는 당신이 서류를 너무 오랫동안 정리하지 않았다고 생각한다.하지만 아직 늦지 않았어요.
ls
와 같은 명령을 실행하면 실행하기 전에 모든 파라미터를 검사하고 확장합니다.이 예는 delete
명령을 위한 100000개의 인자를 찾습니다.실제로 집행된 것은 ~cormany/logs/f.*
이 아니라 rm
이라는 얘기다.AIX는 다른 UNIX 및 Linux 운영 체제와 마찬가지로 사용할 수 있는 명령행 매개변수와 환경 변수의 길이를 지정합니다.AIX에서는
rm ~cormany/logs/f.*
명령을 사용하여 이 값을 확인할 수 있습니다.rm ~cormany/logs/f.1 ~cormany/logs/f.2 ~cormany/logs/f.3 … ~cormany/logs/f.100000
매뉴얼 페이지에서 보실 수 있습니다 getconf
:# man getconf…
ARG_MAX
Maximum length, in bytes, of the arguments for one of the exec
subroutines, including environment data.
…
# getconf ARG_MAX
1048576
이 값은 환경 변수와 명령행 매개 변수에 1048576바이트를 사용할 수 있음을 나타낸다.보아하니 당신은 이미 이 상한선을 넘은 것 같습니다.이 문제를 해결하는 데는 두 가지 방법이 있다.
getconf
및 수정ARG_MAX
을 사용하여 이 값을 높이거나 사용smitty chgsys
을 사용하여 이 값을 높인다.나는 이런 오류가 발생할 때마다 시스템 범위의 매개 변수를 편리하게 수정하는 것을 건의하지 않는다. 이것은 마지막 방법이어야 한다.ARG/ENV list size in 4K byte blocks
명령을 사용하지 않고 chdev
명령을 사용하여 파일을 삭제하면 훨씬 좋습니다. # find ~cormany/logs �Cname “f.*” �Cexec rm {} \;
rm
명령은 셸 명령줄에 그렇게 많은 인자를 넣지 않고 디렉터리에서 f.로 시작하는 모든 파일을 검색합니다.그리고 find
명령은 찾은 모든 파일에 find
을 실행합니다. 그러면 f.로 시작하는 모든 파일을 삭제합니다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.