问题描述
Nginx 安装在/home/dev/share_dev/usr_local/nginx/sbin/nginx
,想在bash中直接用’nginx’来启动服务。
在用户目录下touch .bash_profile ,添加PATH:
PATH=$PATH:/home/dev/share_dev/usr_local/nginx/sbin
export PATH
刷新:$ source .bash_profile
此时,$ which nginx
可以输出正确的路径。
直接$ nginx
,权限不够,需要用root权限执行(说明已经可以找到nginx的正确位置了)。
$ sudo nginx
显示command not found。
类似的问题还有 sudo ll
。
问题解决
不采用修改PATH的方式,而是为nginx做一个软连接。
$ sudo ln -s /home/dev/share_dev/usr_local/nginx/sbin/nginx /usr/local/sbin/nginx
问题解释
在命令前加 sudo 表示以root权限执行,但这样做的前提是sudo 后面跟的命令为”系统命令"(/etc/environment)。在.bash_profile 里定义的是当前用户的shell配置。
$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
参考
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers
),即完成对该用户的授权(此时该用户称为“sudoer”)[3]
;在一般用户需要获取特殊权限时,其可在命令前加上“sudo
”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟[4]
,可在/etc/sudoers
自定义),使用sudo不需要再次输入密码。
https://zh.wikipedia.org/wiki/Sudo
Since environment variables can influence program behavior, sudo provides a means to restrict which variables from the user's environment are inherited by the command to be run. There are two distinct ways sudoers can be configured to handle with environment variables.
By default, the env_reset option is enabled. This causes commands to be executed with a new, minimal environment. On AIX (and Linux systems without PAM), the environment is initialized with the contents of the/etc/environment file.
https://www.sudo.ws/man/1.7.10/sudo.man.html