ls 명령어를 이용해서 파일 퍼미션을 조회하면 -rw——- 형식으로 나오게 됩니다. 이를 755, 644와 같이 octal 형식으로 file permission을 얻어오는 방법이 없을까요? 리눅스 stat 명령을 이용하면 가능합니다. 아니면 이 글을 보고 오셔도 좋겠습니다.
먼저, stat은 파일, 혹은 파일 시스템의 상태를 얻어옵니다. 예를 들자면 아래와 같은 정보들을 얻어옵니다.
- permission bits
- 소유자, 소유 그룹, 다른 사람이 가지는 권한 bit를 의미합니다.
- 644, 755, 600과 같은 것을 의미합니다.
- 파일의 크기
- 파일의 소유자와 그룹
- 파일의 변경 날짜
- 기타
이 중, permission bits는 권한 755, 644와 같은 것들입니다.
옵션을 보면, -c가 있습니다. -c=FORMAT을 이용해서 파일의 정보를 특정한 형식으로 출력할 수 있습니다. FORMAT 형식을 보겠습니다.
%a와 %A가 있습니다. 먼저, %a는 octal 형식으로 출력합니다. 예를 들어 권한이 rw——-인 파일이 있다면, 600으로 출력하게 됩니다. %A는 사람이 읽을 수 있는 형식, “rw——-” 형식으로 출력하게 됩니다. 우리가 원하는 것은 전자이므로 %a를 선택하겠습니다.
다음, file 이름은 %n으로 출력할 수 있어요. 즉, 파일 이름:권한 octal 형식으로 출력하려면 “%n:%a” 형식으로 format 을 지정하면 됩니다.
octal file permission을 출력하는 형식은 아래와 같다고 하였습니다.
stat -c “%n:%a” name
파일 name의 정보를 파일이름:octal file permission 형식으로 출력합니다.
이를 바탕으로, 실습을 해 보겠습니다.
먼저 cho의 home 폴더에 있는 mylink의 정보를 보겠습니다. 권한을 표시하는 것의 앞에 l이 붙어 있는데요. 이는 link를 의미합니다. 다음, rwxrwxrwx가 있는데요. 이는 모든 유저에게 r, w, x 권한이 있다는 것을 의미합니다. 777인 셈입니다.
stat -c “%n:%a” mylink를 입력해 보겠습니다. 그러면 mylink:{octal permission} 형태로 결과가 나오게 됩니다. mylink는 mode가 777 이였기 때문에, mylink:777이 나오게 됩니다.
.ssh 디렉토리에 있는 authorized_keys의 정보를 보겠습니다. 보면, rw——- 라고 되어 있어요. 이는, 소유자만 r, w 권한을 가진다는 의미입니다. 익숙하실 수도 있겠습니다. 이를 octal로 표시하면 600이 됩니다.
stat -c “%n:%a” authorized_keys 명령어를 입력해서 octal permission을 확인해 보면 600이 출력되는 것을 확인할 수 있습니다.