파이프(Pipe)
파이프(|
)는 하나의 명령어 출력을 다른 명령어의 입력으로 전달하는 역할
파이프는 명령어의 출력을 다른 명령어로 전달하는데 매우 유용하며, 이로 인해 복잡한 작업을 단순화할 수 있음
사용법
# command1은 먼저 실행되어 출력을 생성하고, 이 출력이 command2로 전달 command1 | command2
# ls 명령어로 디렉토리 목록을 출력하고, 그 결과를 less 명령어로 페이지 단위로 스크롤할 수 있게 만듬 ls -al | less ls -al /etc | less
# ps aux로 실행 중인 프로세스를 나열하고, 그 중에서 apache라는 단어가 포함된 항목만 필터링하여 출력 ps aux | grep apache
필터(Filter)
필터는 파이프와 함께 사용되며, 데이터를 수정하거나 변환하는 명령어
보통 출력된 데이터를 필터링하거나 변경할 때 사용
grep
, awk
, sed
, sort
, cut, tail, wc
등의 명령어가 필터에 해당
사용법
grep
: 패턴에 맞는 줄을 검색
# file.txt에서 keyword를 포함하는 줄만 출력 cat file.txt | grep "keyword" # ps -ef는 모든 프로세스 번호를 출력하므로 bash 라는 글자가 들어간 프로세스만 출력 ps -ef | grep bash
awk
: 파일을 특정 구분자로 나누어 처리
# file.txt의 각 줄에서 첫 번째 열만 출력 cat file.txt | awk '{print $1}'
sort
: 데이터를 정렬
# 디렉토리 내 파일들을 알파벳 순으로 정렬하여 출력 ls | sort
cut
: 텍스트를 구분자로 나누어 일부만 선택.
# file.txt에서 공백을 기준으로 첫 번째 필드를 출력 cat file.txt | cut -d' ' -f1
sed
: 텍스트 스트림을 수정(편집).
# file.txt에서 old라는 단어를 new로 바꿔 출력 cat file.txt | sed 's/old/new/g'
리디렉션(Redirection)
리디렉션은 명령어의 출력을 파일로 저장하거나, 파일을 명령어의 입력으로 전달하는 기능
리디렉션은 출력 리디렉션과 입력 리디렉션으로 나눌 수 있음
출력 리디렉션
출력 리디렉션은 명령어의 출력을 파일로 보낼 때 사용 >
또는 >>
를 사용
>
출력을 새로운 파일에 덮어쓰기
# "Hello, World!"를 hello.txt라는 파일에 덮어씁니다. echo "Hello, World!" > hello.txt
>>
출력을 파일 끝에 추가
# "New line"을 hello.txt 파일에 추가합니다. echo "New line" >> hello.txt
입력 리디렉션
입력 리디렉션은 파일을 명령어의 입력으로 전달하는 데 사용 <
기호를 사용
<
: 파일을 명령어의 입력으로 사용
# file.txt의 내용을 정렬하여 출력 sort < file.txt # list.txt 파일을 정렬하고 out.txt에 쓰기 sort < list.txt > out.txt
표준 오류 리디렉션
표준 오류를 파일로 리디렉션할 수 있습니다. 2>
또는 2>>
를 사용
2>
: 오류 출력을 파일로 리디렉션
# 명령어의 오류 메시지를 error.log 파일에 저장 command 2> error.log
2>>
: 오류 출력을 파일 끝에 추가
# 명령어의 오류 메시지를 error.log 파일 끝에 저장 command 2>> error.log
출력과 오류 모두 리디렉션
출력과 오류를 모두 하나의 파일로 리디렉션
# output.log 파일에 표준 출력과 표준 오류가 모두 기록 command > output.log 2>&1
파이프, 필터, 리디렉션을 결합 예시
여러 명령어를 조합하여 복잡한 작업을 할 수 있습니다.
예를 들어, 특정 로그 파일에서 오류 메시지만 추출하여 정렬하고, 이를 파일로 저장할 수 있습니다.
# /var/log/syslog 파일에서 "error"라는 단어가 포함된 행을 찾고, 그 결과를 정렬하여 error_log.txt에 저장합니다. cat /var/log/syslog | grep "error" | sort > error_log.txt