码迷,mamicode.com
首页 > 系统相关 > 详细

续写vim,shell脚本基础编辑,read命令,if与case判断语句,文件查找方式,压缩与解压,

时间:2018-01-27 22:22:17      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:随机   添加   sgid   $2   第一个   编程   进程   系统管理   状态   

一、 Vim续写

?1、命令扩展模式的位置定界

??起始位置 cmd 终止位置
???Cmd:
????y复制
????d删除
????Gu变大写
????gu变小写
??例如:0y$命令意味着:
????0 先到行头
????Y 从这里开始拷贝
????$ 拷贝到本行行尾最后一个字符
????Ye 从当前位置拷贝到本单词的最后一个字符

?2、扩展命令模式:地址定界

? ?# 具体第#行,
? ?#1,#2 从开头数第#1行到第#2行
? ?#1,+#2 从开头数的第#1行到从第#1行开始数的第#2行
? ? ?例:2,+3 表示第2行到第五行
? ?. 当前行
? ?$ 最后一行
? ?. ,$-1 当前行到倒数第二行
? ?% 全文,相当于1,$
? ?/pat1/,/pat2/ 从第一次被pat1 模式匹配的行开始,一直到第一次被pat2匹配的行结束
? ? #,/pat/ 从第#行到第一次匹配到pat结束
? ? /pat/,$ 从第一次匹配到pat到最后一行
? ?使 用方式:后跟一个编辑命令
? ? ?d 剪切
? ? ?y 复制
? ? ?w file 将范围内的行另存至指定文件中
? ? ?r file 在指定位置插入指定文件中的所有内容

?3、查找并替换

? ?s: 在扩展模式下完成替换操作
? ?? 地址定界s/要查找的内容/替换为的内容/修饰符
? ? ? ?要查找的内容:可以使用正则表达式
? ? ? ?替换为的内容:不可以使用正则,但可以使用\1,\2调用前面表达式里的分组,还可以使用&引用前面查找时查找到的整个内容
? ? ? ?修饰符:
? ? ? ? ? i:忽略大小写
? ? ? ? ?g:全局替换,(默认情况下,每一行只替换第一次出现)
? ? ? ? ?gc :全局替换,每次替换前询问
? ? ? ? 查找替换中的分隔符/可替换为其它字符,例如:
? ? ? ? ?%s@dog@cat@g 把全文中的dog都替换成cat
? ? ? ? ?%s#dog#cat#i 把每行第一次出现的dog替换成cat,忽略大小写

?4、Vim的寄存器

? ? ? ?有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版 内容,可以不同会话间共享
? ? ? ?寄存器名称a,b,…,z,格式:“寄存器 放在数字和命令之间
? ? ? ? ?如:3"tyy 表示复制3行到t寄存器中
? ? ? ?"tp 表示将t寄存器内容粘贴
? ? ? ?未指定,将使用无命名寄存器
? ? ? ?有10个数字寄存器,用0,1,…,9表示,0存放最近复制内容
? ? ? ?,1存放最近删除内容。当新的文本变更和删除时,1转存到2
? ? ? ?,2转存到3,以此类推。数字寄存器不能在不同会话间共享

?5、编辑二进制文件

? ?1.以二进制方式打开文件
? ? ? Vim -b 文件路径
? ?2.扩展命令模式下,利用xxd命令转换为可读的十六进制
? ? ?:%!xxd
? ? ?编辑二进制文件
? ?3.扩展命令模式下,利用xxd命令转换回二进制
? ? ? ? :%!xxd -r
? ? ?保存退出

?6、可视化模式

? ?允许选择的文本块
? ? ?v :面向字符
? ? ?V :面向行
? ? ?Ctrl-v 面向块
? ?可视化键可用于与移动键结合使用:
? ? ?w 选中一个单词
? ? ?) } 选中从当前到文本尾部
? ? ?箭头键
? ?突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

?7、多文件模式

? ?Vim file1 file2 file3
? ? ?:next 下一个
? ? ?:prev 前一个
? ? ?:first 第一个
? ? ?:last 最后一个
? ? ?:wall 保存所有
? ? ?:qall 退出所有
? ? ?:wqall 保存所有并退出

?8、使用多个“窗口”

? ?1.多文件分隔
? ? ?Vim -o|-O file1 file2
? ? ? ? -o:水平分割
? ? ? ? -O:垂直分割
在窗口间切换:Ctrl+w
技术分享图片
? ?2.单文件窗口分割
? ? ?Ctrl+w,s:水平分割
? ? ?Ctrl+w,v:垂直分割
? ? ?Ctrl+w,q:取消相邻窗口
? ? ?Ctrl+w,o:取消全部窗口
? ? ?:wqall 保存退出
技术分享图片

?9、定制vim的工作特性

???配置文件:永久有效
????全局:/etc/vimrc
????个人: ~/.vimrc
????扩展模式:当前你vim进程有效

??1. 行号

???Set number 显示行号,简写 set nu
???Set nonumber 取消显示行号 简写 set nonu

??2. 括号成对匹配

???Set showmatch 匹配 简写 set sm
???Set nosm 取消

??3. 自动缩进

???启用:set ai
???禁用:set noai

??4. 高亮搜索

???启用:set hlsearch
???禁用:set nohlsearch

??5. 语法高亮

???启用:syntax on
???禁用:syntax off

??6. 忽略字符的大小写

???启用:set ic
???不忽略:set noic

??7. 文件格式

???启用windows格式:set fileformat=dos
???启用unix格式:set fileformat=unix

??8. 设置文本宽度

???:set textwidth=65 (vim only)
???:set wrapmargin=15

??9.Vim内置帮助

???:help

二、 Shell脚本编程基础

?1、 编程基础

??程序:指令+数据
??程序编程风格:
??过程式:以指令为中心,数据服务于指令
??对象式:以数据为中心,指令服务于数据
??shell程序:提供了编程能力,解释执行

?2、 程序的执行方式

??计算机:运行二进制指令
??编程语言:
???低级:汇编
??? 高级:
??????编译:高级语言-->编译器-->目标代码
?????????Java,c#
??????解释:高级语言-->解释器-->机器代码
????????? Shell,perl,python

?3、 编程基本概念

??1.编程逻辑处理方式:

????顺序执行
????循环执行
????选择执行

??2.shell编程:过程式、解释执行

??3.编程语言的基本结构:

          各种系统命令的组合
          数据存储:变量、数组
          表达式: a + b
          语句:if

?4、 Shell脚本基础

??shell脚本:
???包含一些命令或声明,并符合一定格式的文本文件
??格式要求:
???首行shebang机制(就是首行要写执行的shell,否则就会使用默认shell来运行该脚本,容易出错,导致脚本执行错误执行)
????#!/bin/bash
????#!/usr/bin/python
????#!/usr/bin/perl
??shell脚本的用途有:
???自动化常用命令
???执行系统管理和故障排除
???创建简单的应用程序
???处理文本或文件

?5、 创建shell脚本

??第一步:使用文本编辑器来创建文本文件
???第一行必须包括shell声明序列:#! #!/bin/bash
???添加注释 注释以#开头
??第二步:运行脚本
???给予执行权限,在命令行上指定脚本的绝对或相对路径
???直接运行解释器,将脚本作为解释器程序的参数运行

?6、 脚本规范

??脚本代码开头约定
???1.第一行一般为调用使用的语言
???2.程序名,避免更改文件名为无法找到正确的文件
???3.版本号
???4.更改后的时间
???5.作者相关信息
???6.该程序的作用,及注意事项
???7.最后是各版本的更新简要说明

?7、 脚本的基本结构

??#!SHEBANG
??CONFIGURATION_VARIABLES
??FUNCTION_DEFINITIONS
??MAIN_CODE

?8、 脚本调试

??检测脚本中的语法错误
???bash -n /path/to/some_script
?? 调试执行
??? bash -x /path/to/some_script

?9、 变量

??1.变量:命名的内存空间

???数据存储方式:
????字符:
????数值:整型,浮点型

??2.变量:变量类型

???作用:
????1、 数据存储格式
????2、 参与的运算
????3、 表示的数据范围
???类型:
????字符
????数值:整数、浮点型

??3. 强类型:变量不经过强制转换,它永远是这个数据类型,不

???允许隐式的类型转换。一般定义变量时必须指定类型、参与
???运算必须符合类型要求;调用未声明变量会产生错误
???如Java,c# 弱类型:语言的运行时会隐式做数据类型转换。无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;
???变量无须事先定义可直接调用
???如bash 不支持浮点数,php

??4. 变量命名法则

???1、不能使程序中的保留字:例如if, for
???2、只能使用数字、字母及下划线,且不能以数字开头
???3、见名知义
???4、统一命名规则:驼峰命名法

??5.bash中变量的种类

???本地变量:生效范围为当前shell进程;对当前shell之外 的其它shell进程,包括当前shell的子shell进程均无效
???环境变量:生效范围为当前shell进程及其子进程
???局部变量:生效范围为当前shell进程中某代码片断(通常 指函数)
???位置变量:$1, $2, ...来表示,用于让脚本在脚本代码 中调用通过命令行传递给它的参数
???特殊变量:$?, $0, $*, $@, $#,$$

??6.本地变量

???变量赋值:name=‘value‘
???可以直接引用value:
????1、 可以是直接字符串。Name=“root”
????2、 变量引用:name=“$user”
????3、 命令引用:name=·cmd· 或name=$(cmd)
???变量引用:${name} $name
???“”:弱引用,其中的变量引用会被替换为变量值
???‘’:强引用其中的变量引用不会被替换为变量值,而保持原字符串
???显示已定义的所有变量:set
??? 删除变量:unset name

