liuyuehua 发表于 2018-5-22 08:44:38

linux下vim,find

8-30Study

vim文本编辑工具:
       vim分为三种模式:编辑模式,插入模式,末行模式
         编辑模式:
             d:删除字符
             dd:删除整行
             y:复制字符
             yy粘贴整行
             zz:保存退出
             x:剪切单个字符
            #x: 剪切x个字符
            r 替换字符6rT 表示当前光标往后6字符全部替换为T
            d^ 删除光标所在处到行首
            d$删除光标所在处至行尾字符(同D)
            dw,de,db 删除单词,支持#来指明涵盖单词个数
   
         行级别的粘贴:
               p:当前所在光标下一行粘贴
               P:当前所在光标上一行粘贴
         不到行级别:
               p:直接粘贴在当前光标后
               P:直接粘贴在当前光标前
                c:删除指定字符并自动转为输入
                u撤销操作
                Ctrl+r:撤销此前撤销
                    .重复前一条命令
    输入模式:
            i当前插入,I 行首插入a当前位置向后一格插入,A行尾插入
            o 新建下一行并在行首输入   O新建上一行并在行首输入
      末行模式:

wq 或者x 保存退出
q!强制退出
x! 或者wq!强制保存退出
ZZ保存退出
    字符间移动:
            上下左右:kjhl
       单词间移动:
                   w:下一个单词词首
                   e:当前或下一个单词词尾
                   b:当前或前一个单词词首
                   # 几个几个跳

                   0跳至绝对行首(第一个非tab字符)跳到最前面
                   ^跳转至行首(第一个非空白字符)
                   $跳转至绝对行尾
         句子间跳转
                  (
                     )
         段落间跳转:
                     {
                     }
         行间快速跳转:
                   #G(#目标行编号)
                   G文尾
                   1G文首
末行模式下直接输入100表示跳转到100行

快速选取:
         v:选择光标左侧内容,可用jk上下移动
         V:选择光标所在行,可用jk上下移动

编辑模式下的翻屏命令:
         Ctrl+f:向文件尾部翻一屏
         Ctrl+b:向文件首部翻一屏
         Ctrl+d:向文件尾部翻半屏
         Ctrl+u:向文件首部翻半屏

文本查找:
         /PATTERN
         ?PATTERN

         n:下一个
         N:上一个

地址定界符:
         Startline[,endline]
                            #第n行
                            .当前行
                            $最后一行
                            %:全文
                   相对定界:
                                     +#:向下多少行
                                     -#:向下多少行

                            10,+5从第10行到第15行

文本替换s
         s/要查找的内容/要替换的内容/修饰符
                   /:表示修饰符,可用其他字符如@,#等
                   要查找内容:可用正则表达式,此后要替换内容可用&代表对该内容的全部引用
                   要替换内容:不可用正则表达式,一般为正常文本,但可以使用\1,\2..保持内容
                            修饰符:
                                     i:查找时忽略大小写
                                     g:全局替换(不加的话一行出现多次只替换第一次)

           %s/KEEP/keep/gi%表示全文,全文替换KEEP为keep


Vim … …
         +# 快速定位到#行
         +/PATTERN 快速定位到模式第一次匹配到的行

Vim File1 File2 File3…
         末行模式:
                   :next 下一个
                   :prev 前一个
                   :first 第一个
                   :last最后一个

    退出所有文件:
                   :wqll 保存退出全部
                   :wall 保存全部
                   :qall退出全部

    多窗口:
                   -o 水平分割窗口
                   -O 竖直分割窗口

Ctrl+w,方向键多窗口之间跳转
         
         窗口也可多次分割:
                   Ctrl+w,s:水平分割
                   Ctrl+w,v:竖直分割

界面显示设定:
         末行模式下:开启行号:setnumber或者 set nu 关闭行号:set nonumber或set nonu
                            语法高亮显示:syntaxon/ syntax off
                            搜索高亮开启关闭:sethlsearch/set nohlsearch
                            自动缩进开启关闭:setautoindent或者set ai /setnoautoindent或者set noai
                            区分大小写开启关闭:setignorecase (set ic)/set noignorecase (set noic)
                            高亮显示配对符号:set showmatch(set sm)/set noshowmatch (set nosm)

