본문 바로가기
[Linux]

[linux] [따베셸] Bash shell과 Rules2

by SAMSUNG Metaverse-Cloud 2023. 1. 12.
728x90

 

 

Redirection 이란 무엇인가?

 

 Redirection을 보기 전 먼저 Communication Channels를 살펴보자.  먼저 우리가 프로그램을 하나 실행하고자 한다. 프로그램과 사용자와 상호작용을 한다고 가정하자. 내가 입력을 통해서 프로그램에게 전달하는 것을 stdin이라고 한다.
그 때 사용하는 기기가 바로 키보드가 된다. 프로그램이 작업을 한 후 결과를 도출하는 디바이스는 Terminal이 된다.
그 전달 과정을 stdout이라고 한다. 성공적이지 못한 결과가 나오면 stderr이라는 에러가 터미널로 전달된다. 

Bash shell에서는 번호를 붙여서 이를 관리한다. 입력은 0번, 출력은 1번, 에러 메세지 출력은 2번으로 관리한다. 

0번은 키보드와의 연결, 1번은 터미널과의 연결, 2번 역시 터미널과 연결이 되어 있음을 알 수 있다.

이 방향을 바꿔버릴 수 있는 것이 입출력 Redirection 이라고 할 수 있다. 

 

 

 

우리는 두가지의 아이디를 가지고 있다. 우리는 우분투 계정으로 성미 라는 계정에 메일을 보내는 작업을 할 것이다.

 

 

 

우리는 mailx 라는 명령어를 사용할 것이고 seongmi.lee@localhost 로컬 호스트로 TEST MAIL이라는 제목을 가진 메일을 보낼 것이다.

엔터를 누르니 Cc라는게 뜬다. 

   

 

현재 mailx의 상황은 키보드로 email의 내용을 입력하는 것을 대기하고 있다. 

 

 

 

우리는 이렇게 메일의 내용을 작성했다. 우리는 여기서 표준 입력 장치를 키보드로 사용했다. 키보드를 통해서 입력을 했기 때문이다. 

우리는 여기서 표준 입력 장치를 키보드가 아닌 파일로 바꿀 수 있을까? 가능하다. 이것을 File Redirection이라고 한다. 

우리는 입력의 Device의 번호가 0번이라는 것을 위에서 확인했다. 이 0에 < 기호를 넣어주면 입력의 방향을 바꿀 것이라는 것을 의미한다. 

 

 

 

 

우리는 File Redirection을 진행 할 것이므로 먼저 This is a sample mail. bye 라는 message.txt 파일을 하나 생성해 준다. 
우리는 이 파일을 mailx를 통해 다른 계정으로 보내 줄 것이다. 

 

 

 

 

위와 동일한 명령어인 mailx를 사용하고 SAMPLE MAIL이라는 제목을 가진 메일을 전달한다. 우리는 전달자 뒤에 0<을 사용해서 입력의 Device를 키보드가 아닌 message.txt인 파일로 Redirection 해준다. 

 

 

 

 

이제 결과를 확인 해 보자 먼저 다른 계정으로 스위치 유저를 진행한 후 mailx를 입력한 결과 두가지의 메일을 확인할 수 있었다.

우리는 이 Redirection을 통해 입력의 방향을 타이핑이 아닌 파일을 통해서 전달할 수 있게 만든 것이다. 
이는 공지메일을 동일하게 여러명에게 발송해야 한다면 효과적으로 사용할 수 있다. 다수의 사용자에게 특정 메일을 보낼 때 사용하기에 편리하다. 

 

 

 

0과 1은 생략이 가능하므로 0을 제외하고 사용해도 똑같이 Redirection이 되는 것을 알 수 있다.

 

 

 

 

이번에는 출력을 알아보자

 

우리가 자주 쓰는 date라는 명령어를 통해서 확인할 수 있다. 먼저 date 명령어를 입력하자 올바른 출력이 화면에 띄워지는 것을 확인할 수 있다. 하지만 date 뒤에 허용되지 않은 명령어들을 입력하자 오류 메세지에 대한 화면이 뜨게 된다. 

