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