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

# 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}'` |
[출처] 특정프로세서 죽이는 스크립트|작성자 Nams
- 서브 디렉토리까지 파일안의 문자열 모두 검색
- haha와 huhu가 동시에 들어있는 행 뽑기
- 찾아서 지우기
- 공사중에 로그인 막기
- 크기가 가장 큰 파일, 디렉토리 찾기
- 가장 큰 파일을 찾으려면
- 현재 디렉토리의 크기만을 파악할때
- 시스템 정보 감추기
- 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
- FTP로 들어온 사용자 확인하기
- 원하지 않는 사용자 죽이기
- less 결과를 vi로 보기
- vi에서 블럭 설정하기
- man 페이지 프린트하기
- ping 무시하기
- LILO 다시 살리기
- 특정 사용자 ftp 접근 막기
- X 윈도우에서 TV보기
- ls라는 파일이 포함된 rpm패키지 찾기
- 현재 rpm패키지의 의존패키지
- 현재 디렉토리크기
- 바로 이전 디렉토리로 가기
- 프로세스명으로 프로세스 죽이기
- 하드웨어 시계맞추기
- 원격에서 리모트서버의 X application실행시
- 링크 파일
- ^M 문자 없애기
- 비어있는 행을 찾기
- 기타 명령어 떼
- 각자가 사용하는 컴퓨터의 정보를 알고 싶을때
- 전체 메일
- 디렉토리만 빠르게 검색
- 호스트 네임 바꾸기
- 틀린명령어 틀린글자만 바꿔서 실행
- 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
- 열려있는 포트 알아내기
- 텔넷 모든 접속자에게 메세지 보내기
- lsof는 열려있는 파일을 나타내 주는 옵션
- 사용자가 어디에서 무엇을 하는지 알아내기
- 텔넷 화면 수정
- 하위 디렉토리 한꺼번에 만들기
- 특정디렉토리의 모든 파일 안의 특정 문자열 치환
- killall 명령 시뮬레이션 (프로세스명으로 죽이기)
- find와 grep
- vi 검색, 치환
- 파일내의 중복되는 행을 제거 : uniq
- 파일의 결합
- 파일의 암호화 : crypt
- 개행을 제외한 화면내의 보이지 않는 문자 출력
- 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기
- 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기
- 어제 날짜 구하기
- 원하지 않는 사용자 죽이기
- UNIX상에서 한글출력이 깨져 나올경우
- 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기
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 가장 큰 파일을 찾으려면
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로 들어온 사용자 확인하기
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로 보기
0.0.0.13 vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.
블럭을 설정 하신 뒤,
삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p
0.0.0.14 man 페이지 프린트하기
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 다시 살리기
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패키지의 의존패키지
0.0.0.21 현재 디렉토리크기
0.0.0.22 바로 이전 디렉토리로 가기
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 디렉토리만 빠르게 검색
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 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
0.0.0.36 열려있는 포트 알아내기
0.0.0.37 텔넷 모든 접속자에게 메세지 보내기
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 유닉스 혹은 리눅스용 커맨드 팁 모음입니다.
- 서브 디렉토리까지 파일안의 문자열 모두 검색
- haha와 huhu가 동시에 들어있는 행 뽑기
- 찾아서 지우기
- 공사중에 로그인 막기
- 크기가 가장 큰 파일, 디렉토리 찾기
- 가장 큰 파일을 찾으려면
- 현재 디렉토리의 크기만을 파악할때
- 시스템 정보 감추기
- 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
- FTP로 들어온 사용자 확인하기
- 원하지 않는 사용자 죽이기
- less 결과를 vi로 보기
- vi에서 블럭 설정하기
- man 페이지 프린트하기
- ping 무시하기
- LILO 다시 살리기
- 특정 사용자 ftp 접근 막기
- X 윈도우에서 TV보기
- ls라는 파일이 포함된 rpm패키지 찾기
- 현재 rpm패키지의 의존패키지
- 현재 디렉토리크기
- 바로 이전 디렉토리로 가기
- 프로세스명으로 프로세스 죽이기
- 하드웨어 시계맞추기
- 원격에서 리모트서버의 X application실행시
- 링크 파일
- ^M 문자 없애기
- 비어있는 행을 찾기
- 기타 명령어 떼
- 각자가 사용하는 컴퓨터의 정보를 알고 싶을때
- 전체 메일
- 디렉토리만 빠르게 검색
- 호스트 네임 바꾸기
- 틀린명령어 틀린글자만 바꿔서 실행
- 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
- 열려있는 포트 알아내기
- 텔넷 모든 접속자에게 메세지 보내기
- lsof는 열려있는 파일을 나타내 주는 옵션
- 사용자가 어디에서 무엇을 하는지 알아내기
- 텔넷 화면 수정
- 하위 디렉토리 한꺼번에 만들기
- 특정디렉토리의 모든 파일 안의 특정 문자열 치환
- killall 명령 시뮬레이션 (프로세스명으로 죽이기)
- find와 grep
- vi 검색, 치환
- 파일내의 중복되는 행을 제거 : uniq
- 파일의 결합
- 파일의 암호화 : crypt
- 개행을 제외한 화면내의 보이지 않는 문자 출력
- 화일내의 포함된 특정문자열로 찾아서 내용만 출력하기
- 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기
- 어제 날짜 구하기
- 원하지 않는 사용자 죽이기
- UNIX상에서 한글출력이 깨져 나올경우
- 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기
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 가장 큰 파일을 찾으려면
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로 들어온 사용자 확인하기
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로 보기
0.0.0.13 vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.
블럭을 설정 하신 뒤,
삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p
0.0.0.14 man 페이지 프린트하기
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 다시 살리기
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패키지의 의존패키지
0.0.0.21 현재 디렉토리크기
0.0.0.22 바로 이전 디렉토리로 가기
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 디렉토리만 빠르게 검색
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 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어
0.0.0.36 열려있는 포트 알아내기
0.0.0.37 텔넷 모든 접속자에게 메세지 보내기
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는 트레이스모드이다.
예전에 퍼두었던 건데 매우 유용해서 포스팅.
맨날 쓰는 것만 쓰다보니 이렇게 막강한 줄 몰랐네.
-------------------------------------------------------------------------------
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가 파일들을 찾았을때의 행위를 지정하는 그룹의 연산자들이다.
파일의 이름을 표준출력으로 출력한다. 뒤에서 조금 더 다룬다..
-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 설정 비트를 포함한 모든 퍼미션 비트들이 검사된다.
A | ||||||
|
B | ||||||
| ||||||
| ||||||
c |
C | ||||||||||
| ||||||||||
| ||||||||||
|
D | ||||||||||||||
| ||||||||||||||
| ||||||||||||||
e |
E | ||||||||||||
| ||||||||||||
| ||||||||||||
|
F | ||||||||||||||
| ||||||||||||||
| ||||||||||||||
|
G | ||||||||||
| ||||||||||
| ||||||||||
|
H | ||||||
| ||||||
| ||||||
|
I | ||||||||||||
| ||||||||||||
| ||||||||||||
j |
J | ||||||||
| ||||||||
| ||||||||
|
K | ||||
| ||||
| ||||
|
L | ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||
|
M | ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
n |
N | ||||||||
| ||||||||
| ||||||||
|
O | ||
| ||
| ||
|
P | ||||||||||||||||||||||
| ||||||||||||||||||||||
| ||||||||||||||||||||||
q |
Q | ||||
| ||||
| ||||
|
R | ||||||||
| ||||||||
| ||||||||
|
S | |||||||||||||||
swapon 스왑 공간을 초기화하는 데는 swapon 명령을 사용한다. 이 명령은 커널에게 해당 공간을 스왑으로 사용할 수 있다는 점을 알려준다. 이 명령에게는 추가하고자 하는 스왑 공간의 경로를 인수로 전달해 주어야 한다. 임시 스왑 파일을 스왑 공간에 추가하고자 한다면 다음과 같이 한다.
스왑 공간들은 /etc/fstab 파일에 의해서 자동적으로 사용될 수도 있다.
시스템이 시작될 때, 스크립트를 통해서 swapon -a 명령이 실행되는데 이 명령은 /etc/fstab에 나열되어 있는 스왑 공간들을 모두 사용하게 해 준다. 그래서 흔히 swapon 명령은 추가적인 스왑이 필요할 때만 사용되는 것이 보통이다. free 명령을 쓰면 스왑의 사용 상황을 모니터 할 수 있다. 이것은 현재 얼마나 많은 용량의 스왑이 사용되고 있는지 알려준다.
여기서 Mem: 이라고 쓰여진 첫째줄은 실제 물리적 메모리의 상황을 보여주는 것이다.커널은 물리적 메모리를 약 1 megabyte 정도 사용하는데, total이라고 쓰여진 세로줄에서 보여주는 전체메모리 양에는 이 커널이 차지하는 공간이 빠져 있다. used라는 세로줄은 현재 사용중인 메모리 양을 보여주고 있으며(두번째 가로줄은 버퍼 로 사용되는 부분을 제외하고 계산한 양이다), free란 세로줄에서는 전혀 사용되지 않은 양을 보여주고 있다. 또한 shared란 부분은 프로세스간에 공유되고 있는 메모리를 나타내고 있는 것이므로, 그 양이 많은 것은 기쁜 일이다. buffers는 현재 디스크 버퍼 캐쉬로 사용되는 메모리 양을 보여주고 있다. 마지막 줄인 Swap:은 위와 같은 항목을 스왑 공간에 똑같이 적용시킨 내용이다. 이 항목이 모두 제로라면, 스왑 공간이 아예 동작하고 있지 않다는 뜻이다. 같은 정보를 top 명령이나 /proc/meminfo 파일을 통해 얻을 수 있다. 그러나 어느 경우든, 특정한 스왑 공간에 대한 정보를 얻는 것은 좀 어렵다. 스왑 공간은 swapoff 명령으로 기능을 멎게 할 수 있다. 그러나 임시로 잡은 스왑 공간이 아니라면, 스왑을 끌 필요는 없다. 만약 스왑을 끄게되면, 스왑 공간에 들어있던 메모리 페이지들이 먼저 실제 메모리로 들어가야 되는데, 실제 메모리에 여유가 없는 경우에는 또 다른 스왑 공간으로 방출되게 된다. 그런데 이 메모리 페이지들을 모두 수용하기에 가상메모리마저도 부족하다면, 그때부터는 리눅스 시스템이 무진장 버벅대기 시작할 것이다. 시간이 아주 많이 걸린 후에는 좀 잠잠해지겠지만, 여전히 시스템은 사용불능 상태에 있게 된다. 따라서 스왑을 끄기 전에, 충분한 여유 메모리가 있는지 꼭 확인해 보아야만 한다(free 같은 것으로). swapon -a 명령으로 자동적으로 사용되는 스왑 공간들은, 마찬가지로 swapoff -a 명령을 써서 끌 수 있다. 이것도 역시 /etc/fstab 파일에 나열되어 있는 스왑 공간만을 끄기 때문에, 나머지 수동으로 추가시킨 스왑들은 영향을 받지 않는다. 때 때로, 실제 메모리가 많이 비어 있는데도 불구하고 스왑을 아주 많이 쓰고 있는 경우를 보게 될 수가 있다. 보통 이런 일이 발생하는 경우는 이렇다. 어떤 덩치 큰 프로세스가 실제 메모리를 많이 점유하는 바람에 시스템이 스왑을 많이 사용하게 되었다고 하자. 이 프로세스가 종료되면 실제 메모리엔 여유 공간이 많이 남게 되지만, 스왑으로 한번 내려간 데이터는 그것이 당장 필요하지 않는 한 실제 메모리로 불려지지 않는다. 따라서 스왑 영역을 많이 사용하면서도 실제 메모리가 많이 비어있는 현상이 꽤 오래 지속될 수 있는 것이다. 그러므로 이런 현상에 특별히 신경쓸 필요는 없다. 하지만, 최소한 그 원리는 이해하고 있어야 나중에 불안하지 않을 것이다.
| |||||||||||||||
| |||||||||||||||
|
T | ||||||||||||
| ||||||||||||
| ||||||||||||
|
U | ||||||
| ||||||
| ||||||
|
V | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
W | ||||||||||||||||||
| ||||||||||||||||||
| ||||||||||||||||||
|
X | ||||
| ||||
| ||||
|
| ||
| ||
| ||
|
Z | ||
|
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
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
# 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 파일을 가져오자.
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이나 연결을 위한 준비 상태