Linux bash'da tilde'nin anlamı (ana dizin değil)


106

Öncelikle ~/, bunun ana dizin olduğunu biliyorum . CD oluşturma ~veya ~/beni ana dizine götürüyor.

Ancak, cd ~Xbeni özel bir yere götürüyor, Xher şey gibi görünüyor.

Bash'de, " cd ~" ve sekmeye basarsam, ve ve ~Xgibi bir dizi olası seçenek gösterir . Bu klasörlere gidip bir yapmak bana bu klasörlerin ana dizinde olmadığını gösteriyor; her yerdeler.~mail~postgres~sshpwd

Takma ad değiller. Kontrol ettim. env.Değişken değiller , yoksa bir $.

Bu bağlantıları ne ayarlıyor ve bunların nerede kurulduğunu nerede bulabilirim?


~ X basitçe "~ X" değişmezini döndürür ama ~ $ HOME'u ve ~ + $ PWD'yi döndürür - bunlar kabuk değişkenlerini getirmelerinden başka özel değildir. yani değerleri saklamazlar veya aramak için bir komut yürütmezler. Zaten tanımlanmışlardır. ~ - denediniz mi? Bunun için bir kullanım düşünemiyorum, ancak yine, bir kabuk değişkeni $ OLDPWD
SDsolar

Yanıtlar:


71

Bu, " tilde genişletme " adlı bir Bash özelliğidir . Bu, işletim sisteminin değil, kabuğun bir işlevidir. Örneğin csh ile farklı davranışlar elde edeceksiniz.

Bilginin nereden geldiği hakkındaki sorunuza cevap vermek için: ana dizininiz değişkenden gelir $HOME(orada ne sakladığınızdan bağımsız olarak), diğer kullanıcıların evleri gerçek zamanlı kullanılarak alınır getpwent(). Bu işlev genellikle NSS tarafından kontrol edilir ; bu nedenle, varsayılan değerlerden çıkarılır /etc/passwd, ancak NIS, LDAP veya bir SQL veritabanı gibi istenen herhangi bir kaynağı kullanarak bilgileri almak üzere yapılandırılabilir.

Tilde genişletmesi, ana dizin aramasından daha fazlasıdır. İşte özet:

~              $HOME
~fred          (freds home dir)

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

dirsve ~1, ~-1vb ile bağlantılı olarak kullanılır pushdve popd.


bir not olarak balık , düz tilde (~) dışında hiçbirini desteklemiyor

neden ortaya çıktılar ~+? oldukça faydasız görünüyor.
cregox

3
~ + kabaca aynıdır. Ancak, ./file gibi bir şey kullanmak için dosya sistemine gidip nerede olduğunu bulması gerekir. bulunur - birkaç döngü alır. ~ + Kullanmak, dosya sistemini dolaşırken zaten tanımlanmış olan kabuk değişkeni $ PWD'nin içeriğini döndürerek işi kaydeder.
SDsolar

32

Bunlar, kullanıcıların ana dizinleri. cd ~(your username)Örneğin deneyin .


1
Bunlar sembolik bağlantı değil, hizmet hesaplarının / home altında ana dizinleri yok
Ana Betts

Benim durumum için en iyi cevap. Ayrıca, benim özel durumumda, ana klasör değil, kök dizin / klasördü.
wlwl2

16

İçindeki kullanıcıların ana dizinleri /etc/passwdmi? Postgres, sendmail, apache vb. Hizmetler, normal kullanıcılar gibi ev dizinlerine sahip sistem kullanıcıları oluşturur.


2
Nitekim bunlar ~ Kullanıcı belirtilen kullanıcının ev dizinidir
Steve Weet

14

Kullanıcılar bunlar. Kontrol edin /etc/passwd.

cd ~username sizi o kullanıcının ana dizinine götürür.


FTW. Olumlu oy verin. Bunu temizlemek için TNX. Bunda kaç döngü ve hatta bir alt kabuk olduğunu merak ediyorum. Küçük bir İSS'de olduğu gibi, sisteminizin 3K kullanıcısı olduğunu hayal edin. Eyvah.
SDsolar

9

Makinemde, işleri kurma şeklimden dolayı:

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

İlki, çevre değişkeninin değerine dikkat eder $HOME; Kasıtlı olarak NFS'ye $HOMEbağlı bir dosya sistemi yerine yerel bir dosya sistemine ayarladım . İkincisi parola dosyasından okur (yaklaşık olarak; NIS işleri biraz karmaşıklaştırır) ve parola dosyasının ana dizininin/u/jleffler ve bu dizine değiştiğini .

Can sıkıcı olan şey, çoğu yazılımın yukarıdaki gibi davranmasıdır (ve kabuk için POSIX belirtimi bu davranışı gerektirir). Parola dosyasındaki bilgileri geçerli $ HOME değeri olarak değerlendiren bazı yazılımlar kullanıyorum (ve kullanma konusunda fazla seçeneğim yok), ki bu yanlış.

Bunu soruya uygulamak - diğerlerinin de belirttiği gibi, ' cd ~x', 'x' kullanıcısının ana dizinine gider ve daha genel olarak, tilde genişletmesi yapıldığında, ~x'x' kullanıcısının ev dizini anlamına gelir (ve bu bir hatadır 'x' kullanıcısı yoksa).


Şunlardan bahsetmeye değer olabilir:

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

~+Geçerli dizine giden yoldaki hareketli sembolik bağlarla bazı garip şeyler yapmazsanız, ' ' için hemen bir kullanım bulamıyorum .

Ayrıca şunları da yapabilirsiniz:

cd -

Bu aynı anlama gelir ~-.


1
Hakkında cd ~+: Potansiyel olarak, şu anda bulunduğunuz bir dizinin hala var olup olmadığını kontrol etmek için kullanabilirsiniz - bunu yapmanın oldukça sıra dışı bir yolu olsa bile.
professorsloth


1

Kullanıyorsanız autofs, genişletme aslında /etc/auto.home(veya dağıtımınız için benzer) kaynaklanıyor olabilir. Örneğin, /etc/auto.mastergörünüşüm şöyle:

/home2 auto.home --timeout 60

ve /etc/auto.homeşöyle görünür:

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

0

OpenDirectory / ActiveDirectory / LDAP kullanıcılarının ana dizininize "otomatik olarak bağlanmış" olduğunu görüyor olabilirsiniz.

* Nix'te, ~ana dizininize çözümlenir. Aynı şekilde ~X"X kullanıcısı" olarak çözülecektir.

Dizinler için automount'a benzer şekilde, OpenDirectory / ActiveDirectory / LDAP, kullanıcı dizinlerini otomatik olarak bağlamak için daha büyük / kurumsal ortamlarda kullanılır. Bu kullanıcılar gerçek kişiler olabilir veya çeşitli özellikler sağlamak için oluşturulmuş makine hesapları olabilir.

Eğer yazarsan ~Tab , makinenizdeki kullanıcıların bir listesini görürsünüz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.