เป็นไปได้ไหมที่จะกำหนดตัวหนอนใหม่ ('~', โฮมไดเร็กตอรี่)?


13

เป็นไปได้ที่จะกำหนดไดเรกทอรีบ้านใหม่ เช่นการ/ext1/usernameแทน/home/usernameเช่นการขยาย~ไปยังไดเรกทอรีอื่น (เมื่อเทียบกับการเปลี่ยนแปลงไดเรกทอรีบ้านที่เกิดขึ้นจริงที่ผู้ใช้ไฟล์ที่บ้านตั้งอยู่)

(คำถามนี้เป็นคำถามเชิงวิชาการส่วนใหญ่ดูเหมือนจะเป็นการกระทำที่ไม่ดีที่จะทำเช่นนั้นฉันไม่มีทางเลือกในเรื่องของการใช้cshแม้จะอ่าน 10 อันดับแรก)


11
คุณหมายถึงเปลี่ยนโฮมไดเร็กตอรี่จริงหรือคุณหมายถึงทำให้เชลล์ขยาย~ไปยังสิ่งอื่นนอกเหนือจากโฮมไดเร็กตอรี่จริง?
Derobert

ฉันหมายถึงการขยาย~ไปยังไดเรกทอรีอื่น (ไม่ใช่ถ้าฉันเข้าใจทางเลือกของคุณอย่างถูกต้องการเปลี่ยนตำแหน่งของโฮมไดเรกทอรีของผู้ใช้ทั้งหมด) ฉันไม่ได้รับรู้ว่า~ถูกตีความว่าเป็นรูปแบบสั้น ๆ ของ$HOME@michas ที่อธิบายไว้ในคำตอบของเขา
Andrew Cheong

2
ไม่ใช่ไดเรกทอรีภายในบ้านของผู้ใช้ทั้งหมดคุณสามารถเปลี่ยนเพียงไดเรกทอรีเดียวดังที่ slm แสดงในคำตอบของเขา
Derobert

คำตอบ:


28

ตัวหนอน~จะถูกตีความโดยเปลือกของคุณ เปลือกของคุณจะแปล~เป็นรูปแบบสั้น $HOME

ลอง(echo ~; HOME=foo; echo ~)ดู นี่เป็นครั้งแรกควรพิมพ์ไดเรกทอรีบ้านที่แท้จริงของคุณและหลังจากนั้น "foo" ในขณะที่คุณตั้ง$HOMEกับที่

ค่าเริ่มต้นของ$HOMEมาจากการกำหนดค่าระบบของคุณ ใช้getent passwdเพื่อแสดงรายการผู้ใช้ที่รู้จักทั้งหมดและโฮมไดเร็กตอรี่ของพวกเขา ขึ้นอยู่กับการกำหนดค่าระบบของคุณรายการเหล่านั้นอาจมาจาก/etc/passwdหรือบริการไดเรกทอรีระยะไกล

หากคุณต้องการกำหนดไดเรกทอรีบ้านของคุณใหม่ชั่วคราวให้ตั้งค่า$HOMEใหม่

หากคุณถาวรต้องการเปลี่ยนคุณมีการเปลี่ยนแปลงรายการ passwd /etc/passwdเช่นโดยการแก้ไขด้วยตนเอง


ขอบคุณ @michas ไม่อยากเชื่อเลยว่าฉันพลาดตัวแปรตัวนั้นไป (BTW ปรากฎในcshตัวแปรที่เกี่ยวข้องคือ$home(ตัวพิมพ์เล็ก) และคุณทำไม่ได้setenv HOME /ext1/acheong- คุณทำได้แค่set home=/ext1/acheongนั้นและมันก็ใช้ได้ผลสำหรับฉัน)
Andrew Cheong

2
หากต้องการเปลี่ยนอย่างถาวรคุณสามารถใช้usermod -d
user606723

1
ใช้vipw(หรือสิ่งใดก็ตามที่ GUI ของคุณมีให้) แทนที่จะแก้ไข/etc/passwdโดยตรง ความเสี่ยงในการแก้ไขโดยตรงทำให้เกิดความเสียหายกับไฟล์ซึ่งอาจกู้คืนได้ยาก
Keith Thompson

11

ค่าที่ใช้~จะพิจารณาจากค่าที่คุณได้รับจากฐานข้อมูลการดูแลระบบ ( getent passwd) ซึ่งโดยปกติจะอยู่ใน/etc/passwdไฟล์สำหรับโฮมไดเร็กตอรี่ของผู้ใช้แต่ละคนที่กำหนดไว้ที่นั่น

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

