คำสั่ง "เปลี่ยนชื่อ" มาจากไหน


17

ที่ไหนที่ไม่renameคำสั่งมาจากไหน?

user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename

3
แม้ว่าrenameเรือกับ Fedora นั้นจะแตกต่างออกไป ดูเหมือนว่าจะเป็นโปรแกรมที่คอมไพล์แล้วและมันก็แทบจะไม่ทรงพลังเท่ากับโปรแกรมrenameที่มาพร้อมกับ Ubuntu ดังนั้นควรระมัดระวังเมื่อคุณใช้สคริปต์ในการกระจาย Linux ที่แตกต่างกัน
Martin Ueding

@ มาร์ตินคุณสามารถโปรดแสดงความคิดเห็นได้ที่นี่: askubuntu.com/questions/873661/…
guettli

คำตอบนี้บอกว่ามันprename
Gallifreyan

คำตอบ:


20

น่าแปลกที่มันมาจาก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

1
ทำไมdpkg -Sไม่ติดตาม symlink ข้อผิดพลาดหรือคุณสมบัติ?
guettli

5
คุณลักษณะ @guettli : "คำสั่งนี้จะไม่แสดงรายการไฟล์เพิ่มเติมที่สร้างโดยสคริปต์ผู้ดูแลและจะไม่แสดงรายการทางเลือก"
muru

2
symlink ไม่ได้เป็นของแพ็คเกจตัวเอง
Pilot6

2
@guettli เพราะมันไม่ใช่dpkgงาน dpkgเกี่ยวข้องเฉพาะกับแพ็คเกจที่ติดตั้ง ใช้update-alternatives --query rename มันจะแสดงเส้นทางเชื่อมโยงที่ได้รับการแก้ไข
Sergiy Kolodyazhnyy

5
@guettli ดูDebian bug # มันจะเป็นประโยชน์ถ้าdpkg/ dpkg-queryให้ข้อมูลนี้อย่างสะดวก อย่างไรก็ตามฉันไม่คิดว่าdpkg -Sควรยกเลิกการเชื่อมโยง Symbian เงียบ ๆจนกว่าจะพบไฟล์แพ็คเกจ dpkg -S fooไม่ควรค้นหาคำสั่งfooพบแพ็คเกจที่ติดตั้งไฟล์ fooและมีประโยชน์มากที่สุดเมื่อเรียกใช้ด้วยพา ธ สัมบูรณ์ของไฟล์ มันจะดีถ้าdpkg -S /usr/bin/renameอธิบายว่าทำไมไม่มีแพ็คเกจให้ symlink นั้น แต่ฉันคิดว่ามันควรจะบอกความจริงว่าไม่มีแพ็คเกจไหน
Eliah Kagan

12

คุณอาจจะพบว่ามันเป็นลิงค์สัญลักษณ์ที่จัดการโดย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แพ็คเกจ - ดูว่ามีอะไรบ้างที่เปลี่ยนชื่อทั้งหมด


ทำไม rename.ul จึงไม่สามารถใช้เป็นทางเลือกการเปลี่ยนชื่อได้
Random832

@ Random832 สำหรับยูทิลิตี้บรรทัดคำสั่งทางเลือกควรจะแทนกันได้ทางไวยากรณ์สำหรับแต่ละอื่น ๆ (อย่างน้อยสำหรับหลักทั่วไปบางส่วนของการทำงาน); rename.ul และ prename ไม่ผ่านการรับรอง
zwol

7

หากเรากำลังพูดถึง/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

ทำไม "ถ้าเราพูดถึง / usr / bin / rename" คำถามประกอบด้วยเส้นทางที่แน่นอน
guettli

1
@guettli คำถามที่ถามเกี่ยวกับrenameคำสั่ง แต่renameไม่ได้ถูกอ้างอิงเพียง/usr/bin/renameเท่าที่คุณเห็นในคำตอบของฉัน ผู้ใช้ที่มี ksh หรือ mksh shell อาจไม่ทราบ เมื่อฉันเริ่มด้วยตัวmkshเองฉันรู้สึกงุนงงมากเมื่อrenameไม่ยอมรับการแสดงออกปกติจนกระทั่งฉันรู้ว่าสิ่งเหล่านั้นเป็นสองสิ่งที่แตกต่างกัน นอกจากนี้อย่าใช้คำพูดของฉัน "ถ้าเรากำลังพูดถึง x" อย่างแท้จริงลองคิดว่ามันเป็นวิธีการพูดว่า "ในกรณีของ"
Sergiy Kolodyazhnyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.