Skąd renamepochodzi polecenie?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Skąd renamepochodzi polecenie?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Odpowiedzi:
Zaskakujące jest to, że pochodzi z renameopakowania.
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 -Snie podąża za dowiązaniem symbolicznym? Błąd czy funkcja?
dpkgjest praca. dpkgdotyczy tylko zainstalowanych pakietów. Użyj update-alternatives --query rename , pokaże Ci rozstrzygniętą ścieżkę łącza
dpkg/ dpkg-querypodał te informacje wygodnie. Jednak nie sądzę, że dpkg -Spowinienem po cichu wyłuskać dowiązania symboliczne, dopóki nie znajdzie pliku pakietu. dpkg -S foonie powinien znaleźć polecenia foo, znajduje pakiet, który zainstalował plik foo , i jest najbardziej przydatny, gdy jest wywoływany z bezwzględną ścieżką pliku. Byłoby miło, gdyby dpkg -S /usr/bin/renamewyjaśniono, dlaczego żaden pakiet nie udostępnia tego dowiązania symbolicznego, ale myślę, że powinien on nadal mówić prawdę, że żaden pakiet nie zawiera.
Prawdopodobnie przekonasz się, że jest to łącze symboliczne zarządzane przez update-alternativesmechanizm:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Możesz zobaczyć opcjonalne implementacje za pomocą
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
i może wybierać między implementacjami za pomocą
update-alternatives --config rename
Pakiet FWIW file-renamejest dostarczany przez renamepakiet, podczas gdy oryginał prenamejest dostarczany perlsam. Od apt-cache show rename:
Ten pakiet zawiera zarówno interfejs Perla do zmiany nazw plików (File :: Rename), jak i narzędzie wiersza polecenia „rename”, które ma zastąpić wersję aktualnie dostarczaną przez pakiet perla.
Jakby to jeszcze nie było dość mylące, możesz także natknąć się na jeszcze jedną renamez util-linuxpaczki - zobacz Co to za wszystkie nazwy?
Jeśli mówimy o /usr/bin/renameskrypcie perl, który jest całkiem niezły, to renamepolecenie należy do własnego osobnego pakietu.
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
W przypadku powłoki Korna i jego pochodnych renamejest to wbudowane polecenie powłoki.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renamepolecenia, ale renamenie tylko się do niego odwołuje /usr/bin/rename, jak widzicie w mojej odpowiedzi. Użytkownicy, którzy mają powłoki ksh lub mksh, mogą nie być tego świadomi. Kiedy osobiście zacząłem mksh, byłem bardzo zaskoczony, kiedy renamenie akceptowałem wyrażenia regularnego, dopóki nie zdałem sobie sprawy, że były to dwie różne rzeczy. Nie używaj też moich słów „Jeśli mówimy o x” dosłownie, rozważ to jako sposób na powiedzenie „W przypadku”
renameco jest dostarczane z Fedorą, jest jednak inne. Wygląda na skompilowany program i nie jest tak potężny, jak ten,renamektóry jest dostarczany z Ubuntu. Uważaj więc, jeśli używasz skryptów w innej dystrybucji Linuksa.