Search Results for '프로그래밍'


1206 posts related to '프로그래밍'

  1. 2009/05/10 DOS 도스 시스템 파일 복사하기, 디스크 포맷한 후; System File Copy
  2. 2009/05/10 BAT파일에서, 다른 BAT파일을 불러 반복 실행하기
  3. 2009/05/10 배치파일 무한루프 구현, 루프 탈출, 빠져 나오기 예제; Batch File Infinity Loop
  4. 2009/05/10 BAT 파일 반복 시키기 배치파일 문법
  5. 2009/05/10 Vim (VI; 빔) 과 GVim 소개 [리눅스와 윈도우용의 오픈소스/무료 텍스트 에디터]
  6. 2009/05/10 Cygwin(시그윈)에, Vim (vi) 에디터 설치법
  7. 2009/05/08 자주쓰는 리눅스명령어 요약
  8. 2009/05/08 MS SQL 시드 자동 증가값 초기화
  9. 2009/05/05 NcFTP 사용법
  10. 2009/05/05 최고의 리눅스용 FTP클라이언트 ncFTP
  11. 2009/05/05 NCFTP 활용하기
  12. 2009/05/05 Ping 사용 막기허브향기
  13. 2009/05/05 netstat 를 이용하여 현재 포트를 감시허브향기
  14. 2009/05/05 ncftp, ncftpget, ncftpput - 서브디렉토리 전송허브향기
  15. 2009/05/05 유닉스에서 텍스트 파일 열기 명령어; 리눅스 Unix Text File Open
  16. 2009/05/05 VIM VI 워드랩 명령어, 화면 우측 끝에서 긴줄 자동 줄바꿈 방법; Word Wrap
  17. 2009/05/05 rm 특정 확장자만 삭제 방법, rm명령어로 지정 파일만 지우기 옵션; File Ext
  18. 2009/05/05 GREP 대소문자 구분없이 찾기 방법? 대소문자 무시 하고 찾는 법; icase
  19. 2009/05/05 CMD 에서 GREP 명령어 사용하는 방법은? 도스창 정규식 문자열 찾기
  20. 2009/05/05 Vim VI 블럭 복사 핫키, 칼럼 카피하는 방법; Copy Block
  21. 2009/05/05 리눅스 메세지 정지 방법; 화면 출력 한페이지씩 멈추기; Linux pause
  22. 2009/05/05 VI 다른 이름으로 저장, 새이름으로 저장 명령어; Vim Vi Save As Command
  23. 2009/05/05 Unix echo 작은따옴표,특수문자 출력하기, 유닉스 Linux 리눅스 프롬프트에서
  24. 2009/05/05 시그윈 종료 명령어, Cygwin 끝내기 빠져나오기 halt 명령
  25. 2009/05/05 grep에서 별표 검색 방법, 그렙 애스터리스크 백설표 문자 찾기 Find Asterisk Char
  26. 2009/05/05 유닉스에서 텍스트파일 만드는 방법, 0바이트 빈 파일 생성 팁; Unix Linux Make Text Txt File
  27. 2009/05/05 tar.bz2 푸는법, tar사용법, 윈도우XP에서 1
  28. 2009/05/05 Vim 창크기 조절 방법, 핫키; Vi에서 창사이즈 Window Size Hotkey
  29. 2009/05/05 유닉스 명령어, 파일지우기 명령, 파일삭제; Unix File Delete Command
  30. 2009/05/05 [QnA] Cygwin(시그윈) 매뉴얼 있는 곳은?
copy 명령으로, "시스템 속성" / "히든 속성"의 파일을 복사하려면, 지정된 파일을 찾을 수 없습니다. 이런 에러가 나고 복사가 되지 않습니다.

이때는 xcopy 라는 명령에 /h 라는 옵션을 붙여서 복사해야 합니다.


다음은 도스창(명령 프롬프트;CMD.EXE)  에서,

foo.dll 이라는 시스템 속성(System File Attribute)의 파일과
bar.dll 이라는 히든 속성(Hidden File Attribute)의 파일을

000 이라는 하위 디렉토리(서브 디렉토리)로 복사하는 예제입니다:

D:\Z>xcopy foo.dll 000 /h
D:foo.dll
1개 파일이 복사되었습니다.

D:\Z>xcopy bar.dll 000 /h
D:bar.dll
1개 파일이 복사되었습니다.

D:\Z>

모든 dll 확장자의 파일을 한꺼번에 복사하려면
xcopy *.dll 000 /h
이렇게 별표(*; 애스터리스크)를 와일드카드로 사용하면 됩니다.


/h 옵션을 붙이지 않으면, 0개 파일이 복사되었습니다. 라고 나오고, 복사가 되지 않습니다.
2009/05/10 21:39 2009/05/10 21:39
도스에서 "도스 부팅용 시스템 파일들"을 디스켓 또는 디스크에 복사하는 방법입니다. 여기서 말하는 "시스템 파일"이란 "시스템 속성"을 가진 일반 파일이 아니라, IO.SYS 같이 도스로 부팅할 때 필요한 파일들입니다. 이런 파일들은 디스크에서 물리적으로 맨 처음에 위치해야 하기에, 그냥 복사해서는 안됩니다. 반드시 다음과 같은 명령을 사용해야 합니다. (윈도우98이나 MS-DOS에서만 가능한 명령이고, 윈도우XP에는 도스 시스템 파일 복사 옵션이 없습니다. 이때는 탐색기에서 마우스 우측 버튼을 눌러 "포맷"을 선택하고 MS-DOS 시동 디스크 만들기 옵션에 체크하고 포맷하면 됩니다.)

다음 명령은 A:의 플로피 디스켓을 포맷한 후, 도스 부팅 파일들을 복사합니다. 주의 사항: format은 위험한 명령입니다. a: 이런 드라이브 문자에 오타가 나지 않도록 주의해야 합니다.
format a: /s


또는 이미 포맷된 빈 디스크라면
sys a:

이렇게 하면, 시스템 파일들이 플로피 디스켓(A:)에 복사됩니다.


이제
dir a: /a

라고 치면

IO.SYS
MSDOS.SYS
COMMAND.COM
DRVSPACE.BIN


A:드라이브의 이런 시스템 파일들의 목록이 출력될 것입니다.
2009/05/10 21:37 2009/05/10 21:37
아래 예제는 example.bat 이라는 배치파일 안에서, foo.bat 이라는 별도의 다른 배치파일을 호출하여 3번 반복 실행시키는 예제입니다. foo.bat 이라는 임의의 배치파일이 같은 디렉토리(폴더)에 있어야만 실행이 됩니다.

중요한 것은, 호출할 다른 배치파일 이름 앞에 반드시 call 을 붙여 주는 것입니다. 그렇지 않으면 반복이 안됩니다. 호출된 foo.bat 파일 속에서 그냥 종료되어 버리고, example.bat 파일로 다시 돌아오지 않게 됩니다.

예제 파일명: example.bat

@echo off

call foo.bat
call foo.bat
call foo.bat



2009/05/10 21:34 2009/05/10 21:34
배치파일에서 goto문을 사용하면 무한루프를 쉽게 만들 수 있습니다. 루프를 빠져나올 때에도 역시 goto문을 사용합니다. 아래 예제에서는 ":LOOP" 와 "goto LOOP" 사이가 무한히 반복 실행됩니다.

영원한 무한 루프일 경우에는 키보드의 Ctrl+C키를 누르거나 Ctrl+Break키를 누르면 강제로 무한루프(x 무한루트)가 종료됩니다.

배치 파일로 무한 루프 만들기 예제


배치 파일명: example.bat
@echo off
setlocal


:LOOP
echo 무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...

::::::::::::::::::::::::::::::::::::::::
:: 이 부분이 없으면 영원한 무한루프가 됨
set /a myStopper+=1
if %myStopper% GEQ 10 goto QUIT
::::::::::::::::::::::::::::::::::::::::

goto LOOP




:QUIT



myStopper+=1
은 myStopper라는 변수에 1을 더하기 하여 증가시키라는 뜻입니다.


실행 결과 화면:
(편의상 루프를 10번만 돌립니다)
D:\Z>example.bat
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
D:\Z>


2009/05/10 21:33 2009/05/10 21:33
배치파일 문법에서는 어떤 부분을 반복하려면 라벨을 만든 후에 goto문을 사용하면 됩니다. 아래 예제 소스에서 :REDO 라는 부분이 라벨인데, 콜론(:) 뒤에 REDO 등의 적당한 이름을 지정하면 라벨이 됩니다.

아래 예제 소스는, "문자열 출력 작업"이라는 글자들을 도스창 화면에 출력시킨 후 대기 상태로 들어가는 일을 무한 반복합니다.

무한 반복 시키기
배치 파일명: example.bat
@echo off

:REDO

echo 문자열 출력 작업
pause

goto REDO



위의 파일을 도스창을 열고 실행시키면, 다음 화면처럼 REDO... 사이의 부분이 무한 반복으로 실행됩니다. 키보드의 CTRL+C키를 눌러야만 중지됩니다.

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

D:\Z>example.bat
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
문자열 출력 작업
계속하려면 아무 키나 누르십시오 . . .
일괄 작업을 끝내시겠습니까 (Y/N)? y

D:\Z>


"계속하려면 아무 키나 누르십시오 . . ."라는 부분이 나오지 않고, 무작정 반복시키려면, 예제 소스에서 pause 라는 중지문을 삭제하면 됩니다.


지정한 특정 회수만큼 반복시키기
무한 반복이 아니라, 특정 회수만큼, 가령 10번 반복이 필요할 때, 10번만 반복하려면 다음 페이지의 소스처럼 하면 됩니다:
2009/05/10 21:32 2009/05/10 21:32

윈도우에 메모장이 있듯이, 유닉스/리눅스에는 Vim(빔)이라는 텍스트 에디터가 있습니다. VI 라는 에디터를 개량한 것입니다. 레드햇 리눅스에서는 vi 라고 치면 vim 이 실행되더군요.

윈도우의 메모장과 다른 점이 있다면, Vim은 강력하다는 것과, 사용법이 어렵고 복잡하다는 것과, 거의 모든 종류의 OS에서 사용할 수 있다는 것과, 무료라는 차이가 있습니다.

제가 윈도우에서 쓸 수 있는 무료 텍스트 에디터를 찾아다닌 끝에, 정확하게 말하자면, 울트라에디트를 대체할 수 있는 에디터를 찾아다닌 끝에, Vim 을 만나게 되었습니다. 무료 에디터야 많이 있지만, 리눅스에서도 동시에 사용 가능하다는 장점에 이끌렸습니다.

Vim을 울트라에디트처럼 편리하게 만들기 위해서, Vim의 설정을 조정하느라고 거의 한 달을 허비한 적이 있습니다. 그렇지만 아무리 조정해도 끝내 울트라에디트처럼 되지는 않더군요.


Vim은 우선 2종류가 있는데, GUI를 사용한 GVim 과 전통적인 텍스트 모드의 Vim 이 있습니다.

사용자 삽입 이미지

윈도우 2000에서 실행한 GVim 6.4 : 클릭하면 확대
GVim 은, 풀다운 메뉴도 있고 해서, 텍스트 모드의 빔에 비해 편리했습니다.


사용자 삽입 이미지


윈도우의 명령 프롬프트에서 실행한, 텍스트 모드의 Vim 6.4 : 클릭하면 확대
(도스 프로그램처럼 보이지만, 도스와는 상관이 없고 어디까지나 32비트 프로그램입니다.)

