您的位置:首页 > 运维架构 > Linux

linux运维练习-vim编辑和文件查找(8月30)

2015-09-07 00:18 441 查看
1、总结文本编辑工具vim的使用方法;
光标跳转:
字符跳转:
h:向左移动一个字符
l:向右移动一个字符
h:向上移动一个字符
j:向下移动一个字符
在(hjkl)前加上数字,表示跳转几个字符
单词跳转:
w:后单词的词首
e:当前或者后一个单词的词尾
b:当前或者前一单词的词首
在(web)前加上数字,表示多次移动
行间移动:
#G:第#行的行首
gg:文档的行首
G:文档的行尾
句间移动:
(:上一句
):下一句
段落间移动:
{:上一段
}:下一段

编辑命令:
字符编辑:
x:删除光标所在处的字符,前面加上#(数字)表示删除光标后的#个字符
xp:剪切和粘贴,在光标后面粘贴上删掉的字符
r:替换光标所在处的字符,#r表示把从光标开始的连续几个字符更换为某个字符,如4rd表示,将
更换为dddd
删除命令:
d:
d^:删掉本行第一个非空白字符到本光标间字符(不包含光标所在处的字符)
d$和D:删掉本行光标后的字符(包含光标所在处的字符),如果在后面加上#(数字),表示到从光标开始到第#行行尾
d0:表示删除从当前光标到光标所在行首的内容(不包含光标所在处的字符)
dw:删除光标所在处的单词(包括空格)
de:删除当前光标所在处的单词(当光标所在位置为非空格时)或者光标所在处后一个单词(当光标所在位置为空格时)
db:删除当前光标到词首的字符(不包括当前光标所在处的字符)
dd:删除光标所在行
都支持#COMMAND
复制命令:
y(支持选项与删除命令d一样)
y$:复制光标所在处到行尾的内容
y^:复制当前光标到行首非空白字符见得内容
y0:
ye:
yw:
yb:
yy:复制行
支持#COMMAND

粘贴命令:
p
如果复制或者删除的内容不是一个完成行
p:粘贴至当前光标所在处的后面
P:......................前面
如果复制或者删除的内容是一个完成行(有可能不止一行)
p:粘贴至当前光标所在行的下方
P:......................上方
改变命令:
c
c$,c^,c0,cb,ce,cw
cc:改变行
也支持#COMMAND
撤销命令:
u:撤销此前的编辑操作,#u,表示撤销前#次操作
Ctrl+r:恢复此前的撤销操作
.:重复前一个编辑操作
翻屏操作:
Ctrl+f:向后翻一屏
Ctrl+b:向前翻一屏
Ctrl+d:向后翻半屏
Ctrl+u:向前翻一屏
vim末行模式
(1)地址,定界
start_pos,end_pos
#:第#行
如:#,#:从某行到某行
#,+#:从某行到以后的几行
.:当前行
$:最后一行
%:全文,相当于1,$
/part/:第一次被模式匹配到的行
#,/part/:表示从第#行到被/part/第一次匹配到的行
后面可以跟编辑命令:
d:删除
y:复制
w:保存,相当于另存为:如1,100w /to_PATH/,表示将1,100行的内容另存到其他文件
r:在本文档中读取某个文档:如:100r /to_PATH/,表示将某个文件内容读取到本文档100行后面
(2)查找
/PATTERN:向尾部进行查找
?PATTERN:享首部进行查找
n:下一个匹配到内容,与命令方向相同
N:下一个匹配到内容,于命令方向相反
(3)查找替换
s:在末行模式下,在地址定界的范围内完成查找替换操作;
格式:s/要查找的内容/替换为的内容/修饰符
要查找的内容:可以使用模式
替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中分组括号所匹配到的内容
\1,\2.....
&:引用"要查找的内容"匹配到的整个内容
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/分隔符可替换为其它字符:例如@,#等;

