zoukankan      html  css  js  c++  java
  • linux的环境变量相关的小记

    linux虽然工作中一直有接触,但是一直缺乏系统了解,都是遇到问题,查资料,解决,过,下次遇到的时候往往又忘了,所以稍微整理一下.

    文件颜色的含义

    颜色 含义
    蓝色 目录
    绿色 可执行文件
    红色 压缩文件
    浅蓝色 链接文件
    白色 其他文件

    文件权限

    链接文件

    linux里分硬链接和符号链接.通过ln命令可以创造链接文件. 详细介绍参考这里

    硬链接ln f1 f2

    硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

    符号链接ln -s f1 f3

    另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

    设置全局变量

    在linux下安装的软件,执行命令必须要到其bin或者sbin目录下才能执行,想要全局可以执行就要配置环境变量.以nginx为例
    在/etc/profile里加上

    #nginx
    PATH=$PATH:/usr/local/nginx/sbin
    

    这样就可以全局调用nginx的指令了

    设置环境变量

    设置环境变量有以下几种方式

    shell

    在shell中对$PATH进行修改,但是这种修改是暂时的,只在shell里有效

    /etc/profile

    该文件登录操作系统时,为每个用户设置环境信息,当用户第一次登录时,该文件被执行。也就是说这个文件对每个shell都有效,用于获取系统的环境信息。

    /etc/bashrc:

    为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。也就是说,当用户shell执行了bash时,运行这个文件。

    ~/.bashrc

    该文件存储的是专属于个人bash shell的信息,当登录时以及每次打开一个新的shell时,执行这个文件。在这个文件里可以自定义用户专属的个人信息。
    在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 /.profile文件中的其中一个,执行的顺序为:/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

    profile

    什么是EUID
    就是决定用户访问权限的
    profile的内容解析

    # /etc/profile
    
    # System wide environment and startup programs, for login setup
    # Functions and aliases go in /etc/bashrc
    #系统环境和启动程序,为了登录安装
    #功能和别名去 /etc/bashrc
    
    # It's NOT a good idea to change this file unless you know what you
    # are doing. It's much better to create a custom.sh shell script in
    # /etc/profile.d/ to make custom changes to your environment, as this
    # will prevent the need for merging in future updates.
    #除非你知道你要做什么,不然改这个文件不是个好主意.
    #在/etc/profile.d/下创建一个custom.sh的shell脚本来定制你的环境是更合适的做法,
    #这样会避免以后更新需要合并内容
    
    #判断路径在环境变量(PATH)里,第一个参数是路径,第二个参数是位置.
    pathmunge () {
        case ":${PATH}:" in   
            *:"$1":*)     #如果路径在环境变量里
                ;;        #什么也不做
            *)								#路径不在环境变量里								
                if [ "$2" = "after" ] ; then    #如果第二个参数为after,则
                    PATH=$PATH:$1               #在环境变量后面追加路径
                else						    #否则
                    PATH=$1:$PATH 				#在前面追加路径
                fi
        esac
    }
    
    
    if [ -x /usr/bin/id ]; then #如果文件/usr/bin/id存在且可执行
        if [ -z "$EUID" ]; then 	#如果 EUID的长度为0
            # ksh workaround      
            EUID=`id -u`
            UID=`id -ru`
        fi
        USER="`id -un`"
        LOGNAME=$USER
        MAIL="/var/spool/mail/$USER"
    fi
    
    # Path manipulation
    #路径控制
    if [ "$EUID" = "0" ]; then  		#如果EUID等于0
        pathmunge /sbin        				#把/sbin加到环境变量里
        pathmunge /usr/sbin					#把/usr/sbin加到环境变量里
        pathmunge /usr/local/sbin           #把/usr/local/sbin加到环境变量里
    else								#否则
        pathmunge /usr/local/sbin after 	#把/usr/local/sbin追加到环境变量里
        pathmunge /usr/sbin after			#把/usr/sbin追加到环境变量里
        pathmunge /sbin after				#把/sbin追加到环境变量里
    fi
    
    HOSTNAME=`/bin/hostname 2>/dev/null`
    HISTSIZE=1000 		#HISTSIZE 定义了 history 命令输出的记录数,即输出.bash_history文件中的最后HISTSIZE行
    if [ "$HISTCONTROL" = "ignorespace" ] ; then   #如果HISTCONTROL值等于ignorespace
        export HISTCONTROL=ignoreboth					#设置环境变量HISTCONTROL为ignoreboth
    else
        export HISTCONTROL=ignoredups					#设置环境变量HISTCONTROL为ignoredups
    fi
    
    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL  #定义一系列环境变量
    
    # By default, we want umask to get set. This sets it for login shell
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    #默认情况下,我们想要umask被设置.登录shell里会设置它
    #系统保留的uid/gids的当前阈值是200
    #你应该在/usr/share/doc/setup-*/uidgid文件里检测 uidgid 的保留效力
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then  #如果UID大于199同时group和user的名字相同 
        umask 002  												#设umask值为002(目录775,文件664)
    else
        umask 022												#设umask值为022(目录755,文件644)
    fi
    
    for i in /etc/profile.d/*.sh ; do           #遍历/etc/profile.d/的shell文件
        if [ -r "$i" ]; then						#如果文件可读
            if [ "${-#*i}" != "$-" ]; then				#如果文件的shell选项与当前的shell选项不相等
                . "$i"											#执行脚本		
            else	
                . "$i" >/dev/null 2>&1                          #执行脚本不输出结果 (/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出)
            fi
        fi
    done
    
    
    #java_path
    JAVA_HOME=/usr/local/jdk1.8.0_112
    CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin:/usr/bin
    
     
    #nginx
    #PATH=$PATH:/usr/local/nginx/sbin
    #maven
    export M2_HOME=/usr/local/maven
    
    PATH=$PATH:$M2_HOME/bin
    
    export PATH JAVA_HOME CLASSPATH  #使这几个环境变量生效
    
    unset i                 #删除变量 i
    unset -f pathmunge		#删除函数 pathmunge
    
    
  • 相关阅读:
    如何提高Android代码的安全性
    Android数据库安全解决方案,使用SQLCipher进行加解密
    【Android UI设计与开发】第16期:滑动菜单栏(一)
    4种必须知道的Android屏幕自适应解决方案
    android权限大全
    在Windows7下构建Android的开发环境
    Android 悬浮歌词(迷你歌词)效果解读 (转)
    大数据量数据库优化(转)
    使用isInEditMode解决可视化编辑器无法识别自定义控件的问题(转)
    导入开源项目后报:Caused by: java.lang.ClassNotFoundException: Didn't find class
  • 原文地址:https://www.cnblogs.com/saias/p/6929385.html
Copyright © 2011-2022 走看看