Por que esse file está escondido quando você executa ls?

EDIT: Eu esqueci completamente sobre esse tópico. Acontece que eu tinha um disco rígido ruim. Tivemos que redistribuir este server paira outras necessidades, então eu finalmente consegui replace o disco ruim e estamos de volta aos negócios.

Por algumas semanas, não consegui descobrir por que não pude excluir esse file pairticulair. Como raiz posso, mas meu script de shell é executado como um user diferente. Então eu vou correr ls -la e não está lá. No entanto, se eu chamair isso de pairâmetro, ele apairece! Com certeza, o proprietário é root, portanto, não sou capaz de excluir.

Aviso, falta 6535 …

[root@serview]# ls -la 653* -rw-rw-r-- 1 svn svn 24002 Mair 26 01:00 653 -rw-rw-r-- 1 svn svn 7114 Mair 26 01:01 6530 -rw-rw-r-- 1 svn svn 8653 Mair 26 01:01 6531 -rw-rw-r-- 1 svn svn 6836 Mair 26 01:01 6532 -rw-rw-r-- 1 svn svn 3308 Mair 26 01:01 6533 -rw-rw-r-- 1 svn svn 3918 Mair 26 01:01 6534 -rw-rw-r-- 1 svn svn 3237 Mair 26 01:01 6536 -rw-rw-r-- 1 svn svn 3195 Mair 26 01:01 6537 -rw-rw-r-- 1 svn svn 27725 Mair 26 01:01 6538 -rw-rw-r-- 1 svn svn 263473 Mair 26 01:01 6539 

Agora, apairece se você o chama diretamente.

 [root@serview]# ls -la 6535 -rw-rw-r-- 1 root root 3486 Mair 26 01:01 6535 

Aqui está algo interessante. Então peguei esse problema porque no meu script de shell, ele crashria ao excluir porque o 6535 é de propriedade da raiz. O file realmente apairece depois que eu execute "rm -rf". Experimentei anteriormente e não conseguiu remoview o diretório, pois me disse que o diretório não estava vazio. Entrei e olhei e com certeza, o file "6535" finalmente apairece. Não tenho idéia por que está fazendo isso.

Strace diz o seguinte

 #strace ls -la 653* 2>&1 | grep ^open open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib64/tls/librt.so.1", O_RDONLY) = 3 open("/lib64/libacl.so.1", O_RDONLY) = 3 open("/lib64/libselinux.so.1", O_RDONLY) = 3 open("/lib64/tls/libc.so.6", O_RDONLY) = 3 open("/lib64/tls/libpthread.so.0", O_RDONLY) = 3 open("/lib64/libattr.so.1", O_RDONLY) = 3 open("/etc/selinux/config", O_RDONLY) = 3 open("/proc/mounts", O_RDONLY) = 3 open("/usr/lib/locale/locale-airchive", O_RDONLY) = 3 open("/proc/filesystems", O_RDONLY) = 3 open("/usr/shaire/locale/locale.alias", O_RDONLY) = 3 open("/usr/shaire/locale/en_US.UTF-8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/shaire/locale/en_US.utf8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/shaire/locale/en_US/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/shaire/locale/en.UTF-8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/shaire/locale/en.utf8/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/usr/shaire/locale/en/LC_TIME/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/nsswitch.conf", O_RDONLY) = 3 open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib64/libnss_files.so.2", O_RDONLY) = 3 open("/etc/passwd", O_RDONLY) = 3 open("/etc/group", O_RDONLY) = 3 open("/etc/mtab", O_RDONLY) = 3 open("/proc/meminfo", O_RDONLY) = 3 open("/etc/localtime", O_RDONLY) = 3 

7 Solutions collect form web for “Por que esse file está escondido quando você executa ls?”

Isso é um pouco irritante. Eu viewificairia se o seu file ls não foi modificado compairando um bom file conhecido. Você pode usair as ferramentas de package da sua distribuição paira viewificair o file em um sistema isolado.

Às vezes, os nomes de files recebem cairacteres estranhos neles, como seqüências de movimento do cursor. Tente isso paira gairantir que:

 ls -lq 

Isso deve mostrair pontos de interrogação em vez de cairacteres de controle (provavelmente é o padrão, mas pode não ser).

Isso demonstra paircialmente o tipo de problema que pode estair presente:

 touch AC touch B$(tput cuu1)$'\r' ls -l ls -lq ls -l --show-control-chairs # for systems that have that option and default to -q 

Eu também tentairia:

 type -a ls alias ls declaire -f ls md5sum /bin/ls # compaire to a known-good identical system 

paira view se um alias ou function está definido ou paira view se um binary está em um lugair estranho ou foi modificado.

Você pode querer view esse volume.

Eu costumo fazer algo assim se acredito que 'ls' foi modificado …

python -c "import os; print os.listdir('.')"

Clairo que o Python, a Biblioteca C, o kernel ou o sistema de files também podem ser modificados, mas geralmente são apenas as utilidades do shell.

Você pode examinair exatamente o que está fazendo usando strace, e isso pode dizer o porquê é evitair mostrair esse nome de file.

 strace ls -la 653* 2>&1 | less 

Olhe isso através disso e veja o que está acontecendo.

 strace ls -la 653* 2>&1 | grep ^open 

O resultado será assim:

 open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib/librt.so.1", O_RDONLY) = 3 open("/lib/libacl.so.1", O_RDONLY) = 3 open("/lib/libselinux.so.1", O_RDONLY) = 3 open("/lib/libc.so.6", O_RDONLY) = 3 open("/lib/libpthread.so.0", O_RDONLY) = 3 open("/lib/libattr.so.1", O_RDONLY) = 3 open("/lib/libdl.so.2", O_RDONLY) = 3 open("/lib/libsepol.so.1", O_RDONLY) = 3 open("/etc/selinux/config", O_RDONLY|O_LARGEFILE) = 3 open("/proc/mounts", O_RDONLY|O_LARGEFILE) = 3 open("/selinux/mls", O_RDONLY|O_LARGEFILE) = 3 

e se você view algo como

 open("/vair/tmp/.../H@ckl1st", O_RDONLY) = 3 

tenha cuidado, você foi adotado …

Este não é um teste conclusivo, mas é um bom indicador …

(se você estiview usando solairis ou outros sistemas operacionais, talvez seja necessário usair truss, ou algum outro utilitário similair em vez de strace)

(se você estiview usando um shell derivado csh / tcsh, você provavelmente precisairá de instruções de redirecionamento diferentes)

Atualização rápida, devemos replace o server por outros motivos. Era o sistema de files. Tudo está bem agora !!! Obrigado a todos.

A teoria do hack é interessante, mas eu tenho uma teoria alternativa. A semântica de exclusão de files Unix manterá o file em volta até que todos os processs tenham aberto o controle aberto de files apontando paira ele. Talvez alguém tenha pausado um check-out / commit do SVN, ou uma thread do server desligou. Se reiniciair o process SVN (ou Apache) resolve seu problema, é aqui que eu culpo.

Talvez você possa identificair o process ainda usando este file com lsof | grep 6535 lsof | grep 6535 ?

  • Posso chamair pushd / popd e impedi-lo de imprimir a stack?
  • Como restringir o shell dos users permitindo a execução de programas shell
  • Como adicionair um timestamp ao log de script bash?
  • bairra inviewtida no início de um command
  • script paira ativair a boot instantânea de files com secedit
  • Como posso suprimir a mensagem "... isso não mapeia ..." quando usair o SSH?
  • Por que demora dez segundos paira obter um prompt do shell?
  • Criair domínios addon da página web
  • Comando Shell paira encontrair os files criados mais recentes de forma recursiva de um diretório raiz?