[Linux] E212: Can't open file for writing 에러

nimoh·2023년 2월 10일
0

리눅스(저는 우분투)에서 vi 또는 vim 편집기를 사용할 때 다음과 같은 에러가 종종 발생한다.

내 경우는 Docker-compose.yml 파일을 생성하고 저장할 때 에러가 발생했다.

이 에러는 현재 리눅스 사용자에게 파일을 편집할 권한이 없을 때 발생한다.

이를 해결하는 데에는 몇 가지 방법이 있다.

편집할 때 마다 sudo 붙이기

`sudo vim [파일이름]`
root 권한을 가지고 vim 편집기를 실행하므로 권한 문제가 발생하지 않는다.
Windows로 생각하면 '**관리자 권한으로 실행**' 과 유사하다.

권한 변경해주기

  1. sudo chown [사용자이름]
    chown 명령어는 파일 또는 폴더의 소유자를 변경하는 명령어이다.
    디렉토리에서 ls -al 명령어를 실행하면 다음과 같이 해당 디렉토리 자체와 내부 파일들의 소유자를 출력해준다.
    ( 왼쪽은 소유자명(root), 오른쪽은 그룹명(root)이다 )
       	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가 소유자이다. 그렇기 때문에 관리자 권한없이는 함부로 수정하거나 삭제할 수 없다.
    root의 권한을 사용하지 않고도 수정/삭제를 하기 위해 현재 사용자인 ubuntudocker-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 파일을 수정할 수 있다.
  2. chmod로 파일 자체의 모드 변경
    chmodchange + mode 이다.
    리눅스는 각각의 파일과 디렉토리에 대해 '읽기(r)', '쓰기(w)', '실행(x)' 권한을 개별적으로 지정할 수 있다. 또한 이 세 가지 권한을 '파일 소유자(user)', '그룹(group)', '그 외 사용자(others)'에 대해 각각 지정할 수 있게 만들었다.
    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 파일을 편집할 수 있다.

profile
부족함을 인정하는 순간이 성장의 시작점이다.

0개의 댓글