「~sys」とは何ですか? `/dev`の内容をリストします。

「~sys」とは何ですか? `/dev`の内容をリストします。

で任意の場所にbash入力するとcd ~sysで終わります/dev。プロンプトと同じですが、zshで終わります。~sys/dev

Kubuntu 22.04、Ubuntu 20.04、Raspbian 9.13を確認しました。

Google検索では結果が出ませんでした。

答え1

入力すると、cd ~sysユーザーのホームディレクトリに変わりますsyscd ~roaimaユーザーのホームディレクトリに変更するのと同じですroaima。自分のホームディレクトリへのショートカットは簡単なので、使い方を~既に知っているはずです。

パスワードファイルで(grep '^sys:' /etc/passwdまたはより一般的にgetent passwd sys)表示できるホームディレクトリはsys次のとおりです/dev

sys:x:3:3:sys:/dev:/usr/sbin/nologin

これはcd ~sysディレクトリに変更された理由を説明します/dev

元の質問には~sys動詞なしの入力のみが記載されています。この例では、シェルは~sysホームディレクトリに変更し、/devそれをプログラムとして実行しようとします。明らかに、ディレクトリはプログラムにはできないので、試みは失敗します。

~sys
-bash: /dev: Is a directory

/dev
-bash: /dev: Is a directory

たとえば、シェルを実行している場合は、bashこの動作を無視して、シェルにそのディレクトリへの変更マークを付けてディレクトリを実行しようとする試みを処理させることができます(暗黙的など)cd

shopt -s autocd
~sys               # → "cd -- /dev"
pwd                # → "/dev"

~                  # → "cd -- /home/roaima"
pwd                # → "/home/roaima"

バラよりshopt -s autocdを使用する際の注意事項はありますか?さらなる議論のために。

答え2

~fooユーザーのホームディレクトリに展開されますfoo。これは、bash、zsh、およびより一般的にすべてのPOSIX互換シェル、BusyBox ash、(t)csh(オリジナル)、およびFishを含む、ほとんどすべての最新シェルの機能です。

Unixシステムには多くのシステムアカウントがあり、いくつかは妥当な理由があり、他のものはほとんど歴史的です。これらのシステムアカウントにはログインしなくてもホームディレクトリがあります。これは概して歴史的です(該当するフィールドを空にしておくことが適切にサポートされているかどうかわからないので、とにかくそこに何かがあるはずです/nonexistent)。 Debian システムにはという名前のシステムユーザーがsysいます。ユーザーのホームディレクトリはです/dev。したがって、シェルや他の多くのプログラムで~sys(またはユーザー名とホームディレクトリが何であれ)拡張されます。/dev~daniel/home/daniel

zshで(ほとんどの人のように)あなたが含まれている場合%~ プロンプトエスケープシーケンスプロンプトでは、プロンプトには現在のディレクトリ(略語で表示できます)が含まれます。現在のディレクトリがホームディレクトリの下にある場合、このセクションはに省略されます~。 Zshはさらに一歩進み、次に短縮される可能性がある他のディレクトリも短縮します。チルダ拡張。特に、以前に構文を使用してユーザーのホームディレクトリを参照した場合、~foozshはそのディレクトリをに短縮できることを覚えています~foo

zshはこの関数を呼び出します。静的名前付きディレクトリ。 zshが名前付きディレクトリを覚えているのは、組み込みコマンドを使用してアクセスできるディレクトリハッシュテーブルです。hash -dそしてunhash -d

darkstar% PS1='%~%% '
~% cd /dev
/dev% hash -d              # No known directory abbreviations so far
/dev% echo ~sys            # Let's use ~sys
~sys% hash -d              # Now ~sys=/dev, seen in the hash table and the prompt
sys=/dev
~sys% unhash -d sys        # Forget the abbreviation
/dev%                      # Now the prompt is no longer "abbreviated"

迷惑なことに、zshは、「略語」が短い場合は~foo貴重なホームディレクトリの略語と見なします。fooまたはいつまで生の文字列として。私は同じ長さの名前の付いたディレクトリを忘れてしまいました。

function chpwd_prompt {
    # If a user foo has the home directory /bar and length("foo") <
    # length("bar") then zsh shows `/bar' as `~foo'. If length("foo")
    # = length("bar") then zsh still favors `~foo', but I want `/bar'.
  if [[ ${(%):-%~} == \~* && ${#${(%):-%~}} -eq $#PWD ]]; then
    unhash -d -- ${${${(%):-%~}%%/*}#\~}
  fi
}
chpwd_functions+=(chpwd_prompt)

このコードは、以下のディレクトリのみを短縮したり、それ自体を/home短縮したりするなど、さまざまなデフォルト設定に合わせて調整できます(これにより、ホームディレクトリから始めてホームディレクトリのみを変更するのが~簡単になりますが)。%/

答え3

この用語は~sysユーザーのホームディレクトリを表しますsys。実行すると表示できますgetent passwd sys。ホームディレクトリはとしてリストされています/dev

見てみましたが、実際にそのユーザーアカウントが何であるかわかりません。明らかにシステムアカウントであり(低いID番号3に示すように)グループに属していますsys(再び「システムアカウントグループ」」)が、最新のUbuntuインストールではファイルやプロセスを所有またはアクセスできません。これは従来の問題かもしれません。

答え4

もちろん。追加のアクセスを必要とするがルート全体を必要としない操作では、通常admは「管理」目的で使用され、sysは「システム」目的で使用されます。これは非常にあいまいですが、実際には厳密に標準化されていないためです。

明らかに、今日のArch Linuxでは、admは通常のユーザーが読めない/var/logのファイルにアクセスでき、sysはカップ管理にアクセスできます。コンテンツの既存のユーザー/グループの印刷)。

Debian/Ubuntu では、sys はまったく使用されず、uucp やその他の一部も使用されない可能性がありますが、伝統的なのでそのまま残ります。 (パスワードがなければ、シェルはnologinに設定され、自分が所有するファイルがなければ事実上非アクティブなので、理論的なセキュリティの観点からも害はありません。)

関連情報