GNU/Linux >> Linux の 問題 >  >> Linux

/bin の内容を /usr/bin に移動しました。元に戻すことはできますか?

Linux (および他のほとんどのシステムでは、移動がファイル システム間でない限り POSIX では保証されませんが) では、ctime が更新されているため、/usr/bin に他のシステムがないことを前提としています。 過去 24 時間以内にタッチされた場合は、次の方法で元に戻すことができます:

find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
   echo mv -i "[email protected]" /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 を実行すると機能しなくなります .その点で、両方の場所にコマンドを配置する方が、これらのスクリプトが壊れないという点で安全です。


<ブロック引用>

Ubuntu は壊れた状態ですか?

はい、あなたの Ubuntu は壊れています

パッケージ管理にとって重要なものを台無しにしました。

したがって、実際には重要なデータをバックアップしてください (少なくとも /etc そして /home )、おそらくインストールされたパッケージのリストも含まれます。 dpkg -l の出力 、Ubuntu を再インストールします。

<ブロック引用>

Linux パーティション全体を台無しに再インストールしたことは認めます。

それはおそらくあなたの時間をより少なく消費するものです.他の回答の助けを借りて現在のシステムを維持することは、システムを非常に厄介な状態に保つことです (これは将来の頭痛の種になります)。

ディスクを再フォーマットしているので、 /home を入れることを検討してください 別のパーティションに保存します(将来、そのような間違いでデータが失われることはありません)。 df -h の出力を紙に印刷する前に と df -hifdisk -l (ディスク容量に関する情報を提供します-使用済みと使用可能の両方...)。十分な大きさのシステム パーティション (ルート ファイル システム) を用意することをお勧めします。余裕があれば 100G バイトで十分です。

<ブロック引用>

ソフトウェアの bin フォルダの内容を /usr/bin に移動するはずでした

(用語:Unix には「フォルダー」ではなく、ディレクトリがあります)。

それ (動く /usr/bin/ まで ) は非常に間違っています。 $PATH を (できれば) 改善するか、せいぜい シンボリック リンク を追加するかのいずれかです /usr/bin/ で できれば、実行可能ファイルを /usr/local/bin/ に移動 (またはシンボリック リンクを追加) します。 .

賢明なアプローチは /usr/bin/ を変更しないことです 、 /bin/sbin/usr/sbin/ パッケージ管理ツールの外部 (例:dpkgapt-getaptitude など)。 FHS を読んでください。


<オール>
  • インストールはほとんど問題ないはずです。 /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 で再インストールします ).

  • ctime で表示および並べ替えて、最近変更されたファイル (移動したファイルを含む) を確認できます:

    ls -ltc /bin
    
  • 行ったことを元に戻す最善の方法は、cruft を使用することです /bin で見つかったファイルをパッケージ化して削除します または /usr/bin パッケージに由来しない:

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

    ファイルが /etc/alternatives のファイルへのシンボリック リンクでない限り (その場合はそのままにしておく必要があります)。


  • Linux
    1. / bin/shが/bin/bashではなく/bin/ dashを指すのはなぜですか?

    2. Node.jsの競合:/ sbin/nodeと/usr/ bin / node?

    3. ./configure :/bin/sh^M :不適切なインタープリター

    1. バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

    2. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

    3. cmake --version は /usr/bin/cmake を指し、どの cmake は /usr/local/bin を指しますか

    1. /usr/sbin、/usr/local/sbin、/usr/local/bin の意味は何ですか?

    2. #!/bin/bash と #!/bin/sh はいつ使用する必要がありますか?

    3. /bin と /usr/bin の違い