Arti tilde di Linux bash (bukan direktori home)

106

Pertama, saya tahu itu ~/adalah direktori home. CDing ~atau ~/membawa saya ke direktori home.

Namun, cd ~Xmembawaku ke tempat khusus, di mana Xsepertinya ada sesuatu.

Dalam bash, jika saya menekan " cd ~" dan menekan tab, itu menunjukkan sekumpulan kemungkinan ~Xopsi seperti ~maildan ~postgresdan ~ssh. Pergi ke folder-folder itu dan melakukan a pwdmenunjukkan kepada saya bahwa folder-folder ini tidak ada di direktori home; mereka ada di mana-mana.

Mereka bukan alias. Saya sudah memeriksanya. Mereka bukan env.variabel, atau mereka membutuhkan $.

Apa yang mengatur tautan ini, dan di mana saya dapat menemukan di mana ini disetel?

jbu
sumber
~ X hanya mengembalikan literal "~ X" tetapi ~ mengembalikan $ HOME dan ~ + mengembalikan $ PWD - mereka tidak spesial selain itu mereka mengambil variabel shell. yaitu mereka tidak menyimpan nilai atau menjalankan perintah untuk mencarinya. Mereka sudah ditentukan. Sudahkah Anda mencoba ~ -? Saya tidak dapat memikirkan kegunaannya, tetapi sekali lagi, ia mengembalikan variabel shell $ OLDPWD
SDsolar

Jawaban:

71

Ini adalah fitur Bash yang disebut " ekspansi tilde ". Ini adalah fungsi dari shell, bukan OSnya. Anda akan mendapatkan perilaku yang berbeda dengan csh, misalnya.

Untuk menjawab pertanyaan Anda tentang dari mana informasi itu berasal: direktori home Anda berasal dari variabel $HOME(tidak peduli apa yang Anda simpan di sana), sementara rumah pengguna lain diambil secara real-time menggunakan getpwent(). Fungsi ini biasanya dikontrol oleh NSS ; jadi dengan nilai default ditarik keluar /etc/passwd, meskipun dapat dikonfigurasi untuk mengambil informasi menggunakan sumber yang diinginkan, seperti NIS, LDAP atau database SQL.

Ekspansi Tilde lebih dari sekadar pencarian direktori home. Berikut ringkasannya:

~              $HOME
~fred          (freds home dir)

~+             $PWD       (your current working directory)
~-             $OLDPWD    (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirsdan ~1,, ~-1dll., digunakan sehubungan dengan pushddan popd.

tylerl
sumber
sebagai catatan, ikan tidak mendukung salah satu dari mereka kecuali tilde polos (~)
mengapa mereka datang ~+? sepertinya tidak berguna.
cregox
3
~ + kira-kira sama dengan. Namun, untuk menggunakan sesuatu seperti ./file itu harus pergi ke sistem file dan mencari tahu di mana. terletak - dibutuhkan beberapa siklus. Menggunakan ~ + menyimpannya pekerjaan hanya dengan mengembalikan konten variabel shell $ PWD yang sudah didefinisikan saat Anda melintasi sistem file.
SDsolar
32

Itu adalah direktori home dari pengguna. Coba cd ~(your username), misalnya.

Ana Betts
sumber
1
Mereka bukan symlink, akun layanan tidak memiliki direktori home di bawah / home
Ana Betts
Jawaban terbaik dalam kasus saya. Juga, dalam kasus khusus saya, itu adalah direktori / folder root, bukan folder home.
wlwl2
16

Apakah mereka adalah direktori beranda pengguna /etc/passwd? Layanan seperti postgres, sendmail, apache, dll., Membuat pengguna sistem yang memiliki direktori home seperti pengguna biasa.

Sean Bright
sumber
2
Memang mereka ~ username adalah direktori home dari pengguna tertentu
Steve Weet
14

Mereka adalah para pengguna. Periksa Anda /etc/passwd.

cd ~username membawa Anda ke direktori utama pengguna tersebut.

Joakim Elofsson
sumber
FTW. Suara positif. TNX untuk membereskannya. Saya bertanya-tanya berapa banyak siklus dan mungkin bahkan subkulit yang terlibat di dalamnya. Bayangkan saja jika sistem Anda memiliki pengguna 3K, seperti di ISP kecil. Astaga.
SDsolar
9

Di komputer saya, karena cara saya menyiapkan sesuatu, melakukan:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

Yang pertama memperhatikan nilai variabel lingkungan $HOME; Saya sengaja mengatur saya $HOMEke sistem file lokal daripada sistem file yang dipasang di NFS. Yang kedua membaca dari file kata sandi (kira-kira; NIS sedikit memperumit banyak hal) dan menemukan bahwa file kata sandi mengatakan direktori home saya /u/jlefflerdan perubahan ke direktori itu.

Hal yang mengganggu adalah kebanyakan perangkat lunak berperilaku seperti di atas (dan spesifikasi POSIX untuk shell memerlukan perilaku ini). Saya menggunakan beberapa perangkat lunak (dan saya tidak punya banyak pilihan untuk menggunakannya) yang memperlakukan informasi dari file kata sandi sebagai nilai $ HOME saat ini, yang sebenarnya salah.

Menerapkan ini ke pertanyaan - seperti yang ditunjukkan orang lain, ' cd ~x' pergi ke direktori home pengguna 'x', dan lebih umum lagi, setiap kali ekspansi tilde dilakukan, ~xberarti direktori home pengguna 'x' (dan itu adalah kesalahan jika pengguna 'x' tidak ada).


Mungkin perlu disebutkan bahwa:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

Saya tidak dapat langsung menemukan kegunaan untuk ' ~+', kecuali Anda melakukan hal-hal aneh dengan memindahkan symlink di jalur yang mengarah ke direktori saat ini.

Anda juga bisa melakukan:

cd -

Artinya sama dengan ~-.

Jonathan Leffler
sumber
1
Tentang cd ~+: Anda berpotensi dapat menggunakannya untuk memeriksa apakah direktori Anda saat ini masih ada - meskipun itu cara yang sangat tidak ortodoks untuk melakukannya.
profesor
1

Jika Anda menggunakan autofsmaka ekspansi mungkin sebenarnya berasal dari /etc/auto.home(atau serupa untuk distro Anda). Misalnya, /etc/auto.masterpenampilan saya seperti:

/home2 auto.home --timeout 60

dan /etc/auto.hometerlihat seperti:

mgalgs -rw,noquota,intr space:/space/mgalgs
mgalgs
sumber
0

Mungkin Anda melihat pengguna OpenDirectory / ActiveDirectory / LDAP "dipasang secara otomatis" ke direktori beranda Anda.

Di * nix, ~akan beralih ke direktori home Anda. Demikian juga ~Xakan menyelesaikan ke 'pengguna X'.

Mirip dengan automount untuk direktori, OpenDirectory / ActiveDirectory / LDAP digunakan di lingkungan yang lebih besar / perusahaan untuk memasang direktori pengguna secara otomatis. Pengguna ini mungkin orang yang sebenarnya atau mereka dapat menjadi akun mesin yang dibuat untuk menyediakan berbagai fitur.

Jika Anda mengetik, ~TabAnda akan melihat daftar pengguna di komputer Anda.

JS.
sumber