사용중인 터미널을 어떻게 확인합니까?


23

내 컴퓨터에 Ubuntu가 있고 그 위에 멋진 창 관리자를 실행하고 있습니다. 실행중인 터미널을 어떻게 확인합니까? 명령이 있습니까?


5
당신은 무엇을 뜻합니까 된 ? 도움말 -> 정보를 클릭하십시오 .
— JoKeR

3
어느 터미널 이 터미널 프로그램이나 쉘을 의미합니까?
— heemayl 2016 년

답변:


24

TL; DR

  • 현재 실행중인 쉘 사용을 찾기 위해 ls -l /proc/$$/exe
  • 현재 실행중인 터미널을 찾으려면을 사용하십시오 xprop _NET_WM_PID WM_CLASS. pid나중에 값 을 ps -p <pid> -o args명령에 전달할 수 있습니다 .
  • 기술적으로 터미널 에뮬레이터의 경우 주석에 명시된 바와 같이 명령이 필요하지 않습니다 .

    무엇을 의미합니까? 도움말-> 정보를 클릭하십시오. – JoKeR

쉘 대 터미널

우리가 명확히해야 할 첫 번째 것은 정확히 묻는 것입니다-실행중인 쉘 또는 실행중인 터미널을 찾으십시오. 이 두 용어는 종종 같은 의미로 사용되지만 완전히 다른 것입니다. 쉘은 명령 행 인터프리터이며, 특히 대화식 쉘은 명령을 입력하는 프롬프트와 텍스트 필드입니다. 셸은 비대화 형일 수도 있습니다. 예를 들어 스크립트는 비대화 형 셸 bash -c 'echo hello world'을 시작 하거나 비대화 형 셸 을 시작합니다.

대조적으로, 터미널은 쉘에 대한 인터페이스입니다 (하지만 다른 응용 프로그램 일 수도 있음). 원래 터미널은 실제 하드웨어를 언급했지만 오늘날은 대부분 소프트웨어입니다. GUI에서 Ctrl+ Alt+ 를 누르 t거나 터미널 아이콘을 클릭하면 하드웨어 동작을 모방하는 창인 터미널 에뮬레이터를 시작하고 그 창에서 셸이 실행되는 것을 볼 수 있습니다. Ctrl+ Alt+ F2(또는 6 개의 기능 키 중 하나)는 가상 콘솔 (일명)을 엽니 다 tty. 가상 터미널이 왜 "가상"이고 "실제"터미널이 무엇 / 왜 / 어디에 있습니까?를 읽는 것이 좋습니다 . 자세한 내용은.

쉘 정보 얻기

각 사용자는 /etc/passwd자신의 사용자 이름으로 지정된 기본 쉘을 가지고 있습니다 . 기본 구성을 사용하고 있고 명령으로 다른 쉘을 명시 적으로 호출하지 않았다고 가정하면 충분합니다.

echo $SHELL

그러나 물론 이것은 기본값 만 보여줍니다 . 다음을 수행한다고 가정하십시오.

user@ubuntu:~$ dash
$

우리는 처음에 있었다 bash, 그러나의 대화 형 세션을 시작 /bin/dash, 우분투의 POSIX 또는 시스템 쉘을 . 변수 $SHELL는 목적이 아니기 때문에 변경되지 않습니다. 기본 값은 현재 값이 아닙니다. 우리는 또 다른 관점, 즉 프로세스 관점의 관점에서 접근해야 할 것입니다. 프로세스 관점은 bash 또는 sh를 사용하고 있습니까?

$ echo $$
4824
$ cat /proc/4824/comm                                                          
mksh
$ bash
xieerqi@eagle:~$ echo $$
6197
xieerqi@eagle:~$ cat /proc/6197/comm
bash

여기서 우리는 /proc/파일 시스템을 이용합니다. 프로세스 이름과 명령 줄 매개 변수가에 표시됩니다 /proc/<pid>/comm. 쉘 PID를 제공하기 만하면 $$됩니다. 위의 예에서 나는 그것을 별도로 추가하고 있지만, 우리가 그냥하지 못하게하는 것은 없습니다.

cat /proc/$$/comm

주제에 대한 변형도

