RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'Linux/SHELL'에 해당되는 글 13
출처 블로그 > semigifn님의 블로그
원본 http://blog.naver.com/semigifn/16469526



출처 : 오라닉스 ( http://cafe.daum.net/oranix )

1. bash에서의 쉘변수와 환경변수(1) 쉘변수
 1) 개요: 말 그대로 특정한 쉘 즉 bash에서만 적용되는 변수를 말한다.
 2) 특징
  ㄱ. 지정하는 방법은 '변수명=값' 형태로 지정하면 된다.
    예) [posein@www posein]$ COLOR=red
  ㄴ. 변수값을 출력할 때는 변수명 앞에 $을 붙여 echo명령을 사용하면 된다.
    예) [posein@www posein]$ echo $COLOR
      red
(2) 환경변수: 모든 쉘에 영향을 미치는 변수라는 것을 제외하고는 쉘변수와 지정방법이나 특징이
        유사하다.
(3) bash에서 쉘변수를 환경변수화시키기: export명령을 사용하면 된다.

2. 일반적인 환경변수목록(1) 환경변수
 1) HOME : 사용자의 홈디렉토리
 2) PATH : 실행파일을 찾는 경로
 3) LANG : 프로그램 사용시 기본 지원되는 언어
 4) PWD : 사용자의 현재 작업하는 디렉토리
 5) TERM : 로긴 터미널 타입
 6) SHELL : 로그인해서 사용하는 쉘
 7) USER : 사용자의 이름
 8) DISPLAY : X 디스플레이 이름
 9) VISUAL : visual 편집기의 이름
 10) EDITOR : 기본 편집기의 이름
 11) COLUMNS : 현재 터미널이나 윈도우 터미널의 컬럼수
 12) PS1 : 명령프롬프트변수
 13) PS2 : 2차 명령프롬프트이다. 명령행에서 를 사용하여 명령행을 연장했을 때 나타난다.
 14) BASH : 사용하는 bash 쉘의 경로
 15) BASH_VERSION : bash의 버전
 16) HISTFILE : history 파일의 경로
 17) HISTFILESIZE : history 파일의 크기
 18) HISTSIZE : history에 저장되는 갯수
 19) HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수이다.
 20) HOSTNAME : 호스트의 이름
 21) LINES : 터미널의 라인 수
 22) LOGNAME :로그인이름
 23) LS_COLORS : ls 명령의 색상관련 옵션
 24) MAIL : 메일을 보관하는 경로
 25) MAILCHECK : 메일확인시간
 26) OSTYPE : 운영체제 타입
 27) SHLVL :쉘의 레벨
 28) TERM :터미널종류
 29) UID : 사용자의 UID
 30) USERNAME : 사용자이름
(2) 사용예
 1) [posein@www /]$ mkdir $HOME/backup
   [posein@www /]$ ls -ld $HOME/backup
   drwxrwxr-x   2 posein  posein     4096 1월 15 01:31 /home/posein/backup
 2) [posein@www /]$ echo $PS1
   [u@h W]$
    => 프롬프트 형식
      d : '요일 달 날짜'형태로 나타내준다. (예 "Wed Jan 15")
      h : 호스트이름을 보여준다. 보통 '.'를 사용한 이름인 경우 첫번째 '.'까지 보여준다.
      H : 호스트이름을 보여준다.
      l : 쉘의 터미널 장치의 이름을 보여준다.
      s : 쉘의 이름을 보여준다.
      t : 24시 형태의 현재 시간을 보여준다. (예 HH:MM:SS)
      T : 12시 형태의 현재 시간을 보여준다. (예 HH:MM:SS)
      @ : am/pm 12시 형태의 현재시간을 보여준다.
      u : 현재 사용자의 이름을 보여준다.
      w : 현재 작업디렉토리를 보여준다.
      W : 현재작업디렉토리의 마지막 디렉토리만 보여준다.
      ! : 현재 명령의 히스토리 넘버를 보여준다.
      : 를 보여준다.
 3) [posein@www posein]$ PS1="[u@t W]$ "
   [posein@00:53:51 posein]$
    => 프롬프트에서 호스트이름대신에 현재시간을 표시하도록 설정하였다.

3. 환경변수관련 명령
(1) set : shell변수를 표시하고 값을 지정할 수 있다. C-shell에서는 변수와 값지정시에 필수적으
      로 사용해야 하지만, Bash에서는 변수와 값지정시에 꼭 set 명령을 지정하지 않아도 된다.
 1) 사용법
  set [option] [argument]
 2) option
  -o : 현재 set옵션의 상태를 표시한다.
 3) 사용예
  ㄱ. set
    => 옵션이나 인자가 주어지지 않으면 이미 지정된 shell변수와 함수이름,값이 표시된다.
  ㄴ. set -o
    => 현재 set옵션의 상태가 표시된다.
 4) 응용예
  [posein@www posein]$ a=1          // bash에서는 set 명령없이 "변수=값" 형태로 지정
                              하면 된다. 확인은 인자없이 set 이라고 입력한다.
  [posein@www posein]$ echo $a
  1
   => 변수로 선언되었으므로 $a하면 1이라는 값이 출력된다.
  [posein@www posein]$ /bin/csh       // 임시로 C-shell로 전환.
  [posein@www ~]$
   => C-shell로 전환하면 프롬프트로 바뀜을 알 수 있다.
  [posein@www ~]$ b=2
  b=2: Command not found.
   => bash에서 변수지정하는 것처럼 하면 오류가 나타남을 알 수 있다.
  [posein@www ~]$ set b=2
   => C-shell 계열에서는 변수와 값지정시 set 명령을 사용해야 한다. 확인하려면 인자없이 set
    이라고 입력한다.
  [posein@www ~]$ echo $b
  2
    => 변수로 선언되었으므로 $b하면 2라는 값이 출력된다.

(2) env : 환경변수에 대한 정보를 보여준다.
 1) 환경변수란 : 로그인할 때나 새로운 쉘을 파생시킬 때 쉘의 환경을 정의하는 중요한 역할을
           수행한다. env를 실행하면 환경 변수 설정값들을 확인할 수 있고 또한 각 환경
           변수를 나타낼 때 변수이름앞에 $를 붙인다.
 2) 사용예
  [root@www /root]# env
   => 현재 시스템의 환경변수를 보여준다.
 3) 환경변수의 설정 : 값을 지정한후 export해야 한다. 현재 리눅스의 bash에서는 export를 생략
              해도 반영된다.
  예) 패스변경하기
    [posein@www posein]$ echo $PATH
    /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
      => 현재 패스를 확인하면 홈디렉토리를 없다. 홈디렉토리를 추가해보자.
    [posein@www posein]$ PATH="$PATH:/home/posein"
    [posein@www posein]$ export PATH
    [posein@www posein]$ echo $PATH
    /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin:/home/posein
(3) export : 쉘변수를 환경변수로 만들어주는 명령이다. 현재 리눅스 bash에서 일시적인 반영시에
        는 생략해서 사용할 수 있다.
 1) 사용법
  export 환경변수=변수값
 2) 사용예
  ㄱ. [root@www root]# export PATH="$PATH:/usr/local/apache/bin"
      => 현재 설정된 패스값에 /usr/local/apache/bin이라는 경로를 추가한다.
  ㄴ. [posein@www posein]$ PATH="$PATH:/home/posein"
      => 현재 설정된 패스값에 "/home/posein"이라는 경로를 추가한다. export명령을 생략해서
       사용해도 된다.
 3) 참고: export 명령은 쉘변수를 환경변수로 만들어 준다. 그러나, 쉘에서 export로 선언하여
      사용한 뒤에 로그아웃하게 되면 초기화된다. 따라서, 해당 환경변수의 값을 계속적으로
      반영되도록 하려면 /etc/profile(전체시스템)이나 ~/.bash_profile(개인사용자)파일안에
      선언하면 된다.

(4) unset : 선언된 변수를 제거하는 데 사용한다.
 1) 사용법
  unset 변수이름
 2) 사용예
  [root@www /root]# TEL=042
  [root@www /root]# echo $TEL
  042
  [root@www /root]# unset TEL
  [root@www /root]# echo $TEL  // 변수가 제거되었으므로 아무값도 출력되지 않는다.

(참고) bash에서는 환경변수를 만들 때 변수 값을 설정한 후, 환경에 변수를 익스포트(export)하는
    두 단계를 거친다.
 * 사용예
  [posein@www posein]$ echo $LANG     // 언어관련 환경변수값 확인
  ko_KR.eucKR
  [posein@www posein]$ date
  수 5월 21 01:28:56 KST 2003       // 한글로 표시된다.
  [posein@www posein]$ LANG=euc_UN    // 영어로 변경
  [posein@www posein]$ export LANG    // 일시적으로 변경할 경우에는 생략가능
  [posein@www posein]$ date
  Wed May 21 01:29:07 KST 2003       // 영어로 표시된다.


