linux 셸 데이터 리 셋(입력 리 셋 과 출력 리 셋)상세 분석

방향 을 바 꾸 기 전에 Liux 의 파일 설명 자 를 살 펴 보 겠 습 니 다.
Liux 파일 설명자:Liux 추적 으로 파일 을 열 고 분 배 된 숫자 로 이해 할 수 있 습 니 다.이 숫자 는 c 언어 로 파일 을 조작 할 때의 핸들 과 비슷 합 니 다.핸들 을 통 해 파일 의 읽 기와 쓰기 작업 을 실현 할 수 있 습 니 다.사용자 정의 파일 설명자 범 위 는 3-num 입 니 다.이 최대 숫자 는 사용자 의:ulimit Cn 정의 숫자 와 관계 가 있 으 며 최대 치 를 초과 할 수 없습니다.
Liux 가 시 작 된 후 기본 으로 3 개의 파일 설명 자 를 엽 니 다.각각 표준 입력 standard input 0,정확 한 출력 standard output 1,오류 출력:error output 2 입 니 다.
나중에 파일 을 열 면파일 바 인 딩 설명 자 를 추가 하면 순서대로 증가 할 수 있 습 니 다.셸 명령 이 실행 되면 부모 프로 세 스 의 파일 설명 자 를 계승 합 니 다.따라서 모든 실행 중인 셸 명령 에는 기본 3 개의 파일 설명자 가 있 습 니 다.
모든 Liux 명령 을 실행 하 는 과정 은 다음 과 같 습 니 다.

명령 이 실행 되 었 습 니 다:
먼저 입력 이 있 습 니 다:입력 은 키보드 에서 도 얻 을 수 있 고 파일 에서 도 얻 을 수 있 습 니 다.
명령 실행 완료:성공 하면 성공 결 과 를 화면 으로 출력 합 니 다:standard output 기본 값 은 화면 입 니 다.
명령 실행 에 오류 가 있 습 니 다:오류 도 화면 에 출력 합 니 다:standard error 기본 값 도 화면 을 말 합 니 다.
파일 입 출력 은 주어진 프로 세 스 로 추 적 된 모든 파일 을 여 는 정수 핸들 로 이 루어 집 니 다.이 숫자 값 들 은 바로 파일 설명자 이다.가장 잘 알려 진 파일 쌀 설명 자 는 stdin,stdout,stderr 이 고 파일 설명자 의 숫자 는 각각 0,1,2 이다.이 숫자 들 과 각자 의 설 비 는 보존 되 어 있다.하나의 명령 이 실행 되 기 전에 모든 입 출력 을 준비 합 니 다.기본 값 은 각각 바 인 딩(stdin,stdout,stderr)입 니 다.이 럴 때 오류 가 발생 하면 명령 이 종료 되 고 실행 되 지 않 습 니 다.명령 해석 과정 참고:Linux Shell 어댑터,메타 문자,전의 자 사용 사례 소개
이러한 기본 출력,입력 은 모두 Liux 시스템 에 내 정 된 것 입 니 다.우 리 는 사용 하 는 과정 에서 결 과 를 화면 에 출력 하 는 것 을 원 하지 않 을 때 가 있 습 니 다.파일 이나 다른 장치 로 출력 하고 싶 습 니 다.이 럴 때 우 리 는 출력 방향 을 바 꿔 야 한다.
linux 셸 에서 자주 사용 하 는 입 출력 조작 자 는:
1.표준 입력(stdin):코드 0,사용<또는<;/dev/stdin->/proc/self/fd/0 대표:/dev/stdin
2.표준 출력(stdout):코드 1,사용>또는>;/dev/stdout->/proc/self/fd/1 대표:/dev/stdout
3.표준 오류 출력(stderr):코드 2,2>또는 2>사용;/dev/stderr->/proc/self/fd/2 대표:/dev/stderr
출력 방향 변경:
형식:
command-line 1[1-n]>file 또는 파일 연산 자 또는 장치
위의 명령 은 명령 실행 결과(표준 출력 또는 오류 출력,원래 화면 에 인쇄 하려 고 했 던)를 다른 출력 장치(파일,파일 조작 자 열기,프린터 등)로 바 꾸 는 것 입 니 다.1,2 는 표준 출력,오류 출력 입 니 다.
실례:

#         test.sh test1.sh test1.sh     
[chengmo@centos5 shell]$ ls test.sh test1.sh
ls: test1.sh:          
test.sh
 
#                ,           suc.txt
# 1>    ,  ,        
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>suc.txt
ls: test1.sh:          
[chengmo@centos5 shell]$ cat suc.txt 
test.sh
 
#     ,      ,   err.txt
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>suc.txt 2>err.txt
[chengmo@centos5 shell]$ cat suc.txt err.txt 
test.sh
ls: test1.sh:          
#         suc.txt err.txt  “>>”     
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>>suc.txt 2>>err.txt 
 
#          
[chengmo@centos5 shell]$ ls test.sh test1.sh 2>&-
test.sh
[chengmo@centos5 shell]$ ls test.sh test1.sh 2>/dev/null
test.sh
#&[n]              ,&1      &2       &-            
#/dev/null     , linux      ,             ,      
 
