Удалил папку bin linux

Как удалить каталог в Linux

Есть несколько различных способов удаления каталогов в системах Linux. Если вы используете файловый менеджер рабочего стола, такой как Gnome’s Files или KDE’s Dolphin, вы можете удалять файлы и каталоги с помощью графического пользовательского интерфейса менеджера. Но если вы работаете на автономном сервере или хотите удалить сразу несколько каталогов, лучшим вариантом является удаление каталогов (папок) из командной строки.

В этой статье мы объясним, как удалять каталоги в Linux с помощью команд rmdir , rm и find .

Подготовка

При удалении каталога с помощью файлового менеджера рабочего стола каталог фактически перемещается в корзину и может быть легко восстановлен.

Будьте особенно осторожны при удалении файлов или каталогов из командной строки, поскольку после удаления каталога с помощью команд, описанных в этой статье, его невозможно полностью восстановить.

В большинстве файловых систем Linux для удаления каталога требуется разрешение на запись в каталог и его содержимое. В противном случае вы получите ошибку «Операция запрещена».

Имена каталогов с пробелами должны быть экранированы обратной косой чертой ( / ).

Удаление каталогов с помощью rmdir

rmdir — это утилита командной строки для удаления пустых каталогов. Это полезно, когда вы хотите удалить каталог только в том случае, если он пуст, без необходимости проверять, пуст каталог или нет.

Чтобы удалить каталог с помощью rmdir , введите команду, а затем имя каталога, который вы хотите удалить. Например, чтобы удалить каталог с именем dir1 , введите:

Если каталог не пустой, вы получите следующую ошибку:

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

Удаление каталогов с помощью rm

rm — это утилита командной строки для удаления файлов и каталогов. В отличие от rmdir команда rm может удалять как пустые, так и непустые каталоги.

По умолчанию при использовании без каких-либо параметров rm не удаляет каталоги. Чтобы удалить пустой каталог, используйте параметр -d ( —dir ), а для удаления непустого каталога и всего его содержимого используйте параметр -r ( —recursive или -R ).

Например, чтобы удалить каталог с именем dir1 вместе со всем его содержимым, введите:

Если каталог или файл в каталоге защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить каталог без запроса, используйте параметр -f :

Чтобы удалить сразу несколько каталогов, вызовите команду rm , после которой укажите имена каталогов, разделенные пробелом. Приведенная ниже команда удалит все перечисленные каталоги и их содержимое:

Параметр -i указывает rm запрашивать подтверждение удаления каждого подкаталога и файла. Если в каталоге много файлов, это может немного раздражать, поэтому вы можете рассмотреть возможность использования опции -I которая предложит вам только один раз, прежде чем продолжить удаление.

Чтобы удалить каталог, введите y и нажмите Enter .

Вы также можете использовать обычные расширения для сопоставления и удаления нескольких каталогов. Например, чтобы удалить все каталоги первого уровня в текущем каталоге, который заканчивается на _bak , вы должны использовать следующую команду:

Использование регулярных расширений при удалении каталогов может быть рискованным. Рекомендуется сначала перечислить каталоги с помощью команды ls чтобы вы могли видеть, какие каталоги будут удалены, прежде чем запускать команду rm .

Удаление каталогов с помощью find

find — это утилита командной строки, которая позволяет вам искать файлы и каталоги на основе заданного выражения и выполнять действие с каждым совпадающим файлом или каталогом.

Наиболее распространенный сценарий — использовать команду find для удаления каталогов на основе шаблона. Например, чтобы удалить все каталоги, которые заканчиваются на _cache в текущем рабочем каталоге, вы должны запустить:

Давайте проанализируем команду выше:

  • /dir — рекурсивный поиск в текущем рабочем каталоге ( . ).
  • -type d — ограничивает поиск каталогами.
  • -name ‘*_cache’ — искать только каталоги, заканчивающиеся на _cache
  • -exec — выполняет внешнюю команду с необязательными аргументами, в данном случае это rm -r .
  • <> + — добавляет найденные файлы в конец команды rm .

Удаление всех пустых каталогов

Чтобы удалить все пустые каталоги в дереве каталогов, выполните:

Вот объяснение используемых опций:

  • /dir — рекурсивный поиск в каталоге /dir .
  • -type d — ограничивает поиск каталогами.
  • -empty — ограничивает поиск только пустыми каталогами.
  • -delete — удаляет все найденные пустые каталоги в поддереве. -delete может удалять только пустые каталоги.

Используйте параметр -delete с особой осторожностью. Командная строка поиска оценивается как выражение, и если вы сначала добавите параметр -delete , команда удалит все, что находится ниже указанных вами начальных точек.

Всегда сначала проверяйте команду без опции -delete и используйте -delete в качестве последней опции.

/ bin / rm: слишком длинный список аргументов

Это сообщение об ошибке появляется, когда вы используете команду rm для удаления каталога, содержащего огромное количество файлов. Это происходит из-за того, что количество файлов превышает системное ограничение на размер аргумента командной строки.

Есть несколько разных решений этой проблемы. Например, вы можете cd в каталог и вручную или с помощью цикла для удаления Подкаталогов один за другим.

Самое простое решение — сначала удалить все файлы в каталоге с помощью команды find а затем удалить каталог:

Выводы

С помощью rm и find вы можете быстро и эффективно удалять каталоги по различным критериям.

Удаление каталогов — простой и легкий процесс, но вы должны быть осторожны, чтобы не удалить важные данные.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Случайно удален / bin. Как мне его восстановить?

Я работал над каталогом с именем bin . После того, как я закончил, из-за владения bin и некоторых файлов в нем я случайно запустил:

Читайте также:  Единый клиент jakarta для windows 10

Кажется, мои руки добавляли / перед всем, что я печатаю.

Как я могу восстановить мой /bin каталог?

Мне нужны те же файлы, которые принадлежат моему Ubuntu, я не люблю копировать и вставлять их с живого диска или другой работающей системы.

Является ли это возможным?

Ну, большинство тривиальных и важных утилит установлены в /bin , и теперь вы потеряли доступ ко всем из них. Фактически, если вы перезагрузите компьютер, ваша система больше не сможет загружаться.

В любом случае, мы собираемся исправить проблему и сделать /bin содержимое как можно ближе к тому, где оно было. Единственным отличием будут некоторые символические ссылки, которые мы тоже исправим.

Во-первых, мы должны chroot в вашу сломанную систему, но с небольшой разницей ! После этого мы получим список установленных пакетов в вашей системе, в которых есть какой-либо установленный файл в /bin каталоге, затем мы будем только загружать необходимые пакеты и извлекать необходимые файлы в /bin . Тогда мы будем готовы.

Например, после chroot этого мы можем получить список пакетов, в которых установлены файлы при /bin использовании:

И мы также можем использовать:

перечислить установленные файлы этими пакетами в /bin .

Затем мы просто создаем список всех пакетов, которые нам нужны, затем скачиваем их и распаковываем в /bin нечто вроде:

Однако мы должны использовать скрипт для проверки всех установленных пакетов в нашей системе, потому что делать это вручную — просто безумие.

Поэтому я написал сценарий, который делает все, что нам нужно. Он находит все необходимые пакеты для восстановления /bin , показывает нам имя каждого пакета и связанные с ним файлы, к которым он принадлежит /bin . Вот скриншот:

В конце мы решили переустановить все пакеты или только загрузить и распаковать необходимые файлы /bin (что является рекомендуемым вариантом):

Давайте начнем

корневой

Загрузите вашу систему с живого диска, который имеет ту же архитектуру, что и установленная вами Ubuntu, откройте терминал и получите root-доступ:

Смонтируйте свою root файловую систему (для меня это /dev/sda1 ):

Нам понадобится подключение к Интернету, поэтому скопируйте resolv.conf из живого Ubuntu в ваш смонтированный корневой раздел:

