linux运维实战练习-2015年8月30日课程作业

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

Vim:全屏幕的编辑器;

Vim的编辑模式:

编辑模式:命令模式;两者意思大概相同。

    输入模式;末行模式。

编辑模式—>(切换到)输入模式:

Insert:i

Append:a

   New line:o

   行首:I

   行尾:A

   上方新建行:O

输入模式à编辑模式:

   Esc

编辑模式->末行模式:

   :

末行模式à编辑模式:

   Esc

Vim编辑工具的打开方式:

   Vim /PATH/TO/SOMEFILE

       +#:#为行号;

       +/:PATTERN

关闭Vim:

   :q  不保存退出;

   :q! 强制退出;

   :wq 保存退出;

:w a1将文件另存为a1 :ZZ  保存文件并退出,相当于:wq :wq! 文件所有者强制保存只读文件,如果不是文件所有者进行此操作,不能成功

复制(yank)

    命令模式下:

yy或Y 复制光标所在整行 y^ 复制到光标所在行行首,不包括光标位置字符 y$ 复制到光标所在行行尾,包括光标位置字符 yw 复制一个单词,光标必须在单词首部 yG 复制到文件尾 y1G 复制到文件首 nyy 复制光标所在行开始的n行

粘贴

命令模式下 p (小写)粘贴到光标后 P (大写)粘贴到光标前删除命令模式下 x (小写)删除光标前一个字符 X (大写)删除光标后一个字符 dd (小写)删除光标所在整行 dw (小写)删除光标所在处一个单词 dG 删除光标所在整行到文件尾 dgg 删除光标所在整行到文件首 D (大写)删除到行尾,包含光标处的字符 d$ 与D效果相同 d0 删除到行首,不包含光标处的字符 d^ 与d0效果相同 :n1,n2d 编辑模式下,删除n1-n2行撤销

命令模式下 u (小写)无限次保存前撤销(大概500多次) ctrl+r redo

字符替换命令模式下 r (小写)替换光标所在处一个字符 R (大写)开始替换,直到按ESC键退出替换,相当于按下键盘上到insert键 cc (小写)取代光标所在整行 S (大写)与ss(小写)效果相同 C (大写)取代到行尾,包括光标处字符 c0 (小写,数字0)取代到行首,不包括光标处字符 c^ (小写)与c0(小写,数字0)效果相同

字符串查找和替换命令模式下 /string 从光标处开始向下开始查找字符串string /查找模式下按n(小写)查找下一个,按N(大写)查找上一个 ?string 从光标处开始向上开始查找字符从string ?查找模式下按n(小写)查找上一个,按N(大写)查找下一个 * 向下完整匹配光标下的单词 # 向上完整匹配光标下的单词 g* 向下部分匹配光标下的单词 g# 向上部分匹配光标下到单词输入模式下: :set ic 查找时,忽略大小写 :set noic 取消查找时忽略大小写 :f string (小写f与string有空格)搜索一行中匹配到的string :%s/old/new/g 全文将old替换为new,不提示 :%s/old/new/c 全文将old替换为new,提示是否替换 :n1,n2s/old/new/g n1-n2行中,将old替换为new,不提示 :n1,n2s/old/new/c n1-n2行中,将old替换为new,提示是否替换在替换文本old或new中有/字符时,需要用\进行转义

光标移动方式  命令模式下 H (大写,Head)移动到屏幕顶第一个非空白字符 M (大写,Mid)移动到屏幕中间第一个非空白字符 L (大写,Last)移动到屏幕底部第一个非空白字符 ( (左小括号)移动到上一个句子首 ) (右小括号)移动到下一个句子首 { (左大括号)移动到上一个段落首 } (右大括号)移动到下一个段落首 % 光标跳转到匹配到括号处,支持{}() [[ 光标跳转到代码块开头即{处,要求{独占一行 gD 光标跳转到局部变量定义处 '' (两个单引号)光标跳转到上次停靠处 h (小写)光标左移一个字符,相当于左方向键 l (小写)光标右移一个字符,相当于右方向键 k (小写)光标垂直上移一行,相当于上方向键 j (小写)光标垂直下移一行,相当于下方向键 ctrl+f (forword)向下整页翻页 ctrl+b (backward)向上整页翻页 ctrl+u (up)向上翻半页 ctrl+d (down)向下翻半页 zz (小写)让光标所在行居于屏幕中央 zt (小写)让光标所在行居于屏幕最顶部 zb (小写)让光标所在行居于屏幕底部  输入模式下:

:n 指定移动到第n行

翻屏操作:

  Ctrl+f: 向后一屏;

  Ctrl+b:向前一屏;

  Ctrl+d: 向后半屏

  Ctrl+u: 向前半屏

多文件模式:

vim FILE1 FILE2 ...

:next

:first

:prev

:last

:wqall

:q!all

多文件窗口分割:

vim -o|-O FILE1 FILE2 ...

Ctrl+w, ARROW

单文件窗口分割:

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

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

定制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

:help 获取帮助

:help SUBJECT

特性设定的永久生效方式:

全局配置文件:/etc/vimrc

用户个人的配置文件:~/.vimrc

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

find命令:

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

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

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

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

查找条件:

根据文件名进行查找:

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

*, ?, []

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

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

根据属主、属组查找:

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

-group GROUPNAME:

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

-gid GroupID:

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

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

根据文件类型进行查找:

-type TYPE

f: 普通文件

d: 目录

l: 符号链接

b: 块设备

c: 字符设备

p: 命名管道

s: 套接字

组合查找条件:

与条件:-a

或条件:-o

非条件:-not, !

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

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

根据文件大小来查找:

-size [+|-]#UNIT

单位:k, M, G

#UNIT: (#-1,#]

+#UNIT: (#,+oo)

-#UNIT:[0,#-1]

根据时间戳:

以“天”为单位

-atime [+|-]#

#:[#,#+1)

+#: [#+1,oo]

-#: [0,#)

-mtime

-ctime

以“分钟”为单位

-amin

-mmin

-cmin

根据权限:

-perm [/|-]MODE

MODE: 精确权限匹配

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

/400

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

处理动作:

-print: 默认处理动作

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

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

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

-ok COMMAND {} \;

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

-exec COMMAND {} \;

无需用户确认;

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

Cp /etc/grub.cfg /tmp 

Vim /tmp/grub.cfg

   :%s/^\s*//g

wpsC40F.tmp

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

[root@localhost ~]# cp /etc/rc.d/init.d/functions /tmp/

[root@localhost ~]# vim /tmp/functions

:%s/^\s/#&/g

wpsC420.tmp

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

wpsC421.tmp

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

:%s/^#\s/ /g

wpsC431.tmp

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

[root@localhost var]# find -user root -group mail

wpsC442.tmp

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

[root@localhost var]# find -not -user root \( -not -user bin -o -user hadoop \)

wpsC443.tmp

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

[root@localhost var]# find -mtime -7 \( -not -user root -o -user hadoop \)

wpsC444.tmp

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

[root@w7cn202x250 ~]# find / -type f -mtime -7 \( -nouser -o -nogroup \) –ls

wpsC445.tmp

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

[root@localhost etc]# find -type f -size +20k -ls

wpsC455.tmp

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

[root@w7cn202x250 ~]# find /etc -type f -not -perm /222 –ls

 wpsC456.tmp

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

[root@w7cn202x250 ~]# find /etc -type f -not -perm -111 -ls

wpsC467.tmp

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

[root@localhost etc]# find init.d -perm /113 -ls

wpsC468.tmp

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

因为我的虚拟机里面之前自己做的测试/tmp/cat为文件,所以要保留,就在/var下cp了一个。

Cp /bin/cat /var 把cat拷贝到/var目录下,因为我的cat是在bin下的,每个人可能不一样;然后测试root用户可用/var/cat命令查看/etc/shadow文件,到用户bash下,测试发现denied,回到root用户下,为/tmp/cat做权限设定:chmod o+s /var/cat ,普通用户可用/var/cat执行管理员权限

wpsC469.tmp

wpsC47A.tmp

wpsC47B.tmp

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

首先我创建了组:mygrp,然后创建用户:qiuye1,qiuye2,并添加附加组mygrp到两个用户中,然后对/mydata/data目录进行权限设置,普通用户可写但是不可删除其他用户文件:chmod o+t;然后在qiuye1用户上测试结果:

wpsC47C.tmp

wpsC48C.tmp