Нормально ли, что один и тот же пользователь вошел в систему дважды, но с другого телетайпа?

Я не знаю, есть ли это в macOS, но в Linux я обычно вижу только одного пользователя, если запускаю команду whoand w.

Нормально ли, что один и тот же пользователь вошел в систему дважды, но с другого телетайпа?

Я не знаю, откуда взялась вторая учетная запись с таким же именем пользователя.

jen-air:~ jen$ who
jen     console  Aug 22 20:56 
jen     ttys000  Aug 23 08:39 

jen-air:~ jen$ w
 8:43  up 11:47, 2 users, load averages: 1.51 1.60 1.70
USER     TTY      FROM              LOGIN@  IDLE WHAT
jen     console  -                Wed20   11:46 -
jen     s000     -                 8:39       - w

Ответы (4)

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

Если вы посмотрите на руководство по wкоманде ( man w), там сказано, что «утилита w печатает сводку текущей активности в системе, включая то, что делает каждый пользователь». Это немного расплывчато и немного вводит в заблуждение. В частности w, он сообщает вам о текущих логинах . Логины записываются в файл с именем /var/run/utmpx. Существуют общие библиотечные методы для обновления utmpxзаписей, так что каждая программа, которой необходимо записать или удалить логин, использует одну и ту же процедуру.

wчитает utmpxфайл, используя эти общие библиотечные процедуры, и отображает информацию о текущих сеансах входа в систему вместе с процессом переднего плана . Сеанс входа в систему может выполнять много дел одновременно, но только одна программа находится на переднем плане. Все остальные являются фоновыми, что происходит, когда вы вводите &свою команду или нажимаете control-Z, когда программа работает в терминале.

Сеанс входа создается, когда вы входите в свой компьютер на встроенном дисплее. Если у вас включено переключение пользователей, вход в систему записывается для каждого пользователя и остается активным до выхода из системы. И если вы входите удаленно (например, с помощью ssh), для этого записывается логин. Каждый из них должен появиться в wвыводе.

Большинство терминальных приложений, включая Terminal.app и iTerm, а также приложение xtermX11.app, могут создавать оболочки входа в окно или на вкладке. Когда вы создаете новое окно в одном из этих приложений, вы можете получить еще один сеанс входа в систему, который отображается в виде другой строки в w. Но эти приложения не обязательно создают оболочки для входа в систему! Является ли новое окно/вкладка оболочкой входа в систему, обычно управляется в настройках. Например, в iTerm2 вы можете выбрать в разделе «Настройки» > «Профили» > «Основные» > «Команда», следует ли запускать оболочку входа в систему или какую-либо другую программу. Если вы просто поместите туда «bash», вы получите оболочку, но это не будет оболочка для входа в систему .

Так какая разница? Это тонко, но полезно знать об этом.

Здесь есть хорошее обсуждение оболочек входа в систему и обычных оболочек: https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell . Но мы можем резюмировать так: оболочка входа в систему запускается как первый процесс после того, как что-то устанавливает вход в систему utmpx. Оболочка без входа в систему может быть запущена в любое время любой программой, но не является первым процессом после записи в utmpx. (С технической точки зрения, оболочка входа в систему — это ведущий процесс в группе процессов. Тот факт, что она обычно имеет utmpxзапись, является описательным, а не обязательным.)

Если ваша оболочка bash, как и большинство, каждый ее экземпляр читает и запускает .bashrcфайл. При bashзапуске в качестве оболочки входа в систему он также читает и запускает файлы .bash_profileи . .profileЭти файлы могут содержать инструкции, которые должны выполняться только для всех новых сеансов. Это основная практическая вещь, которую нужно знать о оболочках входа в систему. Это и оболочки входа в систему появляются в файлах w.

Вот эксперимент для иллюстрации. Откройте новое окно терминала и запустите w. Вы должны увидеть что-то вроде:

11:57  up 7 days, 59 mins, 5 users, load averages: 3.58 3.53 3.91
USER     TTY      FROM              LOGIN@  IDLE WHAT
dgc      console  -                16Aug18 7days -
dgc      s000     -                11:57       - w

s000— это имя терминала, в котором вы работаете w. Он существует в файловой системе по адресу /dev/ttys000. Обычно существует отношение один к одному между оболочками входа в систему и терминалами, но не всегда.

Теперь откройте новое окно Терминала. Вернитесь к первому и wснова бегите.

12:09  up 7 days,  1:11, 5 users, load averages: 5.35 4.35 4.05
USER     TTY      FROM              LOGIN@  IDLE WHAT
dgc      console  -                16Aug18 7days -
dgc      s000     -                11:38       - w
dgc      s001     -                11:57       - -bash

Вы видите новый логин на s001—  /dev/ttys001— который работает -bash. Этот дефис в начале является соглашением, говорящим вам, что bash работает как оболочка входа в систему. В этом терминале нет программы переднего плана, поэтому wпоказывает саму оболочку.

Теперь вернитесь во второе окно и запустите bash. Что вы ожидаете?

12:13  up 7 days,  1:14, 5 users, load averages: 5.61 5.07 4.41
USER     TTY      FROM              LOGIN@  IDLE WHAT
dgc      console  -                16Aug18 7days -
dgc      s000     -                11:38       - w
dgc      s001     -                11:57       - bash

Дефис исчез. Это связано с тем, что тот же сеанс входа в систему (терминал) теперь выполняется на переднем плане в оболочке, которая не является оболочкой входа в систему. Это ребенок оригинала -bash. Если вы вернетесь назад и наберете exit, чтобы выйти из дочернего удара, вы снова увидите -bash.

Наконец, обратите внимание на consoleлогин. Этот никогда не изменится при обычном использовании. Обычно он работает под управлением настольной / оконной системы. Если вы включите свой Mac и не войдете в систему, но затем войдете sshс другого компьютера, вы вообще не увидите эту строку. Он всегда будет казаться бездействующим и всегда будет казаться, что ничего не работает — кроме дефиса, потому что это сеанс входа в систему.

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

Приложение «Терминал» по умолчанию в macOS открывает второй вход в систему, поэтому при выполнении команды whoили wв приложении «Терминал» происходит второй вход в систему.

В зависимости от вашей среды и приложения терминала, некоторые приложения эмуляции терминала, такие как iTerm2 , будут отображать только один вход в систему.

Да это нормально.

Консоль — это ваш логин на рабочем столе, а второй логин появляется после того, как вы откроете окно терминала. На самом деле, если у вас открыто более одного окна/вкладки Терминала, для каждого отображается запись.

Немного удивительно, что в настройках нет настройки, позволяющей контролировать, является ли окно входом в систему или нет.

Да, это нормально. Если вы используете мультиплексор терминала, такой как tmux или screen, каждая «вкладка» будет отдельным сеансом пользователя.