Теперь скопируйте скрипт куда-нибудь на смонтированный раздел, например:

или вы можете скачать его, используя wget , и т. д. как:

Смонтировать другие необходимые пути:

И вот небольшая разница : как мы можем chroot сломать систему, если там нет /bin каталога? Какую оболочку мы должны запустить?

Так что создайте временный каталог bin. Например: имя bintmp внутри вашей сломанной системы root:

Тогда связывай жизнь /bin с этим:

Загрузите систему, установив в /bintmp/bash качестве оболочки для входа в систему:

Экспортируйте /bintmp как PATH переменную среды:

Дайте скрипту исполняемый бит:

Дождитесь завершения поиска и ответьте на вопрос, который мы видели на скриншоте. Это начнет восстанавливать, /bin и мы почти закончили.

После того, как это сделано, используйте CTRL +, D чтобы выйти из chroot среды и размонтировать смонтированные пути:

Восстановление ссылок внутри /bin

Теперь почти все файлы в /bin каталоге вернулись, за исключением около 5 символических ссылок, которыми управляет update-alternatives .

В вашей работающей системе запустите:

Он задает вам несколько вопросов; Вы можете просто нажать, ENTER чтобы принять их все.

И теперь мы закончили.

Если ваша текущая система все еще имеет работающую оболочку и доступ к Интернету, это можно сделать с помощью инструментов, существующих в других местах системы. Я предполагаю, что вы только удалили /bin . /bin конечно, есть самая удобная утилита, которую вы могли бы использовать в такой ситуации (busybox), но без этого нам придется проявить немного творчества.

Поскольку у вас уже есть работающая оболочка, и, поскольку sudo она /usr/bin включена, давайте запустим работающую корневую оболочку, прежде чем мы нанесем дополнительный ущерб. Но /bin/bash и большинство других оболочек ушли! К счастью, в Linux все еще есть копия оболочки, которую вы используете. Так:

Строго говоря, нам не нужна корневая оболочка для большей части следующего. Но в любом случае.

Теперь dpkg все еще работает, по крайней мере, для определения, в каких пакетах есть файлы /bin :

Мы можем использовать его awk для обработки и получения имен пакетов, xargs а также apt-get для загрузки пакетов (все в /usr/bin ). Если у вас есть временный каталог, который вы можете использовать, cd там, потому что ваш текущий каталог будет немного грязным:

Теперь самая большая проблема, с которой мы сталкиваемся, — это /bin/tar отсутствие, и без него dpkg невозможно извлечь архивы. Мы можем пройти две трети пути, потому что:

.deb файлы на самом деле являются ar архивами (снова в /usr/bin ):

Состоит из двух .tar.* архивов data и control :

В то время как GZIP утилиты находятся в /bin , unxz в /usr/bin :

Теперь у нас есть data.tar файл без tar извлечения tar из него.

Питон на помощь ! Вот где sudo действительно нужно:

Теперь мы можем использовать dpkg для извлечения оставшихся файлов deb, чтобы получить достаточно полный /bin :

Тем не менее, мы все равно должны сделать правильную установку файлов deb, чтобы символические ссылки и т. Д., Которые создавались бы пакетами, создавались заново:

