一、总结文本编辑工具vim的使用方法

1、模式转换

     编辑模式--》 输入模式

            i: 在当前光标所在字符的前面,转为输入模式;

            a: 在当前光标所在字符的后面,转为输入模式;

            o: 在当前光标所在行的下方,新建一行,并转为输入模式;

 

            I:在当前光标所在行的行首,转换为输入模式

            A:在当前光标所在行的行尾,转换为输入模式

            O:在当前光标所在行的上方,新建一行,并转为输入模式;

     输入模式--》编辑模式

            ESC按键

     编辑模式--》末行模式

               :

     末行模--》编辑模式

           ESC按键

2、vim打开:默认处于编辑模式

   vim +# :打开文件,并定位于第#行

   vim +  :打开文件,定位至最后一行

   vim +/PATTERN:打开文件,定位至第一次被PATTERN匹配到的行的行首

3、关闭vim

  (1)末行模式关闭文件

       :q 退出

       :wq 保存并退出

       :q! 不保存并退出

       :w 保存

       :w!强制保存

       :wq -->:x

  (2)编辑模式下退出

       ZZ:保存并退出

4、光标跳转(编辑模式下)

  (1)字符间跳转:左(h)右(l)上(j)下(k) #h表示向左移动#个字符

  (2)单词间跳转:

                w:移动至下一个单词的词首

                e:跳至当前或下一个单词的词尾

                b:跳至当前或前一个单词的词首

  (3)行内跳转:

               0:绝对行首

               ^:行首的第一个非空白字符

               $:绝对行尾

  (4)行间跳转:

               #G:跳转至第#行(1G=gg)

                G:最后一行

  (5)句间移动:)(

  (6)段落间移动:}{

5、编辑命令

  (1)字符编辑

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

     #x:删除光标所在处及向后的共#个字符

      r:4rg(当前字符到后面3个字符变更成g)

      R:直接进入替换模式

  (2)删除命令

      d命令可跟跳转命令组合使用

      #dw,#de,#db

      d^,d0,d$

      dd:删除当前光标所在行

     #dd:删除包括当前光标所在行在内的#行

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

  (3)粘贴命令

      p:如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;

      P:如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;

  (4)复制命令

      yy:复制当前行

     #yy:复制当前光标内的#行(光标下的#行)

  (5)修改命令c

       cc:删除当前行内容,同时进入输入模式

      #cc:

6、撤销此前的编辑操作

  u:撤销前一次的编辑操作

    连续u命令可撤销此前N次编辑

 #u:直接撤销最近#次编辑操作

  Ctrl+r :恢复此前的撤销操作

  .:重复前一个编辑操作

7、翻屏操作

   Ctrl+f: 向下翻一屏

   Ctrl+b: 向上翻一屏

   Ctrl+d: 向下翻半屏

   Ctrl+u: 向上翻半屏

8、末行模式

 (1)地址、定界

   :start_pos,end_pos

        #:第#行

        #,+#:第#行到往后加#行

             .:当前行

             $:最后一行

        %:全文,相当于1,$
       /part1/:第一次被模式匹配到的行;

        #,/part1/:第#行到第一次被模式匹配到的行

     后可跟的编辑命令:

        d:删除所选择或匹配到的行(比如:1,3d)

        w:将选择或匹配到的行保存至另外一个文件(比如:1,$w /tmp/vim.text)

        y:表示复制

        r:将另外一个文件的内容填充在当前文件中(光标的后面)

  (2)查找

     /PATTERN:向尾部进行

     ?PATTERN:向首部进行

          n:与命令同方向

          N:与命令反方向

  (3)查找替换

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

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

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

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

                如: \1,\2,.....

                &:引用"要查找的内容"匹配到的整个内容:

           修饰符:

                i:忽略大小写

                g:全局替换

          /:用于分隔符,查找或替换的内容中用到此符号时,需要使用\对其转义:\/

             也可使用其他分隔符,如:@,#

9、多文件模式

   vim FILE1 FILE2 .....

      :next 切换至下一个文件

      :prev 切换至前一个文件

      :last 切换至最后一个文件

      :first 切换至第一个文件

    

      :wqall 保存所有

      :q!all 退出所有

10、多文件窗口分割

      vim -o FILE1 FILE2 :水平分割显示 

      vim -O FILE1 FILE2 :垂直分割显示

      Ctrl+w,ARROW :窗口间切换光标

11、单文件窗口分割

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

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

12、订制vim工作特性

  (1) 行号

      显示:set nu

      禁用:set nonu

   (2)括号匹配

      显示:set sm

      禁用:set nosm

   (3)自动缩进:

      显示:set ai

      禁用:set noai

   (4)高亮搜索

      显示:set hlsearch

      禁用:set nohlsearch

   (5)语法着色

      显示:syntax on

      禁用:syntax off

   (6)忽略字符大小写

      显示:set ic

      禁用:set noic

13、配置文件(可设定特性永久生效)

   全局配置文件:/etc/vimrc

   用户个人的配置文件:~/.vimrc
二、总结文件查找命令find的使用方法

1、文件查找工具locate,find

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

find:通过遍历指定的目标目录,实时查找符合指定属性的文件,实时查找;查找速度略慢;精确查找

2、find命令使用规范:

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

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

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

3、find命令的查找条件

   (1)根据文件名进行查找

      -name “文件名”:文件名支持globbing(*,?,[])

      -iname “文件名”:不区分文件名大小写,支持使用glob

      -regex   PATTERN :基于正则表达式进行文件名匹配 

   (2)根据属主、属组查找

      -user USERNAME: 查找属主为指定用户的文件

      -group GROUPNAME:查找属组为指定用户的文件

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

      -gid GroupID: 查找文件的属组为指定gid的文件

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

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

   (3)根据文件类型进行查找
        -type TYPE

            f: 普通文件

            d: 目录

            l: 符号链接

            b: 块设备

            c: 字符设备

            p: 命名管道

            s: 套接字

   (4)组合查找条件

         与条件:-a ,查找条件1 -a 查找条件2 -a ..... (所有条件必须同时满足)

         或条件:-o ,超找条件1 -o 查找条件2 -o .....(所有条件满足一个即可)

         非条件:-not,!(条件取反后满足的)

   (5)根据文件大小来查找

         -size (单位可以为k,M,G)

               2k:表示 1k<x<=2k(1.1   1.9)

              +2k:表示 >2k

              -2k:表示<=1k (0.9k,1k)

   (6)根据时间戳查找
       以“天”为单位

         -atime [+|-]#

              3天: 3<=x<4

              3天以内:x<3

              3天之前:x>=4

         -mtime   

         -ctime     

       以“分钟”为单位

         -amin[+|-]#

              刚好5分钟:5<=x<6

              5分钟内:x<5

              5分钟前:x>=5

         -mmin

         -cmin

   (7)根据权限查找

         -perm [+|-]MODE

       MODE: 精确权限匹配

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

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

4、处理动作

    -print: 默认处理动作

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

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

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

         -ok COMMAND {} \;

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

          -exec COMMAND {} \;

        无需用户确认;

三、总结bash环境变量的相关内容

1、bash配置文件分类

   profile类:为交互式登入shell提供配置文件
      全局配置:

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

      用户配置:

            ~/.bash_profile

      功用:

          (1)设定环境变量,如:PATH、等

          (2)运行命令或脚本

   bashrc类:为非交互式登入shell提供配置文件

      全局配置:

           /etc/bashrc

      用户配置:

           ~/.bashrc

      功用:

          (1)设定本地变量

          (2)定义命令别名

2、变量意义、类型与定义方式

      <本地变量>:只对当前shell进程有效的变量,对其他shell进程无效(包含当前shell的子shell)

           VAR_NAME=VALUE

           变量赋值:向变量的存储空间保存数据

           变量引用:

                    "": 弱引用,可以实现变量替换

                    '': 强引用,不完成变量替换,直接输出引号内内容

      <环境变量>:对当前shell进程及其子shell有效,对其他的shell进程无效

           用户可自定义环境变量,bash有许多内置的环境变量

                      PATH:命令搜索路径

                      HISTSIZE: 命令历史缓冲区大小

               定义:export VAR_NAME=VALUE(declare -x name=value)

               导出:export VAR_NAME(将本地变量变成环境变量)

               撤销变量:unset VAR_NAME   

               只读变量: readonly VAR_NAME

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

           local VAR_NAME=VALUE

      <位置变量>:$1,$2.....${10}

      <特殊变量>:$?

查看当前shell进程中的所有变量:set

查看当前shell进程中的所有环境变量: export ,printenv,env

3、shell登入类型及其配置文件作用次序

   (1)交互式登入

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

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

      配置文件作用次序:

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

   (2)非交互式登入

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

  执行脚本;

  su Username;

       配置文件作用次序:
      ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

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

    (1)重新登入

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

         source file

         . file

四、总结Linux文件系统上的特殊权限(SUID,SGID,Sticky)的知识点

1、Linux系统的权限模型

     u       g       o

  (rwx) (rwx) (rwx)

2、进程的安全上下文

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

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

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

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

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

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

       (c) 则应用其它权限;

3、特殊权限位使用说明

   (1)SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是发起者用户

      权限设定:

 chmod u+s FILE... 

 chmod u-s FILE...

      注意:

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

 S: 属主原本无x权限;

   (2)SGID:行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组     

      权限设定:

chmod g+s FILE...

chmod g-s FILE...

   (3)Sticky:在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件

      权限设定:

 chmod o+t FILE...

 chmod o-t FILE...

   (4)sst位权限设置方法

      SUID:4,SGID:2,STICKY:1

        000

        001

        010

        011

        100

        101

        110

        110

       chmod 6664 file (设置ss位)

       chmod 1775 dir  (设置t位)

五、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法

1、Linux磁盘管理基础概念

wKioL1XsKCWhtUWMAADGoF_XIgs035.jpg

(1)两张盘片中相同位置的磁道,就组成一个“柱面”,盘片中有多少个磁道,就有多少个柱面

(2)每一个面都有一个磁头,一张盘片就有两个磁头

(3)磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位

(4)磁盘的第一个扇区给MBR,446字节:boot loader  64字节:磁盘分区表(16byte标识一个分区)所以每个设备只能有4个主分区或3个主分区和一个扩展分区

(5)IDE设备:第一个IDE口 ,主:/dev/hda ,从:/dev/hdb ; 第二个IDE口,主:/dev/hdc   从:/dev/hdd

(6)SATA/SCISI/USB  设备:/dev/sda ,/dev/sdb(/dev/sd[a-z][1-#],1-4表示主或扩展分区标示,5+为扩展)

(7)磁盘接口速率:

                IDE:133MB/s

               SCSI: 640MB/s

               SATA: 6Gbps

                SAS: 6Gbps

                USB: 480MB/s

2、分区工具fdisk、partd、sfdisk

fdisk最多支持在一块硬盘上的15个分区

   fdisk -l DEVICE  查看设备分区信息(CentOS 7 显示有些不同)

  (1)fdisk命令参数

                 p: 显示

                 n: 创建

                 d: 删除

                 t: 修改分区ID

                 l: 列出所有支持ID类型

               w: 保存退出

               q: 放弃修改并退出

              m: 获取帮助

  (2)创建完成后,查看内核是否已经识别新的分区

       # cat /proc/partitions

  (3)内核重读磁盘分区表命令

        CentOS 5:partprobe

        CentOS 6,7:

                partx:

                        DEVICE :重读指定分区

                     -a DEVICE :重读所有分区

                     -a -n M-N DEVICE :指定范围

                kpartx

                    kpartx -af DEVICE

3、文件系统基础知识

(1)高级格式化:创建文件系统;低级格式化:重新创建磁道

(2)文件系统是管理磁盘分区及文件的软件,由内核提供此功能

(3)VFS虚拟文件系统:提供Linux常用分区格式的磁盘操作功能调用接口

(4)Linux支持的常用文件系统类型

        Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap

        光盘:iso9660

Windows: fat32(vfat), ntfs

Unix: ffs, ufs, jfs, jfs2

网络文件系统:nfs, cifs

集群文件系统:ocfs2, gfs2

分布式文件系统:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs

4、文件系统相关命令介绍

    (1)mkfs,mke2fs,e2lable,tune2fs,dumpe2fs,

    (2)fsck,e2fsck,mount,umount

    (3)free,mkswap,swapon,swapoff

    (4)df,du

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

:%s@^[[:space:]]\+@@g

原文件内容

wKiom1XsQAKBs-o2AAHZvkgUSJk789.jpg

替换后文件内容

wKioL1XsQirixMtoAAH252enkIA226.jpg

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

:%s@^[[:space:]]\+@#&@

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

:%s@/etc/sysconfig/init@/var/log@g

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

:%s@^#[[:space:]]\+@`sapce`\+@g

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

find /var -user root -a -group mail  -ls

wKiom1XsRpbz7BnAAABwKkysvjk228.jpg

十一、查找/usr目录下不属于root、bin或hadoop的所有文件;

find /usr -not -user root -a -not -user bin -a -not -user hadoop

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

find /etc -ctime -7 -a -not -user root -a -not -user hadoop -ls

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

find / -atime -7 -a -nouser -a -nogroup

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

find /etc +20k -a -type f -ls

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

find /etc ! -perm +222 -a -type f -ls

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

find /etc ! -perm -111 -a -type f -ls

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

find /etc/init.d -perm -113 -a -type f -ls

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

[root@cwc01 ~]# cp /bin/cat /tmp/
[root@cwc01 ~]# chmod u+s /tmp/cat
[root@cwc01 ~]# su - user1
[user1@cwc01 ~]$ /tmp/cat /etc/shadow
root:$6$OFU7ihWJMJaIUB3Y$lA0miwRfTzzGzBkL5qfkReBF3BisIK0H0FsftWMnfKDjAAGhcrPE8aRAep48P1rDnSiE80g/bzm0vpQRnfDYC/:16672:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::

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

[root@cwc01 ~]# mkdir -pv /test/data
[root@cwc01 ~]# chmod g+w,g+s,o+t /test/data/
[root@cwc01 ~]# ls -ld /test/data/
drwxrwsr-t 2 root root 4096 Sep  6 22:37 /test/data/