#linux #bash
#linux #bash
Вопрос:
Я получил виртуальную машину класса, которая использует ubuntu 18.04 в качестве базы. Терминал — bash, и я подтвердил с
echo $0
Есть команда под названием elastalert, которая автоматически завершается, если я просто набираю «elast», а затем нажимаю tab. Это довольно нормально для любых двоичных файлов, которые находятся в $ PATH.
Однако, когда я делаю
which elastalert
Он не возвращает никакой информации. Я искал файл из корневого каталога
$ sudo find -name elastalert 2>null
./backup/elastalert
./elastic_stack/elastalert
Однако оба пути выше являются каталогами. Я проверяю $ PATH, он не содержит указанного выше пути
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Вопрос: Какой механизм Linux позволяет мне автоматически заполнять elastalert, но elastalert не существует в $ PATH?
Обновить:
$type elastalert
elastalert is aliased to `docker run -it --rm --net=bridge --network=labs_esnet --name elastalert --hostname elastalert -v /labs:/labs --link elasticsearch hasecuritysolutions/elastalert:v0.1.31 /usr/local/bin/elastalert'
Есть несколько вопросов о том, зачем нужен sudo. Как вы можете видеть ниже, файлы находятся в каталогах, доступных только для root.
$ sudo find -type f -name elastalert 2>/dev/null
[sudo] password for student:
./var/lib/docker/overlay2/c8b9f4ad647fad4090665c6ee6d63af998265ba008756f6dd24563245043d091/diff/usr/local/bin/elastalert
$ sudo file ./var/lib/docker/overlay2/c8b9f4ad647fad4090665c6ee6d63af998265ba008756f6dd24563245043d091/diff/usr/local/bin/elastalert
./var/lib/docker/overlay2/c8b9f4ad647fad4090665c6ee6d63af998265ba008756f6dd24563245043d091/diff/usr/local/bin/elastalert: Python script, ASCII text executable
Комментарии:
1. Добавьте вывод
type elastalert
к вашему вопросу (без комментариев).2. попробуйте
sudo find -type f -name elastalert 2>null
или sudo find -name elastalert -ls 2>null` . Удачи.3. Кроме того, вы сказали,
which elastalert
он не возвращает никакой информации. . Нет информации? Илиwhich: no elasalert in (...
Не заставляйте нас гадать, лучше всегда включать в сообщения об ошибках текст extact :-). Удачи.4.
alias foo=bar
, и вы можете автоматически выполнить команду «foo», но она не будет отображать никакой информации при вводеwhich foo
.5. Вы даже можете установить автозаполнение для случайного слова, которое вообще ничем не является, даже псевдонимом:
complete -W 'bar baz' foo
;foo
теперь имеетbar
иbaz
в качестве завершения.
Ответ №1:
Я не могу дать вам конкретный ответ, но вы можете найти подсказки в разделах информационного текста bash 8.6, 8.7 и 8.8.
В разделе 8.8 показано, что сценарии, способствующие завершению, могут быть установлены отдельно от программ, которые объясняли бы, почему вы получаете завершение без указанной программы, находящейся на вашем ПУТИ.