Мы не можем использовать Python 2 для непосредственного извлечения data.tar.xz файла, так как Python 2 поддерживает только сжатие gzip и bzip2. Python 3, однако, поддерживает его, поэтому вы можете использовать Python 3 напрямую без unxz :

  • После возвращения /bin/tar вам по-прежнему необходимо извлечь некоторые файлы deb, прежде чем вы сможете их использовать apt-get : оболочки, coreutils и т. Д. Проще просто извлечь их все и переустановить позже.
  • Источник

    Удалил директории etc, bin, usr, как исправить?

    с помощью команды «mv /folder/* /*» затер эти директории. Как можно в кратчайшие сроки их восстановить?

    Читайте также:  Astra linux pdf reader

    А думать кто будет ?

    Как можно в кратчайшие сроки их восстановить?

    Из бэкапа системы. Если бэкапа нет — то переустановка.

    понятно. Хотелось бы узнать, почему так произошло, чтобы опять не наступить на те же грабли?

    zfs rollback zroot/usr@2012-02-24

    Хотелось бы узнать, почему так произошло

    Что именно? Почему mv затёр корень или почему нейроны в твоём мозге неадекватно перемкнуло?

    Вы знаете что такое маска ?

    • * — Любое число любых символов
    • ? — Любой один символ
    • — один символ, входящий в интервал

    Это не принимая во внимание решулярные выражения.

    с помощью команды «mv /folder/* /*» затер эти директории

    Если это именно та команда, ищи все свои ошметки в /var или какой там тебе каталог покажет последним echo /*

    т.е. если без * выполнил бы, то все осталось бы на местах?

    Если у вас так же в директории /folder не было бы поддиреткорий usr, bin и etc то да, тогда бы не затёрлось.

    Но проблема в другом, прежде чем что-то делать нужно сначала подумать что ты делаешь, если не уверен — почитай документацию.

    Удалил директории etc, bin, usr, как исправить?

    Отрезал руку, две ноги, уши, как исправить?

    Стоп! Только что воспроизвёл идентичный сценарий, результат мне непонятен:

    Почему так произошло?

    mv folder/DATA q/bin q/dev q/etc q/lib

    Все эти каталоги переместились в q/lib, всё правильно.

    Тьфу ты, это же очевидно.

    понятно. Хотелось бы узнать, почему так произошло, чтобы опять не наступить на те же грабли?

    Желательно не использовать root.

    опять не наступить на те же грабли?

    Не сидеть под рутом.

    Желательно не использовать root.
    Не сидеть под рутом.

    Иногда под рутом надо глобы использовать, так что добавлю, если не понимаешь во что глоб развернется, запускай сначала команду как аргумент к команде echo, типа:

    А этот трюк работает только с основными командами?

    Хотя я так понимаю это обрабатывает баш (ну или что там) или где я не прав?

    99% людей которые приходят с оффтопика сидят под рутом.
    Ну типа думая что это +100 к интеллекту.

    ТС начинай знакомство с изучения прав. Без них нет смысла вообще сидеть в linux.
    Если только ты не любитель гуя и коробочного образа жизни.

    У меня сервер на дебиане уже год как только под рутом работает. И за это время он наоборот, стал SIDом из сквиза неожиданно, причем рабочим. Просто забыл про временно подключенный репозиторий. А все остальное ломают люди, которым вообще плевать на то, что остается после их пальчиков на пыльном мониторе

    Удалил директории etc, bin, usr, как исправить?

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

    нет, нужно было использовать cp -R, а не mv.

    В командировке разбирался с угроханным таким образом МСВСом. (Да, пользователи работали под рутом.) К счастью, все стёртые каталоги были из числа стандартных, а на соседнем компе стоял точно такой же МСВС, поэтому я их просто перекинул по сети.

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

    Исключения, конечно, бывают. Ну тогда надо быть максимально осторожным и предварительно запустить тестовый вариант команды, как советовали выше.

    Не представляю, как так можно подчистить корень)

    — один символ, входящий в интервал

    бегом читать man bash и думать, почему вот так:

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

    а зачем вам перемещать файлы в системные директории?

    А этот трюк работает только с основными командами?

    это фишка bash’а, и к командам не имеет отношения.

    Для ТС’а, возьмите mc, и перекиньте всё на своё место.

    нет, нужно было использовать cp -R, а не mv.

    просто думать надо. И использовать то, что нужно использовать. Ибо mv это почти всегда не cp|rm.

    А что вы должны были увидеть ?

    Вы дали команду выводить на шаблон AB, где — одна буква, входящая в интервал от ‘a’ до ‘z’, тоже самое и здесь Удалил директории etc, bin, usr, как исправить? (комментарий)

    А что вы должны были увидеть ?

    а что вы там вещали про звёздочку и про вопрос? Звёздочка _совпадает_ с любым числом любых символов, причём рассортировывает найденные файлы по алфавиту. Вопросительный знак _совпадает_ с любым символом. А вот нихрена НЕ совпадает. Это просто буквы алфавита, от a до z. Разницу понимаем?

    «одна любая буква от a до z» _совпадает_ с [a-z].

    Мальчик, пыл убавь, я написал:

    Вы знаете что такое маска ?

    • * — Любое число любых символов
    • ? — Любой один символ
    • — один символ, входящий в интервал

    Один символ, входящий в интервал, как пример указал интервал от ‘a’ до ‘z’, , буква — это символ, и указано что он входит в интервал, в данном случае я написал пример интервала, а именно строчные английские буквы в интервале от ‘a’ до ‘z’. Это пример, если вам не ясно тут уж ничего не поделать, к примеру можно было указать интервал от ‘0’ до ‘9’, <0..9>.

    что-бы было понятнее, попробуйте такую команду:

    Мальчик, пыл убавь, я написал

    ну раз ты так хочешь, могу и мордой в ман ткнуть.

    Я знаю во что она разворачивается, я говорил о шаблонах и указал некоторые возможные конструкции при его формировании, ваш шаблон в этом посте Удалил директории etc, bin, usr, как исправить? (комментарий)

    Логично развернётся в AaB AbB AcB AdB AeB AfB AgB AhB AiB AjB AkB AlB AmB AnB AoB ApB AqB ArB AsB AtB AuB AvB AwB AxB AyB AzB

    И в этом посте всё Удалил директории etc, bin, usr, как исправить? (комментарий) праивильно, я что где-то это опровергаю, я лишь говорю о шаблонах, а их применять и главное понимать это уже должны вы сами.

    Удалил директории etc, bin, usr, как исправить?

    я что где-то это опровергаю, я лишь говорю о шаблонах, а их применять и главное понимать это уже должны вы сами.

    не. Это вы _должны_. Перед тем как назвать собеседника «пылким мальчиком», вы таки просто обязаны самостоятельно прочитать мануал. Но вы этого не сделали. Логично, что сели в лужу (мне как раз недавно именно этот кусок man bash понадобился, потому. Ну не честно конечно.)

    Логично развернётся в AaB AbB AcB AdB AeB AfB AgB AhB AiB AjB AkB AlB AmB AnB AoB ApB AqB ArB AsB AtB AuB AvB AwB AxB AyB AzB

    правильно. А во что развернуться шаблоны A*B, A?B, and A[a-z]B? Можете проверить — это уже _поиск_ файлов, а не подстановка. А это подстановка, и от файлов она не зависит.

    ты начал хамить первым.

    Логично, что сели в лужу (мне как раз недавно именно этот кусок man bash понадобился, потому. Ну не честно конечно.)

    Где я сел в лужу ?

    Это всё маски, применяемые в шаблонах.

    Первые две не указывают конкретики для возможных подстановок вместо маски, следовательно в зависимости от контекста применения шаблона будет производиться подстановка значений.

    Третья маска конкретизирована.

    Можете проверить — это уже _поиск_ файлов, а не подстановка. А это подстановка, и от файлов она не зависит.

    И что из этого и там и там это маска.

    ты начал хамить первым.

    А вот нихрена НЕ совпадает.

    мне ещё раз ман процитировать?

    что непонятно-то? попробую разжевать: <0..9>эквивалентно 0 1 2 3 4 5 6 7 8 9. Т.е тоже самое. Можете так писать, можете эдак. а вот echo *3* покажет все _имена файлов_, в которых есть хоть одна цифра. А echo 3 покажет _имена файлов_, которые имеют вид 0, 1, 2, 3, 4, 5, 6, 7, 8, и 9. А если таких имён нет, данная команда покажет 3. Как и звёздочка с вопросом.

    разницу между «цифрами от 0 до 9» и «списком файлов, имена которых являются цифрами от 0 до 9» разве сложно понять?

    dpkg -S /etc | sed ‘s/\,//g’ | xargs sudo aptitude reinstall

    разницу между «цифрами от 0 до 9» и «списком файлов, имена которых являются цифрами от 0 до 9» разве сложно понять?

    Ну это-то здесь при чём ? Я написал пример шаблонов с пояснением.

    что непонятно-то? попробую разжевать: <0..9>эквивалентно 0 1 2 3 4 5 6 7 8 9. Т.е тоже самое. Можете так писать, можете эдак. а вот echo *6* покажет все _имена файлов_, в которых есть хоть одна цифра. А echo 4 покажет _имена файлов_, которые имеют вид 0, 1, 2, 3, 4, 5, 6, 7, 8, и 9. А если таких имён нет, данная команда покажет 6. Как и звёздочка с вопросом.

    А если таких имён нет, данная команда покажет 8. Как и звёздочка с вопросом.

    Это и так ясно и я это знаю.

    Вы мне объясните суть ваших претензий.

    6 — интервал? Конечно интервал. Но применяется в шаблоне поиска.

    <0..9>— интервал ? Конечно интервал. Но применяется в шаблоне подстановки.

    mv 6* folder/
    mv <0..9>* folder/ Выполнится одинаково.

    в том-то и дело, что нет.

    Ошибки будут, это логично, т.к. здесь просто генерируются последовательности символов согласно шаблону, будет получена эта последовательность:

    В вашем примере команда ‘cp’ будет «пытаться» скопировать имена файлов соответствующим элементам последовательности.

    А шаблон с маской ‘6’ раскроется в последовательность элементов содержащую имена существующих файлов.

    Но фактический результат выполнения операций с шаблоном будет одинаков, в первом случае будут корректно выполнены операции копирования для элементов списка подстановки по шаблону, которые соответствуют именам существующих файлов. Для элементов списка для которых нет файла с таким же именем операция копирования завершится ошибкой, во втором случае список элементов полученных по шаблону будет содержать только имена существующих файлов.

    разумеется нужно учитывать что возможны ошибки в связи с отсутствием файлов.

    Вот вы мне скажите, в этом сообщении: Удалил директории etc, bin, usr, как исправить? (комментарий) я указал частный пример маски интервала, для шаблона подстановки, где я его применю дело десятое, хоть в качестве имени файла источника, в частности в операции копирования, хоть в качестве имени файла приёмника всё в той же операции копирования.

    Сути это не меняет , я описал частный пример интервала и он корректен. Мне не понятны ваши претензии ко мне, если вы хотели дополнить моё описание и указать что — маска интервала подстановки, а [a1-a2] — маска интервала поиска, пожалуйста, дополняйте.

    Я то здесь при чём?

    Ошибки будут, это логично, т.к. здесь просто генерируются последовательности символов согласно шаблону

    Вот вы мне скажите, в этом сообщении: Удалил директории etc, bin, usr, как исправить? (комментарий) я указал частный пример маски интервала, для шаблона подстановки, где я его применю дело десятое, хоть в качестве имени файла источника, в частности в операции копирования, хоть в качестве имени файла приёмника всё в той же операции копирования.

    Сути это не меняет , я описал частный пример интервала и он корректен. Мне не понятны ваши претензии ко мне, если вы хотели дополнить моё описание и указать что — маска интервала подстановки, а [a1-a2] — маска интервала поиска, пожалуйста, дополняйте.

    просто есть такая штука как man bash, и там англ. по чёрному описан Pattern Matching. И там прямо как у вас три пункта:

    1. звёздочка
    2. вопросик
    3. а вот третий пункт совсем другой. Там про квадратные скобки, а не про

    Про фигурные написано совсем в другом месте, а именно в Brace Expansion и к Pattern Matching оно никакого отношения не имеет. Да и вообще к именам файлов напрямую не относится.

    Источник

    Оцените статью