블로그 이미지
GUCCI

카테고리

전체보기 (111)
여행 (1)
기기 (2)
쇼핑 (0)
게임 (0)
etc. (6)
취업이야기 (0)
업무일지 (5)
리눅스 (38)
웹프로그래밍 (2)
네트워크 (4)
JAVA (17)
Android (0)
IOS (2)
LUA (8)
C/C++ (1)
Objective C (2)
SERVER (2)
그누보드4 (1)
MSSQL (2)
Programming (1)
자바스크립트 (4)
HTML/CSS (1)
LGNAS (0)
Total
Today
Yesterday

'리눅스'에 해당되는 글 38건

  1. 2012.02.10 /dev/null 2>&1 의 의미 1
  2. 2012.02.09 Vi/Vim 단축키 모음 키보드그림 4
  3. 2012.02.09 쉘 프로그래밍 강좌 2
  4. 2012.02.09 RPM( Redhat Package Manager) 1
  5. 2012.02.09 리눅스 기본 명령어
  6. 2012.02.09 mount 2
  7. 2012.02.09 APM 설치 옵션 정리 1
  8. 2012.02.09 /etc/inittab 4
  9. 2012.02.09 OpenWrt The Boot Process 5
  10. 2012.02.08 vi 에디터 명령어 2

/dev/null 2>&1 의 의미

리눅스 / 2012. 2. 10. 09:02
/dev/null 2>&1 

만약... 
nohup ${DIR}/bin/scheduler scheduler.ini >scheduler.out 2>&1 & 
으로 한다면은... 에러 메시지(stderr)은 scheduler.out 파일에 에러 메시지를 출력하지 않고 바고 
콘솔에다가 뿌려 줍니다. 
이건 stderr(2)이 버퍼를 이용하지 않고 에러가 생기는 즉시 바로 출력을 해주기 
때문입니다. 
이렇게 2>&1 리다이렉션을 시켜 줌으로 인해 stderr > stdout 으로 출력이 되고 
scheduler.out 파일에 에러 메시지가 저장이 되게 되는 것입니다. 

------------------------------------------------------------------------- 
2 >&1 의 의미. 

n >&m: 표준출력과 표준에러를 서로 바꾸기. 
0, 1, 2는 각각 표준입력, 표준출력, 그리고 표준에러를 의미합니다. 

2>&1의 의미는 표준 출력의 전달되는 곳으로 표준에러를 전달하라라는 
의미입니다. 
이것은 Bourne쉘 연산자이기 때문에 csh에서는 사용할 수 없답니다. 

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

 if ( ls -l $0 | grep $LOGNAME >/dev/null ) 
    여기서 /dev/null로 리다이렉션하는건 무었을 의미하나요? 

표준출력을 버리라는 뜻입니다. 이 부분에서 grep 명령을 사용하는 것은 
걸리는 것이 어떻게 생겼는지 보려는 것이 아니라 걸리는 것이 있는지 
없는지 알아내어 별도의 작업을 하려는 것이고 화면에 뭔가가 "뿌려지는" 
것은 막자는 것이죠. 

이런 용도로 grep을 사용할 때, -q, -s 등의 옵션을 사용할 수 있습니다. 
자세한 내용은 man grep. 

 nohup ${DIR}/bin/scheduler scheduler.ini >scheduler.out 2>&1 & 

 여기서 2>&1 & 은 무얼 의미하나요? 

앞부분의 "2>&1"은 표준오류 스트림을 표준출력으로 돌리라는(?) 뜻입니다. 
그냥 ">"를 기준으로 보면 "2"를 "&1"로 보내라는 뜻인데, 여기서 "2"는 
표준오류 스트림을 나타내는 번호이고 "1"은 표준출력을 나타내는 번호입니다. 
마지막 "&" 는 백그라운드로 실행하라는 뜻이구요.  

>/dev/null 은 출력을 /dev/null로 하겠다는 소리입니다. 
즉 출력이 안보이겠죠. 

>&1이 의미하는 것은 출력을 표준 출력에다가 하겠다는 소리입니다. 
<&0은 당연히 표준 입력이 되겠죠. 
------------------------------------------------------------------------- 
이렇게 해서 열흘 이상 지난 파일들을 자동으로 삭제하는 셸 스크립트를 완성했습니다. 
정확히 말하자면, 최근 열 개 까지의 날짜 디렉토리를 남겨 두고 나머지를 삭제하는 거겠군요. 
이제 휴지통에 신경을 덜 써도 될 것 같습니다. 
#!/bin/sh 

cd ~/.Trash/ 
mytrash=`date +%F` 

mkdir ${mytrash} >/dev/null 2>&1; 
mv * ${mytrash} >/dev/null 2>&1; 
mv ${mytrash}/20??-??-?? . >/dev/null 2>&1; 

for dir in `ls -1d 20??-??-?? | sort -r | tail -n +11` 
do 
        rm -rf "${dir}" 
done 
[이 게시물은 아쿠아님에 의해 2007-05-05 13:50:47 시스템자료실에서 이동 됨]
 

'리눅스' 카테고리의 다른 글

Linux Hotplug  (6) 2012.02.10
리눅스 부팅 과정  (2) 2012.02.10
Vi/Vim 단축키 모음 키보드그림  (4) 2012.02.09
RPM( Redhat Package Manager)  (1) 2012.02.09
리눅스 기본 명령어  (0) 2012.02.09
Posted by GUCCI
, |

Vi/Vim 단축키 모음

Mr.Dust의 아바타

http://www.viemu.com/ 에서 제공하는 vi/vim 단축키 모음(Graphical vi-vim Cheat Sheet and Tutorial)을 한글로 번역하였습니다.

제가 정리하긴 했지만, 실제 번역은 우분투 한국어 커뮤니티 분들이 해주셨습니다.
제 스스로가 vi/vim 을 잘 알지 못해 잘못된 부분이 꽤 있으리라 생각됩니다. 알려주시면 감사하겠습니다. 물론 직접 수정하셔도 됩니다. SVG 파일을 첨부합니다. Inkscape 를 이용해 작업하였고, 글꼴은 은그래픽을 사용하였습니다.


'리눅스' 카테고리의 다른 글

리눅스 부팅 과정  (2) 2012.02.10
/dev/null 2>&1 의 의미  (1) 2012.02.10
RPM( Redhat Package Manager)  (1) 2012.02.09
리눅스 기본 명령어  (0) 2012.02.09
mount  (2) 2012.02.09
Posted by GUCCI
, |
쉘 프로그래밍 강좌

참고서적 :  초보자용 리눅스 프로그래밍
            ( 대림출판사, 한동훈,이만용역, NEIL MATTHEW, RICHARD STONES 저 )

※ 넷츠고 리눅스 동호회 7월 제 5회 정기 공개강좌 자료
글쓴이 : 위경섭 ( powerhack@netsgo.com )

1. 변수
  . 쉘변수는 처음 사용될때 만들어진다. 즉 미리 선언할 필요가 없다.
  . 쉘변수는 유닉스 명령과 마찬가지로 대소문자에 구별이 있다.
  . 쉘변수는 기본적으로 데이터를 문자열로 저장한다. 수치를 대입해도 실제 수치
    가 아닌 문자열이 저장된다. 계산이 필요할 경우는 자동으로 수치로 변환하여 
    계산후 다시 문자열로저장된다.
  . 쉘변수의 값을 사용할 때는 변수명앞에 "$" 를 붙여서 사용한다.
  . 쉘변수에 값을 대입할때는 "$"를 사용하지 않는다.
  . 쉘변수는 타입이 없다. 즉 아무 값이나 다 넣을 수 있다.
	
1.1 환경변수
  쉘을 기동하고나면 기본적으로 셋팅되어있는 변수들이다. 유닉스/리눅스에는 많은
  환경변수들이 있고 필요한경우 이 변수들을 마치 일반변수처럼 값을 얻어오거나 셋
  팅할 수 있다. 여기서는 쉘과 직접적인 관련이 있는것만 설명한다. 
		
  $0 - 실행된 쉘 스크립트 이름
  $# - 스크립트에 넘겨진 인자의 갯수
  $$ - 쉘 스크립트의 프로세스 ID
		
1.2 인자 변수
  쉘스크립트에 인자를 넘겨줄때 그 인자들에 대한 정보를 가지고 있는 변수들.
		
  $1~ $nnn  : 넘겨진 인자들
  $*        : 스크립트에 전달된 인자들을 모아놓은 문자열. 하나의 변수에 저장되며
              IFS 환경변수의 첫번째 문자로 구분된다.
  $@        : $*과 같다. 다만 구분자가 IFS변수의 영향을 받지 않는다.
	
1.3 일반변수
  일반변수에 특별한 제약은 없다. 단 대소문자 구분만 정확하게 해주면 된다.

  예제 )

  #!/bin/sh
  echo "This Script Executable File : $0"
  echo "Argument Count : $#"
  echo "Process ID : $$"
  echo "Argument List \$* : $*"
  echo "Argument List \$@ : $@"
  echo "Argument 1 : $1"
  echo "Argument 2 : $2"
  echo "Argument 3 : $3"
  echo "Argument 4 : $4"	
  	
  실행 )
  $chmod 755 test1
  $./test1 a1 a2 a3 a4
  This Script Executable File : ./test1
  Argument Count : 4
  Process ID : 905
  Argument List $* : a1 a2 a3 a4
  Argument List $@ : a1 a2 a3 a4
  Argument 1 : a1
  Argument 2 : a2
  Argument 3 : a3
  Argument 4 : a4
	
