ここでファイルシステムを切り替えるのはなぜですか?

ここでファイルシステムを切り替えるのはなぜですか?

新しい空のディレクトリに移動すると

~$ cd "`mktemp -d`"

そこにファイルシステムをマウントします。

/tmp/tmp.4MlNzMERSw$ sudo mount /dev/sda5 .

その後、そこにあるファイルを一覧表示しようとすると、そのファイルシステムにファイルは表示されません。

/tmp/tmp.4MlNzMERSw$ ll
total 8
drwx------  2 christoph christoph 4096 Jun 18 21:06 ./
drwxrwxrwt 18 root      root      4096 Jun 18 21:09 ../

/tmp/tmp.4MlNzMERSwこれの説明は、最初のコードブロックでコマンドを実行すると、端末がファイル記述子を取得することです。これは、次のように実行してファイルシステムをマウント解除できることを確認しました。

/tmp/tmp.4MlNzMERSw$ sudo umount .

同じ端末ウィンドウでを押して新しい端末を開くCtrl + Shift + N。 2番目の端末を閉じるか、またはその中をナビゲートするまで、最初の端末でこれを行うことはできません。もちろん、第2ターミナルに滞在している間は取り外すことはできません/tmp/tmp.4MlNzMERSw。要点は、古いファイル記述子(以前のファイル記述子)を維持し、新しい端末(ファイルを保持することになる)を取得できない/tmp/tmp.4MlNzMERSwように、最初の端末を邪魔にならない場所に移動しても構いません。/tmp/tmp.4MlNzMERSwシステムが使用中であるため、遅延のない除去が防止されます)。

これで、ファイル名のオートコンプリートが最初のターミナルウィンドウで機能するのではなく、2番目のターミナルウィンドウで機能したいと思います。これが私が観察したものです。しかし、私が知っている限り、ファイル名のオートコンプリートは何とかプリパッチされています。たとえ現在ではこれに対する証拠は見つかりませんが(反対する証拠はあります)。

しかし、私が理解していないのはなぜ私ができるcd mnt最初の端末ウィンドウで、相対位置が前方に変更されます(like)。いいえ最初に返します(例:cd ..thencd tmp.4MlNzMERSw/mntまたはcd tmp.4MlNzMERSw+ cd mnt)。

最初のターミナルウィンドウは、インストール前と同様に、既存のファイル記述子を使用してディレクトリの内容を一覧表示できます。それでは、今後ナビゲートするために同じファイル記述子を使用しないのはなぜですか? *不可能なことですか?

 *これにより、ジョブは当然失敗します。

私の設定

私のコンピュータは、Linux 4.4.0と最新のアップデートがインストールされているUbuntu 16.04を実行しています。私は基本的な端末エミュレータ(GNOME端末(バージョン3.18.3))とbash 4.3.48を使用しています。

$ /proc/self/exe --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ gnome-terminal --version
GNOME Terminal 3.18.3

$ uname -r
4.4.0-79-generic

ベストアンサー1

/tmp/tmp.4MlNzMERSw$ sudo mount /dev/sda5 .

これが完了すると、/dev/sda5シェルはにインストールされますが、シェル/tmp/tmp.4MlNzMERSwの現在のディレクトリはまだ古いディレクトリ、/tmp/tmp.4MlNzMERSwつまりマウントポイントの後ろに隠されたディレクトリです。

以前のファイルディスクリプタ(以前の/tmp/tmp.4MlNzMERSw)を維持し、新しいファイルディスクリプタを取得できないようです。

プロセスの現在のディレクトリは、番号付きのファイル記述子ではありませんが、ファイル記述子と非常によく似ています。現在のディレクトリは、文字列ではなくディレクトリへのハンドルです。元のディレクトリに到達するために使用されたパスは無効になる可能性がありますが、これはファイル記述子の有効性には影響しません。ファイル記述子は、そのファイルが閉じられるまで同じファイルを参照し続けます。シェルプロセスの現在のディレクトリは、/tmpシェルがchdirシステムコールを発行するまでのサブディレクトリです。

ディレクトリの名前を変更すると、次の内容が表示されます。

$ mkdir /tmp/foo
$ cd /tmp/foo
$ pwd
/tmp/foo
$ touch first
$ ls
first
$ mv /tmp/foo /tmp/bar
$ pwd
/tmp/foo
$ pwd -P
/tmp/bar
$ mkdir /tmp/foo
$ echo $PWD
/tmp/foo
$ ls
first
$ ls $PWD
$ cd $PWD
$ ls

シェルの現在のディレクトリは、以前のディレクトリ/tmp/foo、つまりコマンドが呼び出されるfirstまで、名前付きファイルを含むディレクトリのままです。cd

おすすめ記事