Звідки береться renameкоманда?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Звідки береться renameкоманда?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Відповіді:
Дивно, але вона виходить з 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
dpkg -Sне слідкує за посиланням? Помилка чи функція?
dpkgробота. dpkgстосується лише встановлених пакетів. Використовуйте update-alternatives --query rename , він покаже вам розв’язаний шлях зв'язку
dpkg/ dpkg-queryпропонували цю інформацію зручно. Однак я не думаю, що dpkg -Sслід мовчки перенаправляти символи, поки не знайде файл пакету. dpkg -S fooне повинен знайти команду foo, він знаходить пакет, який встановив файл foo , і є найбільш корисним, коли викликається абсолютний шлях до файлу. Було б добре, якби dpkg -S /usr/bin/renameпояснили, чому жоден пакет не надає символьне посилання, але я думаю, що він все одно повинен говорити правду, що жоден пакет не робить.
Напевно ви побачите, що це символічне посилання, яким керує 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-renameнадається renameпакетом, тоді як оригінал prenameнадається perlсам. Від apt-cache show rename:
Цей пакет пропонує як інтерфейс perl для перейменування файлів (Файл :: Перейменувати), так і інструмент командного рядка «Перейменувати», який призначений замінити версію, що надається пакетом perl.
Як би це вже не було досить заплутаним, ви можете також натрапити на ще один renameіз util-linuxпакета - дивіться Що з усіма перейменами?
Якщо ми говоримо про те /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
У випадку оболонки Корна та його похідних rename- це вбудована команда оболонки.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renameкоманду, але renameне згадується лише так /usr/bin/rename, як ви бачите в моїй відповіді. Користувачі, які мають оболонки ksh або mksh, можуть не знати про це. Коли я особисто починав mksh, я був дуже збентежений, коли renameне приймав регулярного виразу, поки не зрозумів, що це дві різні речі. Крім того, не сприймайте мої слова "Якщо ми говоримо про х" буквально, розгляньте це як спосіб сказати "У випадку"
renameщо постачається з Fedora, це зовсім інше. Здається, це складена програма, і вона не настільки потужна, як та,renameяка постачається з Ubuntu. Тому будьте обережні, коли ви використовуєте сценарії в іншому дистрибутиві Linux.