728x90
반응형
Overview
오늘은 리눅스에서 쉘 스크립트를 하다 보면 자주 사용하게 되는 "/dev/null" 이라는 것에 대해 알아보려고 한다.
그 전에 파일 디스크립터에 대해서 간단하게 설명한 뒤
0의 의미인 STDIN(standard input) 표준입력(키보드)
그리고 1의 의미인 STDOUT(standard output) 표준출력(화면)과
2의 의미인 STRERR(standard error) 표준에러(화면)에 대해서 알아 볼것이다.
0 : 표준입력
1 : 표준출력
2 : 표준에러
File Descriptor(파일 디스크립터)란?
파일 디스크립터는 시스템으로 할당 받은 파일을 대표하는 0이 아닌 정수 값이다.
파일 디스크립터는 '0이 아닌 정수', 'Non-negative Integer'값이다. 음수가 아닌 0과 양수인 정수 값을 가진다.
3가지의 Default input/output streams가 있다.
- 표준 입력(Standard Input(STDIN), 표준 출력(Standard Output(STDOUT)), 그리고 표준 오류(Standard Error(STDERR))이다. 기본적으로 이 스트림들은 각자 특정한 파일 디스크립터(File Descriptor)를 가지고 있다.
- 각 파일 디스크립터는 어떤 정수(Inter)값인데 그것은 어떤 하나의 open file과 연결되어 있다.
- 그리고 프로세스들은 파일 디스크립터를 이용해 데이터를 처리한다.
- stdin=0, stdout=1, stderr=2
- 이 파일 디스크립터들은 어떤 하나의 파일 디스크립터 테이블에 저장되어 있다.
쉽게 설명하자면, 파일 디스크립터는 시스템이 만들어 놓은 것을 사용할 수 있게 하기 위해 시스템이 우리에게 건네주는 숫자에 불가하다.
/dev/null 이란?
/dev/null 은 쉽게 말해서 null 값이라고 보면된다. shell을 crontab 실행할 때 오류가 생겨도 멈추지 않고 표준에러를 표준출력으로 리다이렉션 할때, 또는 사용중인 파일을 비우고 싶을때 주로 사용된다.
1) 예제
$ echo "Somaz"
Somaz
$ echo "Somaz" > /dev/null'
$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos snap socket
$ rm somaz > /dev/null
rm: cannot remove 'test': No such file or directory
# 하지만 somaz라는 file이 존재하지 않기 때문에 위와 같이 표준에러가 출력된다.
$ rm somaz > /dev/null 2>&1
# 이렇게 명령하면 표준에러는 버려진다.
- > 표준출력 : 명령의 결과를 파일로 저장 ( 명령 > 파일 )
- >> 표준출력(추가) : 명령의 결과를 기존 파일 데이터에 추가 ( 명령 >> 파일 )
- < 표준입력 : 파일의 데이터를 명령에 입력 ( 명령 < 파일 )
2) 예제
$ cat somaz
1
2
3
4
5
6
7
8
9
10
$ /dev/null > somaz
-bash: /dev/null: Permission denied
$ ls -l
-rw-r--r-- 1 root root 0 Sep 14 16:01 somaz
$ cat somaz
# 이렇게 파일이 비워진다.
3) 예제
$ rm -rf somaz
$ cat somaz.sh
#!/bin/bash
rm somaz > /dev/null
# 쉘 생성
$ chmod 755 somaz.sh
# 쉘 실행을 위한 권한 설정
$ crontab -e
* * * * * /root/somaz.sh >> /root/somaz.log 2>&1
# crontab 설정
$ service cron start
* Starting periodic command scheduler cron [ OK ]
# crontab 서비스 실행
root@DESKTOP-UE21GPH:~# cat somaz.log
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
rm: cannot remove 'somaz': No such file or directory
# 이렇게 1분마다 게속 쌓인다.
참고 자료
https://blog.naver.com/dev_zion/222631283389
728x90
반응형