'unix'에 해당되는 글 19

  1. 2012.11.23 [Unix] cal
  2. 2011.10.13 오랜만에 zterm을 사용해본다.
  3. 2011.09.25 Unix에서 Oracle 사용자 찾아서 sqlplus 실행시키기
  4. 2011.09.20 [Unix] ls
  5. 2010.08.05 [Unix] tar, gzip
  6. 2010.05.19 큰 로그 파일 자르기 - xNIX
  7. 2010.05.19 파일을 0바이트로 만들기
  8. 2010.05.13 [Unix] locale
  9. 2010.04.11 현재 쉘 보기
  10. 2010.04.11 현재 사용자의 그룹을 알고 싶을 때
  11. 2010.01.31 유닉스에 톰캣 컴파일해서 설치하기
  12. 2009.12.12 [Unix] watch
  13. 2009.05.20 HP-UX에서 프로그램 설치하기
  14. 2009.05.19 Unix 프로세스 확인
  15. 2009.05.17 HP-UX Operating System Release History
  16. 2009.05.17 유닉스 환경변수 설정
  17. 2009.05.17 [비교] 반복문 - foreach, for~in
  18. 2009.05.02 Subversion 명령어
  19. 2009.04.14 Command Line Interface

[Unix] cal

> cal
      11월 2012       
일 월 화 수 목 금 토 
             1  2  3 
 4  5  6  7  8  9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30   


> cal -3 //Display the previous, current and next month surrounding today.
                            2012
        10월                   11월                   12월          
일 월 화 수 목 금 토  일 월 화 수 목 금 토  일 월 화 수 목 금 토 
...


> cal 2012
> cal 1 2012 //month year
> cal -A 2 //Months to add after.
> cal -B 2 //Months to add before.

오랜만에 zterm을 사용해본다.

SSH2를 지원하지 않아 putty로 옮겼는데 Zmodem 기능이 필요해서 꺼냈다.

- 파일 내려받기



- 파일 올리기
rz

Unix에서 Oracle 사용자 찾아서 sqlplus 실행시키기

root로 작업중에 sqlplus를 실행시키지 못하고 있음.

$ cat /etc/passwd //어떤 사용자가 있나
root:!:0:0:-  KR/E/000070//system admin:/:/usr/bin/ksh
daemon:!:1:1:-  KR/E/000070//system admin:/etc:
...
xxxadm:!:417:404:SAP System Administrator:/home/xxxadm:/bin/csh
oraxxx:!:418:406:SAP Database Administrator:/oracle/XXX:/bin/csh //오라클 사용자다.

$ su - oraxxx

> env
PATH=/oracle/XXX/99_64/bin:/oracle/XXX:/usr/sap/XXX/SYS/exe/run:/usr/bin:/etc:/usr/sbin:/usr/ucb:/oracle/XXX/bin:/usr/bin/X11:/sbin:.
...
LANG=en_US
LOGIN=oraxxx
SAPSYSTEMNAME=XXX
DIR_LIBRARY=/usr/sap/XXX/SYS/exe/run
dbms_type=ORA
dbs_ora_tnsname=XXX
ORACLE_SID=XXX
DB_SID=XXX
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/XXX/99_64
NLS_LANG=AMERICAN_AMERICA.UTF8
SAPDATA_HOME=/oracle/XXX
NLSPATH=/usr/lib/nls/msg/%L/%N:/usr/lib/nls/msg/%L/%N.cat
LIBPATH=/usr/lib:/lib:/usr/sap/XXX/SYS/exe/run:/oracle/XXX/99_64/lib

> sqlplus orauser

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 25 20:01:15 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning and Data Mining options


[Unix] ls

ls -al 또는 ll 만 사용하고 다른 옵션은 사용할 필요가 있을까라는 생각을 했었다.
막상 필요할때 정확한 옵션을 찾기가 힘드네

# ls -alt //수정된 시간순으로 정렬
total 446944
-rw-r--r--    1 epadmin9   ssys     10488611 Sep 20 05:54 defaultTrace.10.trc
-rw-r--r--    1 epadmin9   ssys      3017621 Sep 20 05:54 defaultTrace.11.trc
-rw-r--r--    1 epadmin9   ssys     10488610 Sep 20 05:54 defaultTrace.9.trc
-rw-r--r--    1 epadmin9   ssys     10488609 Sep 20 05:54 defaultTrace.8.trc
-rw-r--r--    1 epadmin9   ssys     10488609 Sep 20 05:54 defaultTrace.7.trc
...

# ls -alS //파일 크기순으로 정렬
역순으로 정렬하려면 r옵션을 추가한다.

# ls -R
1000  2000  3000

./1000:
kmCert.der    kmPri.key     signCert.der  signPri.key

./2000:
CaPubs        kmCert.der    kmPri.key     signCert.der  signPri.key

./3000:
CaPubs        kmCert.der    kmPri.key     signCert.der  signPri.key

[Unix] tar, gzip

 

$ tar
tar: 사용법  tar [-]{txruc}[eONvVwAfblhm{op}][0-7[lmh]] [tapefile] [blocksize] [[-C directory] file] ...
//z옵션이 없으므로 gzip을 이용할 것(z옵션은 GNU tar만 될걸)

$ tar cvf log.tar biz.log*
a biz.log 7742 블록
a biz.log.1 10418 블록
a biz.log.2 10369 블록
...

$ gzip log.tar

$ gzip -d log.tar.gz


 

> tar cvfz log.zip biz.log*
> tar xvfz
tar xvf

 


tar: 이것은 tar 아카이브처럼 보이지 않습니다
tar: 다음 헤더로 건너 뜀
tar: Exiting with failure status due to previous errors


tar 아카이브가 아님. 반디집으로 압축한 파일의 확장자를 tar로 변경한 경우임.

=== https://youngclown.github.io/2018/07/tar_gzip  

 

 

 

 

 

 

큰 로그 파일 자르기 - xNIX

로그 파일이 아주 큰 경우 잘라서 보자.

# split -b 100 web.log b. //100바이트씩 자른다.
# split -l 100 web.log l. //100줄씩 자른다.
# split -C 100 web.log C. //한 라인이 100바이트가 넘지 않도록 자른다.
# split -b 2 -d -a 5 web.log //2바이트씩 자르는데 접미어를 숫자 5자리로 한다.
//사용할 수 있는 접미어를 다 쓰면 에러가 난다. 숫자 접미어 기본값은 2자리인데 분할된 파일의 개수가 99개를 넘어가면 에러가 난다.

# for line in 1 2 3 4; do  sed -n "${line}p" ./web.log > web.${aa}; done //한줄씩 자르기는 되는데 두줄씩 자르려면 어떻게 해야 하나.

- split 옵션을 잘못 이해해서 줄수로는 자르지 못하는 줄 알았다.
그래서 sed 까지 쓸 생각을 했는데...
per
각[매] …에 대하여, …당[마다]
# split --help
...
  -l, --lines=NUMBER      put NUMBER lines per output file //생성되는 파일당 N줄씩 넣는다. (N줄을 넣는다. 파일마다/파일당 N줄을 잘라서 넣는다.), 줄번호를 넣는다고 해석하다니...ㅋㅋ

파일을 0바이트로 만들기

로그 파일이 너무 커졌을 경우 파일을 삭제하기 보다 크기를 0으로 만드는 것이 좋다.
어떤 시스템은 파일을 새로 생성시키지 않는 경우도 있다.
삭제한 뒤 touch하는 것보다 좋은 점은 소유자 및 권한을 유지할 수 있다.

# cat /dev/null > /var/adm/sulog

[Unix] locale

- 환경 : KC 프로젝트#운영계1

//LANG=ko_KR.utf8
# export LANG=ko_KR //ko, euc-kr로 해도 한글 깨짐
# uname -a

Warning! One or more of your selected locales are not available.
Please invoke the commands "locale" and "locale -a" to verify your
selections and the available locales.

Continuing processing using the "C" locale.

HP-UX biz1 B.11.31 U ia64 1745865420 unlimited-user license
# locale

