[Перевод] Ищем путь до линукс команд, как профессионалы

image-loader.svg


Один из самых распространённых вопросов от подписчиков — как получить путь к команде Linux, которую только что установили в систему с помощью пакетного менеджера, например, команды apt или DNF. Много новых разработчиков переходит к нам из мира Windows, и для многих это первый опыт использования Linux. Некоторые используют WSL (подсистему Linux в Windows 10), а остальные работают с облачными серверами напрямую по SSH. Рассмотрим ряд распространённых команд, с помощью которых можно отобразить список команд Linux или получить к ним путь.

▍ Что такое команда Linux?


Пользовательский интерфейс Windows по умолчанию графический. Однако у ОС Linux на стороне сервера по умолчанию текстовый интерфейс. Поэтому часто используются такие термины как Bash, оболочка пользователя, консоль, приглашение командной строки, терминал и так далее. Все они относятся к текстовому интерфейсу.

К примеру, в MS Windows-приложения запускаются через кнопку «Пуск». У терминала Linux назначение схожее, но туда вводятся инструкции, известные как команды Linux. Итак, вызываем терминал Linux сочетанием клавиш Ctrl–Alt–T. Затем вводим простую команду — например date, чтобы просмотреть текущую дату и время. Текст команды вводится только строчными буквами. Для запуска команды надо нажать кнопку Enter:

image-loader.svg
date, pwd, hello и ping — это команды Linux.

▍ Различные типы команд Linux


Команды Linux, которые вводят в терминал, бывают разных типов:

  1. Внутренняя или встроенная, команда оболочки.
  2. Внешняя команда / исполняемый файл.
  3. Функция оболочки.
  4. Псевдоним.
  5. Ключевое слово.

▍ Как определить тип команды Linux


Чтобы просмотреть путь к любой команде Linux, достаточно ввести в терминал команду type. С её же помощью можно узнать тип целевой команды: встроенная команда оболочки, псевдоним, функция или внешняя. Синтаксис следующий:

type command
type -t command
type -a command


Например, давайте выясним тип команды pwd:

type pwd
type date
type hello
type ping
 
# Display a single word which is one of 'alias', 'keyword', 'function', 'builtin', 
# 'file or '' , if command is an alias, shell reserved word, shell function, shell builtin, 
# disk file, or not found, respectively
type -t ping
type -t if
type -t vi
type -t nano
 
# The '-a' option shows all locations containing an executable named ping
type -a ping


image-loader.svg

▍ Что такое переменная $PATH?


В Linux и Unix-подобных системах переменная PATH содержит перечень папок, в которых хранятся исполняемые программы, например ping, date, vi, docker и так далее. Чтобы просмотреть текущую переменную path, воспользуйтесь командой echo /printf:

echo "$PATH"
 
# OR
#
# More human readable format 
#
echo "${PATH//:/$'\n'}"


Вот что отображается у меня:

/home/vivek/google-cloud-sdk/bin
/home/vivek/.local/bin
/home/vivek/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin


Для просмотра всех исполняемых файлов в папке /bin/, выполните команду ls следующим образом:

ls /bin/
ls -l /bin/

▍ Как отобразить информацию о командах


Чтобы получить путь к команде Linux, введите command следующим образом:

command -v date
command -v pwd
command -v ping
command -v docker


kf9lnnklkwbx1wyhqrtlohheulc.jpeg

▍ Как найти команду Linux


А ещё можно легко получить путь к команде Linux с помощью команды which. Пример:

which gcc
which nano


Чтобы отобразить все возможные совпадающие пути, воспользуйтесь опцией -a:

which -a ls


kbb9dqjy-1edo5qnlplvnvwxbnk.jpeg

▍ Получаем путь к команде или man-странице Linux


Чтобы найти двоичный файл, исходный код и man-страницу какой-либо программы или команды на диске, используйте команду whereis в следующем синтаксисе:

whereis command
whereis gcc
whereis docker
whereis lxc
whereis vim


Надо, чтобы отображались только двоичные файлы? Есть вот такой вариант:

whereis -b ls


Ищете только руководства и справочные страницы? Проще простого:

whereis -m date
whereis -m gcc


hq_nvrt2tukcuwgqzsezxu26hfm.jpeg

