Linux - IO 리 셋 및 파이프

5402 단어
1. 입 출력
  • 표준 입력 stdIN 파일 설명자: 0, 기본 값: 키보드 입력
  • 표준 출력 stdOUT 파일 설명자: 1, 기본 값: 화면 출력
  • 오류 출력 stdERR 파일 설명자: 2, 기본 값: 화면 출력
  • 2. 표준 출력 재 설정
  • 덮어 쓰기 출력 >
  • 추가 출력 >>
  • 메모: 셸 의 내장 명령 set 는 존재 하 는 파일 로 출력 을 변경 할 수 있 는 지 설정 할 수 있 습 니 다.
    set -C:禁止输出重定向至已存在的文件
    set +C:允许输出重定向至已存在的文件
    

    예제: 표준 출력 을 파일 로 재 설정 합 니 다 (실제 동작: 파일 을 만 든 다음 표준 출력 내용 을 기록 합 니 다)
    [root@VM_41_201_centos ~]# ls -m
    anaconda-ks.cfg, sh
    [root@VM_41_201_centos ~]# ls -m > ls.txt
    [root@VM_41_201_centos ~]# cat ls.txt
    anaconda-ks.cfg, ls.txt, sh
    [root@VM_41_201_centos ~]# ls -m >> ls.txt
    [root@VM_41_201_centos ~]# cat ls.txt
    anaconda-ks.cfg, ls.txt, sh
    anaconda-ks.cfg, ls.txt, sh
    [root@VM_41_201_centos ~]#
    

    3. 오류 출력 재 설정
  • 덮어 쓰기 출력 2 >
  • 추가 출력 2 >>
  • 예제: 오류 출력 을 파일 로 다시 설정 합 니 다.
    [root@VM_41_201_centos ~]# lss 2> ls.error
    [root@VM_41_201_centos ~]# cat ls.error
    -bash: lss: 未找到命令
    [root@VM_41_201_centos ~]# lss 2>> ls.error
    [root@VM_41_201_centos ~]# cat ls.error
    -bash: lss: 未找到命令
    -bash: lss: 未找到命令
    [root@VM_41_201_centos ~]#
    

    4. 표준 출력 과 오류 출력 을 합 쳐 방향 을 바 꿉 니 다.
  • 출력 덮어 쓰기 & >
  • COMMAND &> 文件  
    COMMAND > 文件 2>&1    #不推荐这种形式,难记,不好理解
    COMMAND > 文件A 2> 文件B
    
  • 추가 출력 & >
  • COMMAND &>> 文件  
    COMMAND >> 文件 2>&1    #不推荐这种形式,难记,不好理解
    COMMAND >> 文件A 2>> 文件B
    

    예제: 표준 출력 과 오류 출력 을 합 쳐 방향 을 바 꿉 니 다.
    # 标准输出
    [root@VM_41_201_centos ~]# ls -m
    anaconda-ks.cfg, ls.error, ls.txt, sh
    
    # 标准输出重定向到文件
    [root@VM_41_201_centos ~]# ls -m &> ls.txt
    [root@VM_41_201_centos ~]# cat ls.txt
    anaconda-ks.cfg, ls.error, ls.txt, sh
    
    # 错误输出重定向到文件(追加)
    [root@VM_41_201_centos ~]# lss &>> ls.txt
    [root@VM_41_201_centos ~]# cat ls.txt
    anaconda-ks.cfg, ls.error, ls.txt, sh
    -bash: lss: 未找到命令
    
    # 合并标准输出与错误输出(标准输出,覆盖)
    [root@VM_41_201_centos ~]# ls -m > ls.txt 2>&1
    [root@VM_41_201_centos ~]# cat ls.txt
    anaconda-ks.cfg, ls.error, ls.txt, sh
    
    # 合并标准输出与错误输出(错误输出,覆盖)
    [root@VM_41_201_centos ~]# lss > ls.txt 2>&1
    [root@VM_41_201_centos ~]# cat ls.txt
    -bash: lss: 未找到命令
    
    # 合并标准输出与错误输出(错误输出,追加)
    [root@VM_41_201_centos ~]# lsss >> ls.txt 2>&1
    [root@VM_41_201_centos ~]# cat ls.txt
    -bash: lss: 未找到命令
    -bash: lsss: 未找到命令
    
    # 合并标准输出与错误输出(错误输出,追加 ,另一种方式)
    [root@VM_41_201_centos ~]# lsls &>> ls.txt
    [root@VM_41_201_centos ~]# cat ls.txt
    -bash: lss: 未找到命令
    -bash: lsss: 未找到命令
    -bash: lsls: 未找到命令
    [root@VM_41_201_centos ~]#
    
    #使用COMMAND > 文件A 2> 文件B、COMMAND >> 文件A 2>> 文件B的形式
    [root@VM_41_201_centos ~]# ls
    anaconda-ks.cfg  ls.error  ls.txt  sh  tee.txt
    [root@VM_41_201_centos ~]# ls -m > A 2> B
    [root@VM_41_201_centos ~]# ls -m
    A, anaconda-ks.cfg, B, ls.error, ls.txt, sh, tee.txt
    [root@VM_41_201_centos ~]# cat A
    A, anaconda-ks.cfg, B, ls.error, ls.txt, sh, tee.txt
    [root@VM_41_201_centos ~]# cat B
    [root@VM_41_201_centos ~]# sl -m > A 2> B
    [root@VM_41_201_centos ~]# cat A
    [root@VM_41_201_centos ~]# cat B
    -bash: sl: 未找到命令
    [root@VM_41_201_centos ~]# lss -m >> A 2>> B
    [root@VM_41_201_centos ~]# cat B
    -bash: sl: 未找到命令
    -bash: lss: 未找到命令
    [root@VM_41_201_centos ~]#
    

    5. 재 설정 입력
    입력 의 방향 을 바 꾸 는 것 을 비교 해 보면 비교적 간단 하고 상대 적 으로 적 게 사용한다.
    일반 용법: 파일 을 입력 으로 명령 으로 바 꿉 니 다.
    命令 < 文件
    

    예제: 파일 입력 을 명령 wc 통계 파일 줄 로 재 설정 합 니 다:
    [root@VM_41_201_centos ~]# wc -l < anaconda-ks.cfg
    148
    [root@VM_41_201_centos ~]#
    

    6. 파이프
    파 이 프 는 여러 명령 (프로그램) 을 연결 하 는 데 사 용 됩 니 다. 이전 명령 의 결 과 를 다음 명령 으로 입력 합 니 다.
    COMMAND1 | COMMAND2 | COMMAND3 | ...
    

    예제: 파일 내용 을 파 이 프 를 통 해 명령 으로 재 설정 합 니 다 (그 효 과 는 입력 재 설정 과 유사 합 니 다)
    [root@VM_41_201_centos ~]# cat anaconda-ks.cfg | wc -l
    148
    [root@VM_41_201_centos ~]#
    

    7. 관련 명령
    아래 의 몇 가지 명령 은 자주 IO重定向(> >> 2> 2>> &> &>> )管道(|) 와 결합 하여 사용한다.
    7.1 tee 표준 입력 에서 읽 기, 표준 출력 과 파일 쓰기
    tee 명령 은 비교적 특수 합 니 다. 표준 입력 에서 표준 출력 을 읽 고 기록 하 며 파일 을 기록 합 니 다 (동시에 3 가지 일 을 했 습 니 다. 1 화살 3 조각).
    예시
    tee 명령 실행 결 과 는 지정 한 파일 로 출력 되 었 고 terminal 로 출력 되 었 습 니 다.
    [root@VM_41_201_centos ~]# ls
    anaconda-ks.cfg  ls.error  ls.txt  sh
    [root@VM_41_201_centos ~]# ls -m | tee tee.txt
    anaconda-ks.cfg, ls.error, ls.txt, sh
    [root@VM_41_201_centos ~]# cat tee.txt
    anaconda-ks.cfg, ls.error, ls.txt, sh
    [root@VM_41_201_centos ~]#
    

    7.2 tr - 문자 교체 또는 삭제
    문법
    tr [OPTION]... SET1 [SET2]
    

    옵션
    -c  使用SET1的补集;
    -d  删除SET1中的字符;
    -s  把连续重复的字符以单独一个字符表示;
    -t  替换SET1中SET2长度的字符。
    

    예시
    # 将大写字母替换成小写字母
    [root@localhost ~]# echo "Hello World" | tr 'A-Z' 'a-z'
    hello world
    # 删除大写字母
    [root@localhost ~]# echo "Hello World" | tr -d [:upper:]
    ello orld
    # 替换部分字符
    [root@localhost ~]# echo "Hello World" | tr -t 'Hello' 'xx'
    xxllo World
    

    7.3 재 정립 분계 부 를 입력 하 십시오: <<
    사용자 가 입력 한 내용 이 일치 할 때 까지 계속 입력 할 수 있 도록 합 니 다 <
    # EOF可以用其它字符代替,习惯用EOF,end of file
    命令 << EOF
    

    예시:
    [root@VM_41_201_centos ~]#
    [root@VM_41_201_centos ~]# cat << EOF
    > 1.a
    > 2.b
    > 3.c
    > EOF
    1.a
    2.b
    3.c
    [root@VM_41_201_centos ~]#
    

    좋은 웹페이지 즐겨찾기