ความหมายของ tilde ใน Linux bash (ไม่ใช่โฮมไดเร็กทอรี)


106

ก่อนอื่นฉันรู้ว่านั่น~/คือโฮมไดเร็กทอรี กำลังซีดี~หรือ~/พาฉันไปที่โฮมไดเร็กทอรี

อย่างไรก็ตามcd ~Xพาฉันไปที่พิเศษซึ่งXดูเหมือนจะเป็นอะไรก็ได้

ในทุบตีถ้าผมตี " cd ~" และแท็บตีก็แสดงให้เห็นพวงของการที่เป็นไปได้~Xตัวเลือกเช่น~mailและและ~postgres ~sshไปที่โฟลเดอร์เหล่านั้นและpwdแสดงให้ฉันเห็นว่าโฟลเดอร์เหล่านี้ไม่ได้อยู่ในโฮมไดเร็กทอรี พวกเขาอยู่ทั่วทุกแห่ง

พวกเขาไม่ใช่นามแฝง ฉันตรวจสอบแล้ว พวกเขาไม่ใช่env.ตัวแปรหรืออื่น ๆ ที่พวกเขาต้องการ$.

การตั้งค่าลิงก์เหล่านี้คืออะไรและฉันจะหาได้จากที่ใด


~ X เพียงแค่ส่งกลับค่าลิเทอรัล "~ X" แต่ ~ คืนค่า $ HOME และ ~ + คืนค่า $ PWD - ไม่ได้มีความพิเศษนอกเหนือจากการดึงตัวแปรเชลล์ กล่าวคือพวกเขาไม่เก็บค่าหรือดำเนินการคำสั่งเพื่อค้นหา มีการกำหนดไว้แล้ว คุณลองแล้ว ~ -? ฉันไม่สามารถนึกถึงการใช้งานได้ แต่อีกครั้งมันส่งคืนตัวแปรเชลล์ $ OLDPWD
SDsolar

คำตอบ:


71

เป็นฟีเจอร์ Bash ที่เรียกว่า " tilde expand " มันเป็นหน้าที่ของเชลล์ไม่ใช่ระบบปฏิบัติการ คุณจะได้รับพฤติกรรมที่แตกต่างกับ csh เช่น

เพื่อที่จะตอบคำถามของคุณเกี่ยวกับการที่ข้อมูลที่มาจาก: ไดเรกทอรีบ้านของคุณมาจากตัวแปร$HOME(ไม่สำคัญว่าสิ่งที่คุณเก็บมี) ในขณะที่บ้านของผู้อื่นจะถูกเรียกแบบ real-time getpwent()โดยใช้ ฟังก์ชั่นนี้มักจะถูกควบคุมโดยเอ็นเอส ; ดังนั้นโดยค่าเริ่มต้นจะถูกดึงออกมา/etc/passwdแม้ว่าจะสามารถกำหนดค่าให้ดึงข้อมูลโดยใช้แหล่งที่มาที่ต้องการเช่น NIS, LDAP หรือฐานข้อมูล SQL

การขยาย Tilde เป็นมากกว่าการค้นหาโฮมไดเร็กทอรี นี่คือบทสรุป:

~              $HOME
~fred          (freds home dir)

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

dirsและ~1, ~-1และอื่น ๆ ที่ใช้ในการร่วมกับและpushdpopd


เนื่องจากปลาโน้ตไม่รองรับสิ่งใด ๆ ยกเว้นทิลเดอธรรมดา (~)

ทำไมพวกเขาถึงคิด~+? ดูเหมือนจะไร้ประโยชน์
cregox

3
~ + นั้นใกล้เคียงกับ. อย่างไรก็ตามในการใช้บางอย่างเช่น. / file จะต้องไปที่ระบบไฟล์และหาว่า. ตั้งอยู่ - ใช้เวลาสองสามรอบ การใช้ ~ + ช่วยประหยัดงานโดยเพียงแค่ส่งคืนเนื้อหาของตัวแปรเชลล์ $ PWD ซึ่งกำหนดไว้แล้วเมื่อคุณสำรวจระบบไฟล์
SDsolar

32

เหล่านี้คือไดเรกทอรีบ้านของผู้ใช้ ลองcd ~(your username)ตัวอย่างเช่น


1
พวกเขาไม่ใช่ซิมลิงค์บัญชีบริการไม่มีไดเรกทอรีบ้านภายใต้ / home
Ana Betts

คำตอบที่ดีที่สุดในกรณีของฉัน นอกจากนี้ในกรณีเฉพาะของฉันมันเป็นไดเร็กทอรี / โฟลเดอร์รูทไม่ใช่โฟลเดอร์หลัก
wlwl2

16

พวกเขาเป็นโฮมไดเร็กทอรีของผู้ใช้/etc/passwdหรือไม่? บริการต่างๆเช่น postgres, sendmail, apache เป็นต้นสร้างผู้ใช้ระบบที่มีโฮมไดเร็กทอรีเหมือนกับผู้ใช้ทั่วไป


