지금까지 우리는 데이터의 흐름을
이용자에서 컴퓨터로 보내는 입력과
컴퓨터에서 이용자에게로 보내는 출력
이렇게 두가지로 알 수 있었다.
그리고 컴퓨터에서 나오는 출력을 바꾸는것을 redirection 이라고 한다.
원래라면 컴퓨터에서 나오는 출력은 모니터의 shell에 출력이 되야한다.
이것이 일반적인 출력 데이터의 흐름인데
이 출력의 결과를 사용자가 아닌 파일이나 디렉토리로 옮긴다면 사용자의 모니터에는 결과가 출력되지 않고 해당 출력의 결과가 해당 파일에 저장되게 되는것이다.

root 홈디렉토리에서 실습을 진행해 보겠다.

실습을 위해 redirection 이라는 폴더를 만들고 현재위치를 해당 디렉토리로 옮겨준다.

만약 우리가 pwd라는 명령어를 실행한다면 이렇게 해당 명령의 결과값이 모니터로 출력이 될것이다.

하지만 이렇게 > 를 붙이고 그뒤에 해당 명령어의 결과값이될 파일의 이름을 적어주면 해당파일을 명령어가 생성하여 해당 명령어의 결과를 해당파일에 저장하게된다.

엔터를 눌러도 그 어떤 결과값도 출력되지않는걸 볼 수 있다.
이로서 우리는 >가 화살표 역할을해 >를 통해 redirection 을 할 수 있다는걸 알 수 있다.
즉 >는 데이터의 흐름을 바꿔주는 역할인 것이다.
그럼 해당 데이터는 pwd_result라는 파일로 흐름이 바뀌었으니 해당 파일이 생성되고 결과값이 저장되었을것이다.

해당파일을 읽어보면 pwd의 결과가 저장된것을 확인할 수 있다.
같은 파일에 다른 종류의 명령어를 redirection 시키면 어떻게 될까?

id 라는 명령어를 같은파일에 redirection 시켜보았다.

이전의 pwd 명령어가 사라지고 id의 결과값이 덮어씌워진걸 확인 할 수 있다.
즉 redirection 명령은 해당 위치의 파일을 지우고 새로 저장하는것이라 볼 수 있다.
하지만 여기서 >> 이렇게 두번 꺽쇠를 써주면 덮어쓰기가 아닌 해당파일에 중복으로 결과값을 저장해준다.

이렇게 말이다.
우리가 명령어 > 위치 를 쓸때 사실 이 꺽쇠 앞에는 파일디스크립터(fd)를 쓸 수 있는데
이 >를 기본형으로 쓸때는 1(출력) 이 생략되어있다 라고 볼 수 있다.
하지만 2(에러)를 써준다면 에러 메세지가 redirection 되는것을 볼 수 있다.

실습을 위해 칼리계정으로 한번 해보겠다.

─$ find / -name "rockyou.txt.gz"
해당명령어는 / 최상위 경로에서 rockyou.txt.gz 라는 이름을 가진 파일을 찾겠다는 명령어이다.
일반 계정으로한 접근이기 때문에 permission denied 가 엄청나게 뜬것을 볼 수 있다.
이런경우 우리는 우리가 진정으로 찾고자하는 파일을 찾을 수 없기 때문에 에러메세지들만 다른곳으로 redirection 시킬 필요가 있는것이다.

└─$ find / -name "rockyou.txt.gz" 2> /tmp/errormsg
이렇게 redirection 을 통해 tmp폴더에 에러메세지를 넘기고 필요한 정보만 찾아보겠다.

이렇게 에러메세지가 하나도 안나오고 필요한 결과만 뜬것을 확인 할 수 있다.

그리고 tmp 폴더의 errormsg를 확인해보면 이렇게 에러들이 모조리 저장된것을 확인할 수 있다.
즉 결과값만 출력할 필요가 있을때 필요한 시스템인것이다
하지만 이렇게 매번 파일이 저장된다면 디렉토리가 더러워질것이기 때문에 에러메세지들은 따로 저장없이 지워야할 필요도 있을것이다.
그런경우에 리눅스에는 블랙홀이 존재한다. /dev/null 경로에 파일을 보내면 파일이 사라지게된다.
쉽게말해 즉시삭제되는 휴지통이라고 보면 되는것이다.
실험을 위해
$ find / -name "rockyou.txt.gz" 2> /dev/null 이렇게 입력해보자

이렇게 하면 에러결과는 삭제되고 결과값만 볼 수 있는것이다.
redirection은 이렇게 에러메세지를 걸러낼때 주로 사용되기도 하고 여러가지 명령어의 결과를 화면이 아닌 파일로 저장하고싶을때 정말 많이 사용한다.