1.4 연산
  변수의 산술연산은 생각하는것 처럼 쉽지않다. 위에서 언급했듯이 변수에는 모든것
  이 문자열로 저장되기 때문에 연산이 불가능하다. 연산을 위해서는 좀 복잡한 절차
  를 거쳐야 한다.

  변수 = $((산술식))
	
  이것이 가장 단순한 연산 규칙이다. 산술식내에는 변수( $1, $a 와 같은 ) 도 들어
  갈 수 있다. 산술식 내에 숫자가 아닌 문자열, 또는 문자열이 담겨있는 변수가 들어
  가면 그것들은 계산에서 제외된다.
  (정확히 말하면 0 으로 간주되어 연산이 이루어 지지 않는다.)
	
1.5 매개변수 확장
  매개변수 확장이란 변수의 값을 문자열등으로 대체하는 것을 말한다. 단순한 대체뿐
  아니라 변수내의 문자열을 조작하여 원하는 문자열만을 추출할 수도 있다.

  형식
  ${parm:-default}	: parm이 존재하지 않으면 default로 대체된다.
  ${#parm}          : parm의 길이를 참조한다.(가져온다)
  ${parm%word}      : 끝에서부터 word와 일치하는 parm의 최소부분(첫번째 일치) 을
                      제거하고 나머지를 반환한다.
  ${parm%%word}     : 끝에서부터 word와 일치하는 parm의 최대부분(마지막 일치) 을
                      제거하고 나머지를 반환한다.
  ${parm#word}      : 처음부터 word와 맞는 parm의 최소부분(첫번째 일치)을 제거하
                      고 나머지 부분을 반환한다.
  ${parm##word}     : 처음부터 word와 맞는 parm의 최대부분(마지막 일치)을 제거하
                      고 나머지를 반환한다.
		
  * word에는 와일드 카드를 사용할 수 있다.
		
  예를 보자.
  		
  1 #!/bin/sh
  2
  3 p="/usr/X11R6/bin/startx"
  4
  5 unset p
  6 a=${p:-"Variable p Not found"}
  7 echo $a
  8
  9 p="/usr/X11R6/bin/startx"
  10 a=${p:-"Variable parm Not found"}
  11 echo $a
  12
  13 a=${#p}
  14 echo $a
  15
  16 a=${p%/*}
  17 echo $a
  18
  19 a=${p%%/*}
  20 echo $a
  21
  22 a=${p#*/}
  23 echo $a
  24
  25 a=${p##*/}
  26 echo $a
  27                    
		
  위 스크립트의 결과는 다음과 같다.
  ---------------------------------
  Variable p Not found
  /usr/X11R6/bin/startx
  21
  /usr/X11R6/bin
  
  usr/X11R6/bin/startx
  startx              
  ----------------------------------
   6행 : 변수 p 가 제거 되었으므로 "Variable p Not found" 가 a에 들어간다.
  10행 : 변수 p 가 있으므로 그대로 a에 들어간다.
  13행 : a에는 변수 p의 길이가 들어간다.
  16행 : p 에서 가장 오른쪽의 "/"부터 끝까지 지우고 나머지를 a에 넣는다.
  19행 : p 에서 가장 왼쪽의 "/" 부터 끝까지 지우고 나머지를 a에 넣는다.
         (아무것도 없다)
  22행 : p 의 처음부터 가장왼쪽의 "/" 까지 지우고 나머지를 a에 넣는다.
  25행 : p 의 처음부터 가장 오른쪽의 "/"까지 지우고 나머지를 a에 넣는다.
		
2. 조건 판단
  쉘 스크립트에서 조건판단은 if 와 test 명령을 혼합하여 사용한다.
  일반적인 예는 다음과 같다.
	
  if test -f test1
  then
  	...
  fi
  
  -f 는 주어진 인자가 일반파일 일때 참이된다.
  
  
  test 명령은  [] 로 대체될 수 있다.
  
  if [ -f test1 ]
  then
  	...
  fi
  
  -----------------------------
  
  if [ -f test1 ]; then
  	...
  fi
	
  2.1 test 명령
  
  test 명령의 조건은 다음과 같이 세 부류로 나누어진다.
	
  문자열비교
    [ string ]             : string이 빈 문자열이 아니라면 참
    [ string1 = string2 ]  : 두 문자열이 같다면 참
    [ string1 != string2 ] : 두 문자열이 다르면 참
    [ -n string ]          : 문자열이 null(빈 문자열) 이 아니라면 참
    [ -z string ]          : 문자열이 null(빈 문자열) 이라면 참
		
  산술비교
    [ expr1 -eq expr2 ]	: 두 표현식 값이 같다면 참 ( EQual )
    [ expr1 -ne expr2 ]	: 두 표현식 갑이 같지 않다면 참 ( Not Equal )
    [ expr1 -gt expr2 ]	: expr1 > expr2 이면 참 ( Greater Then )
    [ expr1 -ge expr2 ]	: expr1 >= expr2 이면 참 ( Greater Equal )
    [ expr1 -lt expr2 ]	: expr1 < expr2 이면 참 ( Less Then )
    [ expr1 -le expr2 ]	: expr1 <= expr2 이면 참 ( Less Equal )
    [ ! expr ]          : expr 이 참이면 거짓, 거짓이면 참
    [ expr1 -a expr2 ]  : expr1 AND expr2 의 결과 ( 둘다 참이면 참 )
    [ expr1 -o expr2 ]  : expr1 OR expr2 의 결과 ( 둘중 하나만 참이면 참 )
		
  파일조건

    [ -b FILE ]           : FILE 이 블럭 디바이스 이면 참
    [ -c FILE ]           : FILE 이 문자 디바이스 이면 참.
    [ -d FILE ]           : FILE 이 디렉토리이면 참
    [ -e FILE ]           : FILE 이 존재하면 참
    [ -f FILE ]           : FILE 이 존재하고 정규파일이면 참
    [ -g FILE ]           : FILE 이 set-group-id 파일이면 참
    [ -h FILE ]           : FILE 이 심볼릭 링크이면 참
    [ -L FILE ]           : FILE 이 심볼릭 링크이면 참
    [ -k FILE ]           : FILE 이 Sticky bit 가 셋팅되어 있으면 참
    [ -p FILE ]           : True if file is a named pipe.
    [ -r FILE ]           : 현재 사용자가 읽을 수 있는 파일이면 참
    [ -s FILE ]           : 파일이 비어있지 않으면 참
    [ -S FILE ]           : 소켓 디바이스이면 참
    [ -t FD   ]           : FD 가 열려진 터미널이면 참
    [ -u FILE ]           : FILE 이 set-user-id 파일이면 참
    [ -w FILE ]           : 현재 사용자가 쓸 수 있는 파일(writable file) 이면 참
    [ -x FILE ]           : 현재사용자가 실행할 수 있는 파일(Executable file) 이면 참
    [ -O FILE ]           : FILE 의 소유자가 현재 사용자이면 참
    [ -G FILE ]           : FILE 의 그룹이 현재 사용자의 그룹과 같으면 참
    [ FILE1 -nt FILE2 ]   : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참
    [ FILE1 -ot FILE2 ]   : FILE1이 FILE2 보다 오래된 파일이면 참
    [ FILE1 -ef FILE2 ]   : FILE1 이 FILE2의 하드링크 파일이면 참
		
  2.2 if 구문
    if 문은 조건을 판단하여 주어진 문장을 수행한다.
		
    1. 형식 1  ( 단일 if 문 )
    형식 :
      if [ 조건 ]
      then
        문장1
        문장2
      fi
				
    2. 형식 2  ( if~else 문 )
    형식 :
      if [ 조건 ]
      then
        문장3
        문장4
      fi
				
    3. 형식 3  ( if~elif 문 )
    형식 :
      if [ 조건 ]
      then
        문장1
        문장2
      elif
        문장3
        문장4
      else
        문장5
        문장6
      fi
				
  2.3 case 구문
  ※ 패턴에는 * 문자, 즉 와일드카드를 사용할 수 있다.
  형식 :
      case 변수 in
        패턴 [ | 패턴 ] ... ) 문장 ;;
        패턴 [ | 패턴 ] ... ) 문장 ;;
        ....
        * ) 문장 ;;
      easc
		
  2.4 목록
    여려명령을 실행할때 앞의 명령의 결과에 의해서 다음행동이 결정되어야 할 경우
    가 있다. 이런경우에 AND나 OR조건을 사용해서 한번에 처리할 수 있다. 이것은 쉘
    스크립트 뿐 아니라 명령행에서도 사용 가능하다. 물론 if 문을 이용해서 반환값
    을 검사하여 처리할 수 있지만 문장이 길어지고 복잡해진다.
		
    AND 목록
	
        statment1 && statment2 && statmentN && .....

        위의 명령들은 각 명령이 거짓이 될 때 까지 명령을 수행해 나간다. 수행도중
        결과가 거짓이 되면 그이후의 명령은 수행되지 않는다.
	
    OR  목록
	
        statment1 || statment2 || statmentN || .....
	
        위의 명령들은 각 명령이 거짓이 나오는 동안 계속된다. 즉 참이 나오면 실행
        을 멈춘다.
	
    AND와 OR목록은 혼용이 가능하다.
	
        [ 조건 ] && 문장1 || 문장2

        위의 예는 조건이 참이면 문장1을 수행하고 거짓이면 문장2를 수행한다.

        또한 위의 문장1이나 문장2에서 여러개의 문장을 수행 하고 싶을 때는 {}를
        사용하면 된다.

        [조건] && {
                    문장1
                    문장2
                    문장3
                          } || {
                                 문장4
                                 문장5
                                 문장6
                               }
	
3. 제어문
  3.1 for
  for 문은 지정된 범위안에서 루프를 수행한다. 범위는 어떤 집합도 가능하다.
  형식 :
         for 변수 in 값1, 값2, ...
         do
             문장
         done

  매 루프를 돌때마다 변수의 값은 in 이후의 값으로 대체된다.
  예)
      for str in "test1", "test2", "test3", "test4"
      do
         echo @str
      done

  출력 )

      test1
      test2
      test3
      test4
		
  값에는 와일드 카드 확장을 사용할 수 있다.

    for file in $(ls -a | grep "^.")
    do
      echo "$file is Hidden File"
    done

  위 예의 출력 결과는 현재디렉토리에서 처음이 "." 으로시작하는 파일(히든파일) 만
  을 출력한다.

  for file in $(ls chap[345].txt); do
      echo "--- $file ---" >> Books.txt
      cat $file >> Books.txt
  done

  위의예는 chap3.txt, chap4.txt, chap5.txt 파일을 Books.txt 라는 파일에 붙여 넣
  는다.

  다음의 예를 보고 결과를 예측해보자

  echo "\$* output"

  for fvar in $*
  do
    echo $fvar
  done

  echo "\$@ output"
  for fvar in $@
  do
    echo $fvar
  done
				
  3.2 while
    for 명령의 경우는 횟수를 지정해서 루프를 수행하는데는 문제가 있다.
    while 문은 실행횟수가 지정되지 않았을때 편리하다.
		
    형식 :
           while 조건문
           do
                문장
           done
			
    예제를 보자. 패스워드를 입력받고 맞는지 확인하는 프로그램이다.

    echo "Enter Password : "
    read password1

    echo "Retype Password : "
    read password2

    while [ "$password1" != "$password2" ]
    do
         echo "Password miss match Try again "

         echo "Retype Password : "
         read password2
    done

    echo "OK Password Match complete"
		


    어떻게 동작하는가 ?
				
  3.3 until
    until은 while문과 동일한 효과를 내지만 조건이 반대이다. 즉, while문은 조건이
    참 일동안 루프를 수행하지만 until은 조건이 거짓일 동안 루프를 수행한다.
    
    형식 :
      until 조건문
      do
      	문장
      done
    
    다음 예를 보자. 이 예는 지정한 유저가 로그인 하면 알려준다.
    
    #!/bin/sh
    
    until who | grep "$1" > /dev/null
    do
        sleep 10
    done
    
    echo "User $1 just logged in ^_^"
		
	3.4 select
    select 문은 원하는 리스트를 출력하고 그중 선택된것을 돌려주는 구문이다. 주의
    할점은 select의 루프내에서는 자동적으로 루프를 벗어날 수 없다. 반드시 break
    문을 사용해서 루프를 벗어나야 한다.
		
    예) 간단한 퀴즈 ^_^

      #!/bin/sh
      
      echo "다음중 스크립트언어 프로그래밍에 속하는 것은 ?"
      select var in "쉘 프로그래밍" "C 프로그래밍" "자바 프로그래밍" "Exit"
      do
          if [ "$var" = "쉘 프로그래밍" ]
          then
                  echo "정답입니다."
                  exit 0
          elif [ "$var" = "Exit" ]
          then
                  echo "종료합니다."
                  exit 1
          else
                  echo "$var 을 선택하셨습니다. 오답입니다."
                  echo "다음중 스크립트언어 프로그래밍에 속하는 것은 ?"
          fi
      done

