Woher kommt der renameBefehl?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Woher kommt der renameBefehl?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Antworten:
Überraschenderweise kommt es aus der renameVerpackung.
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 -Sfolgt der Symlink nicht? Fehler oder Feature?
dpkgder Job ist. dpkgbefasst sich nur mit installierten Paketen. Verwenden Sie update-alternatives --query rename , es wird Ihnen den aufgelösten Link-Pfad zeigen
dpkg/ dpkg-querydiese Info bequem angeboten würde. Ich denke jedoch nicht, dass Symlinks stillschweigend dereferenziert werden dpkg -Ssollten, bis eine Paketdatei gefunden wird. soll den Befehl nicht finden , findet das Paket, das die Datei installiert hat , und ist am nützlichsten, wenn es mit dem absoluten Pfad einer Datei aufgerufen wird. Es wäre schön, wenn erklärt würde , warum kein Paket diesen Symlink enthält, aber ich denke, es sollte trotzdem die Wahrheit sagen, dass kein Paket dies tut. dpkg -S foofoo foodpkg -S /usr/bin/rename
Sie werden wahrscheinlich feststellen, dass es sich um einen symbolischen Link handelt, der vom update-alternativesMechanismus verwaltet wird :
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Sie können die optionalen Implementierungen mit sehen
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
und kann zwischen Implementierungen mit wählen
update-alternatives --config rename
FWIW file-renamewird vom renamePaket bereitgestellt, während das Original prenamevon perlsich aus bereitgestellt wird . Von apt-cache show rename:
Dieses Paket enthält sowohl eine Perl-Schnittstelle zum Umbenennen von Dateien (File :: Rename) als auch ein Befehlszeilentool 'rename', das die derzeit vom Perl-Paket bereitgestellte Version ersetzen soll.
Als ob dies nicht schon verwirrend genug wäre, könnten Sie auch noch einen anderen renameaus dem util-linuxPaket finden - siehe Was ist mit all den Umbenennungen?
Wenn es sich um /usr/bin/renameein hübsches Perl-Skript handelt, renamegehört der Befehl zu einem separaten Paket.
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
Bei der Korn-Shell und ihren Derivaten renamehandelt es sich um einen in die Shell integrierten Befehl.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renameKommando, renamewird aber nicht nur angesprochen /usr/bin/rename, wie Sie in meiner Antwort sehen. Benutzer mit ksh- oder mksh-Shells sind sich dessen möglicherweise nicht bewusst. Als ich persönlich anfing mksh, war ich sehr verblüfft, als ich renameden regulären Ausdruck nicht akzeptierte, bis mir klar wurde, dass dies zwei verschiedene Dinge waren. Nehmen Sie meine Worte "Wenn wir über x sprechen" auch nicht wörtlich, betrachten Sie es als eine Art zu sagen "Im Falle von"
rename, was mit Fedora geliefert wird, ist jedoch ein anderes. Es scheint ein kompiliertes Programm zu sein und es istrenamebei weitem nicht so leistungsfähig wie das , das mit Ubuntu geliefert wird. Seien Sie also vorsichtig, wenn Sie Skripte auf einer anderen Linux-Distribution verwenden.