>  기사  >  운영 및 유지보수  >  입력 및 출력, 리디렉션, 파이프라인의 예

입력 및 출력, 리디렉션, 파이프라인의 예

零下一度
零下一度원래의
2017-06-30 15:49:422904검색
1, 입력 및 출력, 리디렉션, 파이프라인
2, <(cmd);>(cmd)
3,>;<;>>;<<; >> 1. 입력 및 출력, 리디렉션, 파이프라인
1. Linux 프로그램에는 다음과 같은 세 가지 표준 입력 및 출력이 있습니다.
숫자 0으로 표시되는 표준 입력은 다음과 같이 키보드에 연결됩니다. 기본적으로 프로그램은 일반적으로 사용자 입력을 얻는 데 사용됩니다.
숫자 1로 표시되는 표준 출력은 기본적으로 화면에 연결되며 프로그램은 일반적으로 정보를 출력하는 데 사용됩니다.
표준 오류로 표시됩니다. 숫자 2는 기본적으로 화면에 연결되어 있으며 일반적으로 프로그램을 사용하여 오류 메시지를 출력합니다.
분석:
passwd 명령은 표준 입력에서 사용자 비밀번호를 읽으므로 사용자는 키보드
echo 명령은 결과를 표준 출력으로 출력하므로 결과를 화면에서 볼 수 있습니다
일반 사용자는 /root 디렉토리를 볼 수 있는 권한이 없으므로 오류가 발생하므로 ls는 오류 메시지를 표준 오류, 즉 화면
2, >>
> 원본 데이터를 삭제하고 새 데이터를 씁니다
>>
3, /dev/null
통칭: 휴지통 파일
# echo hello world > /dev/null -- 리디렉션 이 파일의 데이터는 커널에 의해 삭제되었습니다. 이 기능을 사용하여 특정 출력 정보를 차단하세요# ls / /root 2> /dev/null - 명령의 오류 메시지를 보호하세요
4. 출력 리디렉션
사용자는 기본 입력 및 출력 방향을 수정할 수 있습니다. 필요에 따라
# ls -l > test
# ls -l 1> test -- 둘 다 표준 출력을 테스트 파일로 리디렉션합니다. 즉, 기본값 1은 생략할 수 있습니다
# ls /jjjj 2> test --표준 오류를 테스트 파일로 리디렉션# ls / /jjjj 1>out 2>
# ls /jjjj / > std 2>&1 -- 표준 오류를 표준 출력에 병합하고 파일로 리디렉션합니다.
# ls /jjjj / &> std --결과는 이전 명령문과 동일하며 더 간결합니다.
# ls /jjjj / &>> 표준 출력 및 표준 오류를 파일로 리디렉션합니다.
5, 표준 입력 리디렉션
   # cat 0< /etc/passwd
  # cat < /passwd
  # cat /etc/passwd --cat 명령의 표준 입력은 /etc/passwd
