好奇心から、なぜルートとしてログインしたときに、/ home/userにいないのかを知りたいと思います。理由は何ですか?/ rootディレクトリは正確に何をしますか?
私は上級ユーザーではありません。簡単な言葉で答えるか、明確で簡単な説明を提供するリンクを提供してください。 Ubuntu 16.04を使用し、Sudo -i
でルートとしてログインします。説明したように、 ここ 、Sudo -i
には/ rootがホームとしてあります。その理由を知りたい。そこにいる利点はありますか? Sudo -s
のユーザーのような〜ではありません。
Sudo
コマンドを実行してrootとしてログを記録していません。ルート権限でシェルを起動しています。
現在のユーザーのホームディレクトリにとどまる場合は、Sudo -s
コマンドの代わりにSudo -i
を使用できます。
cd ~
は、ルート権限を持つシェルにいない場合と同じディレクトリに移動します。文字通り/home/$USER
。
Sudo -i
を使用すると、システムはroot
ユーザーとしてログインしているように動作します。このため
cd ~
/root
であるルートユーザーホームディレクトリに移動します。
/root
ディレクトリは、root
ユーザーのホームディレクトリです。
主な違いは、.bashrc
の場合は/root
から、Sudo -i
の場合は通常のユーザーから、Sudo -s
などのシェル設定ファイルが使用されることです。
root
ユーザーのホームが/root
ではなく/home/root
である理由は、通常/home
が別のパーティション/ボリューム/ディスクへのマウントポイントであるためです...(ディスクスペースやリモートなどのさまざまな理由で...)
何らかの理由で/home
のマウントが失敗した場合でも、root
として接続し、/root
ホームディレクトリにいて、調査と修正を行うことができます。
さらに、メンテナンス、初期設定、サイズ変更などのために、root
として接続され、/home
をアンマウント/再マウントできる必要があります。
理由は何ですか、/ rootディレクトリは正確に何をしますか?
rootのホームは/ rootであり、rootに切り替えると、最終的にホームになります。それがSudo -i
の性質です。 Sudo -s
は同じですが、ディレクトリを切り替えません。 Sudoのマニュアル :
-s [command]
-s(シェル)オプションは、シェル環境変数が設定されている場合はシェル環境変数で指定されたシェルを実行し、パスワードデータベースで指定されているシェルを実行します。コマンドが指定されている場合、シェルの-cオプションを介して実行するためにコマンドがシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます。
-i [command]
-i(初期ログインのシミュレート)オプションは、ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profileや.loginなどのログイン固有のリソースファイルがシェルによって読み取られることを意味します。コマンドが指定されている場合、シェルの-cオプションを介して実行するためにコマンドがシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます。 Sudoは、シェルを実行する前にそのユーザーのホームディレクトリへの変更を試みます。セキュリティポリシーは、環境を最小限の変数セットに初期化しますsudoers(5)マニュアルの「コマンド環境」セクションには、-iオプションが、sudoersポリシーが使用されているときにコマンドが実行される環境にどのように影響するかが記載されています。
Rootユーザーはシステムの一部である必要があります。/homeを別のパーティションに配置し、rootが/ homeの一部である場合、パーティションがマウントされないと深刻な問題が発生します。同じ理由で
/bin
/sbin
そして
/usr/bin
/usr/sbin
パーティションに/ usrを配置し、/ usrがマウントされない場合、まだ動作しているシステムがあります。
Linuxファイルシステムは、特定の方法で構造化されています。必須のバイナリは/bin/
にあり、ブートローダーファイルは/boot/
にあり、ほとんどのデバイスファイルは/dev/
にあり、リムーバブルメディアのマウントポイントは/media/
などにあります...
https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard を参照してください。
いくつかの細かい詳細は、ディストリビューションごとに異なる場合があります(例:/usr/bin/
vs. /usr/local/bin/
)が、一般的に、ほとんどすべてのLinuxディストリビューションは同じディレクトリ構造に従います。
質問に答えるには:
ユーザーのホームディレクトリは/home/
にあります。原則として、Linuxはマルチユーザーオペレーティングシステムです。 /home/<username>/
にホームディレクトリがあるラップトップのユーザーアカウントを1つだけ持つことができますが、共有Linuxサーバーで/home/
を調べると、各ユーザーアカウントに1つずつ、多くのホームディレクトリが表示されます。システムのすべてのユーザーは、自分のホームディレクトリにのみ書き込み権限を持っているという考え方です。ユーザー名がbob
の場合、/home/bob/
のファイルの読み取りと書き込み、削除はできますが、/home/alice/
または/var/log/
のファイルは変更できません。
root
は異なります。 root
は管理ユーザーであり、システムのあらゆる場所に書き込み権限があります(システムの任意のユーザーとして機能できます)。 root
は通常のユーザーではないため、root
には特別なホームディレクトリ/root/
があります。それ以外は、/root/
は特別な魔法のない単なる通常のディレクトリですが、システムユーティリティが/root/
がユーザーroot
のホームであることに依存している可能性は静かです。
端末でSudo -i
を実行すると、たとえば通常のユーザーbob
からroot
になります。このスイッチは、Sudo -i
と入力したターミナルウィンドウのみに影響することに注意してください。ファイルマネージャの場合は、まだbob
であり、別のターミナルウィンドウを開いても、そこにはbob
のままです。このコンテキストでは、シンボル~
は、現在のユーザーのホームディレクトリの省略形です。 bob
~
の場合は/home/bob/
を意味しますが、root
の場合~
は/root/
を意味します。
それがあなたのために物事を明確にすることを願っています。
誰もが答えているwhatはrootとしてログオンすると発生します(/ homeにない〜ディレクトリを取得します)が、誰も言っていません理由理由は次のとおりです:
/ home構造全体が使用できなくなって修正する必要がある場合、または/ homeのスペースが不足しているために/ homeを再割り当てする必要がある場合は、何らかの方法でそれを行う必要があります。/homeに〜があるユーザーとしてログオンすることはできません。何もしようとするとすぐにクラッシュするからです。そのため、rootユーザーにはhir〜が他の場所にあります。
あなたは上級ユーザーではないと言うので、ステップバイステップの答えを書いてみます。
Linuxを使用する場合、いくつかの重要なことを覚えておく必要があります。
Linuxはマルチユーザーシステムです。 Unixの哲学に従って、当初からそのように考えられていました(シングルユーザーシステムとして考えられていたWindowsの異なるアプローチに注目してください)
マルチユーザーシステムとして、Linuxにはシステム内の各ユーザーに属するファイルを分離する機能があります。 Linuxがこれを達成する方法は、各ユーザーに/home/
ディレクトリ内のサブフォルダーを割り当てることです。各ユーザーファイルはユーザーが所有し、それらのユーザーファイルを開く、変更する、または他のユーザーによる使用を許可することができるのは(s)のみです。逆に、ファイルシステム内の各ファイルはユーザーに属し、そのユーザーはそのファイルを表示または使用できるユーザーを支配します。別の回答で述べたように、元々ユーザーはファイルをシステムのどこにでも置くことができましたが、ある時点で物事を整理する必要があることが明らかになり、/home/
( "slash-home")がユーザーのファイルの場所になりましたあるべきです。
ただし、システム自体および/またはシステム内のすべてのユーザーが必要とするファイルがあります:バイナリ、デバイスファイル、システムファイルなど(覚えておいてください:Linuxおよびその他のUnix系システムでは、 everything はファイルです)。このグローバルに必要なファイルは、ファイルシステムのさまざまな場所に保存され、ファイルシステムの root内のさまざまなフォルダーに整理されます:/
。また、これらのグローバルに必要なファイルは、システムの特定のユーザーではなく、システム自体に属します...しかし、それは混乱を招く可能性があります:誰がバイナリを所有していますか?これらのグローバルに必要なファイルに対する許可を与えるのは誰ですか?
システム内のすべてのファイルには「所有者が必要」であるため、グローバルに必要なファイルを管理できる「特別なユーザー」が必要です。さらに、この「特別なユーザー」は、システム内の他のユーザーにはできないことを実行できます。つまり、システムの他のユーザーを作成できます。このユーザーは、「スーパーユーザー」(私たちにとっては人間)または「ルート」(システムにとっては)と呼ばれます。
現在、このスーパーユーザーはシステムの別のユーザーですが、たとえばメンテナンスなど、他のユーザーよりもはるかに優れた権限(および責任)を持っています。そのため、「root」には自分のものを置く場所が必要であると考えるのは自然ですが、他のユーザーに属するものと混同しないでください。そのため、/home/
の下にサブフォルダーがある代わりに、 "root"にはファイルシステムに/root/
( "slash-root"と呼ばれる)専用の予約スペースがあります。覚えておいてください:「root」は非常に特別なユーザーであるため、彼の物を置くために特別で特権的な場所が必要です。
現在、Ubuntuにはデフォルトで有効になっているルートアカウントがないため、「通常の」ユーザーはシステム全体に対する権限を持っている必要があります。そこでSudo
( "user and do")コマンドが起動します。これにより、通常のユーザー(以前は "sudoers"リストに含まれていた)が、他のユーザーであるかのようにコマンドを実行できます"ルート"。
最後に、その-i
オプションは「初期ログインをシミュレートする」ことを意味します。つまり、Sudo
は、指定されたコマンドを実行する前に「ターゲットユーザーのプロファイル」のデータを読み取ります。コマンドを指定しない場合、Sudo
は、ターゲットユーザーの(ルート)プロファイルでシェルインスタンスを起動します。これは、「ターゲットユーザー」の「ホーム」フォルダーに移動することから始まります。したがって、Sudo -i
は、ルートのホームフォルダー(/root/
)に移動します。
これがSudo -i
で何が起こるかを理解するのに役立つことを願っています。
私は何かを明確にしていないと思うので、ここに追加します:
私は上で言った:「Linuxでは、すべてがファイルです」。そして、私はそれを意味する、文字通り!文書と画像はファイルですが、端末([CTRL] + [ALT] + [Fn]を押してアクセスできる端末)、物理ドライブ、キーボードなどもあります。 Unixライクなシステムは、ファイルとの間でデータの読み取りまたは書き込みを行い、システム内の適切なファイルとの間でデータの流れを指示することで機能します。画面に表示される出力。これらのファイルの一部はユーザーが直接使用できますが、一部は使用できません。たとえば、ハードドライブを直接読み書きすることはできませんが、Linuxに通常の閲覧可能なフォルダーをハードドライブを表すデバイスファイル(/dev/
の下)にリンクさせる必要があります。
Linuxファイルシステムは、複数の物理ドライブにまたがることができます。簡単な例は、USBペンドライブを接続する場合です。Linuxはそのドライブを mount できます(マウントとは、システムが標準フォルダに接続するプロセスで、シェルでファイルを表示できます)またはファイルナビゲータを/dev/
)のデバイスファイルに保存し、それを操作できます。完了したら、Linuxにドライブのマウントを解除し、USBポートから削除するように依頼します。ここで重要なことは、この「マウント-アンマウント」サイクルは、毎日使用する*同じファイルシステムに影響することです。物理ドライブを追加または削除するたびに新しいファイルシステムを作成するのではなく、その物理ドライブをファイルシステムに追加します(この哲学とWndowsのアプローチを比較してください)。
ファイルシステムは複数の物理ドライブにまたがることができるため、システムの異なるファイルを異なる物理ドライブに書き込むことができることが明らかになります。 1つのドライブはシステムバイナリ(/bin/
)を保存でき、別のドライブはユーザーのファイル(/home/
とその子孫)を保存できます。複数ドライブのセットアップでは、/home/
とは異なる物理ドライブに/root/
を書き込むのが一般的です。したがって、システムが壊れ、ユーザーがログインできない場合、/home/
は動作を停止します。rootcan。 (これは単純です...他のユーザーができない場合、rootがログインできるようにするために、各物理ドライブに多くのものをコピーする必要がありますが、これは一般的な考えを与えることができます)。
そして、そのチルダ(~
)文字...これは、 current ユーザーのホームディレクトリを示します。 「bob」としてログインしている場合、cd ~
で/home/bob/
に移動しますが、「root」でログインしている場合、cd ~
で/root/
tl; drだから今、私はすべてが言われていると思う:
「ルート」は特別なユーザーであり、他のユーザーよりもはるかに優れた権限と責任を持っています
「/ root /」は、「root」がその内容を保管できる場所であり、通常のユーザーに属する他のものと混同される危険を冒すことはありません。このフォルダーは、/home/
とは異なる物理ドライブに書き込むことができます。
Sudo -i
は、ルートのログインをシミュレートするシェルを起動します。これは、ルートのホームフォルダーに移動することを意味します。他のユーザーと同様に、cd ~
はホームディレクトリに移動しますが、rootの場合は/root/
になります
システムが異なる物理ドライブにインストールされている場合、システム内の別のドライブに障害が発生した場合でも、rootはログインして問題の修正を試みることができます。
ルートのホームディレクトリが異なる方法で処理される主な理由:
問題が発生した場合、/ファイルシステムのマウントを管理するとすぐにシステム回復タスクを実行できる必要があります。
セットアップによっては、ユーザーのホームディレクトリが別のファイルシステムにある場合や、ネットワークを介してマウントされる場合もあります。
コンソールからルートとしてログインする(つまり、ログインプロンプトでルート名とルートパスワードを入力する)には、1つのファイルシステムのみがマウントされている必要があります。
(これは、コアユーティリティが/ usr/binまたは/ usr/sbinではなく/ binおよび/ sbinにある理由でもあります。/usrにあるものはすべて消耗品です。)