Da dove viene il renamecomando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Da dove viene il renamecomando?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Risposte:
Sorprendentemente, viene dal renamepacchetto.
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 -Snon segue il collegamento simbolico? Bug o funzionalità?
dpkgè il lavoro. dpkgsi occupa solo di pacchetti installati. Usa update-alternatives --query rename , ti mostrerà il percorso del collegamento risolto
dpkg/ dpkg-queryoffrissi queste informazioni comodamente. Tuttavia, non penso che dpkg -Sdovrebbe silenziosamente fare la dereference symlink fino a quando non trova un file di pacchetto. dpkg -S foonon dovrebbe trovare il comando foo, trova il pacchetto che ha installato il file foo ed è molto utile quando viene invocato con il percorso assoluto di un file. Sarebbe bello se dpkg -S /usr/bin/renamespiegato perché nessun pacchetto fornisce quel link simbolico, ma penso che dovrebbe ancora dire la verità che nessun pacchetto lo fa.
Probabilmente scoprirai che si tratta di un collegamento simbolico gestito dal update-alternativesmeccanismo:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Puoi vedere le implementazioni opzionali usando
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
e può scegliere tra implementazioni usando
update-alternatives --config rename
FWIW file-renameè fornito dal renamepacchetto, mentre l'originale prenameè fornito da perlsolo. Da apt-cache show rename:
Questo pacchetto fornisce sia un'interfaccia perl per rinominare i file (File :: Rinomina) sia uno strumento da riga di comando 'rinomina' che ha lo scopo di sostituire la versione attualmente fornita dal pacchetto perl.
Come se ciò non fosse già abbastanza confuso, potresti anche imbatterti in un altro renamedal util-linuxpacchetto - vedi Cosa c'è con tutti i rinominati?
Se stiamo parlando /usr/bin/rename, che è uno script perl piuttosto elegante, allora il renamecomando appartiene al suo pacchetto separato.
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
Nel caso della shell Korn e dei suoi derivati, renameè un comando incorporato della shell.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renamecomando, ma renamenon si fa solo riferimento /usr/bin/rename, come vedi nella mia risposta. Gli utenti che hanno shell ksh o mksh potrebbero non esserne consapevoli. Quando ho iniziato personalmente con mkshme, ero molto sconcertato quando renamenon accettavo l'espressione regolare, fino a quando ho capito che erano due cose diverse. Inoltre, non prendere le mie parole "Se stiamo parlando di x" letteralmente, consideralo come un modo di dire "In caso di"
renamequello fornito con Fedora è diverso. Sembra essere un programma compilato e non è così potente comerenamequello fornito con Ubuntu. Quindi fai attenzione quando usi gli script su una diversa distribuzione Linux.