Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29608
  • 博文数量: 6
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 116
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-28 14:21
文章分类
文章存档

2015年(1)

2014年(2)

2013年(3)

我的朋友

分类: LINUX

2013-09-26 22:20:15

profile 详解

# /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" 
阅读(845) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~