Como posso encontrar exatamente quais arquivos foram acessados depois que um comando é executado no tcsh?

0

como posso encontrar quais arquivos tcsh leem para TAB completar a segunda palavra de um comando, ao contrário da primeira palavra.

Eu sei que posso usar apenas whereis complete para ver o caminho para o arquivo *.1.gz , mas isso não é específico o suficiente para dizer quais arquivos estão sendo usados.

Por outro lado, se eu usar locate complete , recebo uma lista de algumas centenas de arquivos, muitos dos quais não são executáveis.

    
por Alexander Wolf 13.09.2018 / 02:58

1 resposta

1

Eu usaria strace para capturar toda a sessão, e pegaria a leitura do teclado navegando na saída do script e, em seguida, encontrando todas as chamadas abertas depois disso. Isso funciona com o Linux e alguns outros sistemas. Há um traço semelhante para o BSD (o MacOS é uma história diferente).

No entanto, tcsh provavelmente não abre os arquivos, mas os lista a partir do diretório. Strace ajudaria com isso também. Por exemplo, em uma verificação rápida, vejo a abertura do diretório atual usando openat

openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3

e, em seguida, use a função lstat para determinar quais são as entradas de interesse (para que possa classificá-las, decidir quais são os arquivos versus diretórios, etc.):

lstat("xterm.desktop", {st_mode=S_IFREG|0444, st_size=1921, ...}) = 0

O "." é o diretório atual. O programa lê uma lista de entradas de diretório que podem ser arquivos, diretórios, links simbólicos, etc., mas que não são classificados (e os tipos são desconhecidos, até usar stat / lstat para perguntar).

locate e whereis não mostram dados úteis, pois não usam as mesmas regras para encontrar os arquivos como tcsh .

    
por 13.09.2018 / 03:39