命令从哪里来rename
?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
答案1
令人惊奇的是,它是从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
答案2
您可能会发现它是一个由该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
FWIWfile-rename
由软件包提供rename
,而原始版本prename
由软件包本身提供perl
。来自apt-cache show rename
:
该软件包提供了用于重命名文件的 perl 接口(File::Rename)和命令行工具“rename”,旨在替换 perl 软件包当前提供的版本。
如果这还不够令人困惑的话,你还可能rename
在util-linux
包装中看到另一个——参见这些重命名有什么意义吗?
答案3
如果我们谈论的是/usr/bin/rename
,这是一个非常漂亮的 perl 脚本,那么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 shell 及其衍生产品来说,rename
是 shell 的内置命令。
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin