нет доступа к удалению файлов в / tmp

Я удалил аналогичную публикацию, которую я сделал, чтобы прояснить этот вопрос, поэтому это не двойная публикация.

Папка my / tmp полна случайных файлов. Мое реальное пространство для хранения в порядке, но поскольку буквально сотни тысяч этих маленьких файлов, вскоре я получу ошибки из-за огромного количества файлов.

Я пробовал различные варианты, такие как запуск cron и различные sudo rm file*, но после того, как я установил Midnight Commander и попытался удалить, я получил следующее примечание:

"команды оболочки не будут работать, когда вы находитесь в нелокальной файловой системе "

Итак, как мне получить локальную? Я пытался через командную строку терминала на Mac, затем я пытался все то же самое с помощью VMWare, но безуспешно. Я пробовал прямые команды Linux, а также с помощью Midnight Commander. В чистом Linux у меня не было ни ошибок, ни указаний на то, что rm не работал, пока я не запустил другую команду ll и не увидел файлы, поэтому, по крайней мере, я получил эту заметку выше от Midnight Commander.

Мои разрешения установлены так же, как и для сервера тестирования / dev, который идентичен живому серверу, на котором у меня возникают проблемы, но его папка / tmp чистая.

0
задан 16.04.2020, 03:12

2 ответа

Во-первых, обычными битами разрешений для каталога / tmp являются 1777. Ведущий 1 указывает, что был установлен залипший бит каталога , что означает, что, хотя несколько пользователей могут писать в каталог, они сохраняют право собственности на любые файлы, записанные в нем, так что только они (или root) могут удали их. Следовательно, без sudo вы сможете удалять только свои собственные файлы из / tmp. Кроме того, некоторые файлы в / tmp могут быть открыты и / или заблокированы другими процессами, и вы не должны пытаться удалить их, если вы не знаете, что блокировки «устарели» - вы можете проверить наличие открытых файлов с помощью lsof, например

$ sudo lsof +d /tmp

, чтобы увидеть все открытые файлы на верхнем уровне каталога, или

$ sudo lsof +D /tmp

, чтобы показать открытые файлы в любом месте в / tmp и его подкаталогах - см. Раздел OUTPUT в lsof manpages man lsof для объяснения того, что означают различные столбцы.

Вторая проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что хотя такие команды, как rm, могут принимать несколько аргументов имени файла (включая расширенные символы подстановки или глобусы оболочки ), существует ограничение на допустимую длину списка аргументов , Например, если мы создадим 100 000 файлов в /tmp

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

(пока все хорошо), но если мы добавим еще 100 000 файлов, появится расширенный глобус оболочки (т.е. список файлов, которые нужно удалить) становится слишком длинным для командной строки ls

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

, и аналогично мы не можем удалить за один раз с rm

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

Решение состоит в том, чтобы разбить подстановочный знак список в управляемые подмножества - вы сделали это вручную, но это можно сделать автоматически с помощью команды xargs, например

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

Вы могли также использовать команду find с действием -exec или -execdir и синтаксисом замены аргумента {} + - из 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.

]

, например,

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

, хотя версия xargs, скорее всего, будет быстрее, если вам нужно будет удалить только с верхнего уровня /tmp (т.е. не из каких-либо подкаталогов).

Если каталог продолжает заполняться, вам следует выяснить, какие пользователи / процессы создают файлы и почему. Если вы изменили права доступа /tmp, вам следует сбросить их на 1777.

0
ответ дан 16.04.2020, 03:12
  • 1
    ... PS..., как каждый представляет код в этих комментариях? Я попробовал метки, и они просто представляют? – DarkSuniuM 16.04.2020, 03:13
  • 2
    Большое объяснение! Проблема теперь - то, что, хотя всех файлов не стало, когда я буду, я добираюсь: www-данные drwxr-xr-x 3 coname 34484224 10 октября 13:00 tmp, Что 3 миллиметра все еще там, хотя существует на самом деле только 4 файла. Кроме того, это - папка, которую Drupal использует для временных файлов. I' ve проверил все настройки Drupal, и они в порядке. Теперь кажется, что сервер является ' remembering' вместо ' thinking'...? – Ilja Everilä 16.04.2020, 03:13
  • 3
    Don' t забывают, что некоторые файлы могут быть открыты / заблокированный другими процессами - я отредактировал свой ответ для упоминания эти lsof команда для списка открытых файлов. – senaps 16.04.2020, 03:13

Если sudo rm -rf foldername не работает, выполните следующую процедуру

Проверьте с помощью команды

which rm 

, затем проверьте путь. в моем случае это было /bin/rm, затем запустите команду, как

/bin/rm -rf foldername
0
ответ дан 16.04.2020, 03:13

Теги

Похожие вопросы