LINUX(Server)

다중 명령

천천히, 한 걸음씩 2024. 4. 11. 12:49

다중 명령

1. ;
- 첫번째 명령어 부터 순차적으로 실행
- 첫번째 명령어가 실패하여도 반드시 모두 실행

[CMD1] ; [CMD2] ; [CMD3] // CMD1,2,3 모두 실행
[ERR1] ; [CMD2] ; [CMD3]    // 에러메세지 , CMD2,3실행
[CMD1] ; [ERR1] ; [CMD3] // CMD1실행 , 에러메세지 , CMD3실행
[CMD1] ; [CMD2] ; [ERR1] // CMD1,2 실행 , 에러메세지

2. &&
- 첫번째 명령어가 성공해야만 다음 명령어를 실행

[CMD1] && [CMD2] && [CMD3] // CMD1,2,3 실행
[ERR1] && [CMD2] && [CMD3]  // 에러메세지
[CMD1] && [ERR1] && [CMD3]  // CMD1실행 , 에러메세지
[CMD1] && [CMD2] && [ERR1]  // CMD1,2실행 , 에러메세지

3. ||
- 첫번째 명령어가 정상적으로 실행될 경우 종료

[CMD1] || [CMD2] || [CMD3] //CMD1실행
[ERR1] || [CMD2] || [CMD3] //에러메세지 출력 , CMD2
[CMD1] || [ERR1] || [CMD3] //CMD1실행
[CMD1] || [CMD2] || [ERR1]      //CMD1실행

! 실습

#mkdir /practice //테스트용 디렉터리 생성

#touch /practice/1 ; touch /practice/2 ; touch /practice/3
// ;를 이용한 3개의 명령어 실행

#ls /practice //1,2,3 파일생성 확인
#rm -rf /practice/* //다음실습을 위해서 /practice안의 모든 파일 삭제


#touch /X/1 ; touch /practice/2 ; touch /practice/3  //ERR,CMD2,CMD3
#ls /practice //2,3
#rm -rf /practice/*


#touch /practice/1 ; touch /X/2 ; touch /practice/3  //CMD1,ERR,CMD3
#ls /practice //1,3
#rm -rf /practice/*


#touch /practice/1 ; touch /practice/2 ; touch /X/3  //CMD1,CMD2,ERR
#ls /practice //1,2
#rm -rf /practice/*


#touch /practice/1 && touch /practice/2 && touch /practice/3
#ls /practice
#rm -rf /practice/*

#touch /X/1 && touch /practice/2 && touch /practice/3  //ERR,CMD2,CMD3
#ls /practice
#rm -rf /practice/*

#touch /practice/1 && touch /X/2 && touch /practice/3  //CMD1,ERR,CMD3
#ls /practice
#rm -rf /practice/*

#touch /practice/1 && touch /practice/2 && touch /X/3  //CMD1,CMD2,ERR
#ls /practice
#rm -rf /practice/*


#touch /practice/1 || touch /practice/2 || touch /practice/3
#ls /practice
#rm -rf /practice/*

#touch /X/1 || touch /practice/2 || touch /practice/3  //ERR,CMD2,CMD3
#ls /practice
#rm -rf /practice/*

#touch /practice/1 || touch /X/2 || touch /practice/3  //CMD1,ERR,CMD3
#ls /practice
#rm -rf /practice/*

#touch /practice/1 || touch /practice/2 || touch /X/3  //CMD1,CMD2,ERR
#ls /practice
#rm -rf /practice/*

리다이렉션 & 파이프

* 파일 디스크립터 ( File Descriptor , fd )
- 명령어를 사용한다는 것 -> 명령파일을 실행하는 것  -> 프로세스를 생성하는 것
  
- 리눅스에서 프로세스가 생성되면 프로세스는
  파일 디스크립터를 생성한다.

- 파일 디스크립터는 "파일 기술자"라고도 부르며,
  데이터의 출입구 역할을 한다.
  (Ex.프로세스의 출력을 다른프로세스에 입력)


표준 입력 0 stdin
표준 출력 1 stdout
표준 에러 2 stderr

* 리다이렉션 ( redirection )
- 표준 입력과 표준 출력의 방향을 재 지정하는 방법