Warning! One or more of your selected locales are not available.
Please invoke the commands "locale" and "locale -a" to verify your
selections and the available locales.

Continuing processing using the "C" locale.

LANG=ko_KR
LC_CTYPE="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_MESSAGES="C"
LC_ALL=
# locale -a

Warning! One or more of your selected locales are not available.
Please invoke the commands "locale" and "locale -a" to verify your
selections and the available locales.

Continuing processing using the "C" locale.

C
POSIX
C.iso88591
C.iso885915
C.utf8
univ.utf8
ar_DZ.arabic8
ar_DZ.utf8
...
ja_JP.utf8
ko_KR.eucKR
ko_KR.utf8
no_NO.iso88591
...
# export LANG=ko_KR.eucKR
# uname -a
HP-UX biz1 B.11.31 U ia64 1745865420 무제한-사용자 라이센스

현재 쉘 보기

$ env | grep SHELL
SHELL=... //로그인 쉘

$ echo $0
-bash

$ ps $$
  PID TTY      STAT   TIME COMMAND
23752 pts/0    Rs     0:00 -bash

$ ps -p $$
  PID TTY          TIME CMD
23752 pts/0    00:00:00 bash

$ sh

# echo $0
sh

# ps -p $$
  PID TTY          TIME CMD
24794 pts/0    00:00:00 sh

$ env | grep SHELL
SHELL=... //처음과 동일함. sh가 아님.

현재 사용자의 그룹을 알고 싶을 때

어떤 시스템에 들어갔는데 지금 내가 로그인한 계정의 그룹을 알고 싶었다.
어떤 명령어를 써야 하나?

$ whoami
user1

$ who am i
user1     pts/0        2010-04-11 05:33 (192.168.100.254)

$ grep `whoami` /etc/passwd
user1:x:1306:1306::/home/hosting_users/user1:/home/bin/bash

$ touch _tmp; ls -al _tmp; rm _tmp //파일 하나 만들어 보면 알잖아
-rw-rw----+ 1 user1 user1 0  4월 11 07:41 _tmp

다른 방법도 있을거 같은데...

유닉스에 톰캣 컴파일해서 설치하기

- 유닉스에서 개발 웹 서버 설치, 설정하기
- Install and configure a development Web server in UNIX

- 시스템 요구 사항
  • 하드디스크 용량 10GB, 메모리 최소 512MB
  • 웹 브라우저
  • JRE 5.0 이상: Tomcat 6에서는 해당 JRE가 필요
  • C 컴파일러 : 솔라리스나 IBM AIX의 기본 설치본에는 이런 컴파일러가 없다. Using the GNU C/C++ compiler on AIX를 참고한다.
  • 파일 추출 도구 : 서버에서 파일을 적절히 추출하려면 gunzip, tar, bzcat, 그리고 가능하다면 GNU make와 tar(gmake, gtar로서 GNU 사이트에서 다운로드 가능)가 필요하다.
    서버에서 도구들이 제대로 동작하는지 체크해 보려면 다음 명령어를 실행해본다.
    # cd /usr
    # find . –name *.tar //(repeat for *make, *zip, etc.)
  • 톰캣 코드
- 유닉스와 윈도에서 톰캣 설정 차이점
  • 유닉스 서버에서는 bzcat, gunzip, tar(혹은 gtar)가 필요
  • PATH 설정
  • 기본 운영체제 파일 시스템(/var, /tmp 등)에 적절한 권한이 필요
  • ID, 그룹, 적절한 접근 권한에 대해 고려해야 함
  • GUI가 아닌 CLI
  • 윈도우는 자동화된 배치 파일 처리에 .bat을, 실행 파일에 .exe 파일을 쓴다.
  • 유닉스에서는 기본적으로는 실행 스크립트 등에 .sh나 .ksh 확장자를 사용한다.
- 경로 설정
JAVA_HOME
# export JAVA_HOME=/usr/jdk/instances/jdk1.5.0 //JRE 또는 JDK
# JAVA_HOME=/usr/bin/java; export JAVA_HOME

# echo $JAVA_HOME
/usr/jdk/instances/jdk1.5.0

