# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
函数pathmunge大致意思:
如果PATH 里面含有:$1:, 或者^$1:(^表示开头),或者:$1$($1表示传入的第一个参数,而第二个$表示结尾的意思)则判断传入的第二个参数是否为after,如果传入after,则将路径补齐到末尾,否则路径填到PATH的第一个在查看profile 的时候 可以在shell 输入 echo $PATH看看PATH。
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
# ksh workaround
对EUID赋值,如果EUID没有赋值并且路径/usr/bin/id 存在的话,对EUID,UID 进行赋值这里需要注意一下`id -u`使用的反引号,即先执行反引号内命令,然后赋值。如
# myname=`uname -r`
# echo $myname
8 先执行完uname -r ,然后将得到的结果赋值给myname
可以尝试一下用'' 和“”试一试。
'' 表示不对引号里面做任何处理,直接赋值,效果如下
# myname='$USER'
# echo $myname
$USER
""的话,若引号内有变量,会先对变量求值,然后赋值,效果如下
# myname="$USER"
# echo $myname
root 会先对$USER 求值,然后将得到的root 赋值给myname
if [ -z "$EUID" -a -x /usr/bin/id ]; then
EUID=`id -u`
UID=`id -ru`
fi
如果EUID=0的话,执行pathmunge函数三次,传入的参数$1依次是/sbin,/usr/sbin,/usr/local/sbin,相当于在PATH 添加以上路径
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
执行ulimit -S -c 0 然后将打印输出到/dev/null,其实就是扔掉,后面加上2>&1表示错误信息和正确信息。效果等同于ulimit -S -c 0 &> /dev/null,数据流定向在使用linux 中很有用的,比如使用grep的时候,是不需要错误信息的,所以可以 grep -R '......' 2> /dev/null 扔掉错误数据,同理使用1> 保存正确数据。
ulimit 这个与文件系统及程序的限制有关,这里简单说一下
ulimit -a 可以查看目前的限制设置
-S 警告的设置,可以超过,但是超过会告警,还有一个参数-H,严格的设定,必须不能超过。
-c 程序出错的时候 系统会将程序在内存里面的信息写成档案(除错用)
0表示没有限制。
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
if [ -x /usr/bin/id ]; then
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
fi
这个注意一下``就行了
HOSTNAME=`/bin/hostname`
这个是最大存储的历史记录命令总数,简单说一下使用history n 列出历史使用命令,从你敲入命令的时间开始往前列,不带参数则列出所有命令
!!执行上一条命令
!n 执行第n条命令
HISTSIZE=1000
这里的意思是INPUTRC没有被赋值 并且文件$HOME/.inputrc 不存在,进行赋值INPUTRC=/etc/inputrc
INPUTRC 在这之前是没有被赋值的,HOME在这之前有没有赋值,可以添加测试代码验证,到底在哪里赋值的目前还没找到,但是文件/.inputrc 以及root/.inputrc 都不存在,所以在这里执行赋值操作 INPUTRC=/etc/inputrc
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
输出环境变量,这样的话,在子进程里面也能使用如下变量,相当于declare -x
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
这里使用for 循环,执行/etc/profile.d 目录下面所有存在且可读的.sh文件
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
因为之前使用了i 和pathmunge,取消这两个变量的定义
unset i
unset pathmunge
这里在PATH里面添加以下路径,如果没有unset pathmunge,可以使用
pathmunge /opt/hisi-linux/x86-arm/gcc-3.4.3-csl-uClibc-0.9.30-softvfp/bin
效果一样
export PATH="/opt/hisi-linux/x86-arm/gcc-3.4.3-csl-uClibc-0.9.30-softvfp/bin:$PATH"
export PATH="/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/bin:$PATH"
export PATH="/opt/hisi-linux/x86-arm/arm-hisiv200-linux/target/bin:$PATH"