4. 명령어 히스토리(command history)
(1) history에 대하여
 1) 설명: bash에서는 입력하여 실행했던 모든 명령들은 히스토리 리스트 버퍼에 스택으로 저장된
      다. 이 기능은 반복하여 입력하거나 명령을 수정할 때 유용하게 쓰인다. 사용법은 방향키
      위/아래를 누르면서 사용가능하다. 히스토리 파일은 각 사용자의 홈 디렉토리에
      .bash_history라는 이름으로 존재하며 쉘 실행 중에는 메모리에만 명령어 히스토리를
      기억하고 있다가 로그아웃시에 .bash_history파일에 저장한다.
 2) 사용예
  [posein@www posein]$ history
   => 입력한 명령어들의 리스트를 보여준다.
(2) history 관련 변수
 1) 종류
  ㄱ. HISTSIZE : 히스토리 스택의 크기가 지정되어 있다. 단위는 명령의 개수이다. 이 변수의
            설정값을 변경했을 경우 history명령을 내리면 해당개수만큼만 출력된다. 또한
            방향키로 검색했을 경우에는 설정한 명령한 개수만 검색된다.
  ㄴ. HISTFILESIZE : 실질적인 히스토리파일의 크기이다.
  ㄷ. HISTFILE   : 히스토리 파일의 위치를 보여준다.
  ㄹ. HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수이다.
 2) 사용예
  ㄱ. [posein@www posein]$ echo $HISTFILE
     /home/posein/.bash_history
  ㄴ. [posein@www posein]$ HISTSIZE=1
      => 실질적인 히스토리 파일의 스택크기가 1이 되므로 방향키로 조회해도 나오지 않는다.
(3) ! 과 히스토리 명령문 : 느낌표(!)를 이용하여 실행할 수 있다.
 1) 사용법
  !! : 마지막으로 실행했던 명령문을 실행한다.
  !n : n번째 실행한 명령문을 실행한다.
  !-3 : n번째 이전에 실행했던 명령문을 실행한다.
  !string : 가장 최근에 'string(문자열)'으로 시작하는 명령문을 실행한다.
  !?string? : 가장 최근에 실행했던 명령문중 string을 포함하고 있는 명령문을 실행한다.
          배포판에 따라 string뒤에 ?는 생략가능하다.
  ^string1^string2 : 마지막 실행 명령문의 string1을 string2로 대체한 후 실행한다.
 2) 사용예
  ㄱ. [posein@www posein]$ pwd
     /home/posein
     [posein@www posein]$ !!
     pwd
     /home/posein
      => pwd가 실행된다.
  ㄴ. [posein@www posein]$ !-4
     date
     수 5월 21 01:51:08 KST 2003
      => history 스택을 거슬러 4만큼 올라가서 해당 명령을 실행한다. 현재의 예제는 date
       명령임을 알 수 있다.
  ㄷ.[posein@www posein]$ !100
      => history의 번호중에서 100번 명령을 실행한다.
  ㄹ. [posein@www posein]$ set
     .....
     [posein@www posein]$ !s
      => 가장 최근에 's'로 시작하는 set명령이 실행된다.
  ㅁ. [posein@www posein]$ ls -alF
     .....
     [posein@www posein]$ !?al
      => ls -alF가 실행된다.
  ㅂ. [posein@www test]$ ls
     a.txt
     [posein@www test]$ cp a.txt b.txt
     [posein@www test]$ ^b.txt^c.txt
     cp a.txt c.txt
     [posein@www test]$ ls
     a.txt b.txt c.txt
(4) 참고 - history관련 테크닉
 1) [CTRL] + [r]
    => 명령프롬프트상태에서 이 키 조합을 누르면 검색할 수 있는 명령프롬프트가 뜬다. 이 때
     특정한 문자를 입력하면 가장 최근에 그 문자로 수행한 명령을 보여준다.
 2) [ESC] 후에 [.] 또는 [ALT] + [.]
    => 최근에 사용된 인자(argument)를 붙여준다. 텔넷으로 접속한 경우에는 [ALT]+[.]은 사용할
     수 없다.
 3) export HISTCONTROL=ignoreboth
    => 중복되어지는 명령어는 히스토리에 기억하지 않는다. 명령행에 입력하거나 계속적으로
     반영시키려면 .bashrc파일에 기록한다.

5. alias
(1) 개요 : 명령어에 별명(alias)를 만드는 것이다. 어떠한 명령에 기본으로 옵션을 추가시키거나
      자신만의 독특한 명령어를 만들 수 있다. 기본적으로 alias만 입력했을 경우에는 현재
      설정된 alias를 보여준다.
(2) 사용법
  alias 별명이름='실행될 명령의 정의'
(3) 사용예
 1) alias
    => 현재 설정된 alias를 보여준다.
 2) alias rm='rm -i'
    => rm명령에 기본으로 -i옵션을 부여하여 rm명령을 실행시킬때마다 확실히 지울 것인지 물어
     본다.
 3) unalias rm
    => rm에 설정된 ailas를 해제한다.
(4) 특징
  1) 일반쉘상태에서 alias를 설정한 뒤 로그아웃하면 그 설정은 무효가 된다.
  2) alias의 해제는 unalias명령을 이용한다.
  3) alias의 설정을 지속적으로 반영시키려면 ~/.bashrc파일안에 설정하면 된다.
(참고) ~/.bashrc파일안에 설정하면 다음 로그인부터 그 값이 반영된다. 만약 즉시 반영하고 원할
    경우에는 'source .bashrc'를 실행시키면 된다.



출처 - 오라닉스

2006/09/08 14:03 2006/09/08 14:03
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > Beyond Tomorrow
원본 http://blog.naver.com/jinoxst/140021504341

=========================
Linux Shell Script 메모장
=========================

-------------------------
VI 사용기
-------------------------
1. 치환(substitution)
- 전체문서 치환 1,$s/common/fooboo
- s/common/fooboo => 커서가 있는 줄만 치환됨.

2. 삭제
- 단어 삭제 : dw 명령어 사용
- 라인 삭제
:set nu
하고 난후 삭제하고 싶은 라인를 선택한 후
:1,10 d
전체 라인을 삭제하려면
:1,$ d 라고 하면 전부 삭제됨.

3. 저장
- 다른 이름으로 저장 : w + "filename"

4. !
- vi 에디터 안에서 명령어 를 입력해서 확인 => :!pwd

5. 문서의 모든 부분[혹은 부분(라인 넘버를 넣어줌)]을 소문자->대문자,
대문자->소문자로 변환
:1,$ s/[a-z]/\u&/g   소문자를 대문자로
:1,$ s/[A-Z]/\l&/g

7. copy
- 일정 라인을 copy 해서 해당 라인에 삽입
:set nu
:30,33 co 5 => 30 부터 33 라인을 복사해서 5라인 이후(6라인부터) 삽입한다.
- 일정 라인을 copy 해서 첫라인 혹은 맨마지막 라인에 삽입
:30,33 co 0 => 첫 라인에 삽입
:30,33 co $ => 마지막 라인에 삽입


------------------------
변수 초기값할당/계산
------------------------
$x=20 (= 좌우에 스페이스를 넣으면 안됨.)
$y=5  (= 좌우에 스페이스를 넣으면 안됨.)
$z=`expr $x / $y` (= 좌우에 스페이스를 넣으면 안됨. / 좌우에 스페이스를 넣어야 함.)
$echo $z
$4

-----------------------------
Linux Command Reference (LCR)
-----------------------------
1. find

- 수정된지 2일이 됬고 apr 로 시작하는 jsp 파일들의 목록
$ll `find . -ctime 2 -name apr*.jsp`

- 오늘 수정된 jsp 파일 목록
$find . -ctime 0 -name *.jsp -print

- 특정 문자를 포함하고 있는 파일 이름리스트 찾기
$find . -exec grep -l 'src="/banking/js' {} \;

2. ls & wc
- 현재 디렉토리에 있는 파일의 총 갯수 구하기
$ll mur2_3*.jsp | wc -l

