linux 셸 데이터 리 셋(입력 리 셋 과 출력 리 셋)상세 분석
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]
실례:
[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.새로운 설명 자 를 확장 하여 파일 읽 기와 쓰기 작업 을 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.