[AIX 5.3] 특정 계정에서 du 명령 실행 시 “cannot find the current directory” 에러 발생

AIX 서버에서 특정 계정(이 경우는 oracle 등등~)에서 du 명령을 실행하면 아래와 같은 에러가 발생하면서 정상적으로 실행되지 않는 경우가 있다.

$ du -sk *
du:0653-175 Cannot find the current directory.
$

보통 현재의 계정에서 접근권한이 없는 디렉토리 혹은 파일이 하위에 있더라도 permission 에러가 발생하면서 다른 파일들에 대한 사이즈를 체크하여 그 합계를 보여주는 것이 일반적인 경우인데 이런 경우에는 아예 실행한 이후 전혀 용량을 계산하지 못하고 위와같은 에러 메시지를 출력한다.

이런 경우 /etc/group 파일의 system그룹에 해당 계정을 등록해주면 정상적으로 실행된다. 하지만 이것은 편법일 뿐이다. system 그룹에 등록하여 문제가 해결된다는 것 자체가 비록 화면상에 permission 관련 오류가 표시되지는 않지만 권한 상의 문제라는 추측을 할 수 있다.

이 문제가 발생하는 경우는 현재 위치한 디렉토리의 상위 디렉토리 혹은 .. 디렉토리의 퍼미션이 부족한 경우였다. 하지만 아무리 봐도 아래와 같이 육안 상으로는 현재 디렉토리의 퍼미션에 아무런 문제가 없는 경우가 대부분일 것이다.

drwxr-xr-x  5  oracle  dba  4096  Jun 02 2010  oracle

그럼에도 불구하고 oracle 계정으로 위의 oracle 디렉토리에 들어가서 du -sk * 를 실행하면 “cannot find the current directory” 라는 에러메시지가 발생한다.

그 원인은 바로 이 서버의 기술지원을 담당하셨던 15년 경력의 엔지니어분도 감탄(?)한 mount 명령의 마술(?)에 있었다. 이 경우 시스템의 장애로 인해 운영체제가 있는 디스크를 Restore 하였고 /usr/ssw/oracle 디렉토리를 mkdir 명령을 이용해 생성한 뒤 /usr/ssw/oracle에 마운트를 하였다.
그리고 퍼미션은 drwxr-xr-x (755)가 되어 있었다. 여기서 중요한 것은 바로 mount 하기 이전의 /usr/ssw/oracle 디렉토리의 퍼미션이다. 테스트를 해보니 mount 하기 전에 rwxr-x— 퍼미션(750)의 디렉토리를 만들고 mount를 시켜보니 rwxr-xr-x로 바뀌어 있었다. 즉 mount 한 상태에서는 mount 하기 이전의 퍼미션을 확인할 방법이 없다. (적어도 난 모른다~~~) mount를 하면 퍼미션이 바뀐다는 것도 처음알게 됐다. (비록 순수OS만은 아니지만 경력 15년인데.. -.-)

이 사실을 근거로 히스토리를 추적해보니… umask가 027 로 설정되어 있었다. 그 상태에서 수작업으로 /usr/ssw를 만들고 /usr/ssw/oracle을 만들었으니 당연히 두 디렉토리는 rwxr-x— (750) 으로 생성되어 있었다. (umount 후 확인)

그리고 마운트포인트의 퍼미션을 755로 변경하고 다시 mount를 하니 du 명령은 물론 /bin/pwd 명령도 잘 수행되었다.

참고로 pwd는 쉘(ksh,csh)의 내부명령과 /bin/pwd가 서로 다른 명령이다. 그냥 pwd는 잘 실행되나 경로를 지정하여 /bin/pwd를 실행하면 위와 같은 경우 퍼미션 에러가 발생한다.

만약 특정 디렉토리에서 /bin/pwd를 실행했는데 에러가 발생한다면….

^^

아래는 해당 문제에 대한 IBM의 질의 응답이다.
정말 큰 도움이 되었다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top