(Debian/Ubuntu) Discover what package a file belongs to

dpkg -S /usr/bin/ls
'dpkg -S' just matches the string you supply it, so just using 'ls' as an argument matches any file from any package that has 'ls' anywhere in the filename. So usually it's a good idea to use an absolute path. You can see in the second example that 12 thousand files that are known to dpkg match the bare string 'ls'.
Sample Output
user@host:$ dpkg -S /bin/ls
coreutils: /bin/ls
user@host:$ dpkg -S ls | wc -l

By: bwoodacre
2009-04-18 18:18:23

2 Alternatives + Submit Alt

What Others Think

oh yes, so sweet and tasty!
linuxrawkstar · 653 weeks ago
If you need regex, apt-file -x search /some/file
stu · 653 weeks ago
apparently dlocate is much faster for this if you find yourself needing to do a lot of sleuthing.
bwoodacre · 652 weeks and 6 days ago
Thanks for this :)
stormerider · 652 weeks and 4 days ago
This will do the opposite, what files a package generated during installation. dpkg -L packagename
alperyilmaz · 652 weeks and 2 days ago
I wish I could vote this up again! what a time saver.
linuxrawkstar · 651 weeks and 5 days ago
The above are for apt based systems. For portage on gentoo, you need the app-portage/gentoolkit package installed and do equery belongs /some/file
paulkoan · 651 weeks and 3 days ago
I used grep to filter, and that additionally gives (A) all symbolic link (with the same name) installed by the package as well, (B) other files/directories with the same name installed by other packages. if that info is of any use to you. Example and output will make it more clear: Example: dpkg -S ip | grep "/ip$" Output: linux-headers-2.6.27-7-generic: /usr/src/linux-headers-2.6.27-7-generic/include/config/ip iproute: /bin/ip iproute: /sbin/ip First line of the output is a directory by name ls intalled by the package linux-headers-2.xxxx Second line is the executable by name ip The last line of the output is the symbolic link to the command ip You need to replace both instances of string ip with the command/file of your interest in my example command.
b_t · 573 weeks and 1 day ago
Typo: First line of the output is a directory by name ls intalled Read: First line of the output is a directory by name 'ip' installed
b_t · 573 weeks and 1 day ago
You might want: dpkg -S `which ls` You might know the command but not the full path, i.e. on Ubuntu 11.10: which ls /bin/ls So your command would't actually tell you what package ls comes from on this distro.
andrewsomething · 520 weeks and 6 days ago
in the redhat world this is similar to rpm -qf fllename. I just learned this for debian based systems today. It's useful.
sonic · 452 weeks and 6 days ago

What do you think?

Any thoughts on this command? Does it work on your machine? Can you do the same thing with only 14 characters?

You must be signed in to comment.

What's this?

commandlinefu.com is the place to record those command-line gems that you return to again and again. That way others can gain from your CLI wisdom and you from theirs too. All commands can be commented on, discussed and voted up or down.

Share Your Commands

Stay in the loop…

Follow the Tweets.

Every new command is wrapped in a tweet and posted to Twitter. Following the stream is a great way of staying abreast of the latest commands. For the more discerning, there are Twitter accounts for commands that get a minimum of 3 and 10 votes - that way only the great commands get tweeted.

» http://twitter.com/commandlinefu
» http://twitter.com/commandlinefu3
» http://twitter.com/commandlinefu10

Subscribe to the feeds.

Use your favourite RSS aggregator to stay in touch with the latest commands. There are feeds mirroring the 3 Twitter streams as well as for virtually every other subset (users, tags, functions,…):

Subscribe to the feed for: