IO Redirection
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt# 위 명령은 ls -l 의 결과를 result.txt 파일에 저장하기 위한 것입니다.
result.txt의 내용을 출력하기 위해 cat을 사용합니다.
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 40
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 21:20 result.txt
...
sgoing@sgoing-virtual-machine:~$ ls -l
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 637 10월 14 21:20 result.txt
...즉, 위의 과정은 화면에 출력시키는 결과를 파일에 저장시키는 것으로 이러한 과정을 redirection이라고 합니다. 출력의 방향을 바꾸는 것으로 '>' 기호가 redirection을 의미합니다.
내용1 > 내용2 : 내용1을 내용2의 입력으로 받아 리다이렉션시킵니다. 즉, 파일로 저장합니다.
내용1 < 내용2 : 내용2를 내용1의 입력으로 받는 경우 입니다.
명령: ls -l
위에서 ls 는 프로그램 또는 프로세스이고 -l은 그 프로그램의 인수로 위의 그림의 command line argument에 해당합니다. 이 프로그램을 실행하면 결과가 모니터에 출력 됩니다. 이 정상적인 결과를 standard output이라고 하며 이 결과를 파일과 같이 다른 방향으로 출력시키기 위한 것을
redirection입니다. 즉, 위의 명령
ls -l > result.txt 명령은 부등호 앞에 1이라는 수가 생략된 것으로 ls -l 1> result.txt입니다. 이 명령에서 1은 standard output을 의미합니다.
위 그림의 standard error는 어떤 명령을 실행할 경우 에러메시지 결과를 의미합니다.
만일 아래와 같이 존재하지 않은 파일을 삭제하는 명령의 결과는 에러 메시지를 나타내지요.
만일 아래와 같이 존재하지 않은 파일을 삭제하는 명령의 결과는 에러 메시지를 나타내지요.
sgoing@sgoing-virtual-machine:~$ rm go.txt
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
에러메시지의 경우 위와 같은 standard output이 아니므로 다음과 같이 파일로 저장되지 않습니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt > error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
# 즉, 에러메시지의 경우 Standard Error이므로 다음과 같이 파일로 redirection을 실행해야 합니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt 2> error.log
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
sgoing@sgoing-virtual-machine:~$ ls -l
합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 84 10월 14 22:59 error.log
-rw-r--r-- 1 sgoing sgoing 637 10월 14 21:20 result.txt
...다음과 같이 두 가지 명령을 동시에 실행시킬 수 있습니다. 현재 이 디렉토리에 go.txt 파일은 존재하지 않기 때문에 standard output은 없지만 standard error는 존재하므로 result.txt에는 어떠한 내용도 저장되지 않지만 error.log에는 에러메시지가 저장됩니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt > result.txt 2> error.log
sgoing@sgoing-virtual-machine:~$ cat result.txt
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
- 프로그램이 실행되는 상태를 프로세스라고 합니다.
- 프로그램 cat을 살펴보면 여러파일을 합쳐서 출력합니다. 그러나 cat 다음에 command line argument인 파일(들)을 지정하지 않으면 입력한 정보를 그대로 출력합니다.
sgoing@sgoing-virtual-machine:~$ cat --help
사용법: cat [<옵션>]... [<파일>]...
FILE(들)을 합쳐서 표준 출력으로 보낸다.
<파일>이 주어지지 않거나 - 이면 표준 입력을 읽습니다.
...
sgoing@sgoing-virtual-machine:~$ cat
data
data
hello
hello
hi
hi
- 이 과정을 끝내기 위해서는 ctrl+c 키를 눌러 줍니다.
- 위의 cat 다음에 키보드에 의해 입력한 문자등의 data를 standard input이라고 합니다.의 (즉, 명령 또는 프로그램의 인수나 환경변수가 아닌 직접 입력해 주는 객체들을 standard input 이라고 합니다.)
sgoing@sgoing-virtual-machine:~$ cat < error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
위의 경우는 error.log 파일을 cat에 리다이렉트로 전달한 것으로 error.log가 standard input 즉 data가 되어 cat의 결과(standard output)가 됩니다.
동일한 결과를 나타낸 것이지만 아래의 경우에서 error.log는 cat의 command line argument로 전달되어 standard output을 나타낸 것입니다.
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
다른 예로 why/linus.txt를 살펴보면
sgoing@sgoing-virtual-machine:~$ cd why; ls -l
합계 84
-rw-rw-r-- 1 sgoing sgoing 84785 10월 13 23:27 linux.txt
head 라는 명령어는 문서 처음 행부터 10 행 까지만 나타내는 것으로 옵션으로 '-n숫자'를 전달하면 첫 행부터 지정한 숫자의 행까지만을 나타냅니다.
sgoing@sgoing-virtual-machine:~/why$ head linux.txt
Linux
From Wikipedia, the free encyclopedia
Jump to naviᄉᆍgationJump to search
This article is about the family of operating systems. For the kernel, see Linux kernel. For other uses, see Linux (disambiguation).
Linux
Tux the penguin
Tux the penguin, mascot of Linux[1]
Developer Community
Linus Torvalds
Written in Primarily C and assembly
sgoing@sgoing-virtual-machine:~/why$ head -n1 linux.txt #한줄만을 출력합니다.
Linux
위의 경우는 출력하려는 대상 파일을 명령어 head의 명령어 인자(command line input)로 전달한 것입니다. 만약 명령어 인자가 아니라 standard input을 전달하기 위해서는 다음과 같이 redirection 기호를 사용합니다.
sgoing@sgoing-virtual-machine:~/why$ head -n1 < linux.txt
Linux
위의 명령 : head -n1 < linux.txt
명령 인자 < data(standard input)
위 결과를 다른 txt 파일에 저장하기 위해서는 위의 결과를 파일에 redirection시켜 주면 됩니다.
sgoing@sgoing-virtual-machine:~/why$ head -n1 < linux.txt > one.txt
head -n1 < linux.txt (1): redirection <-- standard input
(1) > one.txt: 위의 리다렉션한 결과 --> 파일로 리다이렉션(저장)
결과를 대상파일로 리다이렉션
sgoing@sgoing-virtual-machine:~/why$ cat one.txt
Linux
리다이렉션에 의한 append
- 리다이렉션되는 내용이 어떤 파일에 덮어쓰기가 아니고 일어난 순서대로 첨가를 위해서는 '>>'를 사용합니다. .즉 다음을 볼까요
다음은 디렉토리의 목록을 result 파일에 리다이렉션 할 경우 반복을 해도 같은 내용이 출력됩니다.
그러나 이 경우 result.txt는 동일한 파일 즉, 업그레이드가 되지 않습니다. 그러면 '>>'를 사용하면 어떤 변화가 일어날까요?
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:37 result.txt
...
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:38 result.txt
...
'>>' 를 사용하면 원래의 내용에 변화된 부분들이 첨가됩니다.
sgoing@sgoing-virtual-machine:~$ ls -l >> result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 747 10월 15 08:38 result.txt
...sgoing@sgoing-virtual-machine:~$ ls -l >> result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 747 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 1494 10월 15 08:44 result.txt
...
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
에러메시지의 경우 위와 같은 standard output이 아니므로 다음과 같이 파일로 저장되지 않습니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt > error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
# 즉, 에러메시지의 경우 Standard Error이므로 다음과 같이 파일로 redirection을 실행해야 합니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt 2> error.log
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
sgoing@sgoing-virtual-machine:~$ ls -l
합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 84 10월 14 22:59 error.log
-rw-r--r-- 1 sgoing sgoing 637 10월 14 21:20 result.txt
...다음과 같이 두 가지 명령을 동시에 실행시킬 수 있습니다. 현재 이 디렉토리에 go.txt 파일은 존재하지 않기 때문에 standard output은 없지만 standard error는 존재하므로 result.txt에는 어떠한 내용도 저장되지 않지만 error.log에는 에러메시지가 저장됩니다.
sgoing@sgoing-virtual-machine:~$ rm go.txt > result.txt 2> error.log
sgoing@sgoing-virtual-machine:~$ cat result.txt
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
- 프로그램이 실행되는 상태를 프로세스라고 합니다.
- 프로그램 cat을 살펴보면 여러파일을 합쳐서 출력합니다. 그러나 cat 다음에 command line argument인 파일(들)을 지정하지 않으면 입력한 정보를 그대로 출력합니다.
sgoing@sgoing-virtual-machine:~$ cat --help
사용법: cat [<옵션>]... [<파일>]...
FILE(들)을 합쳐서 표준 출력으로 보낸다.
<파일>이 주어지지 않거나 - 이면 표준 입력을 읽습니다.
...
sgoing@sgoing-virtual-machine:~$ cat
data
data
hello
hello
hi
hi
- 이 과정을 끝내기 위해서는 ctrl+c 키를 눌러 줍니다.
- 위의 cat 다음에 키보드에 의해 입력한 문자등의 data를 standard input이라고 합니다.의 (즉, 명령 또는 프로그램의 인수나 환경변수가 아닌 직접 입력해 주는 객체들을 standard input 이라고 합니다.)
sgoing@sgoing-virtual-machine:~$ cat < error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
위의 경우는 error.log 파일을 cat에 리다이렉트로 전달한 것으로 error.log가 standard input 즉 data가 되어 cat의 결과(standard output)가 됩니다.
동일한 결과를 나타낸 것이지만 아래의 경우에서 error.log는 cat의 command line argument로 전달되어 standard output을 나타낸 것입니다.
sgoing@sgoing-virtual-machine:~$ cat error.log
rm: 'go.txt'를 지울 수 없음: 그런 파일이나 디렉터리가 없습니다
다른 예로 why/linus.txt를 살펴보면
sgoing@sgoing-virtual-machine:~$ cd why; ls -l
합계 84
-rw-rw-r-- 1 sgoing sgoing 84785 10월 13 23:27 linux.txt
head 라는 명령어는 문서 처음 행부터 10 행 까지만 나타내는 것으로 옵션으로 '-n숫자'를 전달하면 첫 행부터 지정한 숫자의 행까지만을 나타냅니다.
sgoing@sgoing-virtual-machine:~/why$ head linux.txt
Linux
From Wikipedia, the free encyclopedia
Jump to naviᄉᆍgationJump to search
This article is about the family of operating systems. For the kernel, see Linux kernel. For other uses, see Linux (disambiguation).
Linux
Tux the penguin
Tux the penguin, mascot of Linux[1]
Developer Community
Linus Torvalds
Written in Primarily C and assembly
sgoing@sgoing-virtual-machine:~/why$ head -n1 linux.txt #한줄만을 출력합니다.
Linux
위의 경우는 출력하려는 대상 파일을 명령어 head의 명령어 인자(command line input)로 전달한 것입니다. 만약 명령어 인자가 아니라 standard input을 전달하기 위해서는 다음과 같이 redirection 기호를 사용합니다.
sgoing@sgoing-virtual-machine:~/why$ head -n1 < linux.txt
Linux
위의 명령 : head -n1 < linux.txt
명령 인자 < data(standard input)
위 결과를 다른 txt 파일에 저장하기 위해서는 위의 결과를 파일에 redirection시켜 주면 됩니다.
sgoing@sgoing-virtual-machine:~/why$ head -n1 < linux.txt > one.txt
head -n1 < linux.txt (1): redirection <-- standard input
(1) > one.txt: 위의 리다렉션한 결과 --> 파일로 리다이렉션(저장)
결과를 대상파일로 리다이렉션
sgoing@sgoing-virtual-machine:~/why$ cat one.txt
Linux
리다이렉션에 의한 append
- 리다이렉션되는 내용이 어떤 파일에 덮어쓰기가 아니고 일어난 순서대로 첨가를 위해서는 '>>'를 사용합니다. .즉 다음을 볼까요
다음은 디렉토리의 목록을 result 파일에 리다이렉션 할 경우 반복을 해도 같은 내용이 출력됩니다.
그러나 이 경우 result.txt는 동일한 파일 즉, 업그레이드가 되지 않습니다. 그러면 '>>'를 사용하면 어떤 변화가 일어날까요?
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:37 result.txt
...
sgoing@sgoing-virtual-machine:~$ ls -l > result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:38 result.txt
...
'>>' 를 사용하면 원래의 내용에 변화된 부분들이 첨가됩니다.
sgoing@sgoing-virtual-machine:~$ ls -l >> result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 747 10월 15 08:38 result.txt
...sgoing@sgoing-virtual-machine:~$ ls -l >> result.txt
sgoing@sgoing-virtual-machine:~$ cat result.txt
합계 44
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 0 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 747 10월 15 08:38 result.txt
...합계 48
drwxr-xr-x 23 sgoing sgoing 4096 10월 11 09:55 anaconda3
-rw-r--r-- 1 sgoing sgoing 0 10월 14 23:27 cat
-rw-r--r-- 1 sgoing sgoing 84 10월 14 23:03 error.log
-rw-r--r-- 1 sgoing sgoing 1494 10월 15 08:44 result.txt
...
댓글
댓글 쓰기