태그 보관물: OS/시스템

리눅스 명령어로 최근 파일만 남기고 지우기

서버를 관리하다 보면 주기적으로 로그를 남기거나 백업 등을 하게 되는데 시간이 지날수록 관련 파일이 쌓이게 된다. 보통 이럴때 find 명령으로 오래된 날짜의 파일을 찾아서 지우는 방법이 있다. 하지만 이 방법은 날짜를 기준으로 하다보니 예상치 못한 이유로 새로운 파일이 생성되지 않으면 결국에는 모든 파일이 지워진다. 우리는 언제나 일정한 개수의 최신 파일이 유지되기를 바란다.

그래서 원하는 개수만큼의 최근 파일만 남기는 간단한 리눅스 명령어 예제를 만들어봤다.

$ mkdir ./test
$ cd ./test
$ touch 1.log && sleep 1 && touch 2.log && sleep 1 && touch 3.log
$ ls -ltd
$ ls -td1 *.log | tail -n +3 | xargs rm -f
$ ls -ltd

위 예제에 대한 설명은 아래와 같다.

3개의 파일을 1초 간격으로 만든다.

$ touch 1.log && sleep 1 && touch 2.log && sleep 1 && touch 3.log

ls 명령으로 파일 목록을 시간 내림차순으로 출력한다.

$ ls -td1 *.log

tail 명령으로 파일 목록의 3번째 라인부터 출력한다.

… | tail -n +3

출력되는 3번째부터 파일부터 rm 명령으로 삭제하면 최근 날짜의 파일 2개만 남는다.

… | xargs rm -f

이렇듯 단순히 명령을 조합하여 필요한 기능을 만들 수 있다는 것이 리눅스의 강점이다.

3종 OS별 XULRunner 배포판을 만들면서

XUL로 개발한 프로그램을 리눅스, 맥, 윈도우 3종 OS별로 XULRunner를 포함시켜 배포판을 만들어봤습니다.

별것 아니지만 몰라서 고생했던 내용을 몇가지 적어보겠습니다.

 

터미널에서 xulrunner 실행시 ‘Mozilla XULRunner <Error> – <Error>’ 메시지가 출력되면 다른 버전의 xulrunner로 교체합니다.
6.0 버전이 안정된 버전이라고 합니다. 저는 6.0에서 정상적으로 실행했습니다.

XULRunner와 직접적인 연관은 없는 내용인데 *.app 폴더의 아이콘을 변경해도 바뀌지 않는다면 .DS_store 파일을 지워봅니다.

터미널에서 실행시 키입력을 터미널이 가로채는 등의 문제가 있었습니다. 근본적인 해결방법은 찾지 못해서 터미널을 이용하지 않고 직접 실행시켰습니다. 이 경우 터미널에서 실행하는 것 처럼 -jsconsole 옵션으로 자바스크립트 콘솔창을 띄우지 못합니다. 그래서 스크립트로 직접 띄웠습니다.

function showErrorConsole() {
    var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'];
    var windowManagerInterface = windowManager.getService(Components.interfaces.nsIWindowMediator);
    var errorConsoleWindow = windowManagerInterface.getMostRecentWindow("global:console");

    if ( errorConsoleWindow ) {
        errorConsoleWindow.focus();
    } else {
        window.open("chrome://global/content/console.xul", "_blank",
                    "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar");
    }
}

* 출처: http://aadima.com/xulrunner/xrdebug.html

 

윈도우

XULRunner 실행 후 오류가 나서 아무런 윈도우가 뜨지 않았어도 프로세스가 종료되지 않고 동작을 하고 있을 가능성이 높습니다. 다시 실행하기전에 프로세스가 완전하게 종료되었는지 확인해야 합니다.

 

리눅스

별다른 문제없이 쉽게 성공했습니다.

 

공통

XULRunner 버전별로 XUL 프로그램 파일 구조가 다를 수 있습니다.

chrome.manifest 파일의 위치가 다르면 chrome.manifest 내의 경로도 달라집니다.

chrome.manifest가 chrome 폴더랑 경로가 같다면
– content myapp chrome/content/

chrome.manifest가 chrome 폴더내에 있다면
– content myapp content/

 

XULRunner로 XUL 프로그램을 실행시 -jsconsole 옵션을 추가하면 디버깅 및 문제를 해결하는데 도움이 됩니다.

$ xulrunner application.ini -jsconsole

 

-jsconsole 옵션을 추가하고 xulrunner를 실행하면 프로그램의 코드를 수정하고 재시작 하여도 캐쉬로 인해 수정하기 이전의 코드로 동작하는 문제가 있습니다.
이때는 prefs.js 파일에 아래의 코드를 추가하여 캐쉬가 되지 않도록 하면 됩니다.

pref(“nglayout.debug.disable_xul_cache”, true);
pref(“nglayout.debug.disable_xul_fastload”, true);

 

XUL이 제공하는 콘솔창에 메시지를 출력하는 방법

function jsdump(str) {
    Components.classes['@mozilla.org/consoleservice;1']
        .getService(Components.interfaces.nsIConsoleService)
        .logStringMessage(str);
}

* 참고: https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIConsoleService?redirectlocale=en-US&redirectslug=nsIConsoleService#Logging_a_simple_message

 

기타 참고 자료

  • https://developer.mozilla.org/en-US/docs/XULRunner/Deploying_XULRunner_1.8

리눅스에서 NTFS 사용은 불안정

우분투에서 각각 160GB, 250GB, 1TB 3개의 HDD에 저장된 파일들을 서로 옮겨가며 정리하습니다.
3개의 HDD가 모두 SATA 방식이라서 한개는 외장 HDD 케이블로 연결했습니다.

그런데 대량의 파일들을 복사하다 보면  NTFS에 있는 파일들이 소실되는 일이 빈번했습니다.
황당한 점은 NTFS에서 파일을 읽어와서 EXT4로 복사하는 건데 NTFS에 있는 파일이 소실된다는 것입니다. ㅡㅡ;
그리고 EXT4에도 잘못된 정보가 들어갑니다.

다행히 디스크 검사(fsck)를 하면 소실되었던 파일이 다시 나타나서 빠진 파일만 다시 재복사 합니다.
파일 자체가 깨지는 것은 아니고 파일 정보가 사라지는 것 같습니다.

처음에는 외장 HDD 케이블의 문제인가 싶었는데 EXT4 <-> EXT4 사이에는 문제가 없었습니다.
지금은 모든 HDD를 EXT4로 변환했습니다.

리눅스에서 NTFS 사용은 자제하는 것이 좋을 것 같습니다.