리눅스(저는 우분투)에서 vi 또는 vim 편집기를 사용할 때 다음과 같은 에러가 종종 발생한다.
내 경우는 Docker-compose.yml 파일을 생성하고 저장할 때 에러가 발생했다.
이 에러는 현재 리눅스 사용자에게 파일을 편집할 권한이 없을 때 발생한다.
이를 해결하는 데에는 몇 가지 방법이 있다.
`sudo vim [파일이름]`
root 권한을 가지고 vim 편집기를 실행하므로 권한 문제가 발생하지 않는다.
Windows로 생각하면 '**관리자 권한으로 실행**' 과 유사하다.
sudo chown [사용자이름]
chown
명령어는 파일 또는 폴더의 소유자를 변경하는 명령어이다.ls -al
명령어를 실행하면 다음과 같이 해당 디렉토리 자체와 내부 파일들의 소유자를 출력해준다. drwxr-xr-x 2 root root 4096 Feb 10 09:09 .
drwxr-xr-x 10 root root 4096 Jan 13 18:00 ..
-rwxr-xr-x 1 root root 44953600 Feb 10 08:47 docker-compose
-rw-r--r-- 1 root root 487 Feb 10 09:09 docker-compose.yml
현재 ubuntu
라는 이름의 계정으로 접속 중이지만 이 디렉토리는 모두 root가 소유자이다. 그렇기 때문에 관리자 권한없이는 함부로 수정하거나 삭제할 수 없다.ubuntu
로 docker-compose.yml
파일의 소유자를 변경해보겠다.sudo chown ubuntu docker-compose.yml
ls -al
drwxr-xr-x 2 root root 4096 Feb 10 09:09 .
drwxr-xr-x 10 root root 4096 Jan 13 18:00 ..
-rwxr-xr-x 1 root root 44953600 Feb 10 08:47 docker-compose
-rw-r--r-- 1 ubuntu root 487 Feb 10 09:12 docker-compose.yml
짠~! docker-compose.yml 파일의 소유자가 ubuntu
계정으로 변경되었다. 이제 sudo
로 root 권한으로 실행하지 않아도 docker-compose.yml 파일을 수정할 수 있다.chmod
로 파일 자체의 모드 변경chmod
는 change + mode 이다. chmod [OPTION] [MODE] [FILE]
OPTION
-v : 모든 파일에 대해 모드가 적용되는 진단(diagnostic) 메시지 출력.
-f : 에러 메시지 출력하지 않음.
-c : 기존 파일 모드가 변경되는 경우만 진단(diagnostic) 메시지 출력.
-R : 지정한 모드를 파일과 디렉토리에 대해 재귀적으로(recursively) 적용.
MODE
파일에 적용할 모드(mode) 문자열 조합.
u,g,o,a : 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정.
+,-,= : 현재 모드에 권한 추가(+), 현재 모드에서 권한 제거(-), 현재 모드로 권한 지정(=)
r,w,x : 읽기 권한(r), 쓰기 권한(w), 실행 권한(x)
X : "디렉토리" 또는 "실행 권한(x)이 있는 파일"에 실행 권한(x) 적용.
s : 실행 시 사용자 또는 그룹 ID 지정(s). "setuid", "setgid".
t : 공유모드에서의 제한된 삭제 플래그를 나타내는 sticky(t) bit.
0~7 : 8진수(octet) 형식 모드 설정 값.
만약 위에서 에러가 발생했던 docker-compose.yml 파일의 모드를 변경하고자한다면 다음과 같은 명령어를 사용하면 된다.
1번의 과정인
chown
을 사용하여 파일의 소유자를ubuntu
로 변경하는 것은 하지 않았음을 가정한다.
chmod a=rwx docker-compose.yml
모든 사용자(a)는 docker-compose.yml 파일에 대하여 읽기권한(r), 쓰기 권한(w), 실행 권한(x)를 가진다. 해당 권한을 추가하는 것이 아닌 대치하는 것이다.
이후 sudo
없이 docker-compose.yml 파일을 편집할 수 있다.