ps -p $$ -o args

우리가 접근 할 수있는 또 다른 방법은 where를 확인하는 것 /proc/<pid>/exe입니다. 이 파일은 실행 파일을 가리키는 심볼릭 링크입니다. 따라서 우리는 할 수 있습니다

user@ubuntu:~$ ls -l /proc/$$/exe
lrwxrwxrwx 1 adminx adminx 0 Apr  4 18:20 /proc/1241/exe -> /bin/bash
user@ubuntu:~$ sh
$ ls -l /proc/$$/exe
lrwxrwxrwx 1 adminx adminx 0 Apr  4 18:20 /proc/1255/exe -> /bin/dash

두 가지 방법 중 하나가 99 %의 경우에 효과적입니다. 물론, 그것들은 파괴 될 수있는 방법이 있습니다. 예를 들어, 심볼릭 링크는 실행 파일이 쉘이 시작된 직후 삭제 (그 경우 당신은 아마 발생합니다 시스템 문제를 제거하기 때문에 경우 아무 곳이나하지 /bin/sh, /bin/dash짝수 또는 /bin/bash권장하지 않습니다 - 모든 후 스크립트의 많은 그들에 의존 특히 시스템 수준의 시스템). 쉘의 명령 이름은 일반적으로 execve()syscall 에서 첫 번째 인수로 설정됩니다 . 이것은 bash가 어떻게 호출되는지 어떻게 알 수 있습니까? 에서 다룹니다 . 을 통해 셸을 시작하는 응용 프로그램이 있으면 이름을 지정할 수 있습니다 execve(). 그러나 이것들은 비표준적이고 비 전형적인 것이므로 일관성과 보안을 위해 피해야합니다.


터미널 정보 얻기

환경 변수로 시작할 수 있습니다. 많은 터미널이 자체적으로 xterm호환되는 것으로 보이며 echo $TERM또는 로보고됩니다 echo $COLORTERM. 그러나 환경 변수는 신뢰할 수있는 도구가 아닙니다. 그들은 설정 및 설정 해제 할 수 있습니다. 우리는 PID로 동일한 작업을 다시 할 수 있습니다. 이번에는 부모 PID를 볼 것입니다. 아시다시피, terminal은 쉘에 대한 인터페이스이며 종종 쉘 자체를 시작합니다. 따라서 쉘의 부모 프로세스가 어떤 프로세스인지 확인할 수 있습니다.

$ ps -p $$ -o args,ppid
COMMAND                      PPID
bash                         1234
$ ps -p 1234 -o args
COMMAND
/usr/lib/gnome-terminal/gnome-terminal-server

다른 터미널 앱을 사용해 봅시다 sakura:

$ ps -p $$ -o args,ppid
COMMAND                      PPID
/bin/bash                   16950
$ ps -p 16950 -o args
COMMAND
sakura

거기에서 우리는 이미이 쉘이 시작된 것을 볼 수 있습니다 gnome-terminal. 이 방법은 물론 대화식 쉘을 사용한다고 가정합니다. 예를 들어을 bash -c '...'통해 시작된 부모 또는 셸 을 찾으려면 sshPID는 비 터미널 응용 프로그램에서 비롯되거나 GUI가 아닌 것일 수 있습니다.

따라서 GUI 터미널을 구체적으로 다루려면 run을 실행 xprop하고 원하는 창을 클릭하고 pid를 grep 한 다음 pid와 일치하는 프로세스의 이름을 찾으십시오. 또는 다른 말로하면 :

$ ps aux | grep $(xprop | awk -F'='  '/PID/ {print $2}')                       
xieerqi   2124  0.6  1.7 208068 34604 ?        Sl   18:47   1:49 gnome-terminal

또한 사양에 따라 창 관리자는 WM_CLASS속성 을 설정해야 합니다. 따라서 우리는 다음을 얻을 수 xprop있습니다.

$ xprop WM_CLASS 
WM_CLASS(STRING) = "sakura", "Sakura"

