기교: Linux I/O 의 방향 을 바 꾸 는 작은 기교
만약 에 I/O 의 방향 을 바 꾸 면 파일 식별 자 (File Descriptor) 의 개념 과 관련된다. Linux 시스템 에서 시스템 은 열 린 파일 마다 파일 식별 자 를 지정 하여 시스템 이 파일 을 추적 할 수 있 도록 한다. 여 기 는 C 언어 프로 그래 밍 의 파일 핸들 과 비슷 하 다. 파일 식별 자 는 하나의 숫자 이 고 서로 다른 숫자 는 서로 다른 의 미 를 나타 낸다. 기본 적 인 상황 에서시스템 은 0 표준 입력 (stdin), 1 표준 출력 (stdout), 2 표준 오류 (stderr), 그리고 3 - 9 는 보 존 된 식별 자 입 니 다. 이 식별 자 를 표준 입력, 출력 또는 오 류 를 임시 연결 로 지정 할 수 있 습 니 다.일반적으로 이렇게 하면 많은 복잡 한 방향 재 정립 요 구 를 해결 할 수 있다.
표준 입력 표준 출력 은 일반적으로 모니터 의 출력 을 가리킨다. 표준 오 류 는 일반적으로 모니터 로 방향 을 정한다.
아래 의 예 를 보고 그들의 관 계 를 묘사 해 보 세 요.
#ls /dev
이 명령 은/dev 디 렉 터 리 에 있 는 모든 파일 을 표시 하고 화면 에 결 과 를 출력 합 니 다.
여기/dev 는 명령 ls 의 표준 입력 (키보드 에서 입력) 이 고 화면 에 인쇄 된 결 과 는 표준 출력 (/dev 디 렉 터 리 의 내용) 입 니 다.
또는 제목 으로 돌아 가 표준 입력 이나 출력 을 다른 방식 으로 바 꾸 는 것 입 니 다. 다음 예 를 참조 하 십시오. 같다
#ls /dev 1>filename # :"1" ">"
이상 명령 은 명령 의 표준 출력 을 화면 에 표시 하 는 것 이 아니 라 파일 filename 으로 다시 지정 합 니 다. 파일 식별 자 를 가리 키 지 않 으 면 시스템 기본 값 은 1 입 니 다. 따라서 1 은 생략 할 수 있 습 니 다.
위의 예 가 무 거 운 '>' 를 '>' 로 바 꾸 면 출력 을 filename 파일 의 끝 에 추가 하고 파일 이 존재 하지 않 으 면 만 듭 니 다.아래 와 같다
#ls /dev >>filename
표준 오 류 를 파일 로 다시 지정 할 수도 있 습 니 다.
#ls -qw /dev 2>filename
분명히 - qw 는 오류 매개 변수 입 니 다. 보통 모니터 에 오류 정 보 를 보고 하지만 2 표준 오류 (stderr) 를 파일 filename 으로 다시 지정 하기 때문에 모니터 에 오류 정보 가 없고 정 보 를 파일 에 기록 합 니 다.
다음 명령 은 표준 출력 과 오 류 를 파일 로 지정 하 는 것 입 니 다.
#ls /dev &>filename
"&"는 표준 출력 과 표준 오 류 를 대표 합 니 다. 정상 출력 이 든 오류 정보 든 filename 에 기록 되 어 있 습 니 다.
표준 입력, 출력, 잘못된 파일 식별 자 를 다시 정의 합 니 다.
파일 식별 자 를 다시 정의 하면 i > & j 명령 으로 파일 식별 자 i 를 j 로 다시 지정 할 수 있 습 니 다. '&' 를 '주소 찾기' 로 이해 할 수 있 습 니 다.
아래 의 예 를 보십시오
#exec 5>&1
파일 식별 자 5 를 표준 출력 으로 지정 하 는 것 을 표시 합 니 다. 이 명령 은 보통 올 때 표준 입력 을 저장 합 니 다.
같은 표준 입력 도 다시 방향 을 정할 수 있 으 니 아래 의 예 를 참고 하 시기 바 랍 니 다.
# grep search-word <filename grep search-word 0<filename
일반적으로 grep 명령 은 주어진 파일 에서 문자열 을 검색 합 니 다. 이상 명령 은 키보드 에서 입력 하 는 것 이 아니 라 파일 filename 을 grep 명령 의 표준 으로 입력 합 니 다.
앞에서 언급 한 바 와 같이 시스템 은 모든 열 린 파일 에 파일 식별 자 를 지정 하여 시스템 이 파일 을 추적 할 수 있 도록 합 니 다. 그러면 기본 파일 식별 자 는 무엇 입 니까?정 답 은 0, 즉 표준 입력 이거 나 키보드 에서 입력 한 것 이 라 고 할 수 있다.물론 이 파일 식별 자 도 스스로 지정 할 수 있 으 니 아래 의 예 를 참고 하 시기 바 랍 니 다.
#echo 123456789 >filename filename
#exec 3<>filename filename , 3
#read -n 4 <&3 4 ,
#echo -n . >&3 5 , 5 ,-n
#exec 3>&- 3
지금 cat filename 파일 의 결 과 는 1234.6789 입 니 다.
명령 j < > filename 은 파일 을 열 고 파일 식별 자 를 j 로 표시 합 니 다. "& -"파일 식별 자 닫 기 표시
파일 식별 자 닫 기 동작 은 아래 를 참고 하 십시오.
n<&- n
0<&- <&- stdin
n>&- n
1>&- >&- stdout
그리고 다른 명령 도 있 습 니 다. 다음 과 같 습 니 다.
2. :> filename > filename
파일 filename 을 비 워 두 는 것, 즉 파일 내용 을 비 우 는 것 을 의미 합 니 다. 파일 이 존재 하지 않 으 면 빈 파일 을 만 듭 니 다. (touch 명령 과 같 습 니 다) 빈 출력 을 표시 합 니 다. 두 명령 의 유일한 차이 점 은 > filename 은 모든 셸 에서 정상적으로 작 동 할 수 있 는 것 이 아 닙 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.