Linux: which, whereis, realpath, type, locate

  • Если не получается найти командами ниже – надо использовать find 🙂

type – считаю является самой первой командой, которой нужно на мой взгляд пользоваться для поиска исполняемого файла/понимания того, что исполняется. Type показывает какого типа является исполняемая команда – встроенная в shell функция (shell builtin), внешняя функция (shell function) или утилита. Для последних показывается путь до утилиты.

#type echo
echo is a shell builtin
#type ping
ping is /sbin/ping
#type uname
uname is /usr/bin/uname
#hello_world() { ;\
echo "Hello_World" ;\
}
#
#type hello_world
hello_world is a shell function

realpath – показывает абсолютный путь до указанного файла

root@server:~# realpath debug
/root/debug

whereis – поиск пути до исполняемого файла/source code/man в директориях по пути PATH. По умолчантю ищет бинарные файлы, исходные и man для команды, можно отдельно искать через соответствующие опции -b -s -m. Недостаток – команда не говорит о том, какой из файлов (при наличии нескольких) исполняется по факту при запуске.

which – which и whereis не полные эквиваленты. Which так же как и whereis, ищет исполняемые файлы в директориях PATH, но which по умолчанию упоказывает первый match для поиска, а не все hits (т.е. путь к файлк, которяй запускается по команде); так же он ищет exact match в отличии от whereis (whereis – vim.tiny = vim, which – vim.tiny != vim). При этом с which можно посмотреть и все math добавив флаг -a.

Вот пример для Ruby поставленного через rvm.

[tool@sv]$ which ruby
/usr/local/rvm/rubies/ruby-2.1.4/bin/ruby

[tool@sv]$ whereis ruby
ruby: /usr/bin/ruby /usr/lib/ruby /usr/lib64/ruby /usr/share/man/man1/ruby.1.gz

locate – делает быстрый поиск файла во всей системе, но использует для этого внутреннюю базу/кеш, в итоге результат можно получить быстро, но за счет предварительного создания этой базы (под капотом использует find, запускается sudo updatedb, обычно раз в сутки по cron). Для разовых задач считаю избыточная утилита, проще использовать find.

Leave a Reply