① 출력 리다이렉션
- 표준 출력 fd/1은 생략이 가능하다.
- 기존에 파일이 없으면 파일을 생성
  기존에 파일이 있으면 덮어쓰기가 된다.
  
   #set -o noclobber  //덮어쓰기 방지
   #set +o noclobber  //덮어쓰기 허가


#[명령어] 1> [파일] //띄어쓰기 주의

Ex)
#cd 
#grep "root" /etc/passwd    //결과확인
#grep "root" /etc/passwd 1> file1  //결과를 file1에 저장
#cat file    //확인

#grep "root" /etc/passwd   
#grep "root" /etc/passwd > file2   // 1생략이 가능하다.
#cat file


#cd 
#echo "Fun Linux" > file1  // 새파일 생성
#cat file1
#echo "Excellent Linux" > file1 // 기존파일에 덮어쓰기
#cat file1


#set -o noclobber // 덮어쓰기 방지
#echo "Fun Linux" > file2    // 새파일 생성
#echo "Excellent Linux" > file2  // 덮어쓰기 시도 -> x
#echo "Excellent Linux" > file2_new // 새파일 생성 ->o
#cat file2 // 확인
#cat file2_new // 확인


#set +o noclobber // 덮어쓰기 허가
#echo "Fun Linux" > file3 // 새파일 생성
#echo "Excellent Linux" > file3     // 기존파일에 덮어쓰기
#cat file3 // 확인


#echo "blank test" > file4-1
#cat file4-1 //blank test
#echo "blank test" 1> file4-2
#cat file4-2 //blank test
#echo "blank test" 1 > file4-3 //blank test 1
#cat file4-3


② 추가 리다이렉션
- 기존 파일 내용 하단에 출력의 결과가 추가되는 형태
- 파일이 없으면 새로 생성 , 파일이 없으면 기존의 내용에 덧붙임

#[명령어] >> [파일]

#echo "Fun Linux" >> file5 // 새파일 생성
#echo "Excellent Linux" >> file5 // 기존의 내용에 덧붙임
#cat file5     //Fun Linux
  Excellent Linux


③ 입력 리다이렉션
- 표준입력을 의미하는 fd/0은 생략이 가능하다.

#[명령어] 0< [파일]

#cat 0< /etc/passwd //하기의 3명령어의 결과가 동일
#cat < /etc/passwd
#cat /etc/passwd


? #sort < a.txt > b.txt의 결과는?

=>a.txt를 sort명령어를 통해서 정렬한 결과가 b.txt에 저장

? #cat < a.txt > b.txt의 결과는?

=>a.txt를 cat명령어를 통해서 출력되는 결과가 b.txt에 저장
  (== cp a.txt b.txt)


④ 오류 리다이렉션
- 보통 의도적으로 에러메세지를 화면에 출력하고 싶지 않을 때 사용
- 표준 에러 fd/2의 결과를 파일에 저장하는 형태 ( 생략 불가 )

#ls errorRedirection //에러 메세지
#ls errorRedirection 1> file6 //에러메세지 저장 x
#cat file6

#ls errorRedirection 2> file6 //에러메세지 저장 o
#cat file6


+@ /dev/null 

- 아무값도 가지고 있지 않도록 만들어진 파일
- 해당파일로 입력된 데이터는 모두 사라지게 된다.
  (null == 아무값도 없다)
 

 
 * 파이프 ( Pipe )

- 프로세스와 프로세스를 연결시키는 방식

#[CMD1] | [CMD2] // 명령어1의 출력을 다음 명령어인 명령어2의 입력으로 전달
#[CMD1] | [CMD2] | ... [CMDn] 


#cat /etc/services | grep "udp" | wc -l

=> /etc/services파일에 udp라는 글자가 들어간 라인의 개수를 확인

#cat /etc/services | grep "tcp" | head -1

=> /etc/services파일에 tcp라는 글자가 들어간 가장 첫번째 줄을 확인

#cat /etc/services | grep "tcp" | tail -1

=> /etc/services파일에 tcp라는 글자가 들어간 가장 마지막 줄을 확인

'LINUX(Server)' 카테고리의 다른 글

압축 & 아카이브  (0) 2024.04.13
VI Editor  (0) 2024.04.12
리눅스 기초 명령어  (2) 2024.04.10
리눅스 구조  (0) 2024.04.09
운영체제  (0) 2024.04.08