find查找文件工具:
         格式:find [查找路径] [查找条件] [处理动作]
            查找路径:默认为当前路径,最好使用绝对路径指定
       查找条件:
            按时间查找:
                n:n   n<x<=n+1
                +n:n之外   x>n+1
                -n:n之内   x<=n
                -atime [+|-|]n:第n天外|内|访问
                -ctime [+|-|]n:第n天外|内|属性变化

                -mtime [+|-|]n:第n天外|内|内容变化

                -amin[+|-|]n :第n分钟外|内| 访问

                -cmin[+|-|]n :第n分钟外|内| 属性变化

                -mmin[+|-|]n :第n分钟外|内| 内容变化
                -newer file: 比file更改时间更近的文件

      -newer f1 !f2:查更改时间比f1新但比f2旧的文件   

   按条件查找:
      -user :按属主查找
      -group:按属组查找
      -gid:按GID查找
      -nogroup:查找没有属组的
      -nouser:查找没有属主的
      -inum n:按inode查找
      -namePATTERN:按模式查找名字
      -iname PATTERN:按模式查找名字,不区分大小写

      -path PATTERN:按路径查找
      -perm mode:按权限精确查找
            /mode(+mode 老用法):只要保护一位对其指定的权限即可
            -mode:每位用户包含全部权限
      -regex“PATTERN”按模式查找
    按文件大小查找
      -size [+|-]n:
                n:n-1<x<=n
                -n:x<=n-1
                +n:x>n

    按文件类型查找:
      -type type
                c:字符设备   
                b:块设备

                f:普通文件
                d:目录文件
                l:连接文件

                p:管道设备

                         s:套接字文件
      
          多条件时需组合条件运算
                     与运算:-a可以省略条件1 –a 条件2 –a 条件3….
                     或运算:-o
                       非运算:-not,!   -not 条件
            
    处理动作:
                   -ls显示出来
                   -print打印在屏幕(默认)
                   -execCOMMAND {} \;对找到的文件执行COMMAND,参数为find参数,这个命令直接执行,无需确   认,建议find没问题后再加上该项参数
                   -ok COMMAND{}\;每项命令都需确认
                   注意:find会一次性找到所有参数并传输给之后的COMMAND,但部分命令无法接受过长参数,解决      方法:
                   find | xargs COMMAND



bash变量:
   bash变量分为三种:
         本地变量:只对当前shell进程有效的变量,对其他shell进程无效,包括shell的子进程
         环境变量:对当前shell进程及其子进程有效,对其他shell无效
         局部变量:对shell脚本中某段代码有效
         位置变量:$1,$2....${11}进行位置指定变量
         特殊变量:$?查看上次命令执行结果
            set查看全部本地变量
            export查看全部环境变量
                修改变量只对当前shell有效,退出后无效,若想一直有效需修改配置文件
bash配置文件:
    交互式登录:profile

      全局设置:/etc/profile,/etc/profile.d/*.sh(profile分开存储)

      本地设置:~/.bash_profile
            功能:1.设定环境变量;2.运行脚本或命令

    非交互登录:

       全局设置:/etc/bashrc
      本地设置:~/.bashrc
            功能:1.设定本地变量;2.定义命令别名;3.自定义
    配置文件读取顺序:
      交互式登录:
            /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~.bashrc->/etc/bashrc
      非交互登录:
            ~.bashrc->/etc/bashrc->/etc/profile.d/*.sh

      最后一个读取配置生效

   
    编辑配置文件重新加载生效:

[*]
[*]退出并重新登录
[*]让bash重读此文件

                .此配置本身
                source 配置文件
SUID,SGID,Sticky
       针对不同权限需求设置suid,suid,sticky权限:
                suid:具备该权限时,执行该文件时能将其进程自动转化为属主权限执行
                sgid:具备该权限时,在该目录下创建的文件属组全部为其目录属组

                sticky:具备该权限时,在该目录下只能删除自己为属主文件

例子:
# chown :oracle /tmp/test1
# ls
# ls -ld
drwxr-xr-x. 2 root oracle 6 Aug 4 00:53 .
# chmod g+w /tmp/test1
# ls -ld
drwxrwxr-x. 2 root oracle 6 Aug 4 00:53 .
# usermod -a -G oracle admin
# usermod -a -G oracle hadoop
# id admin
uid=1000(admin) gid=1000(admin) groups=1000(admin),990(oracle)
# id hadoop
uid=1008(hadoop) gid=1008(test7) groups=1008(test7),990(oracle)
# su - admin
Last login: Wed Aug 12 07:39:23 PDT 2015 on pts/1
$ cd /tmp/test1
$ touch admin.a
$ ls -l
total 0
-rw-rw-r--.1 admin admin 0 Aug 12 07:53 admin.a       //说明此时未改sgid权限时创建的没什么不同
$ touch hadoop.a
$ ls -l
total 0
-rw-rw-r--. 1 adminadmin 0Aug 12 07:53 admin.a
-rw-r--r--. 1 hadoop test7 0 Aug 12 07:55 hadoop.a       切换到Hadoop切换也是一样
更改sgid属性
# chmod g+s /tmp/test1
# cd /tmp/test1
# ls -ld
drwxrwsr-x. 2 root oracle 35 Aug 12 07:55 .
# su - admin
Last login: Wed Aug 12 07:53:23 PDT 2015 on pts/1
$ touch admin.b
$ cd /tmp/test1
$ touch admin.b
$ ls -ld
drwxrwsr-x. 2 root oracle 49 Aug 12 07:57 .
$ ls -l
total 0
-rw-rw-r--. 1 admin admin0 Aug 12 07:53 admin.a
-rw-rw-r--. 1 adminoracle 0Aug 12 07:57 admin.b
-rw-r--r--. 1 hadoop test70Aug 12 07:55 hadoop.a


linux磁盘管理:   

linux分区表:
                MBR:0磁道0扇区,主引导扇区
               三部分:
                   446bytes:bootloader,程序
                   64bytes:分区表
                   16bytes:标示一个分区
                  4个主分区,一个扩展分区à逻辑分区
                   2bytes:55AA,当前MBR信息是否有效
MBR最多支持2T分区

    文件系统:
                   linux文件系统任何数据存储都为inode(index node)和相应的数据块组成。
             若查找/etc/passwd文件,文件读取顺序如下:
                   先找到/根目录的inode及其数据块,数据块中记录着其目录下文件及子目录文件的inode号,找到etc目录         查找其inode,前往inode表读取其数据后,查找到etc的数据块,再到其中查找passwd的inode,再通过                  inode表查找
      文件系统分为日志型和非日志型

      非日志文件系统:ext2
      日志型文件系统:ext3,ext4,xfsetc


VFS:Virtual File System
         Linux文件系统:ext2,ext3,ext4,xfs,btrfs
             光驱:iso9660
             网络文件系统:ntf,cifs
            集群文件系统:gfs2,ocfs2
            分布式文件系统:ceph
             Windows文件系统:ntfs,vfat
             伪文件系统:tmpfs,hugepagefs,proc,sysfs
             Unix文件系统:FFS,UFS,JFS

文件系统管理工具:
             创建文件系统:
                   Mkfs.ext2
             检测文件系统:
                   fsck.ext2
             查看其属性:dumpe2fs,tune2fs
               创建文件系统:mkfs.ext2/dev/sda
                                             blkid/dev/sda
               mkfs –t ext2 /dev/sda1
                        mke2fsext专用格式化工具

                mke2fs:创建ex文件系统
               mke2fs …/dev/Device
                            -t{ext2|ext3|ext4}
                            -b{1024|2048|4096}4096上限由内核page frame
                            -LLABEL:
                            -j :相当于-text3格式为日志型文件系统
                            -I :指明inode与字节的比例   即每多少个字节创建一个inode
                            -N:给此文件系统直接创建多少个inode
                            -m#:指定预留给superuser的空间,直接表示为预留#%,默认5%,大磁盘不需预留太多
                            -O[^]feature 可以指明额外具有的某些特性,^表示不启用此特性
                                              tune2fs中可以查看具体特性
                e2labele2系统的卷标管理工具
                e2label /dev/DEVICE NEWLABEL修改label
                e2label /dev/DEVICE 查看label

                tune2fs 可以查看修改文件系统属性信息,文件块大小不可修改
                tune2fs –l /dev/Device可以列出超级块信息

                tune2fs修改文件属性:
                     tune2fs   –j :ext2->ext3
                            -L:修改卷标
                            -m:修改预留百分比,默认5%
                            -O   [^]FEATURE 开启关闭某些特权                     
                            -o[^] acl:开启关闭某些挂载选项
                            -l   显示超级块信息:显示整个文件信息及布局等相关信息

                dumpe2fs只能查看文件信息,不能修改
                         dumpe2fs [-h]/dev/DEVICE

文件系统检测:
         因意外导致的文件系统出错需进行文件系统检测,检测过程应该离线进行,先umount
                   fsck –t type=fsck.type
                     -a自动修复(修复错误为删除错误,慎用)
                            -r      交互式修复
                            -f   强制修复
                     Ext文件系统专用修复:
                   e2fsck-y 对所有文件系统错误自动修复
                               -f强制检测所有文件系统,即使其为clean
TEST:
1、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;

  2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
      %s/^[[:space:]]/#&/
  3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
      %s@/etc/sysconfig@/var/log@gi
  4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
      %s@^#[[:space:]]@ @i

  5、查找/var目录属主为root,且属组为mail的所有文件;
     
  6、查找/usr目录下不属于root、bin或hadoop的所有文件;
     
  7、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
     
  8、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
      find / -nouser -nogroup -atime -7

  9、查找/etc目录下大于20k且类型为普通文件的所有文件;
      find /etc -size +20k -type f

  10、查找/etc目录下所有用户都没有写权限的文件;
      find /etc/ -not -perm /222
  11、查找/etc目录下至少有一类用户没有执行权限的文件;
      find /etc/ -not -perm -111

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

  13、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
  
  14、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件
     





























































   


      
      



  
页: [1]
查看完整版本: linux下vim,find