vi,vim 스왑파일(swap)문제해결
안녕하세요
오늘은 vi /vim 에디터에서 발생할 수 있는 스왑파일(swap) 관련된 에러 메시지를 한번 재현해 보고요
이걸 어떤 식으로 해결할 수 있는지를 살펴보도록 하겠습니다
여러분들이 자주 만날 수 있는 그런 내용이 있죠
그런데 이 부분이 언제 발생을 할 수 있는지 저도 이제 다양한 케이스들을 보면서 단순히 문제를 어떻게 해결할 수 있다라는 입장보다도 이게 어떤 식으로 또 현상이 벌어질 수 있고 또 근본적으로 어떻게 해결하는것이 좋고 그리고 단순하게 해결하는 방식은 또 무엇이고 블로그 같은 데서는 좀 단편적으로 표현을 하는 경우들도 많거든요
근데 우리가 진짜 궁극적으로 문제해결할 때는 정확하게 상황을 분석하는것이 필요합니다
그래서 그것을 한번 말씀드리기 위해서 영상을 한번 제작을 해봤습니다
일단 한번 재현을 해봐야 되는데요 재현을 하게 되면 이런 메세지들을 볼 수가 있습니다
여기 보이는 것처럼 만약에 test.txt라는 어떤 텍스트 파일을 편집한다고 했을 때
.test.txt.swp라는 어떤 파일이 존재하고 있다면 이런 메시지가 뜨면서 이미 파일이 존재하고 있다는 에러 메시지 뜨게 되는데요 이거는 사실 동일한 파일을 이미 편집중이다라고 생각을 할 수 있습니다
기본적으로는 그런데 이게 꼭 그렇지만은 않아요 여러 가지 케이스들을 한번 살펴볼 건데요
일단 한번 재현부터 한번 해보도록 하겠습니다
자 일단은 내가 만약에 vi_test라는 폴더 밑에서 Whatis pwd
pwd 뭡니까? print working directory 현재 directory가 어딘지 현재 directory는 여기고요
여기 안에는 파일이 아무것도 없습니다 이안에서 vi를 통해서 test.txt 라는 파일을 열어보도록 하겠습니다 일단은 빈 파일이 생겨났고 여기다가 이제 INSERT 모드로 해서 내가 이제 test.txt 라는 파일을 작성을 한번 해 보도록 할게요
그럼 작성하고 나갔어요 그러면 파일을 어쨌든 생성했고 저장했다라고 볼 수 있거든요
그런데 여기서 언제 우리가 가장 많이 실수를 하게 되냐면 일단 에디터를 열었어요
편집하다가 내가 키를 잘못 누른 거야 그래서 컨트롤 Z 이런 걸 누른 겁니다
이게 사실은 컨트롤 제트를 하게 되면은 시그널을 보내게 되서 stop 시그널을 보내게 되거든요
그래서 vi에디터가 백그라운드로 전환이 되서 잠깐 멈추게 됩니다
잠깐 이제 완전히 종료시킨 건 아니고 슬립을 시켜서 잠깐 멈춰 두게 되는 거죠
그래서 이런 것들은 jobs라는 걸 통해서 사실 확인이 되요 stop시그널을 보내서 멈춰 있다
우리가 컨트롤 Z라고 하는 거는 우리가 시그널 중에서 어떤 거죠?
여기 보이는 19번을 보낸 겁니다 그래서 이렇게 멈춰 있었던 거를 또 다시 살릴 수가 있거든요 이런 백그라운드로 전환이 되었기 때문에 포그라운드(foreground)로 전환을 할 수 있는 fg 를 사용하게 되면
다시 살려서 올릴 수 있습니다 그런데 다시 Ctrl + z 이렇게 일단 백그라운드(background) 넣어 놓을게요 우리가 이제 포그라운드 백그라운드 개념이 없고 이 다시 살리는 거에 대해서 잘 모르고 stop시그널이 어떻게 동작하는 이런 것들을 전혀 모르는 사람 입장에서는 굉장히 당황스러울 거예요
어? 뭐지? 어떻게 됐지?
다시 한번 열어볼까? 라고 하는 경우가 정말 많다는 거죠 이때 이런 에러 메시지가 뜹니다
그런데 이때 이것을 검색을 해서 보게 되면 많은 사람들이 이제 어떻게 이제 해결을 하라고 하냐면
일단은 (A) bort를 시켜요 그리고 나서 나가라고 하거나 혹은 이제 그 종료를 시키라고 한 다음에
파일을 지우라고 하죠
일단은 그냥 ls 라고 하면 임시파일 그러니까 점으로 시작하게 되는 숨김 파일은 보이지가 않거든요
그래서 ls 대문자 A를 하게 되면 숨긴파일 보입니다 이 파일을 그냥 지우라고 얘기를 많이 해요
그리고 지우고 나서 그냥 접근을 해라 그런데 사실은 그게 이제 궁극적인 건 아니죠
왜냐하면 지금 현재 백그라운드로 전환되고 그라운드로 빼기만 하면 되는 거를 굳이 이거를 왜 지워서 해결을 합니까 그러니까 물론 이게 지워서 해결해야 되는 경우들도 있어요
그것도 한번 재현을 해 볼 건데 어쨌든 지금 현재 상황을 정확하게 바라볼 필요성이 있죠
그리고 이제 또 어떻게 해결하라고 하냐면 여기서 vi 에디터가 돌아가고 있는게 있다면
얘를 죽이라고 얘기를 하는 거죠
킬을 해서 게다가 kill -9로 강제 종료를 시켜서 그 다음에 해라라고 하는 경우들도 이것도 해결이 아예 안 되는 건 아니지만 완벽하게 우리가 이해를 하고 행을 하는 건 아니죠
무지성으로 그냥 삭제를 시켜 버린 거죠 왜냐하면 우리가 편집 중인 내용들이 분명히 임시저장되어 있는게 있을 텐데 그걸 강제적으로 그냥 종료를 시켜 그냥 죽여버리는 없애 버리는 거거든요
그렇게 되면 우리가 했던것이 그냥 다 날아갈 수도 있는 거죠
우리가 진짜로 원하는 해결 방식이 아니라 그냥 무식하게 해결을 해 버리는 거죠
그리고 kill -9로 종료시키게 되면 비정상적인 종료가 발생할 수 있습니다
강제 종료를 하기 때문에 그래서 이 같은 경우는 이전에 다른 블로그 글로 작성을 해 놨기 때문에
kill과 kill -9에 대해서도 한번 다시 한번 공부를 해보셔도 좋을 것 같고요
자 어쨌든 여기서 내가 무지성으로 할게 아니라 지금 현재 쉘(bash)에서 살아있는지를 한번 보고
fg로 (포그라운드로)끌어올린 다음에 정상 종료를 시키고 아니면 그냥 강제적으로 저장 안 하고 종료를 시키고 그 다음에 다시 해봐도 상관은 없는 거죠 오타가 좀 있었고요
다시 올려서 작성을 할 수 있다라는 얘기 입니다. 이해가 되실까요?
이런 식으로 우리가 무조건 ps -ef 같은 걸 명령을 통해서 얻어내서 그냥 종료를 시킨다든가, kill을 한다거나 그리고 .으로 시작하게 되는 .swp라는 파일 그냥 무지성으로 삭제하는게 무조건적으로 정답은 아니라는 거를 말씀을 드리고요 그 다음에 삭제를 그냥 해도 되는 경우도 있어요
예를 들어서 내가 여기 있는 파일을 그냥 지워 보도록 하겠습니다
강제적으로 지우고요 . 으로 시작하는 파일은 아마 정상종료 되었기 때문에 없을 거고요
완전히 없는지도 한번 살펴볼게요 그런데 내가 만약에 touch 라는 명령어 통해서 임의적으로 이런 파일을 만들었다 라고 한다면 동일한 에러 메시지를 볼 수가 있어요 그렇죠
그러면은 우리가 이제 이런 경우들은 물론 우리가 재현을 하는 문제 상황이지만 현재 어떤 상황이 벌어질 수 있냐면 내가 작성을 하다가 비정상 종료되는데 컴퓨터가 종료가 됐다던가 SSH 접속이 끊어져
약간 이런 경우들도 간혹 있거든요 그런 경우에는 뭐 어쩔 수가 없죠
파일을 그냥 삭제하는것이 답이 될 수 있습니다
그래서 ps -ef 로 (해당 파일을 열고 있는 프로세스 PID 를 알아내서) kill 을 한다던가 .swp 파일을 지운다는게 무조건적으로 잘못된다는 건 아니지만
이게 첫 번째 선택지는 아니라는 거를 꼭 말씀을 드리고 싶은 겁니다
그리고 우리가 흔히 하는 실수 컨트롤 Z라던지 뭐 이런 것들에 대해서도 그리고 그라운드 백그라운드 개념에 대해서도 정확하게 인지하는게 좋을 거 같고요
그리고 포그라운드 백그라운드 관련된 주제에 대해서는 좀 다른 영상으로도 한번 이어서
한번 얘기해 보면 참 좋을 것 같습니다
자 여기까지 해서 스왑파일 관련된 vi/vim 에디터 문제해결 살펴봤습니다
감사합니다
관련 리얼리눅스 강의 추천은 리눅스 Zero 베이스 초보자 트러블 슈팅까지 입니다.
https://reallinux.co.kr/course/linux_zerobase