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 실행권한이 없을 경우 이 프로그램이 실행가능한 프로그램이란 것을 리눅스에게 알려줘야한다. 여기서 x는 execute를 의미
- rm bak/c.log 후 다시 backup 파일을 실행해보면 다시 c.log가 백업된 모습을 확인가능
'CS > OS' 카테고리의 다른 글
[Linux] 자주 사용하는 명령어 정리1 (0) | 2019.09.28 |
---|---|
[Linux] RPM 과 YUM (0) | 2019.09.27 |
[Linux] 리눅스 커맨드라인 툴 기초 (0) | 2019.09.24 |
[Linux] 생활코딩 리눅스 강좌 (3) (0) | 2019.09.23 |
[Linux] 생활코딩 리눅스 강좌 (1) (0) | 2019.09.16 |