Dari mana datangnya renameperintah?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Dari mana datangnya renameperintah?
user@host> dpkg -S /usr/bin/rename
dpkg-query: no path found matching pattern /usr/bin/rename
prename
Jawaban:
Anehnya, itu berasal dari renamepaket.
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 -Stidak mengikuti symlink? Bug atau fitur?
dpkgpekerjaan. dpkghanya berurusan dengan paket yang diinstal. Gunakan update-alternatives --query rename , itu akan menunjukkan Anda jalur tautan yang diselesaikan
dpkg/ dpkg-queryditawarkan info ini nyaman. Namun, saya tidak berpikir dpkg -Sharus diam - diam dereference symlink sampai menemukan file paket. dpkg -S footidak seharusnya menemukan perintah foo, ia menemukan paket yang menginstal file foo , dan paling berguna ketika dipanggil dengan path absolut file. Akan lebih baik jika dpkg -S /usr/bin/renamedijelaskan mengapa tidak ada paket yang menyediakan symlink itu, tapi saya pikir itu harus tetap mengatakan yang sebenarnya tidak ada paket.
Anda mungkin akan menemukan bahwa itu adalah tautan simbolik yang dikelola oleh update-alternativesmekanisme:
$ ls -l $(which rename)
lrwxrwxrwx 1 root root 24 Jun 29 2016 /usr/bin/rename -> /etc/alternatives/rename
Anda dapat melihat implementasi opsional menggunakan
$ update-alternatives --list rename
/usr/bin/file-rename
/usr/bin/prename
dan dapat memilih antara implementasi menggunakan
update-alternatives --config rename
FWIW file-renamedisediakan oleh renamepaket, sedangkan aslinya prenamedisediakan dengan perlsendirinya. Dari apt-cache show rename:
Paket ini menyediakan antarmuka perl untuk mengganti nama file (File :: Ubah nama) dan alat baris perintah 'rename' yang dimaksudkan untuk mengganti versi yang saat ini disediakan oleh paket perl.
Seolah-olah ini belum cukup membingungkan, Anda mungkin juga menemukan yang lain renamedari util-linuxpaket - lihat Ada apa dengan semua nama itu?
Jika kita berbicara tentang /usr/bin/rename, yang merupakan skrip perl yang cukup bagus, maka renameperintah milik paket terpisah.
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
Dalam kasus shell Korn dan turunannya, renameadalah perintah built-in shell.
$ echo $SHELL
/bin/mksh
$ type rename
rename is a shell builtin
renameperintah, namun renametidak hanya disebut /usr/bin/rename, seperti yang Anda lihat dalam jawaban saya. Pengguna yang memiliki shell ksh atau mksh mungkin tidak menyadarinya. Ketika saya secara pribadi mulai dengan mksh, saya sangat bingung ketika renametidak menerima ekspresi reguler, sampai saya menyadari itu adalah dua hal yang berbeda. Juga, jangan menerima kata-kata saya "Jika kita berbicara tentang x" secara harfiah, anggap itu sebagai cara untuk mengatakan "Dalam hal"
renamedikirimkan dengan Fedora berbeda. Tampaknya ini adalah program yang dikompilasi dan tidak sekuatrenameyang disertakan dengan Ubuntu. Jadi berhati-hatilah saat Anda menggunakan skrip pada distribusi Linux yang berbeda.