4. 함수
  쉘 스크립트 내부에 또는 다른 스크립트파일에 함수를 정의해 놓고 사용할 수 있다.
  함수를 사용하면 코드를 최적화 할 수 있고, 코딩이 간결해지며,재사용이 가능하다.
  그러나 다른 스크립트 파일을 호출해서 함수를 실행할 경우, 가능은 하지만 스크립
  트의 실행시간이 길어지고, 함수의 결과를 전달하는 것이 까다롭기 때문에 가급적이
  면 외부파일의 함수는 안쓰는 것이 좋다.
	
  형식 :
    정의 - 
    함수명 ()
    {
    	문장
    	return 값
    }
    
    사용
    
    함수명 인자1, 인자2, ...
    
    
    함수는 독립적으로 $#, $*, $0 등의 인자변수를 사용한다. 즉 함수내의 $#과 본체
    의 $#은 다를 수 있다는 것이다.
    
    다음의 예를 보자
    
    #!/bin/sh
		
    func()
    {
      echo ------ this is func --------
      echo "This Script Executable File : $0"
      echo "Argument Count : $#"
      echo "Process ID : $$"
      echo "Argument List \$* : $*"
      echo "Argument List \$@ : $@"
      echo "Argument 1 : $1"
      echo "Argument 2 : $2"
      echo "Argument 3 : $3"
    }
		
    echo ------ this is main --------
    echo "This Script Executable File : $0"
    echo "Argument Count : $#"
    echo "Process ID : $$"
    echo "Argument List \$* : $*"
    echo "Argument List \$@ : $@"
    echo "Argument 1 : $1"
    echo "Argument 2 : $2"
    echo "Argument 3 : $3"
    echo "Argument 4 : $4"
    func aa bb cc 


    본체와 함수에서 동일한 변수를 보여주지만 값은 틀린다는것을 알 수 있다.
    
    함수에서 값을 반환하기 - 함수에서 반환값은 반드시 정수값만을 반환할 수 있다.
    이 값을 if등으로 조건을 판단해서 사용할 수 있다. 반환값중 0은 참으로 나머지 
    숫자는 거짓으로 판별된다.
		
5. 명령어
  쉘에서 쓸 수 있는 명령어는 두가지로 나누어진다. 명프롬프트 상에서 실행 시킬 수
  있는 외부 명령어와 쉘 내부 명령이다. 내부명령은 보통 쉘 내부나 쉘 구문상에서
  쓰인다. 외부명령은 쉘에 관계없이 사용이 가능하다.
	
  break
    제어문이나 조건문의 루프를 빠져나갈때 사용한다.
    예)
    	while [ $a -eq 10 ]
    	do
    		if [ $a -eq 5 ]; then
    			break
    		fi
    	done
	
  :명령
    의미없는 명령. 논리값 true를 대신해 쓰기도 한다.
		
  continue
    제어문이나 조건문의 처음으로 돌아가서 다시수행한다.
    예)
    	while [ $a -eq 10 ]
    	do
    	    if [ $a -eq 5 ]; then
               continue
            fi
    	done
		
  . 명령
    . 명령을 사용하면 현재 쉘에서 명령을 실행시킨다 그러므로 실행된 명령의 결과
    를 본 프로그램에서 사용할 수 있다.
    
    예를 들면 A 라는 스크립트에서 B라는 스크립트를 그냥 실행할 경우 B에서의 변화
    (환경변수 등)는 A에게 아무런 영향도 미치지 않는다. 그러나 . 명령을 사용해서 
    실행하면 B에서의 변화가 A에도 영향을 미친다.
		
  echo
    문장을 출력한다. 자동으로 개행문자가 삽입된다. ( 다음줄로 넘어간다 )
	
  eval
    인자의 실제 값을 구하는데 사용한다.
		
    foo=10
    x=foo
    y='$'$x
    echo $y
		
    이 예를 실행해 보면 $foo가 출력된다
		
    foo=10
    x=foo
    eval y='$'$x
    echo $y
		
    이 예에서는 $foo의 값 즉 10 이 출력된다. eval명령은 원하는 문자열들을 조합해
    서 변수를 액세스 할 수 있다.
	
  exec
    현재쉘을 다른 프로그램으로 대체한다.
		
    예 ) exec csh
	
  exit n
    현재 쉘을 종료한다. 종료시 n 값을 리턴한다.
	
  export
    해당 쉘에서 파생된 자식 프로세스에서 export한 환경변수는 본래 쉘에서 관리한
    다.
	
  expr
    표현식의 값을 구한다.    ( x=`expr 1 + 2` )
    요즘은 expr보다는 $((계산식)) 구문을 많이 사용한다.
	
  printf
    C 언어의 printf명령과 흡사하다.
    
    형식 :  printf "Format String" arg1 arg2 arg3 ...
		
  return
    쉘함수에서 값을 반환 할 때 쓰인다.
    0은 성공을 1~125까지는 쉘 에러코드를 나타낸다.
	
  set
    쉘 내부에서 매개 인자를 설정한다.
    set의 인자로 쓰인 문자열은 공백에 의해 $1 부터 차례대로 대입된다.
    
    예)
    
    #!/bin/sh
    echo $#
    set $(ls)
    echo $# 
    
    결과는 
    
    0
    22
    
    이다..( 22는 필자의 ls 결과의 갯수이다. ). 첫번째 0는 이 스크립트에 인수가
    없으므로 0이고 set $(ls) 에 의해서 인수의 갯수가 22개로 늘었다.
	
  shift
    쉘의 인자를 한자리씩 아래로( n -> 1 로 ) 이동시킨다.
    
    예)
    #!/bin/sh
    
    echo $1
    shift
    echo $1
    shift 5
    echo $1
    
    #./myscript 1 2 3 4 5 6 7 8 9 0
    1
    2
    7
	
	trap
    쉘의 실행도중 시그널을 처리하는 시그널 처리기를 만드는 역할을 한다.
    
    형식 : trap command signal
    
    쉘 스크립트는 위에서 아래로 실행되므로 보호하려는 부분 이전에 trap명령을 사
    용해야 한다. trap조건을 기본으로 사용하려면 명령에 - 를 넣으면 된다.
    신호를 무시하려면 '' 빈 문자열을 준다.
	
  unset
  	변수나 함수를 제거한다.

6. 명령실행
  외부명령의 실행 결과를 변수에 집어넣어 변수의 값으로 사용할 수 있다.
  
  형식 : x = $(명령)
  
  이렇게 변수에 결과를 넣은 후에는 이 변수를 일반문자열로 생각하고 원하는 가공을
  해서 결과를 얻어낼 수 있다.
  위에서 보았던 매개변수 확장이나 set명령을 이용해서 원하는 부분을 추출해 내면
  그만이다.

7. 쉘 스크립트 내부에서 명령에 입력 전달하기 ( Here Documents )
  이 기능은 쉘 내부에서 명령어에 입력을 전달하는 방법이다. 전달된 입력은 마치 키
  보드에서 눌려진 것 처럼 반응한다.
  
  형식 :  명령 << 종료문자열
  		입력값.....
  		종료문자열
  예제 ) 자동으로 메일을 보내는 스크립트
  
  #!/bin/sh
  
  mail $1 << myscript
  This is Header
  This is Body
  .
  
  myscript

'리눅스 > 쉘스크립트' 카테고리의 다른 글

쉘 내장 명령어  (2) 2012.02.14
쉘스크립트 조건문  (7) 2012.02.08
쉘스크립트  (1) 2012.02.08
#!/bin/sh  (3) 2012.02.08
Posted by GUCCI
, |

rpm이란?

레드햇 회사에서 만든 것이다. 초창기 리눅스에는 없었던 패키지 개념을 도입해서 설치와 삭제, 업그레이드 등을 편리하게 이용할 수 있도록 만든 것이다. 패키지 프로그램이 있어야 하고 인터넷이 안 돼도 상관 없다. 패키지 프로그램이 담겨져 있는 씨디!! .iso 파일로 설치하지 않았나? 리눅스 설치할 때 썼던 ???.iso파일만 있으면 오케이.

   

Rpm을 사용하기 위해선 cd-rom이 mount 되어 있어야 한다.

/dev/hdc 가 cd-rom이다.

Rpm은 옵션이 겁나 많다. 필요한 것만 간추려서 적겠다.

아래 -qa 옵션은 현재 시스템에 설치된 패키지 전체 목록을 조회할 때 사용한다.

   

-qR [name] : name 패키지가 필요로 하는 의존성을 조회한다.

의존성은 어떤 패키지를 깔아야 하는데 이 패키지를 깔기 전에 다른 패키지가 먼저 설치 되어 있어야만 설치 가능한 것을 말한다.

   

Rpm을 사용해 wireshark-gnome 이란 패키지를 설치 하려고 했는데 libsmi is needed by ~~~~~~~~~~

라고 나온다. 이 패키지를 설치하려면 libsmi란 패키지가 필요하다는 것이다. 이게 바로 의존성이다.

   

Rpm 패키지 파일은 보통

Vim-enhanced-7.0.109-3.i386.rpm 이런 형태로 존재한다.

각 구성별로 무엇을 뜻하냐면

Vim-enhanced 여기까지가 rpm 패키지명이다. 이름이란 말

7 이 있어야 할 곳엔 major 버전이 온다. 프로그램 자체가 완전히 변경 되었을 경우 바뀐다.

0 이 있어야 할 곳엔 minor 버전이 온다. 기능의 추가가 있을 경우 바뀐다.

109 는 patch 버전을 뜻한다. 기존 기능에서 버그가 수정되는 경우 바뀐다.

3 은 release 버전을 뜻한다. 배포하는 측에서 몇 번째로 만든 배포 판 인지를 나타낸다.

i386 은 아키텍쳐를 뜻한다. intel 호환 386 CPU급 이상에서 사용 가능하다는 것이다.

이제 본격적으로 rpm 패키지를 설치할 때 사용하는 옵션을 적어보겠다.

-i 옵션 : 패키지를 설치할 때 사용하는 옵션이다.

동일한 패키지가 설치 되어 있다면 버전에 상관없이 설치할 수 없다.( 별로죠? )

-F 옵션 : 동일 패키지가 설치되어 있는 경우에 버전 비교 후 업그레이드 한다.(이것도..)

-U 옵션 : i옵션과 F옵션의 좋은 점만 합쳐 놓았다.

패키지가 설치 되어 있지 않다면 설치해주고 동일 패키지가 있으면 버전 비교해서

새 버전으로 업그레이드 해주고, 패키지가 설치되어 있지 않으면 설치해준다.(만능임)

-v 옵션 : 패키지가 설치 되는 동안 작업 과정을 자세히 보여준다. (쓸만하죠?)

-h 옵션 : 설치 작업시 진행 상황을 # 의 나열로 보여준다.

이게 libsmi 란 패키지를 설치한 것이다. 좀 허무한가? ^^

좀 전에 의존성 때문에 설치 못했던 wireshark-gnome 패키지이다. 위에서 libsmi 패키지를 설치했으므로

이번엔 설치할 수 있었다. wireshark-gnmoe 을 설치하기 위해선 wireshark를 설치해야 한다.(의존성)

   

이번엔 설치한 패키지를 지워보자. 지울 때 사용 할 옵션은 -e 이다.

지우기 실패했다. rpm은 의존성 때문에 가장 나중에 설치 된 것부터 삭제해야 한다.

이번엔 지워졌다.

[출처] RPM( Redhat Package Manager)|작성자 hahaha

'리눅스' 카테고리의 다른 글

/dev/null 2>&1 의 의미  (1) 2012.02.10
Vi/Vim 단축키 모음 키보드그림  (4) 2012.02.09
리눅스 기본 명령어  (0) 2012.02.09
mount  (2) 2012.02.09
APM 설치 옵션 정리  (1) 2012.02.09
Posted by GUCCI
, |

pwd

 

-현재 작업중인 디렉토리의 절대경로를 보여준다.

(절대경로 : / (최상위 디렉토리)부터 해당 경로까지 다 표현해주는 것 ex : ) /usr/local   <---

 상대경로 : 현재 작업중인 디렉토리에서 상대적인 경로 )

 

 

 

cd

 

-원하는 디렉토리로 이동할 때 사용

-형태는 cd [ 인자값 ] 이다.

 

인자값

 

.   :  cd .  을 입력하면 현재 디렉토리로 간다. (새로고침 같은 거라고 생각하면 된다)

..  :  cd .. 을 입력하면 상위 디렉토리로 간다. /usr/local 에서 cd ..을 입력하면 /usr로 이동된다

$변수 : 변수에 지정된 정보를 이용하여 디렉토리로 이동한다

~  : 로그인된 사용자의 홈 디렉토리로 이동한다. (루트 사용자라면 /root 로!

                                                                   일반 사용자라면 /home/계정명)

~계정명  : 지정된 계정의 홈디렉토리로 이동한다. (아무나 막 다른 계정의 홈 디렉토리는 못간다.)

               관리자만이 사용할 수 있다고 보면 된다.(보통.. 예외는 관리자가  아무나 들어가라고

                                                                      설정해놓으면 들어갈 수 다)

 

-  : cd - 를 입력하면 이전 디렉토리로 간다. 상위디렉토리랑은 다르다.

     만약 /root 에서 /usr/local 로 이동한 상태에서 cd - 를 입력하면

     /usr 가 아닌 /root 로 이동된다

 

 

 

ls

 

-도스의 dir과 같은 역할을 하며, 해당 디렉토리에 있는 내용을 출력한다.(해당 디렉토리는 정해줄 수 있다.)

-형태는 ls [Option] [directory / file] 이다. directory / file 에는 안에 뭐가 들어있나 궁금한 디렉토리나 어떤 파일인지 확인하고 싶은 파일명을 넣으면 된다.

 

옵션의 종류

-a , --all    :  . 을 포함한 경로안의 모든 파일과 디렉토리 표시(. 이 붙어 있으면 숨겨진 파일이다)

 

-l , --format=long   :  지정한 디렉토리의 내용을 자세히 출력( 엄청 자세하다 ㅡㅡ 대신 숨겨진 파일                               은 안 보여준다.)

 

-n , --numeric   : 파일 및 디렉토리 정보 출력시 UID, GID를 사용해서 보여준다.

                         UID는 0번은 관리자, 1~499는 시스템 관리자 , 500~6만은 일반사용자를 나타낸다

 

-F , --classify  : 파일 형식을 알리는 문자를 각 파일 뒤에 추가

                        *  실행파일(녹색)

                        /  디렉토리(파랑)

                        @ 심볼링크파일(하늘색)

                        |  파이프파일(주황색)

                        =  소켓파일(자주색)

                       NULL 암것도 없으면 그냥 정규파일이다.

 

-R, --recursive  :  하위경로와 그 안에 있는 모든 파일들까지 보여준다.

                       

-i    : inode를 보기위한 옵션이다 inode 는 파일이나 디렉토리의 고유번호이다.


cp

-파일이나 디렉토리를 복사하는 명령어

-형태 : cp [옵션] [소스] [장소]   ex ) cp -i /test1/test /test10

 

옵션

 

-i ,--interactive  :  복사대상 파일이 있을 경우, 사용자에게 복사에 대한 실행여부를 묻는다.

                          (복사할래? 말래?) (-i 옵션을 사용안하면 안 물어보고 그냥 덮어 써버림)

-f, --force  :  복사대상 파일이 있을 경우, 사용자에게 실행여부를 묻지 않고 그냥 복사해버림

-r, -R, --recursive  :  디렉토리를 복사할 경우 하위 디렉토리와 파일을 모두 복사한다.

                              (디렉토리를 복사할 때는 -r 옵션을 사용 안하면 복사가 안 된다.)

