Lệnh `rename` đến từ đâu?


17

Trong trường hợp nào renamelệnh đến từ đâu?

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

3
Các renametàu với Fedora là một khác nhau, mặc dù. Nó dường như là một chương trình được biên dịch và nó gần như không mạnh bằng các chương trình renameđi kèm với Ubuntu. Vì vậy, hãy cẩn thận khi bạn sử dụng các tập lệnh trên một bản phân phối Linux khác.
Martin Uting

@MartinUeding bạn có thể xin vui lòng để lại nhận xét ở đây: askubuntu.com/questions/873661/...
guettli

Câu trả lời:


20

Đáng ngạc nhiên, nó đến từ renamegói.

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
Tại sao dpkg -Skhông theo liên kết tượng trưng? Lỗi hay tính năng?
guettli

5
Tính năng @guettli : "Lệnh này sẽ không liệt kê các tệp bổ sung được tạo bởi các tập lệnh duy trì, cũng như không liệt kê các lựa chọn thay thế."
muru

2
Symlink không thuộc về gói chính nó.
Pilot6

2
@guettli vì đó không phải dpkglà công việc. dpkgchỉ giao dịch với các gói cài đặt. Sử dụng update-alternatives --query rename , nó sẽ cho bạn thấy đường dẫn liên kết đã được giải quyết
Sergiy Kolodyazhnyy

5
@guettli Xem lỗi Debian # 198220 . Nó sẽ hữu ích nếu dpkg/ dpkg-querycung cấp thông tin này một cách thuận tiện. Tuy nhiên, tôi không nghĩ dpkg -Snên âm thầm liên kết biểu tượng cho đến khi tìm thấy tệp gói. dpkg -S fookhông cần tìm lệnh foo, nó tìm gói đã cài đặt tệp foo và hữu ích nhất khi được gọi với đường dẫn tuyệt đối của tệp. Sẽ tốt hơn nếu được dpkg -S /usr/bin/renamegiải thích tại sao không có gói nào cung cấp liên kết tượng trưng đó, nhưng tôi nghĩ nó vẫn nên nói sự thật rằng không có gói nào làm được.
Eliah Kagan

12

Bạn có thể sẽ thấy rằng đó là một liên kết tượng trưng được quản lý bởi update-alternativescơ chế:

$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29  2016 /usr/bin/rename -> /etc/alternatives/rename

Bạn có thể thấy các triển khai tùy chọn bằng cách sử dụng

$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename

và có thể chọn giữa các triển khai bằng cách sử dụng

update-alternatives --config rename

FWIW file-renameđược cung cấp bởi renamegói, trong khi bản gốc prenameđược cung cấp bởi perlchính nó. Từ apt-cache show rename:

Gói này cung cấp cả giao diện perl để đổi tên tệp (File :: Rename) và công cụ dòng lệnh 'đổi tên' nhằm thay thế phiên bản hiện được cung cấp bởi gói perl.

Như thể điều này chưa đủ khó hiểu, bạn cũng có thể bắt gặp một gói khác renametừ util-linuxgói - xem What với tất cả các tên được đổi?


Tại sao không đổi tên.ul có sẵn như là một thay thế đổi tên?
Random832

@ Random832 Đối với các tiện ích dòng lệnh, các lựa chọn thay thế được cho là thay thế tương thích cú pháp cho nhau (ít nhất là đối với một số chức năng cốt lõi chung); rename.ul và prename không đủ điều kiện.
zwol

7

Nếu chúng ta đang nói về /usr/bin/rename, đó là một kịch bản perl khá tiện lợi, thì renamelệnh thuộc về gói riêng của nó.

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

Trong trường hợp shell Korn và các dẫn xuất của nó, renamelà một lệnh tích hợp shell.

$ echo $SHELL
/bin/mksh

$ type rename
rename is a shell builtin

Tại sao "Nếu chúng ta đang nói về / usr / bin / đổi tên"? Câu hỏi chứa đường dẫn tuyệt đối.
guettli

1
@guettli Câu hỏi hỏi về renamelệnh, nhưng renamekhông chỉ được nhắc đến /usr/bin/rename, như bạn thấy trong câu trả lời của tôi. Người dùng có vỏ ksh hoặc mksh có thể không biết điều đó. Khi cá nhân tôi bắt đầu mksh, tôi đã rất bối rối khi renamekhông chấp nhận biểu hiện thông thường, cho đến khi tôi nhận ra đó là hai điều khác nhau. Ngoài ra, đừng hiểu lời tôi "Nếu chúng ta đang nói về x" theo nghĩa đen, hãy coi đó là cách nói "Trong trường hợp"
Sergiy Kolodyazhnyy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.