寒假-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的主要内容,如果未能解决你的问题,请参考以下文章