-d, --no-dereference  :  복사대상 파일이 심볼릭 파일이면, 심볼릭 정보를 그대로 유지한

                                   상태로 복사한다. (심볼릭 파일: 윈도우의 바로가기 아이콘 같은 것)

                                  (이 -d옵션을 사용안하고 심볼릭파일을 복사하면 심볼릭파일이 링크한

                                   원본파일이 복사된다) 

-d 옵션을 사용해서 복사할 때 심볼릭파일이 가리키고 있는 파일이 실행파일이면 제대로 동작하지

않는다. 심볼릭파일은 정규파일은 절대경로를 사용해 링크하지만 실행파일 같은 경우 심볼릭파일이

있는 경로를 기준으로 상대경로를 사용해 표현하므로 실행파일을 가리키고 있는 심볼릭파일을 가져올 경우 제대로 동작하지 않는다. 정규파일을 가리키고 있는 심볼릭파일을 복사하면 제대로 동작한다.

-p, --preserve  :  원본파일의 소유주, 그룹, 권한, 시간정보를 보존하여 복사한다.

                         (위에 있는 정보들은 메타 데이터영역에 있다.)

-a, --archive  :  원본파일의 속성, 링크정보들을 그대로 유지하면서 복사한다.

                         (-d , -p, -r 옵션을 함께 사용한 것이라고 보면 된다.)

cp 명령어에서 옵션우선순위 중 i 옵션이 f 옵션보다 높다

 

 

 

mv

파일이나 디렉토리를 이동하거나 이름을 바꿀 때 사용한다.

- 윈도우의 잘라내기-붙여넣기 라고 생각하면 된다.

- mv명령어를 사용해서 이동시키면 시간, 정보등이 변하지 않는다.

- mv [옵션] [소스] [장소]   ex ) mv -i /test /test2

 

옵션

-i, --interactive  :  이동할 위치에 동일한 파일이나 디렉토리가 있을경우 덮어쓸지 여부를

                           사용자에게 묻는다.

-u, --update  :  이동할 위치에 동일한 파일이나 디렉토리가 있을경우 이동할 파일이나

                       디렉토리가 이동할 위치에 있는 것 보다 최근 파일일 경우에만 이동한다

-b, --backup  :  대상 파일이 이미 있어, 지워지는 것(덮어쓰여지는 것)을 대비해

                       지워질 파일(덮어쓰여지는 것을 당할 파일)의 백업파일을 생성한다.

-f, --force  :  대상 파일이 이미 있어도 사용자에게 어떻게 처리하지 않고 바로

                   덮어씌운다.

-S, --suffix  :  -b 옵션을 이용하여 백업할 경우 백업파일의 파일이름꼬리 문자를 지정한다

                    (ex : mv -b /test/passwd /test1 -S 10#0610 )   <<파일이름꼬리는 사용자 마음

                     -S 로 지정을 안하면 백업파일에 ~가 붙는다.

옵션 우선순위는 비슷한 옵션을 함께 사용시 뒤에것을 따른다.

ex ) -if 면 -f 옵션 적용   -fi 면 -i 옵션 적용

단, 비슷한 옵션을 함께 사용할때만 적용 비슷하지 않은 옵션이면 모두 적용

 

 

 

mkdir

-디렉토리 생성 명령어

-형태 : mkdir [옵션] [디렉토리 이름]

 

옵션

-m, --mode  :  디렉토리 생성시 디렉토리의 기본 권한을 지정한다.

-p, --parents  :  필요한 경우 상위 경로까지 생성한다.

                       (만약 최상위디렉토리 아래 /test/test1 이 없을 경우 mkdir /test/test1

                        이라고 선언할 경우 만들어지지 않는다. 이때 -p 옵션을 사용하면

                        상위 디렉토리인 /test까지 다 함께 만들어진다.)

 

 

 

rmdir

-빈 디렉토리 삭제 명령

-파일은 삭제할 수 없다.

-삭제 하고자하는 디렉토리 하위에 디렉토리 존재시 삭제 불가

-형태 rmdir [옵션] [디렉토리]

 

옵션

-p, --parents  :  상위 경로도 지운다. (rmdir -p /test/test1/test2 라고 하면

                        /test/test1/test2   << test2만 지워지는 게 아니라 /test 까지 다 지워진다)

 

*보통은 지울 때 rm 명령어를 사용하고 rmdir 은 잘 사용하지 않는다.

 

 

 

rm

-파일이나 디렉토리를 삭제하는 명령(권한이 있을 경우)

-형태 rm [옵션] [디렉토리 or 파일]

 

옵션

-f, --force  : 파일/디렉토리 삭제시 사용자에게 어떻게 처리할지 물어보지 않는다.

-i, --interactive  :  파일/디렉토리 삭제시 사용자에게 처리할지 물어본다.

-r, -R, --recursive  :  일반 파일이면 그냥 지우고, 디렉토리면 디렉토리를 포함한

                               하위 경로와 파일까지 모두 지운다.(디렉토리 삭제시 꼭 붙여야 함)

옵션 우선순위는 비슷한 옵션을 함께 사용시 뒤에것을 따른다.

ex ) -if 면 -f 옵션 적용   -fi 면 -i 옵션 적용

단, 비슷한 옵션을 함께 사용할때만 적용 비슷하지 않은 옵션이면 모두 적용

[출처] 리눅스 기본 명령어 2|작성자 hahaha

 

alias

-복잡한 명령어와 옵션을 자기가 원하는 문자열로 치환해준다.

-형태 :  alias 자기가 사용할 문자열='명령어 -옵션'   ex ) alias 1='clear' 

 

이 명령어는 딱히 옵션이 없다.

alias에 등록된 목록은 로그아웃을 하고 로그인을 다시하면 사라진다.

이걸 안 사라지게 하려면

1. 전체사용자 (관라자 + 일반사용자) 전체에 적용시키고 싶으면

  /etc/bashrc 란 파일에 추가하고싶은 alias를 추가하면 된다.

  ex : ) echo alias 1='clear' >> /etc/bashrc

  이렇게 추가시켜놓으면 로그아웃을 했다가 다시 로그인 해도 사라지지 않는다.

 

2. 일반사용자가 자기 계정에 alias를 로그인 할 때마다 추가 시키기가 귀찮다면

   /home/계정명/.bashrc  란 파일을 위에 수정한 것처럼 수정하면 된다.

 

 

 

cat

-파일의 내용 출력

 

-cat 명령어의 기본 기능은 파일의 내용을 출력하는 것이다.

  ex :) cat /etc/passwd

  passwd파일의 내용을 모니터에 출력한다.

 

-어떤 파일의 내용을 다른 파일의 내용에 덮어쓰기 혹은 이어쓰기(추가하기)를 할 수 있다.

  ex :) cat /etc/passwd > /test/111     (덮어쓰기)

  111파일의 내용을 passwd파일의 내용으로 채운다.

 (  ' > '  는 리다이렉션이라고 한다. 결과를 > 이쪽 방향으로 바꾸란 것이다. )

  

  ex :) cat/etc/passwd >> /test/111     (이어쓰기)

  111파일의 내용에 passwd파일의 내용을 추가한다. 

  ( ' >> ' 는 더블리다이렉션이라고 한다. 추가하기 기능이라고 생각하면 된다.)

 

-만약   cat > /test/111   이라 입력하면 어떻게 될까?

 이땐 입력을 받게 된다. 입력을 받은 것을 111파일에 덮어쓰라는 것이다.

 cat >> /test/111  이라 입력하면 당연 입력받은 것을 111파일에 이어서 추가 시키라는 것이다.

 

 

 

touch

-파일의 시간정보(Access, Modify)를 변경할 때  및  빈 파일을 생성할 때 사용한다.

-형태

  touch test 라고 입력시 test란 파일이 존재하지 않을 경우 : 0byte 파일인 빈 파일 생성

  test란 파일이 있을시 : test의 시간정보를 시스템의 현재시간과 맞춘다.

 

옵션

 -r   :  다른파일의 시간정보를 가져와서 바꿀파일의 시간정보를 바꿔버림

        ex :) touch -r  /test/111 /test/222 

               111파일의 시간정보로 222의 시간정보를 바꾸란 말이다.

-t    :  사용자가 임의로 정한 시간정보로 바꿀 수 있다.

        ex:) touch -t 1006141015 /test/222

              222파일의 시간정보를 2010년 06월 14일 10시 15분으로 바꾸란 말이다.

 

 

 

head

-파일의 내용을 처음부터 아래로 10줄 출력한다.

-형태 head [타겟]    ex :) head /etc/passwd

 

head 명령어는 내용의 처음부터 아래로 기본 10줄을 출력한다. 기본 10줄인 것을 사용자 임의로

바꾸고 싶다면   head -n [타겟]

이라고 입력하면 된다.  내용의 처음부터 아래로 n 줄 만큼 출력한다는 말이다.

 

 

 

tail

-파일의 내용을 마지막부터 위로 10줄 출력한다.

-형태 tail [타겟]      ex :) tail /etc/passwd

 

tail 명령어는 내용의 맨 마지막부터 위로 기본 10줄을 출력한다. head명령어처럼 기본 10줄인 것을

사용자 임의로 조정할 수 있다.   tail -n [타겟]

이라고 입력하면 된다. 내용의 마지막부터 위로 n 줄 만큼 출력한다는 말이다.

 

 

 

more

-내용이 많은 파일을 화면단위로 끊어서 출력한다.

-형태 : more [타겟]     ex :) more /etc/passwd

-스페이스바 키로 화면을 넘긴다.

-보통은 파이프를 사용해서 다른 명령어와 함께 사용한다.

 

-more -n [타겟]

 "n 줄씩 출력해줘" 란 뜻이다.

-more +n [타겟]

 "n 줄 부터 출력해줘" 란 뜻이다.

 

파이프 란? 프로세스 간에 통신을 할 때 사용하는 것이다. 한 프로세스의 출력을 파이프를 통해

               다른 프로세스의 입력으로 연결시킴으로써 프로세스 간 통신을 이룬다.

               평소에는 0 byte이지만 프로세스를 받아서 넘길 때 받은 프로세스의 용량만큼 잠깐 됐다                가 다른 프로세스에게 넘겨주고 나서 다시 0 byte로 돌아간다.

 

 

 

less

-내용이 많은 파일을 화면 단위로 끊어서 출력한다.

-more는 구버전이라고 생각하면 되고 , less는 신버전이라고 생각하면 된다.

-more는 space바 밖에 안먹히지만 less는 방향키, page UP,DOWN 키 까지 다 먹힌다.

-형태 : less [타겟]    ex :) less /etc/passwd

-less도 파이프를 사용해서 다른 명령어와 함께 사용 가능하다.

 

-less -n [타겟]

 "n 줄 씩 출력해줘"란 뜻이지만 처음엔 무조건 n 줄이랑은 상관없이 한 화면에 가득

  내용이 출력된다. 한 화면에 한 번 출력 다 된 다음 그 다음부터는 n줄씩 출력된다.

 

-less +n [타겟]

 "n 줄 부터 출력해줘"란 뜻이다.

[출처] 리눅스 기본 명령어 3|작성자 hahaha

 

[출처] 리눅스 기본명령어 1|작성자 hahaha

'리눅스' 카테고리의 다른 글

Vi/Vim 단축키 모음 키보드그림  (4) 2012.02.09
RPM( Redhat Package Manager)  (1) 2012.02.09
mount  (2) 2012.02.09
APM 설치 옵션 정리  (1) 2012.02.09
/etc/inittab  (4) 2012.02.09
Posted by GUCCI
, |

mount

리눅스 / 2012. 2. 9. 08:51

mount 란?

파일 시스템 구조를 사용자나 사용자 그룹들이 사용할 수 있도록 해주는 것이다.

리눅스 환경에서 mount 명령은 논리적으로 디스크와 디렉토리를 연결시켜주는 명령이다.

윈도우 환경에서는 파티션을 생성하면 자동으로 드라이브명 (C, D 등등)이랑 파일시스템이 연결 되지만 Linux에서는

관리자가 직접 파티션을 직접 특정 디렉토리에 연결해야 한다. 바로 이것이 마운트 !!!

   

지금 리눅스가 깔려있는데 난 어떤 파티션에 어떤 디렉토리가 연결 되어있는지 몰라!! 하시는 분들은

mount 란 명령어를 아무 옵션 없이 한 번 써보자.

   

   

이렇게 쭈욱~ 나온다! 첫 번째 문장만 해석해 보면 /dev/sda2 란 장치가 / (최상위 디렉토리) 랑 파일시스템 ext3으로 마운트 되어있다는 것이다. 이런식으로 파티션들은 디렉토리랑 마운트가 되어있어야만 사용 가능하다.

   

   

마운트를 사용해 파티션과 디렉토리를 연결하는 방법 두 가지를 소개하겠다.

우선 mount 명령어를 사용해 연결하는 방법

형식은

mount [ 옵션 ] [ 장치 ] [ 디렉토리 ] 예 :) mount -n /dev/sda3 /test

   

옵션의 종류는

-a : /etc/fstab에 적혀있는 파일시스템 중에 연결이 끊어져 있는 것들만 마운트해서 다시 연결한다.

/etc/fstab 파일은 좀 더 아래로 가면 자세히 적어 놓았다.

-n : /etc/mtab 파일에 정보를 남기지 않고 마운트 한다. /etc/mtab 파일이 뭐하는 파일이냐고?

마운트 된 것들의 정보를 저 파일에 기록해 놓는다. 관리자가 일반 유저들이 mount 명령어를 사용해

현재 시스템에 어떤 파티션이 어떤 디렉토리랑 연결 되어있는지를 확인할 때 일반 유저들한테 비밀로 하면서

마운트 시키고 싶을 때 이 옵션을 사용하면 된다. 아래에 그 사용 예를 기록해 놓았다.

   

옵션의 종류는 좀 더 있지만 다른 옵션은 별로 쓸 곳이 없을 거 같아 안 올리겠다.(너무 마음대로…)

-n 옵션의 활용 예를 보여주겠다.

우선 현재 마운트 되어있는 리스트이다.

   

이 정보는 위에서 옵션에 대해 설명할 때 말했던 것처럼 /etc/mtab에 있는 파일을 읽어 온 것이다.

그럼 실제로 /etc/mtab에는 어떻게 기록이 되어있는지 보자.

   

완전 비슷하네?

   

이제 /etc/mtab 파일을 확인해 봤으니 -n 옵션을 사용해 마운트 해보겠다.

   

/dev/hda3 가 마운트 되었다는 정보가 보이는가? 안 보인다. 하지만 연결은 되어있다.

   

여기서 보이는 lost+found는 파일시스템 ext3 을 사용할 때 저널링 기능 때문에 생기는 디렉토리이다.

저널링 기능은 작업 중이던 프로세스가 예기치 못한 종료를 맞이할 때 비휘발성인 하드디스크에 임시적으로 저장하는

기능이다. 쉽게 말해 어떤 작업을 하다가 갑자기 전원이 나가서 종료 되었을 때 다시 컴퓨터를 키면 작업하던 게 날라가는 것이 아니라 다시 이어서 할 수 있게 해주는 기능 이게 저널링 기능이다. lost+found 디렉토리 이야기 하다가 뭔 소리냐고요?

비휘발성인 하드디스크에 임시적으로 저장 되는 장소가 바로 저 lost+found 이다. 각 파티션 별로 저 디렉토리는 존재한다.

   

이번엔 mount 명령어를 사용해서 연결했던 것을 해제 해보자.

매우 간단하다.

umount [ 옵션 ] [ 장치 or 디렉토리 ] ex :) umount /dev/sda1 or umount /test

옵션의 종류는

-a : 마운트 되어있는 모든 파일시스템을 해제할 때 사용한다. 웬만하면 사용하지 말기를…

-f : 강제로 연결해제 할 때 사용한다. 보통은 NFS 서비스에 연결 되어있는 파일시스템을 해제할 때 사용한다.

이건 따로 올리진 않겠다. 너무 길어질 것 같아서…

   

이번엔 마운트 설정을 하는 또 다른 방법을 소개하겠다.

바로 /etc/fstab 파일을 수정해서 하는 mount 하는 방법이다.

/etc/fstab 파일을 읽어보면…

1번 필드 2번 필드 3번필드 4번필드 5번 6번

   

1번 필드 : 디바이스 이름

2번 필드 : 마운트 된 디렉토리

3번 필드 : 파일 시스템 타입

4번 필드 : 자동 마운트 여부

5번 필드 : dump 기능 사용 여부 dump기능 : 백업기능

6번 필드 : 부팅시 파일시스템 체크를 할 것인지 여부

0은 체크 안 하겠다. 1은 root의 파일시스템을 체크하겠다. 2는 root 파일시스템 말고 나머지 파일시스템 체크

   

4번 필드에는 여러가지가 올 수 있다. defaults 에는 auto, rw, suid, dev, exec, nouser, async 옵션을 기본 포함하고 있다.

auto : 부팅시 자동으로 마운트 된다.

exec : 실행 파일이 실행되는 것을 허용하게 한다.

ro : 읽기전용만 가능하게 한다.

rw : 읽고 쓰기기능이 가능하다.

user : 일반 사용자들도 마운트 할 수 있게 한다.

nouser : 일반 사용자들은 마운트 할 수 없게 한다.

noauto : 부팅시 자동으로 망누트 되지 않게 한다.

noexec : 실행파일을 실행되지 못하게 한다.

   

위에서 보면 1번 필드에 LABEL 어쩌구가 보일 것이다.

Label은 장치를 참조하는 방법이다.

파티션에 어떤 label 이 지정 되어있는지 확인 하는 방법은 e2label [장치명] 이다.

   

/dev/sda1 은 라벨이 /boot 가 붙어있는 것이고 /dev/hda3 은 라벨이 지정 안 되어있는 것이다.

Label을 지정해보자.

   

이제 /dev/hda3 은 라벨이 Sangmi 로 붙어 있는 것이다.

보통 라벨을 사용할 때는 ' LABEL=라벨명 ' 이렇게 같이 사용해야 한다. 그냥 달랑 라벨명만 사용하면 안 된다.

   

끝!마운트는 디렉토리랑 파티션을 연결할 때 사용하는데 이때 디렉토리는 파티션을 사용하기 위한 연결고리라고 생각 해보세요.

[출처] Mount|작성자 hahaha

[출처] Mount|작성자 hahaha

'리눅스' 카테고리의 다른 글

RPM( Redhat Package Manager)  (1) 2012.02.09
리눅스 기본 명령어  (0) 2012.02.09
APM 설치 옵션 정리  (1) 2012.02.09
/etc/inittab  (4) 2012.02.09
OpenWrt The Boot Process  (5) 2012.02.09
Posted by GUCCI
, |

APM 설치 옵션 정리

리눅스 / 2012. 2. 9. 08:27

APM 설치 옵션 정리


1. MySQL

./configure --prefix=/usr/local/mysql --with-charset=euckr --localstatedir=/usr/local/mysql/data
make
make install

