で任意の場所にbash
入力するとcd ~sys
で終わります/dev
。プロンプトと同じですが、zsh
で終わります。~sys
/dev
Kubuntu 22.04、Ubuntu 20.04、Raspbian 9.13を確認しました。
Google検索では結果が出ませんでした。
答え1
入力すると、cd ~sys
ユーザーのホームディレクトリに変わりますsys
。cd ~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はさらに一歩進み、次に短縮される可能性がある他のディレクトリも短縮します。チルダ拡張。特に、以前に構文を使用してユーザーのホームディレクトリを参照した場合、~foo
zshはそのディレクトリをに短縮できることを覚えています~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に設定され、自分が所有するファイルがなければ事実上非アクティブなので、理論的なセキュリティの観点からも害はありません。)