“/ proc / self” - Alterando dinamicamente um link temporário

4

Eu estava vagando no sistema de arquivos Linux, que parece ser uma boa maneira de entender como funciona. No UNIX "tudo é um arquivo", então eu estava olhando para /dev/stdin e notei que é um link suave para /proc/self/fd/0 . Então decidi dar uma olhada na pasta /proc , achando que /proc/self é na verdade um link para /proc/{PID} . Para ser mais preciso, o PID é o do comando ls -l /proc/self que emito para verificar seu valor.

Minha teoria é que o link flexível é alterado toda vez que um programa tenta lê-lo, para apontar para a pasta do processo PID correto. Isso é feito pelo kernel em todas as solicitações para ler a pasta /proc ? Eu não acho que você precisa realmente ler o arquivo para obter a saída de ls ou não seriamos capazes de ver arquivos com permissão 700, o mesmo acontece com a mudança de link suave quando a pasta /proc é acessada?

Indo ainda mais longe: Esse tipo de controle é restrito ao próprio kernel ou alguns aplicativos podem fazer uso disso? (Talvez verificar quando uma pasta está sendo acessada para alterar dinamicamente seu conteúdo / links de acordo com "quem" está fazendo isso)

    
por IanC 09.08.2016 / 04:58

1 resposta

3

/proc é um ponto de montagem para procfs (tipo de tmpfs , que vive na memória), que é uma interface para a estrutura de dados interna do kernel. Tudo o que você vê em /proc é diretamente preenchido pelo Linux e também mantido pelo próprio kernel.

/proc/self é um link simbólico para o diretório /proc/<PID> , em que <PID> é o ID do processo que acessa /proc nesse mesmo instante. Então, enquanto em bash se você fizer cd /proc/self , você será cd -id no /proc/<PID>/ , onde <PID> é o PID para essa instância de bash , enquanto se algum outro processo, digamos para cat :

$ cat /proc/self/comm
cat

Você absolutamente não deve alterar nada em /proc , exceto se o kernel fornecer alguma interface para alterar os valores. Por exemplo, o kernel fornece a interface /proc/sys/ para alterar os parâmetros do kernel no tempo de execução, embora você deva usar principalmente sysctl para alterar valores em /proc/sys/ em vez de editar diretamente qualquer arquivo. O manuseio incorreto da estrutura de dados interna do Kernel resultaria em um sistema inutilizável ou até mesmo falha no sistema.

    
por heemayl 09.08.2016 / 05:33