8-30Study

vim文本编辑工具:

         vim分为三种模式:编辑模式,插入模式,末行模式

         编辑模式:

             d:删除字符

             dd:删除整行

             y:复制字符

             yy粘贴整行

             zz:保存退出

             x:剪切单个字符

            #x: 剪切x个字符

            r 替换字符  6rT 表示当前光标往后6字符全部替换为T

            d^ 删除光标所在处到行首

            d$删除光标所在处至行尾字符(D)

            dwdedb 删除单词,支持#来指明涵盖单词个数

    

         行级别的粘贴:

                 p:当前所在光标下一行粘贴

                 P:当前所在光标上一行粘贴

         不到行级别:

                 p:直接粘贴在当前光标后

                 P:直接粘贴在当前光标前

                c:删除指定字符并自动转为输入

                u撤销操作

                Ctrl+r:撤销此前撤销

                    .重复前一条命令

    输入模式:

            i当前插入,I 行首插入  a当前位置向后一格插入,A行尾插入

            o 新建下一行并在行首输入   O新建上一行并在行首输入

        末行模式:

wq 或者x 保存退出

q!强制退出

x! 或者wq!强制保存退出

ZZ  保存退出

    字符间移动:

            上下左右:kjhl

       单词间移动:

                   w:下一个单词词首

                   e:当前或下一个单词词尾

                   b:当前或前一个单词词首

                   #[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  %表示全文,全文替换KEEPkeep


Vim [option]… [File]…

         +# 快速定位到#

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

 

Vim File1 File2 File3…

         末行模式:

                   next 下一个

                   prev 前一个

                   first 第一个

                   last最后一个

 

    退出所有文件:

                   wqll 保存退出全部

                   wall 保存全部

                   qall  退出全部

 

    多窗口:

                   -o 水平分割窗口

                   -O 竖直分割窗口

 

Ctrl+w,方向键  多窗口之间跳转

        

         窗口也可多次分割:

                   Ctrl+ws:水平分割

                   Ctrl+wv:竖直分割

 

界面显示设定:

         末行模式下:开启行号:setnumber或者 set nu 关闭行号:set nonumberset 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[OPTIONS] [查找路径] [查找条件] [处理动作]

            查找路径:默认为当前路径,最好使用绝对路径指定

       查找条件:

            按时间查找:

                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查找

        -name  PATTERN:按模式查找名字

        -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

        最后一个读取配置生效

    

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

    1. 退出并重新登录

    2. bash重读此文件

                .此配置本身

                source 配置文件

SUID,SGID,Sticky

        针对不同权限需求设置suid,suid,sticky权限:

                suid:具备该权限时,执行该文件时能将其进程自动转化为属主权限执行

                sgid:具备该权限时,在该目录下创建的文件属组全部为其目录属组

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

例子:   

[root@localhost test1]# chown :oracle /tmp/test1

[root@localhost test1]# ls

[root@localhost test1]# ls -ld

drwxr-xr-x. 2 root oracle 6 Aug 4 00:53 .

[root@localhost test1]# chmod g+w /tmp/test1

[root@localhost test1]# ls -ld

drwxrwxr-x. 2 root oracle 6 Aug 4 00:53 .

[root@localhost test1]# usermod -a -G oracle admin

[root@localhost test1]# usermod -a -G oracle hadoop

[root@localhost test1]# id admin

uid=1000(admin) gid=1000(admin) groups=1000(admin),990(oracle)

[root@localhost test1]# id hadoop

uid=1008(hadoop) gid=1008(test7) groups=1008(test7),990(oracle)

[root@localhost test1]# su - admin

Last login: Wed Aug 12 07:39:23 PDT 2015 on pts/1

[admin@localhost ~]$ cd /tmp/test1

[admin@localhost test1]$ touch admin.a

[admin@localhost test1]$ ls -l

total 0

-rw-rw-r--.1 admin admin 0 Aug 12 07:53 admin.a       //说明此时未改sgid权限时创建的没什么不同

[hadoop@localhost test1]$ touch hadoop.a

[hadoop@localhost test1]$ ls -l

total 0

-rw-rw-r--. 1 admin  admin 0Aug 12 07:53 admin.a

-rw-r--r--. 1 hadoop test7 0 Aug 12 07:55 hadoop.a       切换到Hadoop切换也是一样

更改sgid属性

[root@localhost ~]# chmod g+s /tmp/test1

[root@localhost ~]# cd /tmp/test1

[root@localhost test1]# ls -ld

drwxrwsr-x. 2 root oracle 35 Aug 12 07:55 .

[root@localhost test1]# su - admin

Last login: Wed Aug 12 07:53:23 PDT 2015 on pts/1

[admin@localhost ~]$ touch admin.b

[admin@localhost ~]$ cd /tmp/test1

[admin@localhost test1]$ touch admin.b

[admin@localhost test1]$ ls -ld

drwxrwsr-x. 2 root oracle 49 Aug 12 07:57 .

[admin@localhost test1]$ ls -l

total 0

-rw-rw-r--. 1 admin admin  0 Aug 12 07:53 admin.a

-rw-rw-r--. 1 admin  oracle 0Aug 12 07:57 admin.b

-rw-r--r--. 1 hadoop test7  0Aug 12 07:55 hadoop.a


linux磁盘管理:  

       linux分区表:

                MBR0磁道0扇区,主引导扇区

                 三部分:

                   446bytesbootloader,程序

                   64bytes:分区表

                   16bytes:标示一个分区

                    4个主分区,一个扩展分区à逻辑分区

                   2bytes55AA,当前MBR信息是否有效

                MBR最多支持2T分区

    文件系统:

                   linux文件系统任何数据存储都为inodeindex node)和相应的数据块组成。

             若查找/etc/passwd文件,文件读取顺序如下:

                   先找到/根目录的inode及其数据块,数据块中记录着其目录下文件及子目录文件的inode号,找到etc目录         查找其inode,前往inode表读取其数据后,查找到etc的数据块,再到其中查找passwdinode,再通过                  inode表查找

        文件系统分为日志型和非日志型

        非日志文件系统:ext2

        日志型文件系统:ext3,ext4,xfs  etc


VFSVirtual File System

           Linux文件系统:ext2,ext3,ext4,xfs,btrfs

             光驱:iso9660

             网络文件系统:ntfcifs

            集群文件系统:gfs2ocfs2

            分布式文件系统:ceph

             Windows文件系统:ntfsvfat

             伪文件系统:tmpfs,hugepagefs,proc,sysfs

             Unix文件系统:FFSUFSJFS

文件系统管理工具:

             创建文件系统:

                   Mkfs.ext2

             检测文件系统:

                   fsck.ext2

               查看其属性:dumpe2fs,tune2fs

                 创建文件系统:mkfs.ext2/dev/sda

                                               blkid/dev/sda

                 mkfs –t ext2 /dev/sda1

                      mke2fs  ext专用格式化工具

                mke2fs:创建ex文件系统

                 mke2fs [options]…/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中可以查看具体特性

                e2label  e2系统的卷标管理工具

                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文件中的行首的空白字符;

linux下vim,find_find

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的所有文件;

    linux下vim,find_find_02

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

    linux下vim,find_find_03

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

   linux下vim,find_vim_04

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文件;

linux下vim,find_find_05

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

    linux下vim,find_find_06