발단

springboot 프로젝트에 TDD 에 따라 테스트코드를 작성하고 작업을 진행하는데

./gradlew test

명령어를 치려니 ./gradlew 에 권한이 없다고 떴다.

블로그를 확인해보니

chmod +x gradlew

를 통해 gradlew 에 권한을 부여할 수 있다는데 그게 어떻게 동작하는지 알아봤다.

자료조사

일단 아무 디렉토리에서 어떤 파일드이 있는지 봐보자

ls

현재 디렉토리에 있는 모든 파일과 폴더의 상태를 확인한다.

ls -l

폴더와 파일들의 상태를 더 자세히 알 수 있다.

이때 앞에 d 로 시작하면 폴더이고 - 로 시작하면 파일이다.

파일의 경우

-rw-r--r--

의 형태를 띄는데
앞에서부터 그 의미는

  • '-' : 파일
  • 'rw-' : 소유자(root) 권한
  • 'r--' : 그룹(root)의 권한
  • 'r--' : 누구나 (anyone)의 권한

인데 r : 파일 읽기
w : 파일 쓰기
x : 파일 실행하기이다.

3개씩 묶어서 r : 4, w : 2, - : 0 의 값을 갖는데

소유자 : r + w + - = 4 + 2 + 0 = 6
그룹 : r + - + - = 4 + 0 + 0 = 4
누구나 : r + - + - = 4 + 0 + 0 = 4

로 계산이 가능하다.

즉, ~ 디렉토리에 있는 Desktopapple.jpg 파일은 644 권한을 갖는다는 의미이다.

이 파일을 누구나 수정하고자 한다면 w 권한이 필요하기에 anyone 누구나의 권한을

r + - + - => r + w + -

로 바꿔 권한을 6 4 4 에서 6 4 6 으로 바꿔줘야 한다.

이때 권한을 바꿔주는 명령어가 chmod 이다.

chmod

앞에서의 예시로 본다면

chmod 646 Desktopapple.jpg

를 통해 권한을 수정할 수 있을 것으로 보인다.
그러나 ssh 를 통해 ec2 에 접속했을때 ubuntu 혹은 linux 에 권한을 바꿀 권한이 없을 수 있다.

sudo chmod 646 Desktopapple.jpg

필자는 본인 컴퓨터에서 실행해서 sudo 를 붙이지 않았다.

ls -l 했을때 누구나의 권한이 r-- 에서 rw- 로 바꿘것을 볼 수 있다.

누구나 모든 권한을 부여하게 하려면?

sudo chmod 777 Desktopapple.jpg

모두에게 : rw-, r--, r-- 모두 수정
r : 4
w : 2
x : 1

본론

chmod +x gradlew

???

이제와 다시 보니 앞에서 본 것과 뭔가 다르다.

일단 ec2 에 접속해보자

ssh springboot-webservice

필자는 사용할 username 및 ip 주소를 매번 입력하기 귀찮아서 한줄의 셸스크립트 명령어로 ec2 에 접속할 수 있도록 설정했다.

참고로 test 폴더는 gitlab 프로젝트에서 실수로 테스트하던 프로젝트에 github 에서 작업하던 레포를 import 했는데 공모전에서 사용중인 gitlab 계정이라 수정권한이 없어서 이름이 test 로 굳혀졌다..

현재 ec2 에 클론받은 spring boot 프로젝트의 루트 디렉토리를 보면 gradlew 가 초록색으로 보인다. 권한을 이전에 부여했었다는 의미이다. gradlew 에 권한이 없으면 흰색으로 보인다. 파일 이름이 초록색이면 실행파일이라는 의미이다.

gradlew : 맥, 리눅스용 스크립트
내장 gradle 을 이용해 Gradle 명령어를 실행하기 위한 환경설정부터 실행까지 모두 수행한다.
gradle : 빌드 자동화 시스템

참고로 명령어가 두종류 있어서 정리해본다.

chmod +x gradlew

이 명령어의 경우 모든 사용자(소유자, 그룹, 누구나)에게 실행 권한을 (x권한이니 실행하기로 보인다)부여한다.

chmod u+x gradlew

반면 이 명령어의 경우 소유자에게만 실행 권한을 부여한다.

위에서 자료조사한 것을 토대로 보면 원래 -rw-r--r-- 였는데

  1. -rwxr-xr-x 로 바꾸니 실행권한이 755 로 바뀐것 같고
  2. -rwxr--r-- 로 바꾸니 실행권한이 744 로 바뀌는게 아닌가 싶다.
    (일단 chatGPT 는 맞다는데 이전 권한에 따라 차이가 있을 것 같다.)

오.. 타 블로그 eunguru 님 티스토리 를 보다가 이해가 되었다.

위에서 쓴 것처럼 권한을 숫자가 아닌 기호로 나타낼 수 있다.

대상 :
u : user, 소유자
g : 그룹
o : 기타
a : u, g, o
' ' : 아무것도 사용하지 않을 경우 all 로 추정?

수행할 명령 :

  • : 추가
  • : 제거
    = : 지정, 기존 속성 사라짐

설정할 퍼미션 :
r : 읽기
w : 쓰기
x : 실행

예시

u+x : 소유자에게 실행 권한 추가
+x : 모든 사용자에게 실행 권한 추가
o-rw: 기타 사용자의 읽기, 쓰기 권한 제거

다른 예시는 위의 eunguru 님 티스토리 링크로 참고하자

결론

chmod +x gradlew

위 명령어는 모든 사용자에게 gradlew 실행권한을 부여하는 명령어다.

확실히 이해했다.

레퍼런스

클라우드 서비스 개발자를 위한 AWS로 구현하는 CI/CD 배포 입문

profile
미래의 나를 만들어나가는 한 개발자의 블로그입니다.

0개의 댓글