텍스트 모드의 Vim은 리눅스에서와 똑같은 화면입니다. 리눅스를 하면 우선 텍스트 에디터 환경이 불편해서 괴로운데, 윈도우에서 Vim을 연습해 두면 좋을 것입니다. 바로 위의 그림과 같은 창 모드에서는 마우스가 작동하지 않을 것입니다. Alt+Enter 키로 전체 화면 모드로 전환해야 마우스가 작동합니다. (다시 Alt+Enter 키를 누르면 전체 화면 모드에서 빠져 나옴)





간단한 사용법



사용법은 책 한 권 분량이 나올 정도로 복잡해서, 가장 기초적인 것만 우선 간단히 설명합니다. Vim 이든 GVim 이든 사용법은 거의 동일합니다.

일반 에디터와 달리, 반드시 키보드의 i 키를 눌러야만, 편집이 가능한 모드로 진입합니다.

편집을 끝나거나 어떤 명령을 실행하기 위해서는 Esc 키를 한 번 누른 후, 콜론(:) 기호를 찍으면 명령을 실행시킬 수 있습니다.

빔을 종료하는 명령은 q 인데, 지금 문서를 편집 중이라면, Esc 키를 한 번 누르고, :q 를 입력하고 엔터키를 치면 종료가 됩니다.

단 문서가 저장되지 않은 경우에는 이 명령으로 종료할 수 없기에, 우선 :w 명령으로 문서를 저장해야 합니다. 파일명이 정해지지 않은 문서라면,
:w test.txt 이런 식으로 파일명도 지정해 주어야 합니다.


저장하지 않고 그냥 끝내려면 :q! 즉, 콜론+q+느낌표를 입력합니다.




Vim의 문제점



미묘한 버그가 많고 약간 불안정했습니다. 한글 텍스트를 편집하고 있으면 갑자기 화면이 모두 지워져 버리는 경우가 있고, 윈도우의 레지스트리를 수십 메가짜리 .reg 파일로 만들어서 부르면, 인코딩이 깨져 버리는 문제가 있었습니다.




다운로드



Vim 과 GVim 은 같이 발표됩니다.

http://www.vim.org/

위의 주소는 Vim의 공식 사이트인데, 유닉스는 물론 윈도우용(MS-Windows)도 받을 수 있습니다. 그런데 여기서 다운 가능한 파일은 버그 패치가 적용되어 있지 않더군요. Vim 이라는 것이 원래는 사용자가 직접 컴파일을 해서 사용하는 것이기에 그렇습니다. 그런데 자신이 직접 컴파일한다는 것이, 특히 윈도우 환경에서는 아주 어렵습니다.

http://georgevreilly.com/vim/

위의 사이트에서 패치가 적용된 Vim 을 받을 수 있습니다. 윈도우용 Vim 사용자들을 위해, 최신 버그 패치를 적용하여 컴파일해 둔 곳입니다.






지금 이 글을 올리려고 보니 Vim 7.0 이 베타 테스트를 끝내고 막 정식 버전으로 나왔군요. 현재 가장 안정된 버전이 6.4인데 6.4를 받을 수 있는 링크가 다 사라져 버렸습니다. 7.0은 아직 버그가 많을 테니 7.1쯤 나왔을 때 다운받는 것이 좋을 것입니다.
2009/05/10 21:28 2009/05/10 21:28

Cygwin에, Vim 추가 설치 순서


시그윈 셋업 파일인 setup.exe 를 실행합니다.

"다음" 버튼을 계속 누르면, "Select Packages (패키지 선택)"라는 메뉴가 나옵니다.

대화상자의 제목줄을 더블클릭해서 "전체 화면"으로 확대합니다. 이렇게 해야 쉽게 선택할 수 있습니다.



패키지 선택 메뉴의 목록에 Editors 라는 카테고리가 있는데, [+] 기호를 클릭해서 펼치면,

vim: Vi IMproved - enhanced vi editor

라는 항목이 나옵니다. 그 항목 바로 좌측의 Skip 이라고 되어 있는 부분을 클릭하면, 현재 Vim의 버전이 7.0.035-1 등으로 표시됩니다. 이러면 VIm이 설치에 포함된다는 의미입니다.


이 상태에서 "다음" 버튼을 누르면 vim이 인스톨됩니다.




현재 vim 7.0 이 인스톨되는데, 너무 불안정하여서 사실상 쓸 수가 없었습니다. 현재 가장 안정적인 빔 버전은 6.4입니다.

위의 설치 과정에서 gvim 에 체크하면, GUI버전의 vim이 설치되는데, 잘 작동하지 않았습니다.
2009/05/10 21:26 2009/05/10 21:26

자주쓰는 리눅스명령어 요약

<사용자 관련>

 adduser [계정이름] : 계정생성
 passwd [계정이름] : 해당계정의 비번변경
 userdel -r [계정이름] : 계정삭제 및 계정의 파일폴더 모두 삭제(-r)
 w : 현재 사용중인 사용자
 last : 최근 이용한 접속자

