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
.