윈도우에서 리눅스 명령어를 사용하고 싶을때는 아래 포스팅에서 소개한 GOW 를 사용하거나~ Cygwin  등을 사용했었습니다. 



그런데 GOW 를 쓰다 보니 없는 명령어들이 좀 되더군요. 

그래서 최근에는 GnuWin32 를 사용합니다.

오늘은 GnuWin32 설치 방법에 대해 소개해 드리려 합니다.

     1. 일단 주소에서 GnuWin32 를 다운로드 합니다. 


다운로드 받은 GetGnuWin32-0.6.3.exe 파일을 실행하면 GetGnuWin32 폴더가 생성 되고~

     2. 해당 폴더 안에 들어가서 download.bat 파일을 더블클릭해서 실행 시킵니다.
         이건 시간이 좀 오래 걸리더군요. 그냥 명령어 실행 시켜 놓고 다른일 하시다 보면 끝납니다. 1~2시간 걸린거 같네요.

     3. 다음으로 아래 명령어를 통해 설치하고 싶은 폴더에 설치 합니다.

install D:\GnuWin32


     4. 마지막으로 path 환경 변수에 D:\GnuWin32 폴더를 등록하면 어떤 폴더에서던 GnuWin32 명령어를 사용 할 수 있습니다. 


정리하면 GnuWin32 다운로드 하고 압축을 푼 후에 설치 명령어는 아래와 같습니다.

cd /d .\GetGnuWin32
download.bat
install.bat  D:\GnuWin32
setx path "D:\GnuWin32\bin";%path% /m


리눅스의 touch 명령어를 사용하면 파일의 수정 날짜를 현재로 설정하거나 새로운 빈 파일을 만들어 낼 수 있습니다.

 

윈도우 커멘드 라인에서도 이런 기능이 없을까 생각해보니

 

아래 포스팅에서 소개했던 gow 를 설치하고 touch 를 사용 할 수 있겠다는 생각이 들었습니다.


http://iamaman.tistory.com/717

 

그런데 이렇게 gow 를 설치하는 방법 말고 윈도우 고유 기능을 사용해서 빈 파일을 생성하는 방법을 찾아보니 아래와 같은 방법이 있더군요.

 

copy /Y /b NUL input.txt

 

파일을 생성하고 바로 편집을 하고 싶다면 다음과 같이 notepad 를 사용하면 됩니다.

 

notepad input.txt



코딩을 하면서 코드의 인덴트를 맞추거나 스타일을 맞추는 것은 요즘 Editor 에는 필수로 들어 있는 기능 입니다.

   

Eclipse 등에서는 CTRL + ALT + F 를 누르면 각자 설정한 Formatter 설정에 따라 Formatting 이 됩니다.

   

이렇게 Editor 를 사용하여 Formatting 을 하는 방법도 있지만 editor 에서 formatting 을 하기 위해서는 파일을 일일이 editor 에서 열어야 하는 불편함이 있습니다.

   

이럴 때는 command 라인 프로그램이 훨씬 편리 하다는 생각이 드는데요~

   

코드를 예쁘게 formatting 해 주는 프로그램들을 소개하려 합니다.

   

일단 GNU indent 라는 툴이 있습니다.

   

아래 글에서 소개했던 Gow 를 설치하면 indent.exe 라는 프로그램이 설치 됩니다.

 

http://iamaman.tistory.com/717


GNU Indent 의 매뉴얼은 아래 주소에서 확인 할 수 있습니다.

 

http://www.gnu.org/software/indent/manual/indent.html

 

또 다른 code formatting 툴로 Artistic Style 이라는 툴이 있습니다.

 

Artistic Style 의 홈페이지 주소는 다음과 같습니다. 아래 페이지에서 Download 링크를 클릭해서 다운로드 페이지에서 Artistic Style 를 다운로드 할 수 있습니다. 아래 쪽에 보면 astyle 의 옵션들도 나와 있습니다.

 

http://astyle.sourceforge.net/

 

저는 Eclipse 에서는 allman 스타일로 formatting 을 하는데 Artistic Style 을 사용하면 command line 에서 allman 스타일로 formatting 을 할 수가 있습니다.

   

특정 폴더 하위의 C, H 확장자 파일에 대해 recursive 하게 allman 스타일로 formatting 하는 명령은 다음과 같습니다. 아래 명령어는 현재 폴더 하위의 C, CPP, H 파일을 allman 스타일로 formatting 해 주는 명령어 입니다.

   

