Имя терминала команда linux

Как проверить, какой терминал я использую?

У меня есть Ubuntu на моей машине, и я использую замечательный оконный менеджер. Как проверить, какой терминал у меня запущен? Есть ли команда для этого?

TL; DR

  • найти текущее использование оболочки ls -l /proc/$$/exe
  • чтобы найти работающий терминал, используйте xprop _NET_WM_PID WM_CLASS . Значение pid позже может быть передано в ps -p -o args команду.
  • Технически, для эмулятора терминала вам даже не нужна команда, как указано в комментариях :

Шелл против Терминала

Первое, что нам нужно уточнить, это то, что именно спрашивают — выяснить, работает ли оболочка или работает терминал. Часто эти два термина взаимозаменяемы, но в целом это разные вещи. Оболочка — это интерпретатор командной строки, в частности, интерактивная оболочка — это текстовое поле для приглашения и ввода текста, в котором вы вводите команды. Оболочки также могут быть неинтерактивными, например, скрипт запускает неинтерактивную оболочку или bash -c ‘echo hello world’ также запускает неинтерактивную оболочку.

Напротив, терминал — это интерфейс к оболочке (хотя это может быть и другое приложение). Первоначально терминал относился к реальному оборудованию, но в настоящее время это в основном программное обеспечение. То, что вы видите, когда нажимаете Ctrl + Alt + t или щелкаете по значку терминала в графическом интерфейсе, это запускает эмулятор терминала, окно, которое имитирует поведение оборудования, и в этом окне вы можете видеть, как работает оболочка. Ctrl + Alt + F2 (или любая из 6 функциональных клавиш) откроет виртуальную консоль, иначе tty . Я рекомендую прочитать Почему виртуальный терминал «виртуальный», и что / почему / где «настоящий» терминал? для получения дополнительной информации о специфике.

Получение информации о оболочке

Каждому пользователю назначена оболочка по умолчанию /etc/passwd для его имени пользователя. Предполагая, что вы используете конфигурацию по умолчанию и еще не вызывали другую оболочку в качестве команды, достаточно сделать:

Но, конечно, это показывает только значение по умолчанию . Предположим, мы делаем следующее:

Мы изначально были в bash , но начали интерактивный сеанс /bin/dash , POSIX Ubuntu или системной оболочки . Переменная $SHELL не изменится, потому что это не ее цель — она ​​показывает значение по умолчанию, а не текущее значение. Нам нужно подойти к этому с другой точки зрения — с точки зрения процесса, о чем я уже говорил. Использую ли я bash или sh?

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

Здесь мы используем преимущества /proc/ файловой системы. Имя процесса и параметры командной строки отображаются в /proc//comm . Все, что нам нужно, это предоставить PID оболочки, что и $$ делает. В приведенном выше примере я добавляю это отдельно, но ничто не мешает нам делать только

Читайте также:  How to delete app linux

Вариация на тему также может быть

Другой способ, которым мы могли бы подойти к этому, — проверить, где /proc//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 не рекомендуется — ведь много сценариев полагаться на них особенно системного уровня). Имя команды для shell обычно задается как самый первый аргумент в execve() syscall. Это описано в разделе Как bash знает, как он вызывается? , так что если у вас есть приложение, которое запускает оболочку через него execve() , оно может дать ему любое имя. Но это нестандартные и нестандартные вещи, которых следует избегать ради последовательности и безопасности.

Получение информации о терминале

Мы можем начать с переменных среды. Многие терминалы, по-видимому, маскируют себя как xterm -совместимые, о чем сообщает echo $TERM или echo $COLORTERM . Но тогда переменные среды не очень надежный инструмент. Они могут быть установлены и не установлены. Мы можем сделать то же самое снова с PID, за исключением того, что на этот раз мы рассмотрим родительский PID. Как вы, возможно, помните, терминал является интерфейсом оболочки и часто запускает саму оболочку. Поэтому мы можем выяснить, какой процесс является родительским процессом нашей оболочки:

$ 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 ‘. ‘ или оболочку, запущенную ssh , например, через PID, то вполне может быть, что нетерминальное приложение и, возможно, вообще не GUI.

Читайте также:  Set buffer size linux

Поэтому, если мы хотим конкретно работать с терминалом с графическим интерфейсом, мы можем запустить его xprop , щелкнуть по нужному окну, grep его pid и узнать, как называется этот pid, соответствующий процессу. Или другими словами:

$ ps aux | grep $(xprop | awk -F'=' '/PID/ ') 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.

Но когда дело доходит до эмуляторов терминала с графическим интерфейсом, нам даже не нужно искать команду. Мы можем просто использовать About диалог самого окна. Исключением из этого правила является xterm .

Источник

unixforum.org

