Linux学习笔记(7~12)

续前文

7、权限管理

  • 权限
    • r
    • w
    • x
  • 三类用户
    • u:属主
    • g:属组
    • o:其他用户
  • 改变用户
    • chown:只有管理员可以,改属主与属组
    • chgrp:管理员,改属组
    • chmod: 数字;ugoa=rwx;用户类别+-权限
  • 新建一个没有家目录的用户
    • # useradd -M user
  • 手动添加用户
    • nano /etc/group:添加基本组,附加组后添加用户名
    • nano /etc/passwd:
    • nano /etc/shadow:86400秒/天,date +%s
    • cp -r /etc/skel /home/user
    • chown -R user.user /home/uder
    • chmod -R go= /home/user
    • openssl passwd -1 -salt '12121212': 生成密码加密,复制到shadow
  • umask:遮罩码
    • 666-umask:文件
    • 777-umask:文件夹
    • umask 022:修改
    • 文件不具有默认执行权限,若设定默认有,则权限+1
  • shell的类型
    • 登陆式
      • 正常
      • su - user
      • su -l user
      • 读取步骤:/etc/profile -->/etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
    • 非登陆式
      • su user
      • 图形终端
      • 自动执行
      • 读取步骤:~/.bashrc --> /etc/bashrc -->/etc/profile.d/*.sh
  • bash的配置文件
    • 全局
      • /etc/profile, /etc/prifile.d/*.sh, /etc/bashrc
    • 个人
      • ~/.bash_profile,~/.bashrc
    • profile类配置文件
      • 设定环境变量
      • 运行命令或脚本
    • bashrc类的文件
      • 设定本地变量
      • 定义命令别名
    • 修改 ./.bashrc 添加alias cls='clear'

8、管道及IO重定向

  • 权限
    • r
    • w
    • x
  • 三类用户
    • u:属主
    • g:属组
    • o:其他用户
  • 改变用户
    • chown:只有管理员可以,改属主与属组
    • chgrp:管理员,改属组
    • chmod: 数字;ugoa=rwx;用户类别+-权限
  • 新建一个没有家目录的用户
    • # useradd -M user
  • 手动添加用户
    • nano /etc/group:添加基本组,附加组后添加用户名
    • nano /etc/passwd:
    • nano /etc/shadow:86400秒/天,date +%s
    • cp -r /etc/skel /home/user
    • chown -R user.user /home/uder
    • chmod -R go= /home/user
    • openssl passwd -1 -salt '12121212': 生成密码加密,复制到shadow
  • umask:遮罩码
    • 666-umask:文件
    • 777-umask:文件夹
    • umask 022:修改
    • 文件不具有默认执行权限,若设定默认有,则权限+1
  • shell的类型
    • 登陆式
      • 正常
      • su - user
      • su -l user
      • 读取步骤:/etc/profile -->/etc/profile.d/*.sh --> ~/.bash_profile -->~/.bashrc -->/etc/bashrc
    • 非登陆式
      • su user
      • 图形终端
      • 自动执行
      • 读取步骤:~/.bashrc --> /etc/bashrc -->/etc/profile.d/*.sh
  • bash的配置文件
    • 全局
      • /etc/profile, /etc/prifile.d/*.sh, /etc/bashrc
    • 个人
      • ~/.bash_profile,~/.bashrc
    • profile类配置文件
      • 设定环境变量
      • 运行命令或脚本
    • bashrc类的文件
      • 设定本地变量
      • 定义命令别名
    • 修改 ./.bashrc 添加alias cls='clear'

9、grep及正则表达式

  • grep:根据模式搜索文本,并将符合模式的文本行显示出来。不一定全部匹配,一部分匹配即显示。
  • grep [OPTIONS] PATTERN [FILE...]
    • pattern:文本字符和正则表达式的元字符组合而成匹配条件
    • -i:忽略大小写
    • --color
    • -v:显示没有被模式匹配到的行
    • -o:只显示被模式匹配到的字符串
    • -E:扩展的正则表达式
    • -A:某行被匹配,其后n行也显示,
    • -B:某行被匹配,其前n行也显示。
    • -C:前后n行显示
  • 正则表达式
    • *:任意长度任意字符
    • ?:任意单个字符
    • 元字符:
      • . :点表示任意单个字符
      • []:指定范围
    • 匹配次数(贪婪模式)
      • *:匹配其前面的字符任意次,a*b可匹配b,ab,aab,
      • .*:任意长度的任意字符
      • ?:匹配其前面的字符一次或者零次,需要使用转义\?
      • \{m,n\}:匹配其前面的字符至少一次,至多n次。
    • 位置锚定
      • ^:锚定行首,此字符后面出现的字符必须出现在行首
      • $:锚定行尾,此字符前面出现的字符必须出现在行尾
      • ^$:空白行
      • \<:其后面的任意字符必须作为单词的首部出现\b,锚定词首
      • \>:其前面的任意字符必须作为单词的尾部出现\b,锚定词尾
    • 分组
      • \(\)
        • \(ab\)*:ab可出现任意次
      • 后向引用:匹配He love his lover,grep '\(l..e\).*\1' test.txt
        • \1:第一个左括号以及与之对应的右括号所包括的所有内容
    • []:匹配指定范围内的任意单个字符
    • [^]:匹配指定范围外的任意单个字符,digit,lower,upper,punct,space,alpha,alnum
  • REGEXP:regular expression,正则表达式
  • 正则表达式分类
    • basic regexp:基本的
      • 元字符,匹配次数,锚定,
    • extended regexp:扩展的egrep==grep -E
      • 元字符:
      • 次数
        • +:匹配其前面的字符至少一次,相当于\{1,\}
        • 无需反斜线:{m,n}
      • 位置锚定
      • 分组:(),支持引用\1,无需转义。
      • 支持 or:| a|b C|cat:C或者cat
  • 找1-255之间的整数: egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
  • 匹配IP v4地址ifconfig | egrep  --color -o  '(\<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}(\<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>)'
  • fgrep:fast
    • 不支持正则表达式,执行速度快。

10、bash脚本编程变量,变量类型

  • 语言
    • 编译器,解释器
    • 编程语言:机器语言,汇编语言,高级语言。
    • 静态语言:编译型语言,强类型,转化二进制。
      • 事先转化程可执行程序。
      • c,c++,Java,c#
    • 动态语言:解释型语言,弱类型,执行时转化。
      • 边解释边执行。
      • asp,asp.net,php,shell,python,perl
      • 解释器本身通常是静态语言开发的
    • 面向过程
      • Linux内核由c写成
      • shell脚本
    • 面向对象
      • 大型软件开发
      • Java,python,c++
  • 变量
    • 内存空间,命令,内存是编址的存储单元
    • 变量映射内存地址
    • 变量类型:整型,浮点型,
      • 事先确定存储格式与存储长度
      • 溢出问题:缓冲区溢出,判断大小,软件外包(中,印)
      • 逻辑运算:与,或,非,异或
  • shell:弱类型编程语言
    • 强:变量在使用前,必须事先声明,甚至还需要初始。
    • 弱:变量用时声明,甚至不区分类型,
    • (本地)变量赋值:var_name=value,作用域整个bash进程
    • bash变量类型
      • 环境变量
        • 作用域当前shell进程及其子进程
        • export varname=value “导出”
        • 脚本在执行时会启动一个子shell进程(命令行中启动的 脚本会继承当前shell环境变量)
        • 系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量
      • 本地变量(局部变量)
        • 变量引用:${varname},括号可省
        • 局部:local varname=value,作用域当前代码段
      • 位置变量
        • $1,$2,...:
      • 特殊变量(系统变量)
        • $?:保存上一个命令执行状态返回值,0正确执行,1-255错误执行(1,2,127系统预留,其他可自定义含义)。
          • 程序执行,可能有两类状态:正确和错误
          • 输出重定向dev/null(软件模拟设备,数据黑洞):# id student &> /dev/null; echo $?
      • 撤销变量:unset varname
      • 查看当前shell中变量:set
      • 查看环境:printenv,env,export
      • 变量附加:animals=$animals:goat,不做算数运算,只做字符串相加
      • 脚本:命令的堆砌,按实际需要
        • shebang:魔数, 首行写 #!/bin/bash
        • # 注释行,不执行。
        • 赋予执行权限:chmod +x file.sh
        • ./file.sh 执行脚本
        • 不赋予执行权限,作为bash的参数,bashfile.sh ,使用解释器执行

11、bash脚本编程条件判断

  • 实现条件判断
    • $?:
    • 条件测试类型
      • 整数测试
      • 字符测试
      • 文件测试
    • 条件测试的表达式
      • [ expression ]
      • [[ expression ]]
      • test expression
    • 整数比较的实现
      • -eq:测试两个整数是否相等,[ $A -eq $B ],取状态返回值
      • -ne:测试两个整数是否不等
      • -gt:测试一个数是否大于另一个数
      • -lt:测试一个数是否小于另一个数
      • -ge:大于等于
      • -le:小于等于
  • 命令间的逻辑关系
    • 逻辑与:短路操作,&&,
      • id user &> /dev/null && echo "hello,student!",
      • 用户不存在则添加 !id user && useradd user
      • 第一个条件为真,第二个条件必须得判断
      • 第一个条件为假,第二个条件不再判断(执行)
    • 逻辑或:短路操作,||,
      • id user || useradd user用户不存在则添加
  • 变量名称:只能包含字母,数字,下划线,且不能以数字开头,不应与系统中的环境变量名重名
  • if-else变种:[ expression ] && if-true || else
    • ! id user1 && useradd user1 && echo "password" | passed --stdin user &> /dev/null || echo "user1 exists."
  • 取得当前系统用户数
    • USERS=`wc -l /etc/passwd | cut -d: -f1`
    • echo USERS
  • 条件判断
    • 单分支
      • if 判断条件; then
        • statement1
        • statement2
        • ...
      • fi
    • 双分支
      • if 判断条件; then statement statement ... else statement statement fi
  • 做算数运算
    • let C=$A+$B
    • $[算数运算表达式]:C=$[$A+$B]
    • $((算术运算表达式)):D=$(($A+$B))
    • expr 算数运算表达式:表达式中各操作数及运算符之间要有空格,而且要有命令引用,C=`expr $A + $B`
  • 提前结束脚本:exit
    • 定义执行状态结果:exit n,0-255,
  • 文件测试
    • -e FILE :测试文件是否存在 [ -e /etc/inittab ]
    • -f FILE :测试文件是否为普通文件
    • -d FILE :测试指定路径是否为目录
    • -r FILE :测试当前用户对该文件是否有读权限
    • -w FILE :
    • -x FILE :
    • 文件测试的使用
      • 多分支的if语句
        • if elif elif ... else fi
  • 测试脚本是否有错误
  • 位置变量:
    • $1,$2,对应命令的参数
    • shift:轮换
  • 特殊变量:
    • $?,
    • $#,返回参数的个数,判定有无参数
    • $*,参数列表
    • $@,参数列表

12、sed

  • 基本用法
    • 流编辑器
    • 行编辑器(全屏编辑器:vi)
    • 模式空间,
    • 默认不编辑源文件,只对模式空间中的数据做处理
    • sed [options] 'AddressCommand' file ...
    • Address
      • Startline,Endline:1,100,$表示最后一行,$-1.
      • /RegExp:/root,以root开头的字符串
      • /pattern1/,/pattern/:第一次被模式一匹配到的行开始,到第一次被模式二匹配到的行结束。
      • LineNumber:指定的行
      • StartLine,+n:从startline开始,向后n行
    • Command
      • d:删除符合条件的行,sed "1,2d" /etc/fstable
      • p:显示符合条件的行
      • a \string:在指定的行后面追加新行,内容为string
      • i \string:在指定的行前面追加新行,内容为string
      • r fife:将指定的文件的内容添加至符合条件的行后(文件合并),
      • w file:将指定范围的内容另存至指定的文件中
      • s/pattern/string/:查找并替换,默认只替换每行中第一次被模式匹配到的字符串,# (其他)也可做分隔符。
        • 加修饰符
          • g:全局替换:sed '/\//#/g' /etc/passwd
          • i:查找时忽略字符大小写
    • options
      • -n:静默模式,不再默认显示模式空间中的内容
      • -i:直接修改原文件
      • -e script ...:同时执行多个脚本
      • -f FILE: sed -f /path/to/scripts file
      • -r:使用扩展正则表达式
  • 后向引用
    • sed 's#l..e#&r#g' sed.txt
    • &表示模式匹配到的所有字符串
    • sed 's#\(l..e\)#\1r#g' sed.txt 类似于grep的用法
      • sed 's#l\(..e\)#L\1r#g' sed.txt 将l替换为L
发布了46 篇原创文章 · 获赞 16 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章