Как я отключаю 'открытую' команду, зная, что это - просто ссылка на 'openvt' двоичный файл?

Я хотел бы, чтобы пользователи смогли установить мой инструмент командной строки...

https://github.com/occam-proof-assistant/Open-CLI

... глобально и выполненный это от терминала путем ввода open. Диспетчер пакетов NodeJS, npm, предоставляет эту услугу, создавая необходимую символьную ссылку, когда Вы устанавливаете пакеты глобально. Таким образом в /usr/bin каталог, я вижу, что переходящая символьная ссылка была действительно создана:

open -> ../lib/node_modules/occam-open-cli/open.js

Однако это только работает, если я - корень, иначе я добираюсь:

Couldn't get a file descriptor referring to the console

Я знаю, каково это, вид. Если я ввожу openvt, Я получаю то же сообщение.

Таким образом, я должен смочь удалить псевдоним, или что бы то ни было, который позволяет openvt быть вызванным с open. Я думаю, что это - безопасная вещь сделать, так как можно всегда просто отступать к вводу openvt если Вы хотите.

Однако я затрудняюсь находить способ сделать это. Я предположил, что был некоторый псевдоним, но ввод unalias open не работал.

Таким образом, какова эта тайна open команда, псевдоним, символьная ссылка или безотносительно? И как я могу безопасно удалить его и советовать другим делать то же?

3
задан 22 March 2018 в 20:27

2 ответа

Причина это /bin/open имеет приоритет /usr/bin/open в Вашей системе, по-видимому, это /bin прибывает прежде /usr/bin в Вашем ПУТИ. Для исследования ПУТИ можно работать echo $PATH. Элементы разделяются с двоеточиями.

Вы получили команду, которую Вы хотели, когда Вы использовали (я принимаю), sudo работать open или запустить корневую оболочку, в которой Вы выполнили его, потому что sudo использует его собственный ПУТЬ, определенный в /etc/sudoers как secure_path, который в моей системе является

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Как видете, /usr/bin прибывает прежде /bin.

Я думаю, что Ваше открытие нечетно, потому что насколько я знаю, /usr/bin обычно прибывает прежде /bin. У Ваших пользователей не может быть той же проблемы как Вы.

Однако для сейфа у Вас могла быть своя программа быть установленными в /usr/local/bin, который должен всегда прибывать прежде /usr/bin и /bin в ПУТИ пользователя так, чтобы программное обеспечение, созданное локально, имело приоритет по другим командам с тем же именем.

Еще более безопасный, как steeldriver предложенный, имеют Ваших пользователей (или Ваш сценарий установки) определяют псевдоним для Вашего инструмента в конфигурационном файле оболочки такой как ~/.bashrc. Псевдонимы всегда имеют приоритет по другим командам. Вставляя псевдоним Ваш ~/.bashrc Вы удостоверяетесь, что это только будет известно интерактивным оболочкам и не вмешается в другие программы.

Удаление символьной ссылки могло вызвать проблемы, если программы пытаются выполниться /bin/open ожидание openvt, и может быть ненадежным, как указано steeldriver, потому что символьная ссылка могла бы быть воссоздана, когда пакет, который обеспечивает его, обновляется или переустанавливается (т.е. справедливо непредсказуемо).

9
ответ дан 1 December 2019 в 13:05

На самом деле была символьная ссылка open -> openvt в /bin каталог. Удаление этой ссылки решило проблему. Однако безусловно лучшее решение, как упомянуто в другом месте, состоит в том, чтобы создать псевдоним на Вашем .bashrc файл...

Перейдите к своему корневому каталогу:

cd ~

Отредактируйте Ваш .bashrc (здесь я использовал nano но там много опций):

nano .bashrc

Поместите следующее где-нибудь (возможно, в ноге):

alias open='/usr/lib/node_modules/occam-open-cli/open.js'

Можно перезагрузить файл путем ввода source .bashrc и Вы хороши для обхождений без помощи влияния на что-либо еще.

2
ответ дан 1 December 2019 в 13:05

Другие вопросы по тегам:

Похожие вопросы: