코딩하는 문과생

[리눅스] 생활코딩, CLI와 쉘 본문

개발 관련 지식/리눅스

[리눅스] 생활코딩, CLI와 쉘

코딩하는 문과생 2019. 12. 18. 14:59

[GUI vs CLI]

왜 CLI를 사용하는가?

  1. 적은 cpu사용, 에너지로 돌아간다.
  2. 순차적으로 진행되는 일을 자동화하기 쉽다.
# 1. 디렉토리로 만든다.
# 2. 디렉토리로 들어간다.

$ mkdir why
$ cd why

# 순차적으로 실행
$ mkdir why; cd why

# pipeline 
하나 프로세스의 결과값을 다른 프로세스의 입력으로 준다.
$ nano linux.txt
# 리눅스 설명 붙여넣기
$ cat linux.txt
# CLI에서 확인가능

$ grep linux linux.txt
# linux가 포함된 행만 출력

$ ls --help | grep sort | grep file
# ls 사용 설명서 중 sort가 포함된 행을 찾는다. 그 중 file이 포함된 행을 찾는다. 

$ ps aux | grep apache
# 프로세스 중 apache를 포함된 행을 찾는다.

[IO Redirection]

Input, Output

Redirection : 방향을 바꾼다.

-Output

$ ls -l > result.txt
# ls -l 결과값을 파일로 저장하고 싶다.
# 이를 ***Redirection***이라 한다.

$ rm hello.txt
# 없는 값을 지운다. - 에러 발생
$ rm hello.txt 1> result.txt
# 1: 표준 출력
$ rm hello.txt 2> error.log
# 2: 에러 출력

$ rm hello.txt 1> result.txt 2> error.log
# 1: 표준 출력, 2: 에러 출력

-Input

$ ls -l
$ cat hello.txt
# hello
# 여기서 hello.txt는 파라미터

$ cat 
# hi(input)
# hi(output)
# cat은 기본적으로 키보드를 표준입력으로 받는다.

$ cat < hello.txt
# 여기서 hello.txt는 ***Redirection***

$ cd why
$ head -n1 linux.txt
# 1줄만 출력
# 여기서 linux.txt는 파라미터

$ head -n1 < linux.txt
# 1줄만 출력
# 파일로 입력을 한다.
# 여기서 linux.txt는 ***Redirection***

$ head -n1 < linux.txt > one.txt
# IORedirection

- 추가적으로

$ ls -al > result.txt
$ ls -al > result.txt
cat result.txt
# 덮어쓰기

$ ls -al >> result.txt
cat result.txt
# 더하기

$ mail sijune@naver.com << eot
>hi
>my
>name
>is
>sijune
>eot
# 여러 입력값을 하나로 받기

$ ls -al > result.txt
$ ls -al > /dev/null
# 유닉스 계열의 휴지통 

[쉘과 커널]

  • 명령어를 해석하는 "쉘"
  • 실제로 일을 하는 "커널"

- 왜 분리했을까?

아마 여러개의 쉘을 띄워서 작업이 가능

# ***bash***
$ echo "hello"
# hello
$ echo $0
# bash
# bash와 커널이 통신

$ zsh
# No such file

$ sudo apt-get install zsh
$ zsh
# ***zsh***
$ echo $0
# zsh
# zsh 쉘과 커널이 통신

# ***bash***
$ cd (tab)
# 숨김파일 O

# ***zsh***
$ cd (tab)
# 숨김파일 X

[쉘 스크립트]

  • 여러 개의 명령을 순차적으로 해야할 필요가 있다.
  • 필요할 때마다 작성하는 것보다 저장해놓았다가 사용하는게 편하다.
$ mkdir script
$ cd script

$ touch a.log b.log c.log
$ ls -l

$ mkdir bak
$ cp *.log bak
$ ls -l bak

# ***우리는 정기적으로 백업하고 싶다.***
$ ls /bin
# bin: 기본 프로그램이 위치

# script 도메인에서 작성
$ nano backup
# #!/bin/bash
# if ! [ -d bak ]; then
#	mkdir bak
# fi
# cp *.log bak

$ ls -l
$ ./backup
# Permission denied

$ chmod +x backup
# 이 프로그램이 실행 가능하다는 것을 알려줘야 한다.
$ ls -l
$ rm -rf bak
$ ./backup
$ ls -l bak