▍ Команды find и locate


Файлы можно также искать по имени файла. К примеру, так будет выглядеть поиск файла, в имени которого содержится слово «date»:

locate -b '\date'
## OR ##
find / -name "date" -ls
# sudo for all files 
sudo find / -name "date" -ls


Результаты выполнения команды locate:

/snap/core/11316/bin/date
/snap/core/11420/bin/date
/snap/core18/2066/bin/date
/snap/core18/2074/bin/date
/snap/core20/1026/usr/bin/date
/snap/core20/1081/usr/bin/date
/usr/bin/date
/usr/lib/byobu/date

▍ Вывод справки о командах Linux


С этим нам помогут команды whatis, help, man или info.

Команда whatis:
К каждой команде Linux прилагается man-страница (руководство, описывающее способ применения и синтаксис команды). Кроме того, справка содержит краткое описание команды. Для поиска по названиям man-страниц используется команда whatis. Она отображает описания команд для любых названий, введенных в краткой форме:

whatis ls
whatis clear
whatis date
whatis gcc


image-loader.svg

Для всех внешних команд используются команды man или info, которые выводят на экран подробное руководство:

man date
man ls
man gcc
man bash
info ls
info bash
man which


image-loader.svg

Для ключевых слов и встроенных команд Bash используется команда help:

help if
help exit
help logout
help type
help command


▍ В качестве заключения


Основная проблема, с которой сталкиваются новоиспечённые пользователи Linux — поиск команд. Но благодаря этому доступному руководству вы теперь умеете получать путь к нужным командам и даже выводить справку о них в формате man-страниц. Предположим, вы установили Docker на сервер Ubuntu. Получить путь к этой системе и изучить руководство можно с помощью следующих команд:

whatis docker
whereis docker
type -a docker
which docker
find / -iname "docker"
locate -b '\docker'
man docker


image-loader.svg

Если вы работаете с сервером Debian или Ubuntu Linux, вам пригодятся следующие две команды. Отобразить список всех файлов, установленных на сервер пакетом Docker, можно командой dpkg:

dpkg -L docker-ce
dpkg -L docker-ce | more


Результат:

/.
/etc
/etc/default
/etc/default/docker
/etc/init
/etc/init/docker.conf
/etc/init.d
/etc/init.d/docker
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/docker.service
/lib/systemd/system/docker.socket
/usr
/usr/bin
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/dockerd
/usr/share
/usr/share/doc
/usr/share/doc/docker-ce
/usr/share/doc/docker-ce/README.md
/usr/share/doc/docker-ce/changelog.Debian.gz


Вывести на экран информацию о пакете Docker можно с помощью команды apt:

apt show docker-ce


Результат:

Package: docker-ce
Version: 5:19.03.13~3-0~ubuntu-bionic
Priority: optional
Section: admin
Maintainer: Docker 
Installed-Size: 107 MB
Depends: docker-ce-cli, containerd.io (>= 1.2.2-3), iptables, libseccomp2 (>= 2.3.0), libc6 (>= 2.8), libdevmapper1.02.1 (>= 2:1.02.97), libsystemd0
Recommends: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, pigz, xz-utils, libltdl7, apparmor
Conflicts: docker (<< 1.5~), docker-engine, docker-engine-cs, docker.io, lxc-docker, lxc-docker-virtual-package
Replaces: docker-engine
Homepage: https://www.docker.com
Download-Size: 22.5 MB
APT-Manual-Installed: yes
APT-Sources: https://download.docker.com/linux/ubuntu bionic/edge amd64 Packages
Description: Docker: the open-source application container engine
 Docker is a product for you to build, ship and run any application as a
 lightweight container
 .
 Docker containers are both hardware-agnostic and platform-agnostic. This means
 they can run anywhere, from your laptop to the largest cloud compute instance and
 everything in between - and they don't require you to use a particular
 language, framework or packaging system. That makes them great building blocks
 for deploying and scaling web apps, databases, and backend services without
 depending on a particular stack or provider.
 
N: There are 29 additional records. Please use the '-a' switch to see them.


Надеюсь, новым пользователям и разработчикам Linux эти команды окажутся полезны.

image-loader.svg

© Habrahabr.ru