D'où vient la renamecommande?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
D'où vient la renamecommande?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Réponses:
Étonnamment, cela vient de l' renameemballage.
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 -Ssuit-il pas le lien symbolique? Bug ou fonctionnalité?
dpkgle travail. dpkgne traite que des packages installés. Utilisez update-alternatives --query rename , il vous montrera le chemin de lien résolu
dpkg/ dpkg-queryoffrait cette information commodément. Cependant, je ne pense pas que cela dpkg -Sdevrait silencieusement déréférencer les liens symboliques jusqu'à ce qu'il trouve un fichier de package. dpkg -S foon'est pas censé trouver la commande foo, il trouve le package qui a installé le fichier foo et est plus utile lorsqu'il est appelé avec le chemin absolu d'un fichier. Ce serait bien si on dpkg -S /usr/bin/renameexpliquait pourquoi aucun paquet ne fournit ce lien symbolique, mais je pense qu'il devrait quand même dire la vérité qu'aucun paquet ne le fait.
Vous constaterez probablement qu'il s'agit d'un lien symbolique géré par le update-alternativesmécanisme:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Vous pouvez voir les implémentations facultatives en utilisant
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
et peut choisir entre les implémentations en utilisant
update-alternatives --config rename
FWIW file-renameest fourni par le renamepackage, tandis que l'original prenameest fourni par perllui-même. De apt-cache show rename:
Ce package fournit à la fois une interface perl pour renommer des fichiers (File :: Rename) et un outil de ligne de commande 'rename' qui est destiné à remplacer la version actuellement fournie par le package perl.
Comme si cela n'était pas déjà assez déroutant, vous pouvez également en rencontrer un autre renamedans le util-linuxpackage - voir Qu'est-ce que tous les renommages?
Si nous parlons /usr/bin/rename, qui est un script perl assez astucieux, alors la renamecommande appartient à son propre package séparé.
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
Dans le cas du shell Korn et de ses dérivés, renameest une commande intégrée au shell.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renamecommande, mais renamen'est pas seulement mentionnée /usr/bin/rename, comme vous le voyez dans ma réponse. Les utilisateurs qui ont des shells ksh ou mksh ne le savent peut-être pas. Quand j'ai commencé personnellement mksh, j'étais très déconcerté quand je renamen'acceptais pas l'expression régulière, jusqu'à ce que je réalise que c'était deux choses différentes. Aussi, ne prenez pas mes mots "si nous parlons de x" littéralement, considérez-le comme une façon de dire "en cas de"
renamelivré avec Fedora est un autre, cependant. Il semble être un programme compilé et il n'est pas aussi puissant querenamecelui fourni avec Ubuntu. Soyez donc prudent lorsque vous utilisez des scripts sur une autre distribution Linux.