astyle.exe --style=allman --mode=c --recursive *.c *.cpp *.h

 

아래 그림과 같이 보기 힘들게 생긴 코드에 대해 위 명령어를 사용하면~

 

현재 main.cpp.orig 라는 백업 파일이 생기고 다음과 같이 코드가 formatting 되는 것을 확인 할 수 있습니다.



오늘 포스팅에서는 Linux sort 명령어의 사용 방법에 대해 알아보려 합니다.

 

아래 포스팅에서 텍스트 파일의 내용을 unique 하게 sorting 하는 방법에 대해 설명 드린적이 있는데~

 

아래 포스팅 에서는 Gow의 uniq 명령과 윈도우의 sort명령을 사용했었습니다.


2014/05/14 - [컴퓨터일반] - windows console 에서 텍스트 파일 내용 unique 하게 정렬하기

 

하지만 Linux 의 sort 명령어에는 굉장히 편리하게도 unique 옵션이 있더군요.

 

간단한 예로 다음과 같은 테스트 쿼리를 예로 들어보죠~

 

아래 insert 구문은 아래 포스팅에서 소개 드렸던 generateda를 사용하여 만들어진 테스트 데이터 입니다.


2014/06/17 - [유틸] - Database 테스트 데이터 생성 사이트 generatedata


INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Ahmed","1-156-444-1052",5);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Nissim","1-786-558-9774",2);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Herman","1-831-439-1058",4);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Nissim","1-144-592-7170",1);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Gannon","1-863-622-1551",4);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Samuel","1-963-369-2263",5);

 

generateda에서 랜덤하게 만들어진 데이터 이므로 중복이 있을수도 있겠죠~ 위에 예로 든 데이터에서는 Nissim 이라는 이름이 중복입니다.

 

위 예처럼 몇 줄 안 되는 경우에는 일일이 확인해서 중복되는 데이터들을 지워 줄 수 있겠지만,중복되는 경우가 많다면 일일이 사람이 지워주기는 힘들겠죠~

 

Linux 의 sort 명령어를 몰랐다면 Excel 과 같은 프로그램등을 이용해서 정렬해서 중복되는 데이터들을 제거 했겠지만 대단히 불편했을 것 같네요~

 

Sort 명령어의 몇 가지 옵션에 대해 알아보겠습니다. 저는 현재 windows 환경이라 Cygwin 에서 linux sort 함수를 사용하도록 하겠습니다.

 

-u : unique 옵션

-t : 뒤에 구분자를 넣어 줌

-k : 뒤에 몇 번째 열을 기준으로 sort 할 것인지를 넣어줌, 쉼표로 구분하여 시작열, 끝열을 넣어줌, 시작열만 지정할 경우 시작열부터 줄의 끝까지임

 

 

 

위 옵션을 바탕으로 위에서 소개한 쿼리 예에 대해 이름에 따른 정렬을 시켜 보죠~ 위 쿼리는 query.txt 파일에 적혀 있습니다.

 

