chmod 000 / dev / stdin이 터미널을 영구적으로 비활성화합니까?


12

나는 질문을 통해 일하고 있어요 유닉스 교과서 (8 장, # 16, 207 페이지) :

및 명령 과 chmod동일한 작업을 수행하는 명령 줄을 제공하십시오 . (힌트 : 터미널을 포함한 모든 하드웨어 장치는 디렉토리에 관련 파일이 있습니다.)mesg nmesg y/dev

대답은 다음과 같습니다.

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

하지만 사용하면 어떻게 될지 궁금합니다 chmod 000 /dev/stdin.

터미널에서 명령을 입력하지 못했습니까?


2
파일을 열 때만 권한이 확인된다는 것을 이해해야합니다. 따라서 쉘의 표준 입력이 무엇이든 관계없이 쉘과 터미널 에뮬레이터 또는 ssh 또는 이미 통신 채널을 열어 놓은 것이기 때문에 권한을 변경해도 명령을 입력하지 않아도됩니다. 터미널이 아직 열려 있지 않기 때문에 mesg n권한을 사용하여 미래 write에만 영향을 줄 수 있습니다 . write
zwol

답변:


20

아니, /dev/stdin하고 /dev/stdout잘못된 장치입니다. 이들은 터미널 장치가 아니며 각각 표준 입력 및 표준 출력의 별명입니다. 표준 입력과 표준 정의에 의해 출력되고, 파일 디스크립터 애플리케이션이 개방 될 것으로 기대하고 종래의 의미를 가지고 (각각의 파일 디스크립터 0, 1, 표준 오차이다도 2있다). 응용 프로그램에서 파일 이름이 필요한 경우 /dev/stdin와 같은 장치 /dev/stdout는 유용하지만 응용 프로그램 사용자는 파일을 열지 않고 특정 파일 설명자에 액세스하려고합니다. 유닉스 변종에 따라 장치 파일이 아닐 수도 있습니다. 예를 들어, Linux에서는 다음과 같은 심볼릭 링크입니다./proc/self/fd/0 그리고 친구들이며, 이는 프로세스가 해당 파일 디스크립터에서 이미 열어 놓은 모든 파일에 대한 "매직"심볼릭 링크입니다.

의 사용 권한을 변경 /dev/stdin하고 /dev/stdout에만이 파일 이름은 명시 적으로 사용하는 경우 발생하는 변경합니다. 터미널과 관련된 내용에는 영향을 미치지 않으며 특정 파일 이름을 열 때만 권한이 중요하므로 표준 입력 및 표준 출력의 일반적인 사용에는 영향을 미치지 않습니다.

어떤 mesg일은 프로세스의의 권한을 변경하는 제어 단자 . 터미널에서 실행되는 응용 프로그램의 경우 표준 입력, 표준 출력 및 표준 오류 (파일 설명자 0, 1 및 2)에서 터미널이 열립니다. 이 명령 tty을 사용하여 터미널 장치가 무엇인지 확인할 수 있습니다 . mesg n동등 chmod g-w "$(tty)"mesg y동일하다 chmod g+w "$(tty)".


2
tty제어 터미널을보고하지 않지만 stdin에서 터미널이 열려있는 경우 열립니다. 그래서는 / dev / 표준 입력 장치 만의 파일 열 수있는 특별한 심볼릭 링크없는 경우 리눅스는 / dev / 표준 입력, chmot "$(tty)"등 더 많거나 적은 같은 것 chmod /dev/stdin(표준 입력이 tty 장치이며,의 모드를 변경하려고 할 경우 not a tty그렇지 않으면 현재 디렉토리 의 파일). /dev/$(ps -o tty= -p "$$")제어 터미널을 참조하십시오 .
Stéphane Chazelas 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.