[Перевод] Ищем путь до линукс команд, как профессионалы
Один из самых распространённых вопросов от подписчиков — как получить путь к команде 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:
date, pwd, hello и ping — это команды Linux.
▍ Различные типы команд Linux
Команды Linux, которые вводят в терминал, бывают разных типов:
- Внутренняя или встроенная, команда оболочки.
- Внешняя команда / исполняемый файл.
- Функция оболочки.
- Псевдоним.
- Ключевое слово.
▍ Как определить тип команды 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
▍ Что такое переменная $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
▍ Как найти команду Linux
А ещё можно легко получить путь к команде Linux с помощью команды which
. Пример:
which gcc
which nano
Чтобы отобразить все возможные совпадающие пути, воспользуйтесь опцией -a
:
which -a ls
▍ Получаем путь к команде или man-странице Linux
Чтобы найти двоичный файл, исходный код и man-страницу какой-либо программы или команды на диске, используйте команду whereis в следующем синтаксисе:
whereis command
whereis gcc
whereis docker
whereis lxc
whereis vim
Надо, чтобы отображались только двоичные файлы? Есть вот такой вариант:
whereis -b ls
Ищете только руководства и справочные страницы? Проще простого:
whereis -m date
whereis -m gcc
▍ Команды 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
Для всех внешних команд используются команды man
или info
, которые выводят на экран подробное руководство:
man date
man ls
man gcc
man bash
info ls
info bash
man which
Для ключевых слов и встроенных команд 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
Если вы работаете с сервером 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 эти команды окажутся полезны.