Ubuntu(14.04)にzshをインストールしようとしています。 zshに切り替えると、スーパーユーザーモードに入ることはできません。
suを実行するとpasswdの入力を求められ、正しいパスワードを入力すると次のように表示されます。
Cannot execute which zsh: No such file or directory
ただし、間違ったパスワードを入力してEnterを4〜5回押すと、何も表示されません。
私のファイルを確認すると、次のように/etc/passwd
表示されます。
root:x:0:0:root:/root:which zsh
ファイルを編集して保存しようとしています。
Unable to save /etc/passwd
grubを介してランレベルを1に変更しようとしましたが、エラーが発生しました。
APCI PCC probe failed
VirtualBoxでUbuntuを実行しています。
答え1
パスワードファイルからその単語を削除する必要がありますwhich
。次のようにする必要があります。
root:x:0:0:root:/root:/bin/zsh
ここで、/bin/zsh は Z シェルバイナリのパスです。
現在の構成では、ログインプロセスは実行を試みますwhich zsh
が、コマンドは失敗します。
また、そのファイルはsudo vim /etc/passwd
ルートのみ書き込むことができるファイルなので、ルートとして編集してください。
そうでない場合は、リカバリモードで起動します(GRUBブートローダでUbuntuの詳細オプションを選択し、Ubuntu ...を選択し、ルート/ルートシェルプロンプトでドロップを選択します)sudo
。su
その後、/
ファイルシステムを読み取り/書き込み(mount -o remount,rw /
)で再マウントすると、ファイルの内容を編集できます/etc/passwd
。 Ubuntu 16.04でテストされました。
答え2
Grubプロンプトではファイルを編集できません(Grubは書き込みサポートなしでファイルを読み取ることができます)。 Linuxを起動する必要があります。
正常にログインできない場合は、通常の起動プロセスを完全に省略し、カーネルとシェルのみを起動できます。 Grubプロンプトで、[e起動順序の編集]をクリックしinit=/bin/bash
て行の末尾に追加し、[ linux=…
+Ctrl開始X]をクリックします。ルートシェルだけが入手でき、他に何もありません。走る
mount -t proc proc /proc
mount -o remount,rw /
今すぐ実行してchsh -s /bin/zsh root
ユーザーデータベースを回復します。
次にAlt++を使用SysRqして再起動し、U++Altを使用して起動するSysRqか、B次のコマンドを使用して正常に起動します。
mount -o remount,ro /
umount /proc
exec /sbin/init
ヒント:chsh
実行する必要はありません。ユーザー議論。このようにしてシェルを認証します。
ヒント:一部の設定を変更する場合は、必ずシェルを開いて設定をテストしてください。間違った場合でも、コマンドラインを使用して修正できます。
ヒント:次のことができます。toor
アカウントを作成するUID 0(まだまだルートである)を使用し、ルートと同じパスワードを使用すると、/bin/sh
問題が発生した場合にログインできる他の方法を維持するためにシェルがそのまま残ります。より良い方法は、静的にリンクされたシェル(busybox-static
またはzsh-static
)をインストールしてtoorのログインシェルとして使用することです。
¹または以下を使用できます。ゲストホストがLinuxの場合。
答え3
ルートパスワードを知っている場合は、以下を実行してsu -s /bin/bash
ルートbashシェルを取得できます。
sudo -s /bin/bash
それも機能しなければならず、設定方法によってはsudo
パスワードだけを知っているか、パスワードが必要ない場合があります。
chsh -s /bin/bash
その後、を使用してルートのシェルをbashに戻すことができます。
ところで、UNIXシステムでルートシェルを変更するのは一般的に悪い考えです。多くのcronジョブなどは、ルートシェルをそのオペレーティングシステムのデフォルトルートシェルとして使用します。〜する交換すると割れます。
答え4
sudo vi /etc/passwdを試して、現在ログインしているユーザーのパスワードを入力してください。
/etc/shellでシェルの正しいパスを見つけることもできます。
現在のシェルを確認するには、echo $ SHELLを試してください。