我们在一个嵌入式系统上使用linux,它有busybox 1.20.2用于各种shell命令.我们有一个非常奇怪的问题,即env现在显示LD_LIBRARY_PATH的值:
$export LD_LIBRARY_PAT=/usr/bin
$export LD_LIBRARY_PATH=/usr/bin
$export LD_LIBRARY_PATH1=/usr/bin
$env | sort
ENV=/etc/profile.environment
HISTFILE=/tmp/.ash_history.debug.357
HOME=/home/debug
LD_LIBRARY_PAT=/usr/bin
LD_LIBRARY_PATH1=/usr/bin
LOGNAME=debug
MAIL=/var/mail/debug
PATH=/home/debug/bin:/usr/bin:/bin:/usr/sbin:/sbin
PWD=/home/debug
PYTHONPATH=:/home/debug/tools/tools-0.0.0/common
SHELL=/bin/bash
SHLVL=1
SSH_CLIENT=10.10.10.22 58307 22
SSH_CONNECTION=10.10.10.22 58307 10.10.12.23 22
SSH_TTY=/dev/pts/0
TERM=xterm
USER=debug
_=/usr/bin/env
$
$echo $LD_LIBRARY_PAT
/usr/bin
$echo $LD_LIBRARY_PATH
/usr/bin
$echo $LD_LIBRARY_PATH1
/usr/bin
如您所见,LD_LIBRARY_PATH已设置,但它不会显示在env的输出中. AFAIK,它是唯一发生这种情况的环境变量.
任何人都可以解释为什么会这样吗?谢谢!
解决方法:
Linux won’t let you mess with the LD_LIBRARY_PATH因为busybox(可能)的setuid位已打开. Busybox在其二进制文件中内置了一堆常见的linux命令,因此需要setuid.