Busybox
버전을 사용하여 루트 파일 시스템을 사용자 정의했습니다 . 1.36.1
모니터 키보드에 IP를 ctrl+c
입력할 ping
때 장치를 종료할 수 없는 이유를 모르겠습니다. 그런데 SSH를 통해 기기에 연결하면 IP가 ping
?로 종료될 수 있습니다. ctrl+c
마찬가지이다 ctrl+u
.
나는 언급했다유제, 그러나 내 문제가 해결되지 않았습니다.
그런데 내 시스템에는 데스크탑 환경이 없습니다. 내 프로세서는 Intel x86_64 비트입니다.
#1 #stty -a(SSH 연결)
speed 38400 baud; rows 41; columns 143; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
#stty -a(모니터 키보드)
speed 38400 baud; rows 37; columns 100; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc
#2 #cat /etc/inittab (이전)
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
#cat /etc/inittab (신규)
::sysinit:/etc/init.d/rcS
tty1::respawn:/sbin/getty 38400 tty1
tty2::respawn:/sbin/getty 38400 tty2
tty3::respawn:/sbin/getty 38400 tty3
tty4::respawn:/sbin/getty 38400 tty4
tty5::respawn:/sbin/getty 38400 tty5
tty6::respawn:/sbin/getty 38400 tty6
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
#3 #echo $SHELL(SSH 연결)
/bin/bash
#echo $SHELL(모니터 키보드)
/bin/sh
#4 #echo $TERM (SSH 연결)
xterm
#echo $TERM(모니터 키보드)
xterm
#5 #tty(SSH 연결)
/dev/pts/0
#tty(모니터 키보드)
/dev/console
#6 #ls -l /dev/console /dev/tty[0-9]
crw-rw---- 1 root root 5, 1 Jan 4 04:31 /dev/console
crw-rw---- 1 root root 4, 0 Jan 4 04:31 /dev/tty0
crw-rw---- 1 root root 4, 1 Jan 4 04:32 /dev/tty1
crw-rw---- 1 root root 4, 2 Jan 4 04:31 /dev/tty2
crw-rw---- 1 root root 4, 3 Jan 4 04:31 /dev/tty3
crw-rw---- 1 root root 4, 4 Jan 4 04:31 /dev/tty4
crw-rw---- 1 root root 4, 5 Jan 4 04:31 /dev/tty5
crw-rw---- 1 root root 4, 6 Jan 4 04:31 /dev/tty6
crw-rw---- 1 root root 4, 7 Jan 4 04:31 /dev/tty7
crw-rw---- 1 root root 4, 8 Jan 4 04:31 /dev/tty8
crw-rw---- 1 root root 4, 9 Jan 4 04:31 /dev/tty9
답변1
"모니터 키보드" stty -a
출력에는 이 있으며 -isig -icanon -iexten
SSH 세션에는 이러한 기능이 활성화되어 있습니다( -
앞에 플래그가 없음).
man stty
다음과 같이 설명됩니다 .
[-]icanon
특수 문자 활성화: erase, kill, wasase, rpnt
[-]iexten
POSIX가 아닌 특수 문자 활성화
[-]isig
인터럽트 활성화, 종료 및 특수 문자 일시 중단
따라서 -isig
Control-C, Control-\ 및 Control-Z의 특수 기능은 다음과 같습니다.폐쇄. 마찬가지로 , , 등 의 -icanon
기능 도 적용되지 않습니다. 모니터 키보드 세션으로 이 문제를 해결할 수 있습니다 .erase
kill
werase
rprnt
stty isig icanon
이는 로그인 프로세스 초기에 TTY 장치 설정을 잘 알려진 값으로 초기화하는 유사한 프로세스를 사용하지 않고 /bin/sh
직접 부팅했기 때문일 수 있습니다 ./etc/inittab
getty
inittab
로그인하지 않고 직접 쉘을 실행하려면 필요한 TTY 초기화를 직접 수행해야 합니다 /etc/init.d/rcS
. 예를 들면 다음과 같습니다.
for i in 1 2 3 4 5 6; do
stty -F /dev/tty$i isig icanon
done
SSH 세션에서는 의사 TTY 장치(간단히 PTY)가 사용되고 sshd
자동으로 초기화됩니다.
/dev/console
명령 출력 결과가 tty
약간 의심스럽기 때문입니다. 본질적 으로 적어도 x86 아키텍처에서는 /dev/console
현재 활성 콘솔 장치에 대한 호환성 별칭입니다. 일반적으로 (즉, 현재 활성 KVM 가상 콘솔)에 연결될 수 있지만 커널 부팅 옵션 /dev/tty0
처럼 사용되는 직렬 포트를 가리킬 수도 있습니다 ./dev/ttyS0
console=
커널에 다음 구성 옵션이 모두 활성화되어 있습니까?
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
- 또는 클래식 BIOS 또는 UEFI 와 같은 적절한 프레임 버퍼 콘솔 드라이버
CONFIG_VGA_CONSOLE=y
및 /또는 콘솔에서 최신 직접 렌더링 GPU 드라이버를 사용하는 경우 가능합니다.CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FB_VESA=y
CONFIG_FB_EFI=y
CONFIG_DRM_FBDEV_EMULATION=y
콘솔 장치 노드 설정이 정확합니까? Debian 12 시스템에는 ls -l /dev/console /dev/tty[0-9]
다음과 같은 출력이 있습니다.
crw--w---- 1 root tty 5, 1 Nov 10 02:26 /dev/console
crw--w---- 1 root tty 4, 0 Nov 10 02:25 /dev/tty0
crw--w---- 1 root tty 4, 1 Jan 30 13:37 /dev/tty1
crw--w---- 1 root tty 4, 2 Nov 10 02:25 /dev/tty2
crw--w---- 1 root tty 4, 3 Nov 10 02:25 /dev/tty3
crw--w---- 1 root tty 4, 4 Nov 10 02:25 /dev/tty4
crw--w---- 1 root tty 4, 5 Nov 10 02:25 /dev/tty5
crw--w---- 1 root tty 4, 6 Nov 10 02:25 /dev/tty6
crw--w---- 1 root tty 4, 7 Nov 10 02:26 /dev/tty7
crw--w---- 1 root tty 4, 8 Nov 10 02:25 /dev/tty8
crw--w---- 1 root tty 4, 9 Nov 10 02:25 /dev/tty9
권한과 소유권은 현재 로그인과 배포판에서 이를 처리하는 방법에 따라 달라질 수 있지만 주/부 장치 번호(쉼표와 공백으로 구분된 두 자리)는 정확히 동일해야 합니다.