Где найти ifconfig простому пользователю
Начинающие часто сталкиваются с проблемой того что ifconfig не запускается при работе под обычным пользователем:
$ ifconfig
zsh: command not found: ifconfig
$И сразу возникает вопрос: "где дать прав/прописать/внести в группу что бы ifconfig запускался".
Ответ:
ifconfig и подобные утилиты находятся обычно в директориях для системных утилит /sbin и /usr/sbin и /usr/local/sbin.
И обычно, у обыкновенного пользователя (не root-а) эти директории не прописаны в переменной окружения PATH, в которой находятся список директорий в которых нужно искать запускаемые файлы. В этом легко убедиться посмотрев что находится в PATH:
$ echo $PATH
/bin:/usr/bin:/usr/local/bin:$(HOME)/bin:/usr/X11R6/bin:/usr/games
$Отсюда решение номер раз:
запускать приложение по абсолютному пути
$ /usr/sbin/ifconfig
...Но это не удобно для повседневного использования.
Решение номер два:
внести в переменную окружение PATH нужные директории добавив в ~/.bashrc или ~/.zshrc
export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
- 4064 просмотра
Страница для печати


А почему эти пути не прописываются для пользователей? Ведь наверное есть какой-то смысл поступать так?
Не прописываются, т.к. не следует обычному пользователю сеть конфигурять.
Единственное, чего не понимаю, почему пользователю traceroute не нужен.
А чтоб в случае появления новых sbin-ов (например, в /opt) не приходилось что-то переписывать, я делаю так
===> .bashrc <===
... function addsbinpath { local ifs="$IFS" local newpath="" IFS=: for elem in $PATH; do local sbin="${elem/%\/bin//sbin}" if [ -d "$sbin" ]; then newpath="$newpath:$sbin" fi newpath="$newpath:$elem" done IFS="$ifs" newpath=$(echo ${newpath:1} | tr : '\n' | uniq | tr '\n' :) export PATH=${newpath:0:$(( ${#newpath} - 1 ))} } PATH="${HOME}/bin:${PATH}" addsbinpath unset addsbinpath ...интересная идея. снкс.
вот упростил немного, делает тоже самое без башизмов
mksbinpath() { echo $PATH | sed -e 's,\([^:]*/\)\(bin\),\1\2\n\1s\2,g;s/:/\n/g' | sort | uniq | xargs ls -d 2> /dev/null | tr \\n : } export PATH=`mksbinpath`или просто одной строчкой
--
Signature invent in progress 24% ##........
export PATH=$(find / -maxdepth 4 -type d -name \*bin 2>/dev/null | xargs | sed s/\ /:/g)ну как то рисковано. у меня вот выдало
$ find / -maxdepth 4 -type d -name \*bin 2>/dev/null /home/komar/.zsh/bin /home/komar/bin /srv/nfs/openinkpot-root/sbin /srv/nfs/openinkpot-root/bin /sbin /bin /usr/lib/pm-utils/bin /usr/lib/cups/cgi-bin /usr/lib/ghc-6.8.2/bin /usr/lib/glide2/bin /usr/lib/klibc/bin /usr/lib/avr/bin /usr/lib/nmap/nselib-bin /usr/bin /usr/arm-linux-gnuuceabi/bin /usr/share/openoffice/bin /usr/share/texlive-bin /usr/share/bug/texlive-base-bin /usr/share/bug/wine-bin /usr/share/doc/texlive-base-bin /usr/share/doc/wine-bin /usr/share/doc/libsmbios-bin /usr/share/doc/glide2-bin /usr/sbin /usr/local/bin /usr/local/arm-ssv1-linux/bin /usr/local/scratchbox/sbin /usr/local/arm-xscale-linux/bin /usr/local/sbinЕсли полагаете что это рискованно, можно уменьшить уровень поиска и дополнительно фильтровать по шаблону.
export PATH=$( find / -maxdepth 3 -type d -name \*bin 2>/dev/null | grep -E "\/s?bin" | xargs | tr " " :)Если уж сокращать, отталкиваясь от предыдущего примера, покатит даже следующая строка:
<strong>export PATH=$(find / -maxdepth 3 -type d -name \*bin 2>/dev/null | grep -E "\/s?bin" | tr "\n" :)</strong>Правда вот такое выражение - это уже действительно стрёмно, ибо ансекурно.
Кстати, если не в напряг, поясните, а почему Вам так не понравилось первое выражение?
То, куда у Вас действительно доступа нет - в
<strong>/dev/null</strong>, а все остальное, так или иначе доступно и Вам, и программам, что Вы запускаете<strong>-maxdepth 4</strong>выставлен исключительно ради вот такого:<strong>"/opt/java/jre/bin"</strong>, а отсутствие<strong>grep -E "\/s?bin"</strong>объясняется наличием:<strong>/usr/bin/perlbin</strong>PS
<strong>Для начинающих:</strong>":)" в окончании строки кода - это не смайлик, а необходимая часть выражения.PPS Я впервые на этом ресурсе, и мне дюже понравилось, пойду регистрится :)
<strong>(<-Это смайлик)</strong>> Кстати, если не в напряг, поясните, а почему Вам так не понравилось первое выражение?
исключительно с точки зрения того что в PATH могут попасть те пути, которые туда попасть не должны (что собственно я и демонстрировал)
с -maxdepth 3 результаты получше
PS
про сайлик я тоже заметил - прикольно Ж:-)
PPS
вместо -name и grep -E можно использовать флажок find -regex '.*/s?bin'
в большинстве своём на запуск программ из **sbin у пользователя тупо нет прав
Не для всех ведь. Для многих, например, ifconfig и ip, достаточно прав чтобы работать в режиме "только чтение"
sudo? Ж8-)
Ставьте Убунту. В нем таких ограничений нет.
а мужики-то не знают... (с)
Отправить комментарий