cd /usr/local/mysql/bin
./mysql_install_db
useradd mysql -s /bin/false
chown -R mysql.mysql /usr/local/mysql/data
./mysqld_safe --user=root &
mysqladmin -u root password _____ [enter]
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

 

2. Apache

./configure --prefix=/usr/local/apache2 --with-charset=euc_kr --enable-rewrite --enable-modules=so
make
make install

--enable-so : 동적으로설치 (클라이언트 요청시 php 모듈을 아파치로 올린다)


3. PHP

./configure \
--with-exec-dir=/usr/local/bin \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-gd=/usr/local/gd \
--with-charset=euc_kr \
--with-zlib-dir=/usr/local/lib \
--with-zlib=/usr/local \
--with-jpeg-dir=/usr/lib \
--with-png-dir=/usr/local/lib \
--with-language=korean \
--with-freetype \
--with-xml \
--enable-track-vars \
--disable-debug \
--enable-magic-quotes \
--enable-sockets \
--enable-sigchild \
--with-mysql-sock=/tmp \
--with-mysqli=/usr/local/mysql/bin/mysql_config

make
make install

 

4. 환경설정

-> php 소스디렉토리이동

cp ./php.ini-dist /etc/php.ini

-> php.ini 설정

[Zend Optimizer]
zend_optimizer.optimization_level=7
zend_extension="/usr/local/Zend/lib/ZendOptimizer.so"


vi /usr/local/apache2/conf/httpd.conf

-> httpd.conf 파일에서 아래 문장 없으면 추가

LoadModule php5_module   modules/libphp5.so

-> httpd.conf 파일에 아래 문장 추가

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .html .htm
AddType application/x-httpd-php-source .phps

[출처] APM 설치 옵션 정리|작성자 하마

'리눅스' 카테고리의 다른 글

리눅스 기본 명령어  (0) 2012.02.09
mount  (2) 2012.02.09
/etc/inittab  (4) 2012.02.09
OpenWrt The Boot Process  (5) 2012.02.09
vi 에디터 명령어  (2) 2012.02.08
Posted by GUCCI
, |

/etc/inittab

리눅스 / 2012. 2. 9. 08:26
/etc/inittab

하드웨어 인식과 초기화 작업을 마친 후 커널은 드디어 프로세스 ID(PID) 1번의 init를 실행시킨다.
시스템의 첫 번째 프로세스인 init는 실행하는 모든 프로세스들의 궁극적인 부모 역할을 하는 프로세스이다.

init가 실행될 때는 제일 먼저 /etc에 있는 inittab이란 파일을 읽어들인다.
이 파일은 init가 해야 할 모든 일이 적혀 있는 주문 양식(order form)이라 할 수 있다.

파일의 내용은 다음과 같다.

# # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, &lt;miquels@drinkel.nl.mugnet.org&gt; # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:5:initdefault: # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Run xdm in runlevel 5 # xdm is now a separate service x:5:respawn:/etc/X11/prefdm -nodaemon
레드햇 계열 리눅스에서는 0부터 6번까지의 실행 레벨을 사용한다.
그에 대한 의미는 위의 내용중 앞부분에 잘 나와 있다.

0 -&gt; 시스템 중지(halt) 1 -&gt; 단일 사용자 모드, 관리자인 루트만 로그인 2 -&gt; NFS를 제외한 다중 사용자 모드 3 -&gt; 모든 기능이 작동하는 다중 사용자 모드(콘솔모드) 4 -&gt; 사용하지 않음 5 -&gt; X 윈도우 로그인 모드(x 윈도우 모드) 6 -&gt; 시스템 리부팅(reboot)

/etc/inittab의 id:5:initdefault:에서 지정한 숫자 5가 시스템의 기본 부팅 레벨이다.
X윈도우를 안쓰거나 부팅시 콘솔모드로 로딩되기를 윈할 때는 숫자 3으로 바꿔주면 된다.

이 실행 레벨을 변경할 때는 매우 주의해야 한다. 시스템 중지와 시스템 재부팅을 의미하는 0 또는 6을 기본값으로 잘못 지정하는 경우에는 시스템이 부팅되자 마자 중지되거나 리부팅되어 버리기 때문이다.

레벨 1번은 시스템의 다양한 초기화 과정을 모두 생략하고, 로그인 과정없이 즉시 루트 관리자 권한의 쉘 프롬프트 상태로 진입하는 레벨이다. 이 레벨은 시스템에 문제가 발생하여 루트가 수동으로 시스템을 고쳐야 할 필요가 있을 때 사용하는 레벨이다.
예를 들면 파일 시스템이 심하게 손상되어 자동 복구 방법이 통하지 않을 때 사용한다.
이 레벨로 진입하려면 GRUB에서 kernel이 포함된 라인 맨뒤에 single이라고 편집하여 부팅하면 된다.
참고로 부팅시 e를 누르면 편집모드로 되고 다시 하부 내용을 편집시는 e 그리고 편집을 마치고 엔터를 하면 편집이 완성되며 편집이 적용된 상태로 부팅을 하려고 하면 b를 누르면 된다.

4번경우는 어떠한 이유인지 사용치를 않는다. 아시는 분은 연락주길 바랍니다.^^;
원한다면 4번 레벨을 정의하여 사용할 수도 있다.

# System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6
rc.sysinit는 말 그대로 시스템 초기화에 관련되는 파일로 최초에 1회 실행되며,
init가 제일 먼저 실행시키는 매우 중요한 스크립트이다.
그 뒤 l0~l6은 각 실행 레벨에 대하여 어떤 명령을 수행할 것인지 정해준다.

# Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Ctrl키 Alt키 Delete키를 조합하여 동시에 누르면
shutdown -t3 -r now 명령이 실해된다.
즉 3초후 리부팅을 한다는 뜻이다.

# Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
우리에게 login: 프롬프트를 보여주는 프로그램을 getty류의 프로그램이라고 한다.
기본적으로 1번부터 6번의 가상 콘솔에 대하여 mingetty라는 프로그램을 실행시킨다.
설정을 자세히 보면 실행레벨 2345에서 실행되도록 되며,
respawn이 의미하는 것은 프로그램이 죽으면 다시 복제하여 계속 실행하라는 뜻이다.
로그인한 후 모든 작업을 마치고 로그아웃하고 나면 다시 로그인 화면이 뜨는 이유는 바로 이 respawn 옵션을 보고 init가 계속적으로 mingetty 프로그램을 수행하기 때문이다.

설정을 변경후에는 다음과 같이 init에게 알려 적용시킨다.
# init q

'리눅스' 카테고리의 다른 글

mount  (2) 2012.02.09
APM 설치 옵션 정리  (1) 2012.02.09
OpenWrt The Boot Process  (5) 2012.02.09
vi 에디터 명령어  (2) 2012.02.08
VI 편집기 사용법  (1) 2012.02.08
Posted by GUCCI
, |

OpenWrt The Boot Process

리눅스 / 2012. 2. 9. 08:23

The Boot Process

This guide shall help you understand, e.g.

Process Trinity

The Machine gets powered on and some very very basic very low level hardware stuff get's done. You could connect to it over the JTAG Port port and issue commands.

Bootloader

  1. the bootloader on the flash gets executed
  2. the bootloader performs the POST, which is a low-level hardware initialization
  3. the bootloader decompresses the Kernel image from it's (known!) location on the flash storage into main memory (=RAM)
  4. the bootloader executes the Kernel with init=… option (default is /etc/preinit)

Kernel

  1. the Kernel further bootstraps itself (sic!)
  2. issues the command/ops-code start_kernel
  3. /etc/preinit does pre-initialization setups (create directories, mount fs, /proc, /sys, … )
  4. the Kernel mounts the rootfs (root file system), see .. and also udev
  5. if "INITRAMFS" is not defined, calls /sbin/init (the mother of all processes)
  6. finally some kernel thread becomes the userspace init process

Init

The user space starts when kernel mounts rootfs and the very first program to run is (by default) /sbin/init. Please remember, that the interface between application and kernel is the clib and the syscalls it offers.

  1. init reads /etc/inittab for the "sysinit" entry (default is "::sysinit:/etc/init.d/rcS S boot")
  2. init calls /etc/init.d/rcS S boot
  3. rcS executes the symlinks to the actual startup scripts located in /etc/rc.d/S##xxxxxx with option "start":
  4. after rcS finishes, system should be up and running

Vanilla Startup Scripts

NOTE: Packages you install with opkg will likely add additional scripts!

S05defconfig ???
S10boot starts hotplug-script, mounts filesystesm, starts .., starts syslogd, …
S39usb mount -t usbfs none /proc/bus/usb
S40network ???
S45firewall ???
S50cron starts crond, see → /etc/crontabs/root for configuration
S50dropbear starts dropbear, see → /etc/config/dropbear for configuration
S50telnet checks for root password, if non is set, /usr/sbin/telnetd gets started
S60dnsmasq starts dnsmasq, see → /etc/config/dhcp for configuration
S95done executes /etc/rc.local
S96led ???
S97watchdog ???
S99sysctl interprets /etc/sysctl.conf

The init daemon will run all the time. On a shutdown command, init

  1. reads /etc/inittab for shutdown (default is "::shutdodwn:/etc/init.d/rcS K stop")
  2. init calls /etc/init.d/rcS K stop
  3. rcS executes the shutdown scripts located in /etc/rc.d/K##xxxxxx with option "stop"
  4. system halts/reboots
K99umount writes caches to disk, unmounts all filesystems
K98boot
K90network
K50dropbear

Detailed boot sequence

Boot loader