3. Back quote(`) 는 명령어를 실행하라는 의미의 문자이다.
$echo "Today is `date`"

4. Exit Status
- 리눅스에서 Shell script 가 종료되면 종료상태가 zero 혹은 non zero 값을 가지게
  된다. 보통 0 이면 정상종료, 1 혹은 2이면 비정상 종료를 의미
- Exit Status 를 확인해 보는 명령어는 다음과 같다.
$echo $?

4. Redirection
- 파일의 내용을 sort 하고 영문자를 모두 대문자로 변환시켜주는 shell 2줄
sort < $1 > sortedFile
tr < sortedFile "[a-z]" "[A-Z]" > upperCaseFile

6. Shell Script 를 디버그 할때 유용한 명령어(-x, -v 옵션)
$sh -x ./dsh1.sh 5 6
$sh -v ./dsh1.sh 5 6

7. /bin/bash 명령어의 두가지 의미
- 지역변수 : Now load second shell in memory (Which ignores all old shell's variable)
- 글로벌 변수(export 키워드 사용) :  Now load second shell in memory (Old shell's variable is accessed from second shell,
if they are exported )

8. 도스 버젼의 text 파일(^M 들어 있는 것들)을 유닉스로 변환시켜주는 명령어 :
$dos2unix *.jsp


-----------------------------
CPU 및 Memory 정보 표시 방법
-----------------------------
1. CPU
$cat /proc/cpuinfo

2. Memory
$cat /proc/meminfo

2006/09/08 13:42 2006/09/08 13:42
이 글에는 트랙백을 보낼 수 없습니다

안녕하세요."rootman.co.kr" 운영자입니다.

"shc" 는 스크립트 파일을 바이너리로 바꿔 주는 역할을 합니다. php encoder 같은 역할을 한다고 보면 됩니다.

예전엔 중요한 소스 같은 경우, php로 스크림트 파일 위치를 열어서 특정 디렉터리에 위치해 놓고 컴파일하여 사용했는데, "shc"를 사용하니 더욱 강력(?)하고 손 쉽게 인코딩하더군요.

역시 아는 것이 힘입니다.

쉘 스크립트도 역시 중요한 "root" 패스워드 정보, "DB" 정보 등 공유되거나 유출되면 안 되는 파일들이 존재합니다.

이럴 때 정말 유용하게 사용될 수 있으니, 아직까지 모르셨던 분들 아래 문서 참고하셔서 도움되시길 바랍니다.  좋은 날, 기쁜 날 되시길 빕니다.


-------------------------------------------------------
1. 다운로드  
-------------------------------------------------------
(1) 공식
   
http://www.datsi.fi.upm.es/~frosal/

(2) rootman 사이트
   
http://www.rootman.co.kr/NFS/Util/shc-3.8.3.tgz


-------------------------------------------------------
2. 설치
-------------------------------------------------------
 [root@ns1 local]# tar xvfz shc-3.8.3.tgz
 shc-3.8.3/CHANGES
 shc-3.8.3/Copying
 shc-3.8.3/Makefile
 shc-3.8.3/match
 shc-3.8.3/pru.sh
 shc-3.8.3/shc.1
 shc-3.8.3/shc.c
 shc-3.8.3/shc.html
 shc-3.8.3/shc.README
 shc-3.8.3/test.bash
 shc-3.8.3/test.csh
 
 [root@ns1 shc-3.8.3]# make install
 ***     Installing shc and shc.1 on /usr/local
 ***     ¿Do you want to continue? y
 install -c -s shc /usr/local/bin/
 install -c -m 644 shc.1 /usr/local/man/man1/


"shc" 파일은 /usr/local/bin/ 디렉터리에 설치됩니다.


-------------------------------------------------------
3. 테스트
-------------------------------------------------------
(1) 파일 생성 (__EOF___ 까지 쉘 상태에서 긁어다가 붙이시면 됩니다.)
cat > /root/tmp/script.sh    << __EOF__
#!/bin/sh
#------------------------------
# this file is not encrypted
#------------------------------
echo "I love Duane's articles and will send him a donation via PayPal."
exit 0;
__EOF__


(2) 명령행 실행
  [root@ns1 tmp]# shc /root/tmp/script.sh
  "script.sh.x"라는 바이너리 파일이 생성된다.


(3) 생성된 스크립트 수행
  [root@ns1 tmp]# ./script.sh.x
  I love Duane's articles and will send him a donation via PayPal.


-------------------------------------------------------
4. 특이한 기능
-------------------------------------------------------
[root@ns1 tmp]# shc -e 09/10/2004 -m "Dude it is too late to run this script." -f script.sh
[root@ns1 tmp]# ./script.sh.x
./script.sh.x: has expired!
Dude it is too late to run this script.

- 쉘 스크립트에 대한 만료일을 지정하여 실행할 수 있습니다.
- 지정된 날짜 이후는 실행되지 아니합니다.
- 위 예는 "2004년 10월 9일"을 스크립트 만료일로 지정하여 만료 후에는 "Dude it is too late to run this script."라는  메시지를 출력하라고 지정한 내용입니다.


-------------------------------------------------------
5. 참고사항
-------------------------------------------------------
- "shc" 명령어는 스크립트에 대한 C 소스 코드를 생성합니다.
- binary로 파일이 생성되므로 "./파일명" 형태로 실행하여야 합니다.
- 생성된 스크립트 파일은 이름을 변경해도 무관합니다.


-------------------------------------------------------
6. 기본 실행 옵션 설명
-------------------------------------------------------
(1) -e date
    만료일을 지정합니다. (dd/mm/yyyy format)

(2) -m message
    만기 시 메시지를 출력합니다.

(3) -f script_name
    컴파일할 스크립트 파일을 지정합니다.

출처 : rootman.co.kr

2006/09/08 13:41 2006/09/08 13:41
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2023/02   »
      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        
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)