ที่ไหนที่ไม่renameคำสั่งมาจากไหน?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
ที่ไหนที่ไม่renameคำสั่งมาจากไหน?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
คำตอบ:
น่าแปลกที่มันมาจากrenameแพ็คเกจ
pilot6@Pilot6:~$ ls -l /usr/bin/rename
lrwxrwxrwx 1 root root 24 окт 17 2013 /usr/bin/rename -> /etc/alternatives/rename
pilot6@Pilot6:~$ ls -l /etc/alternatives/rename
lrwxrwxrwx 1 root root 20 апр 29 2016 /etc/alternatives/rename -> /usr/bin/file-rename
pilot6@Pilot6:~$ dpkg -S /usr/bin/file-rename
rename: /usr/bin/file-rename
dpkg -Sไม่ติดตาม symlink ข้อผิดพลาดหรือคุณสมบัติ?
dpkgงาน dpkgเกี่ยวข้องเฉพาะกับแพ็คเกจที่ติดตั้ง ใช้update-alternatives --query rename มันจะแสดงเส้นทางเชื่อมโยงที่ได้รับการแก้ไข
dpkg/ dpkg-queryให้ข้อมูลนี้อย่างสะดวก อย่างไรก็ตามฉันไม่คิดว่าdpkg -Sควรยกเลิกการเชื่อมโยง Symbian เงียบ ๆจนกว่าจะพบไฟล์แพ็คเกจ dpkg -S fooไม่ควรค้นหาคำสั่งfooพบแพ็คเกจที่ติดตั้งไฟล์ fooและมีประโยชน์มากที่สุดเมื่อเรียกใช้ด้วยพา ธ สัมบูรณ์ของไฟล์ มันจะดีถ้าdpkg -S /usr/bin/renameอธิบายว่าทำไมไม่มีแพ็คเกจให้ symlink นั้น แต่ฉันคิดว่ามันควรจะบอกความจริงว่าไม่มีแพ็คเกจไหน
คุณอาจจะพบว่ามันเป็นลิงค์สัญลักษณ์ที่จัดการโดยupdate-alternativesกลไก:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
คุณสามารถดูการใช้งานทางเลือกโดยใช้
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
และสามารถเลือกระหว่างการใช้งานโดยใช้
update-alternatives --config rename
FWIW file-renameจัดทำโดยrenameแพคเกจในขณะที่ต้นฉบับprenameให้ด้วยperlตัวเอง จากapt-cache show rename:
แพคเกจนี้ให้ทั้งอินเทอร์เฟซสำหรับการเปลี่ยนชื่อไฟล์ (File :: Rename) และเครื่องมือบรรทัดคำสั่ง 'เปลี่ยนชื่อ' ซึ่งมีวัตถุประสงค์เพื่อแทนที่รุ่นที่ให้มาในปัจจุบันโดยแพคเกจ perl
ราวกับว่ามันไม่ได้ทำให้สับสนมากพอคุณอาจเจออีกอย่างrenameจากutil-linuxแพ็คเกจ - ดูว่ามีอะไรบ้างที่เปลี่ยนชื่อทั้งหมด
หากเรากำลังพูดถึง/usr/bin/renameซึ่งเป็นสคริปต์ที่สวยดีrenameคำสั่งนั้นเป็นของแพคเกจแยกต่างหาก
rename:
Installed: 0.20-4
Candidate: 0.20-4
Version table:
*** 0.20-4 500
500 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
ในกรณีที่ Korn เชลล์และอนุพันธ์renameเป็นคำสั่งในตัวเชลล์
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renameคำสั่ง แต่renameไม่ได้ถูกอ้างอิงเพียง/usr/bin/renameเท่าที่คุณเห็นในคำตอบของฉัน ผู้ใช้ที่มี ksh หรือ mksh shell อาจไม่ทราบ เมื่อฉันเริ่มด้วยตัวmkshเองฉันรู้สึกงุนงงมากเมื่อrenameไม่ยอมรับการแสดงออกปกติจนกระทั่งฉันรู้ว่าสิ่งเหล่านั้นเป็นสองสิ่งที่แตกต่างกัน นอกจากนี้อย่าใช้คำพูดของฉัน "ถ้าเรากำลังพูดถึง x" อย่างแท้จริงลองคิดว่ามันเป็นวิธีการพูดว่า "ในกรณีของ"
renameเรือกับ Fedora นั้นจะแตกต่างออกไป ดูเหมือนว่าจะเป็นโปรแกรมที่คอมไพล์แล้วและมันก็แทบจะไม่ทรงพลังเท่ากับโปรแกรมrenameที่มาพร้อมกับ Ubuntu ดังนั้นควรระมัดระวังเมื่อคุณใช้สคริปต์ในการกระจาย Linux ที่แตกต่างกัน