web-dev-qa-db-ja.com

`rename`コマンドはどこから来たのですか?

renameコマンドはどこから来たのですか?

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

驚くべきことに、それは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
20
Pilot6

おそらく、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-renamerenameパッケージによって提供されますが、元のprenamePerl自体によって提供されます。 apt-cache show renameから:

このパッケージは、ファイルの名前を変更するためのPerlインターフェイス(File :: Rename)と、Perlパッケージによって現在提供されているバージョンを置き換えることを目的としたコマンドラインツール 'rename'の両方を提供します。

これがまだ十分に混乱していないかのように、util-linuxパッケージからさらに別のrenameに出くわす可能性があります- すべての名前変更とは何ですか?

12
steeldriver

/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シェルとその派生物の場合、renameはシェル組み込みコマンドです。

$ echo $Shell
/bin/mksh

$ type rename
rename is a Shell builtin
7