6, Pipe
파일에서 옵니다. 위에 설명된 리디렉션은 표준 입력입니다. 입력 및 출력은 다음에 연결됩니다. 파일.
또한 여러 프로그램 간에 표준 입력과 출력을 연결하여 명령 간에 데이터를 전송할 수 있습니다. 이 기술은 파이프라인이라고 생생하게 표현됩니다. 프로그램의 출력은 끝에서 시작하여 파이프에 물이 흐르는 것과 같습니다. 맨 오른쪽에 있는 프로그램으로 흐릅니다. 파이프는 Linux 셸에서 매우 일반적인 기술입니다. 파이프 기술을 사용하면 여러 개의 작은 도구를 함께 사용하여 매우 복잡하고 강력한 기능을 완성할 수 있습니다.
# cat /etc/passwd | head -n 3 --왼쪽 명령의 표준 출력이 오른쪽 명령의 표준 입력으로 사용됩니다.
# cat /etc/passwd head -n 3 | tail -n 1
7. 표준 입력 및 출력에 대한 심층적 논의
표준 입력 및 출력은 프로그램을 위해 기본적으로 생성되는 세 가지 파일 설명자입니다. 그러나 이는 필수는 아닙니다. 즉, 프로그램은 이 세 가지 표준 파일 설명자를 사용할 수 없지만 사용할 새 파일 설명자를 엽니다. 프로그램이 표준 입력 및 출력을 사용하지 않으면 여기에 사용된 리디렉션이 작동하지 않습니다.
예:
passwd: 프로그램은 표준 입력에서 사용자 비밀번호를 읽으므로 표준 입력을 리디렉션하여 비밀번호를 제공할 수 있습니다.
ssh: 명령은 원격 로그인을 위한 프로그램이며 사용자를 읽습니다. 비밀번호를 입력하면 표준 입력은 사용되지 않으므로 표준 입력을 리디렉션하여 비밀번호를 제공할 수 없습니다
8. 프로세스의 표준 입력 및 출력에 연결된 파일을 확인하세요
# sleep 999 1> 2>&1 --한 터미널에서 명령 실행
# pgrep -x sleep --다른 터미널에서 sleep의 프로세스 ID 찾기
# lsof -anop 16715 -d 0,1,2 --열린 파일 보기 프로세스별로
9 리디렉션 타이밍을 확인하세요
# vim file
# cat -n file > file -- cat이 각 줄 앞에 줄 번호를 추가한 다음 결과를 리디렉션할 것으로 예상합니다. 원본 파일로 되돌립니다. file
# cat 파일 -- 비어 있습니다
이유: 쉘은 명령을 실행하기 전에 먼저 리디렉션 작업을 수행합니다. 두 번째 명령에서는 먼저 > 파일을 실행합니다. 리디렉션 작업으로 파일을 지운 다음 파일을 삭제하면 당연히 콘텐츠가 표시되지 않습니다
$ sudo ls /root > /root/ls.log --이 예에서는 사용자에게 기회가 없습니다. 비밀번호를 입력하려면 리디렉션 작업이 먼저 실행되므로 현재 사용자는 일반 사용자이며 /root/ls.log 경로에 파일을 생성할 수 없습니다. bash: /root/ls. 로그: 권한이 거부되었습니다. 현재는 sudo 명령이 실행되지 않았으므로 비밀번호를 입력할 기회가 없습니다
2. <(cmd);
2로 표준 입력을 리디렉션합니다. 프로세스 교체로 표준 출력 리디렉션
3. 프로세스 교체
프로세스의 표준 출력은 임시 파일에 저장되어 반환됩니다. 임시 파일의 경로 <()를 사용해야 할 때. 프로그램을 출력했지만 중간 파일을 생성하고 싶지 않은 경우 프로세스 교체 사용을 고려할 수 있습니다
# Paste <(seq $(wc -l /etc/passwd | cut - d" " -f1)) <( awk -F: '{print $1}' /etc/passwd)
# 붙여넣기 <(seq 26) <(awk -F: '{print $1}' /etc /passwd) --이 두 가지를 비교할 수 있습니다 명령
3.>;<;>>;<<;>><<<
1, > 생성(존재하는 경우 덮어쓰기)
# echo 'hello world' > test -- 테스트가 없으면 생성하고, 있으면 내용을 덮어씁니다.
2, < ; file
# less < /etc/passwd --/etc/passwd의 내용을 도구에 입력 less
# cat <(ls /) --여기에서 명령 대체가 사용됩니다
# wc - l < $(echo /etc/passwd)# wc -l <(cat /etc/passwd) -- 여기서는 프로세스 대체가 사용됩니다
3, > ;> 생성합니다(존재하는 경우 파일 끝에 추가)
# echo 'hello george' >> george -- george가 존재하지 않으면 생성하고, 존재하는 경우 내용을 추가합니다. 파일 끝
4. << Here 문서
4.1에 사용되는 리디렉션
은 Linux Shell의 특별한 리디렉션 방법입니다.
cmd << delimiter
Here Document Content
delimiter
: << delimiter --shell 배치 주석
Here Document Content
delimiter
기능: 두 개의 구분 기호 콘텐츠( 여기 문서 내용)이 입력 매개변수로 cmd에 전달됩니다
# cat <> two
>
EOF -- 단순한 로고이며 유효한 문자로 대체할 수 있습니다.
> -- 이 기호는 입력 정보를 묻는 메시지를 표시하기 위해 터미널에서 생성된 식별자입니다.
구분 기호 앞에는 대문자로 작성됩니다. 뒤에는 공백을 포함하여 어떤 문자도 올 수 없습니다.
4.3, shell
# vim here.sh --
참고: 변수를 사용할 수도 있습니다
#!/ bin/bash
cat << EOF > output.sh
echo "hello"
echo "world"
echo $1
EOF
# chmod a+x here.sh
# ./ here.sh george
# cat 출력. sh -- 여기에서 $1이 스크립트의 매개변수로 확장됩니다.
참고:
이 변수를 확장하지 않으려면 큰따옴표를 사용해야 합니다. 첫 번째 EOF를 둘러싸십시오.
4.4, <<-
여기 문서 또 다른 사용법은 '<<'를 '<<-'로 변경하는 것입니다. <<- 사용 시 유일한 변경 사항은 Here 문서 내용 부분의 각 줄 앞에 있는 탭(탭 문자)이 삭제된다는 것입니다. 이 사용법은 Here 문서를 작성할 때 내용 부분을 들여쓰기하기 위한 것입니다. 문서. 코드5, <<< --Redirect, for Here string
# wc -l <<< "$(ls -l /home)"
# 읽는 동안 #!/bin/bash
읽는 동안 line
do
if [ "${line#ftp:}" != "$line" ];then
awk -F: '{print $6 }' << $line
break
fi
done < /etc/passwd
참고: /etc/passwd 파일의 각 줄을 반복하고, ftp 사용자인 경우 홈 디렉터리를 인쇄하고 루프를 종료합니다
${line#ftp:}: ftp: 특정 줄의 시작 부분에서 일치한 다음 줄의 일치하지 않는 부분만 가져옵니다
# chmod a; +x string.sh
# ./string.sh
4. 텍스트 처리_1: cat;head;tail;cut;wc;sort;uniq;tr;tac;rev
텍스트 처리는 작업입니다. 모든 시스템 관리자가 자주 접하게 되는 내용입니다. 핵심 내용은 여러 도구를 유연하게 결합하여 작업을 완료하는 것입니다
1. 더 많은 파일을 순서대로 추가하여 표준 출력으로 출력합니다
# cat -n /etc/passwd --파일 내용을 표시하고 줄 번호를 추가합니다
# cat -A /etc/passwd --보이지 않는 일부 문자를 인쇄하고 위치 표시# cat 1.txt 2.txt > test.txt -- 파일 병합
2, head -- 파일 헤더 읽기
# head -n 3 /etc/passwd -- 첫 번째 읽기 파일의 세 줄 /etc/passwd
# head -n -1 file -- 파일의 마지막 줄 삭제 # head -c 3 /etc/passwd -- /etc/passwd 파일의 처음 3바이트 읽기
# head -c -3 file -- 파일의 마지막 3바이트 삭제
# head -c 10m /dev/urandom > big --10M 파일 만들기
3, tail --다음의 꼬리 읽기 the file
#
tail -n 3 /etc/passwd --파일의 마지막 세 줄을 읽습니다. /etc/passwd
# tail -n +28 /etc/passwd --28줄부터 끝까지 읽습니다. 파일의 처음 27줄을 삭제합니다
# tail -c 3 /etc/passwd --/etc/passwd 파일의 마지막 3바이트를 읽습니다.
# tail -c +28 /etc/passwd --28번째 바이트부터 파일 끝까지 읽습니다. 헤더의 27바이트를 삭제합니다.
# tail -f /etc/passwd --끝 부분의 내용을 추적합니다. 로그 파일의 변경 사항을 관찰하는 데 자주 사용되는 파일 변경 사항, 매우 실용적입니다.
4. cut - 이 기능은 awk와 비슷하지만 awk만큼 강력하고 복잡하지는 않습니다. 데이터를 열로 출력하려는 ​​경우 awk를 사용하세요. 자주 사용되며, 자르는 시간이 많지 않습니다
공통 옵션 :
-d --구분자 정의
-b --지정된 위치의 바이트를 출력
- c --지정된 위치의 문자 출력
# echo "a;b;c d;e" | cut -d ";" -f1,3,4 -- -d는 구분 기호를 정의합니다(기본값은 TAB). - f 출력 해당 필드 정의
# cat -n /etc/passwd | cut -d $'n' -f1,3-5,7 -- 개행 문자를 구분 기호로 사용
# echo 저는 중국인입니다 | cut -b1-3 -- -b는 지정된 위치에 바이트를 출력합니다. utf8 한자는 3바이트를 차지합니다.
# echo I am Chinese 컷 -c2-4 -- -c -b와의 차이점은 영어가 아닌 문자를 처리할 때입니다.
# echo 용감한 중국어를 하세요 | cut -b1-2,9 -- "가짜" 문자를 출력합니다
# echo -n Brave Chinese | xxd -- 3바이트 1, 2, 9는 다음과 같습니다. e581 87
# echo -n false | xxd -- 그리고 "false"도
5. wc - 개수를 계산합니다. 데이터의 바이트, 문자, 단어 및 줄
공통 옵션:
-c - 바이트 수 계산
-m - 문자 수 계산
-w -- 계산 단어 수
-l -- 줄 수 계산
# echo -n 저는 중국인입니다 | wc -c -- -c 바이트 수 계산, 5 utf8 중국어는 15바이트를 차지합니다
# echo -n 나는 중국인이다 | wc -m -- -m은 문자 수를 계산합니다. -c와의 차이점은 cut
# echo -n 나는 중국인입니다 | -- -w는 단어 수를 세는데 구분 기호가 없습니다. 5개의 한자가 한 단어로 계산됩니다. 이는 소위 중국어의 "단어"와 다릅니다
# echo -n 대문자 CHINESE | w --두 단어
# echo -n 대문자 CHINESE | wc -c --17 영어 바이트, -n 제외 18 (개행 문자가 있기 때문에)
# echo -n 대문자 CHINESE | wc -m --영문 17자, -n이 없으면 18자(개행 문자가 있기 때문)
# wc -l /etc/passwd -- -l은 줄 수를 계산합니다
6. sort -- 행별로 파일 정렬
공통 옵션:
-t --구분 기호 지정
-k --정렬 필드 지정
-u -- 중복된 줄 제거
-n, -h --값으로 정렬
-r --역방향 정렬
# cut -d ":" -f7 /etc/passwd | -u 중복된 줄 제거
# echo -e "1n2n10" | sort
# echo -e "1n2n10" | sort -n -- -n 숫자 값으로 정렬, K, M, G 등을 처리할 수 없습니다.
# ls -lh | tail -n +2 | sort -k5,5n -- -k는 정렬할 필드를 지정합니다.
# ls -lh | tail -n +2 | 숫자 값으로 정렬하는 경우 K, M, G와 같은 단위 문자를 처리할 수 있습니다.
# head -4 /etc/passwd | sort -t: -k7,7 -- -t는 필드 구분자로 콜론을 사용합니다. 7 필드 정렬
# head -4 /etc/passwd | sort -t: -k7,7 -k3,3n -- 먼저 7번째 필드로 정렬하고, 7번째 필드가 동일하면 3번째 필드로 정렬합니다. field
# echo -e "1n2n3" | sort -nr -- -r 정렬 반전
# head -4 /etc/passwd | sort -t: -k7,7 -k3,3nr -- 3번째 반전 하나의 필드 정렬, 두 필드를 동시에 뒤집을 수도 있습니다
7. uniq --연속 중복 행 제거
공통 옵션:
-c --중복 행 수 계산
# echo -e "1n1n2n1" | uniq -- 두 개의 1이 불연속이므로 결과에는 여전히 두 개의 1이 있습니다.
# echo -e "1n1n2n1" | sort -u -- 중복을 제거하기 위해 정렬이 연속될 필요는 없습니다.
# cut -d: -f7 /etc/passwd | sort | uniq -c -- sort 명령 예를 기반으로 다양한 로그인 쉘의 발생 횟수를 계산합니다.
8, tr --변환, 삭제, 축소 같은 문자
일반적으로 사용되는 옵션:
-d --delete, 일치하는 모든 문자 삭제
-s --reduce, 같은 문자 줄이기
형식: tr SET1 SET2
참고: 세트 1의 문자를 세트 2의 해당 문자로 변환하므로 원칙적으로 두 세트의 문자 수는 동일해야 합니다. 두 세트 문자 수가 같지 않으면 프로그램에서 오류가 발생하지 않습니다. 이 경우 결과에 주의하세요. 핵심 사항:
a 및 tr은 두 세트에 어떤 문자가 있는지 상관하지 않고 단순히 해당 위치의 문자를 하나씩 교체합니다.
b 및 tr은 단일 문자를 교체하고 문자열
# echo abc | tr a-z A-Z -- 26개의 소문자를 해당 대문자로 변환
# echo abc | tr ab BA -- a와 b를 각각 B와 A로 변환
# echo 좋은 사람들 좋은 일을 하세요 | tr 좋거나 나쁘다 - "good"은 "bad"로 변환됩니다
# echo abcdefg | tr a-z AB --세트 2가 더 짧고, 프로그램은 자동으로 세트 2의 마지막 문자를 사용합니다
# echo abcdefg | tr a-b A-Z -- 세트 2가 길면 프로그램이 자동으로 세트 2를 짧게 자릅니다
# echo Abc | tr a-zA-Z A-Za-z --영어 글자 크기를 반전시킵니다
# echo hello world | tr -d ow -- -d 일치하는 모든 문자 삭제
# echo 0123456789 | tr -d 13579
# tr -d '
# head -c 3m bigfile > file1 --첫 번째 3M 데이터를 file1로 가져오기
# tail -c 4m bigfile > file3 --마지막 3M 데이터를 file3
# head -c 6m bigfile | c 3m > file2 -- 중간 4M 데이터를 file2로 가져옵니다
# ls -lh file*
# cat file1 file2 file3 > cat을 사용하여 세 개의 파일을 새로운 대용량 파일로 병합합니다
# md5sum newbigfile bigfile --명령을 사용하여 이전 대용량 파일과 새 대용량 파일의 md5sum 값을 비교

위 내용은 입력 및 출력, 리디렉션, 파이프라인의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.