dpkg ไม่พบ ldconfig / start-stop-daemon ในตัวแปร PATH


41

ฉันพยายามที่จะติดตั้งbsd-mailxยูทิลิตี้แพคเกจที่ติดตั้งไว้ แต่ฉันสงสัยเกี่ยวกับข้อผิดพลาด

นี่เป็นข้อผิดพลาดที่ฉันได้รับ:

Preconfiguring packages ...
dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.
dpkg: error: 2 expected programs not found in PATH or not executable.
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)

คุณช่วยโพสต์เอาท์พุทของเสียงสะท้อนได้$PATHไหม?
ความโกลาหล

@ ความสับสนวุ่นวายวิธีการที่จะได้รับ?
user87142

@ user87142 เพียงพิมพ์echo $PATHเทอร์มินัล
John WH Smith

@ chaos, ฉันได้รับสิ่งนี้ ... / usr / local / bin: / usr / bin: / bin: / usr / games
user87142

และผลลัพธ์ของcat /etc/environment?
ความโกลาหล

คำตอบ:


59

ก่อนอื่นสิ่งที่คุณสนใจอย่างแท้จริงคือ:

dpkg: warning: 'ldconfig' not found in PATH or not executable.
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable.

มีการรายงานข้อผิดพลาดเหล่านี้หลายครั้งโดยผู้ใช้ Debian และ Ubuntu (คุณสามารถ Google เพื่อรับข้อมูลเพิ่มเติมได้) ดูเหมือนว่าPATHตัวแปรจะไม่ได้รับการตั้งค่าอย่างถูกต้องเมื่อผู้ใช้พยายามดำเนินการคำสั่งผ่านsudoซึ่งอาจเป็นสิ่งที่คุณพยายามทำ

โซลูชันที่ 1: ตั้งsudoค่าเส้นทางที่ปลอดภัยเริ่มต้นของ

เปิด/etc/sudoersโดยรันvisudoในเทอร์มินัลของคุณและตรวจสอบให้แน่ใจว่าไฟล์มีบรรทัดต่อไปนี้:

Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

ดูข้อมูลเพิ่มเติมเกี่ยวกับปัญหานี้ได้ที่นี่ (ปัญหาและเคล็ดลับ> เส้นทางไม่ได้ตั้งค่า)

โซลูชันที่ 2: ใช้บัญชีรูทโดยตรง

อย่าใช้sudoเพียงเปลี่ยนrootไปใช้คำสั่งของคุณ รันหนึ่งในคำสั่งต่อไปนี้เพื่อทำเช่นนั้น:

$ sudo -i
$ su 

เมื่อคุณเข้าสู่ระบบในฐานะ root เพียงรันapt-getคำสั่งของคุณอีกครั้ง:

# apt-get ...

คุณอาจต้องตั้งค่ารูทPATHก่อน แก้ไข/root/.bashrc(ด้วยสิทธิ์พิเศษของหลักสูตร) ​​และเพิ่มบรรทัดต่อไปนี้:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

โซลูชันที่ 3: ลองส่งPATHตัวแปรไปsudoที่เวลาดำเนินการ

เพียงใส่คำนำหน้าsudoด้วยการกำหนดPATHค่าตัวแปรใหม่:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin sudo apt-get ...

1
ฉันลองใช้ผู้ใช้รูท แต่ไม่ได้ผลฉันตรวจสอบพา ธ ด้วย
user87142

@ user87142 คุณไม่ได้ตรวจสอบอย่างถูกต้องเนื่องจาก/sbinหายไป ลองตั้งค่าอีกครั้ง (โซลูชัน 1 และ / หรือ 3) ฉันแก้ไขโซลูชัน 2 เพื่อรวมวิธีแก้ไข PATH ของรูทเมื่อใช้บัญชีแบบโต้ตอบ
John WH Smith

ฉันตรวจสอบแล้วว่า ...... ค่าเริ่มต้น env_reset ค่าเริ่มต้น secure_path = "/ usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin"
user87142

คุณพบวิธีการแก้ปัญหาของมันหรือไม่?
Brijesh Valera

ความหลากหลายของโซลูชันที่ 3 ของเขาคือexport PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/bin:/binก่อนจากนั้นsudo -E apt install nginxหลังจากนั้น -Eสวิตช์วิธีการ--preserve-envทำให้การส่งออกของคุณ env vars กับsudoเซสชั่น
Mark Hudson

2

อย่างใดฉันก็มีปัญหาเดียวกัน

โปรดอ่านข้อความแสดงข้อผิดพลาดของคุณอย่างละเอียดและคุณจะพบวิธีแก้ปัญหา มีข้อความระบุว่า:

หมายเหตุ: PATH ของรูทควรมี / usr / local / sbin, / usr / sbin และ / sbin

จากนั้นฉันตรวจสอบเส้นทางของฉันและฉันก็หายไป / sbin ในเส้นทางของฉัน

echo $ PATH

จากนั้นฉันก็เพิ่มและปัญหาก็หายไป :)

ส่งออก PATH = "$ PATH: / sbin"

Tcharam!


ค่อนข้างแน่ใจว่าสิ่งนี้ได้รับการคุ้มครองโดยคำตอบที่มีอยู่แล้ว
เจฟฟ์ชาลเลอร์

1

ฉันมีปัญหานี้ในวันนี้และแก้ไขมันโดยใส่ความคิดเห็นในบรรทัด (โดยใช้ #)

Defaults    exempt_group=sudo

จากไฟล์ / etc / sudoers ของฉันโดยใช้

# visudo

ในฐานะที่เป็นราก

การเปลี่ยนแปลงนี้จะทำให้ sudo ใช้ตัวแปร secure_path เริ่มต้นที่ตั้งค่าไว้ในไฟล์เดียวกัน


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