环境:oracle linux 6.4

以前的同事装的一台服务器,某天登录,发现提示符没有路径、主机名这些,执行rm也没提示要确认。

-bash-4.1#

正常的应该是类似这样:

[root@SFNTP2 tmp]#

首先就怀疑是系统环境文件丢失了。

确认一下/root/.bash_profile、/root/.bashrc、/etc/profile、/etc/bashrc
其它文件都在,只有/etc/profile文件不存在,但是这个文件不存在,并不会出现前面描述的那种情况。
继续排查

执行rm没有提示,就说明rm -i的别名没有起到效果,而这个别名的配置是在/root/.bashrc中的:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color=auto'
alias grep='grep --color=auto'  
# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi
#alias

也没有任何显示,说明.bashrc根本没有生效。

用户登录时,是先会执行/root/.bash_profile这个文件,这个文件里面有明确指定假如.bashrc文件存在,是会执行生效.bashrc里面的环境配置的。

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

那为什么没有执行生效呢?
问题就出在路径上。
它用的是~/.bashrc路径,并不是/root/.bashrc

查看当前生效的环境变量

#env
HOME=/home/www/html

再看passwd文件:

root:x:0:0:root:/home/www/html:/bin/bash

原来不知道是谁改了家用户目录。
估计是为了开FTP上传文件方便,直接改了root的目录路径。

所以前面去执行~/.bashrc,是去执行/home/www/html/.bashrc
这样肯定是找不到这个文件,从而环境变量没有生效。

一个很简单的小问题,主要是分享一下分析问题的思路。

PS.如果有多个FTP用户,权限的确不好控制。推荐使用FTP的虚拟用户来进行分配。



发表评论