strace funciona para alguns comandos incorporados

3

Estou tentando entender alguns conceitos do nível do kernel no Linux. Eu estava checando a diferença entre os comandos shell builtin e os outros comandos executáveis.

Esta resposta maravilhosa indica claramente a diferença e também especifica a necessidade de comandos embutidos no shell.

Agora eu sei que usando type <command-name> , eu posso verificar se é um comando externo ou interno do shell.

Então eu decidi fazer alguns strace 'sobre os vários comandos para entender mais sobre os internos.

Eu aprendi este pequeno truque para fazer strace 'es nos comandos internos do shell. Consegui fazer strace on cd .. de acordo com a resposta acima.

Agora, quando executo type pwd e obtenho a saída como pwd is a shell builtin . Então, eu espero que eu não seja capaz de executar strace nele, já que ele também é um shell embutido. Mas quando eu fiz um strace , fiquei surpreso ao ver que strace funcionou sem a necessidade de fazer stty .

Eu verifiquei strace para echo e também funcionou bem.

Então, meu entendimento é que strace funcionou no caso de pwd e echo porque a execução de pwd e echo não alterou o comportamento do shell.

Estou correto em meu entendimento?

    
por Ramesh 09.09.2014 / 03:28

1 resposta

3

Como pwd ou echo tem comandos externos com o mesmo nome, /bin/pwd ou /bin/echo . Se você olhar para strace output, poderá ver:

$ strace pwd
execve("/bin/pwd", ["pwd"], [/* 68 vars */]) = 0
brk(0)                                  = 0x241e000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f80c31b9000

Uma observação de que, ao pesquisar em PATH , strace aceita apenas o arquivo regular com o conjunto de bits de execução.

    
por 09.09.2014 / 03:36