-
[따배쉘] 4.Redirection, PipelineLinux 2022. 8. 25. 18:28
옮
===
4.Bash Shell의 기능 (2)
===
파일에 대해서 입출력 방향을 전환시켜주는 Redirection
여러개의 명령어를 조합해서 사용할 수 있는 Pipeline
===
Redirection 보기전에 Communication Channels
===
프로그램을 하나 실행하는데 그 프로그램과 내가 커뮤니케이션 하고 싶으면, 데이터를 전달하고 싶으면
키보드를 통해서 한다. 입력을 해서 프로그램에게 전달해 주는 걸 standard in, stdin이라 부른다 그때 사용하는 device가 키보드
프로그램이 작동하고 결과를 나한테 보여주고 싶을때 사용하는 디바이스가 Terminal
터미널을 사용할 때 standard output, stdout 이라 표현한다
어떤 경우엔 프로그램이 에러메시지를 만든다. 그 에러메시지도 Terminal로 출력된다
커뮤니케이션 채널은 3가지가 있는데
표준입력 채널로 키보드
표준출력 채널로 터미널
표준에러출력 채널로 터미널
Bash Shell은 번호를 붙여서 관리한다
0번이 키보드와 연결돼 있고
1번이 터미널과 연결
2번도 터미널과 연결
이 방향을 바꿀 수 있는게 입출력 Redirection
>>는 뭔지 이따 나옴(append다)
===
표준출력에 대한 내용부터
id [id] : 어떤애 정보보기
id : 내 정보 보기
===
ubuntu라는애가 seongmi.lee에게 이메일 보내보려하는데, 그때 사용하는 커맨드가 mailx
mailx [계정명] : 계정에게 메일 보내기
-s : subject, 제목
엔터 누르면 mailx라는 프로그램이 키보드로 입력이 들어오길 기다리고 있다(이메일의 내용)
그래서 이렇게 쓰고나선
Ctrl+d : 메일 입력 끝, 전송한다
저 메일 내용 입력할 때 표준 입력장치 키보드를 사용했다
===
저 표준 입력장치를 키보드가 아닌 다른 걸로 바꿀 수 있다. 파일로!
이게 파일 Redirection, 입출력 Redirection
입력의 device는 0번을 사용 STDIN의 번호는 0번.
그 0에다가 0< 하면 입력의 방향을 바꿀거야 가 된다
뭔소리냐면
===
먼저 echo로 파일을 만들고
message.txt에 내가 보낼 내용이 들어있고
아까 mailx명령어 썼던거에 그냥 하면 키보드로 입력하는건데
맨 뒤에 0< 로 : 0번의 방향을, 입력의 방향을 message.txt 파일로 해줘
▽뒤에다 쓰는거라서 입력은 < 고 출력은 > 인가?
키보드를 통해서 메일의 내용을 입력받았던 상태가 message.txt라는 파일을 통해 받게된다
아까 이 그림에서 키보드가 아니고 파일이 된 것
===
잘 온거 보기
su - seongmi.lee 이게 계정 바꾼 것
계정 바꾸고 나 누군지 확인하고 mailx확인하고
? 뒤에 깜빡깜빡 상태가 된다.
1
2 이렇게 누르면 번호의 메일 확인 된다
q입력하면 종료
===
미리 공지메일 같은걸 만들어놓고 여러명에게 동일한 내용을 발송할 때 매번 타이핑할 수 없으니 이렇게
프로그램에게 입력을 전달해줄 때 사용
===
근데!! 0번과 1은 생략할 수 있다
0<
1>
2>
였잖아
>랑
<이거 두개가 사실 의미가 저거라고
===
출력방향 전환해보기
date : 오늘의 날짜를 터미널로 모니터로 전달한다
date abce 이렇게 잘못 입력하면 에러 메시지가 터미널로 온다
이건 이상황
이걸 터미널이 아니라 파일로 저장해줘 하는게 Redirection
===
저장해달라고 하는 파일이 없으면 새로 만들어짐, 있었으면 덮어쓰기
1은 생략이 가능
===
덮어쓰기 오버라이트 시키지 말고 추가하는건 없어요?(append)
>> 사용시 기존 내용에 추가
===
ls file1 file100 이렇게 하면 각각에 대해 메시지가 나오는데
그 중에 에러메시지가 나오는걸 보고 싶지 않으면?
/dev/null 이 파일은 소각장. 뭘 집어넣어도 없어져 버리는
이렇게 하면 그 중에 에러메시지는 저기로가서 안보여
이런 형태로 쓰려고 입출력 Redirection을 사용하는 것이다
===
Pipeline
여러개의 명령을 조합해서 사용할 수 있는 기능
| 이거
command1의 실행 결과를 command2의 입력으로, 2의 실행결과를 3의 입력으로
왼쪽에서 실행한 결과가 오른쪽 명령의 입력으로 들어가
===
이거 왜써요?
ls -l 해봤더니..
음 이거 몇개야? 이런게 궁금한 것
---
wc -l hosts
hosts라는 파일이 현재 디렉토리에 있는데, 이 파일이 총 몇개 라인으로 돼 있나요?
wc -l 이라는 커맨드가 파일이 총 몇개 라인인지 출력해주는 것
---
그럼 ls -l한 결과의 라인수가 궁금하면
ls -l 을 wc -l에게 전달하는 것
그러기 위해 | 기호를 넣어줘
결론 :
명령어 명령어를 묶어서 하나의 커맨드처럼! 이러려고 쓴다!
===
more : 한 페이지 씩 출력하기, space bar누르면 다음 페이지
ls -l | more 이렇게 사용
===
cat passwd
첫번째가 유저네임, 7번째인 마지막에 로그인쉘
https://reakwon.tistory.com/137 : nologin은 사용자가 아니라 애플리케이션이라서 로그인이 불필요하대
cat passwd | cut -d: -f 1
cat했을 때 결과중에
cut -d:
:를 구분문자로 집어넣어주고
- f 1
필드, 첫번째 필드
를 출력해줘
그럼
유저 이름만 나오는데
그 결과를 sort시켜줘
그 결과를 wc -l 해줘
우리 시스템의 계정이 몇개나 있는지
===
앞에서 배운거 활용하면
내가 많이 쓰는 명령어 형식을 없던거를 아예 만들어서 쓸 수 있다
'Linux' 카테고리의 다른 글
[따배리] 1.디렉토리들 (0) 2022.08.28 [따배쉘] 5.Bash shell script (0) 2022.08.25 [따배쉘] 3.Metacharacters, Quoting, Nesting, Alias, Prompt (0) 2022.08.15 [따배쉘] 0.~2.Shell이란, 변수, 환경변수 (0) 2022.08.15 얄코 Vim (0) 2021.10.06