パスプレフィックスとして使用される〜(チルダ)は何ですか?

パスプレフィックスとして使用される〜(チルダ)は何ですか?

編集:これは重複ですhttps://stackoverflow.com/questions/998626/meaning-of-tilde-in-linux-bash-not-home-directory/。私はこの質問を繰り返し終了する資格がありません。

~ホームディレクトリを意味するわけではありませんが、次のようになります。

$ ls ~foo/bar
/some/mount/point/foo/bar

ただし、別のマウントポイントを使用しようとすると、次のようになります。

$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin . 
# bash has a similar error message: 
ls: ~stdin: No such file or directory

~この場合は何と呼びますか?どのように動作しますか?

編集:以下のいくつかのコメントに基づく追加情報:

  1. fooこれが私のシステムのユーザー名ではないことを証明できます。
  2. オートコンプリートしようとすると、ls -lah ~すべてのオプションが表示されるわけではありません。つまり、オートコンプリートに表示されないcd ~quxときに行うことができます。quxもう一度qux私のシステムのユーザーではありません。
  3. 重要なのは/some/mount/pointネットワーク共有だけです。
  4. すべての詳細は、Zシェルのパス名拡張機能である命名パスが混乱していることを示します。しかし、これはbashにも当てはまりますが、bashは明らかにZシェルの名前付きパスなどの機能をサポートしていません。

ベストアンサー1

〜fooとは何ですか?

から引用バッシュマニュアル(追加強調):

単語が引用符なしのチルダ(「〜」)で始まる場合、引用符なしの最初のスラッシュの前のすべての文字(または引用符なしのスラッシュがない場合はすべての文字)はチルダの接頭辞として扱われます。チルダプレフィックスは引用符で囲み、チルダプレフィックスでは、チルダの後の文字は次のように処理されます。可能ログイン名。

~foofooで指定されているとおり、正確にユーザーのホームディレクトリに展開されます/etc/passwd。これにはシステムユーザー名を含めることができます。必ずしも人間のユーザーであるか、実際にローカルにログインできるというわけではありません(たとえば、SSHキーを介してログインできます)。

実は本文にも示すようにコメント、機能がbash使用されますgetpwnam。機能自体は次のように構成されています。POSIX標準なので、以下を含むほとんどのUnixシリーズシステムに存在する必要があります。Mac OS。この機能は、/etc/passwdLDAPやNISなどの他のデータベース検索に限定されません。特別抜粋bash ソースコードtilde.cファイル、394行目から始まります。

  /* No preexpansion hook, or the preexpansion hook failed.  Look in the
     password database. */
  dirname = (char *)NULL;
#if defined (HAVE_GETPWNAM)
  user_entry = getpwnam (username);
#else
  user_entry = 0;

実際のケース

以下では、システムユーザー名を使用して、自分のシステムで実行されているテストを表示できます。該当するpasswd項目と結果を参照してください。ls ~username

$ grep '_apt' /etc/passwd
_apt:x:104:65534::/nonexistent:/bin/false
$ ls ~_apt
ls: cannot access '/nonexistent': No such file or directory
$ grep '^lp' /etc/passwd
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
$ ls ~lp
ls: cannot access '/var/spool/lpd': No such file or directory

_apt出力が示すように、アカウントがロックされていても、passwd -S aptまだ可能なログインとして表示されます。

_apt L 11/29/2017 0 99999 7 -1

注:これはmacOS固有の機能ではなく、シェル固有の機能です。

おすすめ記事