пошарился по поисковикам так и не нашел, может че подскажите.
Интересует вот какой момент. Необходимо, что бы в скрипте фигурировал терминал, на котором, допустим, залогинился юзер. Как выхватить это? Какой коммандой/переменной отображается текущий терминал/консоль?

Re: как получить название терминала

Сообщение madskull » 12.04.2006 14:29

serzh-z Бывший модератор Сообщения: 8256 Статус: Маньяк ОС: Arch, Fedora, Ubuntu Контактная информация:

Re: как получить название терминала

Сообщение serzh-z » 12.04.2006 16:12

Re: как получить название терминала

Сообщение madskull » 12.04.2006 16:55

Re: как получить название терминала

Сообщение SashaAl » 13.04.2006 11:31

Просмотрел . может невнимательно смотрел, но так и не высмотрел где выдрать наназвание текущей консоли . даже кое-че перепробовал, но .

serzh-z Бывший модератор Сообщения: 8256 Статус: Маньяк ОС: Arch, Fedora, Ubuntu Контактная информация:

Re: как получить название терминала

Сообщение serzh-z » 13.04.2006 11:44

Просмотрел . может невнимательно смотрел, но так и не высмотрел где выдрать наназвание текущей консоли . даже кое-че перепробовал, но .

\l для bash, или уже упомянутая команда tty

#!/bin/sh t1=`tty` t2="\l" echo $ echo $

Re: как получить название терминала

Сообщение SashaAl » 13.04.2006 12:05

#!/bin/sh t1=`tty` t2="\l" echo $ echo $

Результат вывода такого скрипта

elide Бывший модератор Сообщения: 2421 Статус: Übermensch ОС: лялих

Re: как получить название терминала

Сообщение elide » 13.04.2006 12:34

просто не все консоли от tty1 до tty6. /dev/pts/* — это все псевдотерминалы.
так что, одно из двух: или ты сам не понимаешь, что тебе надо, или ты никак не можешь этого объяснить.

Читайте также:  Linux live usb сборки

serzh-z Бывший модератор Сообщения: 8256 Статус: Маньяк ОС: Arch, Fedora, Ubuntu Контактная информация:

Re: как получить название терминала

Сообщение serzh-z » 13.04.2006 12:44

В указанном топике мы именно это и обсуждали, там же и есть догадки и предложения как узнать самую первую консоль (НЕ псевдо терминал, а именно консоль), с которой юзер работает!

Re: как получить название терминала

Сообщение SashaAl » 14.04.2006 12:43

Похоже действительно я неправильно выразился . суть такова, что мне надо получить что-то на подобии комманы «w», вобщем, что бы там указывался псевдо терминал (будь то локальный tty или удаленный pts) и откуда (т.е. инетесует второй и третий параметр комманды «w»)

Re: как получить название терминала

Сообщение SashaAl » 26.04.2006 16:35

вот что показывает комманда:
$ w -h
user1 tty1 — 09:51 6:55 2.92s 0.02s -bash
user2 tty6 — 17Apr06 9days 0.10s 0.00s /bin/sh /usr/X1
user2 pts/1 — 17Apr06 9days 0.00s 3.77s kdeinit: kded
user2 pts/2 — 15:32 0.00s 0.02s 0.00s w -h

как из этого выдрать только первые три параметра:
user1 tty1 —
или для user2
user2 pts/2 —

serzh-z Бывший модератор Сообщения: 8256 Статус: Маньяк ОС: Arch, Fedora, Ubuntu Контактная информация:

Источник

Справочник 70 основных команд Linux: полное описание с примерами

Справочник основных команд Linux

Одним из коренных отличий семейства ОС Linux от ОС Windows является ведущая роль командной строки или терминала в администрировании системы. Для успешной работы с «Линукс» одного графического интерфейса недостаточно. Полноценное управление тут возможно только через терминал. А в работе с терминалом никак не обойтись без изучения основных команд Linux.

В Linux насчитывается несколько сотен основных команд и их модификаций. Они группируются по нескольким категориям. По расположению — могут быть утилитами командной строки или встроенной функцией командной оболочки. По частоте применения – используемыми постоянно, эпизодически и редко. По типам действий – от получения справки до управления файлами и процессами. Именно третья, функциональная составляющая и станет основой группировки утилит в этой статье.

В обзоре собраны все важнейшие команды Linux, которые могут пригодиться для администрирования ОС Linux. Статья рассчитана как на новичков, так и на продвинутых пользователей, уже знакомых с основным функционалом терминала. Эту своеобразную шпаргалку можно смело добавлять в закладки всем, кто хочет извлечь из «Линукс» максимум полезных свойств и повысить свою продуктивность в несколько раз.

Справочная информация / документация

man

(Manual). Показывает инструкцию к программам и командам Linux. Чтобы получить руководство для программы, наберите:

whatis

whereis

Источник

Оцените статью
Adblock
detector