Synology NAS 에서 특정 스크립트를 background 에서 계속 돌리고 싶을때가 있다. 


이런 경우 일단 Synology NAS 에 putty 로 접속해서 스크립트를 실행하는데 parent 프로세스인 putty 를 끄면 해당 프로세스가 같이 죽어버린다. 


putty 를 종료해도 해당 프로세스가 백그라운드에서 계속 실행되게 하기 위해서는 아래와 nohup 과 & 를 붙이면 해결된다.


nohup ./실행할스크립트명 &

EX) nohup ./fileMoveNewerThenNow.sh &


위와 같이 실행하고 putty 종료 후에 다시 putty 를 접속해보자.


그리고 다음과 같이 내가 실행한 스크립트가 정상적으로 실행중인지 확인한다.

ps -ef | grep 프로세스명

EX) ps -ef | grep file*

다음 명령어로 해당 프로세스를 내가 원하는 시간에 종료 하고 프로세스가 정상적으로 종료 되었는지 확인해 보자.

kill -9 PID

EX) kill -9 31271

실제 putty 재 접속 후의 실행 화면은 다음과 같다. 



컴퓨터를 사용시 텍스트를 검색할 때 주로 grep 와 같은 툴을 사용 합니다.

 

물론 grep 말고도 아래 주소에서 소개한 Ack, The Platinum Searcher 와 같은 툴들도 있습니다.

 

http://iamaman.tistory.com/1310


http://iamaman.tistory.com/1572


 

그런데 MATLAB 에서 grep와 같은 기능이 없을까 해서 찾다 보니 아래 주소의 MATLAB File Exchange 에 grep 가 있더군요.

 

http://www.mathworks.com/matlabcentral/fileexchange/9647-grep--a-pedestrian--very-fast-grep-utility/content/grep.m

 

 

다운로드를 클릭해서 다운로드 받은 후에 압축을 풀면 grepdemo.m, grep.m 파일이 나타납니다.

 

이 중에 grep.m 파일을 사용자의 라이브러리 폴더 등에 넣어 놓고 사용하면 됩니다.

 

Help grep 라고 타이핑 하면 다음과 같이 옵션이 나오고 적절한 옵션으로 사용하면 되겠네요.


 

영어가 짧아서 옵션 내용이 잘 이해가 안 된다 하시는 분들은 grepdemo.m 파일을 한번 돌려 보면 좀더 쉽게 이해가 될 듯 합니다.

 

데모파일의 내용 중 아래 명령을 보면~ 간단하게는 –i 는 case insensitive 이고~ -n 은 line number 를 출력하는 옵션 입니다.

 

grep -i -n Version grep.m

 

grep.m 파일로부터 Version 이라는 글자를 찾는 예입니다.

 

다음과 같이 줄 수와 함께 Version 이라는 글자가 들어 있는 줄을 출력하는 것을 확인 할 수 있습니다.


 

 

리눅스 터미널과 같이 파이프 라이닝을 해서 찾을 수 있다면 좀더 편리할 것 같긴 하지만 그래도 나름 쓸 만은 하네요.

 

Grep 명령은 다음과 같이 함수의 형태로도 사용 할 수 있더군요. 함수의 형태로 사용 한 경우에는 아래 결과와 같이 파일의 full path 가 return 됩니다.



아래 주소의 글에서 Grep 보다 좋은 검색 툴로 Ack 라는 툴에 대해 소개해 드린 적이 있습니다.

 

http://iamaman.tistory.com/1310

 

그런데 아래 주소에서 확인을 해보니Ack 보다도 빠른 검색 툴이 있더군요~

http://beyondgrep.com/more-tools/

 

오늘 소개해 드릴 툴은 The Platinum Searcher 라는 툴인데요. 구글에서 만든 언어인 Go 로 만들어 졌다고 하더군요. Multi-platforms, multi encodings 을 지원한다 하고~

 

https://github.com/monochromegane/the_platinum_searcher

 

Powershell 에서 측정을 해보니 다음과 같이 Ack 보다 빠르더군요. Ack 는 509.3429 Milliseconds 인데 반해 The Platinum Searcher 는 359.2784 milliseconds 더군요.

 

PS D:\ > Measure-Command {pt ifwinexist -i}

Days : 0

Hours : 0

Minutes : 0

Seconds : 0

Milliseconds : 359

Ticks : 3592784

TotalDays : 4.15831481481481E-06

TotalHours : 9.97995555555556E-05

TotalMinutes : 0.00598797333333333

TotalSeconds : 0.3592784

TotalMilliseconds : 359.2784

 

PS D:\> Measure-Command {ack ifwinexist -i}

Days : 0

Hours : 0

Minutes : 0

Seconds : 0

Milliseconds : 509

Ticks : 5093429

TotalDays : 5.8951724537037E-06

TotalHours : 0.000141484138888889

TotalMinutes : 0.00848904833333333

TotalSeconds : 0.5093429

TotalMilliseconds : 509.3429

 

The Platinum Searcher 는 아래 주소에서 다운로드 할 수 있습니다.

 

https://github.com/monochromegane/the_platinum_searcher/releases

 

현재 윈도우 64 비트라 아래 그림과 같이 pt_windows_amd64.zip 을 다운로드 받았습니다.

 

다운로드 받은 ZIP 파일을 압축해제 후에 pt.exe 파일을 path 로 설정되어 있는 C:\Windows 에 심볼릭 링크로 설정해서 넣었습니다.

 

그럼 이제 어디서든 사용할 수 있겠죠~

 

사용법은 ack 와 동일 합니다. 옵션 등도 거의 대부분 동일해서 ack 을 사용해 보신 분들은 금방 쉽게 사용할 수 있을 거라 생각 되네요.

 

그런데 오늘 이 The Platinum Searcher 을 사용해 보면서 Go 라는 언어에 대해 관심이 생기더군요.

 

아래 주소에서 확인을 해보니 Benchmarks 결과가 나와 있는데~ the Silver Searcher 라는 C 로 만들어진 툴 보다도 빠르더군요.

 

https://github.com/monochromegane/the_platinum_searcher#benchmarks

 

결과적으로 속도는 The Platinum Searcher > the Silver Searcher > Ack 의 순이었습니다.

리눅스에서 문자열 등을 찾을 때 grep 를 많이 사용하곤 하는데요~

 

grep 는 아래 소개 드렷던 gow 를 설치하면 윈도우에서도 사용 가능 합니다.

 

그런데 최근에 검색을 좀 해보니 grep 보다 좀더 편리한 툴이 있더군요.

 

바로 ack 라는 툴인데요.

 

저는 일단 좀 써보니 그 속도가 정말 빠르더군요. perl 로 만들어 졌다고 하던데…. 이렇게 빠른가 싶었습니다.

 

ack 의 공식 홈페이지는 다음과 같습니다.

 

http://beyondgrep.com/

 

install 방법은 아래 주소에 나와 있는데~

 

http://beyondgrep.com/install/

 

perl 의 cpan module 로도 있더군요. 모듈 이름은 App::Ack 입니다.

 

우분투 등에서는 그냥 apt-get install ack-grep 하면 설치되고~

 

저는 현재 윈도우 환경이라 아래 포스팅에서 소개드렸던 chocolatey 를 이용하여 설치했습니다. chocolatey 를 사용하면 windows 에서 다음 명령어로 ack 를 설치 할 수 있습니다.


2014/05/25 - [컴퓨터일반] - 윈도우 프로그램을 쉽게 설치해 보자~ chocolatey

 

cinst ack

 

ack 를 위에서도 애기했지만 perl 을 사용하기 때문에 윈도우 버전에 맞는 perl 이 설치되어 있어야 합니다.

 

ack 사용 방법은 아래 주소에 설명되어 있는데~ grep 를 사용해 보신 분이라면 쉽게 알 수 있을 것 같네요.

 

http://beyondgrep.com/documentation/

 

html 파일에서 field 라는 글자가 들어있는 부분을 찾기 위해서는 아래와 같이 명령어를 작성하면 됩니다.

 

ack –-html field

 

 

ack 는 기본적으로 Recurse 하게 동작하더군요. 즉 하위 폴더들을 기본적으로 다 들어가서 찾는 다는 뜻입니다.

 

Recurse 옵션이 기본적으로 켜져 있으므로 Recurse 옵션을 끄기 위해서는 –n 또는 --no-recurs 옵션을 줘야 합니다.

 

ack 의 좋은 점은 단연 속도에 있을 것 같은데요…. 정말 빨리 찾더군요.

 

아래 동영상을 보시면 8000개 정도의 파일에서 단어 검색하는데 약 2초 걸리더군요. 찾은 단어의 경우의 수에 따라 다르겠지만 빠르긴 하더군요. 쓸만 하겠죠~ 아래 동영상을 보니 vim 플러그인도 있어서 vim에서도 ack 를 사용할수 있는것 같더군요.



윈도우를 사용하다 보면 리눅스에서 사용하던 명령어들이 아쉬워 질 때가 많이 있습니다.

 

이러한 리눅스 명령어들을 사용하고 싶을 때는 cygwin 과 같은 프로그램을 설치하여 사용해도 되지만~

 

GNU On Windows 을 설치하면 윈도우에서도 리눅스 명령을 사용할 수 있습니다.

 

GNU On Windows (GOW)은 현재 약 130 개 정도의 GNU utility 를 윈도우 프로그램으로 컴파일 해서 제공해 줍니다.

 

아래 페이지에서 다운로드 가능하구요~

https://github.com/bmatzelle/gow/releases

다음 그림과 같이 가장 최신의Gow 설치 파일을 다운로드 및 설치 합니다.

 

설치는 특별히 설정해줘야 할 것들이 없더군요. 다음~ 다음 해서 설치하면 되겠습니다.

 

이렇게 설치 하면 C:\Program Files (x86)\Gow\ 폴더에 설치가 되더군요.

 

Ctrl+R 을 눌러서 실행창을 열고 cmd 명령을 쳐서 윈도우 명령 인터프리터를 시작합니다.

 

아래 그림처럼 gow -h 을 치면 gow 명령에서 사용 가능한 옵션들이 나타나고 ~

 

gow -l (소문자 엘)을 치면~ 아래 그림처럼 사용 가능한 GNU 유틸들의 목록이 나타납니다.

 

뭐 많이들 사용하는 리눅스 명령어들은 대부분 있는 것 같군요.

 

각 명령어들의 사용방법을 알고 싶으시면~ 명령어 --help 라고 치면 됩니다.

 

예를 들어 grep 의 사용방법을 알고 싶다면~ 아래 그림처럼 grep --help 라고 치면 됩니다.


  1. ryukato 2013.01.24 16:26

    좋은 정보 고맙습니다. ^^

+ Recent posts