查找模块
1. locate : 非实时查找(数据库查找)
实时查找: find
locate 查询是建立在系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
索引的构建是在系统较为空闲时自动进行(周期性任务); 管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统, 极度消耗资源。
2. locate
-i 不区分大小写
-r '正则表达式'
locate 支持模糊查询
比如: locate pass 只要文件名中有pass就行, 这一点和find的命令的区别很大, find命令必须要搭配通配符, 表示一个完整的路径 *pass*
3.locate 的优势: 1>.运行速度非常快 2>.查找固定的文件(比如配置文件的话)效果非常好。
4. find : 实时查找、功能更加的强大、可以匹配到的查询条件更多。
5.find [OPTION] … [查找路径] [查找条件] [处理动作]
查找条件:
1>. 根据文件名和inode查找
-name 必须是个完整的路径, 不支持模糊查询
如果有通配符话的, 必须用双引号括起来
-iname 忽略大小写
-inum n 按inode号查找
-samefile name 指向该文件硬链接数
-regex "PATTERN" 以PATTERN匹配整个条件路径字符串,而不仅仅是文件名称
2>. 根据属组、属主查找:
-user
-group
-uid
-gid
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
3>. 查找文件类型查找
-type TYPE:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b:块设备文件
c: 字符设备文件
p: 管道文件
4>. 组合条件:
find调用多个条件的时候,尤其当你后面还要加操作命令的话, 一定要记得用双引号()括起来。双引号必须通过\转译。并且双引号的两边必须有空格。
什么情况需要用用双引号:1>用到德摩根定律 2>.多个判断条件时, 并且后面跟上了操作命令。
与: -a 多个条件时,默认就是与操作
或: -o 多个条件时,默认是或操作
比如: find -user zhangsan -o -type d
非: -not ,!
find -not -user root -a -type f
./pp1
find ! -user root -a -type f
./pp1
5>. 查找条件:
-size [+-]#UNIT
K M G
#UNIT (#-1,#]
-#UNIT [0,#-1]
+#UNIT (#,无群大)
+-# 表示一个完全的路径
+:>#到无穷大 #: (,#-1,#] -#: 负无穷->#-1
根据文件大小查找文件在实际过程中, 用来查找大文件.
find /tmp -size +1G // 用来查找/tmp目录下文件大小大于1G的文件
6>. 根据时间戳:
atime [+|-]#.
#: [#,#+1]
+#: [#+1,…]
-#: [0,#)
mtime:
ctime:
以"分钟"为单位:
-atime
-mtime
-ctime
// 用来查询某段时间修改过的配置文件
find -mtime -10 /
查看10分钟内修改过的文件
7>. 根据权限查找:
-perm [/|-]MODE
/MODE 只要3种对象必须有一种权限对上就行了
-MODE 三种对象在权限上都必须对上
以上权限超了是没有没有关系的, 比如指定r, 你是rw, 这肯定是可以的
6. 处理动作:
-ls == ll
-print 默认动作
-delete
-fls file 指定到相应的文件中
-ok COMMAND {} \; 交互式的
-exec COMMAND {} \; 非交互式的 {} 表示你找到的文件
find xxx | xargs COMMAND
例子:find /testdir -name "passwd" | xargs chmod +x
效果是查找出的命令会默认写到COMMAND
7. 德摩根定理:
!(A and B) =! A or !B
!(A or B) = !A and !B
8. 排除指定目录:
find /etc/ -path '/etc/sane.d' -a -prune -o -name "*.conf" | grep "sane"
-path '/etc/sane.d' -a -prune 排除该目录
上面的选项和-o命令搭配使用, 指定判定条件。
压缩模块
1. comperss 压缩
uncomperss 解压缩
2. gzip [OPTION] … FILE …
-d: 解压缩, 相当于gunzip
-c: 将压缩或压缩的结果输出至标准输出
-#: 1-9, 指定压缩比, 值越大压缩比例越大
zcat : 不显示解压缩的前提下查看文本文件内容
比如:压缩指令
gzip file // 原文件被删除
gzip -c file > file.gz // 保留原文件
解压缩:
gzip -d file.gz
gunzip file.gz // 删除压缩文件
zcat file.gz > file // 保留压缩文件
3. bzip2/bunzip2/bzcat
bzip2 [OPTION] … FILE …
-k : keep, 保留原文件
-d: 解压缩
-#: 1-9 压缩比,默认为6
bzcat : 不显示压缩的前提下查看文本文件内容
压缩:
bzip2 file // 删除原文件
bzip2 -k file // 保留原文件
解压缩:
bunzip2 -k 压缩文件 // 保留压缩文件
bzip2 -d 压缩文件
bzcat 压缩文件 > 文件, 保留压缩文件
4. xz : 新的压缩技术
5.zip/unzip // 可以打包压缩, 可以压缩目录
-r: 用来指定压缩后文件名,如果后面没有指定.zip结尾, 默认自动添加.zip为结束符。
打包压缩:
zip -r sysconfig sysconfig/
cat /var/log/messages | zip message –
解包解压缩:
unzip sysconfig.zip
unzip -p message.zip > message
随记
1. . source bash 绝对路径执行 4者的区别:
. source
这两种一般用来执行系统的脚本配置文件。执行后脚本中的变量是可以在当前shell中运行的。
bash 绝对路径
bash 是由当前shell子shell执行, 所以脚本中的变量是无法在当前shell中运行。
2. vim 编辑文档的时候, 如何往tab键变为4个空格, 在命令扩展模式,编辑tabstop
:tabstop=5 // 就将tab键变为5个空格。
3. 无论是if 还是elif 后面都是 ; then, 这个模式是固定的, 只有else后面是不需要加任何东西的。
4.case 变量 in 第一句后面不需要:
值1): 值是支持通配符的
分支
;;
值2):
分支
;;
…
esac
5. 在shell编程中, 如果只是单纯的为了执行某条命令或则是要把根据这条命令的是否执行成功而去做出相应的操作的话, 是不需要加 反引号 “
只有想要将执行的结果赋予变量的时候, 需要加反引号 “
6. 虽然在shell编程中, 命令的执行的结果是0或则是非0, 但是这些值是不能直接被if for 语句调用。
7. grep -i xxx 忽略大小写。
8. [[ $1 =~ 正则表达式 ]] 正则表达式是不需要加"", 双引号的。加了, 就会报错。 这个功能蛮重要。
9. 用来匹配字符串 [[ 变量 =~ 正则表达式 ]]
10. [[]] 双括号中是不支持 -a -o 选项的。 条件与 条件或
11. 文件测试的功能非常强大, 一般性的要求都是可以直接返回直接去判断的。
12. 用来抽取文本中的特定的一段的内容的时候, 一直使用sed命令分组替换,其实这样很费事,如果可以通过grep -o 抽取出来是很方便的。
13. expr length 字符串 // 可以用来求字符串的长度
14./proc 目录下, 有很多数字信息, 这些都是内存上进程变化的数据, 这些数据find命令是不可以查找的。
15. usermod -ou uid号 用户名
// 忽略uid重复, 设置相同uid的用户。 如果设置了相同的uid, 后面设置的用户其实就是个傀儡, 这个用户是可以访问,但是访问这个用户其实访问同UID的用户。
16. 时间戳:
atime: 上次被查看的时间
mtime: 上次被编辑的时间
ctime: 上次元数据变化的时间
atime : 读取文件的话, atime时间不会马上改变, 当atime这个时间比mtime早的话,atime会改变。 还有一种是当aitme时间操作规定的时间的话,atime会也会改变。
17. 安装外界包的时候, 大部分是先打包, 然后将包压缩, 大部分的后组是.tar.gz, 或则是 .tar.bz2。
20.Windows默认使用的zip软件压缩文件, 这是Windows系统自带的软件, 右击文件,发送到zip管理工具, 就压缩了。
作业:
1、查找/var目录下属主为root,且属组为mail的所有文件
1. find /var -user root -group mail
2、查找/var目录下不属于root、lp、gdm的所有文件
2.find /var ! \( -user root -user lp -user gdm \)
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
3.find /var -mtime -7 -not -user root -not -user postfix
find /var -mtime -7 -not (\ -user root -or -user postfix \)
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
4. find / -nouser -nogroup -mtime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件
5. find /etc -size +1M -type f
6、查找/etc目录下所有用户都没有写权限的文件
6. find /etc -not -perm /222
7、查找/etc目录下至少有一类用户没有执行权限的文件
find /etc -not -perm -222
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
8. find /etc/init.d -perm -113
find /etc/init.d/ -perm -111 -perm 002
原创文章,作者:458813466,如若转载,请注明出处:http://www.178linux.com/34886