물론 이것은 단점의 1 %도 있습니다. WM_CLASS속성 설정 은이를 수행하는 창 관리자에 의존하며 PID는 창이 정확하다는 보장은 없습니다 ( 이 X11 창을 만든 프로세스 는 무엇입니까? 참조 ). 복잡한 디버깅이 필요할 수 있습니다. 그리고 이것들은 방법 자체의 단점이 아니라 X11 서버의 단점입니다. 그러나 가장 안정적이고 잘 알려진 창 관리자 (예 : openbox, Metacity, blackbox)와 대부분의 응용 프로그램은 잘 작동하므로 Gnome Terminal 또는 Terminator와 같은 문제는 예상하지 마십시오.

그러나 GUI 터미널 에뮬레이터에 관해서는 명령을 찾을 필요조차 없습니다. About창 자체 의 대화 상자를 사용할 수 있습니다 . 해당 규칙의 예외는 xterm입니다.


O_o $SHELL, 확실히
— AB

Eek. 사람들은 왜 사용 ps | grep합니까? ps -p $$! 또는 명령에 대해서만 ps -p $$ -o cmd=.
— muru

@muru 내가 당신보다 경험이 적은 사용자이기 때문에, 나는 모든 ps 플래그를 기억하지 못합니다.> _ <
— bluntly

2
나도 아니지만 ps | grep나쁜 형태입니다. grep 할 수있는 것의 대부분은 실제로 ps또는 다른 도구 로 얻을 수 있습니다.
— muru

참고 :이 질문은 원래 불분명하고 일부 내용에 약간의 배경이 필요하기 때문에 답변을 업데이트했습니다. 시간이 지남에 따라 명령을 호출하는 더 좋은 방법이 있다는 것도 알았습니다.
— Sergiy Kolodyazhnyy

12

짧은 버전 (thx @Serg )

cat /etc/alternatives/x-terminal-emulator

긴 버전

sudo update-alternatives --config x-terminal-emulator

*출력에서를 찾으십시오.

;)


출력 예

There are 7 alternatives which provide `x-terminal-emulator’.
선택 대안
———————————————
    1 / usr / bin / xterm
    2 / usr / bin / uxterm
    3 / usr / bin / koi8rxterm
    4 / usr / bin / lxterm
 * + 5 /usr/bin/gnome-terminal.wrapper
    6 / usr / bin / konsole
    7 /usr/bin/xfce4-terminal.wrapper
Press enter to keep the default[*], or type selection number:

또는 @muru 덕분에 여기에 자세한 출력이 있습니다.

$ update-alternatives --display x-terminal-emulator
x-terminal-emulator - auto mode
  link currently points to /usr/bin/gnome-terminal.wrapper
/usr/bin/gnome-terminal.wrapper - priority 40
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/gnome-terminal.1.gz
/usr/bin/koi8rxterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/koi8rxterm.1.gz
/usr/bin/lxterm - priority 30
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/lxterm.1.gz
/usr/bin/mate-terminal.wrapper - priority 30
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/mate-terminal.1.gz
/usr/bin/uxterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/uxterm.1.gz
/usr/bin/xterm - priority 20
  slave x-terminal-emulator.1.gz: /usr/share/man/man1/xterm.1.gz
Current 'best' version is '/usr/bin/gnome-terminal.wrapper'.

2
cat /etc/alternatives/x-terminal-emulator | grep exec
— Sergiy Kolodyazhnyy 2016 년

설치해야하는 유틸리티가 있습니까? 나도 얻을 Binary file (standard input) matches또는 update-alternatives: error: unknown argument -config'`
— 테 런스

걱정 마세요--config
— Terrance

1
당신은 필요하지 않습니다 sudo. 사용update-alternatives --display x-terminal-emulator
— muru

짧은 버전 file /etc/alternatives/x-terminal-emulator의 경우이 심볼릭 링크의 대상을 대신 사용 cat하는 것이 좋습니다. 이 file유틸리티는 대부분의 시스템에 설치해야하며 대상 실행 파일을 찾는 데 사용할 수 있습니다. cat심볼릭 링크 에서이 링크의 대상에 따라 쉘 스크립트 또는 바이너리 파일을 인쇄 할 수 있습니다 (쉘 스크립트 gnome-terminal, 바이너리 파일 urxvt등).
— chris544

9

사용중인 터미널 프로그램을 알고 싶다면 다음을 사용하십시오.

ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)

