맞춤형 Linux 시스템은 crtl+c를 사용하여 ping 명령을 종료할 수 없습니까?

맞춤형 Linux 시스템은 crtl+c를 사용하여 ping 명령을 종료할 수 없습니까?

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 -iextenSSH 세션에는 이러한 기능이 활성화되어 있습니다( -앞에 플래그가 없음).

man stty다음과 같이 설명됩니다 .

[-]icanon
특수 문자 활성화: erase, kill, wasase, rpnt

[-]iexten
POSIX가 아닌 특수 문자 활성화

[-]isig
인터럽트 활성화, 종료 및 특수 문자 일시 중단

따라서 -isigControl-C, Control-\ 및 Control-Z의 특수 기능은 다음과 같습니다.폐쇄. 마찬가지로 , , 등 의 -icanon기능 도 적용되지 않습니다. 모니터 키보드 세션으로 이 문제를 해결할 수 있습니다 .erasekillweraserprntstty isig icanon

이는 로그인 프로세스 초기에 TTY 장치 설정을 잘 알려진 값으로 초기화하는 유사한 프로세스를 사용하지 않고 /bin/sh직접 부팅했기 때문일 수 있습니다 ./etc/inittabgetty

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/ttyS0console=

커널에 다음 구성 옵션이 모두 활성화되어 있습니까?

  • CONFIG_VT_CONSOLE=y
  • CONFIG_HW_CONSOLE=y
  • CONFIG_VT_HW_CONSOLE_BINDING=y
  • 또는 클래식 BIOS 또는 UEFI 와 같은 적절한 프레임 버퍼 콘솔 드라이버 CONFIG_VGA_CONSOLE=y및 /또는 콘솔에서 최신 직접 렌더링 GPU 드라이버를 사용하는 경우 가능합니다.CONFIG_FRAMEBUFFER_CONSOLE=yCONFIG_FB_VESA=yCONFIG_FB_EFI=yCONFIG_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

권한과 소유권은 현재 로그인과 배포판에서 이를 처리하는 방법에 따라 달라질 수 있지만 주/부 장치 번호(쉼표와 공백으로 구분된 두 자리)는 정확히 동일해야 합니다.

관련 정보