vim--find--bash---作业
Vim编辑器:
全屏幕的编辑器:VIM
vi:visual interface
sed:行编辑器
vi, viiMproved
vim:
模式化:
编辑模式:命令模式
输入模式:
末行模式:
编辑模式 --> 输入模式:
i:insert,
a:append,
o:new line,
I:行首
A:行尾
O:上方新建行
输入模式 --> 编辑模式:
ESC
编辑模式 --> 末行模式:
:
末行模式 --> 编辑模式
ESC
打开vim:
#vim
#vim /PATH/TO/SOMEFILE
+#:#为行号;
+/PATTERN
关闭vim:
:q
:q!
:wq
:x
ZZ:保存退出
光标跳转:
字符间跳转:
h:
l:
j:
k:
#COMMAND:
单词间跳转:
w:后单词的词首
e:当前或后一个单词的词尾;
b:当前或前一单词的词首;
#COMMAND:
行内跳转:
^:跳转至行首的第一个非空白字符;
0:跳转至行首;
$:跳转至行尾;
行间移动:
#G:
1G,gg
G
句间移动:
)
(
段落间移动:
}
{
编辑命令:
字符编辑:
x:删除光标所在处的字符
#x:
xp:
r:替换光标所在处的字符;
删除命令:
d:
d^
d$
d0
dw,de, db
dd:
#COMMAND
注意:删除的内容会被vim编辑器保存至缓冲区当中;
粘贴:p (paste, put)
如果此复制或删除的内容不是一个完整行
p:粘贴至当前光标所在处后面;
P:粘贴至当前光标所在处前面;
如果复制的内容是完整行(可不止一行)
p:粘贴至当前光标所在行下方;
P:行上方;
复制命令:y, yank
y
y$,y^, y0
ye,yw, yb
yy:复制行
#COMMAND
改变命令:c, change
c$,c^, c0
cb,ce, cw
cc:
#COMMAND
撤消此前的编辑操作:
u:undo
撤消此前编辑操作;
#u
Ctrl+r:
恢复此前的撤消操作
.: 重复前一个编辑操作
翻屏操作:
Ctrl+f:向后一屏;
Ctrl+b:向前一屏;
Ctrl+d:向后半屏
Ctrl+u:向前半屏
vim内建教程:
vimtutor
vim的末行模式
(1)地址,定界
:start_pos,end_pos
#:第#行;
#,#
#,+#
.:当前行
$:最后一行
%:全文,相当于1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/
后可跟编辑命令:
d,y
w,r
(2)查找
/PATTERN:向尾部进行
?PATTERN:向首部进行
n:与命令同方向
N:与命令反方向
(3)查找替换
s:在末行模式下,在地址定界的范围内完成查找替换操作;
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;
\1,\2, ...
&:引用“要找的内容”匹配到的整个内容;
修饰符:
i:忽略大小写
g:全局替换
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/
分隔符可替换为其它字符:例如@,#等;
多文件模式:
vimFILE1 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)自动缩进:
setai
setnoai
(4)高亮搜索
sethlsearch
setnohlsearch
(5)语法着色
syntaxon
syntaxoff
(6)忽略字符大小写
setic
setnoic
:help获取帮助
:helpSUBJECT
特性设定的永久生效方式:
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimrc
find命令
文件查找:
在文件系统上查找符合条件的文件的过程;
文件查找:locate, find
locate:非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(updatedb);查找速度快;模糊查找;
find:实时查找;查找速度略慢;精确查找;
find命令:
find[OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
查找条件:
根据文件名进行查找:
-name "文件名称": 支持使用glob;
*,?, []
-iname "文件名称":不区分字符大小写,支持使用glob;
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-userUSERNAME: 查找属主为指定用户的文件;
-groupGROUPNAME:
-uidUserID: 查找文件的属主指定uid的文件;
-gidGroupID:
-nouser:查找没有属主的文件;
-nogroup:查找没有属组的文件;
根据文件类型进行查找:
-typeTYPE
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:查找到的文件的详细路径信息保存至指定文件中;
-okCOMMAND {} \;
对每个文件执行指定的命令之前需要用户事先确认;
-execCOMMAND {} \;
无需用户确认;
Linux文件系统上的特殊权限
权限模型:
u,g, o
r,w, x
进程的安全上下文:
前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
(1)用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
(2)程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
(3)进程拥的访问权限,取决其属主的访问权限:
(a)进程的属主,同文件属主,则应用文件属主权限;
(b)进程的属主,属于文件的属组,则应用文件属组权限;
(c)则应用其它权限;
SUID:
(1)任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否有执行权限;
(2)启动为进程之后,其属主不是发起者,而程序文件自己的属主;这种机制即为SUID;
权限设定:
chmodu+s FILE...
chmodu-s FILE...
注意:
s:属主原本拥有x权限;
S:属主原本无x权限;
SGID:
默认情况下,用户创建文件时,其属级为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;
权限设定:
chmodg+s FILE...
chmodg-s FILE...
Sticky:
对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;
权限设定
chmodo+t FILE...
chmodo-t FILE...
SUID,SGID, STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
chmod4777 FILE
chmod3755 DIR
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)定义命令别名;
(2)定义本地变量;
变量:内存空间,变量名
类型:
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
位置变量:$1, $2
特殊变量:$?
变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
自定义变量:
变量赋值:变量名=值
bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
120:24bits
120: 8bits
定义本地变量:
name=value
查看:set
定义环境变量:
exportname=value
declare-x name=value
查看:env, printenv, export
撤消变量:
unsetname
引用变量:
${name},$name
bash中的引用符号:
'':强引用,变量替换不会发生
"":弱引用
``:命令引用
shell登录类型:
交互式登录:
直接通过终端进行的登录;
通过su -l Username命令实现的用户切换;
非交互式登录:
图形界面下打开的命令行窗口;
执行脚本;
suUsername;
配置文件作用次序:
交互式登录:
/etc/profile--> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc -->/etc/bashrc
非交互式登录:
~/.bashrc--> /etc/bashrc --> /etc/profile.d/*.sh
编辑配置文件定义的新配置如何生效?
(1)重新登录;
(2)让当前shell进程去重新读取指定的配置文件;
source/PATH/TO/SOMEFILE
./PATH/TO/SOMEFILE
注意:副作用
练习
练习一:
复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
[root@yy ~]# cp /etc/grub.conf /tmp [root@yy ~]# vim /tmp/grub.conf
在末行模式下输入:%s/^[[:space:]]//g
练习二:
复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
[root@yy ~]# cp /etc/rc.d/init.d/functions /tmp/ [root@yy ~]# vim /tmp/functions
在末行模式下输入:%s/^[[:spaceh:]]/#&/g
练习三:
替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
在末行模式下输入:%s/\/etc\/sysconfig\/init/\var\/log/g
练习四:
删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
: %s/^#\([[:space:]]\+\)/\1/g
练习五:
查找/var目录属主为root,且属组为mail的所有文件;
[root@yy var]# find /var -user root -groupmail -ls 1574102 4 drwxrwxr-x 2 root mail 4096 8月 18 06:14/var/spool/mail
练习六:
查找/usr目录下不属于root、bin或hadoop的所有文件;
[root@yy usr]# find /usr ! \( -user root -o-user bin -o -user hadoop \) -ls 1188182 12 -rwsr-xr-x 1 abrt abrt 10296 7月 25 00:08 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
练习七:
查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
[root@yy usr]# find /etc -mtime -7 -a ! \( -user root-o -user hadoop \) –ls
练习八:
查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
[root@yy usr]# find / \( -nouser -o -nogroup \) -atime -7 –ls
练习九:
查找/etc目录下大于20k且类型为普通文件的所有文件;
[root@yy usr]# find /etc -type f -size +20k-ls 262821 28 -rw-r--r-- 1 root root 27223 11月 12 2010/etc/sound/events/gnome-2.soundlist 262187 628 -rw-r--r-- 1 root root 641020 10月 2 2013 /etc/services 264638 64 -rw-r--r-- 1 root root 62034 8月 17 22:18 /etc/ld.so.cache 263505 36 -rw-r--r-- 1 root root 34419 3月 4 2015 /etc/httpd/conf/httpd.conf 262210 44 -rw-r--r-- 1 root root 43591 9月 23 2011 /etc/mime.types 263198 48 -rw-r--r-- 1 root root 45281 3月 5 2013 /etc/bash_completion.d/git 264339 40 -rw-r--r-- 1 root root 39423 5月 26 2009/etc/bash_completion.d/subversion 264617 44 -rwxr-xr-x 1 root root 41966 8月 17 22:17 /etc/rc.d/init.d/vmware-tools
练习十:
查找/etc目录下所有用户都没有写权限的文件;
[root@yy usr]# find /etc ! -perm +222 -ls 263104 4 -r--r--r-- 1 root root 146 7月 24 19:09/etc/pam.d/cups 264381 4 -r--r----- 1 root root 4002 3月 2 2012/etc/sudoers 264190 4 -r-xr-xr-x 1 root root 3042 7月 24 12:04/etc/rc.d/init.d/lvm2-monitor 264189 4 -r-xr-xr-x 1 root root 2134 7月 24 12:04/etc/rc.d/init.d/lvm2-lvmetad 264188 4 -r-xr-xr-x 1 root root 1340 7月 24 12:04/etc/rc.d/init.d/blk-availability 262619 4 -r-------- 1 root root 45 8月 18 06:02/etc/openldap/certs/password 262491 196 -r--r--r-- 1 root root 198453 8月 18 06:01 /etc/pki/ca-trust/extracted/java/cacerts 262487 352 -r--r--r-- 1 root root 359773 8月 18 06:01 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt 262490 208 -r--r--r-- 1 root root 211626 8月 18 06:01 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem 262489 216 -r--r--r-- 1 root root 217510 8月 18 06:01 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem 262488 264 -r--r--r-- 1 root root 266702 8月 18 06:01/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem 263667 4 -r--r--r-- 1 root root 324 7月 24 00:14/etc/ld.so.conf.d/kernel-2.6.32-573.el6.x86_64.conf 262173 4 ---------- 1 root root 656 8月 18 06:14 /etc/gshadow- 264186 4 -r--r--r-- 1 root root 76 3月 24 10:00/etc/lvm/profile/thin-generic.profile 264185 4 -r--r--r-- 1 root root 828 7月 24 12:04/etc/lvm/profile/metadata_profile_template.profile 264187 4 -r--r--r-- 1 root root 80 3月 24 10:00/etc/lvm/profile/thin-performance.profile 264184 4 -r--r--r-- 1 root root 2249 7月 24 12:04/etc/lvm/profile/command_profile_template.profile 263102 4 -r--r--r-- 1 root root 460 7月 24 19:09/etc/dbus-1/system.d/cups.conf 263771 4 ---------- 1 root root 1066 9月 1 13:10 /etc/shadow 263773 4 ---------- 1 root root 667 9月 1 13:10 /etc/gshadow 262181 4 ---------- 1 root root 1037 8月 18 06:14/etc/shadow-
练习十一:
查找/etc目录下至少有一类用户没有执行权限的文件;
[root@yy usr]# find /etc ! -perm -111 –ls
练习十二:
查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
[root@yy usr]# find /etc/init.d -perm -113-ls 262240 0 lrwxrwxrwx 1 root root 11 8月 18 06:00/etc/init.d -> rc.d/init.d
练习十三:
让普通用户能使用/tmp/cat去查看/etc/shadow文件;
[root@yy usr]# which cat /bin/cat [root@yy usr]# cp /bin/cat /tmp/ [root@yy usr]# chmod 4755 /tmp/cat
练习十四:
创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
[root@yy usr]# mkdir -p /test/data [root@yy usr]# groupadd lll [root@yy usr]# chown :lll /test/data/ [root@yy usr]# chmod 3775 /test/data/ [root@yy usr]# useradd -G lll test1 [root@yy usr]# useradd -G lll test2 [root@yy usr]# useradd -G lll test3