??7.环境变量

???变量声明、赋值:
????export name=VALUE
????declare -x name=VALUE
???变量引用:$name,${name}
???显示所有环境变量:
????Env
????Printenv
????Export
????Declare
???删除变量
????Unset name
??? bash内建的环境变量
????PATH
????SHELL
????USER
????UID
????HOME
????PWD
????SHLVL
????LANG
????MAIL
????HOSTNAME
????HISTSIZE

??8.只读变量

???只读变量:只能声明,但不能修改和删除
?? ?声明只读变量:
?? ??readonly name
?? ??declare -r name
???查看只读变量:
???? readonly –p
???位置变量:在脚本代码中调用通过命令行传递给脚本的参数
????$1, $2, ...:对应第1、第2等参数,shift [n]换位置
????$0: 命令本身
????$: 传递给脚本的所有参数,全部参数合为一个字符串
????$@: 传递给脚本的所有参数,每个参数为独立字符串
????$#: 传递给脚本的参数的个数
????$@ $
只在被双引号包起来的时候才会有差异
????set -- 清空所有位置变量

?10、 退出状态

??进程使用退出状态来报告成功或失败
??? 0 代表成功,1-255代表失败
??$? 变量保存最近的命令退出状态
??例如:
??? Ping 172.28.250.1
??? Echo $?

?11、 退出状态码

??Bash自定义退出状态码
??exit [n]:自定义退出状态码
??注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出 状态取决于exit命令后面的数字
??注意:如果未给脚本指定退出状态码,整个脚本的退出状态码 取决于脚本中执行的最后一条命令的状态码

?12、 算术运算

??Bash中的算术运算:help let
???+ ,-,*,/,%取模(取余),**(乘方)
??实现算术运算:
???(1) let var=算术表达式
???(2) var=$[算术表达式]
???(3) var=$((算术表达式))
???(4) var=$(expr arg1 arg2 arg3 ...)
???(5) declare –i var = 数值
???(6) echo ‘算术表达式’ | bc
????? 乘法符号有些场景中需要转义,如*
???Bash有内建的随机数生成器:$RSNDOM(0-32767)
?????echo $[$RANDOM%50] :0-49之间随机数

?13、 赋值

??增强型赋值
???+=, -=, *=, /=, %=
??let varOPERvalue
???例如:let count+=3
???自加 3后自赋值
??自增,自减:
??? let var+=1
??? let var++
??? let var -=1
??? et var--

?14、逻辑运算

??true, false
???1 ,0
?? 与:
??? 1 与 1 = 1
??? 1 与 0 = 0
??? 0 与 1 = 0
??? 0 与 0 = 0
?? 或:
???1 或 1 = 1
???1 或 0 = 1
???0 或 1 = 1
???0 或 0 = 0
??非:!
??? ! 1 = 0
??? ! 0 = 1
??短路运算:
???短路与
???? 第一个为0,结果必定为0
???? 第一个为1,第二个必须要参与运算
???短路或
???? 第一个为1,结果必定为1
???? 第一个为0,第二个必须要参与运算
???异或:^
????异或的两个值,相同为假,不同为真

?15、条件测试

??判断某需求是否满足,需要由测试机制来实现
??专用的测试表达式需要由测试命令辅助完成测试过程
??评估布尔声明,以便用在条件性执行中
???若真,则返回0
???若假,则返回1
??测试命令:
???test EXPRESSION
???[ EXPRESSION ]
???[[ EXPRESSION ]]
注意:表达式前后与中括号之间一定要有一个空格expression的意思是表达式

?16、条件性的执行操作符

??根据退出状态而定,命令可以有条件地运行
???&& 代表条件性的AND THEN(与)
??? || 代表条件性的OR ELSE(或)
??例如:
??? Grep -q dog /app/cc && echo 成功
??? Ping -c1 -W2 172.18.0.1 &> /dev/null && echo ping通了

?17、test命令

??长格式的例子:
???test "$A" == "$B" && echo "Strings are equal"
????若A=B ,则输出strings are equal
??? test “$A” -eq “$B” && echo "Integers are equal"
???? 若A不等于B,则输出integers are equal
?? 简写格式的例子:
??? [ "$A" == "$B" ] && echo "Strings are equal"
??? [ "$A" -eq "$B" ] && echo "Integers are equal"

?18、bash的数值测试

??-v VAR
???变量VAR 是否存在
??数值测试:
???-gt 是否大于
???-ge 是否大于等于
???-eq 是否等于
???-ne 是否不等于
???-lt 是否小于
???-le 是否小于等于
??字符串测试:
???== 是否等于
???> ascii码是否大于ascii码
???< 是否小于
???!= 是否不等于
??? =~ 左侧字符串是否能够被右侧的PATTERN所匹配
?????注意: 此表达式一般用于[[ ]]中;扩展的正则表达式
???-z "STRING“ 字符串是否为空,空为真,不空为假
???-n "STRING“ 字符串是否不空,不空为真,空为假
????(注意:用于字符串比较时的用到的操作数都应该使用引号)