위 쿼리 문자열을 보면 쌍따옴표(") 를 기준으로 2번째 열이 바로 이름 컬럼이라는 것을 알 수있습니다. 따라서 구분자로는 –t 옵션에 쌍따옴표를 넣어주고~ –k 옵션에는 2를 넣어 줍니다. 하지만 그냥 2를 넣어주면 2 부터~ 끝까지 이기 때문에~ 정상적으로 unique 하게 sort 가 안됩니다. 딱 2번째 컬럼 즉 이름 부분만 선택하기 위해 2,2 라고 넣어줘야 합니다.

 

sort –u –k 2,2 –t '"' query.txt > uniq.txt

 

 

위 명령을 실행해 보겠습니다. 다음과 같이 중복된 이름이었던 4번째 행이 사라진 것을 확인 할 수 있습니다.

 

리눅스에서 문자열 등을 찾을 때 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 를 사용할수 있는것 같더군요.



아래 포스팅에서 파이썬을 이용하여 텍스트 파일의 내용을 unique 하게 sorting 하는 방법에 대해 소개한 적이 있는데요~ 



2013/11/26 - [programming language/Python] - ipython으로 unique 하게 sorting 하기

 


좀더 찾아보니 리눅스 명령어들을 사용하면 훨씬 더 쉽게 할 수 있더군요.

 

리눅스를 사용하시는 분들이라면 그냥 사용하면 되겠지만 윈도우를 사용하시는 분들은 아래 포스팅에서 소개해 드렸던 GNU On Windows (GOW) 를 설치 하시기 바랍니다.



2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기

 

아님~ 윈도우에 Cygwin 을 설치해서 사용하시는 분들이라면 그냥 Cygwin terminal 상에서 하셔도 무방 합니다.

 

unique 한 정렬을 위해 사용하는 명령어는 uniq 인데요~

 

다음과 같은 sampleFile.txt 파일이 있을 때~

 

위에 보이는 바와 같이 sample1 이 3개 sample3 가 2 개가 있고 나머지는 1개씩 있습니다.

 

uniq 명령어는 연달아서 중복된 내용이 있을 때만 중복된 내용을 제거 해 줍니다. 따라서 텍스트 파일의 내용을 unique 하게 정렬하기 위해서는 다음과 같이 sort 를 먼저 한 다음에 uniq 명령어를 통해 중복된 내용들을 제거 해 줄 수 있습니다.

 

uniq 명령어에는 다음과 같은 다양한 옵션들이 있는데~ 제가 사용하는 옵션들은 다음과 같습니다.

 

–c : 개수를 센다.

 

-d : 중복되는 라인만 나오게 한다.

 

-u : unique 한 라인만 나오게 한다.



Autohotkey를 이용하면 파일의 경로명 등을 다룰 때 매우 유용하게 사용할 수 있다.

 

예를 들어 D:\temp\temp.txt 라는 path가 있을 때 경로, 파일이름, 확장자 등으로 나누고 싶은 경우가 있다.

 

이런 경우 정규 표현식을 사용해도 되지만 Autohotkey 에서는 SplitPath 를 함수가 있다.



http://www.autohotkey.com/docs/commands/SplitPath.htm

 

 

사용 방법은 다음과 같다.

SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]

 

위 함수에서 대괄호 [ ] 부분은 옵션들이다. 필요한 부분만 써서 쓸수 있다.

 

예를 들어 OutFileName, OutDir 을 제외하고 확장자, 확장자를 제외한 이름, 드라이브만 확인하고 싶으면 다음과 같이 사용하면 된다.

SplitPath, InputVar , , , OutExtension, OutNameNoExt, OutDrive

 

내가 SplitPath 를 사용하는 실제적인 예를 들어보겠다.

 

Autohotkey 의 SplitPath 명령을 사용해서 clipboard 의 full path 로부터 폴더를 검출하여 clipboard에 저장하는 단축키를 설정한다.

 

#p:: ; 단축키 Win + p

SplitPath, Clipboard, , dir

Clipboard=%dir%

return

 

윈도우에서 사용하는 perl.exe 가 들어 있는 폴더를 탐색기에서 열고 싶을 때 나는 다음과 같은 방법을 사용한다.

 

CMD 에서 which 명령을 통해 perl.exe 파일의 path 를 알아내고 clip 을 파이프라인 해서 clipboard 에 perl.exe 의 full path 를 저장한다.

 

which 명령을 사용하기 위해서는 아래 포스팅에서 소개했던, GOW 를 사용하면 된다.


2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기



위에서 설정한 win+p 단축키를 통해 full path로부터 폴더명만 추려낸다.

 

다음으로 win+r 을 눌러서 실행 창에 ctrl+v 를 해서 붙여 넣는다.

 

그럼 perl.exe 가 들어있는 탐색기가 열린다.

 

오늘의 팁 끝~~




윈도우에서 리눅스 명령 또는 툴들을 사용할 때 GOW 도 사용하지만


2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기


많은 분들이 훨씬 더 많은 기능을 담고 있는 Cygwin 을 주로 사용하실 텐데요~


아래 주소의 Cygwin 홈페이지를 가보니 요즘은 64 비트 Cygwin 도 나왔더군요.

 

http://cygwin.com/install.html

 

32 비트를 설치하시려면~ setup-x86.exe 파일을,  64 비트를 설치하시려면~ setup-x86_64.exe 파일을 다운로드 받아서 설치하시면 됩니다.

 

 

저도 요즘은 64 비트 윈도우를 사용하다 보니 64 비트 Cygwin 을 낼름 깔아 봤습니다.

 

설치 방법은 밑에 글 참조 바랍니다. 

2012/10/07 - [유틸] - Cygwin에서 간단히 C 코딩해보기~

 

