Linux 의 2 > & 1 은 도대체 무엇 입 니까?
4549 단어 Shell
nohup command>/dev/null 2>&1 &
입 니 다. 현재 사용자 와 시스템 의 세 션 에서 프로 세 스 가 응답 HUP 메 시 지 를 무시 한 다 는 뜻 입 니 다.블랙홀그것 은 문서 만 쓰 는 것 과 같다.그 내용 을 쓰 면 영원히 잃 어 버 리 고 그 내용 을 읽 으 려 고 시도 하면 아무것도 읽 을 수 없다.
그럼 2 > & 1 은 또 무슨 뜻 이에 요?
몇 가지 기본 기호 와 그 의미:
nohup
부터 말하자면사실 이 명령 은 약어 판 으로 재 정립 명령 에 대해 서 는
command>/dev/null
이런 형식 이 분명 하 다. 그러면 a > b
command 가 a 의 역할 을 하 는 것 일 까? command > /dev/null
b 의 역할 을 하 는 것 일 까?이렇게 보면 비교적 합 리 적 으로 보이 지만 사실은 하나의 명령 은 a 를 충당 할 수 없 을 것 이다. 분명히 command 가 실행 하 는 출력 으로 a 를 충당 하 는 것 이 고 사실은 표준 출력 stdout 이다.그래서 /dev/null
집행 한 셈 이다 command > /dev/null
.command 를 실행 하면 표준 출력 stdout (1 로 표시) 을 만 들 고 command 1 > /dev/null
장치 파일 로 다시 설정 합 니 다.말 해 봐
/dev/null
위 2>&1
를 통 해 command > /dev/null
와 등가 하면 command 1 > /dev/null
에 대해 서도 이해 할 수 있다. 2 는 표준 오류 이 고 1 은 표준 출력 이다. 그러면 이 명령 은 표준 오 류 를 표준 출력 으로 바 꾸 는 것 과 같 지 않 느 냐?2>&1
와 2>1
의 서법 은 어떤 차이 가 있 습 니까?2>&1
의 역할 은 표준 오류 의 출력 을 1 로 바 꾸 는 것 이지 만 이 1 은 표준 출력 이 아니 라 파일 입 니 다!!!파일 이름 이 1 입 니 다.2>1
의 역할 은 표준 오류 의 출력 을 표준 출력 1 로 바 꾸 는 것 이다.2>&1
와 command>a 2>a
의 차이위의 분석 을 통 해
command>a 2>&1
이 명령 에 대해 등가 command>a 2>&1
는 command 를 실행 하 는 표준 입력 이 파일 a 로 바 뀌 었 고 표준 오류 도 파일 a 로 바 뀌 었 다 고 이해 할 수 있다.그럼 command 1>a 2>&1
등가 가 command 1>a 2>&1
라 고 해 야 하나 요?사실은 그렇지 않 습 니 다. command 1>a 2>a
와 command 1>a 2>&1
는 차이 가 있 습 니 다. 전 자 는 파일 a 를 한 번 만 열 고 후 자 는 파일 을 두 번 열 어서 stdout 이 stderr 에 의 해 덮어 씌 워 집 니 다.command 1>a 2>a
의 의 미 는 표준 출력 으로 의 인용 으로 이해 할 수 있 고 표준 출력 으로 열 린 a 를 참조 하 는 것 이다.IO 효율 로 볼 때 &1
는 command 1>a 2>&1
보다 효율 이 높다.왜 2 > & 1 을 뒤에 써 야 합 니까?
index.php task testOne >/dev/null 2>&1
우 리 는 왼쪽 이 표준 출력 이 라 고 이해 할 수 있다. 자, 현재 표준 출력 은
command 1>a 2>a
에 직접 입력 되 고 /dev/null
은 표준 오 류 를 표준 출력 으로 바 꾸 기 때문에 프로그램 이 잘못 되 었 을 때 오류 가 왼쪽으로 흐 르 는 것 과 같 고 왼쪽 은 2>&1
에 입력 되 어 있다.중간 에 쓰 면 표준 출력 을 차단 하 는 파일 로 이해 할 수 있다.
사용 할 수 있 습 니 다:
밤 을 들다
셸 하나 주세요.
//test.sh
#!/bin/sh
t
date
/dev/null
test. sh 에 실행 권한 을 추가 합 니 다.여기 서 우 리 는 두 가지 명령 을 구 했 습 니 다. 그 중에서 t 명령 은 존재 하지 않 습 니 다. 실행 하면 잘못 보고 하고 stderr 로 출력 합 니 다.날짜 가 정상적으로 실 행 됩 니 다. 실행 은 현재 시간 을 출력 하고 stdout 으로 출력 합 니 다.실행
chmod +x test.sh
결 과 는:stderr 가 res1. log 로 바 뀌 지 않 았 고 stderr 가 화면 에 인쇄 되 었 음 을 발 견 했 습 니 다.이 는 위 에서 말 한
./test.sh > res1.log
등가 가 ./test.sh > res1.log
임 을 한층 더 증명 했다.실행
./test.sh 1>res1.log
결 과 는:이번에 우 리 는 stdout 과 stderr 가 모두 res2. log 로 재 설정 되 었 다 는 것 을 발견 했다.위 에서 저 희 는 stderr, 즉 2 에 대해 어떻게 출력 하 는 지 설명 하지 않 았 습 니 다. stderr 는 화면 에 출력 되 었 습 니 다. 여기 서 저 희 는 stdout 에 대해 설명 할 뿐만 아니 라 res2. log 로 재 설정 되 었 습 니 다. 표준 오류 에 대해 서도 설명 을 했 습 니 다. res2. log 의 참조 인 res2. log 의 파일 설명 부호 로 재 설정 되 었 습 니 다.
다시 한 번 생각해 보 자.
왜
./test.sh>res2.log 2>&1
command > 1 뒤에 써 야 합 니까? 직접 2 로 써 도 됩 니까?예 를 들 면 2>&1
.사실 이러한 용법 도 가능 합 니 다. ls 명령 은 현재 디 렉 터 리 를 보 여 줍 니 다. stdout (1) 으로 표시 합 니 다. 이 때 stderr (2) 가 없 기 때문에 이 때 실행 ls 2>a
도 a 파일 을 정상적으로 만 들 수 있 습 니 다. 그러나 a 파일 은 비어 있 습 니 다. 이 때 ls 를 실행 하면 stderr (2) 가 발생 하지 않 았 기 때 문 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.