<파일/디렉토리>

 ll : 전체폴더구조 보기
 ls : 폴더구조 간단히 보기
 ls -al : 숨긴파일 까지 다 보기
 ls [디렉토리명] : 해당 디렉토리보기
 ls [파일명 또는 일부] : 해당되는 파일만 보여주기
 
 cd : 디렉토리 이동
 
 chmod 755 [디렉토리] : 파일권한변경 (내꺼, 같은그룹, 전체)
 
 mkdir [디렉토리] : 디렉토리생성
 mkdir -p a/b : a디렉토리 생성후 하위에 b디렉토리 생성
 rm [파일명] : 파일삭제
 rmdir [디렉토리명] : 디렉토리삭제 (파일존재시 삭제 불가)
 rm -rf [디렉토리명] : 하위 디렉토리 및 파일 까지 모두 삭제
 
 touch [파일명] : 해당파일의 수정일을 현재시각으로 변경(파일없을시 빈파일 생성)
 
 cp [파일1] [파일2] : 파일1을 파일2로 복사
 cp -r [디렉토리1] [디렉토리2] : 디렉토리1을 디렉토리2로 하위폴더와 파일까지 복사
 cp -a [파일1] [파일2] : 소유권을 유지하면서 복사
 move [파일/디렉토리] [디렉토리] : 파일 및 디렉토리 이동
 
 cat [파일명] : 파일내용 출력
 cat /dev/cdrom > linux.iso : CD롬에 있는 내용을 CD 이미지 파일로 만듦
 cat a.txt >> b.txt : b.txt 파일 하단에 a.txt 파일의 내용 추가
 
 more [파일명] : 파일내용을 페이지단위로 출력 (space:다음페이지, b:이전페이지)
 
 ln [해당디렉토리 또는 파일] [링크이름] : 하드링크
 ls -s [해당디렉토리 또는 파일] [링크이름] : 심볼릭링크
 
 | : 파이프로 두개의 명령을 연결시켜줌
 (예: ls -l /usr/bin | more : ls에서 검색된 파일 폴더를 페이지별로 보여줌)
 
 파일권한 (자신/그룹/나머지: 4:읽기, 2:쓰기, 1:실행)
 chown -R ohhappy.wheel /home/ohhappy/* : /home/ohhappy하위의 모든 파일 디렉토리의 소유자를 ohhappy로 그룹을 wheel로 변경
 
 mount -t iso9660 /dev/cdrom /mnt/cdrom : cdrom 마운트
 mount -t vfat /dev/fd0 /mnt/floppy : floppy 마운트
 umount /dev/cdrom 또는 umount /mnt/cdrom
 
 하드디스크 추가시
 fdisk /dev/hdb (프라이머리 슬레이브 하드의 파티션 결정
 mkfs.ex2 /dev/hdb1 (hdb1 파티션 포맷)
 fsck.ext2 /dev/hdb1 (파일시스템 점검)
 mount -t ext2 /dev/hdb1 /data (/data 디렉토리에 마운트)
 vi /dev/fstab (에 마운트 기록, 부팅시 인식)
 
 
<검색>

 find [경로] -name [파일명] : 하위경로의 파일찾기
 /[찾을 문서명] : 문서나 메뉴얼안에서 문자찾기
 which [명령어] : 명령어의 절대경로를 알려줌
 whereis [명령어] : 명령어의 바이너리, 소스, 맨페이지위치 알려줌
 
 
<시스템/프로세스 관련>

 top : 시스템 프로세스 및 메모리 및 CPU 사용량
 uname -a : 운영체제,호스트명,커널버전,시스템부팅시간,아키텍쳐 보여줌
 uname -m : cpu 보여줌
 free -m : 메모리 보여줌(-m 메가단위, -k kb단위)
 df -h : 마운트되어있는 디스크 사용량
 du --max-depth=1 -h /home : 각 계정별로 이용량 확인
 lsdev : 현재 사용중인 장치정보
 w : 현재 사용중인 사용자
 last : 최근 이용한 접속자
 date : 현재 설정된 시간
 clock : Cmos에 설정된 시간
 rdate -s soback.kornet.nm.kr : soback.kornet.nm.kr에서 시간을 전송받아 시간 수정
 clock -w : cmos 시간으로 수정
 netstat -tu : 시스템에 연결된 소켓정보
 ifconfig : 네트웍 장치설정 정보
 
 ps -[옵션]: 현재 시스템에서 구동중인 프로세스 상태확인
 (-a:전체사용자, -l:자세히보기, -x:제어터미널이 없는 프로세스, -f:pstree명령어와 같은 프리구조로 출력)
 (상태값: D:구동일시중지중, R:구동중, S:쉬는중, T:구동정지중, Z:좀비프로세스, W:메모리를 안쓰는 스와핑상태)
 ps auxfw -width=300 : 프로세스의 사용자 확인 (주로 | more 필요)
 pstree : 구동중인 프로세스를 투리구조로 보여줌
 
 kill -9 [프로세스번호] : 프로세스 강제종료
 killall -9 [프로세스이름] : 프로세스 강제종료
 
<시스템 종료>

 shutdown -h now : 시스템 종료 (-k : 메시지만전달, -r : 재부팅, -h : 셧다운후 종료 -c:셧다운중지)
 halt : 시스템 종료
 shutdown -r now : 시스템 재부팅
 reboot : 시스템 재부팅
 shutdown -k '지금시스템을 종료합니다.' : 시스템 종료 메시지 송부
 
<압축>

 tar cvf [생성될 파일명:예 httpd.tar] [묶을 디렉토리] : 설정한 디렉토리를 포함한 하위 디렉토리 및 파일을 묶음
 tar xvf [묶인파일:예 httpd.tar] : tar파일을 현재 디렉토리에 품
 tar tvf [묶인파일:예 httpd.tar] : tar파일을 풀지 않고, 파일리스트만 출력
 tar cvfz [압축파일명 :예 httpd.tar.gz] [압축할 디렉토리] : 파일을 묶어서 압축함
 tar xvfz httpd.tar.gz : tar.gz 압축해제
 tar xvfj httpd.tar.bz2 : tar.bz2 압축해제
 
<보안암호파일 생성>

 htpasswd -c [생성될 파일명] [계정이름] : 암호화된 계정생성명령
 
<RPM>
  
   rpm -ivh [패키지 파일명] : rpm 패키지 설치
   rpm -Uvh [패키지 파일명] : rpm 패키지 업그레이드
   rpm -e [패키지명] : rpm 패키지 삭제
   rpm -qa : 현재 설치되어있는 패키지 리스트
   rpm -qa | grep [패키지명] : 패키지명 단어가 포함된 패키지 출력
   rpm -ql [패키지명] : 패키지가 설치한 파일 리스트
   rpm -qlp [패키지파일명] : 패키지 설치전 설치될 파일목록
   rpm -qf [파일명(절대경로)] : 어느패키지가 설치한 파일인지 표시
   rpm -qi [패키지명] : 패키지 정보 출력
   rpm -qip [패키지파일명] : 설치할 패키지 정보 출력
   rpm -Va : 패키지 검증
   
<ncftp>

 ncftp -u [아이디] [접속주소] : ncftp 로그인
 quit : ftp 종료
 get : 다운로드 명령
 mget : 현재폴더내 모든 파일 다운로드
 mget -R * : 현재폴더 및 하위 폴더 파일 다운로드

<DB 자동백업>

 1단계. (vi /etc/crontab) 다음줄 추가
 
 30 4 * * * root run-parts /etc/cron.mysqldump
 (분 시 일 월 주 사용자권한 실행부분 실행디렉토리, 매일 4시 30분실행)
 (22 4 * * 0 매주 일요일(0) 4시 22분 실행)
 (42 4 1 * * 매월 1일 4시 42분 실행)
 
 2단계. 해당 디렉토리생성
 mkdir /etc/cron.mysqldump
 
 3단계. 해당 디렉토리에 실행할 내용이 들어있는 파일 생성
 vi mysqldump.0709.sh*
 내용입력
 
 #!/bin/bash

 . /etc/profile 
 
 TimeOfDay=`date +"%Y%m%d.%H%M"`
 mkdir -p /etc/cron.mysqldump/DATA/${TimeOfDay}
 UUSER="root"
 PPASS=""

 /usr/local/mysql/bin/mysqldump -u${UUSER} devbank > /etc/cron.mysqldump/DATA/${TimeOfDay}/devbank.sql
 /usr/local/mysql/bin/mysqldump -u${UUSER} designter > /etc/cron.mysqldump/DATA/${Time0fDay}/designter.sql 

<디렉토리별 구분>

 /bin : 기본 명령어가 위치
 /boot : 커널이미지가 존재
 /dev : 장치를 사용할때 필요한 특수파일이 위치
        (hda,hdb,hdc,hdd:하드,CDROM fd0:플로피 ttyS0,ttyS1..:com포트 sda,sdb..:스카시장치 lp0:프린터)
 /etc : 애플리케이션 및 서버 프로그램의 환경설정에 필요한 설정파일 저장
 /usr : 리눅스 바이너리 프로그램을 설치하는 곳, 패키지 설치시 대부분 이곳에 저장
 /home : 각 계정의 이용자가 사용하는 공간
 /lib : 부팅과 시스템 운영에 필요한 공유라이브러리 및 커널 모듈저장
 /lost+found : 파일시스템이 이상일 있을때 구동되는 fsck 명령에 의해 사용됨 (평소에 빈폴더임)
 /mnt : CDROM,플로피등의 장치의 마운트 포인트를 제공함
 /opt : 덩치가 너무 큰 몇몇 리눅스 패키지를 설치할때 사용함
 /proc : 가상파일 시스템으로 프로세스와 시스템 정보를 제공. 파일명으로 존재하는 디렉토리는 커널정보를 숫자로 존재하는 디렉토리는 현재 실행되고 있는 프로세스의 정보를 담고 있음.
 /root : root의 홈디렉토리. 가능한 많은 데이터를 저장하지 않는 것이 좋음
 /sbin : 시스템 운영에 사용되는 명령어가 들어있음
 /chroot : 프로그램을 감옥환경에서 돌릴때 루트공간
 /chache : 플락시 서버 돌릴때 필요한 공간
 /var : 시스템의 로그파일이 저장되는 곳, 가변자료들이 저장, 로그, 스풀, mysql db등
 /tmp : 템프파일,시스템재구동시 모두 삭제됨, 프로세스 진행중 필요에 의해 임시로 저장

<명령어 도움말>

 man [명령어] : 명령어에 해당하는 도움말
 (man 페이지 안에서 /[검색어]는 해당단어검색, n은 다음 검색단어, q는 man 종료)
 
 /usr/share/man : man 파일 저장위치
 man1 : 사용자프로그램
 man2 : 시스템 호출명령어
 man3 : 라이브러리 함수 및 서브루틴
 man4 : /dev 디렉토리에 포함된 특수파일
 man5 : 파일 포맷
 man6 : 게임
 man7 : 분류에 포함되지 않는 기타 프로그램
 man8 : 시스템 관리 명령어
 man9 : 커널관련 명령어
 mann : Tcl/Tk  내장 명령어
 
<네임서버 실행>

 vi /etc/named.conf : 네임서버 설정파일
 vi /var/named/[각파일] : 네임서버 설정파일
 /etc/rc.d/init.d/named restart : 네임서버 재실행
 
<네임서버설정>

    1. /etc/named.conf 파일을 설정한다.
     
    case 1.
    <!--
 // generated by named-bootconf.pl

 options {
   directory "/var/named";  (지정한파일이 어느 디렉토리에 위치하는 지를 보여줌)
         check-names master warn;
         dump-file "/var/tmp/named_dump.db";
          statistics-file "/var/tmp/named.stats";
          forwarders {
                         168.126.63.1;
                        164.124.101.2;
                        };
  /*
    * If there is a firewall between you and nameservers you want
    * to talk to, you might need to uncomment the query-source
    * directive below.  Previous versions of BIND always asked
   * questions using port 53, but BIND 8.1 uses an unprivileged
   * port by default.
   */
  // query-source address * port 53;
 };
   
    (최상위 도메인 . 에 대한 정보를 제공함, named.ca는 최상위 도메인 목록제공)
 zone "." {
  type hint;
  file "named.ca";
 };
 
 (루프백 장치설정을 제공하는 영역)
 zone "0.0.127.in-addr.arpa" {
  type master;
  file "named.local";
 };
 
 (호스트 명을 저장할 파일명을 설정)
 zone "eoholdings.co.kr" {
        type master;  (1차네임서버인경우 master, 2차인경우 slave로 설정)
        file "eoh.zone"; (파일 이름 설정)
 };
    -->
   
    case 2.
   
    <!--
    // generated by named-bootconf.pl

 options {
  directory "/var/named";(지정한파일이 어느 디렉토리에 위치하는 지를 보여줌)
  /*
   * If there is a firewall between you and nameservers you want
   * to talk to, you might need to uncomment the query-source
   * directive below.  Previous versions of BIND always asked
   * questions using port 53, but BIND 8.1 uses an unprivileged
   * port by default.
   */
  // query-source address * port 53;
 };

 (최상위 도메인 . 에 대한 정보를 제공함, named.ca는 최상위 도메인 목록제공)
 zone "." IN {
  type hint;
  file "named.ca";
 };

 (루프백 장치설정을 제공하는 영역)
 zone "0.0.127.in-addr.arpa" IN {
  type master;
  file "named.local";
  allow-update { none; };
 };
 
 (호스트 명을 저장할 파일명을 설정)
 zone "hanter21.co.kr" IN {
  type master;
  file "hanter21.co.kr";
  allow-update { none; };
 };
 
 zone "13.233.211.in-addr.arpa" IN {
  type master;
  file "hanter21.rev";
  allow-update { none; };
 };

 key "key" {
  algorithm hmac-md5;
          secret "dHlNPdoeCpUMAONBoWbYPPJzYAcXOeIUBjnTLKlFHMTgXDTvMQZvzwqdx0MB";
 };
 -->
 
 2. /var/named에 각 도메인별 네임서버 설정파일을 만든다
 
 case 1.
 
 <!--
  @       IN      SOA     ns.devbank.co.kr. master.devbank.co.kr.  (
                                        1997022701 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        0 )    ; Minimum
                IN      NS     devbank.co.kr.
                IN      A      211.233.13.196
                IN      NS     ns.devbank.co.kr.
 
                IN      MX     10 mail.devbank.co.kr.
  @             IN     A       211.233.13.196
  ns            IN     A       211.233.13.196
  mail          IN     A       61.82.82.118
  ftp           IN     A       211.233.13.196
  www           IN     A       211.233.13.196
 -->
 
 case 2.
 
 <!--
     (생존시간)
  $TTL 0
  $ORIGIN hanter21.co.kr.
  (@는 named.conf에서 정의한 도메인명을 대신)
  (SOA는 권한의 시작)
  (NS는 네임서버 역할)
  (MX는 메일호스트)
  (A는 호스트)
  @       IN      SOA     ns.ns.hanter21.co.kr. root.hanter21.co.kr.(
                                        1997022701 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        0 )    ; Minimum
    IN   NS   ns.hanter21.co.kr.
    IN  MX   10 mail.hanter21.co.kr.
  @   IN   A   211.233.13.196
  www  IN   A   211.233.13.196
  ns  IN  A  211.233.13.196
  mail IN  A  211.233.13.196
  vod     IN      A       211.233.13.194
 -->
 
 3. 네임서버 상세 문서.. (http://www.kr.freebsd.org/doc/PoweredByDNS/ 또는 네임서버.hwp)

<아파치실행>
 
 vi /usr/local/apache/conf/httpd.conf : 아파치 웹서버 설정파일
 /usr/local/apache/bin/apachectl restart : 아파치 재실행
 /usr/local/apache/bin/httpd -t : 아파치 설정파일 문법 오류 확인
 chk
 
<아파치 설치>
 
 1. tar xvfz apache_XXXX.tar.gz : 적당한 디렉토리에 압축해제
 2. cd apache_XXXX : 압축이 풀린 디렉토리로 이동
 3. configure
    configure --help : 옵션 도움말 보기
    --prefix=/home/httpd : 설치될 디렉토리
    --logfiledir=/var/log/httpd : 로그파일이 저장될 디렉토리
    --sysconfdir=/etc/httpd/conf : httpd.conf가 저장될 디렉토리
    --libexecdir=/etc/httpd/modules : 기능모듈파일이 저장될 디렉토리
    --sbindir=/usr/sbin : httpd 데몬과 바이너리가 저장될 디렉토리
    --bindir=/usr/bin : htpasswd 같은 바이너리 저장 디렉토리
    --mandir=/usr/share/man : 메뉴얼 페이지 저장 디렉토리
    --enable-module=all : 아파치가 사용할 모듈 전체 선택
    --enable-shared=max : 모듈처리가 가능한 모든 부분을 모듈처리
    --with-perl=/usr/bin/perl : 펄을 사용할때 펄의 디렉토리
    --verbose : configure 과정 출력
    --enable-suexec : cgi 구동시 지정 사용자로 변경하여 구동됨
    --suexec-caller=nobody : 위의 사용자 변경시 사용자
    --suexec-docroot=/home/htdocs : 다큐먼트 루트 디렉토리
    --suexec-logfile=/var/log/httpd/suexec_log : 로그 디렉토리 및 파일
    --suexec-userdir=public_html : 일반사용자의 홈디렉토리
    --suexec-uidmin=99 : caller에서 설정한 사용자의 UID
    --suxexc-gidmin=99 : caller에서 설정한 사용자의 GID
    --suxexc-umask=022 : caller가 사용할 PATH
    --runtimedir=/var/run : 웹서버 구동시 생성될 프로세스 PID 저장 디렉토리
    4. make : 바이너리와 설정파일 생성
    5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
 
<mysql>

 mysql -u [계정이름] -p [비밀번호] : mysql 접속
 
 /usr/local/mysql/bin/mysqldump -u root [디비명] > [파일명] : DB 백업
 mysql -u root [디비명] < [파일명] :  DB 복원  
 
<mysql 설치>

 1. tar xvfz mysql-XXXX.tar.gz : 압축풀기
 2. cd mysql-XXX : 해당디렉토리로 이동
 3. configure
    ./configure --help : 도움말 및 옵션보기
    --prefix=/home/mysql : 설치 디렉토리
    --libexecdir=/usr/sbin : 바이너리 설치 디렉토리
    --localstatedir=/home/mysql/var : DB가 저장될 디렉토리
    --bindir=/usr/bin : 일반 바이너리가 설치될 디렉토리
    --sysconfdir=/etc : 설정파일(my.cnf) 가 저장될 디렉토리
    --with-mysqld-user=mysql : mysqld를 일반 계정 mysql로 구동
    --with-charset=euc_kr : 한국어 정렬지원
 4. make : 바이너리와 설정파일 생성
    5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사 
 6. echo "/home/mysql/lib/mysql" >> /etc/ld.so.conf : 라이브러리가 설치된 디렉토리 설정 추가
 7. ldconfig : 시스템이 참조하는 cache 파일 갱신
 8. chmod 755 /home/mysql/share/mysql/mysql.server : 실행가능 허용
 9. cp /home/mysql/share/mysql/mysql.server /etc/init.d/mysqld
 10. cp /home/mysql/share/mysql/my-example.cnf /etc/my.cnf : configure 시 설정파일 위치로 변경
 11. mysql_install_db : 초기화 DB 생성
 
 12. groupadd -r mysql
 13. useradd -M -c MySQL server -d /home/mysql -g mysql -s /bin/false -r mysql
     : mysql 계정으로 사용하도록 configure 하였으므로 계정생성
 14. chown -R mysql.mysql /home/mysql/var : 소유권 변경
 15. chkconfig mysqld on : 부팅시 자동실행
 16.  /etc/init.d/myslqd start : 실행
 
<PHP 설치>
 
 1. tar xvfz php-XXXX.tar.gz : 압축풀기
 2. cd v-XXX : 해당디렉토리로 이동
 3. configure
    ./configure --help : 도움말 및 옵션보기
    --with-mysql=/home/mysql : db를 mysql로 사용하고, 디렉토리 정의
    --enalbe-versioning : php 3,4 버전 호환
    --enable-trans-sid : php4의 세션관리기능 사용
    --with-apxs=/usr/sbin/apxs : php를 DSO방식으로 컴파일 하기 위해 apxs 위치 설정
    --with-config-file-path=/etc : 설정파일 위치 지정
    --disable-debug : zend 옵티마이저를 사용할수 있게 설정
 4. make : 바이너리와 설정파일 생성
    5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
    6. cp ./php.ini-optimized /etc/php.ini : --with-config-file-path로 지정한 디렉토리에 설정파일 카피
    7. www.zend.com/store/products/zend-optimizer.php 다운로드
    8. /etc/httpd/modules 로 ZendOptimizer.so 를 카피
    9. vi /etc/php.ini 에 다음줄 2줄 추가
       zend_optimizer.optimization_level=15
       zend_extension=/etc/httpd/modules/ZendOptimizer.so
    10. vi httpd.conf에서 Addtype에 php3, phtml, inc, ph, html등 추가
    11. /etc/init.d/httpd restart : php 재실행
   
<httpd.conf 설정>

 ServerType standalone : 구동형태를 standalone을 기본값으로 함
 PidFile /var/run/httpd.pid : 구동되는 프로세서의 PID가 기록되는 파일 설정
 Timeout 300 : 클라이언트와 서버간 연결지연 시간 오류 설정 : 초단위
 KeepAlive On : 서버연결에 한번이상 요청을 허용
 MaxKeepAliveRequest 100 : keepalive가 on인경우 서버에 요청할수 있는 프로세서의 갯수
 KeepAliveTimeout 5 : 클라이언트가 5초이내에 다음요청이 없을때 접속 끊음
 MinSpareServers 5 : 순간적인 시스템 부하를 줄이기 위해 여분의 데몬을 생성하고, nobody로 구성되는 httpd 생성
 MaxSpareServers 10 : 여분의 데몬 제한
 StartServers 5 : 여분의 httpd 구동
 MaxClients 256 : 동시접속자수 제한
 MaxResuestPerChild 100 : 하나의 프로세스가 서비스를 몇번하고 소멸될 것인가
 LoadModule php4_module libexec/libphp4.so : 아파치 모듈
 AddModule mod_php4.c :LoadModule과 동시 설정
 Port 80 : 80 포트 사용
 User nobody : 데몬의 소유권
 Group nobody : 데몬의 그룹권한
 ServerAdmin root@devank.co.kr : 웹서버에 문제가 발생시 관리자메일 주소를 보여줌
 DocumentRoot "/home/httpd/htdocs" : 사이트 루트디렉토리
 UserDir public_html : 일반사용자의 ~를 통해 사용할 경우 디렉토리..
 DirectoryIndex index.html index.php, index.cgi : 웹사이트 초기파일
 AccessFileName .htacess : 특정디렉토리 사용자 인증 설정 파일
 DefaultType text/plain : 알수없는 확장자를 만났을때.. text로처리
 HostnameLookups off : access_log에 IP대신 host명으로 기록
 ErrorLog /home/httpd/logs/error_log : 로그파일기록
 CustomLog /home/httpd/logs/access_log common : 클라이언트 접속 로그
 ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/ : cgi 실행 설정
 AddType application/x-httpd-php .php .php3 : 웹서버가 인식할 확장자
 
 
 /etc/init.d/httpd configtest : 문법적 에러 점점
 
 NameVirtualHost 211.233.58.196
 <VirtualHost 211.233.58.196>
 ServerAdmin root@devbank.co.kr
 DocumentRoot /home/ohhappy/docs
 ServerName devbank.co.kr
 ErrorLog logs/error_log
 CustomLog logs/access_log common
 </VirtualHost>
 
 Options Indexes FollowSymLinks MultiViews 에서 indexes란 단어를 빼면 디렉토리인덱스 서비스 제외
 
<ftp 시작>
 /etc/init.d/proftd-standalone start
  
<Sendmail>
 
 1. Sendmail 패키지
    - sendmail-8.11.2.-14.i386.rpm
    - sendmail-cf-8.11.2-14.i386.rpm

 2. vi /etc/mail/aliases
    webmaster : root #webmaster로 오는 메일을 root가 수신
    sales : neo,nvng,bermine,nvng@devbank.co.kr #sales@devbank.co.kr로 오는메일을 neo, nvng, bermine 계정이 동시에 수신
   
 3. vi /etc/mail/access
 
    211.233.13.195 RELAY   : 릴레이 허용
    devbank.co.kr    RELAY   : 릴레이 허용
    yahoo.com        REJECT  : yahoo.com 메일 발송 거부
 
 4. vi /etc/mail/local-host-names
    : 복수의 메일 호스트를 사용할경우 반드시 설정
    devbank.co.kr
    designter.com
    ns.devbank.co.kr
   
 5. vi /etc/mail/virtusertable
 
    stock@eoholdings.co.kr lucky
    lucky@eoholdings.co.kr lucky
   
    : 한계정이 여러개의 메일을 일괄수신하게 하는 것
 
 6. smtp 사용자 인증
 
    cyrus-sasl-1.5.24-17 : 설치
    cyrus-sasl-devel-1.5.24-17 : 설치
    vi /usr/lib/sasl/Sendmail.conf
    pwcheck_method:pam 을 pwcheck_method:sasldb 로 변경
   
    saslpasswd -u [호스트명] [사용자명] : sasldb 생성, 계정생성
    sasldblistusers : 사용자 리스트 출력
   
    vi /etc/mail/sendmail.mc
    DEMON_OPTIONS('Port=smtp, Addr=127.0.0.1, Name=MTA')dnl : 수정
    m4 /etc/mail/sendmail.mc > sendmail.cf :sendmail.cf 생성
    sendmail.cf를 /etc로 복사
   
    /etc/init.d/sendmail restart : 샌드메일 재구동
   
 7. 메일계정만 사용하는 계정생성
    useradd -M -s /bin/false 사용자명  
   
<기본보안설정>

 1) 패스워드 길이 강제 지정 (vi /etc/login.defs)
 
  PASS_MIN_LEN 5
  to read;
  PASS_MIN_LEN 8
 
 2) 루트계정의 자동타임아웃지정 (vi /etc/profile)
 
  TMOUT=7200 (초단위시간, HISTSIZE 아래 설정)
 
 3) 사용하지 않는 콘솔 프로그램 비활성화
 
  rm -f /etc/security/console.apps/halt
  rm -f /etc/security/console.apps/poweroff
  rm -f /etc/security/console.apps/reboot
  rm -f /etc/security/console.apps/shutdown
  rm -f /etc/security/console.apps/xserver (X 서버 설치시만)
 
 4) 파일의 권한 설정
 
  chattr +i /etc/services (서비스네임과 포트넘버가 기록된 파일)
  chattr +i /etc/passwd
  chattr +i /etc/shadow
  chattr +i /etc/group
  chattr +i /etc/gshadow
 
  (권한을 풀때는 -i 로 옵션을 변경해 주면된다.)
 
  chattr -R +A /var/spool  (for a news and mail)
  chattr -R +A /chache  (for a proxy caches)
  chattr -R +A /home/httpd/ona   (form a web page)
 
  (해당 디렉토리에 atime 속성을 적용한다.)
 
 5) 루트가 열수있는 콘솔을 하나로 제한 (vi /etc/securetty)
 
  tty1 만남겨두고 모두 주석처리한다.
 
 6) 사용하지 않는 유저 및 그룹삭제
 
  userdel adm
  userdel lp
  userdel sync
  userdel shutdown
  userdel halt
  userdel news
  userdel uucp
  userdel operator
  userdel games
  userdel gopher
  userdel ftp
 
  groupdel adm
  groupdel lp
  groupdel news
  groupdel uucp
  groupdel games
  groupdel dip
  groupdel pppusers
  groupdel popusers
  groupdel slipusers
 
 7) 누구나 루트가 되는 것 방지하기
 
  1단계.
  (vi /etc/pam.d/su) 다음 내용추가
  auth sufficient /lib/security/pam_rootok.so debug
  auth required /lib/security/pam_wheel.so group=wheel
 
  2단계.
  usermod -G10 [사용할 계정이름]
  (G는 그룹리스트 추가를 10은 wheel 그룹을 의미함)
  (루트가 될수 있는 계정을 등록한다.)
 
 8) 사용자의 시스템 자원제한
 
  1단계.
  (vi /etc/security/limits.conf)
 
  hard core 0      (코어파일 생성의 저지)
  hard rss  5000    (계정별 사용자 메모리를 5메가로 제한)
  hard nproc 20   (프로세스 숫자를 20개로 제한)
 
  2단계.
  (vi /etc/pam.d/login)
 
  session  required  /lib/security/pam_limits.so
 
 9) 특정 파티션, 폴더의 권한 설정하기
 
  fstab 파일의 옵션
  default  모든 것이 가능함
  noquota  사용자의 하드용량을 제한함
  nosuid  suid/sgid 엑세스를 못하게 함
  nodev  특별한장치나 문자 디바이스를 엑서스 하지 못하게 한다.
  noexec  실행파일을 실행할수 없도록 함
  quota  사용자의 용량을 제한하지 않음
  ro  읽기만 허용
  rw  읽기 쓰기 허용
  suid  SUID/SGID를 허용
 
  (vi /etc/fstab)
  /dev/sda11 /tmp  ext2  defaults 1 2
  /dev/sda6  /home ext2  defaults 1 2
 
  to read;
 
  /dev/sda11 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1,2
  /dev/sda11 /home ext2 defaults,rw,nosuid,nodev,nodev 1,2
 
  재부팅해야 적용됨
 
 10) rpm 파일들을 안전한 장소에 옮긴후 퍼미션을 변경해 준다.
 
  chmod 700 /bin/rpm
        
 11) 명령어 히스토리 파일 갯수 제한 (vi /etc/profile)
 
  HISTFILESIZE=20
  HISTSIZE=20
 
  (사용자의 홈디렉토리의 .bash_histroy 파일에 20개까지만 저장)
 
 12) Lilo 부트 로더 설정
 
  1단계.  (vi /etc/lilo.conf)
 
  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b
  prompt
  timeout=00  (부팅이미지 지연시간, 멀티부팅시는 00불가)
  Default=linux
  restricted  (싱글모드에 패스워드를 걸기위한 옵션)
  password=<password> (싱글유저접속시 패스워드)
  image=/boot/wmlinuz-2.2.12-20
  lable=linux
  initrd=/dev/sda6
  read-only
 
  2단계. 파일이 암호화가 안되어 있으므로 슈퍼유저권한설정
 
  chmod 600 /etc/lilo.conf
 
  3단계. 효과적용단계
 
  /sbin/lilo -v
 
  4단계. 속성변경
 
  chattr +i /etc/lilo.conf
 
 13) ctrl+alt+del 비활성
 
  1단계.
 
  (vi /etc/inittab)
 
  ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
  to read;
 
  #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
  2단계. 적용실행
 
  /sbin/init q
 
 14) init.d 디렉토리 파일들의 파일 권한 변경 (프로세스들과 부팅시 필요한 파일들임
 
  chmod -R 700 /etc/rc.d/init.d/*
 
 15) rc.local 파일 설정 (로그인시 컴터의 정보가 못나오게 함)
 
  1단계. (vi /etc/rc.d/rc.local) 다음을 주석처리한다.
 
  #echo "" > /etc/issue
  #echo "$R" >> /etc/issue
  #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
  #
  #cp -f /etc/issue /etc/issue.net
  #echo >> /etc/issue
 
  2단계. 다음 파일을 지운다.
 
  rm -f /etc/issue
  rm -f /etc/issue.net
 
 16) setuid 걸린 프로그램의 퍼미션제거
 
  1단계. 찾는 법
 
  find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
  (04000은 setuid 이며, 02000은 setgid임.. 이런파일은 누구나 사용할수 있다.)
 
  2단계. 권한ㅇ르 지워야할 파일들
 
  chmod a-s /usr/bin/chage
  chmod a-s /usr/bin/gpasswd
  chmod a-s /usr/bin/wall
  chmod a-s /usr/bin/chfn
  chmod a-s /usr/bin/chsh
  chmod a-s /usr/bin/newgrp
  chmod a-s /usr/bin/write
  chmod a-s /usr/bin/usernetctl
  chmod a-s /usr/bin/traceroute
  chmod a-s /bin/mount
  chmod a-s /bin/umount
  chmod a-s /bin/ping
  chmod a-s /bin/netreport
 
 17) /etc/sysctl.conf 파일 설정
 
  (vi /etc/sysctl.conf)
 
  net.ip4.icmp_echo_ignore_all = 1  (핑요청으로부터 보호)
  net.ipv4.icmp_echo_ignore_brodacasts = 1 (브로드캐스트로부터의 보호)
  net.ipv4.conf.all.accept_source_route = 0 (라우팅 요청으로의 보호)
  net.ipv4.tcp_syncookies = 1   (tcp syn cookie로부터 보호/예전 야후공격방법)
  net.ipv4.conf.all.accept_redirects = 0  (ICMP 재접속 요청으로 부터 보호)
  net.ipv4.ip_always_defrag = 1   (패킷분할요청으로 부터 보호)
  net.ipv4.icmp_ignore_bogus_error_responses = 1 (가짜 에러메시지 호출 방지)
  net.ipv4.conf.all.rp_filter = 1   (IP Spoofing 공격으로 부터 보호)
  net.ipv4.conf.all.log_martians = 1  (Log Spoofed Packets, Source Routed Packets, Redirect Packets 보호)
  vm.bdflush=100 1200 128 512 15 5000 500 1884 2 (bdflush 파라미터)
  wm.buffermem=80 10 60    (bdffermem 파라미터)
  net.ipv4.ip_local_port_range=32768 61000 (ip_local_port_range 파라미터)
  fs.file-max=8192    (file-max 파라미터)
  fs.inode-max=32768    (inode-max 파라미터)
  net.ipv4.tcp_fin_timeout=30   (TCP/IP 접속시간 조절)
  net.ipv4.tcp_keepalive_time=1800
  net.ipv4.tcp_window_scaling=0
  net.ipv4.tcp_sack=0
  net.ipv4.tcp_timestamps=0
 
 18) /root/.bashrc 파일수정
 
  (vi /root/.baxhrc)
 
  ulimit -u unlimited   (max user processes 제한)
  ulimit -n 9000   (시스템에서 열수 있는 파일수 증가)
 
  (ulimit  -a 로 결과확인)

<로그분석 : webalizer>

 1) 파일다운로드 (http://www.webalizer.com)
 2) cd /usr/local 에 파일 카피 후
 3) 압축 풀기 :  tar xvfz webalizer-2.01-10-src.tar (webalizer 디렉토리 에 풀림)
 4) 웹얼라이저 디렉토리로 이동후 configure 를 실행
    ./configure -with-language=korea (한국어 지원옵션 선택)
 5) make (컴파일한다.)
 6) make install (인스톨한다.)
 7) 상세사용법 (http://www.webalizer.co.kr/)

출처 : http://www.widusnet.co.kr

2009/05/08 16:00 2009/05/08 16:00

테스트를 하다 보면 너무 많은 양의 데이터가 들어가서 행을 삭제한 후 다시 작업을 해야할 경우가 있습니다. 개발 단계에서 테스트 데이터를 집어넣어 놓고 실제로 유효한 데이터를 입력할 경우 seq가 1부터 시작하질 않죠-_-;;


    DBCC CHECKIDENT(테이블명, reseed, 초기값);


를 사용하면 행을 삭제 후 seq값을 초기화 시킬 수 있습니다.

초기값은 0을 지정한 후 insert 해보면 1부터 증가하는것을 볼 수 있습니다.

2009/05/08 11:22 2009/05/08 11:22

NcFTP 사용법.

자동이어받기 기능.
명령어 자동완성 기능.

서브디렉터리 전송.

접속이 되지 않을때 자동 재접속.

리모트 경로 표시.

전송량 표시.

ncftp의 기본 전송 모드는 binary이다.
나머지 명령어는 유닉스 명령어와 비슷하다.

화살표 위아래키는 bashhistory 기능처럼 전에 입력했던 내용을 왔다갔다 할 수 있다.


ncfpt> open -umarine6309 -p 123456 -P 2121 localhost
marine6309란 사용자가 비밀번호 123456으로 2121포트로 로컬호스트에 접속한다.

ncfpt> get 1.txt 2.txt 3.txt
ncfpt> get *.txt

ncfpt> get -z ReadMe.txt README
ReadMe.txt를 README로 저장한다.

ncfpt> get -R test
test라는 폴더를 전체 다운로드 한다.

ncfpt> bgget -@ 20040616235000 /pub/idstuff/quake/q2_100.zip
2004년06월16일 23시50분00초에 위 파일을 백그라운드로 다운로드 한다.
이는 daemon에서이루어지기 때문에, logoff를 한다해도 계속 전송이 된다.
이런 명령의 경우에는 save-passwords가 yes로 setting되어야 한다.


ncftp> bgstart
위에서 예약된 작업을 바로 시작하는 명령이다.

ncftp> set save-passwords yes

현재 접속된 암호를 저장한다.

ncftp> jobs
background에서의 일어나는 작업을 알려준다.(unix명령과 비슷)

ncftp> bookmark local

현제 세션을 저장하고 나주에 재사용 할 수 있다. 각종 설정 모두를 기억한다.

처음 접속시 종료하기 전에 북마크 할 것인지 물어본다. 여기서 설정해 주면 된다.

패스워드는 암호화되어 저장되기 때문에 너무 걱정할 필요는 없다.

ncftp> set

set 명령어로 클라이언트 환경을 설정할 수 있다.

ncftp> show

현재 상태를 볼 수 있다.

2009/05/05 05:39 2009/05/05 05:39
나는 그동안 ncftp가 무슨 ftp데몬인줄 알았다. 거진 일년 반동안 말이다. 으하하;;

오늘이 되서야 ncftp가 단지 ftp클라이언트라는 사실을 알았다. 그리고 꽤 괜찮은 프로그램이란 것도 알게 되었다.

ncftp는 콘솔상에서 쓰는 ftp클라이언트다. 그냥 ftp라는 명령어를 치면 접속이 되는데 따로 클라이언트가 필요할까도 싶었지만 한번 써보니깐 잘못된 생각이란걸 알았다.

한마디로 짱이다!! 이제까지 ftp의 짜증난 점을 말끔히 해결해 주었다.

ftp는 리눅스 계정이던 윈도우 계정이던 자동완성기능이 없다. 리눅스에서 tab을 쓰는 것 말이다. 그리고 history도 없다.(이전 명령어를 불러들이는 것)

ncftp는 마치 telnet을 쓰는 것 처럼 이들 해결해 준다.

그동안 긴 이름을 매번 치던 나에게는 천사나 다름없었다.

또한 몇가지 좋은 기능들이 있다. 잠시 설명할까 한다. ^^*

ncftp 접속하기

# ncftp -u 유저명 호스트명
이다. 포트 번호가 33이라면

#ncftp 호스트명 -P 33
이라고 하면된다. 자세한건 man페이지에~

ftp에서 get명령은 파일을 받는 것이다. ncftp에서는 다양한 옵션이 있다.

-R : 이 옵션후 디렉토리 명을 쓰면 디렉토리를 통체로 받는다.
-z : 파일 이름을 변경하며 받는다.
get -z old.zip new.zip
-a : 아스키 모드로 받는다. (드폴트는 바이너리인지는 모르겠다. 안써도 아스키 얘들도 잘 받는다;;)
-f : 중복된 이름이 있으면 덥어 씌운다.

또한 파일이름이 tozzic으로 시작하는 것들을 몇개 받는다면

get tozzic*이라고 받으면 된다. 정말 좋다. 또한 -z 옵션을 이용해서 다운 받는 디렉토리를 지정할 수도 있다.

파일을 업로드하는 put또한 비슷한 옵션을 가진다. 더더욱 감동을 주는 것은 put 이후 tab을 누르면 알게 된다+_+

명령어 또한 자동 완성 기능을 지원한다.
2009/05/05 05:38 2009/05/05 05:38
NCFTP 활용 하기
1. NCFTP란 ?
2. NCFTP의 특징
3. NCFTP의 사용법
3.1 ncftp 접속모드로 들어가기 및 도움말 보기
4. Anonymous 접속하기
5. 자신의 홈디렉토리로 ncftp 접속하기
6. 파일 전송 및 수신하기
7. 북마크(bookmark)기능 이용하여 간단히 접속하기










1. NCFTP란 ?


NcFTP는 NCEMRsoft사에서 개발 한 것으로, network 상에서 file을 전송할 때 사용하는 utility이다.

특징으로는 file 전송을 한번에 sub directory까지 전송하는 기능과 interface 환경등이 버전 업 되었다.

한 가지 유의할 점은 NCFTP는 PC등에서 server로 전송하는 것은 불가능하며, internet에 연결되어 있는 server에서 다른 server로 전송할 때에만 사용할 수 있다.

PC에서 자기의 파일을 server로 올릴 때는 다른 ftp utility를 이용하기 바란다.



2. NCFTP의 특징


FTP보다 user interface가 향상 된 NCFTP의 특징은 사용의 편리성과 interface에 있다고 할 수 있다.

+ 한번에 대량의 데이터 전송시에 효과적이다.

+ sub directory 이하의 data를 한꺼번에 전송할 수 있다.

+ 전송 중에 끊어진 파일의 이어받기 기능을 제공한다.

+ 현재 전송하고 있는 파일의 전송률을 그래프로 확인 할 수 있다.



3. NCFTP의 사용법


3.1. ncftp 접속모드로 들어가기 및 도움말 보기


ncftp> ?

Commands may be abbreviated. 'help showall' shows hidden and unsupported

commands. 'help <command>' gives a brief description of <command>.

ascii bookmarks dir lls lrm pdir rename site

bgget cat get lmkdir lrmdir pls rhelp type

bgput cd help lookup ls put rm umask

bgstart chmod jobs lpage mkdir pwd rmdir version

bookmark debug lchmod lrename page quote show

ncftp>



ncftp를 사용하기 위해서는 ftp의 기본적인 사용법을 알고 있으면 도움이 될 것이다.

기본적으로 ftp 사용법에 대해 알고있다는 전제 하에 설명하겠다.


먼저 ncftp로 다른 서버로 접속하는 방법은 다음과 같다.

먼저 다음의 예와 같이 쉘상에서 그냥 "ncftp"라고 하시면 아래와 같이 ncftp모드로 들어간다.



[myid@ns6 super]$ ncftp

NcFTP 3.0.0 beta 18 (February 19, 1999) by Mike Gleason.

ncftp>

ncftp>

ncftp에서 사용할 수 있는 명령어들을 보려면 "ncftp> ?" 또는 "ncftp? help"라고 하시면 아래와 같이 사용할 수 있는 명령어를 볼 수 있다.



ncftp> ? open

open: connects to a remote host.

Usage: open [-flags] [sitename]

Flags:

-a : Open anonymously.

-u XX : Login with username XX.

-p XX : Login with password XX.

-J XX : Login with account XX.

-P XX : Use port number X when opening.

Examples:

open sphygmomanometer.unl.edu

open -u mario bowser.nintendo.co.jp

ncftp>



위에서 본 명령어들에 대한 사용법을 자세히 보려면 간단히 "? 명령어"라고 하면 볼 수 있다.

이들 명령어 중 open이란 명령어에 대한 도움말을 보려면 "? open"또는 "help open"이라고 하면 다음과 같은 간단한 도움말을 볼 수 있다.



4. Anonymous 접속하기


그럼, 다른 서버로 접속을 해보도록 하겠다.

접속을 하기 위해서는 open이라는 ftp명령어를 사용한다.



ncftp> open mydomain.co.kr

Connecting to 211.112.112.112...

mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

Welcome to Kornet ftp hosting server

We are now here.



Guest login ok, access restrictions apply.

Logged in to mydomain.co.kr.

ncftp / >

ncftp / > dir

drwxr-xr-x 6 root root 4096 Oct 22 23:06 .

drwxr-xr-x 6 root root 4096 Oct 22 23:06 ..

d--x--x--x 2 root root 4096 Aug 11 20:37 bin

d--x--x--x 2 root root 4096 Aug 11 20:37 etc

drwxr-xr-x 2 root root 4096 Aug 11 20:37 lib

drwxr-sr-x 3 root ftp 4096 Oct 16 09:22 pub

-rw-r--r-- 1 root root 56 Aug 30 01:36 welcome.msg

ncftp / >



위의 예에서 보는 것과 같이 "open IP-Address" 또는 "open 도메인"이라고 하면 해당사이트로 anonymous접속을 자동으로 해준다.

기존의 ftp 에서는 anonymous접속을 위해서는 anonymous라는 ID와 패스워드로 자신의 email address를 입력해 줘야하지만 ncftp에서는 자동으로 익명접속(anonymous)을 허용한다.

위의 예는 anonymous접속을 한 후에 dir이라는 명령어로 디렉토리의 내용을 본 것이다.


5. 자신의 홈디렉토리로 ncftp 접속하기


그렇다면 이번에는 익명접속이 아니라 정식사용자의 계정으로 접속을 해보도록 하겠다.

정식계정을 가진 사용자의 ID로 ncftp접속을 위해서는 "open -u 도메인"이라고 하시면 접속을 할 수 있다.

접속을 하게 되면 자신의 홈디렉토리로 들어가게된다.

그런다음 원하는 파일과 디렉토리를 가져오면 된다.



ncftp>

ncftp> open -u mydomain.co.kr

Username at mydomain.co.kr: salmon

Connecting to 211.112.112.112...

Password for user "salmon" at 211.112.112.112: *******


mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

User salmon logged in.

Logged in to mydomain.co.kr.

ncftp /home/salmon >

ncftp /home/salmon > dir

-rwx---r-x 1 504 salmon 513 Oct 29 23:42 index.html

-rw------- 1 504 salmon 7387 Dec 11 1998 install.pl

lrwxrwxrwx 1 0 root 8 Oct 13 00:19 linkfile -> linkfile

drwxr-xr-x 2 504 salmon 4096 Sep 14 17:34 logs

drwx--x--x 4 504 salmon 4096 Nov 1 21:53 public_html

ncftp /home/salmon >

ncftp /home/salmon >


앞에서 본 익명(anonymous)접속은 누구나 사용할 수 있는 ftp home directory (대부분 /home/ftp)로 접속을 하게되지만 아래와 같이 자신의 ID로 접속을 하면 ftp home directory가 아니라 자신의 home directory(대부분 /home/자신의ID)로 접속을 하게된다.


사용자의 계정으로 ncftp접속을 하려면 "open -u IP-Address" 또는 "open -u 도메인"이라고 하면 된다.

위의 예와 같이 특정 user의 home directory로 접속을 하려면 -u 옵션(user)을 사용하시면된다.

현재 디렉토리를 표시해 주기 때문에 현재의 위치를 바로 알 수 있다는 것도 큰 장점이다.


6. 파일 전송 및 수신하기


이제 ncftp를 사용하는 근본적인 목적인 파일을 전송하고 수신하는 예를 들어보겠다.

파일을 전송하는 명령어는 일반 ftp와 같이 get 또는 put을 사용하면 된다.

하지만 서브디렉토리까지 전송하거나 특정한 작업을 하기 위해서는 몇가지 옵션을 알아야 한다.

아래의 몇가지 예를 보기 바란다.


예1) 파일 하나만을 가져오기


ncftp ..xxx/public_html/report > get *.html

browser.html: 5.71 kB 172.62 kB/s

day.html: 22.16 kB 435.59 kB/s

domain.html: 3.58 kB 218.96 kB/s

host.html: 5.74 kB 168.53 kB/s

hour.html: 8.10 kB 346.42 kB/s

index.html: 4.36 kB 192.74 kB/s

page.html: 10.48 kB 259.52 kB/s

reference.html: 5.71 kB 145.84 kB/s

ncftp ..xxx/public_html/report >


예1과 같이 파일하나만을 가져오려면 "get 파일명"이라고 하면 된다.


ncftp /home/salmon > get index.html

index.html: 513.00 B 23.04 kB/s

ncftp /home/salmon >


예2) 여러개의 파일을 한꺼번에 가져오기


현재 디렉토리에 있는 여러 개의 파일을 한번에 가져오려면 위와 같은 형식을 사용하면 된다.

위와 같이 수신되고 있는 파일리스트를 모니터상에 보여주게 된다.


예3) (서브디렉토리를 포함한) 디렉토리전체를 한꺼번에 가져오기


이번에는 ncftp의 가장 강력한 기능인 전체 디렉토리를 한꺼번에 받아올 수 있는 것에 대해서 배워보도록 하겠다.

아마도 많은 분들이 ncftp를 이 기능 때문에 선호하는 것이 아닐까라고 생각한다.


ncftp /home/salmon > get -R *

.bashrc: 124.00 B 6.07 kB/s

.kderc: 966.00 B 43.10 kB/s

.screenrc: 3.42 kB 52.90 kB/s

중략

public_html (TAR): 1167360 bytes 716.21 kB/s

logs (TAR): 1648640 bytes 669.70 kB/s

aragornconv.pl: 1.66 kB 75.21 kB/s

install.pl: 7.21 kB 216.22 kB/s

wookiconv.pl: 2.14 kB 119.25 kB/s

index.html: 513.00 B 26.71 kB/s

.rhosts: 27.00 B 1.64 kB/s

get *: server said: Transfer complete.

ncftp /home/salmon >



7. 북마크(bookmark)기능 이용하여 간단히 접속하기


ncftp에는 또다른 특별한 기능이 있다.

우리가 흔히 웹브라우즈에서 사용하는 북마크기능을 ncftp에서도 사용할 수가 있다.

다음의 예를 보기 바란다.


ncftp> open mydomain.co.kr

Connecting to 211.112.112.112...

mydomain.co.kr FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

Logging in...

Welcome to Kornet ftp hosting server

We are now here.


Guest login ok, access restrictions apply.

Logged in to mydomain.co.kr.

ncftp / >

ncftp / > dir

drwxr-xr-x 6 root root 4096 Oct 22 23:06 .

drwxr-xr-x 6 root root 4096 Oct 22 23:06 ..

d--x--x--x 2 root root 4096 Aug 11 20:37 bin

d--x--x--x 2 root root 4096 Aug 11 20:37 etc

drwxr-xr-x 2 root root 4096 Aug 11 20:37 lib

drwxr-sr-x 3 root ftp 4096 Oct 16 09:22 pub

-rw-r--r-- 1 root root 56 Aug 30 01:36 welcome.msg

ncftp / > quit


You have not saved a bookmark for this site.

Would you like to save a bookmark to:

ftp://mydomain.co.kr


Save? (yes/no) yes

Enter a name for this bookmark, or hit enter for "super": super

Bookmark "super" saved.


위의 예에서는 mydomain.co.kr이란 서버로 접속을 한후에 "quit"이란 명령어로 빠져나오려 할 때 ncftp에서는 북마크가 되어있지 않으니 북마크를 하라는 메시지와 함께 "Save? (yes/no) yes"와 같이 저장할 의사를 묻고 있다.

"yes"를 입력하면 북마크로 사용할 이름을 입력받는다.

그냥 enter키를 치면 접속시에 사용했던 호스트네임으로 북마크를 해주며, 다른이름을 사용하려면 입력하는 그이름으로 북마크저장이 된다.

그럼, 이렇게 저장한 북마크를 어떻게 사용할까?

저장된 북마크로 다시 이 서버로 접속을 할 때에는 "open 북마크이름"으로만 하시면 북마크에 저장된 서버정보(IP-Address 또는 도메인)와 ID, 패스워드를 사용하여 자동접속을 해준다.
2009/05/05 05:37 2009/05/05 05:37
ping은 회선의 속도를 체크 해주는 좋은 명령어지만, 악용을 했을경우 서버에 많은 피해를 줄 수 있습니다.
실질적으로 서버의 이용자 ID를 해킹하는 형식의 해킹이 있기도 하지만 해킹의 종류에는 서비스를 하지 못하도록
하거나 혹은 서비스 이용에 지장을 주도록 하는 해킹도 있습니다.

'ping공격'이라고 일컬어지는 이 해킹방법은 서버에 부하를 계속적으로 줌으로써, 서비스의 이용에 지장을
주도록 할 확률이 높습니다.

'ping 공격'을 막기 위해서는 다음과 같이 프롬프트상에서 작성해주시면 됩니다.
# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all     //ping 막기
# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all     //ping 열기
2009/05/05 05:35 2009/05/05 05:35
netstat 를 이용하여 간단하게 현재 포트를 감시할수 있습니다.
(포트 스캐닝은 잘 알려져있듯이 크래커들이 쓰는 첫번째 방법입니다.)


시스템에서 현재 열려져 있는 포트 보여주기
#netstat -nlt
n : numeric - 주소를 보여줍니다.
l : listen - 열려진 포트
t : tcp - tcp 연결 상태

[user@mymachine /home/user]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

위와 같은 경우
즉, 80번(웹) -> 3306 (mysql) -> 22(ssh) 포트가 열려져있다는 것을 보여줍니다.

시스템에서 실제 활동중인 포트 보여주기
#netstat -nat
n : numeric - 주소를 보여줍니다.
a : active - 활동중인 포트
t : tcp - tcp 연결 상태

[user@mymachine /user]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 206.112.62.102:80 204.210.35.27:3467 ESTABLISHED
tcp 0 0 206.112.62.102:80 208.229.189.4:2582 FIN_WAIT2
tcp 0 7605 206.112.62.102:80 208.243.30.195:36957 CLOSING
tcp 0 0 206.112.62.102:22 10.60.1.18:3150 ESTABLISHED
tcp 0 0 206.112.62.102:22 10.60.1.18:3149 ESTABLISHED
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN

3개의 웹 연결과 2개의 ssh 연결을 보여주고 있습니다.

FIN_WAIT2와 CLOSING 및 netstat 의 또 다른 기능은 man netstat을 참조하세요.
2009/05/05 05:34 2009/05/05 05:34

서브 디렉토리 전송하기

ncftp 사용법.

자동이어받기 기능.
명령어 자동완성 기능.

서브디렉터리 전송.

접속이 되지 않을때 자동 재접속.

리모트 경로 표시.

전송량 표시.

ncftp의 기본 전송 모드는 binary이다.
나머지 명령어는 유닉스 명령어와 비슷하다.

화살표 위아래키는 bashhistory 기능처럼 전에 입력했던 내용을 왔다갔다 할 수 있다.

ncfpt> open -u marine6309 -p 1234 -P 2121 localhost
            marine6309란 사용자가 비밀번호 1234로 2121포트로 로컬호스트에 접속한다.

ncftp> get 1.txt 2.txt 3.txt

ncftp> get *.txt

ncftp> get -z ReadMe.txt README
           ReadMe.txt를 README로 저장한다.

ncftp> get -R test
           test라는 폴더를 전체 다운로드 한다.

ncftp> bgget -@ 20040616235000 /pub/idstuff/quake/q2_100.zip
           2004년06월16일 23시50분00초에 위 파일을 백그라운드로 다운로드 한다.
           이는 daemon에서 이루어지기 때문에, logoff를 한다해도 계속 전송이 된다.
           이런 명령의 경우에는 save-passwords가 yes로 setting되어야 한다.

 
ncftp> bgstart
           위에서 예약된 작업을 바로 시작하는 명령이다.

ncftp> set save-passwords  yes
           현재 접속된 암호를 저장한다.

ncftp> jobs
           background에서의 일어나는 작업을 알려준다.(unix명령과 비슷)
 
ncftp> bookmark local
           현제 세션을 저장하고 나주에 재사용 할 수 있다. 각종 설정 모두를 기억한다.
           처음 접속시 종료하기 전에 북마크 할 것인지 물어본다. 여기서 설정해 주면 된다.
           패스워드는 암호화되어 저장되기 때문에 너무 걱정할 필요는 없다.

ncftp> set
          set 명령어로 클라이언트 환경을 설정할 수 있다.

ncftp> show
          현재 상태를 볼 수 있다.


ncftpget,  ncftpput

ncftpget -u아디 -p암호 접속할ftp서버 받을곳 받을파일
ex) ncftpget -uxxxx -pxxxx xxx.xxx.xxx.xxx . /upload/backup/*
      xxx.xxx.xxx.xxx/upload/backup 파일을 현재 내가 있는 곳으로 받아온다는 뜻

ncftpput -u아디 -p암호 접속할ftp서버 올릴곳 올릴파일
ex) ncftpput -uxxxx -pxxxx xxx.xxx.xxx.xxx /upload/ /tmp/backup
      xxx.xxx.xxx.xxx/upload 에 /tmp/backup 라는 파일을 올린다는 뜻이된다.

2009/05/05 05:33 2009/05/05 05:33
유닉스나 리눅스에는 vi 또는 vim (빔) 이라는 이름의 "텍스트 파일 편집기" 즉 에디터가 이미 설치되어 있습니다. 따라서 예를 들어, 현재 디렉토리에 있는 test.txt 파일을 열려면

vi test.txt

또는

vim test.txt

라고 하면 됩니다. 000 이라는 이름의 하위 디렉토리(폴더)에 있는 파일을 열려면

vi 000/test.txt

이렇게 합니다. 대소문자를 엄격히 구분합니다. 그런데 유닉스의 빔 에디터는 윈도우용 에디터와 달리 사용법이 좀 까다롭습니다.
2009/05/05 05:23 2009/05/05 05:23
워드랩이란 다음과 같습니다: 너무 길어서 화면에 전부 표시할 수 없는 줄을 처리할 때는 2가지 방법이 있습니다. 화면 우측으로 넘치는 부분을 아예 표시하지 않는 것과, 다음줄로 자동으로 줄바꿈을 하여 표시하는 것입니다. 후자를 워드랩 Word Wrap 이라고 합니다.

Vim 이나 Vi 에디터에서 워드랩을 하는 명령은 wrap 이고, 워드랩을 해제하는 명령어는 nowrap 입니다. 앞에 set 을 넣어야 작동합니다. 다음과 같습니다. 현재 편집 중인 텍스트 파일에 긴 줄이 없다면 차이점이 보이지 않을 것입니다.

set wrap

set nowrap

set 은 se 로 줄여서 쓸 수도 있습니다.


위의 명령어들은 원래 Vim 에만 있고 Vi 에는 없습니다. 그러나 현재 사용되는 VI 는 Vim 과 동일하기에 상관없습니다. 다만 오래된 유닉스에 설치되어 있는 진짜 VI 에디터에서는 먹히지 않는 명령입니다.
2009/05/05 05:23 2009/05/05 05:23
리눅스나 유닉스의 파일 지우기 명령인 rm 에서 특정 확장자의 파일들만 한꺼번에 지우려면, 즉 특정 확장자를 지정하여 파일을 삭제하려면 "별표(*) 와일드 카드"를 사용하면 됩니다. 예를 들어 아래와 같이 하면

rm *.txt

현재 디렉토리에 있는 모든 .txt 확장자를 가진 파일들만 삭제되고, 다른 확장자를 가진 파일들은 그대로 있습니다. 여기서 별표(애스터리스크)는 "확장자가 아닌 부분의, 임의의 파일명 전체"를 의미합니다.


이중확장자의 파일도 있습니다. 가령 .tar.bz2 라는 이중확장자를 가진 파일을 모두 지우되

.bz2 라는 확장자의 파일은 남겨 두려면

rm *.tar.bz2

이렇게 하면 됩니다.


.bz2 로 끝나는 모든 파일을 다 지우려면

rm *.bz2

이렇게 합니다.
2009/05/05 05:22 2009/05/05 05:22
유닉스나 리눅스의 문자열 찾기 명령인 grep 에서, 대소문자 구분 없이 문자열을 찾으려면 -i 옵션을 사용하면 됩니다.

마이너스 기호 + 알파벳 소문자 아이(i)입니다. 윈도우와 달리, 유닉스 명령어 자체나 명령어의 옵션은 항상 대소문자를 엄격히 구분합니다.

예를 들어

grep foo *.txt

이렇게 하면 현재 디렉토리의 모든 txt 확장자 파일들에서 foo 라는 문자열을 찾지만, FOO 나 Foo 또는 fOO 등은 찾지 않습니다.


이때

grep -i foo *.txt

이렇게 해주면 FOO / Foo / fOO 등도 모두 찾습니다. 대소문자의 구분이 없이 찾게 되는 것입니다.


위에서의 소문자 i 는, "ignore(무시) case(대소문자)"에서의 첫글자 i에서 온 것입니다.
2009/05/05 05:22 2009/05/05 05:22
유닉스, 리눅스 운영체제의 문자열 찾기 명령어인 grep 을 윈도우2000이나 윈도우XP 이상에서도 사용할 수 있습니다. 중요하고 유용한 명령어이기 때문입니다.

윈도우의 도스창 즉 CMD에서 FINDSTR 이라는 명령을 사용하면, 사실상의 grep을 사용할 수 있습니다.

findstr /?

이렇게 하면 도움말이 나옵니다.

그렇지만 윈도우의 findstr 은 grep 과 완전히 같지는 않고 엉성하게 만들어진 것입니다. 짝퉁이라고 보아도 좋을 것입니다.

윈도우에서 진짜 grep 을 사용하는 방법이 있습니다. 윈도우에 Cygwin(시그윈)을 설치하는 것입니다. 시그윈은 무료이고 리눅스와 같은 오픈소스이기에 부담없이 사용할 수 있습니다. grep.exe 가 시그윈 안에 들어 있습니다.

시그윈을 윈도우에 설치하고 CMD 도스창에서 grep 이라고 치면 진짜 오리지날 grep 을 윈도우에서도 사용할 수 있습니다.
2009/05/05 05:22 2009/05/05 05:22
Vim, Vi 에디터에서 텍스트 특정 구역을 블럭으로 잡아서 복사한 후, 다른 곳에 붙여 넣는 방법입니다. 현재, 문서를 편집 중이라면 Esc키를 한번 누릅니다.

* 소문자 v (브이) 키를 누릅니다.

* 상하좌우 화살표키를 눌러, 선택영역 블럭 즉 셀렉션을 잡아줍니다.

* 소문자 y (와이) 키를 누릅니다. 이것이 텍스트 복사 핫키입니다.

* 이제 Vim 에디터 화면을 스크롤하여, 방금 복사한 텍스트를 붙여 넣을 장소로 이동합니다.

* 소문자 p (피) 키를 눌러 붙여 넣습니다.


위의 경우는 행을 기준으로 복사하고 붙여넣기 방법입니다.

사각형 박스 모양으로 칼럼 블록을 잡거나 하는 방법은 다음 페이지에 있습니다:
2009/05/05 05:21 2009/05/05 05:21
리눅스나 유닉스에서 메시지 출력을 일시 중지시키려면 키보드의 Scroll Lock키를 누르면 됩니다. 한번 더 누르면 출력이 계속됩니다. 그런데 배포판에 따라서 다를 수도 있습니다. 우분투 리눅스에서는 확실히 됩니다. (MS-DOS에서는 "Pause Break" 키를 누르면 일시 중지되었습니다.)

메세지 출력을 완전히 중단시키려면 Ctrl+C키를 누르면 됩니다. Ctrl키를 누르면서 C키를 누르는 것입니다.


한편, 화면 출력을 한 페이지씩 나누어 출력하는 방법은 아래와 같습니다. 이 방법을 쓰는 것이 가장 좋습니다.

* 어떤 명령어 뒤에, 파이프 기호인 "|"를 찍습니다. 수직선 기호입니다. 키보드의 백슬래시 기호(한글 키보드에서는 원화 기호)인 "\" 이것을 Shift키와 함께 누르면 파이프 기호가 찍힙니다.

* 그런 후, 그 뒤에 소문자로 less 라는 명령어를 덧붙이면 됩니다.

* 예를 들어 ls 명령어의 도움말을 보기 위해 ls --help 이런 명령을 주면 메세지가 한꺼번에 출력되어 잘 읽을 수 없습니다. 이럴 때는 아래 빨간 부분인 | less 를 끝에 붙여 주면 "한 페이지씩" 나누어서 출력됩니다.

ls --help | less


* 엔터 키를 누르면 한 줄씩 스크롤되고, q (큐) 키를 누르면 즉시 프롬프트로 빠져 나갑니다.

* 오래된 유닉스에는 less 명령이 없을 것입니다. 이때는 more 명령을 대신 사용하면 됩니다.
2009/05/05 05:21 2009/05/05 05:21
VI 또는 Vim 에디터에서, 현재 문서를 "다른 이름으로 저장" 즉 "새 이름으로 저장"하는 명령어는 :w <파일명> 입니다.

* 문서를 현재 입력중이라면, 키보드의 Esc키를 누릅니다.

* 예를 들어 원본 파일명이 test.txt 일 때,

:w test2.txt

이런 명령을 사용하면, 현재 문서가 test2.txt 라는 새 이름으로 저장됩니다.


주의 사항:
위의 경우 test2.txt 라는 파일이, 원본 파일인 test.txt 가 있는 디렉토리와 다른 디렉토리에 저장될 수도 있습니다.

:pwd
라는 명령을 사용하면 Vim, Vi 내부의 현재 디렉토리명을 볼 수 있습니다. 그 디렉토리에 저장되어 있을 것입니다.


그리고 이미 test2.txt 라는 파일이 하드에 존재한다면 다른 이름으로 저장이 되지 않고 E13: File exists (add ! to override) 라는 에러가 납니다. 파일이 이미 존재합니다. 덮어쓰려면 ! 느낌표를 붙이세요 라는 뜻입니다.

이때는
:w! test2.txt
w 뒤에 !(느낌표)를 붙이면 강제로, 새 이름으로 저장됩니다.
2009/05/05 05:21 2009/05/05 05:21
Unix나 리눅스에서 echo 명령으로 특수문자를 출력할 때에는, 반드시 그 출력하려는 문자열 전체를 작은따옴표(') 즉 홑따옴표로 둘러싸 주어야 합니다. 예를 들어 샤프 기호(#; 우물 정자)를 출력하려면

echo '#'

이렇게 하면 됩니다.

그런데 작은따옴표 자체를 출력하기 위해서는, 그 작은따옴표를

\047

이라는 코드로 바꾸어서 입력해야 합니다. 또한 echo 명령에 -e 라는 옵션도 붙여 주어야 합니다. 예를 들어, "늦어서 미안해요"라는 영문장을

I'm sorry. I'm late.

이렇게 작은따옴표(여기서는 아포스트로피 apostrophe 로 사용되었음)를 넣어서 출력하려면

echo -e 'I\047m sorry. I\047m late.'

이렇게 입력하면 제대로 출력됩니다.
2009/05/05 05:20 2009/05/05 05:20
리눅스에서는 halt 명령을 사용하면 시스템을 종료할 수 있습니다.

그런데 시그윈 Cygwin 은 진짜 리눅스가 아니고, 도스상에서 실행되는 가상 유닉스 시스템이기 때문에, halt 명령이 아닌 exit 명령을 사용해야만 종료가 됩니다. 또는 exit 대신에 logout 이라는 명령을 사용할 수도 있습니다.

또한 시그윈에서도 리눅스에서처럼 Ctrl+D키를 누르면 끝내기를 할 수 있습니다. 그러면 logout 이라는 문자열이 출력되면서 시그윈이 종료되고 도스 프롬프트로 빠져나올 것입니다.

업데이트:
소문자 q 도 되는군요.


한편 시그윈에는 리부팅하는 reboot 명령은 없습니다. 시그윈을 리부팅하려면 exit 명령으로 종료를 하고 나서, 시그윈을 다시 실행하면 됩니다.



시그윈을 언인스톨 즉 윈도우에서 완전히 제거하려면, 자동 언인스톨 기능이 없기 때문에 다음과 같이 수동으로 삭제해 주어야 합니다:
2009/05/05 05:20 2009/05/05 05:20
유닉스나 리눅스의 프롬프트에서, 별표(*; 백설표) 기호, 즉 애스터리스크(Asterisk) 문자 같은 특수문자를 찾으려면 그 문자를 작은따옴표('')로 둘러싼 후 검색을 하면 찾아집니다. 예를 들어

grep '*' *.txt

이렇게 하면, "모든 텍스트 확장자 파일"을 의미하는 *.txt 에서, grep이 별표가 들어 있는 파일 목록을 찾아줍니다.

grep '\*' *.txt

또는

grep \* *.txt

이렇게 백슬래시(\) 문자를 별표 앞에 붙여도 됩니다. 그렇지만 첫번째 방법이 가장 좋을 것입니다.


별표뿐만이 아니라, grep에서 파일 속의 문자열을 검색할 때는 그 문자열을 작은따옴표 즉 홑따옴표로 둘러싸 주어야 문제 없이 제대로 작동합니다.
2009/05/05 05:20 2009/05/05 05:20
유닉스나 리눅스의 프롬프트에서 텍스트 파일을 만드는 방법입니다. 우선, 0바이트짜리 파일 즉, 아무것도 들어 있지 않은 빈 파일을 간단한 방법으로 만들려면

>test.txt

이렇게 하면 "현재 디렉토리"에 test.txt 라는 파일명의 빈 파일이 생성됩니다. 새롭게 생성할 파일명 앞에 > 기호를 붙이는 것입니다.

다만, test.txt 라는 이름의 파일이 이미 "현재 디렉토리"에 있다면 그 파일의 내용이 날아가 버리기에 주의가 필요합니다. 즉 덮어쓰기가 됩니다.


그러나 vi 나 vim 에디터로 파일을 만드는 것이 가장 좋습니다. 자신의 시스템에 보면 vi 또는 vim 이라는 명령어가 있을 것입니다. 예를 들어

vi tt.txt

라는 명령을 실행하면, 현재디렉토리에 tt.txt 라는 파일이 없다면 새롭게 만들고, 있다면 tt.txt 라는 파일을 편집할 수 있습니다.

vi 에디터에서 소문자 아이(i) 키를 눌러 tt.txt 라는 파일에 글자를 적고, vi 에서 Esc키를 누른 후

:wq

라는 명령을 실행하면, tt.txt 파일의 내용이 하드에 저장되고, vi에서 빠져나와 다시 프롬프트로 돌아올 수 있습니다. 이런 식으로 텍스트 파일을 만들면 됩니다.
2009/05/05 05:19 2009/05/05 05:19

리눅스나 유닉스에서 tar.bz2 파일을 푸는 방법입니다. 그런데 윈도우에서는 tar 명령이 없기 때문에, WinRAR(윈라) 등의 프로그램을 설치하여 풀면 됩니다. 물론 Cygwin(시그윈)을 설치하면 윈도우의 도스창(CMD)에서도 tar 명령을 사용할 수 있습니다.

리눅스 프롬프트에서, tar.bz2 파일 압축 풀기는 다음과 같이 합니다.
tar -xvf <파일명>

예를 들어 test.tar.bz2 라는 파일을 풀려면 다음과 같이 합니다.
tar -xvf test.tar.bz2


tar.bz2 파일을 풀지 않고, 그 안에 무엇이 들어 있는지 목록만 보려면 다음과 같은 명령을 사용하면 됩니다.
tar -tvf <파일명>

예를 들어 test.tar.bz2 라는 파일 내용을 보려면 다음과 같이 합니다.
tar -tvf test.tar.bz2


그런데 tar 라는 명령은 사실은 파일을 압축하거나 푸는 명령이 아닙니다. 여러 개의 파일을 1개의 파일로 묶어주는 기능만 합니다. 실제 압축은 bzip2 라는 명령이 내부적으로 압축을 수행합니다.

2009/05/05 05:18 2009/05/05 05:18
Vim 이나 Vi에디터에서 여러 창을 열어서 동시에 편집할 때에, 각 창의 크기를 변경하려면 다음과 같이 합니다.

우선 여러창 중에서 어떤 창의 크기를 조절할지 선택해야 합니다. Ctrl+ww 핫키를 눌러서 창을 점프하면서 특정 창을 선택합니다.

Ctrl+ww

위의 핫키는 Ctrl키를 누르면서 w 키를 누르고, 다시 w키를 누르는 것입니다.


창 사이즈 확대하기:

Ctrl+w+
즉, Ctrl키를 누르면서 소문자 w 키를 누른 후, 플러스 기호(+) 키를 누르면 "현재 창" 사이즈가 1줄 확대됩니다.


창 사이즈 축소하기:
Ctrl+w-
즉, Ctrl키를 누르면서 소문자 w 키를 누른 후, 마이너스 기호(-) 키를 누르면 "현재 창" 크기가 1줄 축소됩니다.

키보드 우측 키패드에 있는 플러스 마이너스 키를 누르는 것이 좋습니다.
2009/05/05 05:18 2009/05/05 05:18
유닉스에서 파일을 지우려면, rm 명령어를 사용하면 됩니다. 만약 rm 명령어가 없는 경우에는 unlink 라는 명령을 사용하면 됩니다. "unlink"도 파일을 지운다는 뜻입니다.

예를 들어 "현재 디렉토리"에 있는 test.txt 라는 텍스트 파일을 삭제하려면

rm test.txt

이렇게 합니다. 또는

unlink test.txt

이렇게 해도 됩니다.

예를 들어 .tmp 라는 확장자를 가진 모든 파일들을 한꺼번에 지우려면 다음과 같이 별표(*) 와일드카드를 사용하여 파일명 부분을 대체해 주면 됩니다.

rm *.tmp

위의 명령을 실행하면, 현재 디렉토리에서 .tmp 라는 확장자로 끝나는 파일들만 모두 삭제됩니다.
2009/05/05 05:17 2009/05/05 05:17