24 fevereiro 2007

Encaminhamentos em Linux

Venho agora falar um pouco da linha de comandos, em especial dos encaminhamentos. Estes existem tanto na linha comandos do Linux, como no Prompt do Windows. Os símbolos do encaminhamento são o ">" e o "<" e servem para encaminhar os dados entre comandos que se estejam a executar. Um exemplo é o encaminhamento do output dum comando para um ficheiro de texto:

dmesg > local.log


Isto encaminha o conteúdo do buffer do kernel para o ficheiro local.log, em vez de aparecer no ecran do monitor. Mas se usares o símbolo do encaminhamento duas vezes seguidas, o output do comando acima seria adicionado ao conteúdo do ficheiro, no fim do mesmo, em vez de o substituir por completo:

dmesg >> local.log

Se usar o sinal "<" , o argumento será usado como input e é muito usado para o comando "grep". Por exemplo:




e irá procurar pela palavra USB no ficheiro local.log. Os reencaminhamentos existem porque todas as aplicações de Linux, sejam as mais pequenas como as maiores, tem 3 possíveis descritores de ficheiros (file descriptor) para trabalhar. São os standards input, standards output e o standard error. Nem damos por eles porque os standards input e output são o teclado e o écran do monitor. Nos exemplos anteriores, os standards foram endereçados usando os tais símbolos < e >. Mas como se endereça o ficheiro descritor do standard error? Isto é feito colocando o número "2" antes do símbolo! O número 2 vem da prioridade dado a cada ficheiro descritor e naturalmente o "0" é o standard input, o "1" é o standard output e o "2" é o standard error output. Isto é útil porque permite filtrar condições de erro geradas por um comando, enquanto continua a enviar o output para um ficheiro de log.


find / -name *.jpg 2> /dev/null

Usando o "find" como exemplo, os erros de acesso a permissões que resultam do "find" não ter direios de acesso, são reencaminhados para o buraco negro do device "null", enquanto que os resultados positivos terão o seu output no écran do monitor.

Fonte: Linux Format

0 comentários: