vim--find--bash---作业

 

Vim编辑器

      

       全屏幕的编辑器:VIM

              vi:visual interface

 

       sed:行编辑器

 

       vi, viiMproved

 

       vim:

              模式化:

                     编辑模式:命令模式

                     输入模式:

                     末行模式:

 

              编辑模式 --> 输入模式:

                     i:insert,

                     aappend,

                     onew line,

                     I:行首

                     A:行尾

                     O:上方新建行

 

              输入模式 --> 编辑模式:

                     ESC

 

              编辑模式 --> 末行模式:

                     :

 

              末行模式 --> 编辑模式

                     ESC

 

       打开vim:

              #vim

              #vim /PATH/TO/SOMEFILE

                     +##为行号;

                     +/PATTERN

 

       关闭vim

              :q

              :q!

              :wq

              :x

 

              ZZ:保存退出

 

       光标跳转:

              字符间跳转:

                     h:

                     l:

                     j:

                     k:

 

                     #COMMAND:

 

              单词间跳转:

                     w:后单词的词首

                     e:当前或后一个单词的词尾;

                     b:当前或前一单词的词首;

 

                     #COMMAND

 

              行内跳转:

                     ^:跳转至行首的第一个非空白字符;

                     0:跳转至行首;

                     $:跳转至行尾;

 

              行间移动:

                     #G:

                     1G,gg

                     G

 

              句间移动:

                     )

                     (

 

              段落间移动:

                     }

                     {

 

       编辑命令:

 

              字符编辑:

                     x:删除光标所在处的字符

                     #x:

 

                     xp:

 

                     r:替换光标所在处的字符;

 

              删除命令:

                     d:

                            d^

                            d$

                            d0

 

                            dw,de, db

 

                     dd:

 

                     #COMMAND

 

                     注意:删除的内容会被vim编辑器保存至缓冲区当中;

 

              粘贴:p (paste, put)

                     如果此复制或删除的内容不是一个完整行

                            p:粘贴至当前光标所在处后面;

                            P:粘贴至当前光标所在处前面;

 

                     如果复制的内容是完整行(可不止一行)

                            p:粘贴至当前光标所在行下方;

                            P:行上方;

 

              复制命令:y, yank

                     y

                            y$,y^, y0

                            ye,yw, yb

 

                     yy:复制行

 

                     #COMMAND

 

              改变命令:c, change

                     c$,c^, c0

                     cb,ce, cw

                     cc:

 

                     #COMMAND

 

       撤消此前的编辑操作:

              u:undo

                     撤消此前编辑操作;

 

                     #u

 

              Ctrl+r

                     恢复此前的撤消操作

 

              .: 重复前一个编辑操作

 

       翻屏操作:

              Ctrl+f:向后一屏;

              Ctrl+b:向前一屏;

 

              Ctrl+d:向后半屏

              Ctrl+u:向前半屏

 

       vim内建教程:

              vimtutor

 

       vim的末行模式

 

              (1)地址,定界

                     :start_pos,end_pos

                            #:第#行;

                            #,#

                            #,+#

                                   .:当前行

                                   $:最后一行

                            %:全文,相当于1,$

 

                            /pat1/:第一次被此模式所匹配到的行;

                            #,/pat1/

                            /pat1/,/pat2/

 

                     后可跟编辑命令:

                            d,y

                            w,r

 

              (2)查找

                     /PATTERN:向尾部进行

                     ?PATTERN:向首部进行

                            n:与命令同方向

                            N:与命令反方向

 

              (3)查找替换

                     s:在末行模式下,在地址定界的范围内完成查找替换操作;

 

                            s/要查找的内容/替换为的内容/修饰符

                                   要查找的内容:可使用模式

                                   替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;

                                          \1,\2, ...

                                          &:引用“要找的内容”匹配到的整个内容;

                                   修饰符:

                                          i:忽略大小写

                                          g:全局替换

 

                            /:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/

                                   分隔符可替换为其它字符:例如@,#等;

 

       多文件模式:

              vimFILE1 FILE2 ...

                     :next

                     :first

                     :prev

                     :last

 

                     :wqall

                     :q!all

 

       多文件窗口分割:

              vim-o|-O FILE1 FILE2 ...

 

              Ctrl+w,ARROW

 

       单文件窗口分割:

              Ctrl+w,s: split, 水平分割

              Ctrl+w,v: vertical, 垂直分割

 

       定制vim的某些工作特性:

              (1)行号

                     显示:set nu

                     禁用:set nonu

              (2)括号匹配

                     显示:set sm

                     禁用:set nosm

              (3)自动缩进:

                     setai

                     setnoai

              (4)高亮搜索

                     sethlsearch

                     setnohlsearch

              (5)语法着色

                     syntaxon

                     syntaxoff

              (6)忽略字符大小写

                     setic

                     setnoic

 

              :help获取帮助

              :helpSUBJECT

 

       特性设定的永久生效方式:

              全局配置文件:/etc/vimrc

              用户个人的配置文件:~/.vimrc

 

find命令

 

文件查找:

       在文件系统上查找符合条件的文件的过程;

 

       文件查找:locate, find

              locate:非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(updatedb);查找速度快;模糊查找;

              find:实时查找;查找速度略慢;精确查找;

 

       find命令:

              find[OPTION]... [查找路径] [查找条件] [处理动作]

                     查找路径:默认为当前路径;

                     查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;

                     处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;

 

              查找条件:

                     根据文件名进行查找:

                             -name "文件名称": 支持使用glob

                                  *,?, []

                             -iname "文件名称":不区分字符大小写,支持使用glob

 

                             -regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;

 

                     根据属主、属组查找:

                            -userUSERNAME: 查找属主为指定用户的文件;

 

                            -groupGROUPNAME:

 

                            -uidUserID: 查找文件的属主指定uid的文件;

                            -gidGroupID:

 

                            -nouser:查找没有属主的文件;

                            -nogroup:查找没有属组的文件;

 

                     根据文件类型进行查找:

                            -typeTYPE

                                   f:普通文件

                                   d:目录

                                   l:符号链接

                                   b:块设备

                                   c:字符设备

                                   p:命名管道

                                   s:套接字

 

                     组合查找条件:

                            与条件:-a

                            或条件:-o

                            非条件:-not, !

 

                            !A-o !B = !(A -a B)

                            !A-a !B = !(A -o B)

 

                     根据文件大小来查找:

                            -size[+|-]#UNIT

                                   单位:k, M, G

 

                                   #UNIT:(#-1,#]

                                   +#UNIT:(#,+oo)

                                   -#UNIT[0,#-1]

 

                     根据时间戳:

                            以“天”为单位

                                   -atime[+|-]#

                                          #[#,#+1)

                                          +#:[#+1,oo]

                                          -#:[0,#)

                                   -mtime

                                   -ctime

 

                            以“分钟”为单位

                                   -amin

                                   -mmin

                                   -cmin

 

                     根据权限:

                            -perm[/|-]MODE

                                   MODE:精确权限匹配

                                   /MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;

                                          /400

                                   -MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;

 

              处理动作:

                     -print:默认处理动作

                     -ls:类似于对查找到的每个文件做"ls -l"的操作;

                     -delete:删除查找到的文件;

                     -fls/path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;

 

                     -okCOMMAND {} \;

                            对每个文件执行指定的命令之前需要用户事先确认;

                     -execCOMMAND {} \;

                            无需用户确认;

 

Linux文件系统上的特殊权限

      

       权限模型:

              u,g, o

                     r,w, x

 

       进程的安全上下文:

              前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;

              (1)用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;

              (2)程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;

              (3)进程拥的访问权限,取决其属主的访问权限:

                     (a)进程的属主,同文件属主,则应用文件属主权限;

                     (b)进程的属主,属于文件的属组,则应用文件属组权限;

                     (c)则应用其它权限;

 

       SUID

              (1)任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;

              (2)启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID

 

              权限设定:

                     chmodu+s FILE...

                     chmodu-s FILE...

 

              注意:

                     s:属主原本拥有x权限;

                     S:属主原本无x权限;

 

       SGID

              默认情况下,用户创建文件时,其属级为此用户所属的基本组;

              一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;

 

              权限设定:

                     chmodg+s FILE...

                     chmodg-s FILE...

 

       Sticky:

              对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;

 

              权限设定

                     chmodo+t FILE...

                     chmodo-t FILE...

 

       SUID,SGID, STICKY

              000  0

              001  1

              010  2

              011  3

              100  4

              101  5

              110  6

              111  7

 

              chmod4777 FILE

              chmod3755 DIR

 

bash环境配置:

      

       配置文件,生效范围划分,存在两类:

              全局配置:

                     /etc/profile,/etc/profile.d/*.sh

                     /etc/bashrc

              个人配置:

                     ~/.bash_profile

                     ~/.bashrc

 

       按功能划分,存在两类:

              profile类:为交互式登录的shell提供配置

                     /etc/profile,/etc/profile.d/*.sh

                     ~/.bash_profile

 

                     功用:

                            (1)定义环境变量,例如PATHPS1

                            (2)运行命令或脚本

 

              bashrc类:为非交互式登录shell提供配置

                     /etc/bashrc

                     ~/.bashrc

 

                     功用:

                            (1)定义命令别名;

                            (2)定义本地变量;

 

       变量:内存空间,变量名

              类型:

                     环境变量:作用范围当前shell进程及其子进程

                     本地变量:作用范围当前shell进程

                     局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)

 

                     位置变量:$1, $2

                     特殊变量:$?

 

              变量定义方式:

                     bash内置变量:可直接调用,内置了许多环境变量,例如PATH

                     自定义变量:

                            变量赋值:变量名=

 

              bash弱类型:

                     变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;

 

                            12024bits

                            120: 8bits

 

       定义本地变量:

              name=value

 

              查看:set

 

       定义环境变量:

              exportname=value

              declare-x name=value

 

              查看:env, printenv, export

 

       撤消变量:

              unsetname

 

       引用变量:

              ${name},$name

 

       bash中的引用符号:

              '':强引用,变量替换不会发生

              "":弱引用

              ``:命令引用

 

       shell登录类型:

              交互式登录:

                     直接通过终端进行的登录;

                     通过su -l Username命令实现的用户切换;

 

              非交互式登录:

                     图形界面下打开的命令行窗口;

                     执行脚本;

                     suUsername;

 

       配置文件作用次序:

              交互式登录:

                     /etc/profile--> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc -->/etc/bashrc

 

              非交互式登录:

                     ~/.bashrc--> /etc/bashrc --> /etc/profile.d/*.sh

 

       编辑配置文件定义的新配置如何生效?

              (1)重新登录;

              (2)让当前shell进程去重新读取指定的配置文件;

                     source/PATH/TO/SOMEFILE

                     ./PATH/TO/SOMEFILE

                     注意:副作用

 

练习

练习一:

复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;

[root@yy ~]# cp /etc/grub.conf /tmp
[root@yy ~]# vim /tmp/grub.conf

在末行模式下输入:%s/^[[:space:]]//g

vim--find--bash---作业_第1张图片

练习二:

复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

[root@yy ~]# cp /etc/rc.d/init.d/functions /tmp/
[root@yy ~]# vim /tmp/functions


在末行模式下输入:%s/^[[:spaceh:]]/#&/g

vim--find--bash---作业_第2张图片

练习三:

替换/tmp/functions文件中的/etc/sysconfig/init/var/log

在末行模式下输入:%s/\/etc\/sysconfig\/init/\var\/log/g

vim--find--bash---作业_第3张图片

练习四:

删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;

: %s/^#\([[:space:]]\+\)/\1/g

 

练习五:

查找/var目录属主为root,且属组为mail的所有文件;

[root@yy var]# find /var -user root -groupmail -ls
1574102   4 drwxrwxr-x   2 root     mail         4096 8月 18 06:14/var/spool/mail

 

练习六:

查找/usr目录下不属于rootbinhadoop的所有文件;

[root@yy usr]# find /usr ! \( -user root -o-user bin -o -user hadoop \) -ls
1188182  12 -rwsr-xr-x   1 abrt     abrt       10296 7月 25 00:08 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache

 

练习七:

查找/etc目录下最近一周内其内容修改过,且属主不为roothadoop的所有文件;

[root@yy usr]# find /etc -mtime -7 -a ! \( -user root-o -user hadoop \) –ls

练习八:

查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;

[root@yy usr]#  find / \( -nouser -o -nogroup \)  -atime -7 –ls

 

练习九:

查找/etc目录下大于20k且类型为普通文件的所有文件;

[root@yy usr]# find /etc -type f -size +20k-ls
262821  28 -rw-r--r--   1 root     root       27223 11月 12  2010/etc/sound/events/gnome-2.soundlist
262187 628 -rw-r--r--   1 root     root      641020 10月  2  2013 /etc/services
264638  64 -rw-r--r--   1 root     root       62034 8月 17 22:18 /etc/ld.so.cache
263505  36 -rw-r--r--   1 root     root       34419 3月  4  2015 /etc/httpd/conf/httpd.conf
262210  44 -rw-r--r--   1 root     root       43591 9月 23  2011 /etc/mime.types
263198  48 -rw-r--r--   1 root     root       45281 3月  5  2013 /etc/bash_completion.d/git
264339  40 -rw-r--r--   1 root     root       39423 5月 26  2009/etc/bash_completion.d/subversion
264617  44 -rwxr-xr-x   1 root     root       41966 8月 17 22:17 /etc/rc.d/init.d/vmware-tools

 

练习十:

查找/etc目录下所有用户都没有写权限的文件;

[root@yy usr]#  find /etc ! -perm +222 -ls
263104   4 -r--r--r--   1 root     root          146 7月 24 19:09/etc/pam.d/cups
264381   4 -r--r-----   1 root     root         4002 3月  2  2012/etc/sudoers
264190   4 -r-xr-xr-x   1 root     root         3042 7月 24 12:04/etc/rc.d/init.d/lvm2-monitor
264189   4 -r-xr-xr-x   1 root     root         2134 7月 24 12:04/etc/rc.d/init.d/lvm2-lvmetad
264188   4 -r-xr-xr-x   1 root     root         1340 7月 24 12:04/etc/rc.d/init.d/blk-availability
262619   4 -r--------   1 root     root           45 8月 18 06:02/etc/openldap/certs/password
262491 196 -r--r--r--   1 root     root      198453 8月 18 06:01 /etc/pki/ca-trust/extracted/java/cacerts
262487 352 -r--r--r--   1 root     root      359773 8月 18 06:01 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
262490 208 -r--r--r--   1 root     root      211626 8月 18 06:01 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
262489 216 -r--r--r--   1 root     root      217510 8月 18 06:01 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
262488 264 -r--r--r--   1 root     root      266702 8月 18 06:01/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
263667   4 -r--r--r--   1 root     root          324 7月 24 00:14/etc/ld.so.conf.d/kernel-2.6.32-573.el6.x86_64.conf
262173   4 ----------   1 root     root          656 8月 18 06:14 /etc/gshadow-
264186   4 -r--r--r--   1 root     root           76 3月 24 10:00/etc/lvm/profile/thin-generic.profile
264185   4 -r--r--r--   1 root     root          828 7月 24 12:04/etc/lvm/profile/metadata_profile_template.profile
264187   4 -r--r--r--   1 root     root           80 3月 24 10:00/etc/lvm/profile/thin-performance.profile
264184   4 -r--r--r--   1 root     root         2249 7月 24 12:04/etc/lvm/profile/command_profile_template.profile
263102   4 -r--r--r--   1 root     root          460 7月 24 19:09/etc/dbus-1/system.d/cups.conf
263771   4 ----------   1 root     root         1066 9月  1 13:10 /etc/shadow
263773   4 ----------   1 root     root          667 9月  1 13:10 /etc/gshadow
262181   4 ----------   1 root     root         1037 8月 18 06:14/etc/shadow-

练习十一:

查找/etc目录下至少有一类用户没有执行权限的文件;

[root@yy usr]# find /etc ! -perm -111 –ls

 

练习十二:

查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;

[root@yy usr]# find /etc/init.d -perm -113-ls
262240   0 lrwxrwxrwx   1 root     root           11 8月 18 06:00/etc/init.d -> rc.d/init.d

 

练习十三:

让普通用户能使用/tmp/cat去查看/etc/shadow文件;

[root@yy usr]# which cat
/bin/cat
[root@yy usr]# cp /bin/cat  /tmp/
[root@yy usr]# chmod 4755 /tmp/cat

 

练习十四:

创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;

[root@yy usr]# mkdir -p /test/data
[root@yy usr]# groupadd lll
[root@yy usr]# chown :lll /test/data/
[root@yy usr]# chmod 3775 /test/data/
[root@yy usr]# useradd -G lll test1
[root@yy usr]# useradd -G lll test2
[root@yy usr]# useradd -G lll test3