After the bootloader (grub, in this example) initializes and parses any options that are presented at the boot menu, the bootloader loads the kernel.

Example from the openwrt-x86-ext2-image.kernel file entry for normal boot:

  • "kernel /boot/vmlinuz root=/dev/hda2 init=/etc/preinit [rest of options]"

This entry in the boot/grub/menu.lst file tells grub that the kernel is located under the /boot directory and the filename is vmlinuz. The rest of the lines are the options that are passed to the kernel. To see how the kernel was started, you can view the options by reading the /proc/cmdline file. You can see what options were passed from grub by logging into the device and typing "cat /proc/cmdline".

For my test system, the options that were passed to the kernel at load time was:

  • "root=/dev/hda2 rootfstype=ext2 init=/etc/preinit noinitrd console=ttyS0,38400,n,8,1 reboot=bios"

The options are:

  1. root: root device/partition where the rest of the OpenWrt system is located
  2. rootfstype: Format for the root partition - ext2 in this example
  3. init: The first program to call after the kernel is loaded and initialized
  4. noinitrd: All drivers for access to the rest of the system are built into the kernel, so no need to load an initial ramdisk with extra drivers
  5. console: Which device to accept console login commands from - talk to ttyS0 (first serial port) at 38400 speed using no flow control, eight data bits and one stop bit. See the kernel documentation for other options
  6. reboot: Not sure, but I believe that this option tells the kernel how to perform a reboot

The first program called after the kernel loads is located at the kernel options entry of the boot loader. For grub, the entry is located in the openwrt–.image.kernel.image file in the /boot/grub/menu.lst file.

[ NOTE: See the man page on grub for all of the grub parameters ] In this example, the entry "init=/etc/preinit" tells the kernel that the first program to run after initializing is "preinit" found in the "/etc" directory located on the disk "/dev/hda" and partition "hda2".

/etc/preinit script

The preinit script's primary purpose is initial checks and setups for the rest of the startup scripts. One primary job is to mount the /proc and /sys pseudo filesystems so access to status information and some control functions are made available. Another primary function is to prepare the /dev directory for access to things like console, tty, and media access devices. The final job of preinit is to start the init daemon process itself.

Busybox init

Init is considered the "Mother Of All Processes" since it controls things like starting daemons, changing runlevels, setting up the console/pseudo-consoles/tty access daemons, as well as some other housekeeping chores.

Once init is started, it reads the /etc/inittab configuration file to tell it what process to start, monitor for certain activities, and when an activity is triggered to call the relevant program.

The init program used by busybox is a minimalistic daemon. It does not have the knowledge of runlevels and such, so the config file is somewhat abbreviated from the normal init config file. If you are running a full linux desktop, you can "man inittab" and read about the normal init process and entries. Fields are separated by a colon and are defined as:

  • [ID] : [Runlevel(s)] : [Action] : [Process to execute ]

For busybox init, the only fields needed are the "ID" (1st), "Action" (3rd) and "Process" (4th) entries. Busybox init has several caveats from a normal init: the ID field is used for controlling TTY/Console, and there are no defined runlevels. A minimalistic /etc/inittab would look like:

  1. ::sysinit:/etc/init.d/rcS S boot
  2. ::shutdown:/etc/init.d/rcS K stop
  3. tts/0::askfirst:/bin/ash –login
  4. ttyS0::askfirst:/bin/ash –login
  5. tty1::askfirst:/bin/ash –login

Lines 1 and 2 with a blank ID field indicate they are not specific to any terminal or console. The other lines are directed to specific terminals/consoles.

Notice that both the "sysinit" and "shutdown" actions are calling the same program (the "/etc/init.d/rcS" script). The only difference is the options that are passed to the rcS script. This will become clearer later on.

At this point, init has parsed the configuration file and is looking for what to do next. So, now we get to the "sysinit" entry: call /etc/init.d/rcS with the options "S" and "boot"

/etc/rc.d/rcS Script At Startup

At this point, all basic setup has been done, all programs and system/configuration files are accessible, and we are now ready to start the rest of the processes.

The rcS script is pretty simplistic in it's function - it's sole purpose is to execute all of the scripts in the /etc/rc.d directory with the appropriate options. if you paid attention to the sysinit entry, the rcS script was called with the "S" and "boot" options. Since we called rcS with 2 options ("S" and "boot"), the rcS script will substitute $1 with "S" and $2 with "boot". The relevant lines in rcS are:

   -  for i in /etc/rc.d/$1* ; do
  2.      [ -x $i ] && $i $2
  3.  done

The basic breakdown is:

  1. Execute the following line once for every entry (file/link) in the /etc/rc.d directory that begins with "S"
  2. If the file is executable, execute the file with the option "boot"
  3. Repeat at step 1, replacing $i with the next filename until there are no more files to check

Unlike Microsoft programs, Linux uses file permissions rather than filename extensions to tell it if this entry is executable or not. For an explanation of file permissions, see "man chmod" on a Linux/Unix machine on explanations for permissions and executable files.

If you look at the /etc/rc.d directory, you may notice that some scripts have relevant links for startup, but no shutdown (i.e., /etc/init.d/httpd), while some others have no startup script, but do have a shutdown script (i.e., /etc/init.d/umount).

In the case of httpd (the webserver), it doesn't matter if it dies or not, there's nothing to clean up before quitting.

On the other hand, the umount script MUST be executed before shutdown to ensure that all data is flushed to the media before unmounting of any relevant storage media, otherwise data corruption could occur. There's no need to call unmount at startup, since storage media mounting is handled somewhere else (like /etc/preinit), so there's no startup script for this one.

After the last startup script is executed, you should have a fully operational OpenWrt system.

Notes

'리눅스' 카테고리의 다른 글

APM 설치 옵션 정리  (1) 2012.02.09
/etc/inittab  (4) 2012.02.09
vi 에디터 명령어  (2) 2012.02.08
VI 편집기 사용법  (1) 2012.02.08
getopt()  (5) 2012.02.08
Posted by GUCCI
, |

vi 에디터 명령어

리눅스 / 2012. 2. 8. 19:43
■ VI Editor는 상당히 많은 단축키와 명령어를 가지고 있다.. 하지만 실제 자주 사용하는 단축키는 한정되어있어,
   이번 포스팅에서는 철저히 본인의 주관적인(?) 입장에서 자주 사용하는 유용한 단축키들만을 요약하여 정리하였다.


(1) 저장 / 종료
  ○ :w                                  - 저장
  ○ :w file.txt                         - file.txt 파일로 저장
  ○ :q                                   - vi 종료
  ○ :wq!                                - 강제 저장 후 종료
  ○ :e file.txt                          - file.txt 파일을 불러옴


(2) 입력
  ○ a                                    - 커서 위치 다음 칸부터 입력
  ○ i                                     - 커서의 위치에서 삽입모드로 입력
  ○ o                                    - 커서의 다음 행에 입력
  ○ s                                    - 커서 위치의 한 글자를 지우고 입력
  ○ cc                                  - 커서 위치의 한 행을 지우고 입력
  ○ R                                    - 커서 위치에서 수정모드로 입력


(3) 이동
  ○ h                                    - 왼쪽으로 이동
  ○ j                                     - 아래로 이동
  ○ k                                    - 위로 이동
  ○ l                                     - 오른쪽으로 이동
  ○ ctrl + b                            - 이전 페이지로 이동
  ○ ctrl + f                             - 다음 페이지로 이동
  ○ w                                   - 다음 단어이동
  ○ b                                    - 이전 단어로 이동
  ○ ^                                    - 현재 행의 처음으로 이동
  ○ $                                    - 현재 행의 끝으로 이동
  ○ gg                                  - 문서의 맨 첫 행으로 이동
  ○ G                                   - 문서의 맨 마지막 행으로 이동
  ○ :n                                   - n번째 행으로 이동


(4) 편집
- 삭제
  ○ x                                    - 커서의 글자 삭제
  ○ dw                                 - 한 단어 삭제
  ○ D                                   - 커서 위치부터 행 끝까지 삭제 / 복사
  ○ dd                                  - 커서가 있는 행을 삭제 / 복사

- 복사/잘라내기와 붙이기
  ○ yy                                  - 커서가 있는 한 행 복사
  ○ 10yy                               - 커서가 있는 행 부터 10행을 복사
  ○ p                                   - 커서가 있는 행 아래에 붙여넣기

- 블록잡기
  ○ v                                    - v키 후 커서를 이동하여 블록잡기


(5) 되돌리기와 되살리기
  ○ u                                    - 되돌리기
  ○ ctrl + r                             - 되살리기


(6) 문자열 탐색 / 이동
  ○ /찾을 문자열                    - 순방향 검색
  ○ ?찾을 문자열                    - 역방향 검색
  ○ n                                    - 검색 후 순방향 해당 단어로 이동
  ○ N                                    - 검색 후 역방향 해당 단어로 이동


(7) 치환
  ○ [범위] / [매칭 문자열] / [치환 문자열] / [행 범위]
  ex) %s/old/new/g                - %s(문서전체)에 old를 new로 g(행전체)에 대해 치환한다.
  ex) 3, 5/old/new/                 - 3행부터 5행에 있는 old를 new로 치환.(g를 생략 할 경우 한 행에서 1번만 치환이 이루어진다.)

'리눅스' 카테고리의 다른 글

/etc/inittab  (4) 2012.02.09
OpenWrt The Boot Process  (5) 2012.02.09
VI 편집기 사용법  (1) 2012.02.08
getopt()  (5) 2012.02.08
리눅스 lspci 명령어  (2) 2012.02.08
Posted by GUCCI
, |

최근에 달린 댓글

글 보관함