Por que o terminal responde com “2” quando uso quem | wc -l

2

O título diz tudo. Eu sou o único usuário no meu computador, mas quando eu digito quem | wc -l, responde com 2. Por que isso?

    
por Mdomin45 31.03.2014 / 14:14

4 respostas

5

Isso ocorre porque um terminal aberto (físico ou virtual) é contado como um usuário logado. Então, quando você faz login na conta, você faz o login uma vez, quando abre o terminal, usando Ctrl. + Alt + t (aqui chamado de terminal virtual) ou usando Ctrl + Alt + F {1-7} (aqui chamado de terminal físico), você loga novamente, toda vez que você logar.

Isso é mostrado claramente na saída de who . A segunda coluna mostra como o usuário efetuou login. Caso você tenha efetuado login usando o terminal virtual, verá pts/<no> , que representa o uso de /dev/pts para efetuar login, que é usado para efetuar login usando o terminal virtual . Se você fizer o login usando o terminal físico, verá tty<no> , que representa o uso de /dev/tty para efetuar login.

Para esclarecer isso, veja a seguinte situação:

Eu fiz o login uma vez usando a interface gráfica, uma vez usando o terminal virtual, uma vez usando o terminal físico, então a saída é:

jobin    tty1         2014-03-31 18:05
jobin    :0           2014-03-31 16:58 (:0)
jobin    pts/1        2014-03-31 17:25 (:0)

A primeira linha indica o login no terminal físico, o segundo o gráfico e o terceiro o virtual.

Portanto, o motivo pelo qual você vê "2" é porque você fez login na interface gráfica e também em um terminal (não tenho certeza se você tem um físico ou virtual).

    
por jobin 31.03.2014 / 14:43
4

who fornece as informações detalhadas dos usuários conectados no momento, um em cada linha, conforme a seguir

aditya@aditya-desktop:~$ who
aditya   tty7         2014-03-31 16:45 (:0)
aditya   pts/2        2014-03-31 17:51 (:0)
aditya@aditya-desktop:~$ 

wc -l não fornece linhas. Em who|wc -l , enviamos os comandos. Ou seja, encaminhamos a saída do comando who to wc -l . wc -l medirá o número de linhas na saída dada pelo comando who , que é 2.

aditya@aditya-desktop:~$ who|wc -l
2
aditya@aditya-desktop:~$ 

Para mais informações, você pode ler os manuais digitando man who e man wc

    
por Registered User 31.03.2014 / 14:25
2

De info coreutils 'who invocation' :

   If given no non-option arguments, 'who' prints the following
information for each user currently logged on: login name, terminal
line, login time, and remote hostname or X display.

Portanto, se você estiver logado em mais de um lugar e ninguém mais estiver logado, a saída de who | wc -l será o número de lugares onde você está logado. Se você abrir mais janelas do terminal, verá que esse número aumentará. O mesmo se você abrir mais abas em uma janela de terminal.

Se você é o único usuário em seu computador e deseja ver o número de usuários únicos atualmente conectados em seu sistema, você pode usar:

who is using_my_pc | wc -l

Não, isso é uma piada (o que é engraçado porque está funcionando nesse caso). Veja info coreutils 'who invocation' para ver exatamente o que isso significa. O caminho certo para ver o número de usuários únicos atualmente registrados em seu sistema é:

who | cut -d' ' -f1 | uniq | wc -l
    
por Radu Rădeanu 31.03.2014 / 15:21
1
O comando

who mostra informações sobre os usuários que estão conectados no momento.

avinash@avinash-Lenovo-IdeaPad-Z500:~$ who
avinash  tty7         2014-03-31 16:52 (:0)
avinash  pts/1        2014-03-31 17:59 (:0)

tty7 representa que o usuário acima está executando uma sessão X. Além disso, o segundo, pts/1 representa o usuário acima também está executando uma sessão gnome-terminal.

Como @Aditya disse que wc -l conta o número de linhas na entrada padrão. who | wc -l neste comando, a saída de qual comando foi alimentado como entrada para o segundo comando wc -l . Por isso, wc -l calcula o número de linhas presentes na entrada padrão (2) e exibe (stdout) o resultado final.

Para ver o número de usuários que efetuaram login, execute o comando who com o parâmetro -q , conforme abaixo.

avinash@avinash-Lenovo-IdeaPad-Z500:~$ who -q
avinash avinash avinash
# users=3

De man who

-q, --count
          all login names and number of users logged on
    
por Avinash Raj 31.03.2014 / 14:22