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


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.