Self-Improvement

Linux 특성1 (Redirection, pipe, bash쉘의 기능 set) 본문

리눅스/명령어

Linux 특성1 (Redirection, pipe, bash쉘의 기능 set)

JoGeun 2018. 10. 21. 13:33

*Redirection (방향 재지정)
 -fd(file descriptor) : 파일 기술자
 표준입력(0, standard input) -------> Shell(bash) ------> 표준출력(1, standard output)
 ex) KeyBoard                                        |                 ex) Screen
                                                                     |                             
                                              표준에러(2, standard error)
                                      ex)Screen

 1.입력재지정 형식
  CMD < 파일이름
  CMD 0< 파일이름

 //예제
 #cat < /etc/passwd
 #cat 0< /etc/passwd

 2.출력재지정 형식
 CMD > 파일이름 (표준출력, 덮어쓰기)
 CMD 1> 파일이름
 CMD >> 파일이름 (표준출력, 이어쓰기)
 CMD 1>> 파일이름

 //예제
 #echo 1111 > filename1 
 #echo 2222 > filename1 (덮어쓰기)
 #echo 3333 >> filename1 (이어쓰기)

 3.에러재지정 형식
 CMD 2> 파일이름
 CMD 2>> 파일이름

 //예제
 #ls -l /nodir 2> error.txt
 #ls -l /nodi2 2>> error.txt

 /*복합예제*/
 #ls /test/ nodir > dirfilename 2>&1
 =결과물은 dirfilename에 출력하고 에러메시지도 dirfilename에 출력
 #./script.sh > file.log 2>&1
 #./configure -perfix=/usr/local/apache2 > file.log 2>&1
 #find / -name core -type f 2> /dev/null

*파이프 ('|')
 -앞에 실행한 명령어의 출력결과를 뒤 명령어의 입력값으로 사용하는 것
 //tee(출력내용을 Screen, 파일에 동시지정)와 혼합 
 #cal 2002 | tee file.log (출력결과를 Screen에 출력하고 file.log에도 저장)
 #cal 2002 | tee -a file.log (tee -a는 덮어쓰기)

 //script(로그남기기)을 이용한 예제 (터미널끼리 공유 기능)
 세개의 터미널을 준비하고 tty을 통해 터미널값을 알아낸다. 혹은 세번째 터미널에서 who로 알아낸다
 세번째 터미널에서 #script -a /dev/null | tee /dev/pts/숫자 | tee /dev/pts/숫자 (script는 그 터미널에서 행한 로그, 명령어들을 저장하게 된다 지금 터미널에 출력을 하면서 | tee을 통해 다른 터미널에서도 출력이되면서 전달을 하게된다. exit을 하게되면 종료하게 됨)

*bash쉘의 기능
 #set -o (쉘 자체의 기능 목록)
 #set -o vi (vi기능을 on)
 #set +o vi (vi기능을 off로 해야 기본적인 편집기 선언)

 //예제
 #set -o ignoreeof (ignoreeof는 <Ctrl + D>로 인한 로그아웃 방지를 막는 기능이다. on으로 바꿔서 <Ctrl + D>로 인한 로그아웃을 방지해야 한다.)
 #set -o noclobber (overwrite을 방지하는 기능)