Each application/program over time, as it evolves (hopefully for the better!), is released in several versions. Ever wondered which version is being used or where/what all the versions installed are? Its quite easy with just using simple english in unix!
Lets start with a quick snippet on what an executable is with ‘whatis’. It searches for whole words within the whatis database that contains short descriptions of system commands.
$ whatis ruby
irb(1), erb(1), ri(1), rdoc(1), testrb(1) - Ruby helper programs
ruby(1) - Interpreted object-oriented scripting language
Now ‘whereis’ does the job of indicating where the specified executable is.
$ whereis ruby
/usr/bin/ruby
/usr/local/bin/ruby
However, note that ‘whereis’ only “checks the standard binary directories” like /bin, /sbin, /usr/bin. To locate all different variations of the file ‘ruby’, irrespective of where they are installed, we’d use ‘locate’ like so:
$ locate ruby
/Users/ushaguduri/.rvm/ruby-1.8.7-p371/ruby
/Users/ushaguduri/.rvm/ruby-1.8.7-p371@global/ruby
/Users/ushaguduri/.rvm/ruby-1.9.3-p392/ruby
/Users/ushaguduri/.rvm/ruby-1.9.3-p392@global/ruby
/Users/ushaguduri/.rvm/ruby-2.0.0-p0/ruby
/Users/ushaguduri/.rvm/ruby-2.0.0-p0@global/ruby
/usr/bin/ruby
/usr/lib/ruby
This lists all matches in the filename including the full path for the given pattern. The database is pre-computed with `locatedb’ and re-computed periodically. An alternative is to use the ‘find’ command for more real-time results using tree search.
And finally with all the different versions installed, which one is being used when you run ‘ruby’?
$ which ruby
/Users/ushaguduri/.rvm/rubies/ruby-1.9.3-p385/bin/ruby
Since I changed the ruby version with rvm to 1.9.3, its showing the 1.9.3 executable. If I switched it back to the default, it would now look like this:
$ which ruby
/usr/bin/ruby
‘which’ looks for the executable within the user’s path. Now how the user’s path is determined will be left for another post!