본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 유닉스] vi 편집기 에러 - ATTENTION Swap 스왑 파일 문제 해결하는 법, 발생 이유

[ 리눅스 Linux / 유닉스 Unix 완전정복 목차, 링크 모음 ]

안녕하세요~~ 오늘은 vi에디터 사용시 종종 마주하게 되는 swp파일 문제를 알아볼게요 ㅎㅎ

 

혹 아래와 같은 에러가 떠서 들어오게 되었나요?

vi편집기를 하다보면 종종 마주하게 되는 에러죠 ㅎㅎ

저도 리눅스를 혼자서 맨 ~~처음 접하게 되었을 때,, vi를 종료하는 법을 몰라서... 컨트롤 씨를 눌렀다가,, exit를 쳤다가 막 당황하다가 일단 그냥 껐는데, 그 다음 이 에러를 마주하고 뭐가 잘못된줄 알고 얼마나 놀랐었는지 몰라요 ㅎㅎ 그 때 기억이 새록새록ㅎㅎ

 

경고 발생 원인

이 임시 스왑 파일은 파일의 수정 작업이 정상적으로 종료되지 않았기에 남아있게 됩니다.

vi 명령어를 입력해서 파일을 수정하게 되면 자동적으로 확장자 .swp이 붙는 swp파일이 생성되는데 vi 에디터가 제대로 종료되면 이 파일이 자동적으로 제거되기 때문에 정상수행되었을 경우에는 우리가 볼일이 없죠~~

즉 뭔가 잘못종료되었을 때 swap파일이 남아있게 됨으로써 저 에러가 뜨는 거

스왑파일이 있는데 vi편집기로 시작하려고 하니까 swap파일이 이미 있습니다! 경고가 뜨는거죠~~

 

어찌보면 당연하지만? 멀티유저일 경우 다른 유저가 같은 파일을 동시에 열 경우에도 경고가 뜹니다

이미 스왑파일이 생성되어있기 때문이죠 ㅎㅎ

 

일부로 비정상종료로 swap파일 발생시켜보기

vi편집기를 이용해서 편집을 하다가~ esc모드에서 q!나 wq를 이용해서 종료하지 말고, 터미널 오른쪽 위에 있는 닫기 버튼X 를 클릭해 비정상적으로 종료해봅시다 ㅎㅎ

 

아주아주 간단한 test.sh를 작성해주기~ 저는 그냥 Hello World를 출력하는 한줄짜리 코드를 넣었어요 ㅎㅎ

i를 눌러서 insert모드로 들어간다음에 적어줍시당

echo Hello World!

다 적었으면 

요 버튼을 눌러서 종료해보세요

또는 Ctrl+Z를 눌러서 종료해보세요

둘 다 비정상 종료라 종료 후에 vi test.sh를 다시 눌러보면~~ 위와 같은 에러가 발생하게 됩니다. ㅎㅎ

해당 에러가 떴으면 일단 q를 누르면 나가집니다.

 

해결 방법

에러 페이지를 나갔다면~

ls -a

해당 명령을 수행 후에 보이는 swp파일을 지워주면 됩니다.

단순히 ls 명령어로만 검색했을 때에는 보이지 않아요. swp파일은 숨김파일로 생성되거든요 

그래서 숨김파일을 보여주는 -a옵션을 뒤에 붙여서 'ls -a'로 파일을 찾아줍시다.

rm -f .test.sh.swp #스왑파일 삭제

해당 스왑파일을 삭제한 후에 다시 vi에디터를 열어보면 잘 수행되는 것을 확인할 수 있어요~~

참고로 파일명 맨 앞에 '.'가 붙으면 숨김파일을 의미해요 ㅎㅎ

 

스왑파일은 왜 생성될까? what causes swap files to be created

여기서 말하는 스왑파일은 우리가 운영체제 과목에서 디스크파트에서 배우는 스왑파일과는 다릅니다.

이 스왑파일은 마지막으로 저장한 이후부터 변경된걸 쭉 기록해줘요 (가장 최근의 200문자 제외하고~~)

그래서 갑자기 전원이 나가는 등 충돌이 발생해 날라거가나 그러면 스왑파일을 이용해서 복구할 수 있게 하는겁니다.

 

오늘은 단순한 오류 원인과 해결방안에 대한 포스팅이라 짧게 끝나네요~! :)

다음 포스팅에서 또 뵈어요

공감은 사랑입니다~