즉 정상적인 결과와 에러메세지 모두 터미널로 띄우는 것을 확인할 수 있다.

우리는 이러한 결과를 화면에 출력하는 것이 아닌 File에 저장시킬 수 있다. 

 

 

우리는 date 뒤에 1 즉 정상적인 결과를 > date.out이라는 파일을 만들어서 결과를 터미널이 아닌 파일에 저장하게 했다. 

그 후 ls를 쳐보니 date.out이라는 파일이 생성된 것을 알 수 있었고 cat 명령어를 통해 살펴본 결과 시간이 잘 출력되는 것을 확인할 수 있었다. 

 

 

 

>가 하나일 시 기존 내용이 존재한다면 그냥 덮어씌워버리지만 >>일 경우에는 기존 내용에 내용을 추가하는 것을 의미한다. 

 

 

 

결과를 살펴보면 총 두번이 누적되어 3개의 결과를 저장해 놓은 것을 알 수 있다. 

 

 

 

에러 메세지 역시 가능하다.
먼저 우리는 에러가 뜨는 말도 안되는 명령어를 입력한다. 그 후 2> error.txt를 통해 결과창을 Terminal로 오게 하는게 아닌 파일 형태로 유지하게 만들 수 있다. 

 

 

 

 

Pipeline이란 무엇인가?

 

파이프라인이란 무엇인가? 명령의 실행 결과를 다음 명령의 입력으로 전달 하는 것을 의미한다. 리눅스의 명령어를 조합하여 사용을 할 수 있다.

기호: Command1 | Command2 | Command3

즉 Command1의 실행 결과를 Command2의 입력으로 진행하며 Command2의 결과를 Command3의 입력으로 넣어준다. 

 

 

파이프라인은 어쩔 때 사용할까?

 

우리는 ls -l 명령어를 통해서 리스트를 보려고 한다. 하지만 너무 많은 파일들이 있는 것을 확인할 수 있다. 이럴 때는 어떻게 해야할까?

 

 

 

 

두번째로 볼 명령어로 wc -l이라는 명령어가 있다. 이 명령어는 몇 라인으로 구성되어 있는지를 출력해주는 명령어이다. 

cat 명령어를 통해서 host 파일을 살펴보면 총 9줄로 되어 있는 것을 확인할 수 있다.

 

우리는 이 두 명령어를 통해서 ls -l의 총 길이를 확인하고 싶다. 이럴 떄는 어떻게 해야할까?

 

 

그렇다면 우리는 ls -l 명령어를 먼저 입력한 후 그 결과가 두번째 명령의 입력값이 될 수 있게 파이프라인을 사용한 후 wc 명령어를 사용했다.

그러자 총 29이라는 숫자가 나왔다. 즉 현재 디렉토리 내 총 29개의 폴더 및 파일이 존재한다는 것을 알 수 있었다. 

 

 

 

또 이렇게 more라는 명령어를 통해서 한 페이지씩 출력해 주는 것 또한 파이프라인을 통해서 할 수 있다. 

 

 

또한 이렇게도 사용이 가능하다. cat passwd는 현재 passwd라는 파일을 보여주며 이 결과값이 :을 기점으로 첫번째 필드만을 보여주는 cut 명령의 입력값이 되고 이 결과는 유저들의 이름만 나오는데 이 결과를 다시 sort의 입력값으로 지정한 후 그 결과를 마지막 wc의 입력값으로 준 결과 총 34개의 유저가 있다는 것을 확인할 수 있었다. 

 

 

 

우리는 전에 학습한 alias를 통해서 하나의 커맨드를 생성할 수 있다. 즉 usercount 유저의 인원 수를 출력하는 것을 이렇게 간단한 Rule을 통해서 완성시킨 것이다. 

 

 

 

출처

https://www.youtube.com/watch?v=lhtdmcYllfA&list=PLApuRlvrZKog2XlvGJQh9KY8ePCvUG7Je&index=5&ab_channel=TTABAE-LEARN 

 

728x90

댓글