Как мы все знаем в командной строке (Bash) имеется ряд команд: ls, nano, node, webpack и т.д., в зависимости того или иного пакета. Суть в том, что эти заклинания должны где-то храниться, вопрос где?
В моем случае столкнулся с проблемой связанной с окружением root-a и user-a. В первом случае некоторые команды (нужные user-у) находятся и выполняются под root-ом, в остальном для простого юзера, те же команды простых пакетов(таких как webpack), не находятся.
Это не заклинания, а просто исполняемые файлы.
Баш выполняет поиск внешних команд по директориям, которые перечислены в переменной PATH ((разделитель двоеточие)
1. В отличие от Windows, баш не будет искать файл в текущей директории - исключительно по директорям, перечисленным в PATH
2. Порядок имеет значение - выполнится первый найденный файл.
3. внутренние команды bash и alias-ы имеют приоритет.
Просто добавьте каталог с нужным вам файлом в PATH например так:
PATH=$PATH:/new/directory
видимо у юзера root в профайле PATH отличается от вашего юзера.
что такое $HOME/bashrc и $HOME/profile
может быть $HOME/.bashrc и $HOME/.profile ?
Попробуйте в конфиге просто просписать
echo "Hello this profile is loaded" и добиться того, что при логине вы увидите эту надпись - для этого просто нужно внести в правильный конфигурационный файл.
/etc/profile нормально. но ect/profile - неправильно. Будьте внимательнее к мелочам, одной неправильной буквы достаточно, чтобы все не работало.
ну и собственно какие пакеты должны появиться?
У вас есть точный путь к исполняемому файлу?
Вы его можете запустить по /directory/bin/myfile?
тогда и добавляйте в PATH просто в командной строке /directory/bin и пробуйте запустить myfile
если сработает - тогда эту директ
то есть проверяйте пошагово:
root@caesar:/home/aleksmanson# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-------------------------------------------------------------------------- aleksmanson@caesar:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
--------------------------------------------------------------------------
не хочу вас путать, но сейчас у пользователя (aleksmanson) пути схожи с root и даже больше. Все началось с того, что я присвоил пользователю все права, что у root: /etc/passwd
aleksmanson:0:0::/home/aleksmanson:/bin/bash
сейчас я вернул все обратно заменив вышеуказанную строку как и было на: aleksmanson:1000:1000::/home/aleksmanson:/bin/bash
Исполняемые файлы перестали отзываться.
это не права, это вообще непонятно что.
второй параметр ничего не означает, а третий - это уникальный идентификатор. Он не может принадлежать двум пользователям сразу.
Вместо подобного изучите как работает sudo
Суть в том, что эти заклинания должны где-то храниться, вопрос где?
/bin, /usr/bin, /sbin, /usr/sbin и прочие каталоги, входящие в общий список поиска исполняемых файлов, который хранится в переменной PATH
В первом случае некоторые команды (нужные user-у) находятся и выполняются под root-ом
Далеко не все команды имеет смысл выполнять юзеру - у него банально не хватит прав их выполнить. И далеко не всегда имеет смысл давать юзеру права на выполнение этих команд
1. Учим мат часть коллеги which ls
2. Необходимые для юзера команды можно положить /usr/bin
3. Так же не забывайте про SUID/SGID что позволит вам хранить некоторые из исполняемых файлов в папке рута НО позволит их выполнять их без введения пароля от его имени. Пример ping - команда затрагивающая интерфйсы но не требует ввода пароля рут.
4. Если этого не хватило то вот еще Jailkit