Переміщено / вміст біна в / usr / bin, можливо скасувати?


18

Запускаючи Ubuntu 17.04, я встановлював програмне забезпечення з нерепозиторного розповсюдження, я повинен був перемістити вміст папки програмного забезпечення в / usr / bin (що вже було порадою)

Це один із тих днів, і що я зробив замість цього:

mv /bin/* /usr/bin

Тому я накрутив і випадково перемістив усі файли у скриньці до / usr / bin та / bin був порожнім. Оскільки я вважаю, що / бін є критично важливим для системи, для швидкого усунення я скопіював / usr / bin вміст у / bin.

Тепер вміст my / bin та / usr / bin однаковий, і обидва містять файли, спочатку в / bin та / usr / bin.

  1. Чи зараз мій Ubuntu перерваний? (Ще не намагалися перезавантажити комп’ютер, зараз все, здається, все ще працює)
  2. Чи є спосіб дізнатися, які файли були переміщені / скопійовані в / usr / bin останнім часом, тож я міг просто вручну подбати про ситуацію? 2.1 Чи зазвичай файли, що перекриваються, / bin та / usr / bin
  3. Чи є інші способи скасувати те, що я зробив?

У мене не встановлено Timeshift, тому відновлення резервних копій не є варіантом, але в даний час на комп’ютері немає нічого критичного, тому я міг би просто визнати, що за допомогою програмного забезпечення слід встановити весь Linux-розділ.


2
dpkg-запит -l | awk '{system ("dpkg-query -L" $ 2 "| grep -E \" ^ / usr / bin /.*$ \ "")}' Це дасть вам усі файли, спочатку в / usr / bin на основі встановлені пакети
Раман Салопал,

7
@ SatōKatsura /binє критично важливою для системи. Його вміст повинен бути присутнім на самих ранніх стадіях завантаження. Ви не хочете створювати символічне посилання на розділ ( /usrтут), який не може бути встановлений під час завантаження.
xhienne

1
@xhienne Я ніколи не говорив, що це переживе перезавантаження. Це тимчасове виправлення, щоб отримати достатню функціональність, щоб можна було відновити систему.
Satō Katsura

1
@xhienne, що залежить від налаштування дистрибутива. Наприклад, Arch не підтримує окремо /binза замовчуванням. Розділення за замовчуванням Ubuntu не робить окремих /usrрозділів. Мені цікаво, скільки людей насправді роблять окремий /usrз сучасним дистрибутивом.
муру

1
@muru Прийміть мій коментар як загальний. Ви можете вважати все, що завгодно, щодо кількості розділів, я вважаю за краще це не робити, і я застерігаю від прив'язки / usr / bin / * до / bin, що в кращому випадку є абсолютно марним і в гіршому випадку може зробити систему непридатною при наступному завантаженні. . Жодна система, яка слідує за FHS, не повинна містити посилання на / usr / bin. ОП радив скопіювати файли замість цього.
xhienne

Відповіді:


19

Чи зараз мій Ubuntu перерваний?

Так, ваша Ubuntu зламана

Ви зіпсували щось важливе для управління пакетами .

Тож на практиці створюйте резервні копії важливих даних (принаймні /etcта /home), можливо, також і список встановлених пакетів, наприклад, вихід dpkg -lта перевстановлення Ubuntu.

(новачок може спробувати керувати - як у інших відповідях - але тоді він не зробив би такої величезної та основної помилки)

Я міг би просто визнати, що за допомогою програмного забезпечення слід переустановити весь Linux-розділ.

Це, мабуть, те, що би зайняло менше вашого часу. Утримання вашої нинішньої системи за допомогою інших відповідей - це утримання її в дуже безладному стані (що може принести вам майбутні головні болі).

Оскільки ви переформатуєте свій диск, подумайте про введення /homeокремого розділу (тому майбутні такі помилки не втратять ваші дані). Перш ніж робити це, надрукуйте на папері вихід df -hта df -hiта fdisk -l(вони дають інформацію про місце на диску -на використаний та доступний- ...). Будьте розумні мати достатньо великий системний розділ (коренева файлова система); якщо ви можете собі це дозволити 100 Гбайт, більш ніж достатньо.

Я повинен був перемістити вміст папки програмного забезпечення у / usr / bin

(термінологія: У Unix є каталоги, а не "папки").

Це ( переїзд до /usr/bin/) дуже неправильно. Або поліпшити свій $ PATH (переважно) або в більшості додатків сімлінок в /usr/bin/і переважно перемістити (або символічні посилання) виконувані /usr/local/bin/.

Мудрий підхід до ніколи не зміниться /usr/bin/, /bin, /sbin, /usr/sbin/ за межами інструментів управління пакетами (наприклад dpkg, apt-get, aptitudeі т.д. ...). Прочитайте FHS .


4
Збираюся прийняти цю відповідь: схоже, що після спроби відновлення вона працювала до перезавантаження, яка вже не змогла запустити жодного сеансу робочого середовища. Замість того, щоб намагатись виправити це, я визнаю, що я загально накрутив і просто перевстановлюю Linux-розділ. Оскільки все було на контролі версій, і я користувався системою лише тиждень, все, що я дійсно втратив, - це моя гідність і мала невелику панічну атаку, але це, здається, нормально, коли життя навчає мене уроку.
oneOfThoseDays

1
Як /binі /usr/binзараз ідентично, я не впевнений, чому керування пакетом було б накручено. Чи дійсно є випадок, коли /bin/fooі /usr/bin/fooвони надаються пакетом. Якщо ні, то лише кілька додаткових файлів плавають навколо.
StrongBad

3
@Basile ні, це не буде (бути нещасним); управління пакетами дбає лише про файли, про які він знає, воно не скаржиться на файли, про які він не знає. Навіть для файлів , які він робить знаєте про, це не буде особливо турбувати , якщо вони змінилися ...
Стівен Кітт

2
@Basile також не розраховував би на останню частину "(новачок може намагатися керувати - як у інших відповідях - але тоді він не зробив би такої величезної та основної помилки)", що відповідає дійсності ;-). Навіть фахівці іноді підсуваються!
Стівен Кітт

1
FWIW /розділ моєї основної системи становить 12 Гб, і я ніколи не стикався з проблемою простору, незважаючи на те, що використовував її для розробки (читання файлів заголовків та багатьох інструментів) для офісу та дизайну (читання важких інструментів), на KDE (читати не найменше). Додайте на 4 Гб більше, якщо ви не розділите /var, надуйте на 25%, якщо ви хочете більший запас, ніж у мене, а в 20 ГБ ви більше ніж хороші.
спектри

36

У Linux (і в більшості інших систем, хоча POSIX не дає вам гарантії, якщо переїзд не відбудеться через файлові системи), це оновило б їх час, тому припустимо, що жодна з інших /usr/binне торкнулася протягом останніх 24 годин , ви повинні мати можливість перемістити їх назад за допомогою:

find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
   echo mv -i "$@" /bin' sh {} +

Видаліть, echoякщо це виглядає правильно. Зауважте, що ви не зможете відновити файли, що існували з тим самим іменем у /binта /usr/bin(оригінальні файли в програмі /usr/binбули б втрачені)

Потенційний застереження: якщо деякі файли були жорстко пов'язані в обох, /binі /usr/binвсі жорсткі посилання в /usr/binних будуть переміщені /bin.

Тепер, ви можете думати , що , так як /binі /usr/binв за замовчуванням $PATH, і /binдоступний за /bootпринаймні , до того /usrвстановлено, він не повинен незалежно від того , що виконувані файли знаходяться в /binзамість /usr/bin.

Але це буде не помітити, що багато команд жорстко кодують шляхи виконуваних файлів і очікують, що вони будуть в якомусь конкретному випадку. Поширений випадок - вона-чубчик. Усі сценарії:

#! /usr/bin/env bash

не вийде працювати після вас mv /usr/bin/env /bin/env. У зв'язку з цим наявність команд в обох місцях безпечніше, оскільки вона не порушує ці сценарії.


3
Як уже згадувалося вище (я видалив свій коментар, оскільки в ньому сталася серйозна помилка, яка намагалась би перенести все до каталогу, який називається - iсуто про це!) В таких системах GNU / Linux, як Ubuntu one, який може використовуватися, find /usr/bin/. ! -name . -prune -ctime -1 -exec echo mv -it /bin {} +оскільки підтримує GNU Coreutilsmv-t . Інші ОС зазвичай не підтримують його , і він не працює в альтернативному режимі, який mvнадає BusyBox .
Елія Каган

17
  1. Ваша установка має бути в основному гаразд; не повинно бути різних файлів з тим самим іменем у ( /usrта /usr/bin(що відповідає вашим 2.1), тому маючи всі файли в обох /binі /usr/binнічого не порушуйте (доки не оновите пакети). Єдина проблема, яка може виникнути зараз, - це зламані символьні посилання, якщо ви перезаписали бінарний файл із символьним посиланням на нього. Щоб виправити це, шукайте зламані символьні посилання:

    find -L /bin /usr/bin -type l -ls
    

    і перевстановіть будь-які пакунки, що відповідають переліченим файлам (наприклад, якщо він /usr/bin/zshвідображається як зламаний, dpkg -S /bin/zsh /usr/bin/zshпідкаже, з якого пакета прийшов файл; перевстановіть його apt --reinstall install zsh).

  2. Ви можете показати та сортувати за ctime, щоб побачити файли, які нещодавно були змінені (які включатимуть переміщені файли):

    ls -ltc /bin
    
  3. Найкращим підходом до скасування того, що ви зробили, є використання cruftпакету та видалення файлів, які він знаходить, /binабо /usr/binякі не надходять із пакета:

    sudo apt install cruft
    sudo cruft -d "/ /usr"
    

    якщо тільки файли не є посиланнями на файли в /etc/alternatives(у такому випадку ви повинні залишити їх у спокої).


За винятком сценаріїв, які починаються з #! /bin/shподібних або подібних.
Satō Katsura

@ SatōKatsura вони все одно добре працюватимуть, якщо shє в обох /binі /usr/bin(всі файли зараз дублюються).
Стівен Кітт

1
Спеціальний інструментарій типу cruftне потрібен для цієї роботи, оскільки менеджер пакунків також відстежує встановлені файли. Дивіться unix.stackexchange.com/questions/153260/… .
Ned64

1
comm -12 <(ls /bin) <(ls /usr/bin)показати кілька записів у системі Ubuntu, на якій я тестував. Деякі, за допомогою /bin/foo -> /usr/bin/fooяких засобів foo, були б втрачені.
Стефан Шазелас

@ Stéphane ах, так, переміщення посилання призвело б до пониження оригіналу ...
Стівен Кітт

6

Можливо, розробити лише те, чому ваша система більшою чи меншою мірою "зламана".

  1. Як вказує @ basile-starynkevitch, система управління пакунками може бути дуже заплутана, якщо вона знайде бінарні файли, /binколи вони повинні бути /usr/bin, і навпаки.
  2. Деякі (можливо важливі) сценарії можуть бути важко провідними для того, щоб знайти певний бінарний файл в одній або іншій каталозі (за деяких обставин це добра практика, наприклад, з точки зору безпеки, не покладатися на вміст цього документа $PATH).
  3. Причина , чому існує різниця між /binі в /usr/binтому , що перший може потенційно бути на перегородці , яка встановлена на більш ранній стадії завантаження. У цьому контексті (тобто під час завантаження системи) не тільки /bin/xxxбінарні файли, ймовірно, посилаються на повний шлях, але каталог /usr/binможе бути недоступним у системі в той момент. (Якщо ви df /binі df /usr/bin, можливо, ви бачите одну і ту ж перелічену файлову систему або різні; можливо, більшість встановлених за замовчуванням цих днів залиште обидва каталоги в одному розділі).

Таким чином , ви можете doubless бачити , що якщо у вас є такі ж виконавчі файли в обох /binі /usr/bin, потім проблеми 2 і 3 не відбуватиметься, і збиток від 1 , може бути незначним. Наприклад, Re 1, наприклад, пакети можуть бути неправильно видалені, якщо ви намагаєтесь їх видалити; і оновлення може стати схильним, якщо оновлення намагається оновити копію в "правильному" місці, але ігнорує копію в "неправильному" місці. Таким чином, якщо вищевказані кошти здаються занадто різкими або складним, ви могли б піти з залишенням системи в цьому стані.

Але якщо це важлива система, я дійсно не став би на цьому базитися.

Загальне правило (знову повторюється @ basile-starynkevitch) - ніколи не мавпати з друзями /usr/bin, /binа друзі - вони «належать» до розповсюдження - і пакет, який пропонує зробити це як частину його звичайної установки, - це не гарний пакет.

Редагувати: Відповідно до пункту 3, в контексті systemd / Fedora та друзів обговорюється питання, чому є сенс перемістити весь вміст /binна /usr/bin, а також позначити посилання першого та другого. Це не рекомендація, що ви робите це самостійно - ця сторінка адресована людям, які здійснюють розповсюдження, - але вона містить деяку історію того, чому існує ця відмінність (і, як наслідок, чому це тепер просто запилена традиція).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.