sem acesso para excluir arquivos dentro de / tmp

0

Eu excluí uma postagem semelhante que fiz para esclarecer esse problema, por isso não é uma postagem dupla.

minha pasta / tmp está cheia de arquivos aleatórios. Meu espaço de armazenamento real é bom, mas porque há literalmente centenas de milhares desses pequenos arquivos, em pouco tempo eu vou ter erros devido ao grande número de arquivos.

Eu tentei várias opções como executar o cron e vários sudo rm file* , mas depois que eu instalei o Midnight Commander e tentei excluir, recebi esta nota:

"comandos shell não funcionarão quando você estiver em um sistema de arquivos não local"

Então, como eu fico local? Eu tenho tentado através da linha de comando do terminal no Mac, então eu tentei as mesmas coisas via VMWare, mas não vá. Eu tentei comandos diretos do Linux, bem como usando o Midnight Commander. Com o Linux puro eu não tive nenhum erro nem indicação de que rm não estava funcionando até que eu executei outro comando ll e vi os arquivos então pelo menos recebi essa nota acima do Midnight Commander.

Minhas permissões são definidas da mesma forma que o servidor testing / dev, que é idêntico ao servidor live onde estou tendo problemas, mas sua pasta / tmp está limpa.

    
por kelly johnson 15.10.2013 / 21:17

2 respostas

2

Primeiro, os bits de permissão usuais para o diretório / tmp são 1777 . O primeiro 1 indica que o bit adesivo do diretório foi definido, o que significa que, embora vários usuários possam gravar no diretório , eles mantêm a propriedade de quaisquer arquivos escritos lá, de modo que somente eles (ou root) possam excluí-los. Portanto, sem sudo , você só poderá excluir seus próprios arquivos de / tmp. Além disso, alguns arquivos em / tmp podem ser abertos e / ou bloqueados por outros processos e você não deve tentar excluí-los, a menos que saiba que os bloqueios são 'obsoletos' - você pode verificar arquivos abertos com lsof , por exemplo

$ sudo lsof +d /tmp

para ver os arquivos abertos no nível superior do diretório ou

$ sudo lsof +D /tmp

para mostrar arquivos abertos em qualquer lugar em / tmp e seus subdiretórios - veja a seção OUTPUT do lsof manpages man lsof para uma explicação do que as várias colunas significam.

O segundo problema que você provavelmente enfrentará é que, embora comandos como rm possam receber vários argumentos de nome de arquivo (incluindo curingas expandidos ou shell globs ), há um limite para o comprimento permitido do argumento Lista. Por exemplo, se criarmos 100.000 arquivos em /tmp

# touch /tmp/file{000000..099999}
# ls /tmp/file* | wc -l
100000

(até aí tudo bem) mas se adicionarmos mais 100.000 arquivos, o glob shell expandido (ou seja, a lista de arquivos a serem excluídos) se torna muito longo para a linha de comando ls

# touch /tmp/file{100000..199999}
# ls /tmp/file* | wc -l
-bash: /bin/ls: Argument list too long
0

e da mesma forma não podemos excluir de uma só vez com rm

# rm -f /tmp/file*
-bash: /bin/rm: Argument list too long

A solução é dividir a lista de curingas em subconjuntos gerenciáveis - você fez isso manualmente, mas é possível fazer isso automaticamente usando o comando xargs , por exemplo,

# echo /tmp/file* | xargs rm -f

Você também pode ter usado o comando find com uma ação -exec ou -execdir e a sintaxe de substituição do argumento {} + - de man find

-exec command {} +
              This  variant  of the -exec action runs the specified command on
              the selected files, but the command line is built  by  appending
              each  selected file name at the end; the total number of invoca-
              tions of the command will  be  much  less  than  the  number  of
              matched  files.   The command line is built in much the same way
              that xargs builds its command lines.  Only one instance of  '{}'
              is  allowed  within the command.  The command is executed in the
              starting directory.

por exemplo

# find /tmp -maxdepth 1 -name 'file*' -type f -exec rm -f {} +

embora a versão xargs provavelmente seja mais rápida se você só precisar excluir do nível superior de /tmp (ou seja, não de quaisquer subdiretórios).

Se o diretório continuar a ser preenchido, você deve realmente investigar quais usuários / processos estão criando os arquivos e por quê. Se você alterou as permissões de /tmp , você deve redefini-las para 1777 .

    
por steeldriver 16.10.2013 / 01:25
0

Se sudo rm -rf foldername não funcionar, siga o procedimento abaixo

Verifique com o comando

which rm 

verifique o caminho. no meu caso foi /bin/rm então execute o comando como

/bin/rm -rf foldername
    
por Ashwani Panwar 11.12.2015 / 10:12