제 블로그에서는 MATLAB 을 주로 설명하지만 리눅스에서는 Octave 라는 MATLAB 과 굉장히 유사한 프로그램이 있습니다.

 

Cygwin 에서 Octave 를 설치하실 때, Octave 는 Math 카테고리에 있으니깐 Math 옆의 Default 라고 되어 있는 글을 클릭해서 Install 로 바꿔준 후에 설치하셔야 합니다.

 

 

기쁜 마음으로 ~ Cygwin64 Terminal 에서 다음과 같이 Octave를 실행했습니다.

 

뭐 당연히~ 잘~~ 실행 되더군요.

 

그래서 간단히 사용을 해 봤죠.

 

x=linspace(0, 2*pi,100);

y=sin(x);

plot(x,y)

 

간단하게~ sin() 그래프 그리는 건데…. 헉!! 아래와 같은 메시지가 나오면서 에러가 뜨더군요.

 

0 [main] octave-3.6.4 4852 child_info_fork::abort: ……………. 어쩌구 저쩌구… 블라 블라~


 

그래서 32 비트에서도 해보니 아래와 같이 잘 나오더군요.

 

64 비트에서는 안 되는게 이상해서 구글링을 해보니 아래 글의 중간 정도에 해결 방법이 있었습니다.

 

http://octave.1599824.n4.nabble.com/Octave-3-6-x-for-windows-td4649424.html

 

아래 첨부한 rebaseall_example.bat 파일을 C:\cygwin64 폴더에 다운로드 한 후에~ 아래 그림처럼 관리자 권한으로 실행해 줍니다.


rebaseall_example.bat


 

 

rebaseall_example.bat 파일 내용 >

@echo off

 

cd bin

 

dash -l -i -c "echo ' !! Starting rebasing. Be patient !! \n' ; rebaseall "

 

echo .

echo !! No rebaseall errors ? Than done and fine, !!

echo !! otherwise you have others cygwin process running !!

echo .

 

pause

 

조금 기달렸다가~ 아래와 같은 화면이 나오면 해당 화면을 닫아 주시면 문제가 해결됩니다.

 

이제 Octave 를 다시 실행 시키고 그래프를 그려 볼까요?

 

이제 아래 그림처럼 촤라락~~ 하고 그래프가 나오는 것을 확인 할 수 있습니다.

 

물론 예쁜 그림은 아니지만~


저는 윈도우에서도 Eclipse CDT 와 MinGW 환경에서 C/C++ 코딩을 하곤 하는데요~

 

MinGW64 비트 설치 법은 아래 링크 참조 하시길~

  

2013/06/06 - [유틸] - MinGW 64bits 설치

 

윈도우에서도 Eclipse CDT 를 이용한 빌드가 아닌 Makefile 을 이용해서 빌드를 해야 하는 경우가 종종 있습니다.

 

일단 뭐 Makefile 을 만들어야 하지만, Eclipse CDT 를 비롯한 몇몇 툴들은 Makefile 을 만들어 주곤 하죠~

 

2013/06/06 - [컴퓨터일반] - Eclipse 프로젝트에서 C/C++ Makefile 생성하기


2012/12/06 - [유틸] - Codeblock Project 에서 C/C++ Makefile 만들기, cbp2make

그런데 Eclipse CDT 에서 Makefile 을 이용해서 Debug/Release 모드에서 빌드는 제대로 되는데~ Clean 이 안되더군요… ㅡㅡ;

 

참… 이럴 때 완전 당혹 스럽죠~ 맘을 가라앉히고~ 구글링을 해보니 Eclipse CDT 를 통해 나오는 Makefile 에서는 rm 이라는 리눅스 명령어가 들어가서 그랬더군요.

 

뭐 다른 곳에서는 Cygwin 을 설치한 다음에~ rm 명령어가 들어있는 bin 폴더를 path 로 잡아주라고 하던데~

 

굳이 이렇게 하기 보다는 아래 글에서 설명한 프로그램을 깔아 주면 됩니다. 바로 GNU On Windows 라는 툴인데요~

  

2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기

 

위 글에서 설명한대로 가서 다운로드 받고 설치하시면~

 

설치과정에서 C:\Program Files (x86)\Gow 폴더가 path 로 자동으로 잡히고~

 

아래와 같이 기본적인 리눅스 명령어들을 윈도우에서도 사용하실 수 있습니다.

 


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

 

이러한 리눅스 명령어들을 사용하고 싶을 때는 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