CATALINA_HOME
# export CATALINA_HOME=/opt/apache-tomcat-6.0.16

- 셸 설정
홈디렉터리에 .profile 파일을 생성한다.
bash-3.00# cd ~/ (home dir)
bash-3.00# vi .profile
# /bin/sh
stty istrip
PATH=$PATH:/usr/bin:/usr/local/bin:/usr/ucb:/etc
export PATH
umask 077

export SHELL=/usr/bin/ksh
export ENV=$HOME/.kshrc
export EDITOR=vi
export FCEDIT=vi

#Tomcat specific PATHs
export JAVA_HOME=/usr/jdk/instances/jdk1.5.0
export CATALINA_HOME=/opt/apache-tomcat-6.0.16

bash-3.00# PATH=/usr/ccs/bin:$PATH; export PATH (for make cmd)
bash-3.00# PATH=/usr/sfw/bin:$PATH; export PATH

- 사용자와 그룹
여러 사용자가 서버를 사용하게 된다면 당연히 각기 다른 사용자가 다양한 도구와 파일 시스템에 접근할 수 있도록 허용할 사용자와 그룹 권한을 설정하고 싶을 것이다. root가 아닌 사용자로 톰캣을 설치하여 동작시키려 한다면 이 또한 필수다(대부분의 실 서비스 환경에서 추천되는 방식이다).

# /usr/sbin/groupadd -g {구체적인 gid 명시. 명시하지 않으면 OS가 gid를 알아서 할당해줄 것이다.} {그룹 이름}
# /usr/sbin/groupadd -g 10004 tomcatgroup

# /usr/sbin/useradd -d {사용자 홈 디렉터리} -g {사용자가 속한 주 그룹} -u {구체적인 UID 명시. 이 란은 비워둘 수 있다. 명시하지 않으면 운영체제가 UID를 알아서 할당해줄 것이다.) -s {해당 사용자에 대한 기본 셸} -c "{사용자에 대한 상세 정보 명기}" {사용자 이름}
# /usr/sbin/useradd -d /export/home/tomcat -g tomcatgroup -u 10010 -s /bin/ksh -c "Main Tomcat Administrative User" tomcat

- 서버 설치 파일 다운로드, 추출하기
//파일을 /opt 디렉터리 아래로 옮긴다(/opt 디렉토리는 대부분의 신규 소프트웨어가 설치되는 디렉터리다).
# mv *tar.gz /opt
# ls -ltr /opt

//권한 설정하기
# cd /opt
# chmod +x *gz //same as chmod 775
# umask 007 //사용자가 770 권한을 갖고 신규 파일을 생성할 수 있도록 한다. chmod를 역으로 생각해 보라.

//설치 파일 추출하기
# gunzip *.gz
# tar -xvf *.tar
# ls -latr

# rm *.exe
# rm *.bat

- 서버 설정, 컴파일
# cd $CATALINA_HOME/bin
# ./configure --with-java=/usr/java
//- or -
# export JAVA_HOME
# ./configure

//코드 컴파일하기
# gunzip jsvc.tar.gz
# pwd
/opt/apache-tomcat-6.0.16/bin
# tar -xvf jsvc.tar
# gmake //gmake가 위치한 경로가 PATH에 있는지 확인하기 바란다(예를 들어 ./sfw/bin/).
//톰캣 사이트에서는 FreeBSD 시스템의 자체 BSD make 명령어 대신 GNU make(gmake)를 사용해야 한다고 언급하고 있다.

# chmod 775 jsvc[각주:1]
# cp jsvc ..
# cd ..

- 서버 시작[각주:2]
# cd $CATALINA_HOME/bin
# ./startup.sh
# cd ../logs

# tail -50 catalina.out

- 시작 데몬[각주:3] 구동하기
#./jsvc \
–home /usr/jdk/instances/jdk1.5.0 \
–Dcatalina.home=/opt/apache-tomcat-6.0.16 \
-cp ./bin/bootstrap.jar \
-outfile ./logs/catalina.out \
-errfile ./logs/catalina.err \
org.apache.catalina.startup.Bootstrap
//root가 아닌 사용자로 구동하려면 -user 옵션을 사용
//특정 .pid 파일 위치를 명시하려면 -pid 옵션을 사용

