Estranho comportamento do sistema de arquivos, Ubuntu 9

2

Eu tenho duas janelas abertas na mesma máquina (Ubuntu 9, ia32, server). Vou chamar essas janelas W1 e W2.

W1:

$ cd ~/test  
$ ls  
sample  
$  

No W2 eu executo "make" de um diretório pai que recria o arquivo test / sample:

$ make project
.
.
$ cd test
$ ls 
sample
$

Agora, voltando ao W1:

$ ls
$ cd ../test
$ ls 
sample
$

Em outras palavras, depois de construir a partir de outra janela e o arquivo test / sample ser substituído, ls mostrará o arquivo como ausente na segunda janela até que eu cd ../test volte ao diretório onde ele reaparece.

Eu posso dar mais detalhes, se necessário, mas apenas me perguntando se esse é um comportamento bem conhecido.

    
por Fixee 15.02.2011 / 21:57

2 respostas

2

Faça essa experiência e você verá o que está acontecendo:

W1: cd /tmp
W1: mkdir foo
W1: cd foo
W1: rmdir ../foo
W1: ls
W1: touch ./bar

W2: cd /tmp
W2: mkdir foo
W2: cd foo
W2: touch bar
W2: ls

W1: ls
W1: touch bar

Basicamente, quando o diretório de trabalho em que um processo está é removido, o sistema não pode simplesmente alterar aleatoriamente seu diretório de trabalho para ele. Isso seria uma enorme falha de segurança. Por isso, é uma espécie de diretório de trabalho falso que pode ser lido (dando 0 bytes) e várias outras operações, mas não pode ser largamente usado. Por acaso, ele terá o mesmo nome de um novo diretório criado no mesmo lugar, mas isso é superficial.

Se você fizer lsof | fgrep $$ depois que o diretório for removido, você verá uma entrada como esta:

bash   2924   a_user   cwd   DIR   253,17   48   1327431   /tmp/joe (deleted)
    
por 15.02.2011 / 22:13
1

Você tem (ou o seu shell tem) um descritor de arquivos aberto para um diretório cuja contagem nlink foi reduzida a zero (provavelmente - você deixou de fora o mais importante de todos: make) - mas é claro que o objeto mora contanto que uma referência seja realizada:

/dev/shm$ md z
/dev/shm$ cd z
/dev/shm/z$ rd ../z
/dev/shm/z$ ls -al
total 0
/dev/shm/z$ ls -dli .
9347030 drwxr-xr-x 0 me users 40 Feb 15 21:59 .

Recriar / dev / shm / z cria uma nova entidade.

/dev/shm/z$ md /dev/shm/z
/dev/shm/z$ ls -dli .
9347030 drwxr-xr-x 0 me users 40 Feb 15 21:59 .
/dev/shm/z$ ls -dli /dev/shm/z
9350877 drwxr-xr-x 2 me users 40 Feb 15 22:03 /dev/shm/z

Todo comportamento bem definido.

    
por 15.02.2011 / 22:04