ฉันต้องการ~~
ชี้ไปที่ไดเรกทอรีอื่นเพื่อให้ฉันสามารถใช้เป็นทางลัด ~
ฉันต้องการให้มีฟังก์ชันเดียวกันตรงตามที่ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการ~~
ชี้ไปที่ไดเรกทอรีอื่นเพื่อให้ฉันสามารถใช้เป็นทางลัด ~
ฉันต้องการให้มีฟังก์ชันเดียวกันตรงตามที่ ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
จริงๆแล้วมีวิธีมันไม่ใช่วิธีที่ดี แต่เป็นวิธีฮ่าฮ่า!
เพิ่มสิ่งต่อไปนี้ใน/etc/passwd
ไฟล์ของคุณ:
~:x:1111:99:special Character user:/test:/sbin/nologin
แทนที่1111
เป็น UID ด้วยสิ่งที่สมเหตุสมผลแทนที่/test
ด้วยไดเรกทอรีที่คุณต้องการ ~~ เพื่อเลียนแบบ
99
ในระบบของฉันคือnobody
กลุ่มที่ฉันแนะนำถ้าคุณทำเช่นนี้เพื่อให้แน่ใจว่าเป็นกลุ่มที่ไม่มีสิทธิ์ในไฟล์ใด ๆ ที่จะถูกใช้งาน ตามหลักเหตุผล/sbin/nologin
ในฐานะเชลล์มันไม่ควรใช้มันก็จะไม่มี/etc/shadow
รายการดังนั้นมันจะไม่มีรหัสผ่าน ในทางทฤษฎีควรจะดี แต่ให้แน่ใจว่าจะไม่ให้คุณเข้าสู่ระบบเป็นบัญชี
ในฐานะที่เป็นหมายเหตุด้านข้าง: ฉันไม่มีทางที่จะบอกว่านี่เป็นความคิดที่ดี แต่มันจะทำให้การทำงานที่คุณต้องการสำเร็จ
แก้ไข: เพื่อประโยชน์ครบถ้วนนี้ได้รับการแนะนำโดย VarunAgw: คุณสามารถเพิ่มผู้ใช้เป็นปกติuseradd -s /sbin/nologin -N tmp
แล้วปรับเปลี่ยน/etc/passwd
และ/etc/shadow
การเปลี่ยนแปลงการใช้tmp
เพื่อ~
และเปลี่ยนสถานที่ตั้งของhome directory
useradd 'tmp'
แล้วแทนที่tmp
ด้วย~
shadow
รายการ แต่ฉันคิดว่าตราบใดที่ไม่มีการตั้งรหัสผ่านจะไม่เป็นความเสี่ยงเพิ่มเติม
คุณสามารถใช้ประโยชน์จาก CDPATH และใส่ชื่อ~~
ไดเรกทอรีในส่วนประกอบ CDPATH ของคุณ
จากman bash
(แต่ CDPATH สามารถใช้ได้แม้ในsh
)
พา ธ การค้นหาสำหรับคำสั่ง cd นี่เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งเชลล์ค้นหาไดเร็กทอรีปลายทางที่ระบุโดยคำสั่ง cd ค่าตัวอย่างคือ ".: ~: / usr"
cd ~~
ที่จะช่วยให้คุณทำ
ถ้าคุณต้องการทำสิ่งต่าง ๆ เช่นvi ~~/someFile
จากที่ใด ๆ ในแผนผังไดเรกทอรีคุณก็จะโชคไม่ดีถ้าคุณยืนยันอย่าง~~
แท้จริงยกเว้นว่าคุณแฮ็คเชลล์คุณสามารถใช้ตัวแปรหรือตัวแปรสภาพแวดล้อมเพื่อจัดเก็บไดเรคทอรีเวทของคุณเพื่อให้คุณสามารถทำได้ , เช่น,$tilda/someFile
ฉันมักจะใส่ไฟล์มักจะเข้าถึงได้ภายในไดเรกทอรีที่มีชื่อในไม่ช้าในไดเรกทอรีบ้านของฉันดังนั้นฉันสามารถเข้าถึงพวกเขาด้วยเช่นเส้นทางหรือ~/b
~/l
โดยปกติคุณสามารถแทนที่ไดเรกทอรีด้วย symlink เป็นไดเรกทอรีได้มากเท่าที่คุณต้องการ
การ~
ขยายตัวหนอนของเชลล์นั้นส่วนใหญ่สามารถตั้งโปรแกรมได้ มันจะขยายไปยังไดเรกทอรีผู้ใช้ของชื่อผู้ใช้ระบบประกาศในบริบทต่อท้ายของมัน(และโซลูชั่นที่ยอดเยี่ยมตามสายเหล่านี้ได้รับการเสนอแล้ว)ค่าของ$HOME
ตัวแปรเชลล์หรือไม่เลย
ดังนั้น:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
ฉันเปลี่ยน$HOME
ตลอดเวลาและฉันเก็บฟังก์ชั่นในไฟล์สภาพแวดล้อมของเชลล์เพื่อรีเซ็ต:
home(){
HOME=~$USER
cd ~; pwd
}
หากคุณต้องการใช้~
เครื่องหมายตัวหนอนด้วยวิธีใดวิธีหนึ่งที่ไม่ได้อ้างถึงไดเรกทอรีบ้านของคุณให้ทำเช่นนั้น $HOME
เพียงแค่มอบหมาย อย่ากลัวมัน $HOME
เป็นเพียงตัวแปรเชลล์เหมือนอย่างอื่น
ข้อเสนอแนะก็ฉันมีเพียงการขยายตัวเล็กน้อย @ คำแนะนำที่ดี PSkocik $CDPATH
เกี่ยวกับการใช้ สิ่งหนึ่งที่เขาไม่ได้กล่าวถึงคือคุณสามารถใช้และปรับเปลี่ยน$CDPATH
inline ได้โดยไม่ต้องเปลี่ยนค่า shell ปัจจุบันสำหรับ$CDPATH
เลย ตัวอย่างเช่น:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cd
จำเป็นต้องเป็น shell builtin แต่ไม่ใช่ POSIX shell พิเศษในตัวดังนั้นการประกาศค่าสำหรับ$CDPATH
จะไม่ส่งผลกระทบต่อค่า shell ปัจจุบัน หากคุณใช้ตามที่ฉันได้ทำไว้$CDPATH
ค่าของข้างต้นจะเปลี่ยนเฉพาะสำหรับสภาพแวดล้อมของcd
คำสั่งเดียวและจะคืนค่าเป็นค่าก่อนหน้าหลังจากนั้น ฉันมักจะพบว่าเทคนิคดังกล่าวมีประโยชน์มากที่สุดเมื่อใช้ร่วมกับการทำให้ประวัติสมบูรณ์ ฉันจะทำสิ่งข้างต้นเปลี่ยนเป็นไดเรกทอรีเรียกใช้คำสั่งไม่กี่คำจากนั้นกดขึ้นจนกว่าฉันจะกลับมาที่cd
คำสั่งของฉันและถอยกลับส่วนเส้นทางหรือสองเพื่อย้ายที่อื่น
ทีนี้ถ้าคุณรวมสองแนวคิดนี้เข้าด้วยกันคุณสามารถทำให้คำสั่งที่ใช้ก่อนหน้านี้มีความหมายแตกต่างกันโดยสิ้นเชิงในครั้งต่อไปที่คุณใช้
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
ทำงานได้อย่างสมบูรณ์เช่นเดียวกับฟังก์ชั่นทุบตี:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
นี่เป็นอีกวิธีหนึ่งที่ใกล้เข้ามาเล็กน้อย (ฉันรู้ว่าฉันไม่ได้ใกล้เคียงกับข้อกำหนด)
function ~~ { echo /test; }
จากนั้นมีตัวละครอีกสองสามตัว:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/bar
ไม่ได้ไปทำงานให้ดีหรือvim ~~/foo.txt
ฯลฯ ...
CDPATH
ตัวแปรเพื่อจัดการcd
กรณีและปัญหา
~
ได้ และ~
ไม่ได้ใช้เหมือนคำสั่ง
CDPATH
มันคือมันไม่ทำงานสำหรับคำสั่งนอก .... ซีดี IE คุณทำได้cd ~~
หรือcd ~~/testdir1
ไม่เห็นด้วยvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '