CS/OS

[Linux] 생활코딩 리눅스 강좌 (2)

창문닦이 2019. 9. 17. 22:12

IO Redirection, 입출력의 방향을 바꾼다.

1.     Output

-       ls –al 현재 디렉토리의 목록을 출력해라

-       ls –l > result.txt 결과를 모니터로 출력하는 것이 아니라 파일로 저장하길 원할 때, ls –l 의 결과를 result.txt에 저장하겠다. 명령어를 실행하면 파일이 자동 저장됨.

-       cat result.txt 파일 내용을 출력해보면 정상적으로 저장된 것을 볼 수 있음

-       output을 화면으로 출력하는 것이 기본인데 방향을 돌려서 파일에 저장을 시켰다. 이런 것이 리다이렉션에 해당한다.

-       ls –al : ls라는 프로그램의 입력값은 -al라는 의미.

-       > 는 리다이렉션을 의미

 

-       rm rename2.txt 1>result.txt

rename2.txt 해당 파일이 이미 없을 때 삭제하겠다는 명령어를 작성시 오류메시지를 출력한다. 이 메시지를 텍스트파일로 저장하고 싶었으나 출력됨. 왜냐하면 1 standard output data를 의미. 표준 출력.

-       rm rename2.txt 2> error.log

여기서 2 standard error로 로그파일이 작성 실행. cat error.log 시 내용조회가능

-       rm rename2.txt 1>result.txt 2 > error.log

명령어의 실행결과를 표준출력으로 저장할 수 있고, 오류발생시 로그파일에 저장하겠다

 

2.     Input

-       프로그램이 실행되고 있는 상태. 프로세스

-       프로세스는 출력으로 standard data, standard error를 가짐

-       cat (enter) hi 입력시 hi를 출력함. 빠져나갈땐 ctrl + d

-       cat을 실행한 후 사용자가 키보드로 입력한 정보를 standard input으로 가짐

-       cat < hello.txt

파일안에 입력된 내용을 cat의 입력값으로 줄 수 있다. hello.txt에 입력된 데이터를 cat의 입력값으로 받는다.

-       head 파일명 : 기본 열줄만 출력됨

-       head –n1 파일명 : 첫번째 행만 출력됨. head라는 프로세스에 (command args –n1 명령어에 인자를 준것). 

-       head –n1 < 파일명 : 위와 동일한 결과

-       head –n1 < 파일명 > one.txt 출력한 결과를 다시 파일로 저장. 표준입력/출력에 대한 리다이렉션을 실행

-       io stream : 입출력이 흘러 들어오고 나가는 개천. 흐름. 스트림.

 

3.     Append

-       ls –al > result.txt  이 명령어를 계속 사용하면 해당 파일에 덮어쓰기가 됨.

-       ls –al >> result.txt 누적되어 작성. 리다이렉션을 통해 데이터를 붙여넣는다

-       mail gogo@gmail.com << eot

다음에 이문자가 들어가면 명령이 끝나는 것이다.

eot 여기서 명령이 종료

-       실행한 결과를 화면에 출력하고 싶지않고 파일로도 저장하지 않을 땐 /dev/null 낭떠러지와 같은 개념

ls –al > /dev/null

 

쉘과 커널 shell and Kernel

-       사용자가 명령을 입력하면 그 명령을 컴퓨터가 이해할 수 있도록 하는 프로그램이 쉘. 명령을 해석하는 쉘과 실제로 일을 하는 커널.

-       하드웨어 : 하드디스크, CPU, 기계

-       커널 : 물리적인 하드웨어를 직접적으로 제어

-       : 사용자가 쉘에게 명령어를 입력. 쉘은 입력받은 명령어를 해석해서 커널에게 전달

-       어플리케이션

-       왜 이걸 분리 해놓은걸까? 여러가지의 쉘을 생성할 수 있음. 사용자 입장에서는 편하게 느껴지는 쉘을 선택해서 제어할 수 있음그래서 분리한게 아닐까..

-       쉘이란 것이 무엇인가? 하나의 쉘만 써서는 쉘과 커널을 구분하기 어렵다. 지금까지 써온 쉘이 구체적으로 어떤 프로그램인지 확인해보고자 한다. 알면 좋고 몰라도 상관없음. 어렵지만 중요하지 않을 수 있다.

 

bash vs zsh

-       echo “hello”

들어온 문자를 출력해주는 명령어

-       echo $0

현재 쉘중에 어떤 프로그램을 쓰고있는지 조회할 수 있다.

-       zsh

 

안깔려있음

-       sudo apt-get install zsh 설치 명령어

-       echo $0 다시 조회해보면 zsh가 뜸

-       bash zsh의 차이점은?

bash

cd를 누르고 탭키를 선택시 숨겨진 디렉토리도 함께출력

cd /home/ubuntu

 

zsh

cd를 누르고 탭키를 선택시 숨겨진 디렉토리는 출력안됨

cd /h/u 입력후 탭키를 누르면 자동완성기능이 지원

 

설치한 zsh를 지우고 싶다  ~$ sudo apt-get --purge remove zsh면 된다.

 

shell script : 쉘을 통해서 명령을 실행시키는 작업을 한번에 실행

-       mkdir script

-       cd script/

-       touch a.log b.log c.log 세개의 로그파일 생성

-       ls –l 목록 조회

-       mkdir bak 디렉토리 생성

-       cp *.log bak 로그파일 전부를 복사해서 bak폴더에 붙여넣기

-       ls –l bak 복사된것을 조회가능

 

-       ls /bin 유닉스계열에 기본적으로 위치하는 디렉토리?

-       많은 명령어들이 파일로 존재하는 프로그램이었다.

-       nano backup

-       #!/bin/bash

-       #!로 시작한다면 운영체제는 bash라는 프로그램을 통해서 해석되어야 한다는 것

 

구현하고 싶은 항목들

-       현재 디렉토리에 bak 디렉토리가 없다면 만들고 있다면 pass

-       현재 디렉토리에 있는 log 파일들을 bak 디렉토리에 복사해라

-       fi 조건절이 끝남을 의미

 

#!/bin/bash

if ! [ -d bak ]; then

mkdir bak

fi

cp *.log bak

 

-       backup 이란 파일을 생성 후 실행해보자

-       ./backup 현재 디렉토리의 backup 파일 실행

-       chmod +x backup 실행권한이 없을 경우 이 프로그램이 실행가능한 프로그램이란 것을 리눅스에게 알려줘야한다. 여기서 xexecute를 의미

-       rm bak/c.log 후 다시 backup 파일을 실행해보면 다시 c.log가 백업된 모습을 확인가능