สำหรับซอฟต์แวร์เท่านั้นคุณ/usr/localจำเป็นต้องใช้ไดเรกทอรีบ้านของคุณแทน
แทนการเปลี่ยนกรรมสิทธิ์ของหรือมีการเรียกใช้คำสั่งเป็นรากเมื่อคุณไม่ต้องการที่จะคุณก็ควรกำหนดค่าสร้างของคุณเพื่อให้พวกเขาติดตั้งในไดเรกทอรีบ้านของคุณแทน/usr/local /usr/localสิ่งนี้จะจัดการปัญหาที่อาจเกิดขึ้นทั้งหมดด้วยการเปลี่ยนความเป็นเจ้าของ/usr/localรวมถึงวิธีการbinและsbinไดเรกทอรีย่อยที่อยู่ในrootเส้นทางของ
หากคุณต้องการอนุญาตให้ผู้ใช้รายอื่นเรียกใช้ซอฟต์แวร์ของคุณคุณสามารถให้สิทธิ์การเข้าถึงแก่พวกเขา ในความเป็นจริงพวกเขาอาจจะสามารถที่จะอยู่แล้วเพราะโดยค่าเริ่มต้นไดเรกทอรีบ้านของคุณมีบุตรอ่านและดำเนินการเข้าถึง (หากคุณไม่ต้องการคุณสามารถเปลี่ยนได้อย่างง่ายดายเพียงแค่ใช้chmodไฟล์หรือไดเรกทอรีที่คุณต้องการทำให้เป็นส่วนตัวและอาจเปลี่ยนได้umaskด้วย)
ด้วยการติดตั้งซอฟต์แวร์ในไดเรกทอรีบ้านของคุณไบนารีที่จะมีในหายไปแทนจะไปใน/usr/local/bin คุณจะได้รับไดเรกทอรีย่อยอื่น ๆ ของไดเรกทอรีบ้านของคุณที่สอดคล้องกับไดเรกทอรีย่อยของซอฟต์แวร์ที่คุณติดตั้งความต้องการ โดยทั่วไปจะเกิดขึ้นโดยอัตโนมัติเมื่อคุณติดตั้งซอฟต์แวร์จากซอร์สโค้ด/home/username/bin/usr/local
การกำหนดค่า Builds ของคุณ
ซอฟต์แวร์ส่วนใหญ่ที่คุณสร้างจากซอร์สโค้ดมีขั้นตอนในการรัน:
./configure
สำหรับซอฟต์แวร์ส่วนใหญ่ที่มาพร้อมกับconfigureสคริปต์ที่สามารถเรียกใช้เช่นนั้นจะมีค่าเริ่มต้นในการกำหนดค่าบิลด์สำหรับการติดตั้งภายใน/usr/localเมื่อคุณรันsudo make installเพื่อติดตั้งในที่สุด เหตุผลก็คือมันเทียบเท่ากับการทำงานโดยปริยาย:
./configure --prefix=/usr/local
ในการกำหนดค่าบิลด์สำหรับการติดตั้งในโฮมไดเร็กทอรีของคุณให้ใช้สิ่งนี้แทน:
./configure --prefix="$HOME"
ในทางปฏิบัติใน Ubuntu เส้นทางไดเรกทอรีหลักไม่มีช่องว่างช่องว่างอื่น ๆ หรืออักขระอื่น ๆ ที่เชลล์จะได้รับการดูแลเป็นพิเศษ*ดังนั้นหากคุณไม่ได้ตั้งค่าบัญชีผู้ใช้ของคุณค่อนข้างแปลกคุณสามารถพิมพ์:
./configure --prefix=$HOME
(ฉันไม่แนะนำให้ใช้นิสัยนี้ในการเขียนสคริปต์นอกจากนี้ในระบบปฏิบัติการอื่น ๆ - เช่น macOS - เป็นเรื่องแปลกสำหรับพา ธ ไปยังโฮมไดเร็กตอรี่ของผู้ใช้เพื่อให้มีช่องว่าง)
หรือหากคุณต้องการคุณสามารถพิมพ์พา ธ โฮมไดเร็กตอรี่แบบเต็มได้:
./configure --prefix=/home/username
(แทนที่usernameด้วยชื่อผู้ใช้จริงของคุณแน่นอนถ้าด้วยเหตุผลบางประการไดเรกทอรีบ้านของคุณไม่ได้อยู่ใน/homeนั้นคุณจะต้องปรับเปลี่ยนตามลำดับ)
การติดตั้ง Builds ของคุณ
หลังจากที่คุณเรียกmakeคุณอาจจะคุ้นเคยกับการทำงานsudo make installแต่เมื่อคุณติดตั้งในไดเรกทอรีบ้านของคุณเองคุณไม่จำเป็นต้องเรียกใช้มันเป็นรากเพื่อให้คุณสามารถ - และควรsudo --omit เพิ่งรัน:
make install
ในทำนองเดียวกันสำหรับซอฟต์แวร์ที่รองรับuninstallเป้าหมาย:
make uninstall
ตรงนี้เป็นสิ่งที่คุณขอ ... /usr/localเพียงแค่ในไดเรกทอรีบ้านของคุณไม่ได้
เรียกใช้โปรแกรมของคุณ
อาจเป็นbinไดเรกทอรีย่อยของโฮมไดเร็กตอรี่ของคุณ:
- แล้วในของคุณ
$PATH, หรือ
- จะอยู่ในของคุณ
$PATHถ้าคุณเพิ่งออกจากระบบและกลับเข้ามาใหม่
เหตุผลก็คือ.profileไฟล์ในโฮมไดเร็กตอรี่ของคุณ, ซึ่งมีคำสั่งที่ทำงานเมื่อคุณเข้าสู่ระบบ, ประกอบด้วยสิ่งนี้ตามค่าเริ่มต้นสำหรับบัญชีผู้ใช้ที่สร้างในUbuntu เวอร์ชันส่วนใหญ่ (รวมถึงบัญชีผู้ดูแลระบบเริ่มต้นที่สร้างขึ้นเมื่อคุณติดตั้งระบบปฏิบัติการ):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
รหัสนั้นจะทำงานเมื่อคุณเข้าสู่ระบบ (เพราะมันอยู่ใน.profile) และวางbinไดเรกทอรีส่วนบุคคลของคุณใน$PATH กรณีที่มันมีอยู่ในเวลานั้น นั่นเป็นเหตุผลที่คุณอาจต้องออกจากระบบและกลับเข้ามาใหม่
รุ่นเก่าเช่น Ubuntu 14.04 รวมถึงรุ่นใหม่กว่าเช่น Ubuntu 17.10 มาพร้อมกับสิ่งนั้น อย่างไรก็ตาม Ubuntu 16.04 ซึ่งน่าจะเป็นรุ่นที่ได้รับความนิยมมากที่สุดในขณะนี้มี:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
ซึ่งเพิ่มbinไดเรกทอรีย่อยของโฮมไดเรกทอรีของคุณรวมถึง.local/binไดเรกทอรีย่อยให้กับคุณ$PATHโดยไม่ตรวจสอบว่ามีไดเรกทอรีเหล่านั้นอยู่จริงหรือไม่ ดังนั้นหากคุณใช้ 16.04 หรือหากคุณอัปเกรดจากระบบที่เป็น 16.04 เมื่อบัญชีผู้ใช้ของคุณถูกสร้างขึ้นbinไดเรกทอรีย่อยของโฮมไดเรกทอรีของคุณน่าจะอยู่ในตัวคุณ$PATHแล้ว
.profileไฟล์ของคุณถูกคัดลอกจาก/etc/skelไดเรกทอรีเมื่อสร้างบัญชีผู้ใช้ของคุณ หากบัญชีผู้ใช้ของคุณถูกสร้างขึ้นใน Ubuntu รุ่นเก่าจะมีรุ่น.profileนั้นและไม่มีการเปลี่ยนแปลง - สำหรับบัญชีผู้ใช้ของคุณ - โดยอัปเกรดเป็นรุ่นล่าสุด
เมื่อbinไดเรกทอรีย่อยของไดเรกทอรีบ้านของคุณอยู่ในของคุณ$PATHคุณจะสามารถเรียกใช้โปรแกรมที่มีแฟ้มที่ปฏิบัติการได้มีการติดตั้งมีเพียงแค่พิมพ์ชื่อของพวกเขาเช่นเดียวกับที่คุณสามารถทำกับโปรแกรมที่ติดตั้งโดยผู้จัดการแพคเกจของ Ubuntu /usr/localหรือภายในติดตั้ง
.localตัวเลือก
คุณอาจจะได้สังเกตเห็นว่าเริ่มต้น.profileไฟล์สำหรับบัญชีผู้ใช้ที่สร้างขึ้นในบางรุ่น Ubuntu รวมทั้งใน 16.04 ตามที่อธิบายไว้ข้างต้นเพิ่มไม่ได้เป็นเพียง$HOME/binเส้นทางของคุณ $HOME/.local/binแต่ยัง หากคุณ.profileไม่ได้เพิ่มสิ่งนั้น แต่คุณต้องการคุณสามารถแก้ไขได้
แม้ว่ามักจะใช้เพื่อจัดเก็บการตั้งค่าและข้อมูลแคชคุณยังสามารถติดตั้งซอฟต์แวร์ใน.localไดเรกทอรีย่อยของโฮมไดเร็กตอรี่ของคุณ คุณจะรู้สึกไม่ถูกยับยั้งในการทำเช่นนั้นจากการใช้งานและการรักษาความปลอดภัยจุดยืนคล้ายกับ--prefix="$HOME/.local"--prefix="$HOME"
โปรดจำไว้ว่าไฟล์และไดเรกทอรีที่เริ่มต้นด้วย.จะไม่แสดงโดยค่าเริ่มต้นในเบราว์เซอร์ไฟล์กราฟิก (ใช้Ctrl+ Hเพื่อยกเลิกการซ่อนและซ่อนไฟล์ใหม่) หรือโดยlsคำสั่ง (ผ่าน-Aหรือ-aตั้งค่าสถานะเพื่อแสดง) นี่อาจไม่ใช่สิ่งที่คุณต้องการหรืออาจเป็นสิ่งที่คุณต้องการ นี่เป็นเรื่องของการตั้งค่าส่วนตัว
$HOME/.localแต่ผมได้สังเกตเห็นว่าบางแหล่งอัตโนมัติตามผู้จัดการแพคเกจที่สร้างและติดตั้งซอฟต์แวร์ในการใช้งานไดเรกทอรีบ้านหนึ่ง ฉันไม่รู้จริง ๆ ว่านี่คือเรื่องธรรมดาฉันหวังว่าจะตรวจสอบเพิ่มเติมและอัปเดตคำตอบนี้ - แต่คุณอาจต้องการใช้$HOMEสำหรับสิ่งที่คุณรวบรวมด้วยตนเอง วิธีนี้จะชัดเจนว่าสิ่งต่าง ๆ มาจากไหน และหากมีการชนกันของซอฟต์แวร์ก็ยังมีแนวโน้มที่จะอยู่ร่วมกันได้อย่างเป็นที่ยอมรับ
คุณอาจจะยังจงใจติดตั้งซอฟต์แวร์บางอย่างใน$HOME/.localและซอฟต์แวร์อื่น ๆ $HOMEใน มันขึ้นอยู่กับคุณ. binไดเรกทอรีใดก็ตามที่ปรากฏขึ้นเป็นอันดับแรกใน$PATHตัวแปรสภาพแวดล้อมของคุณคือไดเรกทอรีที่คำสั่งจะเรียกใช้ในกรณีที่คำสั่งของชื่อเดียวกันมีอยู่ทั้งคู่
เครดิตไปที่ZannaและVideonauthเพื่อชี้ให้เห็นข้อผิดพลาดในคำตอบก่อนหน้านี้ซึ่งเกี่ยวกับ Ubuntu รุ่นใดที่มีรหัสเริ่มต้นใน.profileและช่วยฉันแก้ไข (ดูที่นี่ด้วย )