/usr/local/bin/fish を実行できません: そのようなファイルまたはディレクトリはありません

/usr/local/bin/fish を実行できません: そのようなファイルまたはディレクトリはありません

最初に言っておきますが、私はこの分野に不慣れで、まだ勉強中なので、用語や場所の指定に関してはご容赦ください。

設定: Proxmox 仮想環境 7.2-3 + コンテナ + ubuntu-22.04-standard_22.04-1_amd64.tar.zst

問題: 昨日、Ubuntu サーバーのターミナル/コンソール用に、外観を変更するためだけに fisher と fish shell をインストールしました。コンテナを再起動しようとしたところ、ディレクトリに配置した fish の場所と関係があると思われるログインの問題が発生しました。ただし、完全に確信があるわけではありません。

コンテナに再度ログインする方法がわかりません。すべてを再度設定して最初からやり直すのは避けたいと思っています。ご協力いただければ幸いです。

さらなる背景情報と画像:

答え1

まず、良いニュースです。回復する方法はほぼ確実にあります。悪いニュースは、この場合、正確にどうすればよいかがわからないことです。以下で、うまくいくと思われる方法をいくつか提案しますが、私は Proxmox を実行していないため、直接テストすることはできません。

しかし、まず最初に、私は提案をしたいと思います。

  • ソフトウェアをインストールするときは、公式ドキュメントまず、上で参照したような「技術的な」サイトではなく、

上記でリンクした記事は単純に間違っており、システムの破損につながる(実際にそうなった)正しいプロセスは Fish チームによって次の文書に文書化されています。

申し訳ありませんが、少し愚痴を言ってしまいます。あなたがリンクしたようなサイトは「有料コンテンツサイト」です。これらのサイトは「フリーランス」(ただし「審査済み」)のライターに記事を書いて報酬を支払っています。残念ながら、コンテンツの質は大きく異なります。私が見た中で最悪の例を挙げると、昨年、私がよく訪れる技術的なトピックのサブレディットに新しい訪問者が来ました。その人は次のように書いています(言い換えですが、正確です)。

[トピック] についての知識はなく、使用したこともないのですが、[トピック] を使用して [xyz] を実行する方法について記事を書くように依頼されました。どなたかアドバイスをいただけませんか?

知らないことに注意どれの彼らが記事を書いていたサイト。

もちろん、すべての有料コンテンツサイトのすべての記事がそうであるわけではありませんが、あなたが上で言及した記事は悪いです。絶対に、何の疑問もなく、あなたのシステムを破壊するようなドキュメントは悪い主な問題は次のとおりです。

そのドキュメントのステップ 4 (「fish シェルをデフォルトのシェルにする」) には次のように書かれています:

sudo chsh -s /usr/local/bin/fish

それは複数の間違いが 1 つにまとめられただけです。

  • まず、最悪なのは、UbuntuでのFishのパスが間違っていることです。これは、macOSでFishがインストールされる場所だと思います。Ubuntuでは(通常は)です/usr/bin/fishが、Fishのドキュメントで指摘されているように、常に場所を確認する必要があります。あなたのシステム。

  • ユーザー名なしで使用するとsudo chsh、root ユーザーのシェルが変更されます。これは良くないことであり、回復が非常に困難になります。

    を使用して現在のユーザーのシェルを変更する場合sudo、構文は次のようになります。

    sudo chsh -s <path/to/shell> $USER
    
  • chshしかし、ルート ユーザー (別名 ) は「不正なシェル」パスの設定を許可するため、これも悪い考えです。警告は表示されますが、それでも、指示された不正なシェル パスを使用するようにsudo chsh変更されます。/etc/passwd

    sudo chsh -s /this/is/bad $USER
    grep $USER /etc/passwd
    

    間違ったパスが設定されていることがわかります。

    補足: 私は、これらの間違いを簡単に回復できることがわかっている仮想環境である Windows Subsystem for Linux を使用しているため、破損を恐れることなく自分のシステムでこれらのことを試すことができます。Proxmox コンテナーは、実際には WSL が「内部で」使用するテクノロジと非常によく似ているはずなので、同じように簡単な回復メカニズムがあると思います。

正しいUbuntu でシェルを Fish に変更するコマンドは簡単です:

chsh -s /usr/bin/fish

使わない限りはsudo変わるあなたのユーザーのシェルで、検証そのシェルは良いものだということ。


復旧計画

Proxmox で Ubuntu をコンテナとして使用しているとのことですが、それは良いことだと思います。VM を使用している場合は、有効なシェルを使用して Proxmox で Ubuntu を起動する必要があります。それでも可能です。

ここでの悪いニュースは、これをどうやって行うのかよくわからないということであり、ProxmoxはUbuntu の場合、この質問に答えるには別のサイト (Proxmox フォーラムなど) が必要になる場合があります。一般的には、次のことが必要になります。

  • Proxmox コマンドラインにアクセスします。

  • Proxmoxのドキュメントによると、pctコンテナを管理するためのツール。

  • 有効なシェルを使用して Ubuntu コンテナにアクセスします。 を試してみてくださいpct exec <vmid> /usr/bin/bash

  • Ubuntu コンテナ内にいる必要がありますroot。これが のデフォルトになると思いますpct

一度持っている有効なシェルで、root として Ubuntu コンテナにアクセスします。

  • chsh -s /usr/bin/bash

    現在のユーザーのシェルが無効であるため、これが機能しない可能性があります。ただし、root はシェルをリセットできると思います (通常のユーザーは絶対にできません)。ただし、問題が発生した場合は、別の方法があります。

    vipw
    

    /etc/passwdこれにより、 を直接編集し、/usr/local/bin/fishを に変更できるようになります/usr/bin/bash

    これにより、ルート ユーザーのシェルが正常な状態に戻ります。ルートの場合は、シェルを Bash のままにしておくことをお勧めします。通常の非ルート ユーザーの場合は、Fish ドキュメントの説明に従って、シェルを Fish に変更してください。

関連情報