今天我给大家带来的是VIM,find,命令的使用和bash环境变量的一些内容。

  • vim命令

    vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版,与vi编辑器完全兼容,而且实现了很多增强功能。

    vi编辑器有三种模式:输入模式,命令模式(编辑模式)和末行模式,(默认打开命令模式)

                      

     语法:   vi(选项)(参数)

      参数解释:

  1. Ctrl+u:向文件首翻半屏;

  2. Ctrl+d:向文件尾翻半屏;

  3. Ctrl+f:向文件尾翻一屏; 

  4. Ctrl+b:向文件首翻一屏; 

  5. Esc:从编辑模式切换到命令模式; 

  6. ZZ:命令模式下保存当前文件所做的修改后退出vi; 

  7. :行号:光标跳转到指定行的行首; 

  8. :$:光标跳转到最后一行的行首;

  9. x或X:删除一个字符,x删除光标后的,而X删除光标前的; 

  10. D:删除从当前光标到光标所在行尾的全部字符; 

  11. dd:删除光标行正行内容;

  12. ndd:删除当前行及其后n-1行;

  13. nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;

  14. p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;

  15. P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;

  16. /字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;

  17. ?name:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示; 

  18. a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;

  19. a:在当前字符后添加文本; 

  20. A:在行末添加文本; 

  21. i:在当前字符前插入文本;

  22. I:在行首插入文本;

  23. o:在当前行后面插入一空行;

  24. O:在当前行前面插入一空行;

  25. :wq:在命令模式下,执行存盘退出操作; 

  26. :w:在命令模式下,执行存盘操作;

  27. :w!:在命令模式下,执行强制存盘操作; 

  28. :q:在命令模式下,执行退出vi操作;

  29. :q!:在命令模式下,执行强制退出vi操作;

  30. :e文件名:在命令模式下,打开并编辑指定名称的文件;

  31. :n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;

  32. :f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;

  33. :set number:在命令模式下,用于在最左端显示行号; 

  34. :set nonumber:在命令模式下,用于在最左端不显示行号;

  • find命令

    find和localte都查找工具他们的区别:

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

    locate -i 忽略大小写

    find:实时查找;查找速度略慢;精确查找;用来在指定目录下查找文件

    find 语法

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

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

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

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

     查找条件介绍:

  1. 根据文件名进行查找:

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

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

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

  1.  根据属主、属组查找:

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

                    -group GROUPNAME:   根据组查找

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

   -gid GroupID:  查找文件属组GID的文件

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

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

  1. 根据文件类型进行查找:

命令参数:-type TYPE

f: 普通文件

d: 目录

l: 符号链接

b: 块设备

c: 字符设备

p: 命名管道

s: 套接字

  1. 根据组合查找条件:

与条件:-a

或条件:-o

非条件:-not, !

  1. 根据文件大小来查找:

-size [+|-]#UNIT

单位:k, M, G

下面是5大小的文件的各种解释:

  1. 根据时间戳:

       以“天”为单位

-atime 用、户最近一次访问时间。

-mtime  文件最后一次修改时间。

-ctime   文件属性(例如权限等)最后一次修改时间。

以“分钟”为单位

-amin   

-mmin

-cmin

下面是时间的表示方法:

  1. 根据文件的权限:

-perm [/|-]MODE

MODE: 精确权限匹配

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

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

  1. 处理动作:

-print: 默认处理动作打印到屏幕

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

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

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

-ok COMMAND {} \;

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

-exec COMMAND {} \;

无需用户确认;

  • bash环境变量的简单介绍:

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

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

个人配置:~/.bash_profile ,~/.bashrc

    按功能划分,存在两类:

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

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

~/.bash_profile

                功用和作用:

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

(2) 运行命令或脚本

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

/etc/bashrc

~/.bashrc

                功用和作用:

(1) 定义命令别名;alias

(2) 定义本地变量;

          

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

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

定义本地变量:

name=value

        查看:set

        定义环境变量:

export name=value

declare -x name=value  x  指定的变量会成为环境变量

        查看:env, printenv, export

        撤消变量:unset name

        引用变量:${name}, $name

        bash中的引用符号:

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

"":弱引用

``: 命令引用

        shell登录类型:

交互式登录:

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

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

                非交互式登录:

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

执行脚本;

su Username;

         最重要的是配置文件作用次序:

交互式登录:

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

                非交互式登录:

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

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

(1) 重新登录;

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

source   /PATH/TO/SOMEFILE

. /PATH/TO/SOMEFILE

下面是一些练习试题:

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

   

%s/^[[:blank:]]/#/g

                         

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

    

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

                        

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

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

                       

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

  

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

                      

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

find /var -user root -a -group mail -ls
  1. 查找/usr目录下不属于root、bin或hadoop的所有文件;

find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls
  1. 查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;

find /etc/ -atime -7  -a ! \( -user root -o -user hadoop \) -ls
  1. 查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;

find /etc/ -atime -7  -a -nouser -a  -nogroup  -ls
  1. 查找/etc目录下大于20k且类型为普通文件的所有文件;

find /etc/ -size +20k -a -type f -ls
  1. 查找/etc目录下所有用户都没有写权限的文件;

find /etc  -! -perm /222  -ls
  1. 查找/etc目录下至少有一类用户没有执行权限的文件;

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

find /etc/init.d  -perm  -111 -a -perm -002 -ls
  1. 让普通用户能使用/tmp/cat去查看/etc/shadow文件;

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

# chmod g+s /test/data# chmod g+w /test/data# chmod o+t /test/data