寒假-8

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了寒假-8相关的知识,希望对你有一定的参考价值。

不区分大小写判断yes y no n
[[ $ans =~ ^(Yy?)$ ]]
[[ $ans =~ ^([Nn][Oo]?)$ ]]

防止扩展
反斜线\ 会使随后的字符按愿意解释
$echo Your cost: \$5.00 五美元

加引号来防止所有扩展
    单引号‘’防止所有扩展
    双引号“”防止所有扩展,以下情况例外:
      $
      `反引号 命令替换
      \       禁止单个字符扩展

bash的配置文件
按生效范围划分
bash run command
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
PATH
~/.bashrc

shell登录的两种方式
交互式登录

        直接通过终端输入账号密码登录
        使用 su - username 切换用户的情况
        执行顺序:
 (初始化环境)/etc/profile --/etc/profile.d/*.sh -- ~/.bash_profile ---
                ~/.bashrc --- /etc/bashrc       
    非交互式登录
        su username 切换用户的情况
        图形界面下打开写终端
        执行脚本
        任何其他bash实例
        执行顺序:
    (初始化环境) ~/.bashrc --- /etc/bashrc --- /etc/profile.d/*.sh 

Profile类、
按功能划分
profile类 bashrc 类
profile类: 交互式登录时的shell配置
全局 /etc/profile /etc/profile.d/*.sh
个人 ~/.bash_profile
功能应用
用于定义环境变量
运行命令或脚本
bashrc类:为非交互式和交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
功能应用
定义命令别名和函数
定义本地变量

bash 退出任务
保存在~/.bash_logout文件中(用户)
在退出登录shell时运行
用于
创建自动备份
清除临时文件

  • 变量
    h hashall 打开这个选项后,shell会将命令所在的路径hash下来,避免每次都要查询,通过
    set +h 将其关闭
    i interaction-comments 包含这个选项说明当前的shell是一个交互式的shell
    所谓的交互式shell ,在脚本中,i 选项是关闭的
    m monitor 打开监控模式,就可以通过job control 来控制进程的停止,继续,后台或前台
    B braceexpand 大括号扩展
    H history 此选项打开,可以扩展历史列表的命令,可以通过!来完成
    eg: !!返回上最近的一个历史命令
    !n 返回第n个历史命令

注意:脚本里面不能识别别名,支持内部外部命令
. source bash ./ 执行的区别

source 不会开启子bash进行 ,脚本一般不会用,配置文件才会用,毕竟是影响此进程的

.vimrc 是vim的配置文件,不用用.去加载,vim 在打开的时候就已经执行加载了

*bash 如何开展命令行
次序:
把命令行分成单个命令词
展开别名=用原命令替换
展开大括号声明=结果代替
展开波浪符声明
命令替换$() 和`` =命令执行结果代替
再次把命令行分成命令词
展开文件通配
? [abc]
准备I/O重导向 < > << >>
运行命令

文件的查找和压缩
文件查找 locate find
在文件系统上查找符合条件的文件
非实时查找(数据库查找): locate
实时查找:find

locate
查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为空闲时自动进行(周期性任务)
手动跟新数据库 updatedb命令直接更新
索引构建过程需要里边整个根文件系统,极消耗资源
工作特点:
查找速度快
模糊查找、
非实时查找
搜索的是文件的全路径,不仅仅是文件名,匹配即可
可能只搜索用户具备读取和执行权限的目录
locate KEYWORD
有用的选项
-i 不区分大小写
-n num 只列举前num个匹配项目
-r 使用正则表达式

        eg: 搜索名称或路径中带有conf的文件
                locate conf
            使用Regex来搜索以.conf 结尾的文件
                locate -r “\.conf$”

find 实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录
语法:find [OPTION] [查找路径] [查找条件] [处理动作]
查找路径 指定具体目标路径;默认是当前目录
查找条件 指定的查找标准——————文件名 大小 类型 权限
默认查找指定路径的所有文件 即递归搜索
处理动作 对符合条件的文件操作,默认输出至屏幕
查找条件:
指定搜索层级
-maxdepth level 最大搜索目录深度,***指定目录为第一级
-mindepth level 最小搜索目录深度level

    指定文件名和inode查找
                -name "文件名称"    支持使用glob 通配符
                                                    * ? [] [^] 
                -iname “文件名称”   不区分字母大小写
                -inum n             按inode号查找
                -samefile name      相同inode号的文件 软连接
                -links n            连接数为n的命令
                -regex "PATTERN"    以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

    指定属主、属组查找
                -user USERNAME      查找属组未指定用户的文件
                -group GROUPNAME    查找属组为指定组的文件
                -uid UserID         查找属主为指定的UID号的文件
                -gid GoupID         查找属组未指定的GID号的文件
                -nouser             查找没有属主的文件
                -nogroup            查找没有属组的文件
    -ls 在最后可以显示长格式信息

    指定文件类型查找
            -type TYPE
                   f    普通文件
                   d    目录文件
                   l    符号链接文件
                   s    套接字文件
                   b    块设备文件
                   c    字符设备文件
                   p    管道文件
            空文件或者目录
                    -empty      find /data -type d -empty 

    组合条件:
            与   -a  默认也是与
            或   -o
            非   not !

        德摩根定律
                (非A)或(非B) ==== 非(A且B )
                (非A)且(非B) ==== 非(A或B )
            eg:
                !A -a  !B  === !(A -o B)
                !A -o  !B  === !(A -a B )
    排除目录
            -path "目录路径名字" -a -prune -o
            eg 
                查找/etc/下,除了/etc/sane.d目录的其他所有.conf后缀的文件
                    find /etc -path "/etc/sane.d" -a -prune -o -name "*.conf"
                查找/etc/下,除了/etc/sane.d和/etc/fonts两个目录的其他所有.conf后缀的文件
                    find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name "*.conf"

    指定文件大小查找
            -size [+ -]  常见单位k M G c(byte)
            数字unit======(数字-1,数字]
                    6k==(5k,6k]
            -数字Unit=====[0,数字-1]
                    -6k==(0,5k]
            +数字Unit=====(数字,无穷)
                    +6k==(6k,无穷)

    指定时间
            以天为单位
                -atime [+ -]数字
                         数字 [数字   到 数字+1)
                        -数字       [ 0   到 数字)
                        +数字     [数字+1 到 无穷)
                -mtime
                -ctime
            以分钟为单位
                -amin
                -mmin
                -cmin
    指定文件属性
        -perm [/ - ] MODE
            mode    精确匹配,不多不少
            /mode   任何一类存在对应的权限即可,可以有多
            -mode   每一类对象都必须同时拥有指定权限,也是可以多的
            转换为二进制后,0表示不关心
        eg 
            find -perm 755  会匹配权限模式恰好是755的文件即rwxrwxrwx
                                                           111101101====rwxr_xr_x
            只要当任意人有写权限时,find -prem /222 就匹配rwxrwxrwx
                                                          010010010====存在w w w即可
            只有当每个人都有写权限时 find -perm -222 就会匹配 
            只有其他人有写权限的时候 find -perm -002 就会匹配 

查找后的处理动作
-print 默认的处理动作,显示至屏幕
-ls 类似于对查找到的文件执行ls -l
-delete 删除查找到的文件
-fls file 查找到的所有文件的长格式信息保存至指定文件中
-ok command {} \; 对查找到的每个文件执行由COMMAND指定命令,对每个文件执行命令之前
执行会交互式的要求用户确定
-ok 换成-exec 不会交互式
注意: 必须以 \; 结尾
{} 用于引用查找到的文件名称自身,有可能是路径
find 传递查找到的文件至后面指定的命令时,查找到所有符号条件一次性传递
给后面的命令进行操作

                    find -name "f*" -ok mv  {} { aa bb }  \     
                    find -name "f*" -exec mv {} {}.come  \;

    参数替换
        由于很多命令不支持管道|来传递参数 所以xargs
                                                    用于产生某个命令的参数 xargs可以读入stdin的数据
                                                    并且以空格符或回车符将stdin数据分割成为arguments

        注意: 文件名或者是其他意义的名词内含有空格符的情况
               有些命令不能接受过多参数,执行命令可能会失败 xargs可以解决
               eg:  
                    ls f* |xargs rm 
                    find /sbin -perm +700 |ls -l 命令错误,参数太多
                    find /sbin -perm +700 |xargs  ls -l 
        find 和 xarge格式 
                                find | xargs COMMAND
            xargs -n数字 COMMAND  将参数一个一个传给COMMAND
            echo  f{1..50} | xargs -n2 touch
eg 
    备份配置文件,添加.orig这个扩展名
        find -name "*.conf" -exec cp {} {}.orig  \;
    提示删除存在时间超过3天以上的Joe的临时文件
        find /tmp -ctime +3 -user joe -ok rm {} \;
    在主目录寻找可被其他用户写入的文件
        find ~ -perm -002 -exec chmod o-w {} \;
    查找/data 下的权限为644,后缀为sh的普通文件,增加执行权限
        find /data -perm 644 -name "*.sh" -exec chmod  +x {} \;
    查找/home目录
        find /home -type d -ls 

eg 
    find -name snow.png
    find -iname snow,png
    find / -name  "*.text"
    find /var -name  "*log*"
    find -user joe -group joe
    find -user joe -not  -group joe
    find -user joe -o -user jane
    find -not \( -user joe -o -user jane \)
    find / -user joe -o -uid 500

     找出/tmp目录下,属主不是root 且文件名不以f开头的文件
        find /tmp \(-not -user root -a -not -name "f*" \) -ls 

压缩 解压缩及归档工具 很多的都挑后缀名
compress/uncompress
跟文件默认压缩
-d 解压缩,相当于uncompress
-c 结果输出至标准输出,不删除源文件
-v 显示详情
uncompress 解压缩
zcat file.Z > file

gzip/gunzip
    gzip [option] file ...
        -d          解压缩 ======gunzip
        -c          将压缩或解压缩的结果输出到标准输出
        -数字: 1-9    指定压缩比,壁纸越大压缩比越大
    zcat 不显示解压缩的前提下查看文本条件内容
        eg:
            gzip -c messages > messages.gz 
            gzip -c -d messages.gz >messages
            zcat messages.gz >messages 

bzip2/bunzip2
    bzip [option] file ...
        -k keep 保留原文件
        -d      解压缩 
        -数字     1-9,压缩比,默认为9
    bzcat   不显示解压缩的前提下查看文本条件内容

xz/unxz/xzcat
    xz [option] file ....
        -k      keep保留原文件
        -d          解压缩 
        -数字 1-9 压缩比,默认为6
    xzcat   不显示解压缩的前提下查看文本条件内容

注意: 上面都可以多个压缩文件,不过是分别压缩
        顺序压缩比越高

zip/unzip 打包压缩,解包解压缩  多用于Windows
    打包压缩
        zip -r /tesdir/sysconfig.zip /etc/sysconfig    一定要加目的文件名
                后缀不用加也会自动生成
    解包解压缩
        unzip  sysconfig.zip  
        cat /var/log/messages | zip messages -
        unzip -p message > message 

打包工具tar Tape ARchive 磁带归档
tar [option ]...
创建归档
tar -cpvf /etc/fstaback.tar file.....
追加文件至归档
tar -r -f /etc/fstaback.tar file .....
查看归档文件中的列表
tar -t -f /etc/fstaback.tar
展开归档
tar -x -f /etc/fstabck.tar
tar -x -f /etc/fstabck.tar -C /etc/
结合压缩工具实现:归档压缩
-j bzip2 压缩
-z gzip 压缩
-J xz 压缩
-T 选项指定输入文件,-X选项指定输入文件包含中所要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
分割打的tar文件为多个小文件
split -b SIZE -d tar-file-name prefix-name(分割成小文件的文件名前缀)
split -b 1M -d mybackup.tgz mybackup-parts 得出mybackup-part00
mybackup-part01.....
split -b 1M mybackup.tgz mybackup-parts 得出mybackup-partaa
mybackup-patrab .....
合并:
cat mybackup-part* > mybackup.tar.gz

cpio
功能:复制文件到归档
通过重定向的方式将文件进行打包备份,还原恢复的工具,他还可以解压以“.cpio” 或者“.tar ”结尾的文件

    cpio [option] > 文件名或设备名
    cpio [option] > 文件名或设备名
    选项:
        -o      将文件拷贝打包成文件或者将文件输出到设备上
        -i      解包,将打包文件解压或者将设备锁的备份还原到系统
        -t      预览,查看文件内容或者输出到设备上的文件内容
        -v      显示打包过程中的文件名称
        -d      解包生成目录,在还原时,自动的建立目录
        -c      较新的存储方式

    eg: 
        将etc目录备份:find ./etc -print | cpio -ov >etc.cpio
        内容预览: cpio -tv < etc.cpio 
        解包文件: cpio -idv <etc.cpio 
    注意,打包的时候,如果里面是绝对路径,那么解包的时候只能解压到里面的绝对路径

文本处理工具sed Stream EDitor 行编辑器
sed是一种流编辑器,他一次处理一行的内容
处理时,把当前处理的行存储在历史的缓冲区中,成为 模式空间 pattern space
接着用sed命令处理缓冲区中的内容
处理完成后,把缓冲区的内容送往屏幕。然后读取下一行,执行下一个循环
如果没有使用像D的特殊命令,两个循环之间会清空模式空间 但是不会清空保留空间
不断重复,直到文件末尾
功能:
主要用于自动编辑一个或者多个文件,简化对文件的反复操作,编写转换程序等

用法: sed [option]... ‘script‘ inputfile
        常用选项:
            -n      不输出模式空间内容到屏幕,即不自动打印
            -e      多点编辑
            -f      /path/script.file 从指定的文件中读取编辑脚本
            -r      支持使用扩展正则表达式
            -i.bak  备份文件并原处编辑  .bak 可以自己定义备份后缀
        script: 
            ‘地址命令‘
            地址定界:
                    不给地址    对全文进行处理
                    单地址:
                            num  指定的行
                            $       最后一行
                            /pattern/   被此模式所能够匹配到的每一行
                    地址范围:
                            num1,num2       num1 行到num2行    
                            num1,+num2      num1 行到 num1+num2 行
                            /pat1/,/pat2/   匹配到pat1的行到匹配到pat2的行
                            num,/pat/       num 行到 匹配到pat 的行
                    ~步进:
                            1~2 奇数行
                            2~2 偶数行
                            4~2 4行开始的偶数行
             编辑命令:  
                    d   删除模式空间匹配的行,立即启用下一轮循环                
                    p   打印当前模式空间内容,追加到默认输出之后
                    a [\]text   再指定行后面追加文本       \表示文本的开始,行首希望有空格可以使用
                                    支持使用\n实现多行追加
                    i [\]text   在 行前面插入文本
                    c [\]text   替换行为单行或多行文本
                    w /path/somefile    保存模式匹配的行至指定文件
                    r /path/somefile    读取指定文件的文本至模式空间中
                                    匹配到的杭后
                    =   为模式空间中的行打印行号
                    !   模式空间中匹配行取反处理

                注意:
                        p 和 = 不能同时使用

                s/// 查找替换,支持使用其他分隔符 [email protected]@@,s###
                    替换标记: 放在最后
                    g:
                    p:

            高级编辑命令
                P   打印模式空间开端至\n 内容,并追加到默认输出之前
                h   把模式空间中的内容覆盖至保持空间中hold space 
                H   把模式空间中的内容追加至保持空间中
                g   从保持空间取出数据覆盖至模式空间
                G   从保持空间取出内容追加至模式空间
                x   把模式空间中的内容与保持空间中的内容进行互换
                n   读取匹配到的行的下一行覆盖至模式空间
                N   读取匹配到的行的下一行追加到模式空间
                d   删除模式空间中的行
                D   如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本
                    并不会读取新的输入行  而使用合成的模式空间重新启动循环。
                    如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

简单eg:
sed ‘2p‘ /etc/passwd
sed -n ‘2p‘ /etc/passwd
sed -n ‘1,4p‘ /etc/passwd
sed -n ‘/root/p‘ /etc/passwd
sed -n ‘2,/root/p‘ /etc/passwd
sed -n ‘/^$/=‘ file 显示空行的行号
sed -n -e ‘/^$/p‘ -e ‘/^$/=‘ file
sed ‘/root/a\diaoshinan‘ /etc/passwd 行后
sed ‘/root/i\diaoshinan‘ /etc/passwd 行前
sed ‘/root/c\diaoshinan‘ /etc/passwd 代替整行

    sed ‘/^$‘/d‘ file 删除空行
    sed ‘1,10d‘ fiel 
    nl /etc/passwd | sed ‘2,5d‘
    nl /etc/passwd | sed ‘2a tea‘
    sed ‘s/test/mytest/g‘ exmple
    sed -n ‘s/root/&diaoshinan/p‘ /etc/passwd
    sed -n ‘s/root/diaoshinan&/p‘ /etc/passwd
    sed -e ‘s/dog/cat/‘ -e ‘s/hi/lo‘  pets
    sed -i.bck ‘s/dog/cat/g‘ pets 

     sed -n ‘n;p‘ f1
     sed ‘1!G;h;$!d ‘ FILE    倒叙显示可以用tac
     sed ‘N;D ‘ file  流出追后一行
     sed ‘$!N ;$!D‘ file
     sed ‘$!d‘ file 
     sed ‘G‘ file 
     sed ‘g‘ file 
     sed ‘/^$d/d;G‘ file 
     sed ‘n;d‘ file 
     sed -n ‘1!G;h;$p‘ file 

eg:
sed -i.bak2 ‘/aliases/ a alias cdnet="cd /etc/sysconfig/network-scripts/ "‘ .bashrc
[[email protected] ~]#sed -n ‘2p‘ config |sed -r ‘s/(.)net (.) net(.*)/\2/‘
192.168.220.135
sed -r ‘2!d;s/(.)net (.) net(.)/\2/‘ config
192.168.220.135
*sed -r ‘/GRUB_CMDLINE_LINUX/[email protected](t"$)@ xyz"@‘ /etc/default/grub
前 GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
后 GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quie xyz"
cat /etc/httpd/conf/httpd.conf | sed -r -e‘s/#(<\/Vir)/\1/‘ -e ‘s/#(<Vir)/\1/‘ -e ‘s/(^#NameVir)/Name/‘
取父名
echo "/etc/sysconfig/network" | sed -r ‘s/(.\/)([^\/].\/?)/\1/‘
取基名*
echo "/etc/sysconfig/network" | sed -r ‘s/(.\/)([^\/].\/?)/\2/‘

            ls *.rpm | sed -r ‘s/.*\.(.*)\.rpm$/\1/‘ |sort |uniq -c
                zziplib-utils-0.13.62-5.el7.x86_64.rpm
            ls *.rpm | sed -r ‘s/.*\.([^.]+)\.rpm$/\1/‘ |sort |uniq -c
            ls *.rpm | rev |cut -d. -f2 |rev | sort |uniq -c
                        其中rev可以水平翻转显示文本

awk
awk 参数 ‘条件{动作}’ 文件
如果是awk后面的一定要接单引号,其他的不要求
常用:
指定分隔符显示几列:awk -F “GET|HTTP”‘{print $2}’ access.log
注意: print一定要有花括号 $0为整行的内容 $1为第一列 。。。$NF为最后一列
-F为指定分隔符,

    显示某个范围的内容:awk  ‘NR==1,NR==6  {print NR $0}‘ passwd
        注意:NR==1用的是两个等于号,默认加上行号

    awk里的查找替换功能 gsub函数
    格式:gsub(“替换对象”,“替换成为什么内容”,哪一列)
            注意:gsub后面接的括号是没有空格,内容逗号隔开
        awk ‘{gsub("/sbin/nologin","/bin/bash",$0);print $0}‘ passwd
    [root加CentOS6油 data]$ifconfig |awk -F "(addr:)|(Bcast)" ‘NR==2{print $2}‘
    192.168.125.136  

md5sum计算和校验文件MD5值
Message-Digest Algorithm信息摘要算法5 是一种不可逆的加密算法
md5sum -b 二进制模式读取文件
-c 从指定文件中读取MD5校验值,进行校验

生成一个MD5值 md5sum oldboy.text

chpasswd可以批量为以存在的用户
实现犯法:将设置的内容按照格式写下:
用户名:口令
chpasswd < 密码文件

以上是关于寒假-8的主要内容,如果未能解决你的问题,请参考以下文章

寒假心得

VSCode自定义代码片段8——声明函数

寒假学习报告06

2016寒假读书笔记1-----20135204

寒假自学进度8

寒假-8