'개발/시스템'에 해당되는 글 8건

  1. 2012.11.08 특정프로세서 죽이는 스크립트 [출처] 특정프로세서 죽이는 스크립트|작성자 Nams
  2. 2009.07.28 [리눅스/솔라리스] 유닉스 혹은 리눅스용 커맨드 팁 모음입니다..
  3. 2009.04.09 unix find 명령어
  4. 2009.03.27 #### Linux_명령어 모음 (아주 잘 나와있음)#### 강추!!! 6
  5. 2009.03.16 대충의 JBoss-4.2.3 GA 릴리즈 노트 정리
  6. 2009.03.16 JBoss 5.0.0 변경 내역
  7. 2009.03.10 JBoss 설정하기
  8. 2009.01.09 netstat의 TCP 연결 상태 의미
2012. 11. 8. 10:53

특정프로세서 죽이는 스크립트 [출처] 특정프로세서 죽이는 스크립트|작성자 Nams




test 프로세스 모두 죽이기 제1안
  # kill -9 `ps -ef | grep test | awk '{print $2}'`

test 프로세스 모두 죽이기 제2안
  # ps -ef | grep test | grep -v grep | awk '{print "kill -9",$2}' | sh -v

test 프로세스 모두 죽이기 제3안
  # killall -KILL test

test 프로세스 모두 죽이기 쉘 스크립트 
  #!/bin/sh
  for PID `ps -ef | grep test | grep -v grep | awk '{print $2}'`
  do
  kill -9 $PID
  done

test User로 실행 되어지는 모든 프로세스 죽이기
  # kill -9 `ps -ef | awk '$1=="test" {print $2}'`

2009. 7. 28. 13:12

[리눅스/솔라리스] 유닉스 혹은 리눅스용 커맨드 팁 모음입니다..




유닉스 혹은 리눅스용 커맨드 팁 모음입니다.
  1. 서브 디렉토리까지 파일안의 문자열 모두 검색
  2. haha와 huhu가 동시에 들어있는 행 뽑기
  3. 찾아서 지우기
  4. 공사중에 로그인 막기
  5. 크기가 가장 큰 파일, 디렉토리 찾기
  6. 가장 큰 파일을 찾으려면
  7. 현재 디렉토리의 크기만을 파악할때
  8. 시스템 정보 감추기
  9. 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
  10. FTP로 들어온 사용자 확인하기
  11. 원하지 않는 사용자 죽이기
  12. less 결과를 vi로 보기
  13. vi에서 블럭 설정하기
  14. man 페이지 프린트하기
  15. ping 무시하기
  16. LILO 다시 살리기
  17. 특정 사용자 ftp 접근 막기
  18. X 윈도우에서 TV보기
  19. ls라는 파일이 포함된 rpm패키지 찾기
  20. 현재 rpm패키지의 의존패키지
  21. 현재 디렉토리크기
  22. 바로 이전 디렉토리로 가기
  23. 프로세스명으로 프로세스 죽이기
  24. 하드웨어 시계맞추기
  25. 원격에서 리모트서버의 X application실행시
  26. 링크 파일
  27. ^M 문자 없애기
  28. 비어있는 행을 찾기
  29. 기타 명령어 떼
  30. 각자가 사용하는 컴퓨터의 정보를 알고 싶을때
  31. 전체 메일
  32. 디렉토리만 빠르게 검색
  33. 호스트 네임 바꾸기
  34. 틀린명령어 틀린글자만 바꿔서 실행
  35. 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
  36. 열려있는 포트 알아내기
  37. 텔넷 모든 접속자에게 메세지 보내기
  38. lsof는 열려있는 파일을 나타내 주는 옵션
  39. 사용자가 어디에서 무엇을 하는지 알아내기
  40. 텔넷 화면 수정
  41. 하위 디렉토리 한꺼번에 만들기
  42. 특정디렉토리의 모든 파일 안의 특정 문자열 치환
  43. killall 명령 시뮬레이션 (프로세스명으로 죽이기)
  44. find와 grep
  45. vi 검색, 치환
  46. 파일내의 중복되는 행을 제거 : uniq
  47. 파일의 결합
  48. 파일의 암호화 : crypt
  49. 개행을 제외한 화면내의 보이지 않는 문자 출력
  50. 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기
  51. 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기
  52. 어제 날짜 구하기
  53. 원하지 않는 사용자 죽이기
  54. UNIX상에서 한글출력이 깨져 나올경우
  55. 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기



0.0.0.1 서브 디렉토리까지 파일안의 문자열 모두 검색

find ./ -name "*" -exec grep 'abc' {} \; -print 

find . -name -print -exec grep abc {} \;

grep -r abc *




0.0.0.2 haha와 huhu가 동시에 들어있는 행 뽑기

grep haha foo.txt | grep huhu 




0.0.0.3 찾아서 지우기

find / -name "*.eml" -exec rm -f {} \; 




0.0.0.4 공사중에 로그인 막기


시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠? 그럴 때는, /etc/nologin 이라는 파일을 만들어,공사중 또는 Under Construction이라는 공지를 넣으면 됩니다.


0.0.0.5 크기가 가장 큰 파일, 디렉토리 찾기

가장 큰 디렉토리를 찾으려면,  du -S | sort -n 


0.0.0.6 가장 큰 파일을 찾으려면

 ls -lR | sort +4n 


0.0.0.7 현재 디렉토리의 크기만을 파악할때

[root@dev2 local]# du -c -h --max-depth=0 * 

6.4M apache

35M bin

43M dns

1.7M doc

42k etc

1.0k games

42k geektalkd

1.1M gnuws

1.1M include

41k info

19M jakarta-tomcat-3.2.3

0 jre

15M jre118_v3

25M lib

62k libexec

1011k man

1.3M mm.mysql.jdbc-1.2c

937k sbin

3.8M share

1.8M shoutcast-1-8-3-linux-glibc6

5.2M ssl

159M total




0.0.0.8 시스템 정보 감추기

/etc/inetd.conf 파일을 열어서,

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 




0.0.0.9 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기

ps -aux | sort +4n  또는 ps -aux | sort +5n 


0.0.0.10 FTP로 들어온 사용자 확인하기

 ftpwho,ftpcount 


0.0.0.11 원하지 않는 사용자 죽이기

 [root@dream /root]# skill -KILL sunny 
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는
 [root@dream /root]# skill -KILL -v pts/14 
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.


0.0.0.12 less 결과를 vi로 보기

less상태에서 v를 누르면 바로 vi로 감


0.0.0.13 vi에서 블럭 설정하기

alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.
블럭을 설정 하신 뒤,
삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p


0.0.0.14 man 페이지 프린트하기

 man -t vi > vi.ps 


0.0.0.15 ping 무시하기

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all




0.0.0.16 LILO 다시 살리기

 boot : vmlinuz root=/dev/hda6 


0.0.0.17 특정 사용자 ftp 접근 막기


/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.


0.0.0.18 X 윈도우에서 TV보기

리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다. 이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합 니다. 만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -> Video For Linux -> BT848 Video For Linux 항목을 모듈화 시키거나 커널에 포함하십시오.
TV 카드를 리눅스에 인식시키기 위해서 /etc/conf.modules 파일에 다음과 같은 내용을 삽입하고 컴퓨터를 다시 시작합니다.

alias char-major-81 bttv 

# 필립스 튜너의 경우 pre-install bttv modprobe -k tuner

# 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9


이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.


0.0.0.19 ls라는 파일이 포함된 rpm패키지 찾기

일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.

rpm -qf /bin/ls 

[root@piruks /etc]# which ls

/bin/ls

[root@piruks /etc]# rpm -qf /bin/ls

fileutils-4.0i-2mz




0.0.0.20 현재 rpm패키지의 의존패키지

 rpm -qR 패키지명 


0.0.0.21 현재 디렉토리크기

 du -h --max-depth=1 . 


0.0.0.22 바로 이전 디렉토리로 가기

 cd - 


0.0.0.23 프로세스명으로 프로세스 죽이기

killall 프로세스명 

kill -9 `pidof 프로세스명




0.0.0.24 하드웨어 시계맞추기

배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다.

[root@dev /down]# rdate -s time.kriss.re.kr 

[root@dev /down]# clock -w




0.0.0.25 원격에서 리모트서버의 X application실행시

X윈도 app를 실행할때 다음과 같은 에러가 나면 조치

[kang@dev /home/kang] xclock 

Xlib: connection to "211.222.186.170:0.0" refused by server

Xlib: Client is not authorized to connect to Server

Error: Can't open display: 211.222.186.170:0.0



export DISPLAY=211.222.186.170:0

xhost +211.222.186.170




0.0.0.26 링크 파일

ln -sf 링크할디렉토리 링크로 만들어질 디렉토리  참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음.  ln -sf /www/dir_1/r_photo /www/dir_2/r_photo 


0.0.0.27 ^M 문자 없애기

a = 1^M 

def vartest(a):^M

a = a + 1^M

return a^M

a = vartest(a)^M

print a^M

Unix류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 MJ 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로 받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면


    줄 끝마다 보기싫은 ^M이 붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.)


PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다.
위는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠. 하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠. 명령은  :%s/(ctrl+v)M//g  입니다.  (ctrl+v)M  이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로 m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은  %s/이것을/요걸로/g  입니다 그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠. 단, M의 경우 ctrl+M의 뜻인데 단순히 문자로 M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼  (ctrl+v)M  으로 해주셔야 합니다.


0.0.0.28 비어있는 행을 찾기

 #grep -n '^$' filename  정규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자

[...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도 사용 

[^..] .. 안에 없는 임의의 한 문자. 범위 사용가능

r* 0회 이상 r 반복

r+ 1회 이상 r 반복

r? 0 혹은 1회의 r

r{n,m} n회 이상 m회 이하 r 반복

r1|r2 r1 혹은 r2 (egrep 만)

(r) r 의 정규표현(egrep 만)




0.0.0.29 기타 명령어 떼

alias(명령어 간소화하기) 

apropos(관련된 명령어 찾기)

arch(컴퓨터 종류 알기)

arp(같은 서브넷의 IP 보여주기)

at(작업 시간 정하기)

atd(계획성 있는 작업 실행하기)

awk(특정 패턴 문자 처리하기)

a2p(펄 파일로 바꾸기)

badblocks(배드 블럭 검사하기)

bc(계산기)

biff(메일 수신 소리로 확인하기)

bg(후면작업; 배경화면 설정)

bind(키나 함수 순서 결합하기)

break(루프 빠져나가기)

cal(달력보기)

builtin(내부 명령어 알아보기)

case(조건 처리하기)

cat(화면상에서 파일 보기)

cd(디렉토리 변경하기)

cfdisk(디스크 설정하기)

chattr(파일 속성 변경하기)

chfn(사용자 정보 변경하기)

chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)

chmod(파일 권한 바꾸기)

chown(파일 주인 바꾸기)

chsh(지정된 셸 바꾸기)

cksum(CRC값을 점검한다)

clear(화면 청소하기)

clock(CMOS 시각을 조정하기)

cmp(파일 비교하기)

colcrt(문자 변환 필터)

colrm(열 삭제하기)

column(가로 정렬하기)

comm(파일 비교 출력하기)

command(명령어 알아보기)

continue(루프 계속돌기)

cp(파일 복사하기)

cpio(복사본 만들기)

crontab(cron을 관리한다)

csplit(파일에 서식, 규칙 정하기)

cut(필요한 필드만 출력하기)

date(날짜 보기)

dd(블럭장치 읽고 쓰기)

debugfs(ext2 파일 시스템 디버깅하기)

declare(변수 선언하기)

df(파일 시스템의 사용량 보기)

dirs(디렉토리 목록 표시하기)

dmesg(부팅 메시지 보기)

dnsdomainname(DNS 이름 출력)

domainname(NIS 이름 출력&설정)

du(디렉토리와 파일의 용량 파악하기)

dumpe2fs(파일 시스템 정보 보기)

echo(표준 출력하기)

eject(장치 해제하기)

elm(메일 관련)

enable(내부 명령어 지정)

env(환경변수 출력하기)

eval!(인수 읽기)

exec(셸 명령어 실행하기)

exit(종료하기)

expand(탭을 공백으로 변환하기)

export(변수 지정하기)

e2fsck(파일 시스템 복구하기)

fc(지정된 편집기 받기)

fdformat(플로피 디스크 포맷하기)

fdisk(파티션 나누기)

fg(지정된 작업을 전면 프로세스로 시작하기)

file(파일 종류 보기)

find(파일 찾기)

finger(사용자 정보 알기)

fold(정형화하기)

fmt(정형화하기)

for(반복 실행하기)

free(메모리 사용량 알아보기)

fsck(파일 시스템 검사하기)

fstab(파일 시스템에 대한 고정적인 정보 저장하기)

ftp(파일 전송 프로그램)

fuser(프로세스 ID 출력)

getkeycodes(매핑 테이블 출력하기)

grep(특정 문자(열) 검색하기)

gzexe(실행 파일 압축하기)

gzip(압축하기)

halt(시스템 종료하기)

hash(기억해 두기; index 역할)

head(파일의 앞부분 출력하기)

help(도움말 보여주기)

host(호스트 정보 보기)

history(사용 명령어 목록보기)

hostname(서버 이름 알기)

id(계정 정보 알기)

if(조건문 실행하기)

ifconfig(랜카드에 주소 할당하기)

imolamod(모듈 설치하기)

inetd(인터넷 서비스의 최상위 데몬)

init(실행 단계 정하기)

ispell(철자법 검사하기)

jobs(수행중인 프로세스 알기)

kbd_mode(키보드 모드 출력하기)

kill(프로세스 죽이기)

klogd(커널 로그 데몬)

ldd(공유 라이브러리의 의존성 알기)

less(페이지 단위로 출력하기)

let(정규식 표현하기)

lilo(부팅하기)

ln(링크하기)

locate(패턴에 맞는 파일 찾기)

login(로그인하기)

logger(시스템 로그 기록하기)

logname(사용자 로그인명 보여주기)

logout(로그인 셸 종료하기)

look(특정 단어 검색하기)

losetup(중복 장치 확인하기)

lpd(프린트 데몬)

lpq(현재 프린트 작업 상태 출력하기)

lpr(출력하기)

lprm(대기열에 있는 문서 삭제하기)

ls(디렉토리 내용보기)

lsattr(파일 시스템의 속성 보여주기)

lsdev(하드웨어 장치 출력하기)

lsmod(모듈 정보 출력하기)

mail(메일 관련)

make(컴파일하기)

man(매뉴얼 보기)

mattrib

mbadblocks

mcd

mcopy

mdel

mdeltree

mdir

mesg(메시지를 받을 수 있는지 확인하기)

mformat

minfo

mkdir (디렉토리 만들기)

mke2fs(파일 시스템 생성하기)

mkfs(파일 시스템 만들기)

mknod(특수 파일 만들기)

mkswap(스왑 영역 지정하기)

mlabel

mmd

mmount

mmove

mpartition

mount(장치 연결하기)

more(화면 단위로 출력하기)

mrd

mren

mtoolstest

mtype

mutt(메일 관련)

mv(파일 옮기기)

mzip

netstat(현재 네트웍 상황 보기)

nice(프로세스 우선 순위 변경하기)

od(8진수로 파일 보기)

passwd(암호 입력하기)

pidof(실행중인 프로그램의 프로세스 ID 찾기)

pine(메일 관련)

ping(네트웍 확인하기)

popd(pushd 취소)

ps(프로세스 상태 알기)

pstree(프로세스 상관관계 알기)

pwd(절대경로 보여주기)

quota(디스크 한계량 알기)

rarp(rarp 테이블 관리하기)

rcp(원격 호스트에 파일 복사하기)

rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)

rdate(네트웍으로 시간 설정하기)

reboot(재부팅하기)

rmmod(모듈 지우기)

readonly(읽기 전용으로 표시하기)

renice(프로세스 우선 순위 바꾸기)

reset(터미널 초기화하기)

restore(다시 저장하기)

rlogin(바로 접속하기)

rm(파일 지우기)

rmdir (디렉토리 지우기)

route(라우팅 테이블 추가/삭제하기)

rpm(프로그램 추가/삭제)

rpm2cpio(rpm을 cpio로 변환하기)

rsh(원격으로 명령어 실행하기)

rup(호스트 상태 출력하기)

rusers(호스트에 로그인한 사용자 출력하기)

rwall(호스트 사용자에게 메시지 뿌리기)

script(기록하기)

set(변수값 설정하기)

setup(시스템 관련 설정하기)

showmount(호스트의 마운트 정보 보여주기)

shutdown(전원 끄기)

sleep(잠시 쉬기)

source(스크립트 번역하기)

split(파일 나누기)

ssh(암호화된 원격 로그인하기)

stty(터미널라인 설정 보여주기)

su(계정 바꾸기)

suspend(셸 중단하기)

swapoff (스왑 해제하기)

swapon(스왑 활성화하기)

sync(버퍼 재설정하기)

syslogd(로그인 과정 설정하기)

tac(거꾸로 보기)

tail(문서 끝부분 출력하기)

talk(이야기하기)

tar(파일 묶기)

tcpdchk(tcp wrapper 설정하기)

tcpmatch(네트웍 요청에 대해 예측하기)

tee(표준 입력으로부터 표준 출력 만들기)

telnet(원격접속하기)

test(테스트하기)

times(셸에서의 사용자와 시스템 시간 출력하기)

top(cpu 프로세스 상황 보여주기)

tr(문자열 바꿔주기)

true(종료 코드 리턴하기)

type(유형 보기)

ul(밑줄 처리해서 보여주기)

ulimit(제한하기)

umask(매스크 모드 설정하기)

umount(장치 해제하기)

unalias(별명 제거하기)

uname(시스템 정보 보기)

unexpand(공백 문자를 탭으로 변환하기)

uniq(중복된 문장 찾기)

useradd(사용자 계정 만들기)

userdel(계정 삭제하기)

usermod(사용자 계정정보 수정하기)

unset(설정 변수 해제)

uptime(시스템 부하 평균 보여주기)

users(로그인된 사용자 보여주기)

w(시스템에 접속한 사용자 상황 알아보기)

wait(프로세스 기다리기)

wall(모든 사용자에게 메시지 보내기)

wc(문자, 단어, 라인수 세기)

whatis(명령어의 간단한 설명보기)

while(루프 명령어)

who(사용자 알기)

write(콘솔 상에서 간단한 메시지 보내기)

xcopy(반복적으로 복사하기)

XFree86

ypchfn(NIS에서 사용하는 chfn 명령어)

ypchsh(NIS에서 사용하는 chsh 명령어)

yppasswd(NIS에서 사용하는 passwd 명령어)

zcat(압축 파일 보기)

zcmp(압축 파일 비교하기)

zforce(강제로 gz 만들기)

zgrep(압축 상태에서 grep 실행하기)

zmore(압축 상태에서 more 실행하기)

znew(.Z 파일을 .gz로 다시 압축하기)




0.0.0.30 각자가 사용하는 컴퓨터의 정보를 알고 싶을때

 [root ...]#more /proc/cpuinfo  위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며,  [root ...]#more /proc/meminfo  라고 치면 사용자의 메모리 정보를 볼수 있습니다.


0.0.0.31 전체 메일

먼저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요!  [ root@aromi /root]# vi nea  안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다.

 

:wq

[ root@aromi /root]#

만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다.

[ root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'` 

 [공지]->  라고 쓴 것은 보낼 메일의 제목입니다.  'cat /etc/passwd|gawk -F : '{print$1}''  ->먼저 cat으로 passwd파일의 첫번째 나오는 내용을 출력하라는 소리입니다. nea라는 텍스트파일을 메일의 내용으로 보내라는 내용입니다.


0.0.0.32 디렉토리만 빠르게 검색

 ls -al | grep "^d" 


0.0.0.33 호스트 네임 바꾸기

/etc/HOSTNAME file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트 네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다.

[ root@linux /root]# vi /etc/sysconfig/network 

NETWORKING=yes

HOSTNAME="linux"

GATEWAY=""

GATEWAYDEV=""

FORWARD_IPV4="yes"

바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다.


0.0.0.34 틀린명령어 틀린글자만 바꿔서 실행

 # ./configure --prefax=/usr/local/apache  앗, 틀렸습니다. prefax가 아니라 prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다.  # ^fax^fix^  라고 하면...  -> ./configure --prefix=/usr/local/apache  라고 됩니다..


0.0.0.35 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어

 [ root@aromi /root]# uname -a 


0.0.0.36 열려있는 포트 알아내기

 netstat -anp | grep LISTEN 


0.0.0.37 텔넷 모든 접속자에게 메세지 보내기

wall 내용...  Ctrl-D 


0.0.0.38 lsof는 열려있는 파일을 나타내 주는 옵션

여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠?


0.0.0.39 사용자가 어디에서 무엇을 하는지 알아내기

w라는 명령어를 사용하시면 된답니다. 이 때,  w [-s]  를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다.


0.0.0.40 텔넷 화면 수정

로그인화면:  /etc/issue.net  로그인후화면:  /etc/motd 


0.0.0.41 하위 디렉토리 한꺼번에 만들기

 mkdir -p music/koreanmusic/ost 


0.0.0.42 특정디렉토리의 모든 파일 안의 특정 문자열 치환

for i in $*; do 

sed "s/paper/PAPER/g" < $i > $i.new

mv -f $i.new $i

done



<chihwan.sh>



find ./(chihwan.sh를 포함하지 않는 디렉토리면) -type f -exec chihwan.sh {} \;




0.0.0.43 killall 명령 시뮬레이션 (프로세스명으로 죽이기)

ps aux | grep 프로세스명 | grep -v grep | awk '{ print $w }' | xargs kill -9 



  • 모든 프로세스 나열

  • 지정한 프로세스만 뽑아냄

  • grep 명령이 포함된 라인 제거

  • awk로 두번째 필드만 뽑아냄

  • xargs에 의해 걸러진 아이디로 죽임




0.0.0.44 find와 grep

find . -name "H20021115.*" -exec grep -l '...;........;110100' {} \;


0.0.0.45 vi 검색, 치환

구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 :%s/./\U&/g
모든문자->대문자 g/^$/d


0.0.0.46 파일내의 중복되는 행을 제거 : uniq

입력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면 동일한 행이 존재할 수 있음.
sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자] [입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력 -u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자' 만큼의 필드는 무시


0.0.0.47 파일의 결합

여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용

cat [파일명1] [파일명2] ... > [출력파일명] 

cat [파일명1] [파일명2] ... >& [출력파일명]

cat [파일명1] [파일명2] ... >> [출력파일명]

cat [파일명1] [파일명2] ... >>& [출력파일명]

cat - [파일명1], [파일명2] .. >> [출력파일명]

cat - [파일명1], [파일명2] .. >>& [출력파일명]





% cat > file1

파일명 : file1

^D

% cat > file2

파일명 : file2

^D

% cat file1 file2 > file3

% cat file3

파일명 : file1

파일명 : file2

%


행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합

 

paste [파일명1] [파일명2]..

paste -d리스트 [파일명1] [파일명2] ...

paste -s [-d리스트] [파일명]

d : 행간 결합시 행간 구분문자들의 리스트

s : 한파일의 연속되는 행을 결합



% cat > paste.data1

홍길동

이순신

김유신

% cat > paste.data2

부산

서울

대구

% paste paste.data1 paste.data2

홍길동 부산

이순신 서울

김유신 대구

% paste -d"\n" paste.data1 paste.data2

홍길동

부산

이순신

서울

김유신

대구

% paste -s -d"::\n" paste.data1

홍길동:이순신:김유신

%


두 파일을 동일한 필드 값에 따라 행 단위 결합 : join
관계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는 행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저 표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭, 개행문자가 기본, 연속적으로 나타날 경우 하나로 취급

% cat > join.data1 

98001:서원일:

98002:홍길동:

98003:김유신:

98004:이순신:

98010:이상관:

% cat > join.data2

부산:98001:441

울산:98002:89

대구:98003:99

서울:98004:120

김해:98010:44

% join -j1 1 -j2 2 -t: join.data1 join.data2

98001:서원일::부산:441

98002:홍길동::울산:89

98003:김유신::대구:99

98004:이순신::서울:120

98010:이상관::김해:44

% join -j1 1 -j2 2 -o 1.2 1.1 2.1 -t: join.data1 join.data2

서원일:98001:부산

홍길동:98002:울산

김유신:98003:대구

이순신:98004:서울

이상관:98010:김해

%




0.0.0.48 파일의 암호화 : crypt

파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용

% cat > crypt.data 

test test

안녕하십니까?

^D

% crypt <crypt.data > crypt.data1

Enter key: hello

% ls -l crypt*

-rw-r--r-- 1 wiseo pro 24 9월 24일 14:47 crypt.data

-rw-r--r-- 1 wiseo pro 24 9월 24일 14:48 crypt.data1

% crypt < crypt.data1

Enter key:hello

test test

안녕하십니까?

%




0.0.0.49 개행을 제외한 화면내의 보이지 않는 문자 출력

cat -v http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html


0.0.0.50 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기

grep -h '20030305......01' ./R00*


0.0.0.51 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기

ls *.* | awk '{print "mv",$1, $1 }' | sed "s/ \([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)$/ \1\.\_\2/g" 





  • 현재디렉토리의 모든 *.* 파일을 *._* 형식으로 바꾼다.

  • 더 간단하게 ls *.* | sed "s/\([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)/mv \1\.\2 \1\.\_\2/g"










0.0.0.52 어제 날짜 구하기

$ date -v-1d "+%Y-%m-%d"  [컴퓨터분류]


0.0.0.53 원하지 않는 사용자 죽이기

[root@dream /root]# skill -KILL sunny 
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는 [root@dream /root]# skill -KILL -v pts/14 
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

0.0.0.54 UNIX상에서 한글출력이 깨져 나올경우

유닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다. 이때부터는 프로그램이 종료된 이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 ^n 에 해당하는 문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로 ^o 에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, # echo ^v^o 
라고 해야겠지만 커맨드가 깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 ^v^o를 치고 enter 하면 된다


0.0.0.55 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기

/bin/ls A?????.html | sed 's/A\(.....\)\.html/\1/g' | xargs -t -i mv 'A{}.html' 'A0{}.html' 

/bin/ls는 ls가 보통 -F로 파일 종류 표시(*, @등)까지 하기 때문에 그걸 막기 위한 것이고 xargs의 -t는 트레이스모드이다.
wonie777 블로거 [펌] Unix Tip 유닉스 혹은 리눅스용 커맨드 팁 모음입니다.










  1. 서브 디렉토리까지 파일안의 문자열 모두 검색

  2. haha와 huhu가 동시에 들어있는 행 뽑기

  3. 찾아서 지우기

  4. 공사중에 로그인 막기

  5. 크기가 가장 큰 파일, 디렉토리 찾기

  6. 가장 큰 파일을 찾으려면

  7. 현재 디렉토리의 크기만을 파악할때

  8. 시스템 정보 감추기

  9. 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기

  10. FTP로 들어온 사용자 확인하기

  11. 원하지 않는 사용자 죽이기

  12. less 결과를 vi로 보기

  13. vi에서 블럭 설정하기

  14. man 페이지 프린트하기

  15. ping 무시하기

  16. LILO 다시 살리기

  17. 특정 사용자 ftp 접근 막기

  18. X 윈도우에서 TV보기

  19. ls라는 파일이 포함된 rpm패키지 찾기

  20. 현재 rpm패키지의 의존패키지

  21. 현재 디렉토리크기

  22. 바로 이전 디렉토리로 가기

  23. 프로세스명으로 프로세스 죽이기

  24. 하드웨어 시계맞추기

  25. 원격에서 리모트서버의 X application실행시

  26. 링크 파일

  27. ^M 문자 없애기

  28. 비어있는 행을 찾기

  29. 기타 명령어 떼

  30. 각자가 사용하는 컴퓨터의 정보를 알고 싶을때

  31. 전체 메일

  32. 디렉토리만 빠르게 검색

  33. 호스트 네임 바꾸기

  34. 틀린명령어 틀린글자만 바꿔서 실행

  35. 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어

  36. 열려있는 포트 알아내기

  37. 텔넷 모든 접속자에게 메세지 보내기

  38. lsof는 열려있는 파일을 나타내 주는 옵션

  39. 사용자가 어디에서 무엇을 하는지 알아내기

  40. 텔넷 화면 수정

  41. 하위 디렉토리 한꺼번에 만들기

  42. 특정디렉토리의 모든 파일 안의 특정 문자열 치환

  43. killall 명령 시뮬레이션 (프로세스명으로 죽이기)

  44. find와 grep

  45. vi 검색, 치환

  46. 파일내의 중복되는 행을 제거 : uniq

  47. 파일의 결합

  48. 파일의 암호화 : crypt

  49. 개행을 제외한 화면내의 보이지 않는 문자 출력

  50. 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기

  51. 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기

  52. 어제 날짜 구하기

  53. 원하지 않는 사용자 죽이기

  54. UNIX상에서 한글출력이 깨져 나올경우

  55. 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기



0.0.0.1 서브 디렉토리까지 파일안의 문자열 모두 검색

find ./ -name "*" -exec grep 'abc' {} \; -print 

find . -name -print -exec grep abc {} \;

grep -r abc *




0.0.0.2 haha와 huhu가 동시에 들어있는 행 뽑기

grep haha foo.txt | grep huhu 




0.0.0.3 찾아서 지우기

find / -name "*.eml" -exec rm -f {} \; 




0.0.0.4 공사중에 로그인 막기


시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠? 그럴 때는, /etc/nologin 이라는 파일을 만들어,공사중 또는 Under Construction이라는 공지를 넣으면 됩니다.


0.0.0.5 크기가 가장 큰 파일, 디렉토리 찾기

가장 큰 디렉토리를 찾으려면,  du -S | sort -n 


0.0.0.6 가장 큰 파일을 찾으려면

 ls -lR | sort +4n 


0.0.0.7 현재 디렉토리의 크기만을 파악할때

[root@dev2 local]# du -c -h --max-depth=0 * 

6.4M apache

35M bin

43M dns

1.7M doc

42k etc

1.0k games

42k geektalkd

1.1M gnuws

1.1M include

41k info

19M jakarta-tomcat-3.2.3

0 jre

15M jre118_v3

25M lib

62k libexec

1011k man

1.3M mm.mysql.jdbc-1.2c

937k sbin

3.8M share

1.8M shoutcast-1-8-3-linux-glibc6

5.2M ssl

159M total




0.0.0.8 시스템 정보 감추기

/etc/inetd.conf 파일을 열어서,

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 




0.0.0.9 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기

ps -aux | sort +4n  또는 ps -aux | sort +5n 


0.0.0.10 FTP로 들어온 사용자 확인하기

 ftpwho,ftpcount 


0.0.0.11 원하지 않는 사용자 죽이기

 [root@dream /root]# skill -KILL sunny 
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는
 [root@dream /root]# skill -KILL -v pts/14 
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.


0.0.0.12 less 결과를 vi로 보기

less상태에서 v를 누르면 바로 vi로 감


0.0.0.13 vi에서 블럭 설정하기

alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.
블럭을 설정 하신 뒤,
삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p


0.0.0.14 man 페이지 프린트하기

 man -t vi > vi.ps 


0.0.0.15 ping 무시하기

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all




0.0.0.16 LILO 다시 살리기

 boot : vmlinuz root=/dev/hda6 


0.0.0.17 특정 사용자 ftp 접근 막기


/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.


0.0.0.18 X 윈도우에서 TV보기

리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다. 이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합 니다. 만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -> Video For Linux -> BT848 Video For Linux 항목을 모듈화 시키거나 커널에 포함하십시오.
TV 카드를 리눅스에 인식시키기 위해서 /etc/conf.modules 파일에 다음과 같은 내용을 삽입하고 컴퓨터를 다시 시작합니다.

alias char-major-81 bttv 

# 필립스 튜너의 경우 pre-install bttv modprobe -k tuner

# 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9


이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.


0.0.0.19 ls라는 파일이 포함된 rpm패키지 찾기

일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.

rpm -qf /bin/ls 

[root@piruks /etc]# which ls

/bin/ls

[root@piruks /etc]# rpm -qf /bin/ls

fileutils-4.0i-2mz




0.0.0.20 현재 rpm패키지의 의존패키지

 rpm -qR 패키지명 


0.0.0.21 현재 디렉토리크기

 du -h --max-depth=1 . 


0.0.0.22 바로 이전 디렉토리로 가기

 cd - 


0.0.0.23 프로세스명으로 프로세스 죽이기

killall 프로세스명 

kill -9 `pidof 프로세스명




0.0.0.24 하드웨어 시계맞추기

배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다.

[root@dev /down]# rdate -s time.kriss.re.kr 

[root@dev /down]# clock -w




0.0.0.25 원격에서 리모트서버의 X application실행시

X윈도 app를 실행할때 다음과 같은 에러가 나면 조치

[kang@dev /home/kang] xclock 

Xlib: connection to "211.222.186.170:0.0" refused by server

Xlib: Client is not authorized to connect to Server

Error: Can't open display: 211.222.186.170:0.0



export DISPLAY=211.222.186.170:0

xhost +211.222.186.170




0.0.0.26 링크 파일

ln -sf 링크할디렉토리 링크로 만들어질 디렉토리  참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음.  ln -sf /www/dir_1/r_photo /www/dir_2/r_photo 


0.0.0.27 ^M 문자 없애기

a = 1^M 

def vartest(a):^M

a = a + 1^M

return a^M

a = vartest(a)^M

print a^M

Unix류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 MJ 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로 받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면


    줄 끝마다 보기싫은 ^M이 붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.)


PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다.
위는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠. 하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠. 명령은  :%s/(ctrl+v)M//g  입니다.  (ctrl+v)M  이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로 m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은  %s/이것을/요걸로/g  입니다 그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠. 단, M의 경우 ctrl+M의 뜻인데 단순히 문자로 M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼  (ctrl+v)M  으로 해주셔야 합니다.


0.0.0.28 비어있는 행을 찾기

 #grep -n '^$' filename  정규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자

[...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도 사용 

[^..] .. 안에 없는 임의의 한 문자. 범위 사용가능

r* 0회 이상 r 반복

r+ 1회 이상 r 반복

r? 0 혹은 1회의 r

r{n,m} n회 이상 m회 이하 r 반복

r1|r2 r1 혹은 r2 (egrep 만)

(r) r 의 정규표현(egrep 만)




0.0.0.29 기타 명령어 떼

alias(명령어 간소화하기) 

apropos(관련된 명령어 찾기)

arch(컴퓨터 종류 알기)

arp(같은 서브넷의 IP 보여주기)

at(작업 시간 정하기)

atd(계획성 있는 작업 실행하기)

awk(특정 패턴 문자 처리하기)

a2p(펄 파일로 바꾸기)

badblocks(배드 블럭 검사하기)

bc(계산기)

biff(메일 수신 소리로 확인하기)

bg(후면작업; 배경화면 설정)

bind(키나 함수 순서 결합하기)

break(루프 빠져나가기)

cal(달력보기)

builtin(내부 명령어 알아보기)

case(조건 처리하기)

cat(화면상에서 파일 보기)

cd(디렉토리 변경하기)

cfdisk(디스크 설정하기)

chattr(파일 속성 변경하기)

chfn(사용자 정보 변경하기)

chgrp(파일, 디렉토리가 속했던 그룹 바꾸기)

chmod(파일 권한 바꾸기)

chown(파일 주인 바꾸기)

chsh(지정된 셸 바꾸기)

cksum(CRC값을 점검한다)

clear(화면 청소하기)

clock(CMOS 시각을 조정하기)

cmp(파일 비교하기)

colcrt(문자 변환 필터)

colrm(열 삭제하기)

column(가로 정렬하기)

comm(파일 비교 출력하기)

command(명령어 알아보기)

continue(루프 계속돌기)

cp(파일 복사하기)

cpio(복사본 만들기)

crontab(cron을 관리한다)

csplit(파일에 서식, 규칙 정하기)

cut(필요한 필드만 출력하기)

date(날짜 보기)

dd(블럭장치 읽고 쓰기)

debugfs(ext2 파일 시스템 디버깅하기)

declare(변수 선언하기)

df(파일 시스템의 사용량 보기)

dirs(디렉토리 목록 표시하기)

dmesg(부팅 메시지 보기)

dnsdomainname(DNS 이름 출력)

domainname(NIS 이름 출력&설정)

du(디렉토리와 파일의 용량 파악하기)

dumpe2fs(파일 시스템 정보 보기)

echo(표준 출력하기)

eject(장치 해제하기)

elm(메일 관련)

enable(내부 명령어 지정)

env(환경변수 출력하기)

eval!(인수 읽기)

exec(셸 명령어 실행하기)

exit(종료하기)

expand(탭을 공백으로 변환하기)

export(변수 지정하기)

e2fsck(파일 시스템 복구하기)

fc(지정된 편집기 받기)

fdformat(플로피 디스크 포맷하기)

fdisk(파티션 나누기)

fg(지정된 작업을 전면 프로세스로 시작하기)

file(파일 종류 보기)

find(파일 찾기)

finger(사용자 정보 알기)

fold(정형화하기)

fmt(정형화하기)

for(반복 실행하기)

free(메모리 사용량 알아보기)

fsck(파일 시스템 검사하기)

fstab(파일 시스템에 대한 고정적인 정보 저장하기)

ftp(파일 전송 프로그램)

fuser(프로세스 ID 출력)

getkeycodes(매핑 테이블 출력하기)

grep(특정 문자(열) 검색하기)

gzexe(실행 파일 압축하기)

gzip(압축하기)

halt(시스템 종료하기)

hash(기억해 두기; index 역할)

head(파일의 앞부분 출력하기)

help(도움말 보여주기)

host(호스트 정보 보기)

history(사용 명령어 목록보기)

hostname(서버 이름 알기)

id(계정 정보 알기)

if(조건문 실행하기)

ifconfig(랜카드에 주소 할당하기)

imolamod(모듈 설치하기)

inetd(인터넷 서비스의 최상위 데몬)

init(실행 단계 정하기)

ispell(철자법 검사하기)

jobs(수행중인 프로세스 알기)

kbd_mode(키보드 모드 출력하기)

kill(프로세스 죽이기)

klogd(커널 로그 데몬)

ldd(공유 라이브러리의 의존성 알기)

less(페이지 단위로 출력하기)

let(정규식 표현하기)

lilo(부팅하기)

ln(링크하기)

locate(패턴에 맞는 파일 찾기)

login(로그인하기)

logger(시스템 로그 기록하기)

logname(사용자 로그인명 보여주기)

logout(로그인 셸 종료하기)

look(특정 단어 검색하기)

losetup(중복 장치 확인하기)

lpd(프린트 데몬)

lpq(현재 프린트 작업 상태 출력하기)

lpr(출력하기)

lprm(대기열에 있는 문서 삭제하기)

ls(디렉토리 내용보기)

lsattr(파일 시스템의 속성 보여주기)

lsdev(하드웨어 장치 출력하기)

lsmod(모듈 정보 출력하기)

mail(메일 관련)

make(컴파일하기)

man(매뉴얼 보기)

mattrib

mbadblocks

mcd

mcopy

mdel

mdeltree

mdir

mesg(메시지를 받을 수 있는지 확인하기)

mformat

minfo

mkdir (디렉토리 만들기)

mke2fs(파일 시스템 생성하기)

mkfs(파일 시스템 만들기)

mknod(특수 파일 만들기)

mkswap(스왑 영역 지정하기)

mlabel

mmd

mmount

mmove

mpartition

mount(장치 연결하기)

more(화면 단위로 출력하기)

mrd

mren

mtoolstest

mtype

mutt(메일 관련)

mv(파일 옮기기)

mzip

netstat(현재 네트웍 상황 보기)

nice(프로세스 우선 순위 변경하기)

od(8진수로 파일 보기)

passwd(암호 입력하기)

pidof(실행중인 프로그램의 프로세스 ID 찾기)

pine(메일 관련)

ping(네트웍 확인하기)

popd(pushd 취소)

ps(프로세스 상태 알기)

pstree(프로세스 상관관계 알기)

pwd(절대경로 보여주기)

quota(디스크 한계량 알기)

rarp(rarp 테이블 관리하기)

rcp(원격 호스트에 파일 복사하기)

rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)

rdate(네트웍으로 시간 설정하기)

reboot(재부팅하기)

rmmod(모듈 지우기)

readonly(읽기 전용으로 표시하기)

renice(프로세스 우선 순위 바꾸기)

reset(터미널 초기화하기)

restore(다시 저장하기)

rlogin(바로 접속하기)

rm(파일 지우기)

rmdir (디렉토리 지우기)

route(라우팅 테이블 추가/삭제하기)

rpm(프로그램 추가/삭제)

rpm2cpio(rpm을 cpio로 변환하기)

rsh(원격으로 명령어 실행하기)

rup(호스트 상태 출력하기)

rusers(호스트에 로그인한 사용자 출력하기)

rwall(호스트 사용자에게 메시지 뿌리기)

script(기록하기)

set(변수값 설정하기)

setup(시스템 관련 설정하기)

showmount(호스트의 마운트 정보 보여주기)

shutdown(전원 끄기)

sleep(잠시 쉬기)

source(스크립트 번역하기)

split(파일 나누기)

ssh(암호화된 원격 로그인하기)

stty(터미널라인 설정 보여주기)

su(계정 바꾸기)

suspend(셸 중단하기)

swapoff (스왑 해제하기)

swapon(스왑 활성화하기)

sync(버퍼 재설정하기)

syslogd(로그인 과정 설정하기)

tac(거꾸로 보기)

tail(문서 끝부분 출력하기)

talk(이야기하기)

tar(파일 묶기)

tcpdchk(tcp wrapper 설정하기)

tcpmatch(네트웍 요청에 대해 예측하기)

tee(표준 입력으로부터 표준 출력 만들기)

telnet(원격접속하기)

test(테스트하기)

times(셸에서의 사용자와 시스템 시간 출력하기)

top(cpu 프로세스 상황 보여주기)

tr(문자열 바꿔주기)

true(종료 코드 리턴하기)

type(유형 보기)

ul(밑줄 처리해서 보여주기)

ulimit(제한하기)

umask(매스크 모드 설정하기)

umount(장치 해제하기)

unalias(별명 제거하기)

uname(시스템 정보 보기)

unexpand(공백 문자를 탭으로 변환하기)

uniq(중복된 문장 찾기)

useradd(사용자 계정 만들기)

userdel(계정 삭제하기)

usermod(사용자 계정정보 수정하기)

unset(설정 변수 해제)

uptime(시스템 부하 평균 보여주기)

users(로그인된 사용자 보여주기)

w(시스템에 접속한 사용자 상황 알아보기)

wait(프로세스 기다리기)

wall(모든 사용자에게 메시지 보내기)

wc(문자, 단어, 라인수 세기)

whatis(명령어의 간단한 설명보기)

while(루프 명령어)

who(사용자 알기)

write(콘솔 상에서 간단한 메시지 보내기)

xcopy(반복적으로 복사하기)

XFree86

ypchfn(NIS에서 사용하는 chfn 명령어)

ypchsh(NIS에서 사용하는 chsh 명령어)

yppasswd(NIS에서 사용하는 passwd 명령어)

zcat(압축 파일 보기)

zcmp(압축 파일 비교하기)

zforce(강제로 gz 만들기)

zgrep(압축 상태에서 grep 실행하기)

zmore(압축 상태에서 more 실행하기)

znew(.Z 파일을 .gz로 다시 압축하기)




0.0.0.30 각자가 사용하는 컴퓨터의 정보를 알고 싶을때

 [root ...]#more /proc/cpuinfo  위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며,  [root ...]#more /proc/meminfo  라고 치면 사용자의 메모리 정보를 볼수 있습니다.


0.0.0.31 전체 메일

먼저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요!  [ root@aromi /root]# vi nea  안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다.

 

:wq

[ root@aromi /root]#

만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다.

[ root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'` 

 [공지]->  라고 쓴 것은 보낼 메일의 제목입니다.  'cat /etc/passwd|gawk -F : '{print$1}''  ->먼저 cat으로 passwd파일의 첫번째 나오는 내용을 출력하라는 소리입니다. nea라는 텍스트파일을 메일의 내용으로 보내라는 내용입니다.


0.0.0.32 디렉토리만 빠르게 검색

 ls -al | grep "^d" 


0.0.0.33 호스트 네임 바꾸기

/etc/HOSTNAME file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트 네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다.

[ root@linux /root]# vi /etc/sysconfig/network 

NETWORKING=yes

HOSTNAME="linux"

GATEWAY=""

GATEWAYDEV=""

FORWARD_IPV4="yes"

바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다.


0.0.0.34 틀린명령어 틀린글자만 바꿔서 실행

 # ./configure --prefax=/usr/local/apache  앗, 틀렸습니다. prefax가 아니라 prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다.  # ^fax^fix^  라고 하면...  -> ./configure --prefix=/usr/local/apache  라고 됩니다..


0.0.0.35 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어

 [ root@aromi /root]# uname -a 


0.0.0.36 열려있는 포트 알아내기

 netstat -anp | grep LISTEN 


0.0.0.37 텔넷 모든 접속자에게 메세지 보내기

wall 내용...  Ctrl-D 


0.0.0.38 lsof는 열려있는 파일을 나타내 주는 옵션

여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠?


0.0.0.39 사용자가 어디에서 무엇을 하는지 알아내기

w라는 명령어를 사용하시면 된답니다. 이 때,  w [-s]  를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다.


0.0.0.40 텔넷 화면 수정

로그인화면:  /etc/issue.net  로그인후화면:  /etc/motd 


0.0.0.41 하위 디렉토리 한꺼번에 만들기

 mkdir -p music/koreanmusic/ost 


0.0.0.42 특정디렉토리의 모든 파일 안의 특정 문자열 치환

for i in $*; do 

sed "s/paper/PAPER/g" < $i > $i.new

mv -f $i.new $i

done



<chihwan.sh>



find ./(chihwan.sh를 포함하지 않는 디렉토리면) -type f -exec chihwan.sh {} \;




0.0.0.43 killall 명령 시뮬레이션 (프로세스명으로 죽이기)

ps aux | grep 프로세스명 | grep -v grep | awk '{ print $w }' | xargs kill -9 



  • 모든 프로세스 나열

  • 지정한 프로세스만 뽑아냄

  • grep 명령이 포함된 라인 제거

  • awk로 두번째 필드만 뽑아냄

  • xargs에 의해 걸러진 아이디로 죽임




0.0.0.44 find와 grep

find . -name "H20021115.*" -exec grep -l '...;........;110100' {} \;


0.0.0.45 vi 검색, 치환

구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 :%s/./\U&/g
모든문자->대문자 g/^$/d


0.0.0.46 파일내의 중복되는 행을 제거 : uniq

입력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면 동일한 행이 존재할 수 있음.
sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자] [입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력 -u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자' 만큼의 필드는 무시


0.0.0.47 파일의 결합

여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용

cat [파일명1] [파일명2] ... > [출력파일명] 

cat [파일명1] [파일명2] ... >& [출력파일명]

cat [파일명1] [파일명2] ... >> [출력파일명]

cat [파일명1] [파일명2] ... >>& [출력파일명]

cat - [파일명1], [파일명2] .. >> [출력파일명]

cat - [파일명1], [파일명2] .. >>& [출력파일명]





% cat > file1

파일명 : file1

^D

% cat > file2

파일명 : file2

^D

% cat file1 file2 > file3

% cat file3

파일명 : file1

파일명 : file2

%


행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합

 

paste [파일명1] [파일명2]..

paste -d리스트 [파일명1] [파일명2] ...

paste -s [-d리스트] [파일명]

d : 행간 결합시 행간 구분문자들의 리스트

s : 한파일의 연속되는 행을 결합



% cat > paste.data1

홍길동

이순신

김유신

% cat > paste.data2

부산

서울

대구

% paste paste.data1 paste.data2

홍길동 부산

이순신 서울

김유신 대구

% paste -d"\n" paste.data1 paste.data2

홍길동

부산

이순신

서울

김유신

대구

% paste -s -d"::\n" paste.data1

홍길동:이순신:김유신

%


두 파일을 동일한 필드 값에 따라 행 단위 결합 : join
관계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는 행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저 표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭, 개행문자가 기본, 연속적으로 나타날 경우 하나로 취급

% cat > join.data1 

98001:서원일:

98002:홍길동:

98003:김유신:

98004:이순신:

98010:이상관:

% cat > join.data2

부산:98001:441

울산:98002:89

대구:98003:99

서울:98004:120

김해:98010:44

% join -j1 1 -j2 2 -t: join.data1 join.data2

98001:서원일::부산:441

98002:홍길동::울산:89

98003:김유신::대구:99

98004:이순신::서울:120

98010:이상관::김해:44

% join -j1 1 -j2 2 -o 1.2 1.1 2.1 -t: join.data1 join.data2

서원일:98001:부산

홍길동:98002:울산

김유신:98003:대구

이순신:98004:서울

이상관:98010:김해

%




0.0.0.48 파일의 암호화 : crypt

파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용

% cat > crypt.data 

test test

안녕하십니까?

^D

% crypt <crypt.data > crypt.data1

Enter key: hello

% ls -l crypt*

-rw-r--r-- 1 wiseo pro 24 9월 24일 14:47 crypt.data

-rw-r--r-- 1 wiseo pro 24 9월 24일 14:48 crypt.data1

% crypt < crypt.data1

Enter key:hello

test test

안녕하십니까?

%




0.0.0.49 개행을 제외한 화면내의 보이지 않는 문자 출력

cat -v http://comp-cse.sch.ac.kr/~pl/lecture/linux/file2.html


0.0.0.50 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기

grep -h '20030305......01' ./R00*


0.0.0.51 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기

ls *.* | awk '{print "mv",$1, $1 }' | sed "s/ \([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)$/ \1\.\_\2/g" 





  • 현재디렉토리의 모든 *.* 파일을 *._* 형식으로 바꾼다.

  • 더 간단하게 ls *.* | sed "s/\([a-zA-Z0-9]*\)\.\([a-zA-Z0-9]*\)/mv \1\.\2 \1\.\_\2/g"










0.0.0.52 어제 날짜 구하기

$ date -v-1d "+%Y-%m-%d"  [컴퓨터분류]


0.0.0.53 원하지 않는 사용자 죽이기

[root@dream /root]# skill -KILL sunny 
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는 [root@dream /root]# skill -KILL -v pts/14 
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

0.0.0.54 UNIX상에서 한글출력이 깨져 나올경우

유닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다.. 이때부터는 프로그램이 종료된 이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 ^n 에 해당하는 문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로 ^o 에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, # echo ^v^o 
라고 해야겠지만 커맨드가 깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 ^v^o를 치고 enter 하면 된다..


0.0.0.55 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기

/bin/ls A?????.html | sed 's/A\(.....\)\.html/\1/g' | xargs -t -i mv 'A{}.html' 'A0{}.html' 

/bin/ls는 ls가 보통 -F로 파일 종류 표시(*, @등)까지 하기 때문에 그걸 막기 위한 것이고 xargs의 -t는 트레이스모드이다. 


2009. 4. 9. 17:09

unix find 명령어




예전에 퍼두었던 건데 매우 유용해서 포스팅.
맨날 쓰는 것만 쓰다보니 이렇게 막강한 줄 몰랐네.

-------------------------------------------------------------------------------

find . -name '*.c' | xargs grep -n "ABC" 현재 디렉토리 밑에 *.c 파일중 ABC가 들어있는 파일 찾기

find ./ -name "*.txt" -exec perl -pi -e 's/2aaaabbbcccdd/2aaaabbbcccdd33333/g' {} \; 한꺼번에 바꾸기

* / 는 최상위 디렉터리를 뜻함. 만약 찾고자 하는 디렉터리가 있다면 그걸로 대체

- 파일 이름에 foobar 가 들어간 파일 찾기
find / -name "foobar" -print

- 특정 사용자(foobar) 소유의 파일을 찾기
find / -user foobar -print | more

- 최근 하루동안에 변경된 파일을 찾기
find / -ctime -1 -a -type f | xargs ls -l | more

- 오래된 파일(30일 이상 수정되지 않은 파일) 찾기
find / -mtime +30 -print | more

- 최근 30일안에 접근하지 않은 파일과 디렉터리를 별도의 파일로 만들기
find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.txt

- 하위 디렉터리로 내려가지 않고 현재 디렉터리에서만 검색하기
find . -prune ...

- 퍼미션이 777 인 파일 찾기
find / -perm 777 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾기
find / -perm -2 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾아 쓰기 권한을 없애기
find / -perm -2 -print | xargs chmod o-w
또는
find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more

- 사용자이름과 그룹이름이 없는 파일 찾기
find / ( -nouser -o -nogroup ) -print | more

- 빈 파일(크기가 0 인 파일) 찾기
find / -empty -print | more
또는
find / -size 0 -print | more

- 파일 크기가 100M 이상인 파일을 찾기
find / -size +102400k -print | xargs ls -hl

- 디렉터리만 찾기?
find . -type d ...

- root 권한으로 실행되는 파일 찾기
find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more

- 다른 파일시스템은 검색하지 않기
find / -xdev ...

- 파일 이름에 공백이 들어간 파일 찾기
find / -name "* *" -print

- 숨겨진(hidden) 파일을 찾기
find / -name ".*" -print | more

- *.bak 파일을 찾아 지우기
find / -name "*.bak" -exec rm -rf {} \;

- *.bak 파일을 찾아 특정 디렉터리로 옮기기
mv `find . -name "*.bak"` /home/bak/

- 여러개의 파일에서 특정 문자열을 바꾸기
find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;

find에 대한 참고문

find는 유닉스 및 리눅스 환경에서 중요한 유틸리티 중 하나이다. find는
파일의 이름부터 시작해서 수정 시간에 이르기까지 주어진 파라미터들과
일치하는 파일들을 찾아준다.

여기에서는 find에 대해 일부분만 다룬다. 조금더 알고싶은 유저는 한빛미디어
"유닉스 파워툴"을 참조하시기 바란다.

find의 기본문법

find path operators

path는 경로이다. 이 부분에 대해선 다음부분에서 약간 더 자세하게
설명할 것이다.
operators 는 연산자이다. 쉽게 풀이하자면 옵션인 셈이다. 여기에 들어갈
수 있는 것은 지금부터 소개할 것이다.

-name filename

우리가 가장 일반적으로 사용하는 옵션이다. filename에는 와일드 카드(별표)
가 들어갈 수 있지만 쉘이 변환하지 않도록 인용부호 쿼트(")로 둘러싼다

-perm mode

주어진 액세스 모드를 가진 파일을 찾는다. 액세스 모드는 8진수 값을 갖는다.
뒤에서 다시 설명한다

-type c

지정된 타입에 관해서 파일을 찾는다. c는 한글자로 된 코드이다. 예를 들면,
f는 일반 파일, b는 블록 특수 파일, l은 심볼릭파일을 나타낸다. 뒤에서 다시
설명한다.

-user name

이 옵션은 name에 해당하는 사용자 파일을 찾는다. name에는 사용자 id뿐만 아니라
사용자의 UID도 들어갈 수 있다.

-group name

이 옵션은 name에 해당하는 그룹의 파일을 찾는다. name에는 그룹명 뿐만 아니라
GID가 들어갈 수도 있다.

-size n

해당되는 사이즈의 파일을 찾는다. n은 블록길이의 파일을 찾는다. 한 블록은 512와 같다.
+n 이란 표시가 들어가면 n 블록보다 더 긴 파일을 찾는다라는 뜻이다. 파일이 클때
유용하다. nc라는 표현은 n 문자 길이의 파일들을 찾는다는 의미이다. ++nc는 무엇을
뜻할까? 뒤에서 다시 다룬다

-inum n

inode 번호가 n인 파일을 찾는다. 그다지 자주 사용되는 옵션은 아니여서 자세한
설명은 요약한다.

-atime n

n일 전에 액세스한 파일들을 찾는다. +n은 n일 이전에 액세스한(즉 n일 동안 액세스
하지 않은)파일들을 찾는다는 의미이다. 그러면 -n은 무엇을 의미할까? (즉, n일 동안
액세스한) 파일들을 찾는다" 의미이다. 뒤에서 다시 언급한다

-mtime n

파일의 내용이 수정된 시간을 검사한다는 것을 제외하고는 atime과 유사하다.

-ctime n

inode의 마지막으로 변경된 시간을 확인한다는 것을 제외하고는 atime과 유사하다.
"변경되다"라는 것은 파일이 수정되거나 그 특성 중의 하나가 변경되었다는 것(예를
들면, 그 소유자)을 의미한다.

-newer file

주어진 file보다 더 최근에 수정된 파일을 찾는다.

그런데 여기까기 find의 옵션을 살펴 보았는데 때때로 여러분은 조건을 만족하는
파일을 찾기 원할 것이다. 이럴때 쓰는 연산자가 있다. 다음이 그 연산자이다.

operator1 -a operator2

and 연산에 해당한다. -a는 생략이 가능하다. 두개의 검색 패턴이 같이 쓰여지면
find는 2개 모두와 일치하는 파일들을 원하는 것으로 가정한다.

operator1 -o operator2

or 연산에 해당한다. 둘 중 하나가 속하는 파일을 찾는다.

! operator

not 연산에 해당한다. operator에 해당하지 않는 파일들을 찾는다.

\(expression\)

논리 우선순위를 의미한다. 복잡한 표현식에서 위와 같이 지정해 주면 이 부분을
나머지 부분보다 빨리 계산한다. 여기서 (를 \( 로 표현했는데. 쉘이 해석할 수
있기 때문이다. php를 사용해 보신분이라면 무슨 얘기인지 대충 감 잡으셨을 것이다.

이번 부분은 find가 파일들을 찾았을때의 행위를 지정하는 그룹의 연산자들이다.

-print

파일의 이름을 표준출력으로 출력한다. 뒤에서 조금 더 다룬다..

-exec command

찾은 파일들을 command로 처리한다. command에서 찾은 파일의 경로명을 포함
시키려면 중괄호를 사용한다 {} command는 명령을 실행시키고 난 뒤에는 반드시
백슬래시와 세미콜론을 사용한다. (\;)

-ok command

기본적으로 -exec 옵션과 같다. 그러나 해당 command를 실행하기 전에 명령을
실행할지에 대해 물어본다. 일반적으로 find를 테스트하는 데 많이 쓰인다고 한다.

위 옵션은 가장 일반적인 옵션들이지만 때때로 막강한 시스템 관리자들은 추가 또는
삭제하여 사용하기도 하니 여러분의 시스템에서 man find를 하게 되면 더 많은 옵션을
볼 수 있을 것이다.

1. 깊은 디렉토리 파고 들어가기

find의 가장 분명한 용도는 오래되고 큰 자료를 찾는 것이다. 또는 사용되지 않는
파일들의 위치를 찾아내는 능력이다. 그러나 근본적으로 가장 중요한 find의 특징은
서브 디렉토리로 내려가는 것이다.

보통 쉘은 인자 목록을 명령어에 제공해 준다. 그것은 UNIX 프로그램들에게 디렉토리명이
아닌 파일명들이 주어지는 이유이다. 단지 몇몇 프로그램들만이 디렉토리 이름을 받아서
서브디렉토리의 이름을 받아서 검색해서 내려갈 수 있다. find, tar, du, 그리고 diff 같은
프로그램이 그렇게 한다. chmod, chgrp, ls, rm 그리고 cp의 몇몇 버전들도 -r이나 -R
옵션이 주어질 때는 그럴 수 있다.

일반적으로는 대부분의 명령어들은 디렉토리 구조를 완전이 이해하지 못하며 쉘이 와일드
카드를 디렉토리 명으로 확장해 주는데 의존한다. 그러므로 어떤 디렉토리 그룹에서 .o로
끝나는 모든 파일들을 삭제하려면 다음과 같이 입력할 수 있다

find *.o */*.o */*/*.o

이렇게 하는 것은 입력하기 귀찮을 뿐 아니라 검색하는 모든 파일들을 찾을 수 없을지도
모른다. 쉘은 어떤 맹점이 있다. 점으로 시작하는 이름을 가진 디렉토리 내의 파일들은
찾을 수 없을 것이다. 그리고 */*/*/*.o 로 찾아지는 파일들이 있다면 삭제되지 않을 것이다.

또 다른 문제점은 위와 같이 입력하게 되면 Arguments too long이라는 에러 메시지를 내 뱉는다.
이것은 여러분이 입력한 와일드 카드를 쉘이 너무 많은 인자들로 확장했음을 의미한다.

find는 이런 문제점에 대한 해결책이다.

find의 가장 간단한 예는 다음이다

find . -print

find의 첫번째 인자는 디렉토리 또는 파일들의 경로이다. 위의 예제는 해당 디렉토리의
모든 파일들을 찾아준다. 경로명 뒤의 인자들은 항상 - 부호 (하이픈또는 대시라고 부른다)가
붙게 된다. 이것에 유의하기 바란다. 그리고 이 인자는 find가 무엇을 찾았을 때 어떤 행동을
취하는 가에 대해 명시한다. 그리고 다른 말로 이것은 검색 연산자들이다. 이경우엔 파일명이
출력된다. 특정 경로 이외에 C쉘에서는 틸드(~)도 사용할 수 있다. 예를 들어본다

find ~ ~barnett /usr/local -print

그리고 만약 따분하다면 다음과 같이 명령을 내릴 수도 있다

find / -print

위의 예제는 디스크에 있는 모든 파일들을 검색한다. 이 예제는 자신이 쓰는 워크스테이션에선
상관 없겠지만 여러 사람이 쓰는 웍 스테이션이나 서버에서는 범죄 행위일 정도로 디스크를
공회전 하게 낭비한다. 왠만해선 참아주기 바란다. 그러나 정말 필요하다고 생각될 시엔
/* 를 사용해 주기 바란다.

find는 결과를 표준 출력(stdin)으로 뿌리게 되니 발견한 파일의 목록을 다른 명령어로 보낼 수 있다.
이 기능을 사용한 한가지 방법은 치환이다. 다음 예제를 보자.

ls -ld 'find . -print'

find의 명령어의 실행 결과 출력이 역 인용부호 전체를 대신한다. ls는 find의 결과를 볼뿐 find
가 사용되었다는 것을 모른다. 또 다른 명령어는 xargs를 사용하는 방법이 있으나
여기에서 더 다루지 않겠다. 관심있는 유저는 한빛미디어 "유닉스 파워툴"을 보기 바란다.

2. -print 를 잊지 말자..

가끔 나는 find에 -print를 붙이는 것을 잊는다. 이것을 붙이지 않으면 검색결과가 출력되지 않는다.
(물론 GNU 버전에서는 그렇지 않으나 GNU 버전이 아닌 find에서는 꼭 붙여주어야 한다. 일부 버전에서는 -ls도 사용한다)
이것은 오래된 시스템 관리자도 가끔 잊고 초보 사용자들이 가장 잘 실수하는 내용 중 하나이니 조심하자. 그리고 일부 버전은 -print를 추가해 주기도 하지만 기대해선 안된다.

3. 특정한 이름을 가진 파일 찾기

find 명령을 내릴때 메타 문자를 사용할 수 있는데 정규 표현식(grep과 같진 않다)를 사용할때 -name
연산자의 인자로 사용해서 그것들이 변경되지 않고 find로 넘겨지게 하려면 인용 부호로 감싸야 한다.
여기서 인용부호로는 어떤것을 사용해도 관계 없다.

find . -name \*.o -print
find . -name '*.o' -print
find . -name "[a-zA-Z]*.o" -print

파일 경로의 디렉토리들은 -name 연산자와 일치하지 않고 경로의 마지막에 있는 이름만이 일치한다.
예를 들어, 위의 명령어들은 ./subdir/afile이란 경로명과 일치하진 않지만 ./subdir/prog.o와는 일치한다.

경로의 중간에 있는 디렉토리과 일치하는 방법이 있다.

alias ff "find . -name '*\!{*}*' -ls"

파일이나 디렉토리의 이름을 넘겨주면 이 앨리어스는 그 인자를 포함하는 모든 파일이나 디렉토리
이름의 목록을 출력할 것이다.

4. 오래된 파일 찾기

7일된 파일을 찾고 싶으면 -mtime 연산자를 사용하면 된다

find . -mtime 7 -print

또 다른 방법은 시간의 범위를 지정하는 것이 있다.

find . -mtime +6 -mtime -8 -print

mtime은 파일의 최종 수정 시간이다. 사용되지 않은 파일을 찾아보려면 -atime 인자로 액세스 시간을 확인
하면 된다. 30일 이상 읽혀지지 않은 파일을 찾으려면 다음과 같이 하면 된다.

find . -type f -atime +30 -print

find 명령어가 디렉토리의 시간을 수정하기 실제로 액세스 되지 않은 디렉토리를 찾기란 어렵다. 각 파일과 관련된 연관된 또 하나의 시간이 있는데. ctime이라 불리는 inode 변경 시간이다. 그러나 여기에선 더 이상 자세하게 다루지 않는다.

5. find 검색의 최고봉이 되어보기

find는 확실히 까다롭다. 그러나 그 능력을 자유롭게 다루면 그 까다로움에 감사하게 될 것이다.(아직 필자는 그런 능력을 가지고 있지 않다)

find의 명령어들은 명령행의 복잡도와 상관없이 실제로는 위와 같은 것의 변형들일 뿐이다. 많은 다른 이름을 명시할 수 있고 오래된 파일들을 찾을 수 있다. 그 복잡함에 관계없이 실제로는 시작점이 어디이고 어떤 파라메터를 주고, 그리고 찾아낸 파일들을 어떻게 처리할 것인지 대해 명시하는 것 뿐이다.

더 복잡한 방법으로 find를 사용하는 것의 핵심은, 검색 파라미터는 실제로는 find가 평가하는 "논리 표현식(logical expression)이라는 것을 깨닫는 것이다.(실제 find를 사용하는 대 부분의 유저는 논리 표현식을 사용하지 않는다)

즉. find는 한번에 하나씩 모든 파일들을 본다(솔직히 이것은 사실이다. 그러나 우리눈에 보일정도로 느리진 않다)
명령행 연산자가 제공한 표현식을 평가하기 위해 indoe에 들어있는 정보를 사용한다.(앞서 inode는 많이 사용하지 않는다는 얘기를 들어 생략했다)
표현식의 값이 참이면 지정된 행동을 한다.(예를 들면 파일의 이름을 출력하기 위해)

예를 들어 다음 표현식은 참이다
find / -name "*.c"

이런식으로 생각하게 되면 논리 연산자도 쉽다. 다음 표현식은 2개의 확장자에 해당되는 파일을 찾는다

-name "*.o" -o -name "*.tmp" -print

위 예제는 *.o와 *.tmp로 끝나는 파일들을 찾는다. 그럼 위의 확장자를 가진 파일을 찾는다면 다음의 표현식을 넣어 액세스 시간이 맞는지 검색한다

-atime +5 \( -name "*.o" -o -name "*.tmp" \)

find 안에 괄호를 넣으면 해당 부분을 먼저 계산한다. 앞에서 잠깐 설명했지만 괄호 앞에 \ 를 넣은건
서브 쉘 연산자로 의식하지 말라고 넣은 것이다.

그러나 위의 예제를 다음과 같이 바꾸면 참이 아니다.

atime +5 -name "*.o" -o -name "*.tmp"

위의 예제는 이름이 *.tmp로 끝난다. 이면 참이라는 틀린 식이 된다. 이 잘못된 표현식은 .tmp로 끝나는 모든 파일들에 대해 그 파일이 언제 액세스 되었간 간에 참이 될 것이다. 즉 -atime이 적용되지 않는다. 그러나 위의 표현식은 틀린 식이 아니다. 그러나 우리가 원하는 일을 하지 않을 뿐이다.

위의 예제를 조금 더 응용해서 현재 디렉토리에 있는 파일들을 찾으려면 다음과 같이 내리면 된다.

find . -atime +5 \( -name "*.o" -o -name "*.tmp" \) -print

그러나 반대로 위의 파일들만 찾지 않는다면 ! 연산자를 사용하면 된다..

find . ! -atime +5 \( -name "*.o" -o -name "*.tmp" \) -print

그러나 위의 표현식은 -atime 연산자에 대해서만 적용한다. 모든 연산자에 사용하려면 -atime 연산자에도 괄호를 아래와 같이 사용하면 된다.

find . ! \( -atime +5 \( -name "*.o" -o -name "*.tmp" \) \)-print

-print도 표현식이다. 이것은 항상 참으로 평가된다. 이외에 -ok, -exec 도 항상 참으로 평가된다.
이 표현식들이 좋게 사용될 때가 있긴 하다. 뒤에서 다시 다룬다.

그리고 여러분들이 find를 사용할 때 실수 하는 것 중 하나는 공백을 넣지 않는 것이다. 모든 연산자에는 공백이 필요함을 기억하기 바란다.

find가 찾는 시간들

일반적으로 -atime 부류의 연산자들에 대해서는 아쉽게도 문서화가 되어 있지 않다. 이 시간들은 일반적으로 일 단위이다.

부호없는 숫자. 예를 들어 3은 정확하게 3일 전에 끝난 24시간을 의미한다.(달리 말하면 96시간과 72시간 전 사이)

마이너스 부호를 가진 숫자는 그 시간 이후의 기간을 가리킨다. 예를 들어, -3은 지금과 3일 전 사이의 모든 시간이다.
(달리 말하면 0시간 전과 72시간 전 사이)

플러스 부호가 붙은 숫자는 그 시간 전의 24시간 기간을 가리킨다. 예를 들면 +3은 3일 이상 된 시간이다. (달리 말하면 96시간 이상)

정확한 파일 비교

"이 부분에 대해서는 언급을 생략한다. 위에서 언급한 책을 보면 자세하게 잘 나와있으니 참고하기 바란다."

찾은 파일 실행하기

find에서 찾은 파일을 실행할 수 있는데 여기서 -exec 연산자는 끝 부분에 항상 \;를 넣는다. 그러나 find가 다르게 취급하는 인자가 있는데 이 인자는 바로 중괄호이다. {} 이 두문자들은 find가 발견하는 파일의 이름을 갖는 변수이다.
예제를 보면 더 확실할 것이다. 다음 예제는 간단한 경우로써 -print 연산자를 흉내내는 echo 연산자가 있다.

find . -exec echo {} \;

c쉘은 {} 문자를 사용하지만 {}를 바꾸진 않으므로 이 문자를 인용부호로 덮어쌓일 필요는 없다. 그러나 \;에서 \는 ''로 대체가 가능하다. 세미 콜론은 항상 ';'로 C쉘에서는 하는 걸로 익히자..

그리고 find안에 또 다른 find의 호출이 가능하다

여기에선 또 다른 호출에 대해서는 생략한다

-exec 커스터 테스트하기

-exec 연산자를 이용해서 커스템 테스트를 할 수 있는데 앞서 잠시 얘기했지만 되도록 -exec 연산자를 피하는게 좋다
사용해야 한다면 -ok 를 사용하는 방법과 확실히 그걸 실행해야 하는지 확인해 본다. 그리고 -exec 연산자는 꼭 find 명령의 뒤쪽에 놔두도록 한다.

HandTip

여기엔 기재하지 않았지만 \ 를 줄 바꿈 연산자로 사용할 수 있다. SQL에서도 사용가능하니 유용할 것이다. 다량의 명령어를 내릴때 상당히 유용한 기능이다.

find의 진정한 역할?

find의 진짜 역활은 파일의 위치를 찾는 것이 아니라 표현식을 평가하는 것이다. 그렇다. find는 확실히 파일의 위치를 찾아준다. 그러나 그것은 부수적인 것이다. 이점을 이해하는 것이 find를 이용하는 데에 있어 이해가 빠르고 find를 훨씬 더 자유롭게 유용하게 만드는 개념적인 발전이 될 수도 있다.

-type 연산자의 유형들

b - 블록 특수 파일("장치 파일")
c - 문자 특수 파일("장치 파일")
d - 디렉토리
f - 일반파일
l - 심볼릭 파일
p - 이름 파이프 파일
s - 소켓 파일

// 이 아래부분에서 더 이상 설명를 다루지 않습니다.

find . -size 1234c -print

- 보다 더 작은 , + 보다 더 큰

find . -name \*.o -perm 664 -print

find . -type d -perm 777 -print

----w---- 패턴은 -20과 같다.

퍼미션 8진 값
rwxrwxrwx 777
rwxrwxr-x 775
rw-rw-rw- 666
rw-rw-r-- 664
rw-rw---- 660

find . -perm -100 -print

실행가능한 --x------ 파일을 찾는다.

-perm 인자가 마이너스 부호를 가지게 되면 setuid 설정 비트를 포함한 모든 퍼미션 비트들이 검사된다.

2009. 3. 27. 09:37

#### Linux_명령어 모음 (아주 잘 나와있음)#### 강추!!!




A


adduser

루트로 로그인해서 이용자를 추가합니다.
# adduser zzz
zzz란 아이디를 만든다.
# adduser -p bbb -g ggg -s '/bin/bash' -d '/home/www' zzz
비밀번호가 bbb이고 그룹은 ggg 쉘은 bash 홈디렉토리는 /home/www 인 zzz란 아이디를 만든다.

 

 


alias

자주 쓰이는 명령어를 쓰기 편하게 바꾸는 명령입니다.

 

$ alias

alias cp='cp -i'

alias la='ls $LS_OPTIONS -a'

alias less='less -rf'

alias lf='ls $LS_OPTIONS -F'

alias ll='ls $LS_OPTIONS -l'

alias ls='ls $LS_OPTIONS'

alias mv='mv -i'

alias rm='rm -i'

 

 

$ alias dir='ls -al'

dir 명령어가 ls -al 명령어를 대산합니다. 한글로도 사용 가능합니다.

 

B

bg

사용중인 프로그램의 수행을 백그라운드로 수행합니다.

 # bg

 

 

 


bash

bash 셸이 아닌 사용자가 셸을 변경하고자 할 때 사용하는 명령입니다.
bash셸은 일반적으로 Linux의 기본 셸로 지정되어 있습니다.
만약 다른 셸을 사용하고 있으면서 bash 셸로 바꾸기 위한 명령은 다음과 같습니다.

# bash     (enter)'

 

c

C


cat

cat(conCATenate)은 파일의 내용을 표준 출력으로 내보내어, 파일내용을 알아보거나, 여러 파일을 하나의 파일로 출력하여 연결합니다. 또는 표준 입력으로부터 파일을 만들 수도 있습니다.

    cat [options] [file(s)]

파일 이름이 주어지지 않으면, 표준 입력으로 입력 받습니다.

   

옵션 :   -n 행 번호를 붙인다.

          -u 버퍼를 통하지 않고 출력시킨다.

          -A 화면 제어 문자를 보여준다. 라인의 끝은 $, 탭문자는 ^l로 보여준다.

 

ex)

control-D를 입력할 때까지 키보드(표준 입력)에 입력한 내용을 memo라는 파일로 저장한다.             

   cat > memo

 

test2와 test12 파일을 연결하여 te1이라는 파일에 저장한다.

   -rw-r--r--   1 hjh      linux         139 Sep 21 19:53 te1

  -rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test2

  $ cat te1 test2 > test12

  -rw-r--r--   1 hjh      linux         139 Sep 21 19:53 te1

  -rw-r--r--   1 hjh      linux         420 Oct  7 16:53 test12

  -rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test2

 

 

 

 


chfn

사용자의 finger 정보를 바꾸는 명령어입니다.

 

$ chfn

Changing finger information for hjh.

Password:

Name [hjh]: hjh

Office [hjh]:

Office Phone [hjh]:

Home Phone [hjh]:

 

Finger information changed.

 

 

chfs

사용자의 shell을 바꾸는 명령어입니다.

 

$ chsh

Changing shell for hjh.

Password:

New shell [/bin/bash]:

 

 

 

D

date

현재 시각을 출력합니다.

 

$ date

Sat Oct  7 17:34:34 KST 2000

 

 

 

df

파일 시스템 구조와 용량등을 보여줍니다.

 

$ df

Filesystem           1k-blocks    Used Available   Use% Mounted on

/dev/hda6              3016144   1231812   1631120     43% /

/dev/hda1                19487      3198        15283     17% /boot

/dev/hdb2               425582    193543     210065     48% /opt

/dev/hdb1               605164    137520     436904     24% /home/ftp

/dev/hdc                661404    661404             0    100% /home/ftp/pub/cdrom

/dev/hdd                559026    559026             0    100% /home/ftp/pub/cdrom1

 

$ df -m    (파일 크기를 Mbyte단위로 보여줍니다.)

Filesystem           1M-blocks Used Available Use% Mounted on

/dev/hda6                 2945      1203      1593  43%     /

/dev/hda1                   19         3           15  17%     /boot

/dev/hdb2                  416       189        205  48%     /opt

/dev/hdb1                  591       134        427  24%     /home/ftp

/dev/hdc                   646       646           0 100%     /home/ftp/pub/cdrom

/dev/hdd                   546       546           0 100%     /home/ftp/pub/cdrom1

 

 

dmesg

부팅 메세지를 보여주는 명령입니다.

CPU 속도에 대한 간단한 지표(오로지 속도)로는 리눅스 부팅 초기에 화면에 표시되는BogoMIPS라는 것을 들 수 있다.


Probing PCI hardware
Calibrating delay loop.. ok - 47.82 BogoMIPS
Memory 47020k/49152k available (764k kernel
code, 384k reserved, 984k data)

부팅 화면이 너무 빠르게 지나간다면 로그인하고 나서 dmesg 명령을 사용하여 확인해보기 바란다. dmesg명령의 출력화면도 한 페이지를 넘어가므로 more 또는 less를 파이프로 연결하여 사용하기 바란다. 위 결과는 필자의 펜티엄 120MHz에 대한 BogoMIPS 결과이다.

그럼 BogoMIPS란 무엇인가? BogoMIPS 미니 하우투 문서에 잘 설명되어 있다. MIPS‘Millions of Instructions Per Second’를 의미하는 것으로서 초당 몇 번의 연산 명령을 수행할 수 있는지 여부를 보여주는 것이다. 당연히 이 값이 높은 시스템일수록 빠르다는 것은 분명한 사실이다. 하지만 비슷비슷한 수치 간의 비교는 상당히 힘든 방식이다.

BogoMIPS라는 말은 커널 제작자인 Linus가 만든 말로서 Bogo는 ‘Bogus’ 즉 가짜라는 의미를 가지고 있다. 그렇게 과학적이지는 않으므로 우스개소리로 넘기라는 뜻이라고 생각한다. 이 값은 프로세서의 속도에 따라 결정되어야 하는 타이밍 루프(timing loop)값이다.

 

 

du

파일 size를 kbyte단위로 보여줍니다.

 

-a 디렉토리뿐만 아니라 파일의 크기도 보여줍니다.

-b KB단위가 아니라, byte 단위로 나타냅니다.

-s 서브 디렉토리는 나타내지 않습니다.                                       

 

ex)

$ du

...........

4       ./ccc

804     ./WWW/images

1424    ./WWW

4       ./SSS

22280   .

 

총 size보여줍니다.

$ du -s

22280   .

 

$ du -s /usr/bin

72996   /usr/bin

 

e

E

echo

아큐먼트로 오는 문장이나 그 주소에 해당되는 값을 보여줍니다.

 

형식 : echo [-ne] [string]

 

옵션 :

-e 특수한 의미를 가지는 문자를 실행합니다.

\a 벨소리를 냅니다.

\b 백스페이스

\f 폼피드

\n 새로운 라인

\r 한 줄을 띄웁니다.

\t 가로방향의 탭

\\ 역슬래시

 

 

 

 

exit

현재의 프로세스를 종료하고 빠져나갑니다.

 

 

 

 

 

 

F

find

$ find hjh

hjh

 

find ---주어진 파일명과 동일한 파일을 찾고, 그 경로를 출력한다.

# find / -name newbie -print

최상위 루트 디렉토리부터 검색하여 검색된 파일을 한 행에 하나씩 표준 출력

# find . -name newbie -print

현제의 작업 디렉토리에서 검색

# find / -size +1000 -print

최상위 루트에서 크기가 1000블록 이상인 파일 검색

# find . -size -1000 -print

현 디렉토리에서 크기가 1000블록 이하인 파일 검색

# find . -mtime +10 -print

10일 이전에 수정된 파일 검색

# find . -mtime -10 exec rm {} \:

10일 이내에 수정한 파일을 검색하여 모두 지운다

# find / -cmin 5 -print

5분전에 마지막으로 수정된 파일을 찾을 수 있다.

# find /home -empty -print

/home 디렉토리에 용량이 0인 파일과 디렉토리를 찾는다.

# find / -perm -4000 -print

퍼미션이 4000 이상인 파일을 모두 출력한다.

 

 

finger

who 명령을 보충하는 명령이 finger입니다. 특정 사용자에 대한 정보를 알려면 finger username(또는 사용자가 다른 컴퓨터에 있으면 finger username@domain)을 입력합니다.

 

$ finger

Login   Name      Tty     Idle  Login Time   Office     Office Phone

hjh       hjh        /0          Oct  7 16:17 (linux5)

root      root      *1    22:52  Oct  6 17:34

root      root      *p0   22:30  Oct  6 17:36 (:0.0)

root      root      *p1   22:30  Oct  6 17:36 (:0.0)

 

 

free

도스에서의 mem 과 같은 역할을 하며, 메모리의 사용상태와 남은 상태, 버퍼의 상태등을 보여줍니다.

 

$ free

                  total       used       free     shared    buffers     cached

Mem:          30848      29844       1004      14324       1028       8900

-/+ buffers/cache:     19916      10932

Swap:         68504      39508      28996 

 

 

fsck

모든 파일 시스템을 체크합니다.

단일 사용자 모드에서의 부팅

단일 사용자 모드( single user mode, 실행 레벨 1)는 중요한 실행 레벨이다. 이 상태에서는 단지 관리자만이 시스템을 사용할 수 있으며, login 같이 시스템 가동에 필수적인 최소한의 서비스만이 실행된다. 단일 사용자 모드는 몇몇 시스템 관리 작업을 하기 위해서 필요한데, 예를 들자면 /usr파티션에 fsck를 실행시키는 일 같은 것들이다. fsck를 실행시키기 위해서는 해당 파티션을 언마운트시켜야 하는데, /usr 같은 파티션을 언마운트시키자면 거의 모든 시스템 서비스들을 종료시켜야 한다.

가동 중인 시스템을 단일 사용자 모드로 전환하려면, telinit를 사용해 실행 레벨 1로 전환하면 된다. 부팅시에는, 커널 명령행에 single이나 emergency라고 적어주면 커널이 이것을 init에 전달해 주게 되며, init는 이것을 알아듣고 기본 설정된 실행 레벨 대신 레벨 1번을 사용하게 된다. (커널 명령행 인자를 넣는 방법은 시스템을 부팅하는 방법에 따라 좀 다를 수 있다. 보통은 LILO에서 boot: 프롬프트가 떴을 때, "boot:linux single"과 같이 하는 방법을 쓴다.)

단일 사용자 모드는, 주로 손상된 파일시스템이 마운트되기 전에 fsck 명령을 수동으로 실행하기 위해서 사용된다. 손상된 파일 시스템을 그대로 다시 마운트하면 더욱 큰 손상을 입힐 수 있기 때문에, 손상된 파일시스템은 마운트한다거나 기타 다른 조작을 해선 안되며 가능한 빨리 fsck로 복구를 시도하여야 한다.

손상된 파일시스템이 발견되면 init가 자동으로 fsck를 실행하는데, 이 자동 복구가 실패하게 되면 init 스크립트는 자동으로 시스템을 단일 사용자 모드로 진입시킨다. 이렇게 하면, 손상이 심각하여 fsck가 자동으로 복구할 수 없는 파일시스템이 그대로 마운트되는 일을 막을 수 있다. 물론 이럴 정도로 심하게 손상되는 일은 상당히 드물며, 보통 하드디스크가 손상되었거나 실험적인 커널을 사용했을 경우에 가끔 발생할 수 있는 일이다. 그러나, 이런 사태에 대비하고는 있어야 하겠다.

보안상의 이유로, 제대로 설정되어 있는 시스템이라면 단일 사용자 모드에서 쉘을 실행시키기 전에 루트 패스워드를 물어올 것이다. LILO에서 커널 명령행 인수로 single 을 적어 주는 경우도 이와 같다.(그러나 /etc/passwd가 들어있는 파일시스템이 깨졌다면 단일 사용자 모드로도 들어 올 수가 없다. 결국 이럴 때는 부팅 플로피를 사용해야만 할 것이다)

 

 

G

gdm, xdm, kdm

/etc/inittab

서버에서 xdm을 실행해줄 필요가 있다. 이는 보통 /etc/inittab에서 제어되며 사용가능한 xdm서버는 여러가지가 제공된다. (xdm, gdm, kdm등)

xdm을 사용할 것을 권장한다.

/etc/inittab에서 다음줄을 찾는다.

x:5:respawn:/etc/X11/prefdm -nodaemon 
6.0에서는 prefdm은 gdm에 링크되어 있으며, 6.1에서는 prefdm은 어떤 xdm을 이용할 것인가를 결정하는 스크립트 파일이다.

이 줄을 다음과 같이 수정한다.

x:5:respawn:/usr/bin/X11/xdm -nodaemon
보통 xdm은 런레벨 5에서 작동된다. 서버가 어떤 런 레벨에 있는지는 다음 항목을 보면 알 수 있다. /etc/inittab파일의 initdefault항목을 보았을 때, 다음과 같다면
id:3:initdefault:
아래와 같이 고쳐준다.
id:5:initdefault: 

 

 

grep

파일 중에서 어떠한 패턴을 검색합니다. 입력으로 파일이 오지 않으면 표준 입력으로부터 입력을 받습니다.

 

형식 :  grep  문장 파일명

 

옵션----------------

-A [숫자] 라인에서 패턴과 매치되는 문자열을 찾아서 그 이상의 라인을 전부 보여줍니다.

-B [숫자] 라인에서 패턴과 매치되는 문장열을 찾아서 그 이하의 라인을 전부 보여줍니다.

-b 매치되는 라인과 그 크기(bite)를 출력합니다.

-c 매치되는 개수를 출력합니다.

-f 파일로부터 패턴을 입력받아 들입니다.

-n 매치되는 라인과 그 라인수를 출력합니다.

-v 매치되지 않는 라인을 출력합니다.]

-w 주어진 단어와 완전히 매치되는 라인을 출력합니다.

 

ex) finger가들어있는 것들을 모두 보여줍니다.

$ grep finger .bash_history

grep finger *

grep finger .*

grep finger

grep finger newfile > fin

history|grep finger

history|grep finger | more

finger

finger | sort  

 

 

groupadd

그룹이용자를 추가하는 명령입니다.

 Group passwords.

/etc/groups file은 사용자가 특정 group의 회원이 될 수 있도록 허용하는 password를 담고 있다. 이 기능은 /usr/src/shadow-YYMMDD/config.h의 SHADOWGRP 상수를 정의할 경우 작동된다.

만일 이 기능을 쓴다면, /etc/gshadow file을 만들어, group password와 group 관리자에 대한 정보를 담을 수 있도록 하라.

/etc/shadow를 만들 때, 당신은 pwconv를 썼지만, /etc/gshadow를 만드는 데에는 그런 program이 없다. 하지만 걱정말라. 알아서 하니까.

처음 /etc/gshadow를 만들기 위해서 다음처럼 해라:

touch /etc/gshadow

chown root.root /etc/gshadow

chmod 700 /etc/gshadow

당신이 새로운 group을 만든다면, 자동적으로 /etc/group와 /etc/gshadow file에 그들이 덧붙여진다. group에 사용자를 추가하거나 삭제, 또는 group password를 바꾸면, /etc/gshadow file은 따라서 바뀔 것이다.

groups, groupadd, groupmod, groupdel program이 group을 고치는 도구로써 Shadow Suite에 포함되어 공급된다.

/etc/group file의 형식 -------- groupname:!:GID:member,member,...

 

gpasswd 명령은 group의 사용자나 관리자를 추가, 또는 삭제할 때 쓴다. root또는 관리자만이 group member를 추가, 삭제할 수 있다.

group password는 root나 group 관리자에 의해 passwd 명령으로 바꿀 수 있다.

gpasswd에 대한 manual page가 현재 제공되어 있지 않지만, 아무런 parameter없이 gpasswd를 치면 option에 대한 list가 나오므로, file format과 개념만 잘 이해하면 사용법을 쉽게 익힐 수 있다.

 

  

H

head

파일의 처음 n개의 내용을 보고자할 때 사용하는 명령입니다.

 

ex)

$ head .bash_history    

cd test

ls

ls /bin

cd ..

ls /

alias ls

cd root

vi root

ls -al

ls /...........

 

 

history

작업한 내역을 보여줍니다.

 

ex) 최종작업 5가지를 출력합니다.

$ history 5

 1025  ls -l Desktop

 1026  ls -al

 1027  mv test1 test2

 1028  ls -al

 1029  history 5

 

 

I

id

사용자의 로그인명, ID, 그룹 ID등을 출력합니다.

 

$ id

uid=1013(hjh) gid=1000(linux) groups=1000(linux),100(users)

 

 

 ispell

영어 단어의 철자를 확인합니다.

    ispell [options] [file(s)]

파일 이름을 써주면 해당 파일의 단어를 검사하며, 파일 이름없이 실행시키면 표준 입력의 단어를 체크합니다. 해당하는 단어가 없을 때는 비슷한 단어들의 리스트를 보여줍니다.                    

 

 

install

파일을 갱신하고 이진 파일로써 인스톨하기 위해 makefile에서 종종 사용되는 유틸리티입니다.

 

 

 

j

J

 join

두 개의 파일에서 공통된 라인을 찾아 내는 명령입니다.

 

 

joe

emacs에 기초한 텍스트 에디터입니다.

 

 

 

 

K

 kill

실행되어 있는 프로세서 ID를 입력해서 프로세서를 종료하는 명령입니다.

좀비 프로세스 또한 kill명령을 사용하여 끝낼 수 있는데, kill -signal pid 와 같은 형식으로 사용하지만 -9(SIGKILL)이 무조건 종료시키기 위한 옵션으로 많이 쓰입니다. 
다른 시그널은 프로세스에 따라서 무시될 수도 있습니다. 
꼭 kill이 아니더라도 프로세스에게 시그널을 보낼 수있는데, 컨트롤 Z(susp)를 누르면 SIGSTOP이, quit(^)는 SIGQUIT, intr(^C)는 SIGINT가 실행중인 프로세스에게 전달됩니다.

 

 

 

 

L

last

시스템에 마지막으로 접근한 사용자를 표시합니다.
옵션 : -f  파일명을 참조하여 출력합니다.
        -t  tty로 로그인한 터미널을 추적합니다.
        -v  로그인한 연도를 추가해서 출력합니다.

 

 

less

파일을 한 page 단위로 출력합니다.
 

$ less .bash_history

 

 

lf

디렉토리를 모두 보여줍니다.

 

$ lf

Desktop/  a*   bbb   down/  finda  homepage.tar.Z   newfile*   te1     test2

SSS/      a.c  ccc/  err    his    homepage.tar.gz  newfile2*  test/   test3/

WWW/      aaa  doc@  fin    hjh    homepage.tar.z   nohup.out  test12

 

 

ln

앞의 파일, 디렉토리를 뒤로 링크시킴

$ ln -s /usr/doc/HOWTO/ $HOME/doc

 

 

 

locate

저장 위치를 찾아 줍니다.

목록을 DB화 시켜놓았기대문에 빨리 찾습니다.

 

$ locate ls

/usr/lib/python1.5/mimetools.py

/usr/lib/python1.5/mimetools.pyc

/usr/lib/python1.5/mimetools.pyo

/usr/lib/pgsql/python/tutorial/pgtools.py

/usr/lib/pgsql/test/performance/sqls

/usr/lib/pgsql/test/performance/sqls/connection........

 

 

login, logout

자신을 식별하고 시스템에 대한 액세스를 얻기 위해 사용하는 명령입니다. 

형식 : login -옵션 사용자명
옵션 : -f 뒤의 사용자명으로 로그인 합니다.
        -g 뒤의 그룹사용자명으로 로그인 합니다.

터미널 상태에서 login 이라고 입력하면 새롭게 리눅스 시스템에 다른 ID로 로그인할 수 있습니다.

 

 

ls

디렉토리와 파일의 정보를 출력합니다. 도스의 dir과 비슷합니다.

    ls [-ailFRC] [파일 또는 디렉토리]

옵션----------------

    -l 파일에 대한 정보(파일 허용권, 소유자, 그룹, 크기, 날짜)를 긴 형식으로 보여줍니다.

    -a 는 모든 파일을 지정합니다(디렉토리의 히든 파일도 보여줍니다).

    -i 파일의 'inode'도 같이 보여줍니다.

    -t 최종 수정된 시간별로 정렬합니다.

    -r 파일을 역순, 즉 내림차순으로 배열합니다.

    -u 변경되지 않았더라도 최근에 엑세스했던 파일들을 보여준다. 이 t나 u옵션으로 최근에 다루었던 파일을 찾는데 유용하게 쓸 수 있습니다.

    -F 파일의 특성을 보여줍니다. 이름 뒤에 디렉토리면 /를 실행파일이면 *, 심블릭 링크된 파일이면 @를 붙여줍니다.

    -R 하위 디렉토리의 파일도 모두 보여줍니다.

    -C 컬럼별로 파일을 보여줍니다.

    -w 컬럼수로 가로의 크기를 설정합니다.

    -m 가로로 간단히 출력합니다.

    -- color=yes 서브디렉토리를 구별하기 위해 color로 보여집니다.

    

리눅스의 명령어에서 이런 옵션들은 대개 여러 개를 같이 써 줄 수 있다.    
ex) -a -l은 -al과 같이 쓸 수 있습니다..
      ls -art는 현재 디렉토리에서 파일이 최종 수정된 시간의 내림차순으로 정렬된 모든 파일의 이름을 나열합니다. 따라서 가장 최근파일이 맨 아래에 표시됩니다.

 

$ ls -l Desktop

total 40

drwxr-xr-x   2 hjh      linux        4096 Sep  7 18:53 Autostart

-rw-r--r--   1 hjh      linux        2487 Sep  7 18:53 Home.kdelnk

-rw-r--r--   1 hjh      linux         270 Sep  7 18:53 Printer.kdelnk

drwxr-xr-x   2 hjh      linux        4096 Sep  7 18:53 Templates

drwxr-xr-x   2 hjh      linux        4096 Sep  7 18:53 Trash

-rw-r--r--   1 hjh      linux         432 Sep  7 18:53 cdrom.kdelnk

-rw-r--r--   1 hjh      linux         417 Sep  7 18:53 floppy.kdelnk...이하 생략

 

 

 

 

M

mail

메일을 주고 받을 수 있는 명령입니다.

 

[hjh@mail mail]$ mail       

No mail for hjh                      ### 현재 받은 메일이 없다고 나타내 줍니다.

 

 

메일을 보낼 때의 형식 : mail E-mail주소(= mail ID@도메인이름)

 

[hjh@mail mail]$ mail hjh       

  ### hjh라는 ID를 가진 사용자에게 메일을 보냅니다.(현재 host를 같이 사용중일 경우에는 그냥 ID만 적어도 됩니다.)

Subject: 안녕     ### 제목을 적습니다.

안녕                 ### 편지 내용을 적습니다.

test입니다.

.                     ### 마칠 때는 새줄에서 .을 적습니다.

Cc:                 ### 참조할 메일 주소를 적습니다.

[hjh@mail mail]$

 

 

man

주어진 명령이나 자원들의 매뉴얼을 출력한다. more에서와 같이 페이지 넘기기나 탐색 명령을 줄 수 있다.

    man [options] [section] command

 

    -k 다음에 키워드를 주면 그것이 포함된 명령어를 보여준다. 이것이 apropos 명령과 같다.

    -f 다음에 명령어를 적어주면 한 줄짜리 짧은 명령어 설명을 보여준다.  이것은 whatis 명령과 같다.

 

section은 다음과 같이 나누어져 있다. 해당 번호를 적으면 된다.

(1) User Commands

(2) System Calls

(3) Subroutines

(4) Devioes

(5) File Formats

(6) Games

(7) Miscellaneous

(8) Sys. Administration

 

 

 

mv

파일의 이름을 변경하거나 이동하는 명령입니다. 

옵션 : -b 백업파일을 만든후 파일을 지우거나 옮깁니다.
         -i 이미 존재하는 파일을 덮어 쓸 것인지 물어봅니다.
         -v 파일을 옮기면서 파일명을 출력합니다.

 

ex)

-rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test1

$ mv test1 test2
$ ls

-rw-r--r--   1 hjh      linux         281 Sep 14 21:46 test2

 

 

mount,  mke2fs

mount 명령의 여러 양식은 매우 공통적입니다.

형식 : mount  [-t] [fs-type] device mount-point

/proc]#cat filesystems에서 fs-type을 알 수 있습니다.
/etc]#cat fstab 명령으로 device, mount-point를 확인할 수 있습니다.

예를 들어, 명령 mount /dev/hdb3 /mnt 는 디렉토리 /mnt 아래에 하드 디스크 파티션 /dev/hdb3을 탑재합니다.
비슷하게, mount -r -t iso9660 /dev/sr0 /mnt 는 디렉토리 /mnt 아래에 SCSI CD-ROM 드라이브 /dev/sr0을 탑재하며, 이 드라이브는 읽기 전용이고 ISO9660 파일 형식을 갖습니다. 
또한 명령 mount -vat nfs 는 /etc/fatab 파일에 나열되는 모든 NFS 파일 시스템을 탑재합니다.

파 일 시스템이 올바르게 탑재하지 않는 경우, 명령 mount -vf device mountpoint를 사용하여 어떤 mount가 수행중인지를 확인할 수 있습니다. 이 명령은 verbose목록을 제공하며 mount에게 파일 시스템 탑재를 제외한 모든 것을 수행하도록 지시합니다. 이 방법으로 mount 명령을 가장하고 명령이 수행하려고 시도하는 사항에 대한 많은 정보를 얻을 수 있습니다.

 

mke2fs는 partition을 ext2 file system으로 format하기 위해서 사용된다. - LINUX에서 가장 널리 사용되는 file system이다. mount는 formatted partition을 여러분의 계층적인 디렉토리 구조로 연결하기위해 사용된다.

도스 포맷의 디스크

 

먼 약 여러분들이 원래의 IOMEGA의 tools에 의해 생성된 DOS file structure를 가진 ZIP disk를 가지고 있다면 이들은 partition scan상에서 disk가 /dev/sda4 의 하나의 파티션만을 가진다고 보고를 할 것이다.

여러분들은 이들 disk를 /zip라는 directory에 mount를 할려면 이런식으로 해야만 한다.

mkdir /zip

mount -t msdos /dev/sda4 /zip

이 제 여러분들의 disk는 /zip에 마운트되어 보일 것이다. disk가 mount 되어 있는 동안에 여러분들은 그것을 제거하려 해서는 안된다. 여러분들이 disk를 가지고 작업이 끝났을 경우 그것을 umount 시키고 release 시켜 계층적인 directory로 부터 분리시키면 된다.

umount /zip

일단 여러분들이 mount되는 directory /zip를 만들고 나면 여러분들은 다시 이것을 할 필요는 없으며 후에 다시 어디선가 mount를 시키면 된다.

  

리눅스로 다시 포맷하기

 

만약 여러분들이 ZIP disk를 지우고 그 위에 Linux native file system을 만들기를 원하면, 전 disk에 대하여 fdisk를 해 주어야 한다.

fdisk /dev/sda

그리고 모든 기존의 파티션들을 지워야 한다. (d 명령을 사용한다) 그리고 나서 n 명령 이용하여 새로운 partition을 만들어 주고 w 명령으로 변화사항을 기입을 하고 q 명령으로 마친다.

파티션을 format한다.

mke2fs /dev/sda1

(여기서 1이란 수는 여러분들이 fdisk에서 partition에 부여한 번호이다. 이제 여러분들은 disk를 mount하여 사용하면 된다.

mount -t ext2 /dev/sda1 /zip

(위에서 사용한 mount point를 다시 사용한다.) 

 

 

 mkswap

스왑 공간 생성하기

스 왑 파일은 평범한 파일이다. 즉, 커널이 보기엔 일반 파일과 다를 바가 없다. 다만 다른 점이라면 스왑 파일에는 빈틈(holes)이 없으며, mkswap과 함께 사용하게 되어 있다는 점 정도이다. 그리고 스왑 파일은 꼭 자신의 파일시스템(local filesystem)에 있어야 하며, NFS를 통해 마운트된 파일시스템에 있어선 안 된다.

 

스 왑 파일 안에 홀(hole)이 없어야 한다는 점은 중요하다. 스왑 파일은 디스크의 일부를 미리 점유하고 있는데, 이렇게 하면 디스크 섹터를 일일이 할당하는 과정을 거치지 않고서도 메모리 페이지를 파일로 빠르게 스왑시킬 수 있다. 즉, 커널은 파일에 미리 할당되어 있는 섹터를 곧바로 사용하기만 하면 되는 것이다. 스왑 파일 안에 빈틈이 있다는 것은 아무 섹터도 할당되지 않은 공간이 파일 안에 있다는 뜻인데, 이렇게 되면 커널이 스왑을 사용하는데 곤란을 겪게 된다.

 

홀이 없는 스왑 파일을 생성하기 위한 좋은 방법은 다음과 같다.

$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024

1024+0 records in

1024+0 records out

$

 

  위에서 /extra-swap이란 것은 스왑 파일의 이름이며, bs= 뒤에 오는 숫자는 입출력 단위의 크기를 지정한 것이고(1024 byte, 즉 1 kilobyte), count= 뒤의 숫자는 입출력 단위의 몇배 크기의 파일을 만들 것인지를 지정하기 위한 것이다(즉, 여기서는 1024 kilobyte 크기의 파일을 만든 것이 되겠다). count는 꼭 4의 배수로 지정해 주는 것이 좋은데, 그 이유는 커널이 스왑하는 메모리 페이지(memory page)의 단위가 4 kilobyte이기 때문이다. 만일 파일의 크기를 4 kilobyte의 배수로 하지 않는다면, 파일 끝에 남는 몇 킬로바이트는 아예 사용되지 않을 것이다.

 

스 왑 파티션도 사실 특별한 것은 없다. 만드는 것도 다른 보통 파티션과 다를 것이 없지만, 특별한 점이라면 스왑파티션에는 어떤 파일시스템도 사용되지 않으며 날것(raw partition) 그대로 쓴다는 점이다. 스왑용으로 쓸 파티션은 type 82로 지정해 두는 것이 좋은데, 이렇게 해두면 파티션의 용도가 명확해진다. 그러나 사실 커널은 이런 것에 그다지 구애받진 않는다.

 

스 왑 파일이나 스왑 파티션을 만들고 나면, 그 앞부분에 일종의 인식표를 달아두어야 한다. 여기에는 커널이 사용하는 몇가지 정보가 위치하게 된다. 이것을 해주는 명령어는 mkswap인데, 다음과 같이 쓰인다. $ mkswap /extra-swap 1024

Setting up swapspace, size = 1044480 bytes

$ 이렇게 했다고 해서 이 스왑 공간을 사용하게 된 것은 아니다. 다만 커널이 이것을 가상 메모리로 사용할 수 있도록 준비만 마친 것이다.

 

mkswap 명령은 사용에 주의가 필요하다. 이 명령은 파일이나 파티션이 사용 중인지 아닌지를 판별해 주지 않기 때문이다. 따라서 mkswap을 부주의하게 사용하면 중요한 파일과 파티션을 간단히 날려버릴 수 있다! 그러나 다행히도, mkswap 명령은 주로 시스템 설치시에만 사용된다는 점이 우리를 안심시켜 주긴 한다.

 

리 눅스의 메모리 관리자는 각각의 스왑 공간의 크기를 약 127MB로 제한하고 있다(몇가지 기술적인 이유로 인해 실제 한계치는 (4096-10) * 8 * 4096 = 133890048 bytes 즉 127.6875 megabytes이다). 대신, 최대 8개의 스왑 공간을 연결해 사용하면 스왑을 대략 1GB까지 확장할 수가 있다.

 

 

 

n 

N

  nice

nice는 프로세스의 순위를 변경시킵니다. 이것은 커다란 프로그램을 컴파일할 때와 같이 CPU나 메모리를 많이 쓰는 경우 전체 시스템 속도를 많이 저하시켜 마치 다운된 것처럼 만들어 버릴 수도 있기 때문에 다른 프로세스들에게 먼저 양보하는 선행(?)을 하게 한다. 그 정도를 -n뒤에 nice값으로 주어 명령을 실행시킵니다.

    #nice command -n XX

nice값은 -20에서 19까지 있는데, 값이 작을수록 우선 순위가 높습니다. -n옵션을 쓰기 않으면 디폴트로 10이 쓰입니다. 일반 유저는 nice값을 증가시킬 수밖에 없지만 root는 nice값을 감소시켜 우선 순위를 높을 수도 있습니다.                 

 

 

  nslookup

도메인의 IP주소나 도메인 등의 정보를 출력합니다.

형식 : nslookup 도메인이나 IP

[hjh@mail hjh]$ nslookup

.......

www.yahoo.co.kr

.......

Name:    www.yahoo.co.kr

Address:  211.32.119.135

 

211.32.119.135

......

Name:    www.yahoo.co.kr

Address:  211.32.119.135

 

 

 

 

O

od

 8, 10, 16진 또는 파일의 ASCII 덤프를 만들기 위한 명령입니다.

형식 : od -옵션 file

옵션 : -b 바이트를 8진수로 출력합니다.
        -c 바이트를 아스키 문자로 출력합니다.
        -x 16진수 워드단위로 출력합니다.

 

 

P

passwd

사용자의 패스워드를 변경 또는 바꾸는 명령어입니다.(암호화 되어 /etc/passwd 파일에 놓여집니다.)

암호는 최소한 6자 이상이어야 합니다(8자 이상 권장).

암호는 구두점 기호와 숫자뿐만 아니라 대소문자를 모두 포함해도 됩니다.

 

$ passwd

Changing password for hjh

(current) UNIX password:

New UNIX password:

 

 

pine

메일을 주고 받을 수 있는 명령입니다.

 

$ pine

 

 

 PINE 4.10   MAIN MENU                            Folder: INBOX  19 Messages

           ?     HELP               -  Get help using Pine

           C     COMPOSE MESSAGE    -  Compose and send a message

           I     MESSAGE INDEX      -  View messages in current folder

           L     FOLDER LIST        -  Select a folder to view

           A     ADDRESS BOOK       -  Update address book

           S     SETUP              -  Configure Pine Options

           Q     QUIT               -  Leave the Pine program

     Copyright 1989-1999.  PINE is a trademark of the University of Washington.

                    [Folder "INBOX" opened with 19 messages]

? Help                     P PrevCmd                 R RelNotes

----------------

O OTHER CMDS > [ListFldrs] N NextCmd                 K KBLock

 


위와 같이 main창이 뜨면 선택해서 사용할 수 있습니다.

 

ping

ping(packet internet gopher)은 자신의 네트워크나 다른 네트워크가 통신이 잘되고 있는지 점검을 합니다.

형식 : ping hostname
 

 

 

 ps

프로세서에 관한 리스트를 보여줍니다.

 

 

 

 pwd

print working directory, 현재 작업 Directory를 출력한다.

 

 

 

q

Q

quit

대화식 모드에서 lpc를 떠납니다.

 

 

 

 

R

 rm

remove, 파일을 제거한다. 리눅스에서는 한번 지운 파일은 다시 복구할 수 없다.

    rm [options] file(s)

사용 가능한 옵션은 다음과 같다.

    -f 쓸수 없는 파일이라도 물어보지 않고 강제로 지운다.

    -i 각 파일에 대하여 지울 것인지 물어 온다.

    -r 서브디렉토리를 포함한 모든 내용을 재귀적으로 지운다.

    -v 지워지는 파일명을 출력한다.                                                                            

 

 

rmdir

remove directory, 디렉토리를 지운다. 만약 디렉토리가 비어있지 않으면 지울 수 없다.

 

 

 

 

S

 

 

 sh

원래의 unix명령인 본 셸을 불러내는 명령어 입니다.

 

 

su

사용중에 다른 ID로 재접속하는 명령어입니다.

형식 : su 사용자ID (그냥 su만 입력하면 root로 재접속하겠다는 뜻입니다.)

 

 

 

                            swapon
스왑 공간 사용하기

스왑 공간을 초기화하는 데는 swapon 명령을 사용한다. 이 명령은 커널에게 해당 공간을 스왑으로 사용할 수 있다는 점을 알려준다. 이 명령에게는 추가하고자 하는 스왑 공간의 경로를 인수로 전달해 주어야 한다. 임시 스왑 파일을 스왑 공간에 추가하고자 한다면 다음과 같이 한다.

$ swapon /extra-swap
$

스왑 공간들은 /etc/fstab 파일에 의해서 자동적으로 사용될 수도 있다.

/dev/hda8        none        swap        sw     0     0
/swapfile none swap sw 0 0

시스템이 시작될 때, 스크립트를 통해서 swapon -a 명령이 실행되는데 이 명령은 /etc/fstab에 나열되어 있는 스왑 공간들을 모두 사용하게 해 준다. 그래서 흔히 swapon 명령은 추가적인 스왑이 필요할 때만 사용되는 것이 보통이다.

free 명령을 쓰면 스왑의 사용 상황을 모니터 할 수 있다. 이것은 현재 얼마나 많은 용량의 스왑이 사용되고 있는지 알려준다.

$ free
total used free shared buffers
Mem: 15152 14896 256 12404 2528
-/+ buffers: 12368 2784
Swap: 32452 6684 25768

$

여기서 Mem: 이라고 쓰여진 첫째줄은 실제 물리적 메모리의 상황을 보여주는 것이다.커널은 물리적 메모리를 약 1 megabyte 정도 사용하는데, total이라고 쓰여진 세로줄에서 보여주는 전체메모리 양에는 이 커널이 차지하는 공간이 빠져 있다. used라는 세로줄은 현재 사용중인 메모리 양을 보여주고 있으며(두번째 가로줄은 버퍼 로 사용되는 부분을 제외하고 계산한 양이다), free란 세로줄에서는 전혀 사용되지 않은 양을 보여주고 있다. 또한 shared란 부분은 프로세스간에 공유되고 있는 메모리를 나타내고 있는 것이므로, 그 양이 많은 것은 기쁜 일이다. buffers는 현재 디스크 버퍼 캐쉬로 사용되는 메모리 양을 보여주고 있다.

마지막 줄인 Swap:은 위와 같은 항목을 스왑 공간에 똑같이 적용시킨 내용이다. 이 항목이 모두 제로라면, 스왑 공간이 아예 동작하고 있지 않다는 뜻이다.

같은 정보를 top 명령이나 /proc/meminfo 파일을 통해 얻을 수 있다. 그러나 어느 경우든, 특정한 스왑 공간에 대한 정보를 얻는 것은 좀 어렵다.

스왑 공간은 swapoff 명령으로 기능을 멎게 할 수 있다. 그러나 임시로 잡은 스왑 공간이 아니라면, 스왑을 끌 필요는 없다. 만약 스왑을 끄게되면, 스왑 공간에 들어있던 메모리 페이지들이 먼저 실제 메모리로 들어가야 되는데, 실제 메모리에 여유가 없는 경우에는 또 다른 스왑 공간으로 방출되게 된다. 그런데 이 메모리 페이지들을 모두 수용하기에 가상메모리마저도 부족하다면, 그때부터는 리눅스 시스템이 무진장 버벅대기 시작할 것이다. 시간이 아주 많이 걸린 후에는 좀 잠잠해지겠지만, 여전히 시스템은 사용불능 상태에 있게 된다. 따라서 스왑을 끄기 전에, 충분한 여유 메모리가 있는지 꼭 확인해 보아야만 한다(free 같은 것으로).

swapon -a 명령으로 자동적으로 사용되는 스왑 공간들은, 마찬가지로 swapoff -a 명령을 써서 끌 수 있다. 이것도 역시 /etc/fstab 파일에 나열되어 있는 스왑 공간만을 끄기 때문에, 나머지 수동으로 추가시킨 스왑들은 영향을 받지 않는다.

때 때로, 실제 메모리가 많이 비어 있는데도 불구하고 스왑을 아주 많이 쓰고 있는 경우를 보게 될 수가 있다. 보통 이런 일이 발생하는 경우는 이렇다. 어떤 덩치 큰 프로세스가 실제 메모리를 많이 점유하는 바람에 시스템이 스왑을 많이 사용하게 되었다고 하자. 이 프로세스가 종료되면 실제 메모리엔 여유 공간이 많이 남게 되지만, 스왑으로 한번 내려간 데이터는 그것이 당장 필요하지 않는 한 실제 메모리로 불려지지 않는다. 따라서 스왑 영역을 많이 사용하면서도 실제 메모리가 많이 비어있는 현상이 꽤 오래 지속될 수 있는 것이다. 그러므로 이런 현상에 특별히 신경쓸 필요는 없다. 하지만, 최소한 그 원리는 이해하고 있어야 나중에 불안하지 않을 것이다.

 


 

 

T

tar

사용법: tar [옵션]... [파일]...

 

주요 동작 모드 :

  -t, --list              아카이브의 내용물을 출력합니다

  -x, --extract, --get    아카이브에서 파일을 추출합니다

  -c, --create            새로운 아카이브를 만듭니다

  -d, --diff, --compare   아카이브와 파일 시스템간의 차이점을 비교합니다

  -r, --append            아카이브 끝에 파일을 추가합니다

  -u, --update            아카이브 안의 것보다 새로운 파일만 추가합니다

  -A, --catenate          아카이브에 tar 파일을 추가합니다

      --concatenate       -A와 같음

      --delete            아카이브로부터 제거합니다 (자기 테이프에선 안됨!)

 

동작 변경자:

  -W, --verify               아카이브를 기록한 다음 검증하도록 합니다

      --remove-files         아카이브에 파일을 추가한 다음 지웁니다

  -k, --keep-old-files       추출할 때 이미 존재하는 파일을 덮어쓰지 않습니다

:

 -U, --unlink-first         추출하기에 앞서 대상 파일을 지웁니다

      --recursive-unlink     디렉토리를 추출하기에 앞서 그 체계를 비웁니다

  -S, --sparse               스파스 파일을 효율적으로 처리합니다

  -O, --to-stdout            표준 출력으로 파일을 추출합니다

  -G, --incremental          오래된 GNU 형식의 점진적 백업 파일을 처리합니다

  -g, --listed-incremental   새로운 GNU 형식의 점진적 백업 파일을 처리합니다

      --ignore-failed-read   읽을 수 없는 파일에 대해 영 아닌 값으로 종료하지

                             않습니다

 장치 선택과 전환:

  -f, --file=ARCHIVE             아카이브 파일 또는 ARCHIVE 장치를 사용합니다

      --force-local              이름에 콜론이 있는 아카이브 파일도 지역 파일로

                                 인식합니다

      --rsh-command=COMMAND      rsh 대신 원격 COMMAND를 사용합니다

  -[0-7][lmh]                    드라이브와 기록 밀도를 지정합니다

  -M, --multi-volume             다중 볼륨 아카이브를 생성/출력/추출합니다

  -L, --tape-length=NUM          NUM x 1024 바이트를 쓴 뒤에 테이프를 바꿉니다

  -F, --info-script=FILE         각 테이프의 끝에서 스크립트를 실행합니다

                                 (-M을 포함함)

      --new-volume-script=FILE   -F FILE과 같음

      --volno-file=FILE          FILE 안에 있는 볼륨 번호를 사용/갱신합니다

 

장치 블럭 설정:

  -b, --blocking-factor=BLOCK    레코드당 BLOCK x 512 바이트

      --record-size=SIZE         레코드당 SIZE 바이트, 512의 배수

  -i, --ignore-zeros             아카이브에서 영으로 된 블럭을 무시합니다

                                 (EOF를 의미함)

  -B, --read-full-records        읽은 것을 재블럭화합니다 (4.2BSD 파이프용으로)

정보 출력에 관한 옵션:

      --help            이 도움말을 인쇄하고 끝냅니다

      --version         tar 프로그램의 버전 번호를 인쇄하고 끝냅니다

  -v, --verbose         처리되는 파일을 순서대로 출력합니다

      --checkpoint      아카이브를 읽을 동안 디렉토리 이름을 인쇄합니다

      --totals          아카이브를 만들 동안 쓰여진 총 바이트 수를 인쇄합니다

  -R, --block-number    각 메시지마다 아카이브내의 블럭 번호를 표시합니다

  -w, --interactive     모든 행동에 대해 확인을 요구합니다

      --confirm!ation    -w와 같음

 

  -s, --same-order             sort names to extract to match archive

      --preserve-order         same as -s

      --preserve               same as both -p and -s

  -z, --gzip, --ungzip               filter the archive through gzip

  -Z, --compress, --uncompress       filter the archive through compress

      --use-compress-program=PROG    filter through PROG (must accept -d)

 

ex) 디렉토리 SSS를 homepage.tar로 압축합니다.

$ tar cvf homepage.tar /SSS

SSS/            

 

권한 시간까지 출력합니다.

$ tar tvf homepage.tar

drwxr-xr-x hjh/linux         0 2000-10-07 17:11:51 SSS/

 

/etc 디렉토리를 aaa란 파일로 압축시킵니다.

$ tar -zcvf aaa /etc

 

압축된 aaa란 파일을 /etc디렉토리에 압축을 풉니다.

$ tar -zxvf aaa /etc

 

aaa bbb ccc 파일을 zzz 파일로 압축시킵니다.

$ tar -zcvf zzz aaa bbb ccc

 

 

tail

파일의 마지막 n개의 내용을 보고자할 때 사용하는 명령입니다.

 

ex)

$ tail .bash_history       

sdm

kdm

swapon

free

dmesg

dmesg |less

fsck

adduser

groupadd

exit..........

 

 

touch

touch [OPTION]... FILE...

  or : touch [-acm] MMDDhhmm[YY] FILE... (obsolescent)

Update the access and modification times of each FILE to the current time.

 

  -a                     change only the access time

  -c                     do not create any files

  -d, --date=STRING      parse STRING and use it instead of current time

  -f                     (ignored)

  -m                     change only the modification time

  -r, --reference=FILE   use this file's times instead of current time

  -t STAMP               use [[CC]YY]MMDDhhmm[.ss] instead of current time

      --time=WORD        access -a, atime -a, mtime -m, modify -m, use -a

      --help             display this help and exit

      --version          output version information and exit

 

STAMP may be used without -t if none of -drt, nor --, are used.

Note that the three time-date formats recognized for the -d and -t options

and for the obsolescent argument are all different.

 

 

 

 

U

 

umount

umount를 umount되어지는 파일 시스템에서 실행을 시키면 아직 그 파일 시스템은 사용중(busy)이게 되므로 언마운트시 에러가 발생하게 된다. 언마운트는 꼭 그 파일 시스템을 벗어나서 실행시켜야 한다.

unmount를 할 때는 단순히

    umount directory_name 또는 umount device_name

을 써주면 되고

    umount -a

라고 쓰면 현재 마운트 되어 있는 디스크장치들 중에서 /etc/fstab에 있는 모든 장치를 unmount한다. 그리고, 마운트된 디스크 장치들과 디렉토리의 리스트는 /etc/mtab에 저장되어 있다.

예를 들어, disk를 /zip라는 directory에 mount를 할려면 이런식으로 해야만 한다.

mkdir /zip

mount -t msdos /dev/sda4 /zip

이제 여러분들의 disk는 /zip에 마운트되어 보일 것이다. disk가 mount 되어 있는 동안에 여러분들은 그것을 제거하려 해서는 안된다. 여러분들이 disk를 가지고 작업이 끝났을 경우 그것을 umount 시키고 release 시켜 계층적인 directory로 부터 분리시키면 된다.

umount /zip

일단 여러분들이 mount되는 directory /zip를 만들고 나면 여러분들은 다시 이것을 할 필요는 없으며 후에 다시 어디선가 mount를 시키면 된다.

 

 

 

uptime

서버 부팅시간과 현재시간이 출력됩니다.

 

$ uptime

  5:33pm  up 5 days,  5:39,  4 users,  load average: 0.52, 0.58, 0.52

 

 

V

 vi

vi 에디터

유닉스 계열의 운영체제에서 가장 널리 쓰이는 에디터입니다.

vi 명령어 요약

 

1.시작

vi file

vi를 시작하여 지정한 파일 편집

vi -R file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집

view file

읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집


2.종료

:wq

데이터를 저장하고 종료

:q!

데이터를 저장하지 않고 종료


3. 시스템이 다운된 후에 되살리기

vi -r

되살릴 수 있는 모든 파일 이름 보여주기

vi -r file

vi를 시작하여 지정한 파일 되살리기


4. 디스플레이 제어하기

^L

현재 화면을 다시 디스플레이하기

:set number

내부 줄 번호 디스플레이

:set nonumber

배부 줄 번호 디스플레이 않기


5. 마지막으로 지운 것 복사하기

p

마지막으로 지워진 것을 커서의 뒤/아래에 삽입

P

마지막으로 지워진 것을 커서의 앞/위에 삽입

xp

두 문자를 바꿈

deep

두 단어를 바꿈

ddp

두 줄을 바꿈


6. 패턴 검색

/rexp

지정된 정규 표현식에 대해 앞으로 이동

/

이전의 패턴에 대해 앞으로 검색을 반복

?rexp

지정된 정규 표현식에 대해 뒤로 이동

?

이전의 패턴에 대해 뒤로 검색을 반복

n

/나 ?명령에 대해 같은 방향으로 반복

N

/나 ?명령에 대해 반대 방향으로 반복


7. 약어의 사용

:ab short long

short를 long에 대한 약어로 변경

:ab

현재 약어 목록을 표시

:una short

약어 short를 표시


8. 줄 길이의 조정

r

문자를 뉴라인으로 변경

J

줄의 결합

:set wm=n

오른쪽으로 n문자 위치에서 자동적으로 줄 나눔


9. 커서 이동

h

커서를 한 칸 왼쪽으로 이동

j

커서를 한 줄 아래로 이동

k

커서를 한 줄 위로 이동

l

커서를 한 칸 오른쪽으로 이동


커서를 한 칸 왼쪽으로 이동


커서를 한 칸 오른쪽으로 이동

-

커서를 이전 줄의 처음으로 이동

+

커서를 다음 줄의 처음으로 이동


커서를 다음 줄의 처음으로 이동

0

커서를 현재 줄의 맨 앞으로 이동

$

커서를 현재 줄의 맨 끝으로 이동

^

커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동

w

커서를 다음 단어의 첫 글자로 이동

e

커서를 다음 단어의 끝 글자로 이동

b

커서를 이전 단어의 첫 글자로 이동

W

w와 같음(문장 부호 무시)

E

e와 같음(문장 부호 무시)

B

b와 같음(문장 부호 무시)

(

다음 문장의 처음으로 이동

)

이전 문장의 처음으로 이동

{

다음 문단의 처음으로 이동

}

이전 문단의 처음으로 이동

H

커서를 화면 맨 위로 이동

M

커서를 중간으로 이동

L

커서를 맨 아래로 이동


10. 편집 버퍼를 통한 이동

^F

한 화면 아래로 이동

^B

한 화면 위로 이동

n^F

n화면 아래로 이동

n^B

n화면 위로 이동

^D

반 화면 아래로 이동

^U

반 화면 위로 이동

n^D

n줄만큼 아래로 이동

n^U

n줄만큼 위로 이동


11. 셸 명령 실행

:!command

vi를 중단하고 지정한 셸 명령을 실행

:!!

vi를 중단하고 이전의 셸 명령을 실행

:sh

vi를 중단하고 셸을 실행

:!csh

vi를 중단하고 새로운 C-셸을 실행


12. 패턴에 의한 치환

:s/pattern/replace/

현재 줄의 치환

:lines/pattern/replace/

지정한 줄의 치환

:line,lines/pattern/replace/

지정한 범위의 치환

:%s/pattern/replace/

모든 줄의 치환


13. 데이터 읽기

:liner file

file의 내용을 지정한 줄 다음에 삽입

:r file

file의 내용을 현재의 줄 다음에 삽입

:liner !command

command의 결과를 지정한 줄 다음에 삽입

:r !command

command의 결과를 현재의 줄 다음에 삽입

:r !look pattern

지정한 pattern으로 시작된 단어 삽입


14. 정규 표현식을 사용하기 위한 특수 기호

.

뉴라인을 제외한 모든 단일 문자와 대응

*

영 또는 그 이상의 선행 문자와 대응

^

줄의 시작과 대응

$

줄의 끝과 대응

\<

단어의 시작과 대응

\>

단어의 끝과 대응

[ ]

묶여진 문자중의 하나와 대응

[^ ]

묶여진 문자를 제외한 아무것하고나 대응

\

이어지는 기호를 문자 그대로 해석


15. 줄 번호

nG

줄번호 n으로 건너뛰기

1G

편집 버퍼의 첫 줄로 건너뛰기

G

편집 버퍼의 마지막 줄로 건너뛰기

:map g lG

g가 lG와 같도록 매크로 정의


16. 삽입

i

입력 모드로 전환, 커서 위치 앞에서 삽입

a

입력 모드로 전환, 커서 위치 뒤에서 삽입

I

입력 모드로 전환, 현재 줄의 앞에 삽입

A

입력 모드로 전환, 현재 줄의 끝에 삽입

o

입력 모드로 전환, 현재 줄의 아래에 전개

O

입력 모드로 전환, 현재 줄의 위에 전개


17. 편집하고 있는 파일을 바꾸기

:e file

지정한 파일의 편집

:e! file

지정한 파일의 편집, 자동 점검의 생략


18. 내용 고치기

r

단지 한 글자만 변경(입력 모드로 바뀌지 않음)

R

입력하는 대로 겹쳐 써서 변경

s

삽입에 의해 한 단어의 변경

C

커서의 위치로부터 줄 끝까지 삽입에 의한 변경

cc

전체 줄을 삽입에 의한 변경

S

전체 줄을 삽입에 의한 변경

cmove

커서부터 move까지 삽입에 의해 변경

~

대,소문자 바꾸기


19. 고치기의 취소 또는 반복

u

편집 버퍼를 수정했던 마지막 명령을 취소

U

현재 줄을 저장

.

편집 버퍼를 수정했던 마지막 명령 반복


20. 문자 삭제

x

커서가 있는 문자 삭제

X

커서의 왼쪽 문자 삭제

D

커서부터 줄의 끝까지 삭제

dd

현재 줄의 전체 삭제

dmove

커서부터 move까지 삭제

dG

커서부터 편집 버퍼의 끝까지 삭제

d1G

커서부터 편집 버퍼의 맨 앞까지 삭제

:lined

지정한 줄의 삭제

:linelined

지정한 범위의 삭제


21. 여러 줄의 복사와 이동

:linecotarget

지정한 줄을 복사하여 target 줄 밑에 삽입

:linelinecotarget

지정한 범위를 복사하여 target 줄 밑에 삽입

:linemtarget

지정한 줄로 이동하여 target 줄 밑에 삽입

:line, linemtarget

지정한 범위로 이동하여target 줄 밑에 삽입


22. 데이터를 처리하기 위한 셸 명령의 사용

n!!command

n번 줄에서 command의 실행

!move command

커서부터 move까지 command 실행

!move fmt

커서부터 move까지 줄들을 형식 맞추기


23. 데이터 저장하기

:w

원래의 파일로 데이터를 저장

:w file

지정한 파일로 데이터를 저장

:w>> file

지정한 파일에 데이터를 추가

 

 

W

w

현재 로그인한 사용자가 무엇을 하고 있는지 보여줍니다.
uptime의 정보가 헤더로 쓰입니다.
JCPU는 사용자가 사용한 CPU시간을 PCPU는 현재 작업에 쓰이는 CPU 사용 시간을 보여줍니다.

$ w

  4:36pm  up 5 days,  4:42,  4 users,  load average: 0.89, 0.41, 0.35

USER   TTY   FROM       LOGIN@   IDLE   JCPU   PCPU  WHAT

root     tty1     -                Fri 5pm 23:00m 25.77s  0.03s  startx

root     ttyp0    :0.0             Fri 5pm 22:39m  2:26m  2:26m  xlock

root     ttyp1    :0.0             Fri 5pm 22:39m  0.40s  0.22s  ztelnet

hjh      pts/0    linux5            4:17pm  0.00s  0.46s  0.06s  w

 

 

wc

Word Count, 명시된 파일 또는 표준 입력 안의 행, 단어, 문자의 수를 나타냅니다.

형식 :   wc [options] [file(s)]

옵션 :

    -l 행(line)수만 출력합니다.

    -c 문자(character)수만 출력합니다.

    -w 단어(word)수만 출력합니다.

 

ex)

파일속에 들어있는 단어의 수만을 보고자할 때 사용하는 명령입니다.

$ wc -w .bash_history

   2044 .bash_history

 

파일속에 들어있는 문자의 수만을 보고자할 때 사용하는 명령입니다.

$ wc -c .bash_history      

  10703 .bash_history

 

 

whereis

$PATH로 지정된 경로에서 찾아 전체 경로명을 보여준다.

ex)

$ whereis cat

cat: /bin/cat /usr/man/man1/cat.1

 

 

who

who 명령의 목적은 시스템에 로그인된 사람을 찾는 것입니다.

현재 로그인된 사용자들의 로그인 이름, 터미널 회선 및 로그인 시간을 나열합니다.

옵션  :  -u   현재 로그인된 사용자만을 나열합니다.

           -H   각 열 위에 헤더를 표시합니다.

 

$ who

root     tty1     Oct  6 17:34

root     ttyp0    Oct  6 17:36

root     ttyp1    Oct  6 17:36

hjh      pts/0    Oct  7 16:17

 

 

whoami

사용자의 ID를 출력합니다.

$ whoami

hjh

 

 

X

 

 

xdm

xdm는 X-Windows상에서의 login screen을 보여준다. 어떤 system은 특정 level로 가도록 지정하면 xdm을 시동시킨다(/etc/inittab를 보도록).

리눅스 부팅 스크립트에 넣어두면 리눅스를 처음 부팅할 때부터 엑스윈도우로 부팅할 수 있다.

Shadow Suite가 설치되면 xdm도 update될 필요가 있다. 이는 매우 쉽다.

xdm.tar.gz는 ftp://sunsite.unc.edu/pub/Linux/X11/xutils/xdm.tar.gz에 있다.

xdm.tar.gz를 구한 다음, /usr/src에서 푼다:

tar -xzvf xdm.tar.gz

 

/usr/X11R6/lib/X11/config/linux.cf에서 다음 line을 고친다:

#define HasShadowPasswd    NO

를 다음처럼

#define HasShadowPasswd YES

 

그리고 나서 실행 file을 만들자:

cd /usr/src/xdm
xmkmf
make depend
make

 

모든 걸 제자리로...:

cp xdm /usr/X11R6/bin/

 

xdm은 root 권한으로 실행되기에 permission을 바꿀 필요는 없다.

 

 

 

 

 

 

 

Z

 zcat

파일을 압축된 양식으로 보존하지만 데이터를 다른 명령에 파이프하려는 경우 사용할 수 있는 명령입니다.  zcat은  cat 명령과 똑같이 작업하지만 입력으로 압축된 파일이 필요합니다.  zcat은 파일을 압축 해제한 후 표준 출력 디바이스에 프린트합니다.

예를 들어, namelist라는 파일에 저장된 이름과 주소 목록을 압축한 경우, 압축된 파일의 이름은 namelist.gz입니다. 압축된 파일의 내용을 프로그램에 대한 입력으로 사용하려는 경우, 다음과 같이 zcat 명령을 사용하여 파이프라인을 시작할 수 있습니다.

 zcat namelist | program1 | program2 ...

2009. 3. 16. 15:15

대충의 JBoss-4.2.3 GA 릴리즈 노트 정리




 Release Name: JBoss-4.2.3.GA

Notes:
JBoss AS 4.2.3.GA Release Notes

이번 릴리즈는 JBoss Application Server v4.2 시리즈의 세번째 버그 픽스 릴리즈이다. 이 릴리즈는 커뮤니티에서 보고된 
JBossAS v4.2.x릴리즈에 대한 버그를 수정한 것이다. 이전 버전인 4.2.0/4.2.1/4.2.2에 대한 하위버전 호환성이 있으므로 
그냥 업그레이드 해도 된다. 자세한 내용은 상세 릴리즈 노트 섹션을 참고하십시오.

이 릴리즈의 두번째 목정은 Java6에 대한 지원이 향상되었다는 것이다. JBossAS 4.2.3.GA는 JDK5와 JDK6을 이용하여 빌드가 
가능하다. JDK5 컴파일된 바이너리는 엄격한 테스트를 거쳐서 안정성을 보장할 수 있고, Java 5&6 VM에서 동작한다.( JDK6에 대해서
약간의 설정 변경이 필요하다. 아래를 참조 ) JDK6으로 컴파일된 버전은 JDBC 4 API를 지원한다. 그러나 지금 시점에서는 실험적이라고
생각한다.
JBoss AS 4.2 는 5.대 버전으로 넘어가는 과정에 있고, 5.대의 좋은 기능들을 (4.대 커널에 맞추어) 일부 적용하고 있다.  

JBoss AS 4.2는 또한 JBoss Enterprise Application Platform의 중심축이다. JBoss AS와 JBoss Seam이 패키징되어 제공되는 상용 Application
플랫폼은 JBoss/Red Hat에 의해 제공된다. 자세한 정보는 Sacha의 블로그를 읽어보시라.

Java EE 1.4 를 구현한 API에 대한 내용은 Java EE v1.4 문서에 있다. Java EE 1.4에 대한 깊은 이해가 필요하면,Java EE™ 1.4 Tutorial를 읽어보라.
jboss-4.2.x 시작하기 안내 문서는 JBoss Application Server 문서 목록에 포함되어 있다.

Note: 4.2.x 릴리즈에서는 EJB3같은, 일부 JavaEE5 기능을 제공한다. 그러나 이는 Java EE5 인증을 받지 않았다.

Overview

    * Highlights
    * Known Compatibility Issues
    * Known Configuration Issues
    * JBoss/Thirdparty Library Updates
    * Detailed Release Notes
    * Additional Docs and Help
    * Licenses
    * About JBoss

Highlights of JBoss AS 4.2 series

    * JBoss EJB3는 기본적으로 JBossAS 4.2.x에 포함되어 배포된다. JDK5에 기반하고 있기 때문에, 좀더 편리한 점이 있다. 더 이상 
    jdk1.4 런타임용 소스를 관리하지 않아도 된다. 기본적으로 jdk5에서 실행된다고, 가정한다.
    * JBoss Web v2.x는 JBossAS 4.2에 포함되는 웹 컨테이너이고, Apache Tomcat에 기반하여 구현되었다. Tomcat에는 Apache Portable Runtime(APR)이 포함되고, 
    Apache Http 서버에 필적하거나 능가하는 tomcat의 native 대용량 처리와 성능 관련 특징들이 포함되어 있다. 
    이 native 라이브러리가 없으면 JBoss Web은 표준 non-native connector mode로 동작한다. native library는 별개로 다운로드하여 JBOSS_HOME/bin/native에 설치해야한다.
    * Jboss Transactions v4.2는 JBossAS 4.2의 기본 트랜잭션 관리자이다. Jboss 트랜잭션은 18년간 산업현장에서 분산 트랜잭션분야의 선두로 이요되었고 검증되었다.
    JBoss 트랜잭션의 JTA버전은 완전히 복구 가능한 트랜잭션을 제공한다. 분산 트랜잭션 지원을 위해서 JBoss 트랜잭션의 JTS버전이 필요하다.
    또한, 언제나 과거의  JBossTM fast in-memory transaction manager 로 되돌릴 수도 있다. (단,구버전은 더이상 지원이 없을 것이다.)
    * JBoss WS는 JBoss 4.2와 함께 제공되는 웹 서비스 스택이다.
    * JGroups/JBossCache는 필요한경우 이용할 수 있는, 채널 다중화 를 제공한다.
    * JBoss Remoting는 최신 2.2.x버전으로 업그레이드 되었다.  이는 새로운 JBoss Messaging을 필요로 하는 써드파트 라이브러리에 대한
    의존성을 해결하기 위한 것이다. 즉, 특별한 개발 없이 JBossMQ 메시징 프로바이더를 JBoss Messaging으로 바꿀수 있다는 의미이다.


Compatibility Issues
This lists the changes that could affect compatibility.

우리의 제품 버전 원칙에 의해 JBossAS 4.2.3는 4.2.x 버전과 완벽히 일치한다. 그러나, 개별적인 JBoss나 써드파티 라이브러리 역시 그런지
확인하고 싶을것이다. 이전 버전의 JBoss 릴리즈와 관련된 이슈에 대해 다음에 대해 체크할 필요가 있다.  :
(신버전 설치와 무관하므로 패스함)

JBossAS 4.2.2.GA

    * JBossWS 1.2.1 supported JAX-WS only as a technology preview while JBossWS 2.0.1 used in AS 4.2.2 provides full 
JAX-WS support. If you have used in your code the annotation org.jboss.ws.annotation.WebContext this must be 
replaced by org.jboss.wsf.spi.annotation.WebContext.
    * JBoss WS 1.0.x due to a deployer limitation used a proprietary .jse extension for deploying WS endpoints 
nested in .sar files. This was deprecated with JBoss WS 1.2.x. and with JBoss WS 2.x this proprietary extension is 
not supported anymore as it is possible to use the standard .war extension for deploying nested WS endpoints. If you 
see: INIT_WAITING_DEPLOYER error messages for .jse files, re-package them using a .war extension, JBWS-1854.
    * Another known limitation is that EJB3 web service endpoints can only be specified using annotations and not 
metadata in jboss.xml. This is something that will be addressed in a future release, JBAS-4852, JBWS-1813.
    * Finding the default local business interface on a ejb3 bean may not work in certain inheritance scenarios. 
You may workaround this known problem by annotating the local business interface. Read more about this at EJBTHREE-1062.
    * EJB Timer related fixes, JBAS-3379, JBAS-4053.
    * JBossMQ related fixes, JBAS-4525, JBAS-4555, JBAS-4559, JBAS-4607, JBAS-4625, JBAS-4699
    * JSP compiler now set to compile JDK 1.5 source code by default, JBAS-4605.
    * The mail-ra.rar resource adapter was missing from the distro, JBAS-4659.
    * HSQLDB (which shouldn't be used in production) v1.8.0.8 has a known bug when used in server mode, 
JBAS-4694. This doesn't affect the default jboss installation where HSQLDB is used in in-process mode.
    * Serialization of HomeHandleImplIIOP has changed. In the unlikely case of a compatibility problem, define the 
system property 
-Dorg.jboss.proxy.ejb.old.homehandle.serialization=true 
to fall back to the legacy serialization mode, JBAS-4801. 

JBossAS 4.2.1.GA

    * JBoss TS, the new default transaction manager will not let you enlist multiple 1-phase participants in the 
same transaction. This was *not* the default behavior with the legacy JBoss TM that would log a warning and continue. 
There are good reasons for this change, mainly to avoid heuristic outcomes in the case of system crashes, which is 
the primary reason of using a transaction manager anyway! If your come across this problem you should try to fix it 
by switching to XA resources or implementing some form of compensating transactions. However, if this is not option 
and you are fully aware of the consequences you can override this behavior by setting com.arjuna.ats.jta.allowMultipleLastResources 
to true in conf/jbossjta-properties.xml. For more details read the wiki on Multiple1PC, or consult the JBoss 
Transactions documentation.
    * A major problem related to the cleaning up of threads after user transaction timeouts was corrected in JBAS-4481. 
If you happen to be using User Transactions make sure you follow the correct pattern for committing or rolling them back.
    * Another serious classloading issue that could lead to a hanging JBoss with a 100% CPU utilization was fixed with JBAS-4441.

JBossAS 4.2.0.GA

    * A JavaSE 5 runtime is required to run JBossAS 4.2. A full JDK with tools.jar support is no longer needed by 
jboss, since JBoss Web packages the eclipse JDT compiler for compiling JSP pages and javassist has its own internal 
compiler. JAVA_HOME can point to a JRE, JBAS-4161.
    * When compared to previous 4.0.x releases, the various JBoss APIs should be stable but backwards compatibility for 
individual component implementations may not be guaranteed, e.g. interoperating with another JBoss instance that uses 
an older version of JGroups.
    * Tomcat 6 is now bundled as part of JBoss Web. deploy/jbossweb-tomcat55.sar has been replaced by deploy/jboss-web.deployer.
    * conf/log4j.xml has been renamed to conf/jboss-log4j.xml, to allow log4j.properties override from scoped 
deployments, JBAS-1853.
    * log4j and commons-logging have both been upgraded. commons-logging is patched in addition, JBAS-2823.
    * Since the latest log4j includes a trace level, there is no need to reference the custom jboss TRACE level in 
conf/jboss-log4j.xml configs, JBAS-4163.
      Instead of: <category name="org.jboss.system"><priority value="TRACE" class="org.jboss.logging.XLevel"/></category>
      you can use: <category name="org.jboss.system"><priority value="TRACE"/></category>
    * Better integration with WebSphere MQ 5.x, JBAS-3183.
    * The MyFaces JSF implementation has been replaced by the Glassfish JSF 1.2 one, JBAS-3897.
    * Hibernate, hibernate-annotations and hibernate-entity-manager have all been upgraded. to v3.2.1.
    * The default invoker for EJBs has been changed from the rmi-invoker to the unified-invoker, provided by JBoss 
Remoting, JBAS-3950.
    * Apache commons http-client and apache-codec were removed from jbossall-client.jar, JBAS-4365.
    * The address that is stored in the host portion of the RMI codebase URL can now be set correctly, JBAS-3325.
    * The java2ClassLoadingCompliance setting in jboss-web.xml was ignored; this has been fixed, JBAS-3047.
    * In JBoss 4.2 the unified invokers based on JBoss Remoting are the default transport for accessing EJBs. 
Using the unified invokers JBoss 4.2 can interoperate safely with JBoss AS 4.0.4.GA/4.0.5.GA, using the flag 
-Djboss.remoting.pre_2_0_compatible=true on the JBoss 4.2.x side. For interoperating with older JBoss AS versions 
(3.2.8.SP1 to 4.0.3.SP1) the legacy rmi or pooled invokers need to be used. See JBAS-4407 and the wiki page on JBoss 
Version Compatibility.

Configuration Issues
This lists the changes that could affect configuration.
JBossAS 4.2.3.GA

    * JBossAS 4.2.3.GA 는 Java5,Java6과 모두 사용될 수 있다. Java5로 컴파일된 바이너리가 메인 배포본이다. 이는 Java5&6환경에서
    철저한 테스트를 거쳤다. Java6에서 실행할때는 다음 라이브러리를 JBOSS_HOME/client 에서 JBOSS_HOME/lib/endorsed directory로
    복사해야한다. 그래야 JBossWS에서 JAX-WS 2.0을 사용할 수 있다.:
          o jboss-jaxrpc.jar
          o jboss-jaxws.jar
          o jboss-jaxws-ext.jar
          o jboss-saaj.jar
          o jaxb-api.jar
    * Sun Java 6과 이용할때, 문제가 발생하면 -Dsun.lang.ClassLoader.allowArraySyntax=true 를 사용하라. 
    Java6에서는 다른 몇가지 잠재적인 문제가 있다.:
          o ORB getting prematurely destroyed when using Sun JDK 6 (see Sun Bug ID: 6520484)
          o Unimplemented methods in Hibernate for JDK6 interfaces.
    * Java6으로 컴파일된 JBossAS 4.2.3 에서는  확장 JDBC 4 API를 사용할 수 있다. 이는 Java6 환경에서만 사용가능하다.
    수동으로 설정해야 하는 것은 없다. 단, 실험적인 상태라는 것을 명심해야한다.

JBossAS 4.2.2.GA

    * Extensions to LdapExtLoginModule, JBAS-4619.
    * Escape syntax for mysql and postgresql in jboss CMP, JBAS-4463.
    * Introduced a new system property org.jboss.mx.loading.UnifiedLoaderRepository.notifyMode to 
provide fine-grained control over the emission of notifications whenever Unified Classloaders are created. 
Classloader leaks can appear if those notifications are send to remote jmx agents, so the usage of the flag can 
avoid this problem, JBAS-4953. 

JBossAS 4.2.1.GA

    * %PATH% is not removed from java.library.path in the presence of JAVA_HOME/bin/native, so e.g. native jdbc 
drivers can be loaded, JBAS-4418.

JBossAS 4.2.0.GA

    * JBossAS now binds its services to localhost (127.0.0.1) *by default*, instead of binding to all 
available interfaces (0.0.0.0). This was primarily done for security reasons because of concerns of users going to 
production without having secured their servers properly. To enable remote access by binding JBoss services to a 
particular interface, simply run jboss with the -b option. To bind to all available interfaces and re-enable the 
legacy behaviour use -b 0.0.0.0. In any case, be aware you still need to secure you server properly.
    * There now distinct properties to configure the various mcast ports, JBAS-4021.
    * When running under Linux, run.sh forces the use of IPv4, due to a jdk bug, JBAS-4332.
    * JBoss EJB3 is now included by default. If you don't need/want EJB3 support, simply remove deploy/ejb3.deployer.
    * When using native libraries for JBoss Web store them in JBOSS_HOME/bin/native, which is automatically included 
in the classpath, JBAS-4162.
    * JBoss Transactions is the new default transaction manager in JBoss. It is configured in 
conf/jboss-service.xml and has additional properties defined in conf/jbossjta-properties.xml. The transaction 
log is stored by default at server/default/data/tx-object-store.
    * If you are on Red Hat Linux, check out the changes in bin/jboss_init_redhat.sh, JBAS-4041.
    * The JBossAS distributions usually include the installer (.jar), the sources (.tar.gz) and the canonical 
binary release (.zip). Unzipping the binary distribution (.zip) with a native unzip utility will restore correctly 
the executable permission in the /bin/*.sh files. However, unzipping using the JDK jar utility ignores the executable 
bit, so this need to be set manually.
    * bin/shutdown.sh no longer sources run.conf, JBAS-4155.

Library Updates
For a full list of the JBoss and thirdparty libraries used with JBoss AS 4.2.3 see  build-thirdparty.xml.
JBossAS 4.2.3.GA

JBoss Library Updates

    * javassist upgraded to v3.8.0.GA (from v3.6.0.GA)
    * jboss cache upgraded to v1.4.1.SP9 (from v1.4.1.SP5)
    * jboss jaxr upgraded to v1.2.0.SP1 (from v1.2.0.GA)
    * jboss transactions upgraded to v4.2.3.SP7 (from v4.2.3.SP6)
    * jboss ws upgraded to v3.0.1 / native v2.0.4 (from v2.0.1.SP2)
    * jboss xb upgraded to v1.0.0.SP3 (from v1.0.0.SP1)
    * jboss remoting upgraded to v2.2.2.SP8 (from v2.2.2.SP1)

Thirdparty Library Updates

    * jfreechart upgraded to v1.0.2 (from v0.9.20)
    * oswego-concurrent upgraded to v1.3.4-jboss-update1 (from v1.3.4-jboss)
    * sun-jsf upgraded to v1.2_09-b01 (from v1.2_04_P02)
    * codehaus-jettison was introduced at v1.0-RC2

JBossAS 4.2.2.GA
JBoss Library Updates

    * javassist upgraded to v3.6.0.GA (from v3.5.0.GA)
    * jboss aop upgraded to v1.5.6.GA (from 1.5.5.GA)
    * jboss cache upgraded to v1.4.1.SP5 (from 1.4.1.SP3)
    * jboss common upgraded to v1.2.1.GA (from v1.2.0.GA)
    * jboss remoting upgraded to v2.2.2.SP1 (from v2.2.1.GA)
    * jboss ts upgraded to v4.2.3.SP6 (from v4.2.3.SP5)
    * jboss web upgraded to v2.0.1.GA (from v2.0.0.GA)
    * jboss ws upgraded to v2.0.1.SP2 (from v1.2.1.GA)
    * jboss xb upgraded to v1.0.0.SP1 (from v1.0.0.GA)
    * jgroups upgraded to v2.4.1.SP4 (from v2.4.1.SP3)

Thirdparty Library Updates

    * hsqldb upgraded to v1.8.0.8 (from v1.8.0.2)
    * jacorb upgraded to v2.3.0jboss.patch5 (from v2.3.0jboss.patch4)
    * oswego-concurrent upgraded to v1.3.4-jboss (from v1.3.4)

JBossAS 4.2.1.GA
JBoss Library Updates

    * hibernate, upgraded to v3.2.4.SP1_CP01 (from v3.2.3.GA)
    * jboss-ts14, upgraded to v4.2.3.SP5 (from v4.2.3.SP3)
    * jboss-remoting, upgraded to v2.2.1.GA (from v2.2.0.SP4)

Thirdparty Library Updates

    * jacorb, upgraded to v2.3.0jboss.patch4 (from v2.2.4jboss.patch1)
    * sun-jsf, upgraded to v1.2_04_P02 (from v1.2_04_P01)


Changes:
Detailed Release Notes
JBossAS-4.2.3.GA
Feature Request

    * [ JBAS-3051 ] change jmx console title to display the name of the jboss server configuration with the machine name
    * [ JBAS-4156 ] [jmx-console] Add additional informatin to page header
    * [ JBAS-4455 ] LoadBalancePolicy that tries to pin all requests associated with a tx to one server
    * [ JBAS-4501 ] JBoss AS 4.2 won't build with JDK 1.6
    * [ JBAS-4804 ] GenericHeaderAuthenticator injection of ssoid, sessioncookie name
    * [ JBAS-4986 ] Remove compile-time dependency on Debugger from ClusterPartition
    * [ JBAS-5035 ] MySQLValidConnectionChecker has driver name com.mysql.jdbc.Driver hard coded
    * [ JBAS-5139 ] Support injection-target properties within service-ref declarations
    * [ JBAS-5704 ] Provide JAAS credentials in org.jboss.ant.JMX task so that calls can be made to security protected MBeans

Bug

    * [ JBAS-1901 ] web-console shows dead archives after redeploy
    * [ JBAS-2477 ] Exception in web-console j2ee domain after undeploy of application
    * [ JBAS-3402 ] Web Console and Firefox
    * [ JBAS-3406 ] JMX Console throws 500 exception on regular expressions
    * [ JBAS-3637 ] twiddle ignores environment properties when creating its InitialContext
    * [ JBAS-4246 ] JBoss logo not displayed for web status when accessed from web console
    * [ JBAS-4287 ] run.sh can consume 100% single CPU resources on Solaris
    * [ JBAS-4343 ] NullPointerException causing bad password exception in LdapLoginModule when the role attribute is not set for a given entry
    * [ JBAS-4453 ] SerializableResultSetMetaData did not have the classname for the column set.
    * [ JBAS-4662 ] XADatasource property names are not using the javabean convention
    * [ JBAS-4673 ] SARDeployer should throw an error if there is more than one loader repository
    * [ JBAS-4753 ] ExternalContext can pass duplicate interfaces to Proxy.newProxyInstance(loader, interfaces, handler)
    * [ JBAS-4766 ] HTTP session replication failover failures with async buddy replication
    * [ JBAS-4805 ] InitialContextFactory.getHAContext() should not use hardcoded localhost for lookup
    * [ JBAS-4815 ] UnifiedInvokerProxyHA - Client instance check and assignment should be atomic
    * [ JBAS-4870 ] Redelivery flags not updated in case of JBossMQ node failure
    * [ JBAS-4892 ] WebService ignores java.rmi.server.codebase system property
    * [ JBAS-4897 ] CVE-2007-5461: Information Leak in Tomcat Webdav Servlet
    * [ JBAS-4911 ] MSSQLValidConnectionChecker throws exception with MS SQL Server 2005 JDBC driver
    * [ JBAS-4921 ] Web service deployment: web.xml modified to web.xml.org - Subsequent runs fail
    * [ JBAS-4927 ] Code added in 4.2.1 breaks web app that works in 4.2.0
    * [ JBAS-4934 ] JBossCacheWrapper should not re-use data gravitation option
    * [ JBAS-4938 ] source tarball contains non free code
    * [ JBAS-4943 ] jboss-ds_1_5.dtd is wrong
    * [ JBAS-4945 ] Messages transfered from DLQ to working queue will never be resent to DLQ
    * [ JBAS-4950 ] Transaction failover authorisation is broken within UnifiedInvokerHAProxy
    * [ JBAS-4964 ] txFailoverAuthorizations should be keyed on transaction propagation context
    * [ JBAS-4969 ] Security-domain name entry in options map causing exception in custom login modules
    * [ JBAS-4975 ] Usage of read-ahead on-find with entity beans containing binary attributes (mapped to BLOB, VARBINAR, ...) breaks eager loading.
    * [ JBAS-4994 ] ReplyHeaderFilter reports old versions: Servlet 2.4, Tomcat-5.5
    * [ JBAS-5014 ] EJBMethodPermission implies should check for null methodname and methodSig==""
    * [ JBAS-5015 ] Deploy entity beans in Oracle 11g on JBoss 4.2.1 and JBoss 4.2.1
    * [ JBAS-5020 ] Incorrect system property usage in JMX console clustering service
    * [ JBAS-5026 ] NPE in JvmRouteValve.handleJvmRoute
    * [ JBAS-5049 ] NoInitialContextException on deployment of EAR that contains MDB and persistence.xml
    * [ JBAS-5063 ] JBoss 4.2.2 doesn't work with JSF RI 1.2_07
    * [ JBAS-5068 ] Possible NullPointerException in DistributedReplicantManager#_add()
    * [ JBAS-5072 ] Fix null pointer exception when getting keys, values, or entry's in the ConcurrentHashmap
    * [ JBAS-5080 ] Need to check transaction status on SQL operations
    * [ JBAS-5091 ] BuddyCommunicationTimeout is too low
    * [ JBAS-5105 ] PostgreSQL Entity Command for jdbc2pm is Not Working Properly
    * [ JBAS-5108 ] Twiddle should print out 'invoke' results, even when no propertyeditor for the returned object is found
    * [ JBAS-5109 ] Web context and servlet paramters not available in WebMetaData
    * [ JBAS-5112 ] WebXMLRewriter leaks input stream
    * [ JBAS-5127 ] Hardcoded partition name in cluster-examples-service.xml
    * [ JBAS-5142 ] cmp2.x jdbc2 pm: missing a join in a collection path translating "member of"
    * [ JBAS-5149 ] 'webservices' meta data (jboss.xml) not available for ejb3 web service endpoints
    * [ JBAS-5189 ] Txn-Manager arjuna commits data after timeout in long transactions
    * [ JBAS-5206 ] Can't start JBoss 5 with a pure JRE installation
    * [ JBAS-5220 ] twiddle not displaying info regarding java.lang:* beans when 
-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl is used .
    * [ JBAS-5228 ] Race condition maintaining acknowledgements when pushing messages to the client
    * [ JBAS-5275 ] org.jboss.test.security.test.XMLLoginModulesUnitTestCase failing on Z-servers
    * [ JBAS-5317 ] org.jboss.test.security.test.HttpsUnitTestCase failing with the IBM jvm
    * [ JBAS-5354 ] Need to improve error handling around thread pool errors
    * [ JBAS-5364 ] UnifiedInvokerHAProxy can throw NullPointerException under load
    * [ JBAS-5428 ] Addition of undocumented feature has caused a bug in normal behaviour
    * [ JBAS-5431 ] PooledInvokerProxy is not using the TPC factory setup by the UserTransaction client
    * [ JBAS-5444 ] remove twiddle.bat/shutdown.bat %ARGS% processing in favour of %*
    * [ JBAS-5459 ] JDBCStartCommand fails with index already exists
    * [ JBAS-5475 ] NullPointerException when no invoker proxy bindings configured
    * [ JBAS-5479 ] SSLSessionInterceptor has a copy/paste error in invokeHome method
    * [ JBAS-5492 ] ClusteredSingleSignOn dead member cleaner throws NPE
    * [ JBAS-5502 ] Enabling JBossMQ XA recovery fails
    * [ JBAS-5526 ] DB Connections established which fail check-valid-connection-sql do not immediatly close their connection
    * [ JBAS-5528 ] If SingletonStatelessSessionInstancePool is used for a SLSB, container MBean state is reported incorrectly
    * [ JBAS-5568 ] sample-binding.xml does not work for jboss-messaging-1.4
    * [ JBAS-5571 ] When JBossMQ does XA recovery it should always write the XID to the log
    * [ JBAS-5574 ] Don't log an error for BMT Stateful not completing their transactions
    * [ JBAS-5608 ] Removing a session from a clustered sso entry removes all sessions
    * [ JBAS-5612 ] MySQLValidConnectionChecker is not serializable
    * [ JBAS-5613 ] OracleValidConnectionChecker is not serializable
    * [ JBAS-5623 ] JMS ActivationSpec 'acknowledgeMode' does not follow spec recommendation
    * [ JBAS-5639 ] org.jboss.test.util.test.PropertyEditorsUnitTestCase failing on Z-systems
    * [ JBAS-5644 ] Incorrect containerName attribute setting in valves
    * [ JBAS-5657 ] JSP source code exposure in jmx-console
    * [ JBAS-5670 ] Using MessageConsumers with Message Selector make messages stuck in queue
    * [ JBAS-5678 ] closed jdbc connection before transaction rollback is called
    * [ JBAS-5696 ] removal of entity with self-referencing CMR and fk-constraint
    * [ JBAS-5706 ] Default session metadata replication too infrequent
    * [ JBAS-5735 ] Session not reliably bound to SessionReplicationContext if SecurityAssocationValve not present

Task

    * [ JBAS-4148 ] Replace Gjt code used in the ejb 2.x validation phase
    * [ JBAS-4424 ] WebAuthentication:Generate a SSOID
    * [ JBAS-4811 ] Integrate the JBossWS core testsuite in the release QA
    * [ JBAS-4874 ] Track JBoss and thirdparty dependencies for JBossAS 4.2.3
    * [ JBAS-4876 ] Re-enable JGroups message bundling
    * [ JBAS-4918 ] replace ${jboss.server.home.dir}/log references with ${jboss.server.log.dir}
    * [ JBAS-5057 ] testsuite regression org.jboss.test.security.test.EJBPermissionUnitTestCase
    * [ JBAS-5059 ] Update Service Binding configuration for JBossMessaging
    * [ JBAS-5060 ] Upgrade jfreechart to v1.0.2
    * [ JBAS-5088 ] Failing org.jboss.test.jbossmq.test.ConnectionConsumerErrorFiredUnitTestCase.testExceptionListenerFiredOnError (jrockit)
    * [ JBAS-5094 ] org.jboss.test.jaxr.scout failures
    * [ JBAS-5101 ] Re-enable JGroups message bundling
    * [ JBAS-5210 ] Expose sub-pool statistics for Improved Management.
    * [ JBAS-5226 ] ClientUserTransaction should be configured with Unified invoker
    * [ JBAS-5331 ] AOP deployer should include pluggable instrumentor jar(s)
    * [ JBAS-5402 ] Keep JBoss Cache jars out of default
    * [ JBAS-5485 ] Add mdbsessionpoolclear testcase from EJB3
    * [ JBAS-5648 ] Upgrade to jboss-jaxr-1.0.2.SP1
    * [ JBAS-5650 ] Merge clustering fixes from EAP branch
    * [ JBAS-5677 ] Add discussion of usage of FC to Clustering Guide
    * [ JBAS-5702 ] Add JDBC4 support to DataSourceInterceptor
    * [ JBAS-5710 ] Get the JBoss-AS-4.2.x-TestSuite-sun15 passing
    * [ JBAS-5711 ] Get the JBoss-AS-4.2.x-TestSuite-jrockit15 passing
    * [ JBAS-5712 ] Add JDBC4 support to Branch_4_2
    * [ JBAS-5720 ] Get a JBoss-AS-4.2.x-TestSuite-sun15-sun16 going
    * [ JBAS-5721 ] Get a JBoss-AS-4.2.x-TestSuite-sun16-sun16 going
    * [ JBAS-5722 ] Get all the testsuites passing
    * [ JBAS-5723 ] Verify JBoss-AS-4.2.x-CompatibilityMatrix
    * [ JBAS-5724 ] Verify TCK1.4 tests are passing
    * [ JBAS-5725 ] Verify EJB3 tests are passing
    * [ JBAS-5726 ] Verify JBossWS testsuite
    * [ JBAS-5731 ] JaxWS 2.0 / JaxWS 2.1 support for Branch_4_2
    * [ JBAS-5748 ] Update links in ROOT.war/index.html
    * [ JBAS-5750 ] Update the interoperability tests matrix with 4.2.2.GA client libs
    * [ JBAS-5765 ] Make release notes for 4.2.3.GA

Sub-task

    * [ JBAS-4875 ] Upgrade jboss transactions to 4.2.3.SP7 (from 4.2.3.SP6)
    * [ JBAS-4877 ] Upgrade JSF to 1.2_08
    * [ JBAS-4925 ] Upgrade jboss cache to 1.4.1.SP7 (from 1.4.1.SP5)
    * [ JBAS-4933 ] Upgrade to jbossxb 1.0.0.SP3 (from 1.0.0.SP1)
    * [ JBAS-4955 ] All the known bind address properties should be set to the default bind address
    * [ JBAS-4962 ] Upgrade jboss remoting to v2.2.2.SP5 (from v2.2.2.SP1)
    * [ JBAS-4981 ] Transaction variable is not reset in ejb2 inflow interceptor
    * [ JBAS-4996 ] Upgrade jbossws to 2.0.4.GA (from 2.0.1.SP2)
    * [ JBAS-5082 ] Add a transaction status interface for the connection manager and implement it in TxConnectionManager
    * [ JBAS-5083 ] Add the transaction active check to the jdbc resource adapter
    * [ JBAS-5084 ] Add the transaction active check to the jms resource adapter
    * [ JBAS-5170 ] 4.2.x fix to get HA Singleton election policies working in heterogeneous topologies
    * [ JBAS-5498 ] JDK6: org.jboss.test.security.test.LoginModulesUnitTestCase
    * [ JBAS-5727 ] Upgrade javassist to 3.8.0.GA
    * [ JBAS-5729 ] Upgrade jboss remoting to v2.2.2.SP8 (from v2.2.2.SP5)
    * [ JBAS-5753 ] fix org.jboss.test.jbossmx.compliance.objectname.MalformedTestCase
    * [ JBAS-5754 ] Get tests-webservice passing
    * [ JBAS-5755 ] org.jboss.test.jca.test.StatisticsFormatterUnitTestCase.testXmlFormatterStatistics
    * [ JBAS-5758 ] fix iiop tests
    * [ JBAS-5764 ] Upgrade to the latest JSF implementation 1.2_09 (from 1.2_08)
    * [ JBAS-5768 ] Upgrade JBoss Cache to 1.4.1.SP9
    * [ JBAS-5769 ] Fix org.jboss.test.jca.test.BackgroundValidationUnitTestCase.testDeployedBackgroundValidationFailure
    * [ JBAS-5770 ] fix 3 org.jboss.test.jca.test.JDBCStatementTestsConnectionUnitTestCase failures
    * [ JBAS-5772 ] org.jboss.test.cluster.test/FamilyClusterInfoUnitTestCase(Default-TCP)/testSynchronization

Patch

    * [ JBAS-4478 ] ignore local ant options when building
    * [ JBAS-5073 ] fix build authenticated proxy (there seems to have been a cut and paste error at some point)
    * [ JBAS-5527 ] jboss_4_0.dtd should include support for SingletonStatelessSessionInstancePool
2009. 3. 16. 15:08

JBoss 5.0.0 변경 내역




Changes:
Detailed Release Notes
Includes versions: JBossAS-5.0.0.GA
Feature Request

    * [ JBAS-70 ] Security event listener that could be plugged in to listen to authentication and authorization events.
    * [ JBAS-3767 ] Create a canonical "JndiServiceMBeanSupport" useful for binding objects to JNDI
    * [ JBAS-3997 ] getManagedConnection retries
    * [ JBAS-4588 ] DeploymentSorter in the new profile service based deployment scanner
    * [ JBAS-5192 ] ServiceBindingManager that can handle pojo services
    * [ JBAS-5348 ] Move remoting configuration into deploy
    * [ JBAS-5535 ] Modularisation of the JBoss Bootstrap
    * [ JBAS-5545 ] Implement the jsr77 view on top of the new deployers/profileservice/mc
    * [ JBAS-5766 ] Add new aop deployers
    * [ JBAS-5900 ] jars are not loaded from the lib directory of a sar in JBoss AS 5
    * [ JBAS-5960 ] EJB2: Lack of security domain in JBoss DD does not bypass security
    * [ JBAS-5966 ] Migrate TomcatService mbean deployment descriptor to mc bean descriptor
    * [ JBAS-5974 ] Turn of deployment of base-aspects.xml by default
    * [ JBAS-5975 ] Switch to MC based AOP deployers
    * [ JBAS-5989 ] Security Beans need ManagedObject annotations
    * [ JBAS-5998 ] Add resources filtering to MetaDataAwareProfile
    * [ JBAS-6013 ] Support createDestination in jboss/message-driven
    * [ JBAS-6032 ] Refactor AOPClassLoaderDeployer
    * [ JBAS-6058 ] Web descriptors parsing
    * [ JBAS-6070 ] Need an overview of the profile service in the 5.0 docs
    * [ JBAS-6088 ] Add simple cache / cluster support for Spring beans
    * [ JBAS-6099 ] add alternate, not meta data based JSF injection provider
    * [ JBAS-6130 ] AS5:JACC: * in web.xml should allow configurable authorization bypass
    * [ JBAS-6136 ] Pojoize the jca configuration
    * [ JBAS-6158 ] Reduce the distribution size by sharing the libraries between the all and default configs
    * [ JBAS-6182 ] Add support for JBC MVCC locking in Hibernate 2nd Level Cache configs
    * [ JBAS-6205 ] Make server.log logging level configurable via system property
    * [ JBAS-6223 ] Externalize the DeploymentRepository attachments location
    * [ JBAS-6267 ] Introduce SecurityContextInterceptor in the ejb2 proxy

Bug

    * [ JBAS-2149 ] ByValueContainerInvoker
    * [ JBAS-5081 ] New transaction manager does not implement TransactionTimeoutConfiguration properly
    * [ JBAS-5114 ] MessageDriven EJB3 does not create destination automatically
    * [ JBAS-5115 ] Valid jboss-app.xml file not recognized correctly by jbossxb runtime
    * [ JBAS-5209 ] Hot deployment scanner deploys files which were expected to be filtered
    * [ JBAS-5301 ] JaasSecurityManagerService.startService - java.lang.IllegalArgumentException: handler exists
    * [ JBAS-5412 ] BaseLocalProxyFactory should not check for explicit security context
    * [ JBAS-5689 ] Not seeing bootstrap ManagedDeployment/ManagedComponents
    * [ JBAS-5732 ] Deployment of @WebService fails
    * [ JBAS-5767 ] Security schemas
    * [ JBAS-5895 ] OptAnnotationMetaDataDeployer is processing too many classes
    * [ JBAS-5942 ] Session replication with passivation causes inconsistent session data
    * [ JBAS-5943 ] JRMPInvokerProxyHA should not failover if PooledInvokerProxy.invoke() throws 
java.rmi.ConnectException with cause of java.io.EOFException
    * [ JBAS-5951 ] ProfileService unit tests are not validating persistence of updates
    * [ JBAS-5964 ] NPE in expiration of passivated sessions
    * [ JBAS-5968 ] NullPointerException in WebServiceDeployerEJB
    * [ JBAS-5978 ] Mask password logging in ServiceConfigurator
    * [ JBAS-5979 ] java.lang.NoClassDefFoundError: org/jboss/aop/pointcut/ast/PointcutExpressionParserVisitor in EJB client
    * [ JBAS-5999 ] EJBTimerServiceImpl timerServiceMap access should be synchronized
    * [ JBAS-6002 ] NPE for JSF managed beans.
    * [ JBAS-6007 ] Wrong bean name when EJB is not deployed within an ear
    * [ JBAS-6017 ] JRMPProxyFactory should rebind the proxy in JNDI rather than just bind it
    * [ JBAS-6028 ] Bootstrap dependencies failure of ejb3 session beans
    * [ JBAS-6040 ] Ensure correct TCCL is set before accessing clustered web session cache
    * [ JBAS-6041 ] let the web metadata override a default context-param
    * [ JBAS-6044 ] JMX console invokeOp confused ObjectName encoding
    * [ JBAS-6056 ] UserTransaction cannot be deployed as clustered proxy and sticky transactions randomly work
    * [ JBAS-6060 ] Tolerate security domain convention in JBoss DD
    * [ JBAS-6062 ] Exploded WAR archive with no web.xml is no longer supported
    * [ JBAS-6067 ] XACML policy is not removed when deployment unit is undeployed
    * [ JBAS-6068 ] Mask passwords in the Deployers
    * [ JBAS-6077 ] seam-int: hot-redeploys occur constantly on JBoss 5 trunk
    * [ JBAS-6076 ] Seam war not using jboss-seam-int
    * [ JBAS-6093 ] Exposing the EMF in JNDI via jboss.entity.manager.factory.jndi.name doesn't work in JBoss 5.0.0.CR2
    * [ JBAS-6098 ] juddi-service.sar bundles juddi.jar & scout.jar
    * [ JBAS-6107 ] Seam hibernate and jpa examples throw ZipExceptions during deployment - but the jars are valid
    * [ JBAS-6110 ] Tomcat status in the web-console missing logo
    * [ JBAS-6111 ] Ensure hibernate.cache.region_prefix is specified by PersistenceUnitDeployment
    * [ JBAS-6116 ] UserTransaction.commit()/rollback() are not fully compliant with the JTA standard
    * [ JBAS-6117 ] IOException in VFS while undeploying a Seam example
    * [ JBAS-6131 ] EJB1.1 isCallerInRole must throw RTE if role is not found in deployment descriptor
    * [ JBAS-6135 ] Concurrent connection of HAPartition channels fails
    * [ JBAS-6147 ] Profile.getModifiedDeployments() does not ignore .bak file
    * [ JBAS-6149 ] connectionMap.remove in WrapperDatasourceService never called
    * [ JBAS-6153 ] Transaction sticky target not available should be thrown as ServiceUnavailableException
    * [ JBAS-6161 ] Two ears with a same named jar fails to deploy
    * [ JBAS-6162 ] Error logged when attempting to passivate invalidated session
    * [ JBAS-6165 ] NPE in TransactionScopedEntityManager
    * [ JBAS-6174 ] shutdown.jar is missing classes
    * [ JBAS-6176 ] appclient doesn't declare a dependency on persistence unit
    * [ JBAS-6177 ] Error on jchannel.getState() right after connect (even with flush)
    * [ JBAS-6181 ] cannot secure jmx invoker service
    * [ JBAS-6193 ] JBossCacheManager leaks ReplicationStatistics.TimeStatistic
    * [ JBAS-6194 ] Move transaction sticky logic in proxy to interceptors to avoid bottleneck
    * [ JBAS-6206 ] JBossManager sets invalid session cookie after failover
    * [ JBAS-6207 ] update jts install for new lib layout
    * [ JBAS-6209 ] DelegatingClassloader is trying to get the parent in an unprivileged block
    * [ JBAS-6214 ] Default port bindings overriding (bindings.xml) doesn't work.
    * [ JBAS-6224 ] SecurityContextEstablishmentValve is making expensive loadClass calls
    * [ JBAS-6229 ] Resolving of relative persistence units doesn't work
    * [ JBAS-6231 ] jboss.messaging.jar (server) on /client
    * [ JBAS-6239 ] Regression on run-as in a MDB
    * [ JBAS-6241 ] EJB TIMERS Table Creation Fails When Oracle Schema Specified
    * [ JBAS-6243 ] EJB2: Reintroduce explicit run as check before authentication
    * [ JBAS-6252 ] Messaging release is missing connection-factories-service.xml
    * [ JBAS-6256 ] NPE during undeployment of test artifact /bundled-myfaces-hellojsf.war
    * [ JBAS-6275 ] Fix *both* 4.2.x & 5.0.x compatibility matrix tests

Task

    * [ JBAS-2563 ] Cleanup the build for jboss5
    * [ JBAS-3916 ] Update source code headers.
    * [ JBAS-4370 ] SecurityDeployer: XACML/acl Policy Registration
    * [ JBAS-4814 ] Refactor the conf/jboss-service.xml services
    * [ JBAS-4967 ] Extract setting of default clustering JBossWebMetaData from TomcatDeployer
    * [ JBAS-5078 ] Validate SRP Configuration
    * [ JBAS-5234 ] Include the Windows Service Runner binary (jbossvc.exe) in the distro
    * [ JBAS-5358 ] Move remote access to profile service into deploy
    * [ JBAS-5677 ] Add discussion of usage of FC to Clustering Guide
    * [ JBAS-5778 ] Improve HttpSessionListener handling in clustered environment
    * [ JBAS-5794 ] Administration and configuration guide
    * [ JBAS-5795 ] Administration and configuration guide
    * [ JBAS-5872 ] Update org.jboss.test.compatibility.test.SerialVersionUIDUnitTestCase
    * [ JBAS-5873 ] Create JBoss-AS-5.0.x-CompatibilityMatrix test run based on the 4.2.x one
    * [ JBAS-5883 ] Unify name usage in ProfileService
    * [ JBAS-5908 ] ClientUserTransactionObjectFactory is inefficient
    * [ JBAS-5930 ] Investigate ENC issues to obtain JBoss Security Manager in the web layer
    * [ JBAS-5945 ] Make JBossCacheClusteredSession.initAfterLoad() part of an override of update()
    * [ JBAS-5958 ] Fix any remaining testsuite failures
    * [ JBAS-5963 ] ClientUserTransaction should log cause exceptions
    * [ JBAS-5977 ] FIXME the HackClassloaderMetaDataDeployer boot WARN
    * [ JBAS-5988 ] AS5 Codebase Privileged Blocks
    * [ JBAS-5994 ] Switch to repository based ProfileService as the default
    * [ JBAS-6023 ] Inject Naming instance into DetachedHANamingService
    * [ JBAS-6030 ] Uncomment @JMX annotation in deployers.xml to enable JMX management of DeployersImpl
    * [ JBAS-6039 ] Change JGroups thread pool rejection policy to 'Discard'
    * [ JBAS-6064 ] JSR-196 integration for web layer
    * [ JBAS-6080 ] On Linux, HA-JNDI to pass SocketAddress to MulticastSocket constructor
    * [ JBAS-6081 ] Remove TUNNEL config
    * [ JBAS-6084 ] Reduce Logging Visibility when setting DefaultJndiBindingPolicy (when not explicitly specified)
    * [ JBAS-6087 ] Reduce the excessive logging
    * [ JBAS-6090 ] Convert legacy clustered services to pojo configuration
    * [ JBAS-6091 ] Allow JRMPInvoker to work as an MC bean
    * [ JBAS-6103 ] Review the 'minimal' config
    * [ JBAS-6105 ] Improve start-up time
    * [ JBAS-6109 ] ClusteredSession should not subclass StandardSession
    * [ JBAS-6129 ] Missing licenses
    * [ JBAS-6132 ] Revert to AS 4 behavior of handling distributable webapps in default config
    * [ JBAS-6143 ] Remove legacy persistence unit resolving functions from appclient and tomcat
    * [ JBAS-6148 ] Port metadata awareness to the repository profileservice
    * [ JBAS-6154 ] Verify JAXB version for 5.0.0.GA release
    * [ JBAS-6159 ] Make an integration abstraction for the UserTransactionListener and CachedConnectionManager
    * [ JBAS-6160 ] Component Update to jboss-ejb3-as-int
    * [ JBAS-6163 ] JACC: Look at the cmp2-audit.jar for security domain
    * [ JBAS-6169 ] Make "bootstrap" module reusable
    * [ JBAS-6170 ] Update package names moved from "main" to "bootstrap"
    * [ JBAS-6172 ] org.jboss.system.server.Server should be JVM-agnostic
    * [ JBAS-6183 ] ATTRIBUTE granularity clustered session should store attribute in same JBC node as metadata
    * [ JBAS-6184 ] Eliminate a JBC Fqn level in clustered session caching
    * [ JBAS-6186 ] Use JBossWebMetaData to drive DistributedCacheManagerFactory
    * [ JBAS-6189 ] Add plain reports to the test target
    * [ JBAS-6201 ] Eliminate injection of DistributedReplicantManagerImpl into ClusterPartition
    * [ JBAS-6237 ] Remove the old JMX kernel's dependency on the Deployment layer
    * [ JBAS-6238 ] Remove JBossMQ from the 5.0.0 branch
    * [ JBAS-6249 ] Pick a different port for the JBM Data channel's MPING
    * [ JBAS-6254 ] Provide an implementation for ejb3 CachedConnectionManager SPI
    * [ JBAS-6261 ] Rename cluster-jboss-beans.xml to hapartition-jboss-beans.xml
    * [ JBAS-6263 ] Use Microcontainer to build JBC configs
    * [ JBAS-6271 ] Create a 'standard' config out of the 'cts' one.
    * [ JBAS-6273 ] Create release notes for AS 5.0.0.GA
    * [ JBAS-6279 ] Remove assumption about who master is from HA Singleton test cases
    * [ JBAS-6280 ] Refresh the communit docs

Sub-task

    * [ JBAS-3858 ] Update jbossweb-cluster.aop to match the current configuration
    * [ JBAS-5349 ] Test bootstrap dependencies
    * [ JBAS-5370 ] Deploy an ear/war app through ProfileService
    * [ JBAS-5856 ] SBM-compatible JBM remoting connector config
    * [ JBAS-5858 ] Add @JMX annotation to ServiceBindingManager
    * [ JBAS-5953 ] JBoss-AS-5.0.x-TestSuite-sun16-sun16 - org.jboss.test.jmx.test.UndeployBrokenPackageUnitTestCase
    * [ JBAS-5969 ] Remove dependency of AOP on VFSDeploymentUnit
    * [ JBAS-5970 ] Remove dependency of AOP on ServiceMBeanSupport
    * [ JBAS-5984 ] Make names unique in jbossweb-cluster.aop/META-INF/jboss-aop.xml
    * [ JBAS-5985 ] Make the switch in aop.xml and deployers.xml
    * [ JBAS-5986 ] Remove jboss-aop.xml from the deployment for aop.AnnotatedTestCase and aop.ScopedAnnotatedTestCase
    * [ JBAS-5987 ] Add new tests for scoped aspects with dependencies
    * [ JBAS-5996 ] Move TomcatDeployer.securityManagerService injection out of the deployer
    * [ JBAS-5997 ] iiop-service.xml is missing naming service dependencies
    * [ JBAS-6036 ] Add tests for restart of server to validate profileservice overrides are applied
    * [ JBAS-6037 ] Restore ProfileService attachments persistence
    * [ JBAS-6042 ] Remove the user of LoaderRepositoryConfig as an attachment
    * [ JBAS-6055 ] Use the enforcer plugin to avoid bringing in duplicate/wrong dependencies
    * [ JBAS-6082 ] JUDDIService.setBindJaxr cannot attempt to bind into jndi
    * [ JBAS-6083 ] HAPartitionCacheHandler.cache injection is broken
    * [ JBAS-6096 ] Upgrade ha-server-cache-jbc
    * [ JBAS-6121 ] Upgrate JAXR to 1.2.1.GA
    * [ JBAS-6124 ] regression - org.jboss.test.jcaprops.test.*
    * [ JBAS-6125 ] regression - org.jboss.test.deployers.seam.test.SeamVFSClassloadingUnitTestCase
    * [ JBAS-6139 ] Create a hudson job that builds using a clean local maven repo.
    * [ JBAS-6141 ] Upgrade to jboss-server-manager 1.0.0.GA and jboss-test 1.1.3.GA
    * [ JBAS-6146 ] JBoss-AS-5.0.x-TestSuite-jrockit16-jrockit16 - server all fails to shutdown
    * [ JBAS-6151 ] Upgrade JBossXACML dependency to 2.0.2.SP1
    * [ JBAS-6166 ] regression - org.jboss.test.security.test.authorization.XACMLEJBIntegrationUnitTestCase
    * [ JBAS-6167 ] Restore the ServerInfo bean/mbean
    * [ JBAS-6168 ] Modify the Bootstrap spi to pass the kernel deployments loaded by the Server bootstrap
    * [ JBAS-6178 ] JBoss-AS-5.0.x-CompatibilityMatrix Failures
    * [ JBAS-6187 ] Break out profileservice spi from jboss-system.jar
    * [ JBAS-6190 ] repository based ProfileService hot deployment is not working
    * [ JBAS-6191 ] VFS URL Handler Stubs for JDK PolicyFile implementation to read vfs entries
    * [ JBAS-6198 ] Javadoc for ManagedOperation.invoke() says it will return a MetaValue, but it's returning unwrapped Objects
    * [ JBAS-6199 ] break out profileservice spis as a separate project
    * [ JBAS-6203 ] "config-property" property on Local Datasource managed component returns incorrect MetaType
    * [ JBAS-6210 ] common core to 2.2.10.GA
    * [ JBAS-6211 ] jboss integration to 5.0.2.GA
    * [ JBAS-6215 ] when creating a new Datasource via managementView.applyTemplate(), if the "metadata" 
CompositeValue property contains no items or a null-valued item, the ds.xml file is written with an empty "metadata" 
element, which causes the deployer to complain
    * [ JBAS-6216 ] ManagementView.getComponentsForType(type) returns null, rather than an empty Set, if no Components of the specified 
type are deployed
    * [ JBAS-6217 ] JBossWebRealm->enableAuditFlag should be false by default
    * [ JBAS-6234 ] ManagedProperty contains certain metadata that is not contained in MetaType
    * [ JBAS-6245 ] org.jboss.test.asynch.AsynchTestCase
    * [ JBAS-6246 ] org.jboss.test.web.test.JSFIntegrationUnitTestCase
    * [ JBAS-6247 ] org.jboss.test.xml.DDValidatorUnitTestCase
    * [ JBAS-6248 ] org.jboss.test.profileservice.override.test.JmsDestinationOverrideTestCase
    * [ JBAS-6251 ] 15 failures in JBossWS-3.0.4.GA-testsuite-AS5.0.x
    * [ JBAS-6253 ] Management interface for HAPartition and DRM
    * [ JBAS-6255 ] 8 test-aop-scoped failures
    * [ JBAS-6269 ] regression - org.jboss.test.refs.test.ResourceResolutionUnitTestCase.testClientORBResources
    * [ JBAS-6270 ] ManagementView.getDeploymentNames does not show the bootstrap deployment names

Thirdparty Change

    * [ JBAS-5597 ] Track jboss and thirdparty dependencies upgrades for JBoss 5.0.0.GA

Component Upgrade

    * [ JBAS-5382 ] Upgrade PojoCache to 3.0.0.GA
    * [ JBAS-5894 ] Upgrade jboss AOP to 2.0.0.GA
    * [ JBAS-5919 ] Upgrade jboss transactions to 4.4.0.GA
    * [ JBAS-5927 ] Upgrade jboss-integration spis to 5.0.1.GA
    * [ JBAS-6004 ] Upgrade jbossws to 3.0.4.GA
    * [ JBAS-6015 ] Upgrade seam-integration to 5.0.0.GA
    * [ JBAS-6016 ] Upgrade JBossWeb to 2.1.1.GA
    * [ JBAS-6018 ] Upgrade jboss-javaee apis to 5.0.0.GA
    * [ JBAS-6019 ] Upgrade JBoss Aspects to their final version
    * [ JBAS-6021 ] Upgrade jboss-security to 2.0.2.SP3
    * [ JBAS-6022 ] Upgrade jboss vfs to 2.0.0.GA
    * [ JBAS-6024 ] Upgrade jbossxb to 2.0.0.GA
    * [ JBAS-6025 ] Upgrade to jnp-client/server 5.0.0.GA
    * [ JBAS-6026 ] Upgrade jboss-messaging to 1.4.1.GA
    * [ JBAS-6045 ] Upgrade jboss-microcontainer to 2.0.0.GA
    * [ JBAS-6046 ] Upgrade jboss-managed/metatype to 2.0.0.GA
    * [ JBAS-6048 ] Upgrade jboss-deployers to 2.0.0.GA
    * [ JBAS-6049 ] Upgrade jboss-reflect to 2.0.0.GA
    * [ JBAS-6050 ] Upgrade jboss-mdr to 2.0.0.GA
    * [ JBAS-6051 ] Upgrade jboss-classloading to 2.0.1.GA
    * [ JBAS-6053 ] Upgrade jboss-jaxbintros to a final release
    * [ JBAS-6063 ] Upgrade javassist to 3.9.0.GA
    * [ JBAS-6065 ] Upgrade jgroups
    * [ JBAS-6079 ] Upgrade JBoss Cache to 3.0.1.GA
    * [ JBAS-6100 ] JBoss Remoting update needed
    * [ JBAS-6233 ] Upgrade jboss-reflect to 2.0.1.GA
2009. 3. 10. 09:38

JBoss 설정하기




Boss 설정하기

# jboss설치
-http://labs.jboss.com/ 에서 최근버전을 받아서 압축을 푼다
-자바 환경변수는 1.5버전을 추천한다. 
-JBOSS_HOME/bin/run.bat 실행 후 http://localhost:8080/으로 확인한다.
-JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/root.war 이 경로가 디폴트로 보여진다.

# jboss deploy 폴더 설정
-JBOSS_HOME/server/default/conf/jboss-service.xml의 아래 예시와 같이 콤마(,)를 구분자로 하여 배포파일 또는 폴더를 추가한다.
-디폴트는 deploy/ 폴더이고 경로의 끝에 슬래쉬(/)를 붙이면 폴더로 인식한다.
-주의할 점은 jar, war, ear같은 파일뒤에 슬래쉬를 붙이면 deploy 되지 않지만 JBOSS_HOME/server/default/deploy폴더 속에 aaa.jar 과 같은 이름의 폴더는 deploy 가능하다.

      <attribute name="URLs">
        deploy/,
        file:///D:/aa/bbb/ccccejb.jar
      </attribute>
      
# jboss 오라클 드라이버 설정
-ojdbc14.zip를 JBOSS_HOME/server/default/lib 폴더에 복사
-JBOSS_HOME/docs/examples/jca/oracle-ds.xml을 JBOSS_HOME/server/default/deploy 폴더에 복사
-oracle-ds.xml를 아래와 같이 수정
  <local-tx-datasource>
    <jndi-name>oracle</jndi-name>
    <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:orcl(일반적으로)</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>xxx</user-name>
    <password>yyy</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
      <metadata>
         <type-mapping>Oracle9i</type-mapping>
      </metadata>
  </local-tx-datasource>
  
-jboss를 restart하면 콘솔에서
[WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=oracle' to JNDI name 'java:oracle'
메시지 확인 가능  
  
-WEB-INF/web.xml 수정
 <resource-ref>
  <res-ref-name>jdbc/oracle</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>
 
-WEB-INF/jboss-web.xml
 <resource-ref>
  <res-ref-name>jdbc/oracle</res-ref-name>
  <jndi-name>java:oracle</jndi-name>
 </resource-ref> 
 
# 기타 라이브러리 추가
ojdbc.jar 파일 등 
서비스시 필요한 라이브러리는 JBOSS_HOME/server/default/lib 폴더에 복사한다

# 서비스 루트 설정
WEB-INF/jboss-web.xml 아래 소스 추가 또는 수정
 <context-root>/</context-root>

# 서비스 설정이 되었다면 이클립스로 가서 유저 라이브러리를 설정해 ejb를 사용해 보자. 
이클립스를 실행하고 환경설정에 가서 JAVA 항목으로 간다. 
두번째 유저 라이브러리 항목을 설정하고 EJB 라는 이름을 라이브러리를 만든다.
그리고 필요한 jar 파일을 가져오자. 

2009. 1. 9. 14:49

netstat의 TCP 연결 상태 의미




netstat의 TCP 연결 상태 의미  

netstat의 State 필드에 표시되는 TCP 상태표시가 갖는 의미를 알아봅시다.
RFC 793 문서에 있는 TCP 기본 연결, 종료 과정을 보면 이해가 더 빠를 거라 생각한다.

-----------------------------------------------------------
# netstat -atn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address          Foreign Address       State
... 생략 ...
tcp        0      0 0.0.0.0:25             0.0.0.0:*             LISTEN      <-- 포트가 열렸음
tcp        0      0 192.168.123.10:32799   207.46.106.141:1863   ESTABLISHED <-- 서로 연결중
tcp        0      0 192.168.123.10:32794   218.xxx.xx.xx:22      ESTABLISHED
tcp        0      0 192.168.123.10:32802   207.46.108.46:1863    CLOSE_WAIT  <-- 종료 대기중
tcp        0      0 192.168.123.10:33244   211.xxx.xx.x:80       ESTABLISHED
... 생략 ...
-----------------------------------------------------------

1) TCP 연결관련 상태

* RFC 793문서에 나온 기본적인 TCP 연결 과정

      TCP A                                                      TCP B

  1.  CLOSED                                                     LISTEN
  2.  SYN-SENT    --> < SEQ=100>< CTL=SYN>                   --> SYN-RECEIVED
  3.  ESTABLISHED <-- < SEQ=300>< ACK=101>< CTL=SYN,ACK>     <-- SYN-RECEIVED
  4.  ESTABLISHED --> < SEQ=101>< ACK=301>< CTL=ACK>         --> ESTABLISHED
  5.  ESTABLISHED --> < SEQ=101>< ACK=301>< CTL=ACK>< DATA>  --> ESTABLISHED

LISTEN      : 데몬이 요청을 발을 수 있도록 연결 요구를 기다리는 상태
  즉, 포트가 열려있음을 의미. http(80), mail(25), ftp(21), telnet(23) 등
  위에서 포트 25(mail)이 메일을 받을 수 있도록 열려 있는 상태
  윈도우즈에서는 LISTENING으로 표시
SYN_SENT    : 로컬에서 원격으로 연결 요청(SYN 신호를 보냄)을 시도한 상태
SYN_RECV    : 원격으로 부터 연결 요청을 받은 상태
  요청을 받아 SYN+ACK 신호로 응답은 한 상태이지만 ACK는 받지 못했다.
  netstat로 확인할 때 SYN_RECV가 상당히 많다면 TCP SYN 플러딩(Flooding) 공격일
  가능성이 있다.
  윈도우즈와 솔라리스에서는 SYN_RECEIVED으로, FreeBSD는 SYN_RCVD으로 표시
ESTABLISHED : 서로 연결이 되어 있는 상태
  위에서 192.168.123.10의 포트 32794과 218.xxx.xx.xx의 포트 22(ssh)이 서로
  연결되어 있는 상태

2) TCP 종료관련 상태

* 정상적인 연결 종료 과정

      TCP A                                                   TCP B

  1.  ESTABLISHED                                             ESTABLISHED
  2.  (Close)
      FIN-WAIT-1  --> < SEQ=100>< ACK=300>< CTL=FIN,ACK>  --> CLOSE-WAIT
  3.  FIN-WAIT-2  <-- < SEQ=300>< ACK=101>< CTL=ACK>      <-- CLOSE-WAIT
  4.                                                         (Close)
      TIME-WAIT   <-- < SEQ=300>< ACK=101>< CTL=FIN,ACK>  <-- LAST-ACK
  5.  TIME-WAIT   --> < SEQ=101>< ACK=301>< CTL=ACK>      --> CLOSED
  6.  (2 MSL)
      CLOSED                                                    

FIN_WAIT1   : 소켓이 닫히고 연결이 종료되고 있는 상태. 원격의 응답은 받을 수 있다.
  솔라리스에서는 FIN_WAIT_1로 표시
FIN_WAIT2   : 로컬이 원격으로 부터 연결 종료 요구를 기다리는 상태
  솔라리스에서는 FIN_WAIT_2로 표시
CLOSE_WAIT  : 원격의 연결 요청을 받고 연결이 종료되기를 기다리는 상태
  원격으로 부터 FIN+ACK 신호를 받고 ACK 신호를 원격에 보냈다.
TIME_WAIT   : 연결은 종료되었으나 원격의 수신 보장을 위해 기다리고 있는 상태
  이 상태를 특히 자주 보게되는 Apache에서 KeepAlive를 OFF로 해둔 경우,
  Tomcat 서버를 쓰는 경우 등
LAST_ACK    : 연결은 종료되었고 승인을 기다리는 상태
CLOSED      : 완전히 연결이 종료된 상태

※ 위의 FIN_WAIT1, FIN_WAIT2, CLOSE_WAIT 3개 상태는 연결 종료를 위해 서로간에
   신호를 주고받는 과정에 나타나는 상태로 이해하면 된다.
   종료 요청을 한 곳에서는 FIN_WAIT1, FIN_WAIT2, TIME_WAIT 상태가
   종료 요청을 받는 곳에서는 CLOSE_WAIT, LAST_ACK 상태가 표시된다.

3) 기타

CLOSING     : 연결은 종료되었으나 전송도중 데이타가 분실된 상태
UNKNOWN     : 소켓의 상태를 알 수 없음

솔라리스의 netstat 명령에서는 다음 2개의 상태를 더 표시한다.

IDLE        : 소켓이 열렸지만 binding 되지 않은 상태
BOUND       : listen이나 연결을 위한 준비 상태