리다이렉션(컴퓨팅)

Redirection (computing)
입력, 출력 및 오류에 대한 표준 스트림

컴퓨팅에서 리다이렉션프로세스통신의 한 형태로 표준 스트림을 사용자가 지정한 위치로 리다이렉트할 수 있는 다양한 Unix 쉘을 포함하여 대부분의 명령줄 인터프리터에 공통적인 기능입니다.

Unix와 유사한 운영체제에서는 프로그램은 리다이렉션을 수행합니다. dup2(2) 시스템콜, 또는 그 지연은 적지만 높은 수준의 stdio 아날로그, freopen(3) popen(3)입니다.

표준 입력 및 표준 출력 리다이렉트

리다이렉션은 보통 명령어 사이에 특정 문자를 배치하여 구현됩니다.

기본의

일반적으로 이러한 문자의 구문은 다음과 같습니다.<입력 리다이렉트 및>출력을 리다이렉트 합니다. command > file1명령어를 실행하여 표준 출력의 통상적인 수신처인 단말기에 출력을 표시하는 것이 아니라 file1에 출력을 배치합니다.그러면 file1의 기존 데이터가 모두 클로빙됩니다.

사용.command < file1는 표준 입력의 일반적인 소스인 키보드가 아닌 file1을 입력 소스로 하여 명령을 실행합니다.

command < infile > outfile 가지 기능, infile로부터의 명령어 읽기 및 outfile로의 쓰기 기능을 결합합니다.

변종

파일 끝에 출력을 추가하려면>>연산자가 사용됩니다.command1 >> file1.

스트림 리터럴(인라인 파일, 표준 입력으로 전달됨)에서 읽으려면 다음 명령을 사용하여 여기서 문서를 사용할 수 있습니다.<<연산자:

$ tr a-z A-Z << END_TEXT > 1 2 3 > uno dos tres > END_TEXT 1 2 3 UNO DOS TRES

문자열에서 읽으려면 , 「」를 사용해 「여기」스트링을 사용합니다.<<<연산자:tr a-z A-Z <<< "one two three", 또는:

$ NUMBERS="투 쓰리" $tr a-z A-Z << "$ NUMBRS"  쓰리

파이프

텍스트 터미널에서 실행되는 세 가지 프로그램의 파이프라인

프로그램을 함께 실행하여 하나의 프로그램이 명시적인 중간 파일 없이도 다른 프로그램의 출력을 읽을 수 있습니다. command1 command2명령어1을 실행하여 명령어2의 입력으로 출력을 사용합니다(배관이라고 불리며 "를 사용하여 ""를 사용합니다. 「파이프」라고 불리는 문자.

명령어를 실행하는 2개의 프로그램은 유일한 스토리지 공간인 작업 버퍼(Linux는 각 버퍼에 최대 64K를 허용)와 각 명령어 처리에 필요한 작업 공간을 병행하여 실행할 수 있습니다.예를 들어 "sort" 명령어는 모든 입력 레코드를 읽을 때까지 출력을 생성할 수 없습니다.이는 마지막으로 수신한 레코드가 정렬된 순서대로 첫 번째 레코드가 될 수 있기 때문입니다.Alexia Massalin 박사의 실험 운영 체제인 Synthesis는 각 작업이 입력 및 출력 버퍼의 가득함에 따라 실행될 때 우선순위를 조정합니다.

이렇게 하면 다음과 같이 2개의 리다이렉트 및 임시 파일을 사용하는 경우와 같은 최종 결과가 됩니다.

$ command 1 > tempfile $ command 2 < tempfile $ rm tempfile

그러나 여기서 command2는 command1이 완료될 까지 실행을 시작하지 않으며 중간 결과 및 각 태스크가 필요로 하는 작업 공간을 유지하기 위해 충분한 크기의 스크래치 파일이 필요합니다.예를 들어, DOS는 "파이프" 구문을 허용하지만, 이 두 번째 방법을 사용합니다.따라서 장기 실행 프로그램 "Worker"가 작동하면서 다양한 메시지를 생성하고, 두 번째 프로그램인 TimeStamp가 각 레코드를 stdin에서 stdout으로 복사하고, 이 레코드가 수신된 날짜와 시간이 앞에 붙는다고 가정합니다.다음과 같은 시퀀스Worker TimeStamp > LogFile.txt는, 워커가 종료했을 때만 타임스탬프를 생성해, 그 출력 파일의 판독과 기입의 고속화를 나타냅니다.

명령 파이프의 좋은 예는 다음과 같습니다.echo다른 명령어를 사용하여 인터랙티브한 셸을 구현합니다(예:echo -e 'user\npass' ftp localhost입력 사용자로 ftp 클라이언트를 실행하고 return 키를 누른 후 pass를 누릅니다.

일상적인 사용에서 파이프라인의 첫 번째 단계는cat또는echo파일 또는 문자열에서 읽습니다.이것은 대부분의 경우 입력 간접 또는 여기서의 문자열로 대체될 수 있으며 입력 리다이렉션이 아닌 cat 및 piping을 사용하는 것은 cat의 무용지물로 알려져 있습니다.예를 들어 다음 명령어가 있습니다.

$ cat infile 명령어$echo $string 명령어$echo - e 'user\npass' ftp localhost

대체 순서:

$ command < infile $ command < < $string $ ftp localhost < < < < user \ npass >

~하듯이echo는 shell-internal 명령어인 경우가 많기 때문에 그 사용은 외부 명령어인 cat만큼 비판받지 않습니다.

표준 파일 핸들로 리디렉션 및 표준 파일 핸들로부터 리디렉션

원래의 Bourne 쉘에서 파생된 Unix 쉘에서는 처음 2개의 액션을 문자 바로 앞에 숫자(파일 기술자)를 배치함으로써 수정할 수 있습니다.이것은 리다이렉션에 사용되는 스트림에 영향을 줍니다.Unix 표준 I/O 스트림은 다음과 같습니다.

핸들 이름. 묘사
0 스틴 표준 입력
1 설치하다 표준 출력
2 하드 표준오차

예를들면,command 2> file1명령어를 실행하여 표준 오류 스트림을 file1로 보냅니다.

csh(C 쉘)에서 파생된 셸에서는 구문에 의해 &(앰퍼샌드) 문자가 리다이렉트 문자에 추가되어 같은 결과가 됩니다.그 이유는 파일명 '1'과 stdout을 구별하기 위해서입니다.cat file 2>1cat file 2>&1첫 번째 경우 stderr은 파일명 '1'로 리다이렉트 되고 두 번째 경우 stderr은 stdout으로 리다이렉트 됩니다.

다른 유용한 기능은 표준 파일 핸들을 다른 표준 파일로 리디렉션하는 것입니다.가장 일반적인 변형은 표준 오류표준 출력병합하여 오류 메시지를 일반 출력과 함께(또는 대체적으로) 처리할 수 있도록 하는 것입니다.예를들면,find / -name .profile > results 2>&1는 .profile이라는 이름의 모든 파일을 검색합니다.리다이렉트 없이 실행되면 stdout에 히트하고 오류(예를 들어 보호된 디렉토리를 통과할 권한이 없는 경우)를 stderr에 출력합니다.표준 출력이 파일 결과를 나타내는 경우 콘솔에 오류 메시지가 표시됩니다.파일 결과에서 히트 메시지와 오류 메시지를 모두 표시하려면 다음 명령을 사용하여 stderr(핸들 2)을 stdout(핸들 1)에 병합합니다.2>&1.

Marge된 출력을 다른 프로그램으로 파이핑하는 경우 파일 Marge Sequence2>&1따라서 파이프 기호 앞에 와야 합니다.find / -name .profile 2>&1 less

단순하지만 POSIX에 준거하지 않는 명령어 형식입니다.command > file 2>&1(버전 4, 최종 출시 이전 Bourne Shell 또는 Debian/Ubuntu에서 사용되는 표준 셸 Debian Almquist 쉘에서는 사용할 수 없습니다). command &>file또는command >&file.

사용할 수 있습니다.2>&1그 전에>하지만 그 결과는 흔히 오해받고 있다.이 규칙은 리다이렉션이 핸들을 출력 스트림에 독립적으로 설정하는 것입니다.그래서...2>&1" 핸들을 설정합니다.2어떤 일이 있어도1이 시점에서 보통 stdout이 됩니다.그러면...>" 핸들을 리다이렉트 합니다.1예를 들어 파일 등 다른 것으로 이동하지만 핸들은 변경되지 않습니다.2stdout을 가리키고 있습니다.

다음 예제에서는 표준 출력이 파일에 기록되지만 오류가 stderr에서 stdout으로 리디렉션되어 화면으로 전송됩니다.command 2>&1 > file.

에러와 표준 출력을 모두 파일에 쓰려면 순서를 반대로 해야 합니다.표준 출력은 먼저 파일로 리다이렉트되고 다음으로 stderr은 파일을 가리키도록 이미 변경된 stdout 핸들로 리다이렉트됩니다.command > file 2>&1.

연쇄 파이프라인

리다이렉션 토큰과 파이프 토큰을 함께 연결하여 복잡한 명령을 생성할 수 있습니다.예를들면,sort infile uniq -c sort -n > outfile는 파일 행을 사전순으로 정렬하고, 발생 횟수 앞에 고유한 행을 쓰고, 결과 출력을 수치로 정렬하여 최종 출력을 outfile에 저장합니다.이러한 유형의 구성은 셸 스크립트배치 파일에서 매우 일반적으로 사용됩니다.

여러 출력으로 리다이렉트

표준 명령어는 명령어의 출력을 여러 수신처로 리다이렉트할 수 있습니다.ls -lrt tee xyz파일 목록 출력은 표준 출력과 파일 xyz로 전송됩니다.

「 」를 참조해 주세요.

외부 링크