# ./jsvc -help

- 톰캣 설치 테스트하기
기본 톰캣은 http 포트 8080에 내부 HTTP 서버를 설치한다(Coyote HTTP/1.1).

- 톰캣 웹 애플리케이션 매니저에 특정 사용자 접근 허용하기
tomcat-users.xml에 role과 user 추가
//보안을 위해 tomcat-user.xml 파일을 파일 소유자만 접근할 수 있도록 제한한다.
# chmod 600 tomcat-users.xml

* 엔터프라이즈 웹 아키텍처 대 독립형(stand-alone) 웹 아키텍처에 대한 비교
  1. jsvc 는 런처(launcher) 프로세스, 통제(controller) 프로세스, 통제되는(controlled) 프로세스 이렇게 세 개의 프로세스를 사용한다. 통제되는 프로세스는 주 자바 쓰레드다. 이 주 자바 가상 머신(JVM)이 비정상적으로 종료되면 통제 프로세스, 즉 컨트롤러 다음에 재시작한다. jsvc는 데몬 프로세스이므로 root로 시작해야 한다. 인자값으로 -user를 주면 root 권한이 없는 사용자로도 동작시킬 수 있다. [본문으로]
  2. LifecycleListeners를 구현하여 시작 프로세스를 입맛에 맞게 고칠 수도 있다. [본문으로]
  3. 데몬은 비 대화형(non-interactive) 서버 애플리케이션으로서 명시한 시그널(signal)들을 운영체제가 통제하게 된다. 윈도에서 서비스를 떠올려보자. 윈도의 서비스는 서버 애플리케이션의 정상적인 셧다운을 위해 제공된다. 운영체제는 셧다운이 절박한 상황인 경우 서버 애플리케이션에게 이를 고지하게 되고 애플리케이션은 수행중인 과정을 끝내기 전에 어떤 작업을 수행할 수 있도록 할 여지가 생기게 된다. [본문으로]

[Unix] watch

# watch 'ps -ef | grep syslog'
# watch -n1 -d 'ps -ef | grep syslog' //갱신 간격을 1초로 한다.

백그라운드 프로세스(job)을 모니터링하거나
동일한 명령어를 반복적으로 사용하는 경우 편리함.

-
# watch -n1 -d 'netstat -a | grep ESTAB'


HP-UX에서 프로그램 설치하기

HP-UX는 depot이라는 독자적인 패키징 시스템을 가지고 있다.

- lsof 설치하기
  1. http://hpux.connect.org.uk/ 에서 필요한 패키지를 찾는다.
  2. lsof는 http://hpux.connect.org.uk/hppd/hpux/Sysadmin/lsof-4.82/ 에 있음.
  3. 해당 OS와 Architecture에 맞는 파일을 다운로드한다.
  4. lsof-4.82-ia64-11.23.depot.gz 을 다운받는다.
  5. # su - root
    # gzip -d lsof-4.82-ia64-11.23.depot.gz
    # LANG=C
    # swinstall -s /tmp/lsof-4.82-ia64-11.23.depot //절대경로 사용할 것.
  6. 텝, 화살표키를 이용해서 이동하고, 스페이스바, 엔터로 선택할 수 있다.
    Actions -> Install 로 설치한다.
- 삭제하기
# swremove

- 참고자료
HP-UX 개발환경 설정및 시스템 정보가져오기
HP-UX 에서 소프트웨어 설치/삭제 하기



Unix 프로세스 확인

# ps -efx //HP-UX
# ps -efw //Linux

# top -f top.log //HP-UX
//Linux는 파일저장 옵션이 없음.


[todo] 스레드 보는 옵션까지 추가

HP-UX Operating System Release History


http://www.hp.com/softwarereleases/releases-media2/history/slide2.html

Q사 : uname -r
B.11.23

=-=> 이거 다른 곳에 한꺼번에 정리할 곳이 없나?

유닉스 환경변수 설정