?19、bash的文件测试(下列FILE均代表文件路径)

??存在性测试
??? -a FILE:同-e
??? -e FILE: 文件存在性测试,存在为真,否则为假
??存在性及类别测试
???-b FILE:是否存在且为块设备文件
???-c FILE:是否存在且为字符设备文件
???-d FILE:是否存在且为目录文件
???-f FILE:是否存在且为普通文件
???-h FILE 或 -L FILE:存在且为符号链接文件
???-p FILE:是否存在且为命名管道文件
???-S FILE:是否存在且为套接字文件
??文件权限测试
??? -r FILE:是否存在且可读
???-w FILE: 是否存在且可写
???-x FILE: 是否存在且可执行
??文件特殊权限测试:
???-u FILE:是否存在且拥有suid权限
???-g FILE:是否存在且拥有sgid权限
???-k FILE:是否存在且拥有sticky权限
??文件大小测试:
??? -s FILE:是否存在且非空
??文件是否打开:
???-t fd: fd表示文件描述符是否已经打开且与某终端相关
???-N FILE:文件自动上一次被读取之后是否被修改过
???-O FILE:当前有效用户是否为文件属主
???-G FILE:当前有效用户是否为文件属组
??双目测试:
???FILE1 -ef FILE2: FILE1与FILE2是否指向同一个设 备上的相同inode
???FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)
???FILE1 -ot FILE2: FILE1是否旧于FILE2

?20、bash的组合测试条件

??第一种方式:
???COMMAND1 && COMMAND2 并且
???COMMAND1 || COMMAND2 或者
???! COMMAND 非
????如:[[ -r FILE ]] && [[ -w FILE ]]
?? 第二种方式:
???EXPRESSION1 -a EXPRESSION2 并且
???EXPRESSION1 -o EXPRESSION2 或者
???! EXPRESSION
????必须使用测试命令进行
???示例:
????[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

三、使用read命令来接受输入

?使用read来把输入值分配给一个或多个shell变量
??-p 指定要显示的提示
??-s 静默输入,一般用于密码
??-n N 指定输入的字符长度N
??-d ‘字符’ 输入结束符
??-t N TIMEOUT为N秒
??read 从标准输入中读取值,给每个单词分配一个变量
??所有剩余单词都被分配给最后一个变量
??read -p “Enter a filename: “ FILE

四、BASH

?1、bash如何展开命令行

??把命令行分成单个命令词
??展开别名
??展开大括号的声明({})
??展开波浪符声明(~)
??命令替换$() 和 ``)
??再次把命令行分成命令词
??展开文件通配(* 、?、[abc]等等)
??准备I/0重导向()
??运行命令

?2、bash防止扩展

??1.反斜线(\)会使后面的特殊符号字符依然以字符串的形式输出,而不是输出特殊的含义,例如$可以用来调用变量的值,在前面加\则只输出$,而不会调用后面字符的变量值,但是一个\只能转义一个字符
??? $ echo Your cost: \$5.00
???Your cost: $5.00
??2.加引号来防止扩展
???单引号(’’)防止单引号内的所有字符的扩展
???双引号(””)也防止所有扩展,但以下情况例外:
?????$(美元符号) - 变量扩展
?????`(反引号) - 命令替换
?????\(反斜线) - 禁止单个字符扩展
?????!(叹号) - 历史命令替换

?3、bash的配置文件

?? Bash的配置文件会在每次用户登录时被系统读取,全局配置下的文件,所有用户通用,个人家目录下的配置文件则是用户自己的一些个性化配置
??按生效范围划分,存在两类:
???全局配置:
???? /etc/profile
???? /etc/profile.d/*.sh
???? /etc/bashrc
???个人配置:
???? ~/.bash_profile
????~/.bashrc

?4、shell登录两种方式

??1.交互式登录:

???(1) 直接通过终端输入账号密码登录
???(2) 使用“su - UserName” 切换的用户
????交互式登录读取配置文件的顺序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

??2.非交互式登录:

???(1)su UserName
???(2)图形界面下打开的终端
???(3)执行脚本
???(4)任何其它的bash实例
????执行顺序:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

?5、登录时配置文件的分类与作用

??1.按功能划分,存在两类

???Profile类和bashrc类
????Profile类:为交互式登录的shell提供配置
?????全局:/etc/profile, /etc/profile.d/*.sh
????? 个人:~/.bash_profile
?????功用:
??????(1) 用于定义环境变量
??????(2) 运行命令或脚本
???? Bashrc类:为非交互式和交互式登录的shell提供配置
?????全局:/etc/bashrc
?????个人:~/.bashrc
?????功用:
??????(1) 定义命令别名和函数
??????(2) 定义本地变量

?6、编辑配置文件生效

??修改profile和bashrc文件后需生效
??两种方法:
???1.重新启动shell进程
???2 . 或source
?????Source与 . 在当前shell下执行脚本,用来设置环境变量及别名,函数等
?????/bin/bash或路径方式执行脚本使子shell在执行,子shell可以继承父shell的环境变量,但在脚本中设置的变量,均不会影响父shell

?7、bash退出任务

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

?8、$-变量

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

五、判断语句

?1、单if语句

??语法格式:
??? if 条件 ;then
???? 命令块1(可以是多个命令)
??? else
????命令块2(可以是多个命令)
??? Fi
如果符合该条件,则执行命令块1处的命令不执行命令块2处的命令,如果条件不符合,则跳过命令块1处的命令不执行,直接执行命令块2处的命令,条件多为一个判断命令,返回值为0(true)执行命令块1,返回值为1(false)执行命令块2
??例如:
??? if $(id $1 &> /dev/null);then
???? echo "$1 alread exist"
???? exit 1
???else
????useradd $1
???fi

?2、多if语句

??语法格式:
??? If 条件1 ;then
???? 命令块1
??? Elif 条件2 ;then
???? 命令块2
??? Elif 条件3;then
???? 命令块3
???……
??? Elif 条件n;then
???? 命令块n
??? Else
???? 命令块n+1
??? If
执行顺序是,先判断条件1,返回值为true则执行命令块1,然后退出if语句
如果条件1,返回值为false,则继续判断条件2,返回值为true,则执行命令块2,然后退出if语句,若条件2 返回值为false,则继续判断条件3……,如果所有条件返回 值都为false,则执行else后面的命令块n+1,然后退出if语句
?? 例如:
??? #!/bin/bash
??? if [ $1 -lt 3 ];then
???? echo redhat
???elif [ $1 -eq 3 ];then
????echo green
???elif [ $1 -gt 3 -a $1 -lt 5 ];then
??? ?echo yellow
???else
???? echo white
???fi

?3、case语句

?? Case 变量 in
????变量值1)命令块1;;
????变量值2)命令块2;;
????变量值4)命令块3;;
????变量值n)命令块n;;
?? Esac
执行顺序是,先调用一个变量,然后判断变量值是否符合变量值1,如果相等,则执行命令块1,如果不符合则判断变量值2,……一直到变量值n,如果都不符合则 一条命令都不执行
??例如:
???case $1 in
????1)echo redhat;;
????2)echo yellow;;
????3)echo green;;
???? *)echo blue;;
??? Esac

六、 文件查找

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

?1、 locate查找

??1.查询系统上预建的文件索引数据库

???/var/lib/mlocate/mlocate.db

??2. 依赖于事先构建的索引

???索引的构建是在系统较为空闲时自动进行(周期性任务),管理 员手动更新数据库(updatedb)

??3. 索引构建过程需要遍历整个根文件系统,极消耗资源

??4.工作特点:

???查找速度快
???模糊查找
???非实时查找
???搜索的是文件的全路径,不仅仅是文件名
???可能只搜索用户具备读取和执行权限的目录

??5.locate命令的使用方法

??? Locate 选项word
????-i 不区分大小写的搜索
????-n N 只列举前N个匹配项目
????-r 正则 使用正则表达式来进行模糊查找
??? 例:
????Locate conf:搜索名称或路径中带有conf的文件
????Locate -r ‘\.conf$’ :使用正则表达式来搜索以“.conf”结尾的文件

?2、 find实时查找工具

??1. 实时查找工具,通过遍历指定路径完成文件查找

??2. 工作特点:

???查找速度略慢
???精确查找
???实时查找
???可能只搜索用户具备读取和执行权限的目录

??3. 语法

???Find [选项] 参数 [查找路径] [查找条件] [处理动作]
????查找路径:指定具体目标路径;默认为当前目录
????查找条件:指定的查找标准,可以文件名、大小、类型、 权限等标准进行;默认为找出指定路径下的所有文件
????处理动作:对符合条件的文件做操作,默认输出至屏幕

??4. 查找条件

???1、指搜索层级

????-maxdepth level 最大搜索目录深度,指定目录为第1级
????-mindepth level 最大搜索目录深度

???2、 根据文件名和inode查找:

???? -name “文件名称”:支持使用glob
??????*, ?, [], [^]
???? -iname "文件名称":不区分字母大小写
???? -inum n 按inode号查找
???? -samefile name 相同inode号的文件
???? -links n 链接数为n的文件
???? -regex "PATTERN":以PATTERN匹配整个文件路径字 符串,而不仅仅是文件名称
????例:
?????find -name snow.png 搜索名为snow.png的文件
?????find -iname snow.png 不分大小写地搜索名为snow.png、Snow.png、 SNOW.PNG等等的文件
?????find / -name “.txt” 搜索/下文件名以.txt结尾的文件
?????find /var –name “
log*” 在/var目录下搜索名字里包含log的文件

???3、 根据属主、属组查找:

???? -user USERNAME:查找属主为指定用户(UID)的文件
???? -group GRPNAME: 查找属组为指定组(GID)的文件
???? -uid UserID:查找属主为指定的UID号的文件
???? -gid GroupID:查找属组为指定的GID号的文件
???? -nouser:查找没有属主的文件
???? -nogroup:查找没有属组的文件
???? 例:
???? ?find -user joe -group joe 搜索被用户joe 以及组群joe所拥有的文件
???? ?find / -user joe -o -uid 500 在/目录下搜索属主为joe或属主的uid为500的文件

???4、根据文件类型查找

?????-type type(对应以下类型):
??????f: 普通文件
??????d: 目录文件
??????l: 符号链接文件
??????s:套接字文件
??????b: 块设备文件
??????c: 字符设备文件
??????p: 管道文件
????? 例:
???????find / -name shell -type f 搜索/目录下所有文件名为shell的普通文件

???5、组合条件:

????与:-a
????或:-o
????非:-not, !
????德·摩根定律:
?????(非 A) 或 (非 B) = 非(A 且 B)
?????(非 A) 且 (非 B) = 非(A 或 B)
????例:
?????!A -a !B = !(A -o B)
?????!A -o !B = !(A -a B)
????示例:
??????find -user joe -not -group joe 在当前目录下搜索属主是Joe但属组不是joe的所有文件及目录
??????find -user joe -o -user jane 在当前目录下搜索属主是joe或jane的所有文件及目录
??????find -not \( -user joe -o -user jane \) 搜索当前目录下属主既不是joe也不是Jane的所有文件及目录
??????找出/tmp目录下,属主不是root,且文件名不以f开头的文件
???????find /tmp \( -not -user root -a -not -name ‘f*‘ \) -ls
???????find /tmp -not \( -user root -o -name ‘f*‘ \) –ls

???6、排除目录

????示例:查找/etc/下,除/etc/sane.d目录的其它所有.conf后 缀的文件
?????find /etc -path ‘/etc/sane.d’ -a -prune -o -name “*.conf”
?????find /etc (–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ \) -a prune –o name “*.conf”

???7、根据文件大小来查找

????-size [+|-]#UNIT
?????常用单位:K,M,G c(byte)
????#UNIT: (#-1, #] (#:数字;unit:单位)
?????如:6k 表示(5k,6k]
????-#UNIT:[0,#-1]
?????如:-6k 表示[0,5k]
????+#UNIT:(#,∞)
?????如:+6k 表示(6k,∞)

???8、根据时间戳:

????以“天”为单位
????? -atime e [+|-]#,
?????#: [#,#+1)
?????+#: [#+1, ∞ ]
?????-#: [0,#)
?????-mtime
?????-ctime
???? 以“分钟”为单位
?????-amin
?????-mmin
?????-cmin

???8、根据权限查找:

????-perm [/|-]MODE
?????MODE: 精确权限匹配
?????/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配 即可,或关系,+ 从centos7开始淘汰
?????-MODE:每一类对象都必须同时拥有指定权限,与关系
?????0 表示不关注
?????find -perm 755 会匹配权限模式恰好是755的文件
?????只要当任意人有写权限时,find -perm +222就会匹配
?????只有当每个人都有写权限时,find -perm -222才会匹配
?????只有当其它人(other)有写权限时,find -perm -002才 会匹配

??5.处理动作

????-print:默认的处理动作,显示至屏幕
????-ls:类似于对查找到的文件执行“ls -l”命令
????-delete:删除查找到的文件
????-fls file:查找到的所有文件的长格式信息保存至指定文件中
????-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND 指定的命令,对于每个文件执行命令之前,都会交互式要求 用户确认
????-exec COMMAND {} \; 对查找到的每个文件执行由 COMMAND指定的命令
??????{}: 用于引用查找到的文件名称自身。{}与\之间必须有一个空格
???find传递查找到的文件至后面指定的命令时,查找到所有符合 条件的文件一次性传递给后面的命令
????例:find -type f -name ".sh" -exec chmod a+x {} \
???????在当前文件下查找出以.sh结尾的所有文件,并给她们加上执行权限
??????find -name "
.conf" -exec cp -i {} {}.bak \;
???????备份所有以conf结尾的所有文件并改名添加.bak这个扩展名

??6.参数替换xargs

????由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所有就有了xargs命令,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为arguments
????注意:文件名或者是其他意义的名词内含有空格符的情况
????有些命令不能接受过多参数,命令执行可能会失败,xargs可 以解决
????示例:
?????ls f\* |xargs rm
?????find /sbin -perm +700 |ls -l 这个命令是错误的
?????find /sbin -perm +7000 | xargs ls –l
?????find和xargs格式:find | xargs COMMAND

??7.find示例:

???? find -name “\.conf” -exec cp {} {}.orig \;
?????备份配置文件,添加.orig这个扩展名
???? find /tmp -ctime +3 -user joe -ok rm {} \;
?????提示删除存在时间超过3天以上的joe的临时文件
???? find ~ -perm -002 -exec chmod o-w {} \;
?????在你的主目录中寻找可被其它用户写入的文件
????find /data –type f -perm 644 -name “\
.sh” –exec chmod 755 {} \;
????find /home –type d -ls

七、 压缩、解压缩及归档工具

???compress/uncompress: .Z
???gzip/gunzip: .gz
???bzip2/bunzip2: .bz2
???xz/unxz: .xz
???zip/unzip
???tar
???cpio

?1、 Compress压缩工具

??compress srcfile 将源文件压缩成压缩包,源文件消失
??compress -v srcfile 或compress -v -d dstfile.Z 压缩或解压缩时显示详细信息
??compress -c srcfile > dstfile.Z 将源文件压缩成压缩包,源文件保留
??compress -d dstfile.Z 或 uncompress dstfile.Z 将压缩包解压成源文件,压缩包消失
??compress -d -c dstfile.Z > srcfile 或 zcat dstfile.Z > srcfile 将压缩包解压成源文件,压缩包保留

?2、 Gzip压缩工具

??gzip srcfile 将源文件压缩成压缩包,源文件消失
??gzip -c srcfile > dstfile.gz 将源文件压缩成压缩包,源文件保留
??gzip -d dstfile.gz 或gunzip dstfile.gz 将压缩包解压成源文件,压缩包消失
??gzip -d -c dstfile.gz > srcfile 或 zcat dstfile.gz > srcfile 将压缩包解压成源文件,压缩包保留
??gzip -# srcfile (#即1-9,表示压缩比,数字越大压缩比越高,默认为6)

?3、 Bzip2

??bzip2 srcfile 将源文件压缩成压缩包,源文件消失
??bzip2 -k srcfile 将源文件压缩成压缩包,源文件保留且权限不变
??bzip2 -c srcfile > dstfile.bz2 将源文件压缩成压缩包,源文件保留但权限根据umask值而改变
??bzip2 -d dstfile.bz2 或bunzip dstfile.bz2 将压缩包解压成源文件,压缩包消失
??bzip2 -k -d dstfile.bz2 或bunzip -k dstfile.bz2 将压缩包解压成源文件,压缩包保留且权限不变
??bzip2 -d -c dstfile.bz2 > srcfile 或 bunzip -c dstfile.bz2 > srcfile 将压缩包解压成源文件,压缩包保留但权限根据umask值而改变
??bzip2 -# srcfile (#即1-9,表示压缩比,数字越大压缩比越高,默认为9)
??bzcat dstfile.bz2 可以预览解压后的内容,配合> 也能解压,但权限会根据umask值而改变

?4、 Xz压缩工具

??Xz [option] ……file ……
???-k: keep, 保留原文件
???-d:解压缩
???-#:1-9,压缩比,默认为6
???xzcat: 不显式解压缩的前提下查看文本文件内容

?5、 Zip打包压缩工具

??zip -r dstfile.zip srcfile 打包srcfile并压缩成dstfile
??zip scrfile 压缩srcfile文件,源文件不存在
??zip -r config.zip /etc/passwd /etc/group /etc/shadow /etc/gshadow 打包压缩多个源文件,源文件以空格相隔
??cat /var/log/messages | zip messages – 把/var/log/messages里面的内容压缩给当前目录下的messages,源文件依旧存在
??unzip config.zip 解包解压缩 压缩包不存在
??unzip -p conf.zip > config1 解压config.zip里的内容到config1,压缩文件依旧存在

?6、 Tar工具

??tar -tf mage.tar.xz 预览压缩包的文件列表
??tar -rf mage.tar /path/newfile 往tar包中增强文件(注意只能对tar包增加文件,而不能对压缩包增加)
??tar -cf mage.tar filename1 filename2 [filenameN] 将多个文件打包至mage.tar
??tar -zcf mage.tar.gz filename1 filename2 [filenameN] 将多个文件打包并用gzip压缩为mage.tar.gz
??tar -jcf mage.tar.bz2 filename1 filename2 [filenameN] 将多个文件打包并用bzip2压缩为mage.tar.bz2
??tar -Jcf mage.tar.xz filename1 filename2 [filenameN] 将多个文件打包并用xz压缩为mage.tar.xz
??tar -xf mage.tar 解压tar包的所有文件到当前目录
??tar -xf mage.tar.xz filename 仅将压缩包中的其中一个文件filename解压到当前目录
??tar -zxf mage.tar.gz 解压gz的压缩包到当前目录
??tar -jxf mage.tar.bz2 解压bzip2的压缩包到当前目录
??tar -Jxf mage.tar.xz 解压xz的压缩包到当前目录
??tar -zxf mage.tar.gz -C /tmp 解压gz的压缩包到/tmp目录
??tar -zvxf mage.tar.gz 解压gz的压缩包到当前目录并显示详细过程
??tar zcvf mage.tar.gz -T yasuolist.txt -X paichu.txt
???-T 指定需要打包并压缩的文件列表,每个文件路径一行
???-X 指定要排除的文件列表,每个文件一行

?7、 分割合并压缩包

??split -b 2K -d etc.tgz 4 将压缩包以2K为单位分割为4份
??cat 40* > mage.tgz 将以40开头命名的多个分割包合并为mage.tgz

?8、 Cpio

??复制 从或到文件
??cpio命令是通过重定向的方式将文件进行打包备份,还原恢复 的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。
??cpio [选项] > 文件名或者设备名 :
??cpio [选项] < 文件名或者设备名
选项
??-o 将文件拷贝打包成文件或者将文件输出到设备上
??-i 解包,将打包文件解压或将设备上的备份还原到系统
??-t 预览,查看文件内容或者输出到设备上的文件内容
??-v 显示打包过程中的文件名称。
??-d 解包生成目录,在cpio还原时,自动的建立目录
??-c 一种较新的存储方式
?? 例:
??? 将etc目录备份:
????find ./etc -print |cpio -ov >etc.cpio
???内容预览
????cpio –tv < etc.cpio
???要解包文件
????cpio –idv < etc.cpio

七、 文本处理sed

??Stream EDitor, 行编辑器
??sed是一种流编辑器,它一次处理一行内容。处理时,把当前 处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循 环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间 清空模式空间,但不会清空保留空间。这样不断重复,直到 文件末尾。文件内容并没有改变,除非你使用重定向存储输 出。

?1、功能:

??主要用来自动编辑一个或多个文件,简化对文件的反复 操作,编写转换程序等

?2、用法

??sed [option]... ‘script‘ inputfile...
???常用选项
????-n:不输出模式空间内容到屏幕,即不自动打印
????-e: 多点编辑
????-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
????-r: 支持使用扩展正则表达式
????-i.bak: 备份文件并原处编辑
??? Script:
????Script ‘地址 编辑命令’,与vim的扩展命令行里面的一些格式有些相似
????地址定界:
?????(1) 不给地址:对全文进行处理
?????(2) 单地址:
??????#: 指定的行
??????/pattern/:被此处模式所能够匹配到的每一行
?????(3) 地址范围:
??????#1,#2 从第#1行到第#2行
??????#1,+#2 从第#1行开始,到从第#1行数#2行结束
??????/pat1/,/pat2/ 从第一次匹配到pat1至第一次匹配到pat2
??????#,/pat1/ 从第#行开始至第一次匹配到path1为止
?????(4) ~:步进 1~2 奇数行 2~2 偶数行
????编辑命令:
????? d: 删除模式空间匹配的行,并立即启用下一轮循环
?????p:打印当前模式空间内容,追加到默认输出之后
?????a [\]text:在指定行后面追加文本 支持使用\n实现多行追加
?????i [\]text:在行前面插入文本
?????c [\]text:替换行为单行或多行文本
?????w /path/somefile: 保存模式匹配的行至指定文件
?????r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后
?????=: 为模式空间中的行打印行号
     !:模式空间中匹配行取反处理
     s///:查找替换,支持使用其它分隔符 s@@@,s###
     替换标记
      g: 行内全局替换
      p: 显示替换成功的行
      w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

 3、 示例:

  Sed -n ‘2p’ cc 只显示第2行
  sed -n ‘1,4p‘ cc 显示1到4行
  sed -n ‘1,+2p‘ cc 显示1至3行
  sed -n ‘/root/p‘ cc 显示匹配到root的行
  sed -n ‘2,/root/p‘ cc 显示从第二行,至第一个次匹配到root的行
  sed -n ‘/^$/=‘ cc 显示空行的行号
  sed -n -e ‘/root/p‘ -e ‘/cat/=‘ cc 显示匹配到root的行以及匹配到cat的行号
  sed ‘/root/i\superman’ /etc/passwd 在所有匹配到root的行前插入superman
  sed ‘/root/c\superman’ /etc/passwd 代替行
  sed ‘/root/a\superman’ /etc/passwd行后

续写vim,shell脚本基础编辑,read命令,if与case判断语句,文件查找方式,压缩与解压,

标签:随机   添加   sgid   $2   第一个   编程   进程   系统管理   状态   

原文地址:http://blog.51cto.com/13570214/2065850

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!