Я не знаю, есть ли это в macOS, но в Linux я обычно вижу только одного пользователя, если запускаю команду who
and 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
Вот еще немного информации о том, что происходит, с точки зрения Unix более низкого уровня. Он длинный и выходит за рамки того, о чем вы просили, но может быть интересен вам или кому-то другому, проходящему мимо этой страницы.
Если вы посмотрите на руководство по w
команде ( man w
), там сказано, что «утилита w печатает сводку текущей активности в системе, включая то, что делает каждый пользователь». Это немного расплывчато и немного вводит в заблуждение. В частности w
, он сообщает вам о текущих логинах . Логины записываются в файл с именем /var/run/utmpx
. Существуют общие библиотечные методы для обновления utmpx
записей, так что каждая программа, которой необходимо записать или удалить логин, использует одну и ту же процедуру.
w
читает utmpx
файл, используя эти общие библиотечные процедуры, и отображает информацию о текущих сеансах входа в систему вместе с процессом переднего плана . Сеанс входа в систему может выполнять много дел одновременно, но только одна программа находится на переднем плане. Все остальные являются фоновыми, что происходит, когда вы вводите &
свою команду или нажимаете control-Z
, когда программа работает в терминале.
Сеанс входа создается, когда вы входите в свой компьютер на встроенном дисплее. Если у вас включено переключение пользователей, вход в систему записывается для каждого пользователя и остается активным до выхода из системы. И если вы входите удаленно (например, с помощью ssh
), для этого записывается логин. Каждый из них должен появиться в w
выводе.
Большинство терминальных приложений, включая Terminal.app и iTerm, а также приложение xterm
X11.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, каждая «вкладка» будет отдельным сеансом пользователя.
Бармар