คอลัมน์ที่ 6 ในไฟล์นี้เป็นค่าที่ใช้เมื่อมีคนcd ~มาจากประเภท

nsswitch

คุณสามารถเห็นสิ่งที่ระบบจะใช้สำหรับโฮมไดเร็กทอรีของผู้ใช้โดยใช้คำสั่งgetent passwd:

$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

ว่า "ฐานข้อมูล" ที่ให้เหล่านี้จะถูกควบคุมผ่านระบบของคุณ Resolver, /etc/nsswitch.confที่กำหนดไว้ใน

$ grep passwd /etc/nsswitch.conf 
#passwd:    db files nisplus nis
passwd:     files

ไฟล์ด้านบนหมายถึง/etc/passwdแต่ "ฐานข้อมูล" อาจมาจาก LDAP, NIS หรือตำแหน่งอื่น ๆ ผ่านเครือข่าย

การย้าย / Redefining?

ในการดำเนินการนี้เป็นเรื่องยุ่งยากเล็กน้อยหลังจากสร้างบัญชีแล้ว หากคุณกำลังสร้างบัญชีจากศูนย์แล้วมันเป็นเรื่องไม่สำคัญที่จะกำหนดตำแหน่งของผู้ใช้ของโฮมไดเร็กตอรี่ของพวกเขาใหม่ เมื่อรันuseraddคำสั่งคุณสามารถระบุตำแหน่งที่จะใช้สำหรับโฮมไดเร็กทอรีของผู้ใช้

ตัวอย่าง

$ useradd -d /ext1/acheong ...

ตัดตอนมาจากหน้าคน

-d, --home HOME_DIR
   The new user will be created using HOME_DIR as the value for the users 
   login directory. The default is to append the LOGIN name to BASE_DIR and 
   use that as the login directory name. The directory HOME_DIR does not 
   have to exist but will not be created if it is missing.

สำหรับบัญชีที่มีอยู่

สิ่งนี้กลายเป็นเรื่องของการผ่าตัดมากขึ้นเนื่องจากบ่อยครั้งที่พา ธ ของโฮมไดเร็กตอรี่ของผู้ใช้ถูกรวมไว้ในไฟล์การกำหนดค่า, ทำให้มันยุ่งยาก

ตัวอย่าง

$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"

เหล่านี้อย่างใดอย่างหนึ่งจะต้องได้รับการแก้ไขหรือคุณจะต้องให้เชื่อมโยงจากไปยังสถานที่ใหม่/home/sam/ext1/sam

ย้ายเมื่อ "ฐานข้อมูล" ไม่ได้ /etc/passwd

หากระบบจะได้รับบ้านจากไดเรกทอรี LDAP, NIS ฯลฯ แล้วคุณจะต้องย้ายถิ่นฐาน peform ในระบบเหล่านั้นและประสานงานกับการย้ายไฟล์จากไป/home/sam/ext1/sam

อ้างอิง


แน่นอนการเปลี่ยนแปลงที่จะต้องมีการย้ายไฟล์ของผู้ใช้ และอาจจะออกจาก symlink ในสถานที่เก่า (เป็นอย่างอื่นจำนวนมากของสิ่งที่จะทำลาย ... )
derobert

@derobert - ใช่ฉันทำแบบนี้มาสองสามครั้งฉันพยายามหลีกเลี่ยงมันเหมือนกาฬโรค
slm

@slm - ขอบคุณสำหรับคำตอบอย่างละเอียด (และประวัติ) ฉันกลัวว่าฉันกำลังมองหาที่จะทำอะไรที่ง่ายกว่านี้มาก - และฉันไม่รู้ว่ามีตัวแปรสภาพแวดล้อมที่เป็นตัวแทนของโฮมไดเรกทอรีของเซสชัน ฉันแน่ใจว่าคำตอบของคุณจะช่วยผู้อ่านรายอื่นในอนาคต ขอบคุณอีกครั้ง.
Andrew Cheong

1

automounterถ้าเหตุผลคือการแผ่ออกมาจากผู้ใช้ทั่วระบบไฟล์หลายท่านยังสามารถใช้ และยังช่วยให้คุณมีไดเรกทอรี "ฐาน" ที่แตกต่างกันสำหรับผู้ใช้ของคุณ

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