Как определить откуда запускается команда в bash (type, which, whereis)

При запуске любой команды в Bash может запуститься внутренняя команда Bash или внешняя программа. Для того чтобы определить, что запустится используется команда type.

user@debian-server:~$ type ls
ls is aliased to `ls --color=auto'
user@debian-server:~$ type cd
cd is a shell builtin
1
2
3
4

Параметр -t заставляет команду выводить описание в виде одного слова.

user@debian-server:~$ type -t ls
alias
user@debian-server:~$ type -t cd
builtin
1
2
3
4

А параметр -a показывает все возможные варианты

user@debian-server:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
1
2
3
4

Команда which выполняет похожую функцию — выводит путь к фалу который будет запущен при запуске команды. which — внешняя программа, поэтому она не работает со внутренними командами баш и не показывает синонимы, в отличии от команду type.

user@debian-server:~$ which ls
/usr/bin/ls
user@debian-server:~$ which -a ls
/usr/bin/ls
/bin/ls
1
2
3
4
5

Ещё одна команда whereis, кроме пути к файлу, показывает файлы man и файлы с исходным кодом, при их наличии.

user@debian-server:~$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
user@debian-server:~$ whereis tar
tar: /usr/bin/tar /usr/share/man/man1/tar.1.gz
1
2
3
4

С помощью параметров можно выводить только файлы разного типа: -b — исполняемые файлы, -m — файлы man и s — файлы исходного кода.

user@debian-server:~$ whereis -b tar
tar: /usr/bin/tar
user@debian-server:~$ whereis -m tar
tar: /usr/share/man/man1/tar.1.gz
user@debian-server:~$ whereis -s tar
tar:
1
2
3
4
5
6

Параметр -l заставляет команду whereis вывести все пути в которых она производит поиск.

user@debian-server:~$ whereis -l
bin: /usr/bin
bin: /usr/sbin
bin: /usr/lib/x86_64-linux-gnu
bin: /usr/lib
bin: /usr/lib32
bin: /usr/lib64
bin: /etc
bin: /usr/games
bin: /usr/local/bin
bin: /usr/local/sbin
bin: /usr/local/etc
bin: /usr/local/lib
bin: /usr/local/games
bin: /usr/include
bin: /usr/local
bin: /usr/libexec
bin: /usr/share
man: /usr/share/man/ko
man: /usr/share/man/sr
man: /usr/share/man/fr
man: /usr/share/man/man7
man: /usr/share/man/uk
man: /usr/share/man/pl
man: /usr/share/man/es
man: /usr/share/man/pt
man: /usr/share/man/id
man: /usr/share/man/man6
man: /usr/share/man/nl
man: /usr/share/man/man4
man: /usr/share/man/pt_BR
man: /usr/share/man/man5
man: /usr/share/man/zh_TW
man: /usr/share/man/sv
man: /usr/share/man/man2
man: /usr/share/man/zh_CN
man: /usr/share/man/fr.UTF-8
man: /usr/share/man/cs
man: /usr/share/man/ro
man: /usr/share/man/da
man: /usr/share/man/it
man: /usr/share/man/tr
man: /usr/share/man/man3
man: /usr/share/man/fr.ISO8859-1
man: /usr/share/man/ru
man: /usr/share/man/ja
man: /usr/share/man/fi
man: /usr/share/man/de
man: /usr/share/man/man1
man: /usr/share/man/sl
man: /usr/share/man/man8
man: /usr/share/man/hu
man: /usr/share/info
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Последниее изменение: 26.12.2023, 09:29:04