Search Results for '프로그래밍/CYGWIN&DOS'
67 posts related to '프로그래밍/CYGWIN&DOS'
- 2011/06/09 ncftpget 으로 원격 ftp 사이트 소스 통째로 가져오기.
- 2010/03/14 pscp와 plink를 이용해서 원격 SSH 호스트에 파일 업로드 및 작업 자동화하기
- 2010/03/12 cmd.exe 명령 도움말
- 2010/03/10 lftp 이용한 파일 다운로드 , 업로드
- 2009/10/14 Cygwin bash prompt 모양 바꾸기.
- 2009/10/14 Cygwin 한글 입출력 원활히 사용하기.
- 2009/10/13 wget 사용법 2 4
- 2009/09/30 간단 배치파일 작성
- 2009/05/14 wget 사용법 1
- 2009/05/13 Vim, GVIM, 울트라에디트를 윈도우 기본 편집기로 만들기
- 2009/05/13 BAK 파일 삭제 배치 파일; 백업파일 지우기 BAT
- 2009/05/13 도스에서 텍스트 파일 보기 명령어; DOS Text File Viewer
- 2009/05/13 도스 PKZIP 폴더 압축 옵션, 디렉토리까지 압축하기 방법; Folder Directory
- 2009/05/13 배치파일, 도스(DOS)에서 파일 삭제, 디렉토리 지우기 명령어; Delete File
- 2009/05/12 배치파일로 디렉토리 생성 명령어, 폴더 만들기 방법; BAT Make Directory, Folder
- 2009/05/12 배치파일 명령어, 현재시간, 현재날짜, 현재시각 출력 방법; BATCH Time Date
- 2009/05/12 도스에서 확장자 변환 방법; DOS에서 File Ext 바꾸는 법, 명령어 1
- 2009/05/12 갱신파일 찾는 도스 배치파일 예제; A Attrib File만 찾기 Dir 옵션
- 2009/05/12 BAT 파일 반복 시키기 배치파일 문법
- 2009/05/12 반복되는 명령 실행: 윈도우 도스창 / 리눅스 - Repeat Commands
- 2009/05/12 Vim, Vi, GVim 에디터, 행번호, 줄번호 표시 명령어, 줄 번호 행 번호 보는 명령; View Line Number
- 2009/05/12 Vim, Vi, GVim 에디터, 행번호, 줄번호 표시 명령어, 줄 번호 행 번호 보는 명령; View Line Number
- 2009/05/12 디렉토리 만들기 명령, 디렉토리(폴더) 지우기 명령어: Make, Delete Directory
- 2009/05/12 [C언어] Cygwin(시그윈)에, gcc (공개 C컴파일러) 설치하기 1
- 2009/05/12 실행 파일의 위치 알아내기: which 명령
- 2009/05/12 재지향(Redirection)이란? / 파이핑(Piping)이란? - [도스창/명령 프롬프트 커맨드 라인/리눅스 셀]
- 2009/05/12 리눅스 명령어를 윈도우에서 사용하기; 시그윈(Cygwin) 없이 Win32로; GnuWin32 1
- 2009/05/12 Vim 창크기 조절 방법, 핫키; Vi에서 창사이즈 Window Size Hotkey
- 2009/05/12 cygwin 에 bin 폴더 파일들 bin.zip
- 2009/05/12 Cygwin에서 clear명령어가 안먹힌다면 ?
위 명령어는 원격에 있는 remote.ftp.co.kr 이라는사이트에
ftpID, ftpPWD 로 로그인을 해서
그 계정의 public_html 디렉토리를
현재 내 위치 (.) 에 하위 디렉토리까지 (-R)
통채로 가져오라는 명령어.
..
만약 ftp 서버의 패시브모드 변경해야 한다면 -E 나 -F 옵션을 줘야 함.
..
-E Use regular (PORT) data connections.
-F Use passive (PASV) data connections. The default is to use passive, but to fallback to regular if the pas-sive connection fails or times out.
..
ssh 접속이 안되고 ftp 만 허용해서 원격서버의 전체 웹루트의 소스를 백업해 올 때
유용할듯.
1. 원격 SSH 호스트에 파일 올리기
베리즈 웹쉐어 프로젝트에서 배포본을 웹서버에 올리는 작업을 자동화하기 위해 쓰고 있는 방법입니다. PuTTY 패밀리의 일원인 pscp를 사용하고, stania군이 작업했던 것으로 기억합니다.
pscp.exe 올릴파일이름 유저이름@호스트주소:목적지경로 -pw 비밀번호
e.g.) pscp yd0283.avi rica@upnl.org:public_html/yd_distribution -pw BLAHBLAH
커맨드는 위와 같습니다. 이때 '-pw 비밀번호' 부분을 빼면 매번 비밀번호를 입력하게 됩니다. 베리즈 웹쉐어 프로젝트에서는 스크립트를 실행할 때마다 암호를 입력하는 것을 피하면서 스크립트에 암호가 그대로 보이는 상황을 막기 위해, 계정에서 계정의 개인키를 받아오는 방식을 취하고 있습니다. 이 방법은 제가 잘 모르기 때문에 건너뛰겠습니다.
2. 원격 SSH 호스트에 명령어 입력하기
PuTTY는 유명한 SSH 클라이언트인데, PuTTY 패밀리 중에 콘솔에서 작동하는 SSH 클라이언트도 있지 않을까 하고 찾아 봤더니 역시 있습니다. 이름은 plink라고 합니다.
이놈도 사용방법은 비슷합니다.
plink.exe 유저이름@호스트주소 -m 수행할명령어가담긴파일 -pw 비밀번호
e.g.) plink rica@upnl.org -m commands.txt -pw BLAHBLAH
3. 위 작업들을 스크립팅
pscp와 plink는 모두 콘솔에서 잘 작동하기 때문에, 배치파일을 쉽게 만들 수 있습니다.
plink를 실행해서 수행할 명령어가 담긴 파일을 따로 관리해야 하는 것이 약간 귀찮다면 귀찮겠네요.
pscp 는 http://youngsam.net/1056 요 글을 참고 하십시오. 윈도우 환경에서 가능합니다.
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] 문자열]
/C 문자열이 지정한 명령어를 수행한 후에 종료합니다.
/K 문자열이 지정한 명령어를 수행한 후에 계속 남아있습니다.
/S /C 또는 /K 다음에 문자열의 역할을 수정합니다(아래 참고).
/Q 에코를 끕니다.
/D 레지스트리에서 AutoRun 명령어를 실행할 수 없습니다(아래 참고).
/A 파이프 또는 파일로의 내부 명령어의 출력이 ANSI로 설정합니다.
/U 파이프 또는 파일로의 내부 명령어의 출력을 Unicode로
설정합니다.
/T:fg 전경/배경 화면 색상을 설정합니다(자세한 사항은 COLOR /? 참고).
/E:ON 명령 확장을 사용할 수 있습니다(아래 참고).
/E:OFF 명령 확장을 사용할 수 없습니다(아래 참고).
/F:ON 파일과 디렉터리 이름 완성 문자를 사용할 수 있습니다(아래 참고).
/F:OFF 파일과 디렉터리 이름 완성 문자를 사용할 수 없습니다(아래 참고).
/V:ON c를 사용하는 지연된 환경 변수 확장명을 구분 기호로 사용할 수 있습니다.
예를 들어, /V:ON는 실행 시간에 !var!이 변수 var을
확장하도록 허용합니다. var 구문은 입력 시간에
변수를 확장하는데 이것은 FOR 루프 안에 있는 경우와
매우 다릅니다.
/V:OFF 지연된 환경 확장을 할 수 없습니다.
명령 구분 기호 '&&'로 구분되는 다중 명령어는
앞뒤에 따옴표가 있는 경우에만 문자열로 처리됩니다.
또한 호환성을 위해 /X와 /E:ON, /Y와 /E:OFF, /R과/C는
동일한 기능을 갖습니다. 다른 스위치는 무시됩니다.
/C 또는 /K가 지정되면, 스위치 뒤의 나머지 명령줄은
다음 내용과 같이 따옴표(") 문자를 처리하도록
별도의 명령줄로 처리됩니다.
1. 다음의 모든 조건이 만족되면,
명령 줄에 있는 따옴표가 유지됩니다.
- /S 스위치 없음
- 정확히 두 개의 따옴표 문자가 있음
- 따옴표 문자 사이에 다음과 같은 특수 문자가 없음
특수 문자: &<>()@^|
- 따옴표 사이에 하나 이상의 공백 문자가 있음
- 따옴표 사이에 실행 파일 이름이 있음
2. 그렇지 않으면, 이전의 방식대로 첫 문자가 따옴표인지 확인하고
만약 따옴표라면, 시작 및 끝 따옴표를 제거하고 따옴표 뒤에 있는
문자를 유지합니다.
명령 줄에 /D가 사용되지 않으면 CMD.EXE가 시작할 때,
다음 REG_SZ/REG_EXPAND_SZ 레지스트리 변수를 찾습니다.
다음 중 하나 또는 모두가 있으면 우선적으로 실행합니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
및/또는
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
명령 확장은 기본적으로 사용하도록 설정되어 있습니다. 그렇지만
/E:OFF 스위치 사용하면 명령 확장을 사용하지 않을 수도 있습니다.
REGEDT32.EXE를 사용하여 레지스트리에 있는 REG_DWORD 중에서
하나 또는 모든 값을 설정(0x1 또는 0x0)함으로써 컴퓨터 및/또는
사용자 로그온 세션에 있는 CMD.EXE에 대해 명령 확장을 사용하도록
또는 사용하지 않도록 설정할 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions
및/또는
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
사용자 설정 내용은 컴퓨터 설정 내용에 대해 우선권을 갖습니다.
명령 줄에 사용된 스위치는 레지스트리 설정에 대해 우선권을
갖습니다.
명령 확장에는 아래 명령에 대한 변경 및/또는 추가 사항이 있습니다.
DEL 또는 ERASE
COLOR
CD 또는 CHDIR
MD 또는 MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (또한, 외부 명령 호출에 대한 변경 사항도 있습니다.)
ASSOC
FTYPE
자세한 정보를 얻으려면 "명령 이름 /?"를 입력하고 내용을 확인하십시오.
지연된 환경 변수 확장은 기본적으로 사용하지 않도록 설정되어
있습니다. /V:ON 또는 /V:OFF 스위치를 사용하여 CMD.EXE에
지연된 환경 변수 확장을 사용하거나 사용하지 않을 수 있습니다.
REGEDT32.EXE를 사용하여 레지스트리에 있는 REG_DWORD 중에서
하나 또는 모든 값을 설정(0x1 또는 0x0)함으로써 컴퓨터 및/또는
사용자 로그온 세션에 있는 CMD.EXE에 대해 사용하도록
또는 사용하지 않도록 설정할 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
및/또는
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
사용자 설정 내용은 컴퓨터 설정 내용에 대해 우선권을 갖습니다.
명령 줄에 사용된 스위치는 레지스트리 설정에 대해 우선권을
갖습니다.
지연된 환경 변수 확장을 사용하도록 설정하면
실행 시간동안 환경 변수의 값을 대신할 수
있습니다.
파일과 디렉터리 이름 완성은 기본적으로 사용하지 않도록
설정되어 있습니다. /F:ON 또는 /F:OFF 스위치를 사용하여
CMD.EXE에 대한 파일 이름 완성을 사용하거나 사용하지
않을 수 있습니다. REGEDT32.EXE를 사용하여 레지스트리에 있는
REG_DWORD 중에서 하나 또는 모든 값을 설정(아래 참고)함으로써
컴퓨터 및/또는 사용자 로그온 세션에 있는 CMD.EXE에 대해
사용하도록 또는 사용하지 않도록 설정할 수 있습니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar
및/또는
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar
위의 레지스트리 값에는 특정 기능에 대해 사용할 제어 문자의
16진수 값을 사용합니다. (예: 0x4은 Ctrl-D이고 0x6은 Ctrl-F입니다.)
사용자 설정 내용은 컴퓨터 설정 내용에 대해 우선권을 갖습니다.
명령 줄에 사용된 스위치는 레지스트리 설정에 대해 우선권을
갖습니다.
/F:ON 스위치를 사용하여 이름 완성 기능을 사용하면
두 개의 제어 문자를 사용할 수 있으며, 디렉터리 이름
완성에는 Ctrl-D를, 파일 이름 완성에는 Ctrl-F를 사용할 수
있습니다. 레지스트리에 있는 특정 완성 문자를 사용할 수
없도록 설정하려면 올바른 제어 문자가 아닌
공백(0x20) 값을 사용하십시오.
두 개의 제어 문자 중에서 하나를 입력할 때 이름 완성이
실행됩니다. 완성 기능은 일치하는 경로의 목록을 만들지 않았거나
또는 아무 경로가 없는 경우, 와일드카드 문자를 덧붙이는 커서의
왼쪽에 경로 문자열을 위치시킵니다. 그리고 일치하는 첫 번째
경로를 표시합니다. 일치하는 경로가 없으면 경고음을 내고 화면에
표시합니다. 이후에도 같은 제어 문자를 반복해서 누르면
일치하는 경로의 목록 전체를 순환합니다. 제어 문자와 함께
<Shift> 키를 누르면 목록을 반대로 작업합니다. 해당 행을 편집하고
제어 문자를 다시 누르면 저장된 일치하는 경로 목록이 삭제되고
새로운 목록을 만듭니다. 파일과 디렉터리 이름 완성 작업 간에도
동일합니다. 두 개의 제어 문자 사이에 유일하게 다른 점은
디렉터리 완성 문자는 디렉터리 이름과 일치하는 반면
파일 완성 문자는 파일과 디렉터리 이름 양 쪽 모두와 일치한다는
것입니다. 파일 완성이 기본 제공 디렉터리 명령어(CD, MD, RD) 중
어떤 명령어에 사용되면 디렉터리 완성이 실행됩니다.
완성 코드는 공백이 있거나 일치하는 경로의 주위에 따옴표가 있는
특수 문자를 갖는 파일 이름과 올바르게 작동합니다.
또한 백업을 하는 경우, 행에서 완성 기능을 실행하십시오.
완성이 실행된 지점의 커서 오른편에 있는 문자열은 제거됩니다.
보통 scp 등으로 명령어 라인에서 간단하게 복사하는데
방화벽이나 관리자가 scp 명령어를 막아서 못쓸 경우
lftp 로 간단하게 옮길 수 있습니다.
..
lftp 는 옛날 ncftp 를 기능적으로 대체하는 ftp 클라이언트 인데
최근 리눅스 배포판에는 ncftp 가 빠지고 lftp 가 들어가 있습니다.
[[ 사용법 ]]
## 파일 가져올 때 : home.co.kr 서버의 nonots 계정에 있는 *.tgz 파일들을
내 컴퓨터로 가져올 때
lftp home.co.kr -u nonots,mypwd -e "mget *.tgz;exit"
## 여러파일 업로드 할 때 : home.co.kr 서버의 nonots 계정으로 *.log 파일들을
업로드 할때
lftp home.co.kr -u nonots,mypwd -e "mput ./*.log;exit"
lftp home4.co.kr -u nonots,mypwd -e "put ./aaa.tgz;exit"
## 방화벽 등으로 패시브 모드 전환 필요할 때 ( set ftp:passive-mode 0 혹은 1 )
lftp home7.co.kr -u nonots,mypwd -e "set ftp:passive-mode 0;put ./aaa.tgz;exit"
리눅스에서 흔히 볼수 있는 [guest@zgd home]$ 식의 프롬프트를 이용하고 싶다면싶다면
profile 파일을 수정해줘야 합니다.
profile 파일을 이해하고 프롬프트 설정 부분만 찾아서찾아서 변경해주면 참 좋겠으나
저처럼 초보인 경우엔 단순한 쉘스크립트도 복잡해보입니다.
그래서 마지막 줄에 추가하는 식으로 설명 해놨습니다.
일단일단 자신의 홈디랙토리에 .bash_profile 파일이 있나 확인해봅니다.
없다면,
cp /etc/profile ~/.bash_profile
하시고,하시고,
복사된 .bash_profile 제일 마지막 줄에 아래의 코드를 입력하면 흔히흔히 보던 프롬프트 모양으로 바뀔 것입니다.
export PS1='[\u@\h \W]\$ '
export PS1='[\u@\h \W]\$ '
[master@nox ~]$
덧 , 새로운 환경변수에 적용되기 위해서는 재접속 하셔야 합니다.
Cygwin 기본설정 상태에서는 한글입출력이 불가능 합니다.
몇가지 환경설정을 해줘야 한글한글 입출력이 가능해 집니다.
자신의 홈 디렉토리의
.inputrc 파일을 생성하여 다음의다음의 내용을 추가하여 줍니다.
set convert-meta off
set output-meta on
마찬가지로 홈 디렉토리의
.bashrc.bashrc 파일을 생성하여 다음의 내용을 추가하여 줍니다.
alias l.='ls -dl .[a-zA-Z]*'
alias ll='ls -al'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
마지막으로마지막으로 .bash_profile 맨 마지막에
source /etc/bash.bashrc
fi
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
를 추가해줍니다.
wget 사용법 2
1. wget ?
코맨드 라인에서 파일 다운로드를 쉽게 할 수 있는 유틸리티이다. 요즘의 대부분의 리눅스 배포판에는 기본적으로 설치되어 있다.
2. Windows 버전의 wget
* win32 에서 사용가능한 바이너리도 존재한다. 여기를 참조.
- 위의 바이너리를 다운로드하고 윈도우 환경변수에서 PATH에 잡혀 있는 폴더로 복사해 둔다.
- "어떻게 윈도우에서 PATH를 잡나요?" 라고 생각하시는 분이라면 여기를 참조할 것.
- "PATH가 뭐지요?" 라고 생각하는 분이라면 걍 C:Windows 폴더로 복사한다. -.-;;;
3. 기본적인 사용법
- PATH가 걸린 상태에서 '명령 프롬프트' 를 부르고 'wget' 을 입력한다.
* 보다 명령 프롬프트를 쉽게 사용하려면 여기를 참조.
- "wget --help" 라고 하면 사용할 수 있는 옵션이 출력된다.
4. 중요한 옵션 및 사용예
- r : 지정된 디렉토리의 하위 디렉토리의 내용을 몽땅 다운로드한다.
사용예 : wget -r ftp://ftp.ncbi.nlm.nih.gov/blast/db/
설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/blast/db/ 의 디렉토리 구조를 유지한 채로 모든 파일을 불러온다.
- nd : 디렉토리를 만들지 않는다. 계층적으로 나열된 웹 사이트의 디렉토리의 내용을 한 디렉토리로 불러올 때 편리하다. -r 옵션과 같이 사용하면 매우 유용하다.
사용예 : wget -nd -r ftp://ftp.ncbi.nlm.nih.gov/blast/db/
설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/blast/db/ 내의 내용물을 현재 폴더에 몽땅 다운로드받는다.
-A, --accept=: 지정된 확장자의 파일만을 받아온다.
사용예 : wget -nd -r --accept=fna ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria/
설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 에서 확장자가 .fna 인 파일만을 받아서 현재 디렉토리에 저장한다. (물론 -nd 옵션을 빼면 폴더 구조가 그대로 유지된다)
-R, --reject=: 지정된 확장자의 파일만을 빼고 받아온다.
사용예 : wget -nd -r --accept=fna ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria/
설명 : 이렇게 하면 ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 에서 확장자가 .fna 인 파일만 빼고 받아서 현재 디렉토리에 저장한다.
-l , --level= : -r 옵션, 즉 하위 디렉토리 받아오기를 사용하였을 때 다운로드받을 최대 단계를 지정할 때 사용한다.
사용예 : wget -nd -r --accept=fna --level=3 ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria/
설명 : ftp://ftp.ncbi.nlm.nih.gov/genomes/Bacteria 에서 확장자가 .fna 인 파일만 빼고 받고 3단계까지 거슬러 올라서 다운로드를 수행한다.
-N : 현재 다운로드 받을 위치에 있는 파일이 현재 내 하드에 있는 파일보다 새로운 파일일때만 다운로드를 수행한다
-m : 미러 명령. 즉, 특정한 웹사이트의 내용을 그대로 폴더 구조채 긁어오되, 새로 업데이트한 내용만을 다운받고 싶을 때 사용한다.
ftp id, password 지정 : wget ftp://id:password@website
이런 식으로 id와 password를 지정하면 된다
이 정도면 많이 사용하는 옵션에 대해서는 설명했을 것이다. 기타 명령어에 대해서는 wget --help 를 입력하면 자세한 설명이 나와 있다.
5. 기타
- 쉘 스크립트나 배치 파일을 이용하여 자동화하면 매우 편리하다.
가령 유닉스 계열이라면
#!/bin/bash
wget -nd -r ftp://id:password@website/$1/
.
.
.
과 같은 식으로 간단한 쉘 스크립트를 작성하여 적당한 이름으로 저장한 후, Path가 걸린 위치에 넣고 실행 권한 (chmod +x <파일이름>) 을 주면 매우 편리하다.
윈도우라면
echo off
wget -nd -r ftp://id:password@website/%1/
.
.
.
과 같은 식으로 배치 파일을 만들고 *.bat 으로 저장한다.
⑴ 배치파일이란?
자주 사용되는 일련의 명령들을 하나의 그룹으로 묶은 후 배치파일명만 입력하면 여러 명령이 한번에 수행되도록 한 파일로, 일괄처리파일이라고도 함
⑵ 배치파일 작성
'COPY CON 파일명'을 이용하거나 각종 에디터(Editor) 또는 워드프로세서를 통해 작성
배치파일을 확장자 : BAT
배치파일에서 사용 가능한 명령 : 내부 및 외부 명령어, 배치 전용 명령 등
10개 이상의 명령을 실행시키기 위해 %0~%9까지 10개의 파라미터를 사용
일괄처리 파일의 실행 : 파일명을 입력한 후 Enter
(예) 다음과정을 수행하는 배치파일 작성
화면을 삭제
파일 현재 디렉토리 목록을 확인
A 드라이브를 검사
A 드라이브 디스크 복사
⑶ AUTOEXEC.BAT
배치파일의 특수한 경우로 컴퓨터가 부팅될 때 자동으로 실행되는 파일을 말하며, 주로 컴퓨터를 사용할 때 매번 설정하는 초기 명령 등을 기입함
자동실행 배치파일에는 일반 배치파일에서 사용하는 각종 명령어(내부/외부 명령어, 배치파일 전용 명령어)를 모두 사용할 수 있음
AUTOEXEC.BAT 파일은 루트 디렉토리에 존재해야 부팅시 정해진 처리를 하게 됨
⑷ 배치 전용 명령
ECHO ON : 명령어를 화면에 표시
ECHO OFF : 명령어를 화면에 표시하지 않음
GOTO : 특정 레이블로 분기하고자 할 경우 사용
IF : 조건에 따른 수행을 하고자 할 때 사용
PAUSE : 배치파일의 수행을 일시 정지
Shift : 가상의 파라미터를 이동
FOR : 실행을 반복
CALL : 다른 배치 파일 호출
※ ECHO 명령 사용시 ECHO OFF라는 명령조차 나타나는 것을 막기 위해서는 ECHO 명령 앞에 '@' 기호를 붙여주면 됨
샘플파일 aaa.bat
-----------------
@echo
cd d:\temp\
del *.*;
del /Q *.*; <--- 묻지 않고 삭제하기.
------------------
@echo
cd C:\kkk
REM call rexpis_stop.bat <----- 주석 , 설명
cd C:\kkk\data\autoretry
del /Q *.*;
rm -rf ./ <--- 해당 폴더 하위의 폴더를 삭제 , 에러무시해도 됨.
del /Q *.*;
cd C:\XMapper\data\xmldoc\mapin
sqlplus a/a@ORCL <-- 바로 sqlplus 로 접속 ( @a.txt a.txt 파일을 열어서 바로 스크립트 실행 )
copy aaa.txt c:\kkk\bbb.txt
cd C:\kkk
REM call abc.bat
3 사용법사용방법은 간단합니다.
# wget -h
하면 간략한 설명을 볼 수 있고,
# man wget
하면 좀더 많은 설명을 볼 수 있습니다. 먼저, 예를 들어서 홈페이지 youngsam.kr을 복사해 온다고 합시다. 그러면 ppp 접속이 되어 있는 상태에서
# wget http://youngsam.net/index.html
이라고 명령하면 됩니다. 'http://'는 생략해도 됩니다. 'index.html' 부분도 생략하면 알아서 먼저 'index.html' 또는 'index.htm'을 찾으므로
# wget youngsam.net/
라고 해도 됩니다. 그러면 명령을 내린 현재 디렉토리에 'index.html'을 복사합니다. 자, 그러면 index.html에 링크되어 있는 것까지 찾아오려면 어떻게 할까요. '-r' 옵션을 사용합니다. 즉,
# wget -r youngsam.net/
이렇게 사용합니다. 'r'은 '재귀적'을 의미하는 'recursive'의 줄임이겠지요. 디렉토리 구조와 파일을 그대로 복사해 옵니다.
재귀적 탐색의 깊이레벨은 기본값이 '5'로 되어있습니다. '-l depth' 옵션을 사용하면 바꿀 수 있습니다. 그러니까 기본값은 '-l 5'란 이야기겠죠. 이 레벨이 증가함에 따라 복사해오는 파일은 지수함수적으로 증가하게 됩니다.
만약 홈페이지 전체가 아니라 특정 페이지와 링크되어 있는 것만 받아오려면 어떻게 할까요. 예를 들어
# wget -r youngsam.net/doc/lecture/lecture.html
이라고 하면 'lecture.html'과 이것에 링크된 파일들을 복사해 오게 됩니다. 이 과정에서 링크된 파일 중 상위 디렉토리에 있는 것도 있는데 이것들은 빼고 원하는 파일이 있는 디렉토리와 그 이하에서만 받아 오려면
# wget -r -np youngsam.net/doc/lecture/lecture.html
이렇게 '-np' 옵션을 사용합니다. 'np'는 'no-parent'를 의미합니다.
자, 홈페이지에서 그림이나 오디오파일 등은 빼고 HTML 문서만 복사해오려고 한다면
# wget -r -np -A html,htm youngsam.net/
처럼 '-A' 옵션을 사용합니다. 'A'는 'accept'를 의미합니다. 위의 예처럼 원하는 파일의 형식을 나열하면 됩니다. 반대로 일부 파일을 제외하고 싶으면 '-R' 옵션을 사용합니다. 'R'은 'reject'를 의미합니다. 예를 들어
# wget -r -R gif,jpg,jpeg youngsam.net/
라고 하면 파일의 뒷부분의 문자열이 'gif','jpg','jpeg'인 파일들은 제외하고 나머지 파일들만 불러옵니다.
뭐, 이정도만 하면 충분히 잘 사용할 수 있습니다. 그러나 그외 몇가지만 더 설명드리겠습니다.
'-L' 옵션을 사용하면 상대주소를 이용한 링크들만 불러 옵니다. 다른 호스트에 있는 자료는 당연히 불러오지 않습니다. 그런데 대부분의 HTML 내의 링크는 상대주소를 이용할 것으로 생각되기 때문에 (제 생각에) 크게 중요하지는 않을 것 같습니다. 'L'은 'reLative'를 의미합니다. 아래의 예처럼 사용할 수 있겠죠.
# wget -r -L youngsam.net/
만약 다른 호스트의 자료까지 재귀적 탐색의 대상에 넣으려면 '-H' 옵션을 씁니다. 이는 'span-hosts'를 의미합니다.
wget을 실행시켜 보시면 메세지가 장황하게 나옵니다. 메세지를 전혀 나오지 않게 하려면 'quiet'를 의미하는 '-q' 옵션을, 쬐끔만 나오게 하려면 'non-verbose'를 의미하는 '-nv' 옵션을 사용하십시오.
wget은 파일을 불러올 때 컴퓨터 내에 같은 이름의 파일이 존재하면 기존의 파일은 그대로 두고 기존의 이름의 끝에 'original.file.1', 'original.file.2', 이런 식으로 숫자를 붙인 이름으로 복사합니다. 만약, 같은 이름의 파일이 있을 경우 복사해 오지 않게 하려면 'not-clobber'를 의미하는 '-nc' 옵션을 사용하면 됩니다.
매번 같은 옵션을 커맨드라인에서 사용하기는 번거롭겠죠? 자신의 홈디렉토리에다 '.wgetrc'라는 파일을 만들고 필요한 옵션들을 기록하면 매번 옵션을 주지 않아도 됩니다. 저의 것을 예로 들겠습니다.
1 accept = htm,html
2 #reject =
3 recursive = on
4 #reclevel = 5
5 no_parent = on
6 #relative_only = on
7 #verbose = on/off
8 span_hosts = on/off
9 #noclobber = on/off
10 #quiet = on/off
앞의 번호는 편의를 위하여 붙여놓은 것입니다. '#'로 시작하는 행은 주석이므로 무시됩니다. 필요시 '#'를 제거하면 됩니다. '변수 = 값'으로 표현되며 대부분 원하는 값은 on 또는 off가 되고 일부분만 숫자 또는 문자열을 값으로 주게 됩니다. 각 행에 대해 간략히 설명합니다.
1: 원하는 파일의 형식을 나열
2: 배제하기를 원하는 파일의 형식을 나열
3: 재귀적 탐색 여부
4: 재귀적 탐색의 깊이레벨
5: 상위 디렉토리의 파일 배제의 여부
6: 상대주소만 포함시킬 것인지의 여부
7: 자세한 설명을 표시할 것인지의 여부
8: 다른 호스트도 탐색할 것인지의 여부
9: 같은 이름의 파일을 복사해 오지 않을 것인지의 여부
10: 메세지를 전혀 보내지 않을 것인지의 여부
4 discussion위에서 설명한 옵션을 잘 활용하면 홈페이지에 갱신되는 내용을 웹 브라우저로 접근하지 않고서도 가져올 수 있다. 예를 들어, 만약 내가 잘 가는 무료 porn 사이트에 링크된 url에 올려져 있는 동영상을 보고 싶다고 하자. 다음과 같이 wget 명령을 사용한다.
# wget -A mpg,mpeg,avi,asf -r -H -l 2 -nd -t 1 http://url.you.like
-A, -r, -H은 위에서 설명했고, 설명이 안된 옵션을 살펴보면,
-l 2 : Recursive depth. 재귀 검색의 깊이 레벨을 지정해준다. 2로 지정해주면, 메인 페이지에서 url을 따라가고 그 url에 링크된 비디오 파일을 가져오도록 한다.
-nd : No directories. 로칼에 다운받을 때 디렉토리를 생성하지 않고 모든 파일을 같은 디렉토리 안에 넣는다.
-t 1 : Retries. link된 url로 서버를 찾지 못할 때 retry 횟수를 지정한다. 여기서는 1번 시도를 하도록 지정했다.
* test.txt 등의 아무 "텍스트 문서"를 하나 선택한 후, 그 파일을 마우스 우측 버튼으로 클릭하고
연결 프로그램 > 프로그램 선택
을 선택
* "연결 프로그램"이라는 대화상자가 나옴. 목록에서, 편집기로 사용할 프로그램을 고르거나, 또는 "찾아보기" 버튼을 눌러서 편집기의 실행파일을 직접 지정해 줍니다.
Gvim의 경로와 실행파일명은 대체로 "C:\Program Files\Vim\gvim.exe" 이렇고
울트에디트는 대체로 "C:\Program Files\IDM Computer Solutions\UltraEdit\uedit32.exe" 이렇습니다. 버전에 따라 조금 다릅니다.
* 대화상자에서 이 종류의 파일을 열 때 항상 선택된 프로그램 사용 이라는 곳에 체크해 줍니다. 그런 후 "확인" 버튼을 누릅니다.
* 이제 .txt 확장자 의 파일을 클릭하면, 메모장이 아닌 Gvim이나 울트라에디트가 실행될 것입니다. txt 확장자에 대한 "기본 편집기"가 된 것입니다.
예를 들어 .c 확장자의 C소스 파일을 Gvim에서 열려면, ".c" 라는 확장자의 파일을 선택하고 위의 작업을 해줍니다.
그런데 울트라에디트 내부에 있는 "파일 연결 기능"으로 txt 등의 특정 확장자와 울트라에디터를 연결해 주면 좀 복잡한 문제가 생기더군요. 파일 아이콘을 사용자 정의할 수 없다든지 하는... 그래서 위의 방법으로 지정하는 것이 좋습니다.
다음 배치 파일을 ".bak" 확장자에 연결해 두면, 이제 .bak 확장자의 어떤 파일 1개를 클릭하면 그 폴더의 모든 .bak 파일들이 삭제됩니다.
BAK 파일 자동 지우기 배치
배치파일명: bak.bat
(이 파일을 패스(Path) 가 걸린 폴더에 넣어두면 편리합니다.)
if exist *.bak del *.bak
type test.txt
이런 명령을 입력하면 test.txt 파일의 내용이 도스 화면에 출력됩니다. 또는
이렇게 뒤에 파이프(|)기호와 more 명령을 추가하면, 1페이지씩 나누어서 화면에 출력됩니다. 이때 키보드의 q (큐) 키를 누르면 읽다가 중간에서 중지할 수 있습니다. 파이프(|)기호란, 키보드의 Shift키를 누르면서 백슬래쉬(\) 기호를 누르면 입력되는 수직선 문자입니다.
그리고
edit test.txt
라는 명령으로는, 텍스트 파일을 도스에서 편집할 수 있는 도스용 편집기(에디터)가 실행됩니다.
아무튼 PKZIP 에서 파일을 압축할 때, "하위 디렉토리까지" 즉 "하위 폴더까지 압축"하려면 "-rp" 라는 옵션을 붙입니다. "마이너스 + 소문자R + 소문자P" 입니다. 예를 들어
이렇게 입력하면, 현재 디렉토리(폴더)에 있는 파일들과, 하위 디렉토리까지 모두 TEST.ZIP 이라는 파일명으로 압축됩니다.
pkunzip: 디렉터리까지 압축 풀기 명령
주의!:
zip 압축을 풀 때에는 pkunzip 명령으로 푸는데, 이때 반드시 -d 옵션을 붙여야 합니다. -d 옵션이 없으면 풀 때, 원래의 폴더를 다시 생성해 주지 않고 현재 디렉토리에 모든 파일들을 한꺼번에 다 풀어버립니다.
지정한 파일 하나만 삭제하는 명령
예를 들어 0.obj 라는 파일을 지우려면 위와 같이 합니다.
지정한 확장자의 파일들만 지우기 명령
.bak 확장자를 가진 모든 파일을 한꺼번에 지웁니다.
읽기전용 파일 삭제
del /f 0.obj
이런 식으로 /f 옵션을 붙여야 합니다. 그렇지 않으면 액세스가 거부되었습니다.라고 나오며 지워지지 않습니다.
숨김 속성 파일 (히든파일) 삭제
del /a 0.obj
이렇게 /a 옵션을 붙입니다. 그렇지 않으면 D:\Y\0.obj을(를) 찾을 수 없습니다.라는 에러가 나고 지워지지 않습니다.
현재 디렉토리(폴더)의 모든 파일 한꺼번에 지우는 명령
현재 디렉토리의 모든 파일을 지우려면 위와 같이 합니다. 위험한 작업이기에 도스가 우선 D:\Y\*, 계속하시겠습니까(Y/N)? 이렇게 물어봅니다. Y 키를 누르면 파일이 모두 지워집니다.
참고로 마침표(.)는 현재 디렉토리를 의미합니다.
하위 디렉토리(폴더) 지우기 명령
파일이 아닌 디렉토리를 지우려면 rmdir 이라는 명령어를 사용합니다.
현재 디렉토리 밑의 "000" 이라는 이름의 디렉토리를 위와 같은 방법으로 지울 수 있습니다.
다만 그 디렉토리 안에 파일이 들어 있으면 디렉터리가 비어 있지 않습니다. 이런 에러가 나고 지워지지 않습니다.
이때는
rmdir /s 000
이렇게 /s 옵션을 붙이면, 디렉토리가 비어 있지 않더라도 지워집니다. 굉장히 위험한 옵션이니 주의가 필요합니다.
추가 사항:
윈도 탐색기와 달리, 명령프롬프트(도스창)에서 파일을 지우면, 휴지통으로 들어가지 않고 곧바로 지워지기에 복구가 힘들거나 불가능합니다.
BAT File에서, 폴더 생성하는 법
예제 배치파일 명: example.bat
:: 현재 디렉토리(폴더)에 AAA 라는 하위 디렉토리 생성하기
md AAA
:: ㅠㅠ 라는 폴더를 하나 만들고 그 속에
:: 또 ㅎㅎ 라는 폴더를 만들고, ㅎㅎ 라는 폴더 속에
:: ㅋㅋ 라는 폴더를 만드는 것입니다.
:: 예를 들어 현재 디렉토리가 D:\Z 라면
:: D:\Z\ㅠㅠ\ㅎㅎ\ㅋㅋ
:: 이런 중첩된 폴더들이 한꺼번에 생성됩니다.
:: 다만 윈도우98이나 MS-DOS에서는 이런 한꺼번에 생성하기가
:: 되지 않을 것입니다.
md ㅠㅠ\ㅎㅎ\ㅋㅋ
배치파일에서 현재 시간이나 현재 날짜를 화면에 출력하려면 DATE 와 TIME 이라는 기본 환경 변수를 사용하면 됩니다, 그 환경변수 속에 현재 날짜와 현재 시각이 실시간으로 항상 들어가 있습니다.
예를 들어
echo %date%
이렇게 하면 오늘 날짜가 "금 2007-11-16" 이런 식으로 화면에 출력됩니다.
echo %time%
이렇게 하면 현재 시각이 "14:18:03.95" 이렇게 24시간제로 표시됩니다.
echo %date% %time%
이렇게 하면 "금 2007-11-16 14:18:52.62" 이렇게 날짜와 시간이 합쳐져서 한꺼번에 출력됩니다.
ren test.txt test.doc
위와 같이 하면 이제, 현재 디렉토리(폴더)에 있는 test.txt 파일이 test.doc 으로 확장자만 변경되었을 것입니다.
만약, 모든 .txt 확장자 파일들을 "한꺼번에" .doc 확장자로 변경하려면
ren *.txt *.doc
이렇게 하면 됩니다. 파일명 부분을 *(별표) 라는 와일드카드로 대체한 것입니다. 배치파일 안에서도 위의 명령들을 사용할 수 있습니다.
그런데 도스창에서 실행한 명령의 결과는 취소가 되지 않습니다. 그래서 오타 등을 좀 주의를 해야 합니다.
반면, 윈도우 탐색기에서 F2키를 눌러 파일명이나 확장자를 변경했다면, Ctrl+Z키로 쉽게 취소할 수 있습니다.
백업을 한 후에는 A 라는 "저장 속성"을 OFF 시켜 주는 것이 원칙입니다. 그래야, 백업 이후로 수정이 되었는지 알 수 있습니다. 예를 들어 test.txt 라는 파일이 있을 때, 백업 프로그램이 이 파일을 CD-ROM 등에 백업한 후, A속성을 제거합니다. 그런 후 사용자가 메모장 등에서 test.txt 라는 파일을 다시 편집하고 저장하면 그 순간 A 속성이 다시 부여됩니다. test.txt 라는 파일이 갱신되었다는 사실을 알 수 있게 해 줍니다.
아무튼 하드에서, A속성이 있는 즉 갱신된 파일만 찾으려면, dir 명령에 옵션을 붙여 주면 됩니다. attrib 명령은 파일의 속성을 보거나 수정하는 명령어인데, 특정 속성의 파일만 찾을 수 있는 기능은 없더군요.
dir /a:a
이렇게 하면 A속성이 있는, 즉 내용이 갱신된 파일만 찾아서 목록을 보여 줍니다.
dir /a:a /s /b
이 경우 /s 옵션은 하위디렉토리까지 모두 찾으라는 뜻이고, /b 는 간략히 출력하라는 뜻입니다.
다음은 도스에서 attrib 명령을 실행하고, A속성의 갱신파일만 찾는 예제 화면입니다.
A D:\Z\example.html
A H D:\Z\새 ACDSee BMP Image.bmp
D:\Z\새 WinZip File.ZIP
D:\Z\새 텍스트 문서 (2).txt
A D:\Z\새 텍스트 문서.txt
D:\Z>
D:\Z>
D:\Z>
D:\Z>dir /a:a /s /b
D:\Z\example.html
D:\Z\새 ACDSee BMP Image.bmp
D:\Z\새 텍스트 문서.txt
D:\Z\새 폴더\새 ACDSee PSD Image.psd
D:\Z>
"새 WinZip File.ZIP"과 "새 텍스트 문서 (2).txt" 파일에는 A속성이 없기 때문에, dir에서는 나오지 않았습니다. 즉 dir이, A속성이 있는 갱신된 파일만 찾아서 보여주고 있습니다.
아래 예제 소스는, "문자열 출력 작업"이라는 글자들을 도스창 화면에 출력시킨 후 대기 상태로 들어가는 일을 무한 반복합니다.
무한 반복 시키기
배치 파일명: example.bat
:REDO
echo 문자열 출력 작업
pause
goto REDO
위의 파일을 도스창을 열고 실행시키면, 다음 화면처럼 REDO... 사이의 부분이 무한 반복으로 실행됩니다. 키보드의 CTRL+C키를 눌러야만 중지됩니다.
(C) Copyright 1985-2001 Microsoft Corp.
D:\Z>example.bat
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
일괄 작업을 끝내시겠습니까 (Y/N)? y
D:\Z>
"계속하려면 아무 키나 누르십시오 . . ."라는 부분이 나오지 않고, 무작정 반복시키려면, 예제 소스에서 pause 라는 중지문을 삭제하면 됩니다.
만약 dir 이라는 명령어를 방금 전에 실행했다면, 다시 dir 이라고 칠 필요 없이,
키보드의 "위쪽 화살표 키"를 한 번 눌러 주면,
dir 이라는 명령어가 다시 프롬프트에 나타납니다. 이때 Enter키만 치면 dir 명령이 다시 실행됩니다.
상하 화살표키를 여러 번 눌러보면, 한참 전에 입력했던 다른 명령어들도 나올 것입니다.
javac Foo.java && java Foo 53 451451 515 353
특히 이런 긴 명령어를 쳤다면, 다시 입력하기 힘들 것입니다. 이때는 히스토리 기능이 아주 큰 도움이 됩니다.
배치 파일(Batch File)로
매일 일정한 명령어들을 반복 사용한다면, 그 명령어들을 배치 파일로 만들어 두면 편리합니다.
예를 들어,
D:드라이브의 Z폴더의 모든 파일을
D:드라이브의 X폴더로 복사하고
X폴더의 내용을 dir 명령으로 확인하는 작업을 매일 한다면
메모장으로, 다음과 같은 배치 파일을 만들어 두고, 이제 도스창에서 foo 라고만 치면, 복사 작업이 자동화됩니다.
파일명: foo.bat
copy d:\z\*.* d:\x\*.*
dir d:\x
Vim, Vi, GVim 에디터, 행번호, 줄번호 표시 명령어, 줄 번호 행 번호 보는 명령; View Line Number
프로그래밍/CYGWIN&DOS | 2009/05/12 23:52현재 문서를 편집중이라면, Esc키를 누르고 다음과 같이 입력합니다:
:se nu
또는
:set number
라고 하면, 각 행의 좌측에 행번호가 붙습니다.
행번호를 없애려면 아래와 같이 합니다.
:se nonu
또는
:set nonumber
이 명령어로 나타나는 줄번호는 눈에 보이기만 할 뿐이지, 파일 내용에는 저장되지 않습니다.
Vim, Vi, GVim 에디터, 행번호, 줄번호 표시 명령어, 줄 번호 행 번호 보는 명령; View Line Number
프로그래밍/CYGWIN&DOS | 2009/05/12 23:52현재 문서를 편집중이라면, Esc키를 누르고 다음과 같이 입력합니다:
:se nu
또는
:set number
라고 하면, 각 행의 좌측에 행번호가 붙습니다.
행번호를 없애려면 아래와 같이 합니다.
:se nonu
또는
:set nonumber
이 명령어로 나타나는 줄번호는 눈에 보이기만 할 뿐이지, 파일 내용에는 저장되지 않습니다.
디렉토리 만들기 명령
mkdir 이라는 명령으로 디렉토리(폴더)를 만들 수 있습니다.
새로 만들어진 디렉토리에 들어가 보려면
cd z
이렇게 합니다.
pwd
라는 명령을 쳐보면 이렇게 출력될 것입니다.
/root/z
(자신의 ID가 root 일 때) 이렇게 나오겠지요.
만약 mkdir z 명령을 준 장소(디렉토리)가 최상위 디렉토리 (/) 라면
/z
이렇게 나옵니다.
또는 디렉토리를 만들 때
mkdir /z
이렇게 하면, 현재 디렉토리가 어디든 상관없이 항상 최상위 루트 바로 밑에 z 폴더가 만들어집니다.
아무튼 방금 만들어진 z 디렉토리에서 다시 빠져나오려면
cd ..
이렇게 합니다.
디렉토리 지우기
rmdir 이라는 명령으로 현재 디렉토리 밑에 있는 하위 디렉토리를 지울 수 있습니다.
그런데 z 디렉토리가 비어 있지 않고 안에 무슨 파일이 들어 있다면, 지워지지 않고 Directory not empty (디렉토리가 비어 있지 않습니다) 라는 에러가 납니다. 이때는
cd z
이렇게 z 디렉토리 안에 다시 들어가서
rm 명령으로 파일을 지우기 전에는, pwd 명령으로 현재 디렉토리 주소가 정확한지 확인해야 합니다. 그렇지 않으면 엉뚱한 디렉토리의 파일을 모두 지워서 낭패를 보는 경우가 있습니다.
gcc 설치법은 다음과 같습니다.
시그윈 셋업 파일인 setup.exe 를 실행합니다.
"다음" 버튼을 계속 누르면, "Select Packages (패키지 선택)"라는 메뉴가 나옵니다.
대화상자의 제목줄을 더블클릭해서 "전체 화면"으로 확대합니다. 이렇게 해야 쉽게 선택할 수 있습니다.
패키지 선택 메뉴의 목록에 Devel 이라는 카테고리 즉 "개발툴" 항목이 있는데, [+] 기호를 클릭해서 항목을 펼치면,
gcc-core: C Compiler 라는 곳이 있습니다. 그 바로 왼쪽의 "Skip (생략)"이라는 곳을 클릭하면, gcc 현재 버전이 3.4.4-1 등으로 표시됩니다. 이렇게 패키지 버전이 나타나면, 그 패키지가 설치된다는 뜻입니다. Skip 이라고 된 패키지는 설치에서 제외된다는 의미입니다.
이 상태에서 "다음" 버튼을 누르면 gcc 가 인스톨됩니다.
이제 시그윈의 bash 셀이든, 윈도의 명령 프롬프트 에서든,
gcc 라고 하면 gcc 가 실행됩니다.
gcc 도움말 화면:
Usage: gcc [options] file...
Options:
-pass-exit-codes Exit with highest error code from a phase
--help Display this information
--target-help Display target specific command line options
(Use '-v --help' to display command line options of sub-processes)
-dumpspecs Display all of the built in spec strings
-dumpversion Display the version of the compiler
-dumpmachine Display the compiler's target processor
-print-search-dirs Display the directories in the compiler's search path
-print-libgcc-file-name Display the name of the compiler's companion library
-print-file-name=<lib> Display the full path to library <lib>
-print-prog-name=<prog> Display the full path to compiler component <prog>
-print-multi-directory Display the root directory for versions of libgcc
-print-multi-lib Display the mapping between command line options and
multiple library search directories
-print-multi-os-directory Display the relative path to OS libraries
-Wa,<options> Pass comma-separated <options> on to the assembler
-Wp,<options> Pass comma-separated <options> on to the preprocessor
-Wl,<options> Pass comma-separated <options> on to the linker
-Xassembler <arg> Pass <arg> on to the assembler
-Xpreprocessor <arg> Pass <arg> on to the preprocessor
-Xlinker <arg> Pass <arg> on to the linker
-save-temps Do not delete intermediate files
-pipe Use pipes rather than intermediate files
-time Time the execution of each subprocess
-specs=<file> Override built-in specs with the contents of <file>
-std=<standard> Assume that the input sources are for <standard>
-B <directory> Add <directory> to the compiler's search paths
-b <machine> Run gcc for target <machine>, if installed
-V <version> Run gcc version number <version>, if installed
-v Display the programs invoked by the compiler
-### Like -v but options quoted and commands not executed
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
-o <file> Place the output into <file>
-x <language> Specify the language of the following input files
Permissible languages include: c c++ assembler none
'none' means revert to the default behavior of
guessing the language based on the file's extension
Options starting with -g, -f, -m, -O, -W, or --param are automatically
passed on to the various sub-processes invoked by gcc. In order to pass
other options on to these processes the -W<letter> options must be used.
For bug reporting instructions, please see:
<URL:http://gcc.gnu.org/bugs.html>.
D:\Z>
그리고 간단한 소스를 컴파일하여, gcc 가 잘 설치되었는지 테스트해 보아야 합니다.
which ls
라고 하면
/usr/bin/ls
이렇게 결과가 나옵니다. ls 라는 파일이 /usr/bin/ 디렉토리(폴더) 밑에 있다는 뜻입니다.
이것은 일반적인 bash 셀의 경우이고,
C shell 등에서는 whereis 또는 whence 라는 명령어를 사용합니다.
시그윈(Cygwin)에서는
/cygdrive/c/WINNT/system32/notepad.exe
D:\Z>
이렇게 윈도우용 파일의 위치까지 알아낼 수 있습니다. 아주 편리합니다.
재지향(Redirection)이란? / 파이핑(Piping)이란? - [도스창/명령 프롬프트 커맨드 라인/리눅스 셀]
프로그래밍/CYGWIN&DOS | 2009/05/12 23:40한편, 명령 프롬프트창 즉 도스창에서는, 프로그램 간에 데이터를 이동시킬 때 재지향이나 파이핑을 사용합니다. 용어는 어렵지만, 실은 굉장히 쉽고 실용적인 것입니다.
재지향(Redirection)에 대해
데이터 입출력의 방향을 바꾸어 주는 것입니다.
가령 dir 이라는 명령을 치면
D 드라이브의 볼륨: Foo
볼륨 일련 번호: 1273-A5D7
D:\Z 디렉터리
2006-07-06 07:18p <DIR> .
2006-07-06 07:18p <DIR> ..
2006-07-03 10:33a 0 0.htm
2006-07-06 07:17p 58 file.wav
2006-07-06 07:17p 10,752 Microsoft Word 문서.doc
2006-07-06 07:18p 41,306 PSD Image.psd
2006-07-06 07:18p 62,166 Scene.max
2006-07-06 07:18p 124,746 WinZip.zip
2006-07-06 07:17p 0 새 텍스트 문서.txt
7개 파일 239,028 바이트
2 디렉터리 54,910,869,504 바이트 남음
D:\Z>
이렇게 파일 목록이 명령 프롬프트 화면 즉 도스창에 나타납니다.
만약 dir > test.txt 라는 명령을 준다면, 화면에 아무것도 나타나지 않습니다. 그러면 화면 출력들은 어디로 간 것일까요? 바로 test.txt 라는 파일 속에 들어가 있습니다. 하드의 현재 디렉토리(폴더)에 test.txt 라는 파일이 생성되어 있을 것입니다. 그 파일을 메모장 등으로 열어 보면, 위의 dir 출력 화면과 똑같은 글자들이 고스란히 들어가 있을 것입니다.
> 기호는, 화면의 출력을 파일로 저장하라는 의미입니다. 즉 출력의 방향을, 화면이 아닌 특정 파일로 '재지향'하라는 뜻입니다. 즉 방향을 바꾸라는 의미입니다.
단, 이때 test.txt 라는 파일이 이미 하드에 있다면, 그 test.txt 라는 파일이 "덮어쓰기"가 되어, 원래의 내용이 영원히 사라져 버리므로 주의가 필요합니다.
파일뿐 아니라 장치(device)로도 데이터를 보낼 수 있습니다. 유닉스 계열의 OS에서는 하드웨어 장치도 하나의 파일로 취급하는데, 도스(DOS)도 유닉스에 바탕을 둔 운영체제이기에, 이것이 어느 정도 가능합니다.
dir > prn 이라고 하면 dir 의 화면 출력 결과가 프린터로 전송되고 곧바로 인쇄가 됩니다. (단, 윈도98까지는 이것이 되었는데, 윈도우2000이상에서는 안 먹히는 것 같습니다.) prn 이라는 것은 프린터를 가리키는 가상 파일입니다. 이론적으로만 존재할 뿐, 하드에서 보이지는 않습니다.
dir > nul 이라고 하면, 불필요한 화면 출력 결과를 보이지 않게 없애 버릴 수 있습니다. NUL 이라는 가상 장치는 "블랙홀" 같은 역할을 합니다.
지금까지 설명한 것은 Output Redirection (출력 재지향)입니다.
거꾸로도 가능합니다. 이것을 Input Redirection (입력 재지향) 이라고 합니다.
< 기호를 사용하면, 특정 파일의 내용을 어떤 프로그램의 입력으로서 사용할 수 있습니다.
sort < test.txt 라고 하면, test.txt 의 내용을 sort 라는 명령어 속에 집어 넣으라는 이야기가 됩니다. sort 는 문장의 각 행들을 ABCD순으로 정렬시키는 명령이기에, test.txt 의 내용이 정렬되어 화면에 출력됩니다.
sort < test.txt > test2.txt 라고 하면, 화면에 아무것도 나오지 않습니다. sort < test.txt 이것의 결과가 화면으로 나오지 않고, test2.txt 라는 파일 속에 저장되기 때문입니다.
단, Input Redirection (입력 재지향) 을 지원하는 명령어나 프로그램은 그리 많지 않습니다.
파이핑(Piping)에 대해
재지향은 명령어와 파일(혹은 장치)을 서로 엮는 것입니다.
반면 파이핑(Piping)은 복수의 명령어들을 서로 직접 결합시키는 것입니다.
파이핑에는 파이프(|) 라는 기호가 사용됩니다. 키보드의 플러스 기호 우측에 있는데, Shift키를 누르면서 백슬래쉬(\)기호를 누르면 "|"가 찍힙니다. 숫자 일(1)이나 알파벳 엘(l)로 혼동하지 않도록 주의해야 합니다.
dir | sort
이것은 dir 명령의 화면 출력 결과를 sort 라는 명령으로 직접 보내는 것입니다. 그 결과로, 파일 목록이 정렬되어 출력됩니다.
재지향이나 파이핑은 여러 번 중첩시킬 수도 있습니다.
Cygwin(시그윈)은 최소 설치만 해도 49메가가 넘기에 좀 부담스러운 면이 있더군요. grep 이나 diff 등의 명령어 한두 개를 쓰려고, Cygwin(시그윈)을 설치하는 것은 배보다 배꼽이 더 큰 경우였습니다.
"GnuWin32" 에서 리눅스/유닉스 툴을 윈도우용으로 컴파일하여 제공하고 있습니다. 물론 무료이고 오픈소스입니다. 인터넷에 보면 GnuWin32 말고도 이렇게 리눅스 툴을 윈도우용으로 포팅해 주는 곳이 많은데 GnuWin32 쪽이 가장 전문적이었습니다.
다운로드 방법
주소: http://gnuwin32.sourceforge.net/packages.html
파일 비교 명령인 diff 파일을 받는 것을 예로 듭니다:
우선 위의 주소의 목록에서 DiffUtils 라는 것을 클릭하면 다운받는 페이지가 나옵니다.
"Complete package, except sources (소스를 제외한, 패키지 전체)"의 Setup 을 클릭하고 Download 를 클릭하면, 전세계의 미러 사이트들이 나오고 "diffutils-2.8.7-1.exe" 등의 이름을 가진 설치 파일이 다운로드됩니다. 그런데 저는 이 방법보다는, 다음의 수동 설치를 권합니다.
Binaries 옆의 Zip 을 클릭합니다. 그러면 "diffutils-2.8.7-1-bin.zip" 식의 이름으로 압축된 파일이 다운로드됩니다. (버전에 따라서 파일명이 다름.) 이 파일 속에 있는 diff.exe 파일을 하드에 풀어 놓습니다. diff.exe 를 실행시키면 다음의 메시지가 나옵니다:
---------------------------
diff.exe - DLL 찾기 실패
---------------------------
DLL libintl3.dll을(를) 지정한 경로 D:\X;.;C:\WINNT\system32;C:\WINNT\system;C:\WINNT;에서 찾을 수 없습니다.
---------------------------
확인
---------------------------
diff.exe 가 libintl3.dll 이라는 라이브러리 파일을 필요로 한다는 의미입니다. 그러면 앞의 다운로드 페이지로 다시 돌아가서, Dependencies (종속 파일들) 옆에 있는 Zip 을 클릭하여 "diffutils-2.8.7-1-dep.zip" 이라는 파일을 받습니다.
"diffutils-2.8.7-1-dep.zip" 파일 속에서 "libintl3.dll" 파일을 꺼내서, diff.exe 가 있는 곳에 같이 풀어놓습니다.
이제 diff.exe 를 다시 실행시키면
---------------------------
diff.exe - DLL 찾기 실패
---------------------------
DLL libiconv2.dll을(를) 지정한 경로 D:\X;.;C:\WINNT\system32;C:\WINNT\system;C:\WINNT;에서 찾을 수 없습니다.
---------------------------
확인
---------------------------
이런 메시지가 나옵니다. 방금 받은 "diffutils-2.8.7-1-dep.zip" 파일 속에서 "libiconv2.dll" 파일도 꺼내서, diff.exe 가 있는 곳에 같이 풀어놓습니다.
이제 diff.exe 가 잘 실행이 될 것입니다.
diff.exe: missing operand after `diff.exe'
diff.exe: Try `diff.exe --help' for more information.
diff.exe --help 라고 하면 도움말이 나옵니다.
결론
다른 유틸리티들도 이런 식으로 받을 수 있습니다. 특히 CoreUtils 라는 것 속에는, 리눅스의 가장 기본적인 명령어들이 들어 있기에 꼭 받아보는 것이 좋습니다.
그런데 GnuWin32 에는 bash 셀이 없더군요. 그래서 bash 셀을 쓰기 위해서는 시그윈(Cygwin)을 설치할 수밖에 없었습니다.
우선 여러창 중에서 어떤 창의 크기를 조절할지 선택해야 합니다. Ctrl+ww 핫키를 눌러서 창을 점프하면서 특정 창을 선택합니다.
Ctrl+ww
위의 핫키는 Ctrl키를 누르면서 w 키를 누르고, 다시 w키를 누르는 것입니다.
창 사이즈 확대하기:
Ctrl+w+
즉, Ctrl키를 누르면서 소문자 w 키를 누른 후, 플러스 기호(+) 키를 누르면 "현재 창" 사이즈가 1줄 확대됩니다.
창 사이즈 축소하기:
Ctrl+w-
즉, Ctrl키를 누르면서 소문자 w 키를 누른 후, 마이너스 기호(-) 키를 누르면 "현재 창" 크기가 1줄 축소됩니다.
키보드 우측 키패드에 있는 플러스 마이너스 키를 누르는 것이 좋습니다.
요놈만 원하는 폴더에 압축을 풀어서
시스템 변수 에 Path 에 추가를 하시면 cmd 에서 바로 cygwin 명령어를 사용할수 있습니다.
개인적으로 인스톨 하는걸 안좋아해서 이렇게 올려 드립니다.
용량이 상당하네요.. 캬.
화면을 지워야 하긴 하겠는데.. 어떻게 하면 좋을까 하다 이곳저곳 찾아본결과..
리눅스 명령어로 실행파일을 찾는 방법중 한개가
which clear 이런식으로 치는것이다.
$ which clear
clear: Command not found.
결과는 없었다.;;
설치가 제대로 이뤄지지 않은것이였다.
ncurses package안에 있다는데.. 흠..
패키지를 설치 하지 않고 하는 방법을 2가지를 해보고자 한다.
방법1 )))
~/.bashrc 파일에 아래 한줄을 추가해준다.(파일 안 내용이 아무것도 없을경우는 vi 에디터로 생성해준다.)
alias clear='echo -e "\E[2J"'
방법2 )))
clear를 하기 위해서 alias 를 안하고 단순한 방식으로
CTRL+L 을 클릭해 보면 말끔히 화면이 지워지는것을 확인할수가 있다.