이번 포스팅에서는 리눅스를 사용하다 보면 자주 만나게 되는 > 에 대해 알아 보겠습니다.
먼저 ls 명령어를 통해 현재 경로를 기준으로 하위 파일 리스트르 출력해주겠습니다.
명령어를 치면 터미널에 출력됩니다.
우리는 당연하게 여기지만 이건 디폴트로 화면에 출력되도록 되어 있기 때문에 생기는 상황입니다.
그럼 다른 곳에 출력 할 수도 있을까요?
1) Standard Output(stdout)
대표적으로 output을 파일 안에 출력을 할 수 있습니다.
ls > test 를 작성해줍니다.
아무 결과도 나오지 않습니다.
이명령어는 ls 를 통해 나오는 output을 test 파일쪽으로 작성해달라는 명령어 입니다.
기존에 없던 새로운 파일도 생겼네요.
cat 을 통해 해당 파일 내용물을 확인해보니 ls output결과가 잘 저장된것을 알 수 있습니다.
( cat 이 낯선분은 해당 글을 참조바랍니다.)
이와 같이 기존에 출력되는 방향을 다른 곳으로 바꿨다라고해서 리다이렉션 시켰다라고도 표현합니다.
그렇다면 이 방법으로 모든 출력결과를 파일로 옮길 수 있을까요?
정답부터 말하자면 아닙니다.
2) Standard Error(stderr)
아래 코드는 test2.txt 파일을 삭제하는 명령어 입니다.
문제는 해당 파일은 애초부터 존재하지 않습니다. output결과는 존재하지 않는 파일을 삭제하려고 하니 발생시킨 에러문구고요.
첫번째 예시에서 공부한대로 > 를 이용하여 output을 리다이렉션 시켜보겠습니다.
하지만 전과 다르게 에러가 그대로 터미널창에 출력됩니다.
ls 를 통해 파일목록을 확인해보면 test2 는 생성되었습니다.
cat 을 통해 test2 내용물을 확인해보니 아무 내용도 적혀있지 않습니다.
결과적으로 위와 같은 방식이 통하지 않는다는걸 알게되었네요.
그렇다면 기존방식과 무슨차이 때문에 이런 방식이 발생되는걸까요?
리눅스에서는 output으로 1. stdout(표준출력) 2. stderr(표준에러) 두가지 형태가 있습니다.
정상적인 출력물에 경우 stdout(표준출력)에 해당하고 위와 같이 에러의 경우는 stderr(표준에러)에 속합니다.
우리가 첫번째 예시에서 썼던 > 는 사실 1> 의 축약 형태인데요.(둘다 사용가능)
1> 은 stdout(표준출력)에 대해서만 리다이렉션을 시켜줍니다. 그렇기에 2번예제에서 발생한 에러 output은 리다이렉션 시켜주지 못한거죠.
그렇다면 stderr(표준에러)를 리다이렉션 시켜주려면 어떻게 해야할까요?
2> 를 사용하면됩니다. 기존 > 형태에 2를 앞에 붙혀준 형태죠.
> 은 기본적으로 1> 과 같지만 2> 는 반드시 2를 명시적으로 붙혀줘야 합니다.
정말로 잘 동작되는지 확인해볼까요?
이전과 다르게 에러가 나오지 않습니다.
내용물을 확인해보니 test2 파일안에 오류메세지가 잘 저장된걸 확인할 수 있습니다.
3) 통합 방식
명령어를 실행하고자 할때 에러가 날지 안날지 확신할 수 없을 경우가 있습니다.
이럴때는 에러가 날경우는 2> 를 사용하고 정상출력일때는 1> 를 설정해주는 방법이 있습니다.
현재 디렉토리에는 test2 라는 파일이 있습니다.
아래 코드는 test2 파일의 내용물을 읽어서 정상일때는 good 파일에 작성하고 에러가 발생시에는 bad 파일에 작성하라는 명령입니다.
test2 파일이 있으니까 good 파일에 내용물이 저장되겠죠.
반대로 test3 (없는 파일) 파일을 읽고 리다이렉션을 하려고 한다면 2> 를 통해 bad 에 저장될겁니다.
'리눅스' 카테고리의 다른 글
[Docker] 도커에서 주피터 노트북 원격 접속 방법 (1) | 2022.12.12 |
---|---|
[docker 기초] 도커 nvidia gpu 초기 세팅 방법 (1) | 2022.12.09 |
리눅스 grep 사용법 (문자열 찾기) (0) | 2022.12.06 |
우분투 dev/nvme0n1p2 clean 부팅 오류 해결 방법 (0) | 2022.12.05 |
리눅스 cat 명령어 사용법 완벽 정리 (0) | 2022.12.05 |
댓글