1.vim的工作特性可以自己制定:
注意:在末行模式下的设定,仅对当前vim进程有效;
永久有效:
全局:/etc/vimrc
用户个人:~/.vimrc 需要自己创建个新文件
优先级排序:用户个人>全局
等同于:作用范围越小 优先级越高
2.定制的一些功能
1、行号
显示:set number, 简写为set nu
取消显示: set nonu
2、括号匹配高亮
匹配:DoMatchParen
取消:NoMatchParen
3、自动缩进
启用:set ai
禁用:set noai
4、高亮搜索
启用:set hlsearch
禁用:set nohlsearch
5、语法高亮
启用:syntax on
禁用:syntax off
6、忽略字符大小写
启用:set ic
禁用:set noic
7.设置tab键缩进4个字符
set tabstop=4 简写 ts=4
如果设置为空格需要添加一行
set expandtab
获取帮助:内置的帮助文档 用法就是在 末行模式下输入
:help
:help subject
3.bash脚本编程之算术运算
+,-,*,/, %
算术运算格式:
(1) let var=算术运算表达式 ;例如:let result=1+1
(2) var=$[算术运算表达式] 例如:result=$[1+1]
(3) var=$((算术运算表达式)) 例如:result=$((1+1)
(4) var=$(expr $ARG1 $OP $ARG2)
**注意:彼此之间必须有空格**
例如 expr 1 + 1
注意:乘法符号在有些场景中需要使用转义符;
4.文件查找
在文件系统上查找符合条件的文件;
实现工具:locate, find
需要安装:yum install mlocate <==locate的
5.locate命令:
5.1作用:
依赖于事先构建好的索引库;
系统自动实现(周期性任务);
手动更新数据库(updatedb);
5.2工作特性:
查找速度快;
模糊查找;
非实时查找;
5.3语法
locate [OPTION]... PATTERN...
5.4参数
-b:只匹配路径中的基名;
-c:统计出共有多少个符合条件的文件;
-r:BRE 可以基于基本正则表达式来实现正则表达式
5.5例子:
#locate -c demo 89 \^ .* \$
**注意:索引构建过程需要遍历整个根文件系统,极消耗资源;**
find命令:
作用:
实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;
工作特性:
查找速度略慢;
精确查找;
实时查找;
语法:
find [OPTIONS] [查找起始路径] [查找条件] [处理动作]
1.查找起始路径:指定具体搜索目标起始路径;默认为当前目录;
2.查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、
权限等等标准进行;默认为找出指定路径下的所有文件;
3.处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;
4.查找条件:
表达式:选项和测试
5.测试:结果通常为布尔型("true", "false")
6.根据文件名查找:
-name name 文件符合name的文件
-iname name 不区分文件名中的大小写
其中pattern 支持glob风格的通配符;不支持正则表达的写法
*, ?, [], [^]
-regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非其名;
例子:
[root@localhost ~]# find /etc/ -name "pass*"
/etc/passwd
/etc/selinux/targeted/modules/active/modules/passenger.pp
/etc/pam.d/passwd
/etc/pam.d/password-auth-ac
/etc/pam.d/password-auth
/etc/openldap/certs/password
/etc/passwd-
7.根据文件从属关系查找:
(1)-user USERNAME:查找属主指定用户的所有文件;
例如:
[root@localhost ~]# find -user lisi
./txt.a
(2)-group GRPNAME:查找属组指定组的所有文件;
例如:
[root@localhost ~]# find -group lisi
./txt.a
(3)-uid UID:查找属主指定的UID的所有文件;
例如:
[root@localhost ~]# id lisi
uid=4007(lisi) gid=4007(lisi) 组=4007(lisi)
[root@localhost ~]# find -uid 4007
./txt.a
(4)-gid GID:查找属组指定的GID的所有文件;
例如:
[root@localhost ~]# id lisi
uid=4007(lisi) gid=4007(lisi) 组=4007(lisi)
[root@localhost ~]# find -gid 4007
./txt.a
注意:在整个系统中查找既没有属主又没有属组的文件
(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)
底下的-nouser和-nogroup <====查找完执行的参数
# -print //默认情况下的动作
# -ls //查找到后用ls 显示出来
# -ok [commend] //查找后执行命令的时候询问用户是否要执行
# -exec [commend] //查找后执行命令的时候不询问用户,直接执行
(5)-nouser:查找没有属主的文件;
(6)-nogroup:查找没有属组的文件;
8.根据文件的类型查找:
例如:find /dev -type b -ls
-type TYPE:
f: 普通文件
d: 目录文件
l:符号链接文件
b:块设备 文件
c:字符设备文件
p:管道文件
s:套接字文件
9.组合测试:
与:-a: 默认组合逻辑;
&与:-a:连接两个不同的条件(两个条件必须同时满足)
|或:-o:连接两个不同的条件(两个条件满足其一即可)
!非:-not:对条件取反
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
10.练习:
1、找出/tmp目录下属主为非root的所有文件;
find /tmp -not -user root -ls
2、找出/tmp目录下文件名中不包含haha字符串的文件;
dev]# find /tmp -not -iname "*haha*" -ls
3、找出/tmp目录下属主为非root,而且文件名不包含haha字符串的文件;
find /tmp -not -user root -a -not -iname "*haha*" -ls
11.根据文件的大小查找:
-size [+|-]#UNIT
常用单位:k, M, G
#UNIT:(#-1, #)
-#UNIT:[0,#-1]
+#UNIT:(#, oo) 不包含#
12.根据时间戳查找:
以“天”为单位:
-atime [+|-]#
#:[#, #-1)
-#:(#, 0]
+#:(oo, #-1]
-mtime
-ctime
例如:我们可以使用stat命令来查看一个文件的时间信息 如下:
[root@localhost ~]# stat /etc/passwd
文件:"/etc/passwd"
大小:1476 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:34596954 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2019-07-22 17:00:28.626072153 +0800
最近更改:2019-07-22 16:59:56.787070446 +0800
最近改动:2019-07-22 16:59:56.788070446 +0800
创建时间:-
#find /tmp –atime +3 //表示查找在三天内没有访问过的文件
#find /tmp -atime -3 //表示查找在三天内访问过的文件
所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”
“最近一次内容修改时间” “最近一次属性修改时间”,这里的atime的
单位指的是“天”,amin的单位是分钟
13.以“分钟”为单位:
-amin :n分钟内被访问
-cmin :n分钟内被修改
-mmin:
查找文件更新日时在距现在时刻二分以内的文件
#find ./ -mmin -2
查找文件更新日时在距现在时刻二分以上的文件
#find ./ -mmin +2
查找文件更新日时在距现在时刻一分以上二分以内的文件
#find ./ -mmin 2
14.根据权限查找:
-perm [/|-]mode
mode:精确权限匹配;
/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;
9位权限之间存在“或”关系;
-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
9位权限之间存在“与”关系;
例如:
查找权限为644的文件或目录(需完全符合)
#find ./ -perm 664
查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
#find ./ -perm -664
查找用户有写权限或者组用户有写权限的文件或目录
#find ./ -perm /220
#find ./ -perm /u+w,g+w
#find ./ -perm /u=w,g=w
查找所有者权限有读权限的目录或文件
#find ./ -perm -u=r
查找用户组权限有读权限的目录或文件
#find ./ -perm -g=r
查找其它用户权限有读权限的目录或文件
#find ./ -perm -o=r
15.处理动作:
-print:输出至标准输出;默认的动作;
-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
-delete:删除查找到的文件;
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
-exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作不需要用户进行确认;
例如:
查当前目录下的所有普通文件
#find . -type f -exec ls -l {} \;
-rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README
查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出
**注意:find传递查找到的文件路径至后面的命令时,是先查找出
所有符合条件的文件路径,并一次性传递给后面的命令;**
但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:
过滤: xargs 过滤器
find | xargs COMMAND
https://www.runoob.com/linux/linux-comm-xargs.html
练习:
1、查找/var目录下属主为root,且属组为lizi的所有文件或目录;
~]# find /var -user root -a -group lizi -ls
2、查找/usr目录下不属于root, bin或usr的所有文件或目录;用两种方法;
~]# find /usr -not -user root -a -not -user bin -a -not -user usr
~]# find /usr -not \( -user root -o -user bin -o -user usr \) -ls
3、查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是usr用户的文件或目录;
~]# find /etc -mtime -7 -a -not \( -user root -o -user usr \) -ls
~]# find /etc -mtime -7 -a -not -user root -a -not -user usr -ls
4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录;
~]# find / \( -nouser -o -nogroup \) -atime -7 -ls
5、查找/etc目录下大于1M且类型为普通文件的所有文件;
~]# find /etc -size +1M -type f -exec ls -lh {} \;
6、查找/etc目录下所有用户都没有写权限的文件;
~]# find /etc -not -perm /222 -a -not -type d$:
7、查找/etc目录至少有一类用户没有执行权限的文件;
~]# find /etc -not -perm -111 -type f -ls
8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件;
~]# find /etc -perm -113 -type f -ls