/etc/profile 이 적용된 후에 USER_HOME/.profile 이 적용된다.
root 사용자는 /.profile 이 사용된다.

profile 수정후에 로그아웃을 하고 다시 로그인하면 적용되지만 다음 명령으로 바로 적용이 가능하다.
# source /etc/profile //Linux
# . /etc/profile //Unix

[todo] profile 은 어떤 쉘에서 사용가능? Command Line Interface 와도...

profile 바로 적용하기
source .profile, ./.profile 둘다 안됨...1구매에서


[비교] 반복문 - foreach, for~in

 

 

Java

for (String s : arr) {
    System.out.println("s=" + s);
}

람다?

 

Javascrpt

var person = {fname:"John", lname:"Doe", age:25};
for(x in person){
    txt = txt + ", " + person[x];
}

for (variable in [object | array]) {
    statements
}
--
var arr = ["pantarei", "siliuse", "mir"];  
for(var i = 0 ; i < arr.length ; i++){ 	alert(arr[i]); }  
for(var i in arr){ 	alert(arr[i]); }

 

Python

languages = ['Java', 'Python', 'C']
for language in languages:
    print(language)
}

 

PHP

foreach($customers as $customer){
    echo $customer;
}

 

Perl

여기도 추가
foreach my $string ( @array ) {
    print $string;
}

 

 

JSTL

<c:forEach>

 

Shell

$ for i in 1 2 3
> do
> echo $i
> done
1
2
3

$ for i in 1 2 3; do echo $i; done
1
2
3
$ for n in `find /etc -size 0`; do echo `ls -l $n`; done //xargs를 쓰는게 좋지
 

awk

 

Windows Command

> for %a in (1 2 3) do @echo %a

 

Oracle

FOR - Cursor

 

 

Subversion 명령어

요즘 Unix 에서 svn 명령어를 사용할 일이 있어서 정리해 본다.

$ svn status //항상 확인할 것. 로컬 작업본의 변경 상태를 보여준다.
?      WEB-INF/classes
M      index.jsp
M      index.html

$ svn status - u //서버 저장소의 변경 상태를 보여준다.

$ svn status board

$ svn co http://SVN_SERVER:8080/svn/repos/trunk/SSO
A    SSO/prod
A    SSO/prod/verify.sso

$ svn update

$ svn update board/
U    board/view.jsp
업데이트 된 리비전 81.

$ svn update main/notice.jsp //특정 파일만 업데이트하기

$ svn commit -m "" test/welcome.html //=-=> 문법 맞나?

$ svn update
무시함 '.' //권한이 없는 사용자인 경우였음. root 로 하면 된다.

$ svn log number.txt

$ svn diff number.txt //작업본(working copy)의 변경 내용을 볼 때

$ svn diff -r HEAD number.txt //저장소와 작업본을 비교

Command Line Interface

- 명령 히스토리
  • bash, tcsh, Windows Command : 아래/위 화살표
  • ksh : ESC-K, J(vi), Ctrl+N, P(emacs)
  • csh은 이 기능이 없으므로 tcsh 이용하면 됨.
    또는 history를 사용한다.
    set history=20
    alias h history

- 방금 사용한 명령 실행

- 자동 완성
  • sh
    # cd mESC
  • bash : Tab
  • ksh : cd 명령에 * 사용 가능
    # set -o //현재 설정 확인
    # set -o vi //export EDITOR=vi, export VISUAL=vi 와 동일하다고 하던데.....EDITOR=vi 하면 vi 가 온으로 되네
    # cd mESC-\ //vi
    # set -o emacs
    # cd mESC+ESC //emacs
  • csh
    # set filec
    # cd mESC
  • tcsh : Tab, ESC, cd 명령에 * 사용 가능
  • Windows Command : Tab, cd 명령에 * 사용 가능


- 파일 리스팅

  • sh
    ???# cd mESC
  • bash : Tab-Tab ???
  • ksh
    # cd mESC-= //vi

- 환경변수 설정
  • sh, ksh
    # export LANG=ko
  • csh
    # setenv LANG ko
  • Windows Command
    > set LANG=ko