Eu fui su'ed em um usuário para executar um script de execução longa em particular. Eu queria usar a tela, mas recebi a mensagem de erro "Não é possível abrir o seu terminal '/ dev / pts / 4' - verifique."
Então, pesquisei no Google e me deparei com uma postagem no fórum que instruía a execução $ script '/dev/null/'
. Fiz isso e depois pude rastrear.
Por que isso funciona? O que o su está fazendo nessa tela não pode ser executado como o usuário su'ed? Por que redirecionar 'script' para / dev / null faz com que seja evitado de outra forma? Está usando script para gravar um log como usuário original em algum lugar?
linux
bash
gnu-screen
su
Ichorus
fonte
fonte
su
partir de uma sessão de tela.Respostas:
Bem, tecnicamente você não está redirecionando nada aqui.
Chamando
script /dev/null
só fazscript
salvar todo o texto datilografado em/dev/null
que na prática significa descartar o conteúdo.Veja
man script
para informações detalhadas e pacote util-linux-ng para implementação (misc-utils/script.c
).Isso não tem nada a ver com
screen
verdade. Por que isso funciona está chamandoscript
tem um efeito colateral de criar um pseudo-terminal para você em/dev/pts/X
. Dessa forma, você não precisa fazer isso sozinho, e a tela não terá problemas de permissão - se vocêsu
do usuário A ao usuário B , invocando diretamentescreen
você tenta se apossar do pseudo-terminal do usuário A. Isso não terá sucesso, a menos que você seja root . É por isso que você vê a mensagem de erro.fonte
Para enviar diretamente para a janela do seu terminal, o programa em execução precisa poder gravar no seu terminal de controle. Se você estiver usando um xterm ou ssh ou alguma outra conexão virtual (em oposição a um terminal diretamente conectado ao vivo), seu terminal de controle é um pseudo-tty (pty).
Seu arquivo é configurado com permissão de gravação somente para você quando você faz logon; caso contrário, outros usuários podem rabiscar no seu monitor (ou lê-lo). Portanto, quando você faz um SU para outro usuário (e esse usuário não é root), esse usuário não tem acesso ao pty subjacente.
No entanto, E / S mais complexas, como a tela, exigem acesso direto ao pty para funcionar, é mágico controlar toda a tela. É quando você se depara com problemas com a pessoa que está executando o comando que não tem acesso adequado ao terminal de controle.
Redirecionar o script para / dev / null faz com que a tela não tente gravar no terminal de controle, para que não atinja o problema de permissão.
fonte
/dev/null
. Primeiro: roteiro registra sua sessão (veja a página de manual), e você não precisa dele em tudo: assim que vai para / dev / null. Mas isso não tem um efeito colateral: cria um pseudo terminal, e agora você está usando isso, e a tela pode escrever para esta resposta. Veja @ karol-piczak.