shell配置文件 正则表达式 ip地址匹配 vim配置文件 find命令

shell配置文件读取顺序

shell登录进程分两种类型:

  • 1.交互式登录shell进程:
    • 直接通过某终端登录的shell进程,如通过CRT终端登录
    • 使用su - USERNAME命令登录的shell进程
  • 2.非交互式登录shell进程:
    • 使用su USERNAME命令登录的shell进程(注意这里没有 -)
    • 运行脚本启动的shell进程

shell配置文件读取顺序

系统中存在一些shell配置文件,当shell进程启动时,会按规定的顺序读取这些文件的配置数据。但
对于上面说到的“交互式登录shell进程”和“非交互式登录shell进程”读取配置文件的顺序是有区别的,
具体如下:

  • 交互式登录shell进程读取顺序:
    • /etc/profile  ==>  /etc/profile.d/*  ==>  ~/.bash_profile ==>  ~/.bashrc  ==>  /etc/bashrc
  • 非交互式登录shell进程读取顺序:
    • ~/.bashrc  ==>  /etc/bashrc  ==>  /etc/profile.d/*

/etc/profile配置文件:对全局生效

  1 # /etc/profile
  2 
  3 # System wide environment and startup programs, for login setup
  4 # Functions and aliases go in /etc/bashrc
  5 
  6 # It's NOT a good idea to change this file unless you know what you
  7 # are doing. It's much better to create a custom.sh shell script in
  8 # /etc/profile.d/ to make custom changes to your environment, as this
  9 # will prevent the need for merging in future updates.

不建议修改/etc/profile文件,以.sh脚本的命令格式把个性化定制配置文件放在
/etc/profile.d/目录下是更好的选择

/etc/profile.d/*.sh配置文件:对全局生效
shell登录进程会读取/etc/profile.d/目录下所有*.sh脚本文件,我们可以把自己个性化定制的配置文件
以.sh的命名格式放在此目录下。如下,在/etc/profile.d/目录下放了一个env.sh个性化定制提示符颜色
高亮的配置文件,可以看到提示符颜色高亮效果已生效。

~/.bash_profile配置文件:用户家目录下的文件,不存在的话可以自行创建,仅对当前用户生效

  1 # .bash_profile
  2 
  3 # Get the aliases and functions
  4 if [ -f ~/.bashrc ]; then        #这里判断是否存在~/.bashrc文件,如果存在则执行,
  5     . ~/.bashrc                  #使其生效。这里也可以理解上面提到的读取顺序
  6 fi
  7 
  8 # User specific environment and startup programs
  9 
 10 PATH=$PATH:$HOME/bin     #把家目录下的~/bin目录加到环境变量中
 11 
 12 export PATH              #输出环境变量

~/.bashrc配置文件:用户家目录下的文件,不存在的话可以自行创建,仅对当前用户生效

  1 # .bashrc
  2 
  3 # User specific aliases and functions
  4 
  5 alias rm='rm -i'     #定义命令别名,只对当前用户生效
  6 alias cp='cp -i'
  7 alias mv='mv -i'
  8 alias vi='vim'
  9 alias grep='grep --color'
 10 alias egrep='egrep --color'
 11 
 12 
 13 # Source global definitions
 14 if [ -f /etc/bashrc ]; then    #判断是否存在/etc/bashrc文件,如果存在,则
 15     . /etc/bashrc              #执行,使其生效
 16 fi

/etc/bashrc配置文件:对全局生效

  1 # /etc/bashrc
  2 
  3 # System wide functions and aliases
  4 # Environment stuff goes in /etc/profile
  5 
  6 # It's NOT a good idea to change this file unless you know what you
  7 # are doing. It's much better to create a custom.sh shell script in
  8 # /etc/profile.d/ to make custom changes to your environment, as this
  9 # will prevent the need for merging in future updates.

不建议修改/etc/bashrc文件,以.sh脚本的命令格式把个性化定制配置文件放在
/etc/profile.d/目录下是更好的选择

注意:配置文件修改后,只对随后启动的shell登录进程生效,如要立即生效,则需重新载入配置文件如下:

  • source  /etc/bashrc
  • ./etc/bashrc

****************************************************************************************************************

正则表达式:

  • 基本正则表达式:
    • 字符匹配:
      • .:匹配任意单个字符
      • []:匹配范围内的任意单个字符
      • [^]:匹配范围外的任意单个字符   ex:[^[:digit:]]:匹配非数字任意单个字符
    • 匹配次数:(贪婪匹配模式)
      • *:匹配前面字符任意次:0,1,多次
      • .*:匹配任意长度任意字符
      • \?:匹配前面字符0次或1次
      • \+:匹配前面字符1次或多次
      • \{m\}:匹配前面字符m次
      • \{n,m\}:匹配前面字符至少n次,至多m次
    • 位置锚定:
      • ^:行首位置锚定
      • $:行尾位置锚定  ex: ^[[:space:]]*$:匹配空白行
      • \<和\b:词首位置锚定   单词:由非特殊字符组成的连续字符串称为单词
      • \>和\b:词尾位置锚定
      • \<PATTERN\>:完整匹配单词
    • 分组和引用:
      • \(\):把括号内的内容当作一个整体进行处理,分组匹配到的结果会被正则表达式引擎自动
        • 记录于内部的变量中,这些变量依次为\1,\2,\3等。
      • 向后引用:引用前面分组括号内匹配到的结果 \1,\2,\3,例子如下:
  • 扩展正则表达式:  
    • grep -E 等价于 egrep:支持扩展正则表达式
    • 字符匹配:
      • .:匹配任意单个字符
      • []:匹配范围内的任意单个字符
      • [^]:匹配范围外的任意单个字符   ex:[^[:digit:]]:匹配非数字任意单个字符
    • 匹配次数:(贪婪匹配模式)
      • *:匹配前面字符任意次:0,1,多次
      • .*:匹配任意长度任意字符
      • ?:匹配前面字符0次或1次       #注意和基本正则表达式的区别是没有了‘\’
      • +:匹配前面字符1次或多次
      • {m}:匹配前面字符m次
      • {n,m}:匹配前面字符至少n次,至多m次
    • 位置锚定:
      • ^:行首位置锚定
      • $:行尾位置锚定  ex: ^[[:space:]]*$:匹配空白行
      • \<和\b:词首位置锚定   单词:由非特殊字符组成的连续字符串称为单词
      • \>和\b:词尾位置锚定
      • \<PATTERN\>:完整匹配单词
    • 分组和引用:    #注意和基本正则表达式的区别是没有了‘\’
      • ():把括号内的内容当作一个整体进行处理,分组匹配到的结果会被正则表达式引擎自动
        • 记录于内部的变量中,这些变量依次为\1,\2,\3等。
      • 向后引用:引用前面分组括号内匹配到的结果\1,\2,\3
    • 或运算:
      • a|b:a或b
      • F|file:F或者file
      • (F|f)ile:File或者file

正则表达式应用:
显示/etc/passwd文件中不以/bin/bash结尾的行

NAME
       grep, egrep, fgrep - print lines matching a pattern

 -v, --invert-match    #对结果取反
              Invert  the  sense of matching, to select non-matching lines.
              (-v is specified by POSIX.)

显示/etc/passwd含有2位数或者3位数的行:

显示/proc/meminfo文件中已S或者s开头的行:

用正则表达式实现dirname  /etc/passwd的效果

-w, --word-regexp     
              Select only those lines containing matches  that  form  whole
              words.   The  test is that the matching substring must either
              be at the beginning of the line, or preceded  by  a  non-word
              constituent  character.   Similarly, it must be either at the
              end of  the  line  or  followed  by  a  non-word  constituent
              character.   Word-constituent characters are letters, digits,
              and the underscore.

 

匹配ifconfig中的ip地址:
分析:IPv4格式如 X.X.X.X ,X的范围是0-255,把0-255这个范围拆分并用正则表达式表示如下:

0-9:[0-9]
10-99:[1-9][0-9]
100-199:1[0-9][0-9]
200-249:2[0-4][0-9]
250-255:25[0-5]

[0-9]和[1-9][0-9]可以合并为[1-9]?[0-9],0-255整个范围可匹配为:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]
IPv4 X.X.X.X可拆分成(X.){3}X,用正则表达式匹配为:
((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]) 

****************************************************************************************************************

vim配置文件:

  • /etc/vimrc:对全局生效
  • ~/.vimrc:仅对当前用户生效

在/etc/vimrc文件最后加上如下设置,使其tab键为4个字符,且自动缩进4个字符

****************************************************************************************************************

|| 和 &&短路运算:
COMMAND1  ||   COMMAND2:COMMAND1执行不成功时才执行COMMAND2
COMMAND1 && COMMAND2:COMMAND1执行成功时才执行COMMAND2
 

脚本实现当用户不存在时,新建三个用户test1,test2,test3,并计算三个用户的ID值之和
  1 #!/bin/bash
  2 #
  3 #
  4 
  5 id test1 &> /dev/null || useradd test1 #运用||短路运算实现只有用户不存在时才新建用户
  6 id test2 &> /dev/null || useradd test2
  7 id test3 &> /dev/null || useradd test3
  8 
  9 UID1=$(id -u test1)    #()括号里命令执行,$是取括号里的执行结果
 10 UID2=$(id -u test2)
 11 UID3=$(id -u test3)
 12 
 13 UID_SUM=$[UID1+UID2+UID3] #[]方括号是算术运算
 14 echo "the three user id sum is: $UID_SUM"

****************************************************************************************************************

find命令常用选项:

NAME
       find - search for files in a directory hierarchy

 -maxdepth levels     #最大搜索层级
 -mindepth levels     #最小搜索层级

 -name pattern        #根据文件名查找
 -iname pattern       #忽略大小写根据文件名查找

 -type c              #根据文件类型查找,如f:普通文件,l:链接文件,d:目录文件等

 -size n[cwbkMG]      #根据文件大小查找
        如:-size +5M:查找大于5M的文件; -size -5M:查找小于5M的文件。

 -perm mode           #根据文件权限查找,精确匹配
 -perm -mode          #根据文件权限查找,u,g,o每类用户每一位权限都符合条件时才满足
 -perm /mode          #根据文件权限查找,u,g,o每类用户任意一位权限符合条件时就满足

 -nouser              #查找没有属主的文件
 -nogroup             #查找没有属组的文件
 -user uname          #查找属于指定属主的文件
 -group gname         #查找属于指定属组的文件

 -mtime n             #以"天"为单位时间查找 +n:大于n天; -n:小于n天
 -atime n
 -ctime n

 -mmin n             #以"分钟"为单位时间查找 +n:大于n分钟; -n:小于n分钟
 -amin n
 -cmin n
  • 组合测试:
    • 与:-a
    • 或:-o
    • 非:-not, !
  • 查找到的结果处理动作:
    • -delete:对查找到的结果做删除操作
    • -ok COMMAND {} \; :对查找到的结果执行COMMAND命令操作,且每次都得用户确认
    • -exec COMMAND {} \; :对查找到的结果执行COMMAND命令操作。
    • | xargs COMMAND :通过管道把查询结果传给COMMAND命令执行

查找当前目录下,属主u和属组g都没有可写w权限,但其他用户有可写2权限的文件:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值