Рейтинг:22

Я случайно удалил /usr/bin/test и теперь не могу обновлять, обновлять и устанавливать пакеты

флаг in

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

Я уже пробовал решение здесь: apt-get вызывает /usr/bin/test: Отказано в доступе, но вот что я получил:

Чтение списков пакетов... Готово
Построение дерева зависимостей... Готово
Чтение информации о состоянии... Готово
Следующие пакеты были установлены автоматически и больше не требуются:
  Java-общий либутемптер0
Используйте «sudo apt autoremove», чтобы удалить их.
0 обновлено, 0 установлено заново, 1 переустановлено, 0 удалено и 29 не обновлено.
Нужно получить 1353 кБ архивов.
После этой операции будет использовано 0 Б дополнительного дискового пространства.
Ign:1 http://ph.archive.ubuntu.com/ubuntu impish/main amd64 coreutils amd64 8.32-4ubuntu2
Игн...
Игн...
Ошибка: 1 http://ph.archive.ubuntu.com/ubuntu impish/main amd64 coreutils amd64 8.32-4ubuntu2
  Не удалось подключиться к ph.archive.ubuntu.com:80 (202.79.184.254), время ожидания подключения истекло
E: Не удалось получить http://ph.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb Не удалось подключиться к ph.archive.ubuntu.com:80 (202.79. 184.254), время ожидания соединения истекло
E: Не удалось получить некоторые архивы, возможно, запустите apt-get update или попробуйте --fix-missing?

я тоже пробовал sudo apt update --fix-missing и получил этот вывод:

Err:8 http://ph.archive.ubuntu.com/ubuntu impish InRelease
  Не удалось подключиться к ph.archive.ubuntu.com:80 (202.79.184.254), время ожидания подключения истекло
Err:9 http://ph.archive.ubuntu.com/ubuntu impish-updates InRelease
  Не удалось подключиться к ph.archive.ubuntu.com:http:
Err:10 http://ph.archive.ubuntu.com/ubuntu impish-backports InRelease
  Не удалось подключиться к ph.archive.ubuntu.com:http:
Получено 125 КБ за 37 с (3339 Б/с)
sh: 1: /usr/bin/test: не найдено
sh: 1: /usr/bin/test: не найдено
sh: 1: /usr/bin/test: не найдено
Чтение списков пакетов... Готово

Пожалуйста, помоги мне.

cocomac avatar
флаг cn
Есть ли шанс, что ты сможешь записать концертный CD? Если это так, вы можете создать его с точно такой же версией и разновидностью Ubuntu, которая у вас есть, загрузиться с live CD, смонтировать куда-нибудь свою основную файловую систему, скажем, `/mnt/mainfs`, а затем скопировать (не переместить, а скопировать) `/usr/bin/test` с live CD в правильное место в основной файловой системе (в моем примере это будет так: `sudo cp /usr/bin/test /mnt/mainfs/usr/bin/test` ). Просто возьмите файл `/usr/bin/test` с live CD и поместите его в правильное место в основной файловой системе, вероятно, решит вашу проблему.
paolo gonzales avatar
флаг in
привет, спасибо за ответ, но я новичок в использовании Linux, и я не знал, что такое live CD, можете ли вы прислать мне ссылку на видео или что-нибудь об этом. Спасибо
cocomac avatar
флаг cn
Я пришлю указания через минуту. Какая у вас точная версия Ubuntu? Обычная Убунта? Кубунту? 20.04? 21.10? Вероятно, вы можете найти это где-нибудь в разделе «О программе» в «Настройках».
paolo gonzales avatar
флаг in
о, большое спасибо, у меня была эта версия ```Ubuntu 21.10 x86_64```, я буду ждать ваших указаний
starkus avatar
флаг de
`dpkg -S /usr/bin/test` показывает, что `/usr/bin/test` предоставляется пакетом `coreutils`. Можно попробовать переустановить и перенастроить.
paolo gonzales avatar
флаг in
@starkus, как я могу установить и перенастроить его?
cocomac avatar
флаг cn
@paologonzales Вы можете попробовать все, что захотите. Но я бы посоветовал не пытаться переустановить/перенастроить его. Если вы хотите, команда для переустановки — «sudo apt install --reinstall coreutils». Но я думаю, что вы уже пробовали это, и, учитывая ошибки «Не удалось подключиться», я не думаю, что попытка переустановки сработает. Я предлагаю вместо этого попробовать то, что я сказал.
paolo gonzales avatar
флаг in
я тоже так думаю, поэтому я спрашиваю его, что он имеет в виду под его установкой и перенастройкой. В настоящее время я устанавливаю ISO-интернет, он медленный
starkus avatar
флаг de
что-то с «sudo dpkg -i /var/cache/apt/archives/coreutils*.deb»
флаг us
Будет ли `cp /usr/bin/[ /usr/bin/test` работать временно?
matteol avatar
флаг cz
@doneal24 нет /usr/bin/[ хочет закрыть ]
флаг be
Я несколько удивлен, что кто-то пытается использовать `/usr/bin/test`, так как `test` встроен в большинство распространенных оболочек.
флаг ne
большинство решений предполагают загрузку *чего-то*; вам, вероятно, потребуется выяснить, почему вы получили «Не удалось подключиться к ph.archive.ubuntu.com». у вас есть подключение к интернету?
флаг tz
@chepner: «тест» не встроен в sh. Большинство сценариев установки, по соображениям переносимости, стремятся использовать sh (поскольку sh - это единственная оболочка, которая всегда должна присутствовать), и поэтому также должны использовать тестовую программу "posix" (также предполагается, что она присутствует).
флаг be
`sh` на самом деле не является оболочкой (или, по крайней мере, настоящая оболочка Bourne, которая изначально носила это имя, теперь редко используется); это общее имя для любой POSIX-совместимой оболочки, которую должна предоставлять POSIX-совместимая система.
флаг ag
И именно поэтому вы должны быть осторожны, используя su и sudo :-( Я согласен, что проще всего скопировать двоичный файл из другой исправной системы (включая live cd). Вы можете поэкспериментировать с переустановкой Ubuntu поверх, если вы этого не сделаете. заботиться о данных в системе.
флаг ag
@ysth Я думаю, что сообщение об ошибке может ввести в заблуждение, если программист не ожидал, что `test` может отсутствовать.
Peter - Reinstate Monica avatar
флаг hn
Вы всегда можете написать элементарную замену. Скорее всего, сценарии установки используют лишь небольшую часть функций /bin/test, скорее всего, проверяя существующие файлы.
флаг ne
@ ThorbjørnRavnAndersen, «время ожидания соединения истекло», заставило меня подумать, что это вряд ли связано с отсутствием теста
Рейтинг:50
флаг hr

Вы можете использовать тестовое задание командлет, предоставленный занятой ящик временно заменить отсутствующий /USR/бен/тест бинарный файл.

Во-первых, убедитесь, что у вас есть busybox, и что его тестовое задание работает:

$ /usr/bin/busybox test -x /usr/bin/busybox && echo Работает
Работает

Затем создайте символическую ссылку:

$ sudo ln -s busybox /usr/bin/test
$ 
$ файл /usr/bin/тест
/usr/bin/test: символическая ссылка на busybox

Затем переустановите coreutils package, который перезапишет символическую ссылку соответствующей двоичной реализацией.

Если у вас нет занятой ящик, вы могли бы даже создать /USR/бен/тест как сценарий оболочки и использовать возможности оболочки тестовое задание встроенный:

#!/бин/ш

тест "$@"

(не забудьте сделать его исполняемым, chmod +x /usr/бен/тест) снова переустановка coreutils сразу после.

Quasímodo avatar
флаг jp
Следует иметь в виду, что Coreutils Test имеет некоторые расширения, на которые может полагаться программное обеспечение. Если они отсутствуют в тесте Busybox ([который, кажется, не задокументирован должным образом] (https://busybox.net/downloads/BusyBox.html)), это может привести к поломке некоторых скриптов. Таким образом, для временного решения лучше использовать скрипт `#!/bin/bash`.
флаг cn
Предполагается, что «скрипты поддержки» Debian (т. е. сценарии, запускаемые во время установки пакета) должны работать с минимальной оболочкой, совместимой с POSIX, как `/bin/sh`. Если им нужны дополнительные функции, пакет должен объявить явную зависимость, а это редкость.
Eric Duminil avatar
флаг us
`sudo ln -s busybox /usr/bin/test`. Ждать. Это создает символическую ссылку, указывающую на `busybox`, верно? Но `busybox` может делать гораздо больше, чем просто `тест Busybox`. Так как же система должна знать, что должен быть вызван `busybox test`?
Eric Duminil avatar
флаг us
О, круто. «Busyboxes обычно определяют свою «желаемую функциональность», проверяя, откуда они вызываются». https://android.stackexchange.com/a/64031/292651
флаг in
Не "откуда они вызываются", а "под каким именем они вызываются", как указано в `argv[0]` вызывающим абонентом. Чтобы продемонстрировать разницу, в bash вы можете использовать `exec -a test busybox 1 = 1`, чтобы вызвать двоичный файл `busybox` с именем `test` в `argv[0]`, несмотря на то, что _не имеет_ никакой ссылки на busybox под это имя действительно существует в файловой системе.
Рейтинг:36
флаг za

Самое простое решение, которое я могу придумать, без использования менеджера пакетов (поскольку он больше не работает):

  1. Скачайте пакет coreutils:

    wget http://de.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb
    

    примечание: используйте браузер, если у вас не установлен wget. Также обратите внимание, что точные имена указаны по состоянию на январь 2022 года. Если вам потребуется сделать это позднее, имена файлов, скорее всего, будут изменены, чтобы отразить обновленные пакеты.

  2. Распаковать загруженный пакет

    dpkg-deb -R coreutils_8.32-4ubuntu2_amd64.deb coreutils_unpacked
    
  3. Скопируйте недостающий тестовый двоичный файл

    sudo cp coreutils_unpacked/usr/bin/тест /usr/бен/тест
    
  4. Добавить разрешение на выполнение

    sudo chmod +x /usr/бен/тест
    

Или, если вы хотите загрузить полный файл .iso

  1. Скачайте iso-файл с официального сайта

  2. Создайте временный каталог для монтирования iso-файла.

    mkdir ubuntu_iso_tmp
    
  3. Смонтировать iso-файл во вновь созданный каталог

    sudo mount -o цикл ~/Загрузки/Ubuntu_whatever.iso ubuntu_iso_tmp
    
  4. Скопируйте недостающий тестовый двоичный файл

    sudo cp ubuntu_iso_tmp/usr/бен/тест /usr/бен/тест
    
Peter Cordes avatar
флаг fr
`cp -a` был бы хорошим выбором для сохранения разрешений, прав собственности и времени модификации из файла пакета. (Тогда вам не понадобится `chmod`). Я почти всегда использую `cp -a` для любого копирования, которое когда-либо делал; Я забыл, какие метаданные *не* копируются без `-a`, но ясно, что в этом случае вы хотите скопировать как можно больше, как если бы вы извлекали прямо туда. Или просто используйте `mv`, так как вам больше не нужна распакованная версия.
флаг in
Я бы использовал «apt-get download coreutils» вместо того, чтобы зависеть от URL-адреса wget, который может исчезнуть.
флаг cn
@ValentinSolina: Вы можете отменить это редактирование (нажмите «отредактировано N часов/дней назад». Брайам всегда может опубликовать другой ответ
флаг ag
Откат к версии `wget`, так как `apt-get` не работает в этом конкретном случае.
флаг za
Если ссылка для скачивания пакета становится недействительной или у вас другая версия Ubuntu, найдите coreutils на официальном сайте: https://packages.ubuntu.com — так я ее нашел.
Рейтинг:16
флаг tr

Для конкретного случая /USR/бен/тест, есть другая программа /USR/бен/[ который идентичен, за исключением того, что он требует дополнительного последнего аргумента, который ]. GNU coreutils, который является реализацией этих программ в Ubuntu и других невстроенных системах Linux, поставляет эти две программы в виде отдельных исполняемых файлов, поэтому, даже если один поврежден или отсутствует, вы можете использовать другой. Создавать /USR/бен/тест со следующим содержанием:

#!/бин/ш
/usr/bin/\[ "$@" \]

Сделать его исполняемым (chmod a+rx /usr/бен/тест) и у вас есть вполне действующая замена для /USR/бен/тест.

Затем запустите apt переустановить coreutils чтобы получить нормальный /USR/бен/тест назад.

Ruslan avatar
флаг bv
Почему нужно выходить за скобки?
Gilles 'SO- stop being evil' avatar
флаг tr
@Ruslan В этом конкретном сценарии скобки не нужно экранировать.
Рейтинг:13
флаг cn

Я предлагаю получить удаленный файл с живого USB и вернуть его. Вот как.

  1. Загрузите ISO-образ Ubuntu для вашей версии Ubuntu. Учитывая, что у вас есть Impish (ваш подходящий вывод указывает на это), Ubuntu 21.10 ISO должен работать на вас. Загрузите образ рабочего стола с пометкой ISO. отсюда.
  2. Скачать balenaОфорт. Получите x64-версию Linux. Извлеките почтовый индекс. В терминале перейдите в извлеченную zip-папку. Как только вы там, если вы делаете лс, вы должны увидеть файл, оканчивающийся на .AppImage. Делать chmod +x balenaEtcher-1.7.3-x64.AppImage.
  3. Запустите balenaEtcher с помощью ./balenaEtcher-1.7.3-x64.AppImage.
  4. Найдите флешку емкостью более 8 ГБ и вставьте ее в свой компьютер. Все данные на этой флешке будут уничтожены.
  5. Выберите загруженный ISO и выберите флешку. Ударьте Флэша.
  6. После этого перезагрузите компьютер, войдите в загрузочное меню и выберите флешку. Нажмите «Попробовать Ubuntu».
  7. В живом USB-сеансе смонтируйте основную систему. Это может быть сделано автоматически, и для этого может быть кнопка в графическом интерфейсе. Разберитесь, где он установлен. я буду использовать /mnt/mainfs в качестве примера, но вы должны использовать реальное местоположение.
  8. Откройте терминал и запустите sudo cp /usr/bin/тест /mnt/mainfs/usr/бен/тест. Заменять /mnt/mainfs везде, где вы установили свою основную систему.
  9. Готово. Завершите живую сессию, отключите флэш-накопитель и перезагрузитесь. Нормальная Ubuntu вернется, и подходящий должен снова работать.
флаг za
Это отличный ответ, более продвинутые пользователи могут просто заменить использование balenaEtcher одной командой dd, которая установлена ​​по умолчанию: $ dd if=path/to/ubuntu.iso of=/dev/sdX bs=1m Подробный ответ: https://unix.stackexchange.com/a/179146
флаг za
Кстати. если у вас все еще есть работающая Ubuntu, вам даже не нужно использовать флэш-накопитель, вы можете просто смонтировать файл .iso. $ mount -o зациклить файл.iso /mnt/dir https://unix.stackexchange.com/a/316407
cocomac avatar
флаг cn
@ValentinSolina Я этого не знал, можешь опубликовать ответ?
флаг za
Вот @cocomac https://askubuntu.com/a/1389039/1564755
Someone avatar
флаг my
Если вы записываете файл ISO на USB-накопитель, правильным термином будет Live «USB», а не «CD».
cocomac avatar
флаг cn
@Someone Ой, я этого не знал. Не стесняйтесь [предложить редактирование] (https://askubuntu.com/posts/1388900/edit)
Someone avatar
флаг my
Я отредактировал * (у меня более 2 тысяч повторений, поэтому мои правки применяются немедленно, не стесняйтесь откатывать) * ваш ответ и заменил Live CD на live session, так как это кажется более подходящим. Я также изменил минимальную емкость на 8 ГБ, так как живая сессия на USB-накопителе емкостью 4 ГБ прервется.
cocomac avatar
флаг cn
@Someone Просто прочитайте это, и ваше редактирование имеет смысл. Спасибо!
ChanganAuto avatar
флаг us
№ 4 по-прежнему неверен, Ubuntu 21.10 ISO имеет размер 2,9 ГБ), и рекомендовать стороннее программное обеспечение, когда Startup Disk Creator установлен по умолчанию, не имеет смысла.
Рейтинг:5
флаг de

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

  1. Загрузите версию, установленную в вашей системе
    wget http://ph.archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.32-4ubuntu2_amd64.deb
    
  2. Распакуйте его по назначению
    sudo dpkg --распаковать coreutils_8.32-4ubuntu2_amd64.deb
    
  3. Настройте или перенастройте его с помощью его триггеров:
    sudo dpkg --настроить coreutils
    

Выполнено.

starkus avatar
флаг de
Я упоминал в начале, что это не только восстанавливает `test`. Вы имеете в виду что-то другое?
флаг ag
да вы сделали. Я не знаю, почему я неправильно прочитал это - возможно, прокрутил до начала другого вопроса. Комментарий удален.
Рейтинг:0
флаг cn

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

Ответить или комментировать

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