top bar

글 목록

2015년 6월 15일 월요일

[Linux] What does “&” at the end of a linux command mean? - 기묘한 명령어들

'&'의 의미?



리눅스 커맨드 라인에서 '&'(앰퍼센드)의 의미는 무엇일까?
아래 페이지에 다양한 의견들이 있다.

http://superuser.com/questions/152688/why-run-a-linux-shell-command-with

의미는 간단하다 아래와 같이 간단한 bash shell 명령을 날려보자.
$ echo "Hello world" &
결과는? 아래와 같다.
$ echo "Hello world" &
[1] 18251
Hello world
명령어를 실행과 동시에 프로세스의 PID를 뱉고서 Backdground로 사라진다. 해당 명령어가 짧게 끝나는 단발성 프로세스라 그렇지 tomcat이라던가 apache와같은 계속적으로 메모리와 cpu점유율을 유지하는 프로세스 라면, 프로세스를 'kill' 하기 전까지 Background에서 돌고 있을 것이다.

결론적으로 커맨드 라인 끝에 '&' 라는것은, 실행한 프로세스를 Background로 보내고, 사용자를 즉시 prompt로 돌아오게 하는 명령인 것이다.

What does '> /dev/null 2>&1' mean?



그렇다면 우리가 자주쓰는 '> /dev/null 2>&1' 이라는건 뭘까? 아래 블로거의 글을 참고하자.

http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

참 자주쓰이는 명령이지만 의미도 모른채 쓰는경우가 얼마나 많던가? 먼저 이것을 설명하려면 UNIX(또는 Linux)의 3가지 I/O 개념을 알아야한다.

별거없다 바로 'stdin' , 'stdout', 'stderr'이다. 말그대로 표준 입출력과 에러 출력이다. 사용자들은 리눅스의 쉘 커맨드 라인에서, 이러한 I/O 시스템을 이용해 운영체제와 소통한다.

하지만, 이들은 때때로 숫자로 표현된다. 'stdin'은 '0', 'stdout'은 '1', 'stderr'는 '2'와 같은 식이다. 따라서 위의 예제는 표준 에러 출력 '2' 를 표준출력 '1' 로 redirecting 하는 것이다. 이때, destination의 숫자앞에는 '&'가 꼭 붙어야 한다. 안 그러면 '1'이라는 텍스트 파일이 생성되버리고, 그곳에 에러출력이 redirect 된다.

'/dev/null'은 무엇일까? 한마디로 쓰레기 처리장이라고 보면 되겠다. bit-bucket 이라고도 불리며, 어떤 것이든 dump 할 수 있는 공간(?)이다.

한 문장으로 설명하자면, '이 명령어의 모든 출력을 'blackhole'로 걍 보내 버리자' 라는 것이다.

댓글 없음:

댓글 쓰기