สำหรับซอฟต์แวร์เท่านั้นคุณ/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
และช่วยฉันแก้ไข (ดูที่นี่ด้วย )