#      
[chengmo@centos5 shell]$ ls test.sh test1.sh  1>&- 2>&- 
#   1 ,2      
[chengmo@centos5 shell]$ ls test.sh test1.sh  2>/dev/null 1>/dev/null
# 1,2      /dev/null   
[chengmo@centos5 shell]$ ls test.sh test1.sh >/dev/null 2>&1
#     2          1,             /dev/null        
<p>[chengmo@centos5 shell]$ ls test.sh test1.sh &>/dev/null
#&        ,                     /dev/null  
주의:
1.셸 이'>'연산 자 를 만나면 오른쪽 파일 이 존재 하 는 지 여 부 를 판단 하고 존재 하면 먼저 삭제 하고 새 파일 을 만 듭 니 다.직접 만 드 는 것 은 존재 하지 않 습 니 다.왼쪽 명령 이 성공 하 든 안 하 든오른쪽 파일 이 비어 있 습 니 다.
2.">"연산 자,오른쪽 파일 을 판단 하고 존재 하지 않 으 면 먼저 만 듭 니 다.추가 방식 으로 파일 을 열 면 파일 설명자[특별히 지정 되 지 않 음,기본 값 은 1,2]를 할당 한 다음 왼쪽 표준 출력(1)이나 오류 출력(2)과 연결 합 니 다.
3.명령 이 실행 되면 바 인 딩 파일 의 설명자 도 자동 으로 효력 을 잃 습 니 다.0,1,2 또 한가 하 다.
4.하나의 명령 이 시작 되 고 명령 의 입력,정확 한 출력,오류 출력,기본 값 은 각각 0,1,2 파일 설명 자 를 연결 합 니 다.
5.하나의 명령 이 실행 되 기 전에 출력 이 정확 한 지 확인 하고 출력 장치 가 잘못 되면 명령 이 실행 되 지 않 습 니 다.
입력
형식:
command-line[n]명령 은 기본적으로 키보드 에서 받 은 입력 을 파일 이나 다른 열 린 파일 과 장치 입력 으로 바 꿉 니 다.이 명령 을 실행 하면 표준 입력 0 을 파일 이나 장치 와 연결 합 니 다.그것 으로 입력 할 것 입 니 다.
실례:

[chengmo@centos5 shell]# cat > catfile 
testing 
cat file test
#     [ctrl]+d    
#     【  】    ,     catfile  
 
[chengmo@centos5 shell]$ cat>catfile <test.sh
#cat  test.sh       ,       catfile
 
 
[chengmo@centos5 shell]$ cat>catfile <<eof
test a file
test!
eof
 
#<<          ,      『       』   。       eof  ,      ,  ctrl+D
exec 바 인 딩 방향 변경
형식:
exec 파일 설명자[n]<또는>file 또는 파일 설명자 또는 장치
위 에서 말 한 입력,출력 방향 을 바 꾸 면 입력,바 인 딩 파일 이나 장 치 를 출력 합 니 다.현재 의 그 명령 만 유효 하 다.바 인 딩 후 다음 명령 을 모두 지원 해 야 한다 면.exec 명령 으로
실례:

[chengmo@centos5 shell]$ exec 6>&1
#      fd 6  
 
[chengmo@centos5 shell]$ ls  /proc/self/fd/ 
0  1  2  3  6
#       6
 
[chengmo@centos5 shell]$ exec 1>suc.txt
#            ,   suc.txt  (      )
 
[chengmo@centos5 shell]$ ls -al
#    ,         ,           suc.txt   
 
[chengmo@centos5 shell]$ exec 1>&6
#      
 
 
[chengmo@centos5 shell]$ exec 6>&-
#  fd 6   
 
[chengmo@centos5 ~]$ ls /proc/self/fd/
0  1  2  3
설명:사용 하기 전에 표준 입력 을 파일 설명자 6 에 저장 합 니 다.이 설명 에서 파일 설명 자 는 기본적으로 0,1,2 를 열 고 사용자 정의 설명 자 를 사용 할 수 있 습 니 다.그리고 표준 출력 을 파일 에 연결 하면 모든 출력 이 파일 에 발생 합 니 다.사용 후 표준 출력 을 복원 하고 파일 설명자 6 을 닫 습 니 다.
재 미 있 는 일:
친구 가 이렇게 사용 할 수 있 습 니 다:exec 1>suc.txt,다음 모든 출력 은 suc.txt 파일 에 연결 되 어 있 습 니 다.그러면 어떻게 원래 의 것 을 복원 합 니까?해 보면 문제 가 있 을 거 야..
복잡 한 실례

exec 3<>test.sh;
#  test.sh     ,      3  
 
while read line<&3
 do
    echo $line;
done
#         3(    test.sh  )
exec 3>&-
exec 3<&-
#     ,  ,    
요약:
공 부 는 총 결 되 어야 총 결 이 향상 된다.하하!
어 지 러 운 친구 들 도 있 을 거 야.어떻게 Liux 의 재 설정 이 이렇게 복잡 합 니까?파일 이 설명 자 를 열 고 읽 습 니 다.그리고 기본 적 인 표준 입 출력 도 있 습 니 다.
사실은 정리 해 보면 방향 을 바 꾸 는 응용 은 보통 다음 과 같은 두 가지 가 있다.
1.명령 의 기본 입력,출력 을 재 설정 하고 자신의 파일(파일,파일 설명자,장 치 는 모두 파일 입 니 다.Liux 는 장치 기반 도 파일 이 고 설명자 도 파일 을 가리 키 기 때 문 입 니 다.하하)
2.새로운 설명 자 를 확장 하여 파일 읽 기와 쓰기 작업 을 합 니 다.

좋은 웹페이지 즐겨찾기