다중 명령
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 |