2
แท้จริงแล้วพวกเขาคือ ~ ชื่อผู้ใช้คือโฮมไดเร็กทอรีของผู้ใช้ที่ระบุ
Steve Weet

14

คนเหล่านั้นคือผู้ใช้ ตรวจสอบ/etc/passwdไฟล์.

cd ~username นำคุณไปยังโฮมไดเร็กทอรีของผู้ใช้นั้น


FTW. โหวตขึ้น TNX สำหรับการล้างข้อมูลนั้น ฉันสงสัยว่ามีกี่รอบและอาจมีส่วนร่วมในส่วนนั้นด้วย ลองนึกดูว่าระบบของคุณมีผู้ใช้ 3K เหมือน ISP ขนาดเล็กหรือไม่ อ๊ะ.
SDsolar

9

บนเครื่องของฉันเนื่องจากวิธีการตั้งค่าสิ่งต่างๆ:

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

คนแรกที่ให้ความสำคัญกับค่าของตัวแปรสภาพแวดล้อม$HOME; ฉันตั้งใจตั้งค่า$HOMEเป็นระบบไฟล์ภายในเครื่องแทนที่จะเป็นระบบไฟล์ที่ติดตั้ง NFS ครั้งที่สองอ่านจากไฟล์รหัสผ่าน (โดยประมาณ NIS ทำให้ซับซ้อนขึ้นเล็กน้อย) และพบว่าไฟล์รหัสผ่านระบุว่าโฮมไดเร็กทอรีของฉันคือ/u/jlefflerและเปลี่ยนเป็นไดเร็กทอรีนั้น

สิ่งที่น่ารำคาญคือซอฟต์แวร์ส่วนใหญ่ทำงานตามด้านบน (และข้อกำหนด POSIX สำหรับเชลล์ต้องการลักษณะการทำงานนี้) ฉันใช้ซอฟต์แวร์บางตัว (และฉันไม่มีทางเลือกในการใช้งานมากนัก) ที่ถือว่าข้อมูลจากไฟล์รหัสผ่านเป็นค่าปัจจุบันของ $ HOME ซึ่งไม่ถูกต้อง

ใช้สิ่งนี้กับคำถาม - ตามที่คนอื่น ๆ ชี้ให้เห็น ' cd ~x' ไปที่โฮมไดเร็กทอรีของผู้ใช้ 'x' และโดยทั่วไปแล้วเมื่อใดก็ตามที่การขยายตัวทิลเดอเสร็จสิ้น~xหมายถึงโฮมไดเร็กทอรีของผู้ใช้ 'x' (และเป็นข้อผิดพลาด หากไม่มีผู้ใช้ 'x')


อาจเป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่า:

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

ฉันไม่พบการใช้งานสำหรับ ' ~+' ในทันทีเว้นแต่คุณจะทำสิ่งแปลก ๆ ด้วยการย้าย symlink ในเส้นทางที่นำไปสู่ไดเร็กทอรีปัจจุบัน

คุณยังสามารถทำ:

cd -

~-นั่นหมายความว่าเช่นเดียวกับ


1
เกี่ยวกับcd ~+: คุณสามารถใช้เพื่อตรวจสอบว่าไดเรกทอรีที่คุณอยู่ในปัจจุบันยังคงมีอยู่หรือไม่แม้ว่าจะเป็นวิธีที่ค่อนข้างนอกรีตก็ตาม
ศาสตราจารย์


1

หากคุณกำลังใช้autofsการขยายตัวอาจมาจาก/etc/auto.home(หรือคล้ายกันสำหรับ distro ของคุณ) ตัวอย่างเช่น/etc/auto.masterลักษณะของฉัน:

/home2 auto.home --timeout 60

และ/etc/auto.homeดูเหมือนว่า:

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

0

เป็นไปได้ว่าคุณเห็นผู้ใช้ OpenDirectory / ActiveDirectory / LDAP "ติดตั้งอัตโนมัติ" ในโฮมไดเร็กทอรีของคุณ

ใน * nix ~จะแก้ไขเป็นโฮมไดเร็กทอรีของคุณ ในทำนองเดียวกัน~Xจะแก้ไขเป็น 'ผู้ใช้ X'

คล้ายกับการติดตั้งอัตโนมัติสำหรับไดเร็กทอรี OpenDirectory / ActiveDirectory / LDAP ถูกใช้ในสภาพแวดล้อมที่ใหญ่กว่า / องค์กรเพื่อติดตั้งไดเร็กทอรีผู้ใช้โดยอัตโนมัติ ผู้ใช้เหล่านี้อาจเป็นบุคคลที่มีอยู่จริงหรืออาจเป็นบัญชีเครื่องที่สร้างขึ้นเพื่อให้คุณสมบัติต่างๆ

หากคุณพิมพ์~Tabคุณจะเห็นรายชื่อผู้ใช้บนเครื่องของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.