Comando exec [RESOLVIDO]

1. Comando exec [RESOLVIDO]

Cleber Rocha
cl2b2r

(usa Debian)

Enviado em 01/04/2010 - 14:16h

Olá pessoal do VOL

Estou tendo uma dificuldade incrivel de entender qual é a aplicação prática do comando exec. Li vários posts, tanto aqui no VOL quanto em outros sites, mas, ainda não consegui ter aquele "click" que me diga: "- Ah! então é pra isso que você serve!"
Por favor! Alguém me ajude mandando algum exemplo, ou tutorial ou, até mesmo, um post que me diga como posso usar este comando no dia-a-dia e quais são as utilizações mais comuns dele bem como sua sintaxe.

Grato a todos!


  


2. MELHOR RESPOSTA

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 02/04/2010 - 10:25h

Bem, não posso responder todas suas perguntas mas quando utilizo o exec, eu o uso para alterar os arquivos descritores padrões (stdin,stdout,stderr) e para criar outros fd's.

Por exemplo: Você tem um arquivo e quer fazer a leitura dele. Há muitas maneiras de fazer isso, mas uma que você pode utilizar é redirecionar o descritor de seu arquivo para stdin. Dessa maneira, toda chamada de algum comando que utilize stdin irá utilizar o arquivo e não a entrada padrão (teclado).

exec 4<&0 #Salva stdin no descritor 4
exec < /etc/passwd #stdin = /etc/passwd
...
read LINHA #Lê uma linha de /etc/passwd e nao de stdin
echo $LINHA
read LINHA #Lê outra linha de /etc/passwd
....
exec 0<&4 #Recupera stdin
exec 4<&- #Fecha o fd temporario 4

Outro exemplo:
Redirecionar stdout para um arquivo.

exec 4<&1 #Salva stdout em 4
exec > saida.txt #stdout = saida.txt
...
cat /etc/passwd #Nao mostra nada na tela. Manda tudo para saida.txt
...
exec 1<&4 #Recupera stdout
exec 4<&- #Fecha o fd 4

cat saida.txt #Conteudo do /etc/passwd

Confesso que só utilizei o exec para fins didáticos mesmo, nada na prática. :(

Como você pode ver, todos os processos acima podem ser implementados sem a ajuda do exec.

Difícil mesmo é achar uma aplicação específica para ele, a não ser para criar novos arquivos descritores que eu acho que só o exec faz isso:

$ exec 4</etc/passwd #Cria o fd 4 associado a /etc/passwd
read -u 4 LINHA # Ler a primeira linha do fd 4 (opção -u)
echo $LINHA #Mostra a primeira linha de /etc/passwd

Dessa meneira, você pode ter vários arquivos associados por números, que talvez melhore muito a programação dependendo do caso (Melhor lidar com números do que nomes de arquivos gigantes, por exemplo)

Referência:
http://doc.async.com.br/abs-0.3/HTML/io-redirection.html

Espero ter ajudado.
t+

3. Re: Comando exec [RESOLVIDO]

André
andrezc

(usa Debian)

Enviado em 01/04/2010 - 14:19h

Isso vai lhe ser esclarecedor :

http://under-linux.org/f89/comando-exec-79976/


4. Obrigado

Cleber Rocha
cl2b2r

(usa Debian)

Enviado em 02/04/2010 - 06:37h

Valeu cara mais ainda não entendi. O tópico que vc me mandou só fala de um ataque usando o exec. O que eu preciso é saber quando e como eu posso implementá-lo em shell scripts de uso diário na automatização de tarefas de um servidor qualquer. Ou seja:
*Quando - Quando se justifica usar o exec e não outras formas
*Como - Algumas sintaxes que são mais usadas para variados tipos de script.
*Porque - Explicação do porquê a sintaxe é assim e não diferente.

Sei que o que estou pedindo é um pouco difícil, mas, se alguém puder me ajudar respondendo uma ou parte de uma destas três perguntas já fico grato.

att.

Cleber


5. Re: Comando exec [RESOLVIDO]

Adson Renato
adsonrenato

(usa Ubuntu)

Enviado em 02/04/2010 - 10:34h

O comando exec executa comandos com o UID do servidor web.
Flw.



6. Vlw pessoal, continuem postando por favor!

Cleber Rocha
cl2b2r

(usa Debian)

Enviado em 02/04/2010 - 10:50h

Ok amigo, ajudou muito sim! Até agora eu só tinha visto seu uso em scripts de backup, esta é mais uma aplicação que eu não conhecia. Quanto a ele executar comandos com o UID do servidor web... é só em servidor web mesmo que ele atua? pelo que vi até agora ele é um comando interno herdado do UNIX, portanto escalável para outras tarefas assumindo o PID de outros processos. Não é isso?


7. É meio confuso...

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 02/04/2010 - 19:06h

A grosso modo o 'exec' executa um processo usando o mesmo PID do processo que o chamou e fazendo com que o processo executado por ele herde esse PID.

Exemplo:

#!/bin/bash
exec echo "Hello World!"
echo "Nunca serei impresso."

Somente 'Hello World!' será impresso já que ele herdou o PID corrente, fazendo com que 'echo "Nunca serei impresso."' fique "órfão".


8. Valeu!

Cleber Rocha
cl2b2r

(usa Debian)

Enviado em 14/04/2010 - 09:30h

Valeu pessoal! Acho que já consegui abrir minha mente com relação a este tópico. Todas as contribuições foram ótimas e me ajudaram muito mesmo. Vou marcar a melhor resposta só porque é bom marcar, mas, saibam que todos vocês me ajudaram.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts