×

TODAY   28    TOTAL   7280   

 

Orca the Whale

VI 에디터 E325: ATTENTION에 대해 알아보자. 리눅스

조회수 : 520

작성일 : 2018-09-06 00:01

ubuntu vi linux

""" 맨 밑에 요약이 있습니다. """


1. 개요

vi를 통해 파일을 수정하는 작업을 하다 보면, 가끔씩 마주치는 문제가 있다.

E325: ATTENTION
Found a swap file by the name ".test.py.swp"
          owned by: ubuntu   dated: Sat Jul 14 08:51:57 2018
         file name: ~ubuntu/test.py
          modified: YES
         user name: ubuntu   host name: -
        process ID: 7827
While opening file "test.py"
             dated: Thu Jul 26 04:26:51 2018
      NEWER than swap file!

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r test.py"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".test.py.swp"
    to avoid this message.

Swap file ".test.py.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

파일을 편집하려고 명령어를 입력하니 이런 화면이 나와 당황했을지도 모르겠지만, 의외로 간단한 문제이다. 

이 문제는 왜 발생하고 어떻게 해결하는지 알아보자.



2. 원인

이 경고 메세지를 읽어보면 Found a swap file by the name ".test.py.swp" 라는 문구가 있다.

그렇다. .swp 확장자를 가진 스왑 파일이 발견되었기에 이 문제가 발생하는 것이다.

그럼 이제 이 스왑파일이 왜 발견되었는지 알아보자.



3. 스왑 파일

vi 편집기는 작업을 하는 동안 비정상적인 종료 등을 대비하기 위해 파일을 임시 저장한다.

현재 작업중인 파일에 .swp을 붙이고 숨김 파일로 만들어 임시 저장하는데, 이것이 스왑 파일이다.

한마디로 스왑 파일은 vi 편집기의 작업 내용을 임시 저장하는 파일이다.

정상적인 방법으로 vi 편집기로 하는 작업을 완료하면 스왑 파일은 자동으로 삭제된다.

네트워크 끊김이나 강제 종료등의 이유로 작업이 끊기면 스왑 파일은 삭제되지 않고 남아있는다.

그리고 그 파일을 수정하려고 할 때 스왑 파일의 존재를 사용자에게 알리는 것이다.



3. 해결 방법

어렵지 않다.

스왑 파일의 존재를 확인한다.


$ ll
drwxrwxrwx 3 root   root    4096 Sep  5 14:16 ./
drwxrwxrwx 8 root   root    4096 Jul 25 13:29 ../
-rw-r--r-- 1 root   root    3561 Jul 26 04:26 test.py
-rw------- 1 ubuntu ubuntu 16384 Jul 14 08:51 .test.py.swp

스왑 파일은 숨김 파일이기 때문에 ls -all으로 그 존재를 파악한다.

혹시라도 비정상적인 종료가 아닌 다른 프로세스가 작업중이어서 스왑 파일이 존재할 가능성도 있다.

그런 경우를 대비하기 위해 현재 다른 프로세스가 작업중인지 확인한다.


$ ps -ef | grep test.py
ubuntu   31572 31464  0 14:17 pts/0    00:00:00 grep --color=auto test.py


다른 프로세스가 작업중인 경우엔 아래와 같이 결과가 나온다.


$ ps -ef | grep test.py
ubuntu   31659 31464  0 14:19 pts/0    00:00:00 vi test.py
ubuntu   31665 31624  0 14:19 pts/3    00:00:00 grep --color=auto test.py

다른 프로세스가 사용 중이 아님도 확인했으면 끝.

vi -r <파일이름> 으로 스왑 파일로 복구한다.


Using swap file ".test.py.swp"
Original file "~/test.py"
Recovery completed. You should check if everything is OK.
(You might want to write out this file under another name
and run diff with the original file to check for changes)
You may want to delete the .swp file now.

Press ENTER or type command to continue

작업을 완료하고 스왑 파일을 삭제한다.



4. 요약

    - 원인

  • 스왑 파일은 vi 편집기의 임시 파일로써 작업이 끝나면 자동으로 삭제된다.
  • 그러나 비정상적으로 작업이 끝나면 스왑 파일은 복구를 위해 남아있다.
  • 혹은 다른 프로세스가 현재 작업중이라 스왑 파일이 아직 삭제가 되지 않았을 경우도 있다.



    - 해결

  • 다른 프로세스가 작업중인지 확인한다. ps -ef | grep <파일이름>
  • 다른 프로세스가 작업중이 아니라면 vi -r <파일이름>으로 복구한다.
  • 작업을 완료하고 스왑 파일을 삭제한다.



1등으로 댓글 입력하기

1등으로 댓글 입력하기