This manual page is part of the POSIX Programmer’s Manual.
The Linux implementation of this interface may differ
(consult the corresponding Linux manual page for details of
Linux behavior), or the interface may not be implemented on

who — display who is on the system

who [−mTu] [−abdHlprt] [file]
who [−mu] −s [−bHlprt] [file]
who −q [file]
who am i
who am I

The utility shall list various pieces of information about
accessible users. The domain of accessibility is
implementation‐defined.  Based on the options given, can
also list the user’s name, terminal line, login time,
elapsed time since activity occurred on the line, and the
process ID of the command interpreter for each current
system user.

The utility shall conform to the Base Definitions volume of
POSIX.1‐2008, The following options shall be supported. The
metavariables, such as <line>, refer to fields described in
the STDOUT section.

−a        Process the implementation‐defined database or
          named file with the and options turned on.

−b        Write the time and date of the last system reboot.
          The system reboot time is the time at which the
          implementation is able to commence running

−d        Write a list of all processes that have expired
          and not been respawned by the system process. The
          <exit> field shall appear for dead processes and
          contain the termination and exit values of the
          dead process. This can be useful in determining
          why a process terminated.

−H        Write column headings above the regular output.

−l        (The letter ell.) List only those lines on which
          the system is waiting for someone to login. The
          <name> field shall be in such cases. Other fields
          shall be the same as for user entries except that
          the <state> field does not exist.


−m        Output only information about the current

−p        List any other process that is currently active
          and has been previously spawned by

−q        (Quick.) List only the names and the number of
          users currently logged on. When this option is
          used, all other options shall be ignored.

−r        Write the current of the process.

−s        List only the <name>, <line>, and <time> fields.
          This is the default case.

−t        Indicate the last change to the system clock.

−T        Show the state of each terminal, as described in
          the STDOUT section.

−u        Write ‘‘idle time’’ for each displayed user in
          addition to any other information. The idle time
          is the time since any activity occurred on the
          user’s terminal. The method of determining this is
          unspecified.  This option shall list only those
          users who are currently logged in.  The <name> is
          the user’s login name. The <line> is the name of
          the line as found in the directory The <time> is
          the time that the user logged in. The <activity>
          is the number of hours and minutes since activity
          last occurred on that particular line. A dot
          indicates that the terminal has seen activity in
          the last minute and is therefore ‘‘current’’. If
          more than twenty‐four hours have elapsed or the
          line has not been used since boot time, the entry
          shall be marked <old>. This field is useful when
          trying to determine whether a person is working at
          the terminal or not. The <pid> is the process ID
          of the user’s login process.

The following operands shall be supported:

am i, am I
          In the POSIX locale, limit the output to
          describing the invoking user, equivalent to the
          option. The and or must be separate arguments.

file      Specify a pathname of a file to substitute for the
          implementation‐defined database of logged‐on users
          that uses by default.


Not used.


The following environment variables shall affect the
execution of

LANG      Provide a default value for the
          internationalization variables that are unset or
          null. (See the Base Definitions volume of
          POSIX.1‐2008, for the precedence of
          internationalization variables used to determine
          the values of locale categories.)

LC_ALL    If set to a non‐empty string value, override the
          values of all the other internationalization

LC_CTYPE  Determine the locale for the interpretation of
          sequences of bytes of text data as characters (for
          example, single‐byte as opposed to multi‐byte
          characters in arguments).

          Determine the locale that should be used to affect
          the format and contents of diagnostic messages
          written to standard error.

LC_TIME   Determine the locale used for the format and
          contents of the date and time strings.

NLSPATH   Determine the location of message catalogs for the
          processing of

TZ        Determine the timezone used when writing date and
          time information. If is unset or null, an
          unspecified default timezone shall be used.


The utility shall write its default format to the standard
output in an implementation‐defined format, subject only to
the requirement of containing the information described
above.  XSI‐conformant systems shall write the default
information to the standard output in the following general

For the option, <line> shall be The <name> is unspecified.
The following format shall be used for the option:

          "%s %c %s %s\n" <name>, <terminal state>, <terminal name>,
              <time of login>
where <terminal state> is one of the following characters:


+       The terminal allows write access to other users.

−       The terminal denies write access to other users.

?       The terminal write‐access state cannot be

<space> This entry is not associated with a terminal.  In
        the POSIX locale, the <time of login> shall be
        equivalent in format to the output of:

                date +"%b %e %H:%M"
        If the option is used with the idle time shall be
        added to the end of the previous format in an
        unspecified format.

The standard error shall be used only for diagnostic



The following exit values shall be returned:

 0    Successful completion.

>0    An error occurred.


The name used for the system process is the most commonly
used on historical systems, but it may vary.  The ‘‘domain
of accessibility’’ referred to is a broad concept that
permits interpretation either on a very secure basis or even
to allow a network‐wide implementation like the historical


Due to differences between historical implementations, the
base options provided were a compromise to allow users to
work with those functions. The standard developers also
considered removing all the options, but felt that these
options offered users valuable functionality. Additional
options to match historical systems are available on XSI‐
conformant systems.  It is recognized that the command may
be of limited usefulness, especially in a multi‐level secure
environment. The standard developers considered, however,
that having some standard method of determining the
‘‘accessibility’’ of other users would aid user portability.
No format was specified for the default output for systems
not supporting the XSI option. In such a user‐oriented
command, designed only for human use, this was not


considered to be a deficiency.  The format of the terminal
name is unspecified, but the descriptions of and require
that they use the same format.  It is acceptable for an
implementation to produce no output for an invocation of


The Base Definitions volume of POSIX.1‐2008,

Portions of this text are reprinted and reproduced in
electronic form from IEEE Std 1003.1, 2013 Edition, Standard
for Information Technology ‐‐ Portable Operating System
Interface (POSIX), The Open Group Base Specifications Issue
7, Copyright (C) 2013 by the Institute of Electrical and
Electronics Engineers, Inc and The Open Group.  (This is
POSIX.1‐2008 with the 2013 Technical Corrigendum 1 applied.)
In the event of any discrepancy between this version and the
original IEEE and The Open Group Standard, the original IEEE
and The Open Group Standard is the referee document. The
original Standard can be obtained online at
http://www.unix.org/online.html .

Any typographical or formatting errors that appear in this
page are most likely to have been introduced during the
conversion of the source files to man page format. To report
such errors, see https://www.kernel.org/doc/man‐
pages/reporting_bugs.html .