Combinação de tee e tty [closed]

1

Eu tentei o comando abaixo, eu li em um livro

sudo ls | tee /dev/tty3a

Este comando me dá permissão negada, mesmo com sudo .
Aqui tty é o teletypewriter, eu já sei disso. Mas o que significa 3a com tty?

    
por SuperKrish 27.07.2016 / 09:19

2 respostas

2

Os nomes dos arquivos do dispositivo em /dev variam entre as variantes do Unix. Existem alguns que você encontrará em todos os lugares, como /dev/tty que significa o terminal atual. Parece que /dev/tty3a é o nome da quarta porta serial em algumas variantes Unix, incluindo Solaris e SCO OpenServer. O equivalente do Linux seria /dev/ttyS3 . Então, ls|tee /dev/tty3a duplica a saída de ls para a quarta porta serial.

Se não houver nenhum dispositivo conectado à porta serial, você receberá um erro (“Erro de entrada / saída”). Se não houver um driver para a porta serial, você receberá um erro diferente (“No such device”). Se o nó do dispositivo não existir, você certamente obterá “Nenhum arquivo ou diretório”.

Se o nó do dispositivo existir, mas você não tiver permissão para acessá-lo, receberá o erro "Acesso negado". A menos que você esteja executando como root, ou há um terminal de hardware conectado a essa porta serial e você está logado nesse terminal, é provável que você não tenha permissão para acessar esse dispositivo.

Supondo que o dispositivo esteja presente, se você quiser acessá-lo como root, você precisa executar o comando tee as root, por exemplo com

ls | sudo tee /dev/tty3a

Observe que sudo ls | tee /dev/tty3a não funcionaria, porque isso só executa ls como root, o comando tee não é um argumento para sudo e é executado como o usuário original. Neste comando, o pipe é criado pelo shell original e a chamada para sudo constitui o lado esquerdo do pipe. Se você quisesse executar tanto ls quanto tee como root, você precisaria escrever sudo ls | sudo tee /dev/tty3a (com a criação do pipe ainda no shell original). Se você quisesse executar os dois comandos como root e executar a configuração do pipe como root, seria necessário invocar um shell como root para configurar o pipe: sudo sh -c 'ls | tee /dev/tty3a'

¹ Portas seriais são numeradas de 0.

    
por 28.07.2016 / 02:18
1

O exemplo que você encontrou em um livro mostra que você pode escrever em sua própria tela e em outros terminais ao mesmo tempo. Faça o login duas vezes no mesmo servidor e execute w e você terá algo como:

$ w
USER  TTY    FROM   LOGIN@   IDLE   JCPU   PCPU WHAT
joe   pts/1  :0     21:53    0.00s  0.04s  0.00s w
joe   pts/2  :0     22:38    3.00s  0.01s  0.01s /bin/bash

Na primeira gravação do console:

$ seq 3 | tee /dev/pts/1

e você obtém a saída dupla.

Em seguida, experimente o mesmo console

$ seq 3 | tee /dev/pts/2

e você obtém a mesma saída nas duas telas.

Isso pode ser útil se você tiver muitos monitores / consoles conectados e quiser atualizá-los de um console.

    
por 28.07.2016 / 00:39