LINUX 中的vim 操作

vim在linux中是一款功能强大的编辑利器。vim分为三种模式:1编辑模式,2插入模式,3末行模式。

 1.1:编辑模式

    i:insert 插入编辑光标停留的第一个字符。

    a:append 追加到光标的第二个字符。

    o:new line 新建一空白行,往光标下一行新建。

    I:行首。

    A:行末。

    O:光标上方新建空白行。

  输入模式 按ES====》编辑模式。

  编辑模式按':'=====》进入末行模式。

  末行模式按ESC======》编辑模式。


 1.2 打开文件vim编辑

    vim /PATH/;

        +#:#表示行,定位到行号。

        +/PATTERN 正则匹配。

        wKiom1XsT4vRx1--AAH0wtvq83Q249.jpg


wKiom1XsUFmB0xIJAAFT27oajZ0481.jpg


 1.3关闭vim命令


    :q 退出  。:wq 保存退出。 :q!强制退出,不保存。:wq 保存退出。:x 保存退出。


 1.4光标跳转


    h:向左移动。l:向右移动。j:向上移动。k:向下移动。

    w:光标向右一个单词词首。

    e:当前右一个单词词尾。

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


 1.5 行内跳转


    ^:跳至行首非空白处。

    o:跳至行首。

    $:跳至行尾。


 1.6行间移动


   #G:跳至#行。

   1G,gg:都是跳至第一行。

   G:末行。


2:编辑命令

 2.1字符编辑

  

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

   #X:删除#行。

   xp:恢复最近一次操作。

   rw:替换光标所在处的字符,w替换后的字符。


 2.2 删除命令


   dd:删除光标所在的行。

   dw:删除整个单词。

   复原前一个操作: u


 2.3粘贴 p


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

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

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

   如果是整行

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

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

 

 2.4复制命令


    yy:复制整行。

    y$: 复制从光标处到行末。

    y^: 复制从光标处到行首。

    yw:复制光标停留处字符。

   #yy:表示从光标向下#行。


 2.5翻屏操作


   ctrl+f:向后一屏。

   ctrl+b:向前一屏。

   ctrl+d:向后半屏。

   ctrl+u:向前半屏


 2.6 vim内建教程  vimtutor.


3:vim的末行模式


 3.1 地址,定界


    :start_pos.end_pos

    :#:第#行

    :#,#第几行到第几行。

    :.:当前行。

    :$:最后一行。

    /pat1/:全局匹配。


 3.2 查找与替换


    /pattern :向尾部进行。

    ?pattern:向首部进行。

    n:与命令同方向,继续查找,先查找命令,按n继续查找下一个

    N:与命令反方向查找。找到后往上查第二个。输入/root,按N后?root

    

 3.3 查找与替换

    s:在地接范围内,完成查找与替换动作。

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

    要查找的内容可以使用正则表达式。替换的内容不行。

    修饰符:i忽略大小写。g:全局替换。c:替换时得带用户的确认。

    :n1,n2s/word1/word2/gic

    %s/word1/word2/ 代表替换每一行的第一个word1  

 

    wKiom1XsYE3Q7Xs_AAO9FXBV5-k307.jpg


    查找root并替换成admin

    1,$s/root/admin/  代表匹配的第一个root 替换成admin。

    1,$s/root/admin/g 代表全局替换。


 3.4多文件模式


    vim file file2 file3.....以空格隔开多个文件

    :next  下一文件

    :first第一个文件

    :prev上一个文件

    :last 最后一个文件。

    单文件件窗口分割

    ctrl+w ,s:split 水平分割。

    ctrl+w,v:vertical 垂直分割。


 3.5定制vim的某些工作特性

    

    显示行号:set nu  

    禁用行号:set nonu

     (2) 自动缩进:

      set ai

      set noai

     (3) 高亮搜索

      set hlsearch

      set nohlsearch

     (4) 语法着色

      syntax on

      syntax off

     (5) 忽略字符大小写

      set ic

      set noic


文件查找 

 文件查找在文件系统上查找符合条件的文件的过程。文件查找主要:locate,find

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

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

 1 find命令

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

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

    查找条件:指定的查找标准,可以根据文件名,大小,属主属组,类型等进行查找。

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

 1.1 根据属主,属组查找:

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

    -group GROUPNAME 查找属组。

    -uid  USERID :查找文件属主的ID。

    -gid GroupID : 属于组ID。

    -nouser 查找没有属主的文件。

    -nogroup 查找没有属组的文件。


 1.2 根据文件类型进行查找


    -type 

    f:普通文件。

    d:目录。

    l:符号设备文件。

    b:快设备。

    c:字符设备。

    p:命令管道。

    s:套接字文件。


 1.3组合查找


      与条件:-a

      或条件:-o

      非条件:-not ,!

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

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

 1.4 根据文件大小来查找:

    -size [+|-] #UNIT(单位)

         UNIT:k,M,G

         #UNIT:(#-1,#] 

         +#UNIT:(#,无穷) >#

         -#UNIT :[0,#-1]  <# 

  

 1.5根据时间戳:

    以天为单位

        -atime [+|-]#

        #:[#,#+1)

        +#:[#+1,无穷)

         -#:[0,#)

         -ctime  更改inode 属性(更改文件所有者,权限,或者链接)  

            #:[#,#+1)

            +#:[#+1,无穷)

             -#:[0,#)

            -mtime 写入文件数据的时间

  

    

    以‘分钟‘ 为单位

         -amin

          -mmin

         -cmin

 

 1.6根据权限查找

     -perm [/|-] MODE

        MODE:精确权限匹配

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

    例如查询 整个系统的SUID ,SGID的文件  find / -perm +6000

         

 1.7 处理动机

    -print :默认处理动机。

    -ls:类似于对查找的每个文件做'ls -l'的动作。

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

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

    -ok 命令 {}\;对每个文件执行的指定的命令之前需要用户事先确认。

    -exec 命令 {} \;无需用户确认。

    

bash环境配置


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

   全局配置: /etc/profile,/etc/profile.d/*.sh, /etc/bashrc

   个人配置: ~/.bash_profile,~/.bashrc (~:表示当前用户的家目录。)

   功能:

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

     (2) 运行命令或者脚本。

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

     /etc/bashrc

     ~/.bashrc  

      功用:定义命名别名;定义本地变量。

  1.2变量类型

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

    本地变量:作用于当前shell

    局部变量:作用与当前shell的方法或者函数,shell进程中的某段代码片段。

    位置变量:$1,$2

    特殊变量:$?(获取进程的退出状态及接收的信号值)

             

 1.3变量定义方式:

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

    自定义变量:   变量名=变量值。

 

    

 1.4 bash弱类型:

    变量存储默认采用的是字符形式存储。如何变量可以不经赋值直接引用。

    一个字节等于8个比特  

 1.5 定义本地变量

    name=value 注意中间无空格号。


 1.6 定义环境变量

    export name=value

    declare -x name=value

    查看环境变量 env,printenv,export

    撤销变量   unset name

    比如 定义一个变量   name=mite 

       定义一个环境变量 export number=123456789

       用set 查看wKioL1Xte1rRrF01AAAqtJPSRQU733.jpg

       打印出来  echo name

            echo $number

       引用变量 ${name} $name

wKioL1Xte9rwUD6IAABJ09Ap4ZU875.jpg   

  

 1.8bash 中的引用符号

    '' :强引用

    "":弱引用

    ``:命令引用


 1.9 shell登陆类型    

    交互式登陆直接通过终端登陆

    通过 su -l username 登陆。

 

 非交互式登陆

    图形界面打开的命令行登陆 例如进行系统命令行界面 通过ctrl+alt+F1-F6 

    执行脚本 登陆

     su username 

 

 2.0配置文件作用次序:

    交互式登陆:

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

     非交互式登陆:~/.bashrc----->/etc/bashrc---/etc/profile.d/*.sh

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

    (1)重新登录

    (2)让当前的shell去重新读取指定的配置文件 (不采取)

        source /APTH/TO/SOMEFILE

        ./PATH/TO?SOMEFILE  



Linux文件系统上的特殊权限

    进程的安全上下文:前提;进城有属主;文件有属主和属组;

    (1)用户是否能把把那个可执行文件启动为进城,取决于用户对shell程序文件是否有可执行权限。

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

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

            a:进程的属主,同文件的属主。则应用文件属于属组文件。

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

     SUID 

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

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

    权限设定:

        chmod u+s FILE..

        chmod u-s FILE...

    注意:

        s:属主原本拥有X权限。

        S:属主原本无X权限

    SGID 

        默认情况下,用户创建文件时,其属组应是文件创建者的属组。

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

        

        权限设定

            chmod g+s FILE

            chmod o-s FILE


    Sticky

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

            chmod o+t FILE

            chmod o-t FILE



home work


一、作业(练习)内容:

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

2、总结文件查找命令find的使用方法;

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

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

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

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

    :%s/[[:space:]]\+//g

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

   %s/^[[:space:]]/#&/g

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

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

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

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

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

    find /var -user root -a -group mail 

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

    find /usr !\(-user root -o -user bin -o -user hadoop\) -ls

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

    

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

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

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

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

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

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

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