как преодолеть «устройство или ресурс занят»?

<p>я пытался <code>rm -rf</code> папку и получил "устройство или ресурс занят".</p><p>в windows я бы использовал lockhunter, чтобы решить эту проблему. что такое эквивалент linux? (пожалуйста, дайте в качестве ответа простой метод "разблокировать этот", а не полные статьи, такие как <a href="http://www.innovationsts.com/blog/?p=658">эта</a> . хотя они полезны, в настоящее время меня интересует только asimplemethodthatworks ™)</p>

<p>инструмент, который вам нужен, это <code>lsof</code>, что означает <em>список открытых файлов</em>.</p><p>у него много опций, поэтому проверьте страницу руководства, но если вы хотите увидеть все открытые файлы в каталоге:</p><pre>\_<code>lsof +d /path </code>\_</pre><p>это будет проходить через файловую систему в \_<code>/path</code>\_, так что будьте осторожны, делая это на больших деревьях каталогов.</p><p>как только вы узнаете, в каких процессах открыты файлы, вы можете выйти из этих приложений или убить их с помощью команды <code>kill(1)</code>.</p>

<p>иногда это является результатом проблем с монтированием, поэтому я размонтирую файловую систему или каталог, который вы пытаетесь удалить:</p><blockquote> <p>размонтирование/путь</p> </blockquote>

<p>я использую <code>fuser</code> для такого рода вещей. он покажет, какой процесс использует файл или файлы в монтировании.</p>

<p>вот решение:</p><ol> <li>зайдите в каталог и введите <code>ls -a</code></li> <li>вы найдете <code>.xyz</code> файл</li> <li><code>vi .xyz</code> и посмотрите, что содержимое файла</li> <li><code>ps -ef | grep username</code></li> <li>вы увидите содержимое .xyz в 8-м столбце (последняя строка).</li> <li><code>kill -9 job\_ids</code> - где job\_ids - значение 2-го столбца соответствующей ошибки, вызванной содержимым в 8-м столбце</li> <li>теперь попробуйте удалить папку или файл.</li> </ol>

<p>у меня была такая же проблема, построил однострочник, начиная с рекомендации @camh:</p><pre><code>lsof +d ./ | awk '{print $2}' | tail -n +2 | xargs kill -9 </code></pre><p>команда <code>awk</code> захватывает pids. команда <code>tail</code> избавляет от надоедливой первой записи: "pid". я использовал <code>-9</code> на убийство, другие могут иметь более безопасные варианты.</p>

<p>я часто сталкиваюсь с этим на серверах с сетевыми файловыми системами nfs. я предполагаю, что это как-то связано с файловой системой, поскольку файлы обычно называются как <code>.nfs000000123089abcxyz</code>.</p><p>мое типичное решение - переименовать или переместить родительский каталог файла, а затем вернуться через день или два, и файл будет автоматически удален, и в этот момент я могу свободно удалить каталог.</p><p>обычно это происходит в каталогах, где я устанавливаю или компилирую программные библиотеки.</p>

<p>у меня была эта проблема, когда автоматизированный тест создал виртуальный диск. команды, предложенные в других ответах, <code>lsof</code> и <code>fuser</code>, не помогли. после тестов я попытался размонтировать его, а затем удалить папку. я был действительно смущен целую вечность, потому что я не мог избавиться от этого - я продолжал получать <em>"устройство или ресурс занят"</em>!</p><p>случайно я узнал, как избавиться от виртуального диска. мне пришлось размонтировать его столько раз, сколько я выполнил команду <code>mount</code>, т.е. <code>sudo umount path</code></p><p>из-за того, что он был создан с использованием автоматического тестирования, он монтировался много раз, поэтому я не мог избавиться от него, просто размонтировав его один раз после тестов. итак, после того, как я вручную размонтировал его много раз, он, наконец, снова стал обычной папкой, и я смог удалить его.</p><p>надеюсь, это может помочь кому-то, кто сталкивается с этой проблемой!</p>

<p>отбросив вопрос прабхата выше, у меня была эта проблема в macos high sierra, когда я застрял в процессе encfs, перезагрузка решила его, но это</p><pre><code>ps -ef | grep name-of-busy-dir </code></pre><p>показал мне процесс и pid (столбец два).</p><pre><code>sudo kill -15 pid-here </code></pre><p>починил это.</p>

<p>если у вас есть доступ к серверу, попробуйте</p><blockquote> <p>удаление этого каталога с сервера</p> </blockquote><p>или снова выполните <strong>mount</strong> и <strong>mount</strong>, попробуйте <code>umount -l</code>: ленивая размонтирование, если возникает проблема с обычным размонтированием.</p><p>у меня тоже была такая проблема где</p><p><code>lsof +d path</code>: не выводит</p><p><code>ps -ef</code>: не дает соответствующей информации</p>