쉘 인스턴스를 더 이상 포크하지 않고 터미널 (쉘) 을 연 직후에이를 실행하십시오 .

터미널 프로그램을 열면 기본적으로 자식 프로그램 인 쉘이 생성됩니다. 생성 된 쉘의 부모는 터미널 자체입니다. 즉, 쉘의 PPID는 터미널 프로그램의 PID입니다.

여기서는 쉘 프로그램 ( bash) 의 상위 프로세스 ID (PPID)를로 ( ps -o 'ppid=' -p $$터미널 프로그램의 프로세스 ID ) 찾습니다 .

그런 다음 PID에서 프로세스 이름을 찾습니다.

$ ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)
gnome-terminal

기본적으로 하나의 라이너입니다.

$ ps -o 'ppid=' -p $$
 2268

$ ps -o 'cmd=' -p 2268
gnome-terminal

1
이 명령을 실행하면을 얻습니다 sshd: username@pts/4. 참고 PuTTY를 사용하여 컴퓨터에 연결하고 있습니다. 가 sshd실제로 터미널 에뮬레이터?
— user3731622

3

printenv열린 세션의 모든 변수를 보려면 터미널 창에서 입력 하십시오.

echo $COLORTERM터미널 창에서 입력 하십시오. 참고 : 이것은 모든 터미널에서 작동 sakura하지는 않습니다.

root@terrance-Linux:~# echo $COLORTERM
gnome-terminal

아래는 aterm터미널 에서 나온 것 입니다.

root@terrance-Linux:~$ echo $COLORTERM
rxvt-xpm

사쿠라의 echo $ COLORTERM 보고서 공란
— Sergiy Kolodyazhnyy 2016 년

@Serg 감사합니다. 그것은 xterm의 변형 인 것처럼 보입니다.
— Terrance

@ Serg 당신이 사쿠라를 좋아하는지 궁금하십니까? 그리고 무엇이 당신을 끌어들입니까?
— Terrance

괜찮아요, 아주 특별하고 단순하지 않습니다. 나는 터미네이터, roxterm, 틸드, 드롭 다운 (터미널, R로 시작하는 것을 잊어 버림)과 같은 다양한 터미널 에뮬레이터를 시도했습니다. 나는 그것이 xterm과 gnome-terminal 사이의 타협이라고 생각한다
— Sergiy Kolodyazhnyy

@ Serg Ah, 알아두면 좋습니다. 확인해 볼게요. :-) 나는 xdotool 키를 보내는 keepalive 스크립트와 함께 작동하는 좋은 터미널을 항상 찾고 있습니다.
— Terrance

3

터미널 프로그램의 이름 만 원하면 도움말> 정보에서 찾을 수 있습니다.


0
cat /etc/alternatives/x-terminal-emulator | grep exec

샘플 출력 :

exec ( 'gnome-terminal', @ args);

내 시스템에 대한 답이 있습니다 : gnome-terminal .

따라서 gnome-terminal터미널에 입력 하면 동일한 동일한 터미널 창이 열립니다.

출처 :


-1

간단한 대답. 콘솔 또는 ssh 모두에서 작동합니다.

간단한 문자 터미널의 예 :

ssh username@systemname
echo $TERM
dumb

해당 연결에서 GUI 앱을 열 수 없음을 알려줍니다

xterm의 예 (Windows의 PuTTY / Xming에서도 작동)

ssh -Y username@systemname      -- omit this if using PuTTY --
echo $TERM
xterm

리프 패드 편집기 또는 노틸러스 파일 관리자 열기와 같은 GUI 명령을 사용할 수 있습니다.

콘솔에서 동일합니다 :

Open terminal window
echo $TERM
xterm

TERM기본 터미널 에뮬레이터를 정의하는 변수가 아니라 현재 터미널 에뮬레이터의 기능을 정의하는 변수입니다. 예를 들어, 변수를 "xterm-color"로 설정하면 터미널에서 실행중인 모든 프로그램은 현재 터미널이 색상을 이해해야한다는 것을 알 수 있습니다. "linux"로 설정하면 프로그램이 VT로되어 있다고 알려줍니다. etc.
— Cybolic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.