多文件模式:
vim:FILE1 FILE2 ....
:next:下一个文件
:first:第一个文件
:prev:前一个文件
:last:最后一个文件
:wqall,退出所有文件并保存
:q!all,强制退出所有文件
多文件窗口分割:
vim -o FILE1 FILE2(竖排打开)
vim -O FILE1 FILE2(横排打开),Ctrl+w,方向键
单文件窗口分割:
Ctrl+w,s:水平分割
Ctrl+w,v:垂直分割
定制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
2、总结文件查找命令find的使用方法
文件查找:locate,find
locate: 非实时查找工具;依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新此数据库(updatedb);查找速度快;模糊查找;
find:实时查找;查找速度略慢;精确查找;
find命令:
find [OPTIONS] ... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出路径下的所有文件
处理动作:对符合条件的文件的操作;默认为输出至屏幕
查找条件:
根据文件名进行查找:
-name "FILE_NAME":区分大小写,支持使用glob;*,?,[]
-iname "FILE_NAME":不区分大小写,支持使用glob
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
根据属主、属组查找:
-user UAERNAME:查找属主为指定用户的文件
-group GROUPNAME:查找属组为指定组的文件
-uid USERID:查找文件的属主为指定UID的文件
-gid GROUPID:查找文件的属组为指定GID的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型进行查找:
-type TYPE
f:普通文件
d:目录
l:符号链接
b:块设备
c:字符设备
p:命名管道
s:套接字
组合查找条件:
与条件:-a
或条件:-o
非条件:-not,!
根据文件大小来查找:
-size [+|-] #UNIT
单位:K,M,G
#UNIT:(#-1,#]UNIT
+#UNIT:(#,+∞)UNIT
-#UNIT:(0,#-1]UNIT
根据时间戳:
以天为单位
-atime [+|-]#:最近访问时间
#:[#,#+1)
+#: [#+1,oo]
-#: [0,#)
-mtime:最近修改时间,文件内容修改
-ctime:文件改变时间,包括文件内容修改以及文件属性的修改
以“分钟”为单位
-amin
-mmin
-cmin
根据权限:
-perm [/|-]MODE
MODE:精确权限匹配
/MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件
如:/222,表示(u,g,o)中任何一类用户具有写权限即可
-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;
如:-222,表示(u.g,o)中每一类型用户都必须有写权限才符合
处理动作:
-print:默认处理动作
-ls:对于查找到的每个文件做"ls -l"的操作
-delete:删除查找到的文件
-fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中
-ok COMMAND {} \;对每个文件执行指定的命令之前需要用户事先确认,{}表示占位符,代表查找到的文件
-exec COMMAND {} \;对每个查找到的文件执行指定的命令时无需用户确认
3、总结bash环境变量的相关内容
bash环境配置:
配置文件,按照生效范围划分,存在2类:
全局配置:
/etc/profile,/etc/profile.d/*.sh
/etc/bashrc
个人配置:
~/.bash_profile
~/.bashrc
按功能划分,也存在2类
profile类:为交互式登录的shell提供配置
/etc/profile,/etc/profile.d/*.sh
~/.bash_profile
功用:
(1)定义环境变量,例如PATH、PS1
(2)定义要运行的命令或者脚本
bashrc类:为非交互式登录的shell提供配置
/etc/bashrc
~/.bashrc
功用:
(1)定义命令别名,如alias
(2)定义本地变量
变量:内存空间,变量名
类型:
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)

位置变量:$1, $2
特殊变量:$?
变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
自定义变量:
变量赋值:变量名=值
bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
120:24bits(以字符存储)
120: 8bits (以数值存储),还包括整型和浮点型
定义本地变量:
name=value
查看:set
定义环境变量:
export name=value
declare -x name=value
查看:env, printenv, export
撤消变量:
unset name
引用变量:
${name}, $name
bash中的引用符号:
'': 强引用,变量替换不会发生,如设置a=dog,则echo '$a'结果为$a
"":弱引用,变量替换会发生,如设置a=dog,则echo "$a"结果为dog
``: 命令引用
shell登录类型:
交互式登录:
直接通过终端进行的登录
通过su -l Username命令实现的用户切换
非交互式登录:
图形界面下打开的命令窗口
执行脚本
su Username
配置文件作用次序:
交互式登录:
/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
注意:副作用(可能有重复的环境变量)
4、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;
Linux文件系统上的特殊权限
进程的安全上下文:
前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
(1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
(2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
(3) 进程拥的访问权限,取决其属主的访问权限:
(a) 进程的属主,同文件属主,则应用文件属主权限;
(b) 进程的属主,属于文件的属组,则应用文件属组权限;
(c) 进程的属主不属于文件的属主,也不属于进程的属组,则应用其它权限;
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磁盘管理、文件系统相关知识点及其相关命令的使用方法;
Linux磁盘管理
机械式硬盘:
机械式:
track:磁道
sector: 512bytes
cylinder: 柱面,分区的基本单位;
MBR:Master Boot Record(0磁道0扇区),
512bytes
446: bootloader
64: (FAT)filesystem allocation table
16: 标识一个分区
2:55AA,用来标记此MBR内的数据是否有效,如果为55AA则为有效,其他则为无效

磁盘接口类型:
IDE (ATA):133MB/s,/dev/hd
SCSI: 640MB/s
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
识别硬盘设备:/dev/sd
标记不同的硬盘设备:/dev/sd[a-z]
标记同一设备上的不同分区:/dev/sd[a-z][1-]
1-4: 主或扩展分区标识
5+:逻辑分区标识
设备文件:特殊文件
设备号:major,minor
major:设备类型,主要作用之一是让内核去识别配套的设备驱动
minor:同一类型下的不同设备,主要作用在于让驱动程序去识别同一种驱动程序上所映射到的不同设备

“块”:block,随机设备,标识类型为B
“字符”:character,线性设备,标识类型为C
分区工具:
fdisk, parted, sfdisk
fdisk工具:
p: 显示
n: 创建
d: 删除
t: 修改分区ID
l: 列出所有支持ID类型
w: 保存退出
q: 放弃修改并退出
m: 获取帮助

创建完成之后,查看内核是否已经识别新的分区:
# cat /proc/partitions
有三个命令可以让内核重读磁盘分区表:
CentOS 5: partprobe [DEVICE]
CentOS 6,7:
partx
kpartx
partx命令:
partx DEVICE
partx -a DEVICE
partx -a -n M:N DEVICE
M
M:
:N
kpartx命令:
kpartx -af DEVICE
Linux文件系统管理
文件系统:
VFS:Virtual File System
Linux:ext2,ext3,ext4,reiserfs,xfs,btrfs,swap等
(1)日志型文件系统
非日志型文件系统:如ext2
日志型文件系统:如ext3
(2)swap
创建文件系统:
在分区上执行格式化(高级格式化)
要使用某种文件系统,满足两个条件:
内核中:支持此种文件系统
用户空间:有文件系统管理工具

创建工具:mkfs (make filesystem)
mkfs -t type DEVICE
mkfs.type DEVICE
ext系列文件系统的专用管理工具:
mke2fs -t {ext2|ext3|ext4} DEVICE
-b BLOCK: 1024, 2048, 4096
-L 'LABEL': 设定卷标
blkid命令:
blkid DEVICE
6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符
命令: %s/^ \+//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/g
替换前:


替换后:


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


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


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



13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
find / -nouser -o -nogroup -a -atime -7


14、查找/etc目录下大于20k且类型为普通文件的所有文件;
find /etc/ -size +20k -a -type f


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


16、查找/etc目录下至少有一类用户没有执行权限的文件;
find /etc/ ! -perm -111 -ls | more

17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
find /etc/init.d/ -perm -113 2>/dev/null -ls



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



19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
用户hadoop,属于Hadoop组
usermod -a -G hadoop openstack
chown :hadoop /test/data
chmod g+w data
chmod g+s /test/data/
chmod o+t /test/data/






本文出自 “^狐狸尾巴$” 博客,请务必保留此出处http://nikanke.blog.51cto.com/986378/1692096
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: