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

移动光标的方法
h 或 向左箭头键(←)光标向左移动一个字符
j 或 向下箭头键(↓)光标向下移动一个字符
k 或 向上箭头键(↑)光标向上移动一个字符
l 或 向右箭头键(→)光标向右移动一个字符
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
+光标移动到非空格符的下一列
-光标移动到非空格符的上一列
n<space>那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]移动到这一行的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个档案的最后一行(常用)
nGn 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg移动到这个档案的第一行,相当于 1G 啊! (常用)
n<Enter>n 为数字。光标向下移动 n 行(常用)
搜寻与取代
/word向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word向光标之上寻找一个字符串名称为 word 的字符串。
n这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
:n1,n2s/word1/word2/gn1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
x, X在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nxn 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd删除游标所在的那一整列(常用)
nddn 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除游标所在处,到该行的最后一个字符
d0那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy复制游标所在的那一行(常用)
nyyn 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制 20 列(常用)
y1G复制游标所在列到第一列的所有数据
yG复制游标所在列到最后一列的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p, Pp 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J将光标所在列与下一列的数据结合成同一列
c重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u复原前一个动作。(常用)
[Ctrl]+r重做上一个动作。(常用)
.重复前一个动作

第二部份:一般模式切换到编辑模式的可用的按钮说明

进入插入或取代的编辑模式
i, I进入插入模式(Insert mode):
i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空格符处开始插入』。 (常用)
a, A进入插入模式(Insert mode):
a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在行的最后一个字符处开始插入』。(常用)
o, O进入插入模式(Insert mode):
这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处插入新的一行』; O 为在目前光标所在处的上一行插入新的一行!(常用)
r, R进入取代模式(Replace mode):
r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc]退出编辑模式,回到一般模式中(常用)

第三部份:一般模式切换到指令列模式的可用的按钮说明

指令列的储存、离开等指令
:w将编辑的数据写入硬盘档案中(常用)
:w!若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q离开 vi (常用)
:q!若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!
:w [filename]将编辑的数据储存成另一个档案(类似另存新档)
:r [filename]在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filename 这个档案。
:! command暂时离开 vi 到指令列模式下执行 command 的显示结果!例如
『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
vim 环境的变更
:set nu显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu与 set nu 相反,为取消行号!

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

       find  path   -option   [  -print ]   [ -exec   -ok  command ]   {} ;

-name "文件名称": 支持使用glob;
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
-user USERNAME: 查找属主为指定用户的文件;
-uid UserID: 查找文件的属主指定uid的文件;
-gid GroupID:
-nouser: 查找没有属主的文件;
-nogroup:查找没有属组的文件;
根据文件类型进行查找:
d: 目录
l: 符号链接
b: 块设备
s: 套接字

!A -o !B = !(A -a B)
!A -a !B = !(A -o B)
单位: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 {} \;
无需用户确认;


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

sh环境配置:
配置文件,生效范围划分,存在两类:
全局配置:
/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) 定义命令别名;
(2) 定义本地变量;

变量:内存空间,变量名
类型:
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)

位置变量:$1, $2
特殊变量:$?

变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
自定义变量:
变量赋值:变量名=值

bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;

120:24bits
120: 8bits

定义本地变量:
查看:set

定义环境变量:
export name=value
declare -x name=value

查看:env, printenv, export

撤消变量:
unset name

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

bash中的引用符号:
'': 强引用,变量替换不会发生
"":弱引用
``: 命令引用

shell登录类型:
交互式登录:
直接通过终端进行的登录;
通过su -l Username命令实现的用户切换;

非交互式登录:
图形界面下打开的命令行窗口;
执行脚本;
su Username;

配置文件作用次序:
交互式登录:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

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


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

SUID:
(1) 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;(2) 启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;
权限设定:
chmod u+s FILE...
chmod u-s FILE...
注意:
s: 属主原本拥有x权限;
S: 属主原本无x权限;

SGID:
默认情况下,用户创建文件时,其属级为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组>为目录的属组,而非用户的基本组;
权限设定:
chmod g+s FILE...
chmod g-s FILE...

Sticky:
对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;

权限设定
chmod o+t FILE...
chmod o-t FILE...


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


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

     :%s/^[[:space:]]\{1,}/g

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

     %s/^ /# /g

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

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

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

     :%s/^# \{1,}/ /gc 

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

[Task@magedu tmp]$ sudo find /var -user root -group mail -ls
786590    4 drwxrwxr-x   2 root     mail         4096 9月  1 23:25 /var/spool/mail
792773    4 -rw-------   1 root     mail         1943 9月  1 23:25 /var/spool/mail/root

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

[Task@magedu usr]$sudo find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls
530922    0 -rw-r--r--   1 Test     Test            0 9月  2 04:27 /usr/123

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

 sudo find /etc/ -atime -7  -a ! \( -user root -o -user hadoop \) -ls

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

sudo find /etc/ -atime -7  -a -nouser -a  -nogroup  -ls

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

sudo find /etc/ -size +20k -a -type f -ls

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

find /etc  -perm 555 -type f -ls

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

find /etc -perm /666  -type f -ls

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

find /etc/init.d  -perm  -111 -a -perm -002 -ls

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

      sudo chmod u+s /bin/cat

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

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

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

[root@magedu /]# mkdir -p /tmp/test/data
[root@magedu /]# chmod g+s /tmp/test/data
[root@magedu /]# chmod g+w /tmp/test/data
[root@magedu /]# chmod o+t /tmp/test/data
[root@magedu /]# chown .test123 /tmp/test/data
[root@magedu /]# id Test
uid=503(Test) gid=503(Test) 组=503(Test),513(test123)
[root@magedu /]# id Task
uid=504(Task) gid=504(Task) 组=504(Task),0(root),513(test123)
[root@magedu /]#
[root@magedu /]# ls -l  /tmp/test/data/
总用量 0
-rw-rw-r--. 1 Task test123 0 9月   5 05:56 123
-rw-rw-r--. 1 Test test123 0 9月   5 05:56 321
[root@magedu /]# su - Test
[Test@magedu ~]$ cd /tmp/test/data/
[Test@magedu data]$ rm 123
rm: 无法删除"123": 不允许的操作
[Test@magedu data]$