Shell Scripting

/dev/null 이란?

Somaz 2022. 9. 14. 17:40
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

 

https://inpa.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-devnull-%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%EC%85%98-%EA%B8%B0%ED%98%B8-%EC%A2%85%EB%A5%98#/dev/null_%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

https://chunggaeguri.tistory.com/entry/Linux-File-Descriptor%ED%8C%8C%EC%9D%BC-%EB%94%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%84%B0

 

728x90
반응형