linux运维实战练习-2015年8月30日课程作业(练习)安排
一、作业(练习)内容:
1、总结文本编辑工具vim的使用方法;
vim: 全屏幕的编辑器
编辑模式:命令模式
输入模式:
末行模式:
编辑模式 --> 输入模式:
i: insert, 在光标所在在位置前可输入内容
a:append,在光标所在在位置后可输入内容
I: 行首,在光标所在在位置行首可输入内容
A:行尾,在光标所在在位置行尾可输入内容
O:在光标所在位置上方新建行,在行首可输入内容
o:new line,在光标所在位置下方新建行,在行首可输入内容
输入模式 --> 编辑模式:ESC
编辑模式 --> 末行模式::
末行模式 --> 编辑模式:ESC
打开vim:
# vim
# vim /PATH/TO/SOMEFILE (文件不存时,在该目录下新建该文件)
+#:#为行号;打开时光标处在第#行
+/PATTERN :打开时光标处在模式第一次所匹配到的行的行首
在编辑模式下按键的操作(屏幕上不显示操作记录,只显示操作结果)
(1)光标跳转:
字符间跳转:
h:光标向左移动一个字符
l:光标向右移动一个字符
j:光标向下移动一个字符
k:光标向上移动一个字符
#COMMAND:(3h:光标向左移动三个字符)
单词间跳转:
w:光标移到后单词的词首
b:光标移到当前或前一单词的词首;
e:光标移到当前或后一个单词的词尾;
#COMMAND:(3w:光标移到后第三个单词的词首)
行内跳转:
^: 光标跳转至行首的第一个非空白字符;
0:光标跳转至行首;绝对行首
$: 光标跳转至行尾;绝对行尾
行间移动:
#G: 光标移到第#行行首
1G, gg:光标移到第一行行首
G:光标移到最后一行行首
句间移动:
):光标移到下一句
(:光标移到上一句
段落间移动:
}:光标移到下一段
{:光标移到上一段
(2)编辑命令:
字符编辑:一次编辑一个字符
x: 删除光标所在处的字符
#x:删除从光标所在位置起向后的共#个字符
x+p: 将光标所在位置处的字符与后一字符交换位置
r: 替换光标所在处的字符;(先输r,再输入替换字符)
#r:将从光标所在位置起向后的共#个字符都替换为替换字符
删除命令:d
d^:删除光标所在位置前到行首的字符
d$:删除光标所在位置至行尾的字符(也可使用D命令)
d0:删除光标所在位置前到行首(包括空白字符)的字符
dd: 删除光标所在位置整行
#dd:删除从光标所在行起向后的共#行
dw, de, db,dh,dk,dj,dl
#COMMAND
注意:删除的内容会被vim编辑器保存至缓冲区当中;向前(上)删除时,光标所在位置的字符(行)不会被删除,向后(下)删除时光标所在位置的字符(行)背删除
粘贴命令:p (paste, put)
如果此复制或删除的内容不是一个完整行
p:粘贴至当前光标所在处后面;
P:粘贴至当前光标所在处前面;
如果复制的内容是完整行(可不止一行)
p: 粘贴至当前光标所在行下方;
P:粘贴至当前光标所在行行上方;
注意:粘贴删除的内容指的是粘贴前最后一次删除操作删除的内容
复制命令:y, yank
y^:复制光标所在位置前到行首的字符
y0:复制光标所在位置前到行首的字符(包括空白字符)
y$:复制光标所在位置前到行尾的字符
yy: 复制光标所在行(也可使用Y命令)
#yy:复制从光标所在行起向后的共#行
ye, yw, yb,yh,yj,yk,yl
#COMMAND
改变命令:c, change(删除后同时进入输入模式)
c$(C):删除光标所在位置至行尾的字符,并进入输入模式(光标位置不变)
c^, c0
cb, ce, cw,ch,cj,ck,cl
#COMMAND
注意:
cc: 删除整行后新建一行,同时进入输入模式,此时光标置于新建行的绝对行首处
#cc:删除从光标所在行起向后的共#行后新建一行,同时进入输入模式.....
(3) .: 重复前一个编辑操作
(4)撤消此前的编辑命令的编辑操作:
u: undo,撤消此前编辑操作;
#u:撤消此前共#词操作
Ctrl+r:恢复此前的撤消操作
(5)翻屏操作:
Ctrl+f: 向后一屏;
Ctrl+b:向前一屏;
Ctrl+d: 向后半屏
Ctrl+u: 向前半屏
(6)退出vim
ZZ:保存退出
(7)vim内建教程: vimtutor
在末行模式下的输入操作(屏幕上显示操作记录,也显示操作结果)
(1)关闭vim:
:q 退出
:q! 强制退出
:wq 保存退出
:x 保存退出
:wq! 强制保存退出
:x! 强制保存退出
:w 路径文件 将此次编辑后的文件保存至李静文件中
(2) 地址,定界
:start_pos,end_pos
#:第#行;
#1,#2 :第#1行至第#2行
#1,+#2:第#1行到第#1行+#2行(10,+3:第10行到第13行)
#1,-#2:第#1行到第#1行-#2行(10,-3:第10行到第7行)
.: 当前行
$: 最后一行
%: 全文,相当于1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/后可跟编辑命令:d, y,w, r
(3) 查找(文本关键字搜索)
/PATTERN:向尾部进行
?PATTERN:向首部进行
n: 与命令同方向(下一个)
N:与命令反方向 (上一个)
(4) 查找替换
s: 在末行模式下,在地址定界的范围内完成查找替换操作;
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,
可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;
\1, \2, ...
&:引用“要找的内容”匹配到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换
注意:/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/,分隔符可替换为其它字符:例如@,#等;
(5)多文件模式:
vim FILE1 FILE2 ...同时打开多个文件,默认显示第一个文件
:next 打开下一个文件
:first 打开第一个文件
:prev 打开前一个文件
:last 打开最后一个文件
:wqall 保存并关闭所有文件
:q!all 强制关闭所有文件
多文件窗口分割:
vim -o FILE1 FILE2 ... 水平分割打开多个文件
vim -O FILE1 FILE2 ... 垂直分割打开多个文件
按键操作:
先Ctrl+w, 在ARROW(上下左右四个箭头):切换光标位置
单文件窗口分割:按键操作
先 Ctrl+w, 再s: split, 水平分割
先Ctrl+w,再 v: vertical, 垂直分割
(6)定制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 区分
(7):help 获取帮助
:help SUBJECT
特性设定的永久生效方式:
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimrc
2、总结文件查找命令find的使用方法;
find命令:
find:显示当前目录下的所有文件
find 目录:显示目录下的所有文件
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;
默认为找出指定路径下的所有文件;包括以下几种
(1)根据文件名进行查找:
-name "文件名称": 支持使用glob;
*, ?, []
-iname "文件名称":不区分字符大小写,支持使用glob;
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
(2)根据属主、属组查找:
-user USERNAME: 查找属主为指定用户的文件;
-group GROUPNAME:
-uid UserID: 查找文件的属主指定uid的文件;
-gid GroupID:
-nouser: 查找没有属主的文件;
-nogroup:查找没有属组的文件;
(3)根据文件类型进行查找:
-type TYPE
f: 普通文件
d: 目录
l: 符号链接
b: 块设备
c: 字符设备
p: 命名管道
s: 套接字
(4)根据文件大小来查找:
-size [+|-]#UNIT
单位:k, M, G
#UNIT: (#-1,#] 精确查找
+#UNIT: (#,+oo)
-#UNIT:[0,#-1]
find /etc -size 2k 查找/etc下文件大小为大于1K小于等于2K的文件
find /etc -size +2k 查找/etc下文件大小为大于2K的文件
find /etc -size -2k 查找/etc下文件大小为小于2K的文件(包括0K)
(5)根据时间戳:过去的某个时间
以“天”为单位
-atime [+|-]#
#:[#,#+1) 第#天被访问的文件
+#: [#+1,oo] #天内未被访问的文件
-#: [0,#) #天之内被访问的文件
-mtime
-ctime
以“分钟”为单位
-amin
-mmin
-cmin
(6)根据权限:
-perm [+|-]MODE
MODE: 精确权限匹配
+MODE:任何一类对象(u,g,o)的任何一位权限符合条件即可;隐含或条件;
-MODE:为每一类对象指定的每一位权限都必须同时存在方为符合条件;隐含与条件;
(7)组合查找条件:(以上六种条件的组合)
与条件:-a
或条件:-o
非条件:-not, !
!A -o !B = !(A -a B)
!A -a !B = !(A -o B)
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
-print: 默认处理动作 ,显示值屏幕
-ls:类似于对查找到的每个文件做"ls -l"的操作;
-delete: 删除查找到的文件;
-fls /path/to/somefile:查找到的文件的详细路径信息保存至指定文件中;
-ok COMMAND {} \;
对每个文件执行指定的命令之前需要用户事先确认;
-exec COMMAND {} \;
无需用户确认;
3、总结bash环境变量的相关内容;
(1)shell登录类型:
交互式登录:
直接通过终端进行的登录;
通过su -l Username命令实现的用户切
非交互式登录:
图形界面下打开的命令行窗口;
执行脚本;
su Username;
(2)变量:内存空间,保存数据的载体,命名的内存空间,包括数值型变量和字符型变量
类别:
环境变量:作用范围当前shell进程及其子进程
本地变量:作用范围当前shell进程
局部变量:作用范围仅为当前shell进程中某代码片断(通常为函数上下文)
位置变量:$1, $2....${10},${11}....
特殊变量:$?,$!,$$,$@,$#
(3)变量定义方式:
定义本地变量:
name=value (变量名=值)
定义环境变量:
export name=value
declare -x name=value
定义局部变量:
local name=value (local 变量名=值)
(4)撤消变量:
unset name (unset 变量名)
注意:
变量名:不能使用程序的关键字(保留字),如if,case,for等
只能使用数字、字母、下划线且不能以数字开头
严格区分大小写
尽量不要全大写,尽量首字母不大写、尽量见名知意,
export 本地变量名:将本地变量定义为环境变量
export 原环境变量名=新内容$原环境变量名 :添加值至原环境变量中
export 环境变量名:导出环境变量
readonly 变量名:将变量定义为常量(不能改变其值也不能撤消,只有关闭当前shell
(5)变量的查看:
set:查看当前shell的所有变量
env, printenv, export:查看当前shell的所有境变量
(6) 引用变量:
${name}, $name
一般使用如下命令调用变量:
echo ${变量名} ,{}可省略
'': 强引用,变量替换不会发生 ,输入什么就输出什么
"":弱引用 ,出现变量时,输出显示的是变量值
bash内置变量:可直接调用,内置了许多环境变量,例如PATH等
bash弱类型:变量类型无须事先声明
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用;
字符型: 120是24bits
数值型:120是8bits
(7)变量的配置文件:
profile类:为交互式登录的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
用户:~/.bash_profile
功用:
(1) 定义环境变量,例如PATH、PS1
(2) 运行命令或脚本
bashrc类:为非交互式登录shell提供配置
全局:/etc/bashrc
用户:~/.bashrc
功用:
(1) 定义命令别名;
(2) 定义本地变量;
配置文件作用次序:
交互式登录:
/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)的知识点;
SUID:
对于一个可执行文件来讲,任何用户运行此文件为进程时,进程的属主不再是发起者本人,
而是可执行程序文件自己的属主
展现在文件属主的执行位上
s: 属主原本拥有x权限;
S: 属主原本无x权限;
权限设定:chmod u+s FILE...
取消:chmod u-s FILE...
SGID:
默认情况下,用户创建文件时,其属级为此用户所属的基本组;
一旦某目录被设定了SGID权限,则对此目录拥有写权限的用户在此目录中创建的文件所属的组为目录的属组,而非用户的基本组;
展现在文件属组的权限位上
s: 属组原本拥有x权限;
S: 属组原本无x权限;
权限设定: chmod g+s FILE...
取消:chmod g-s FILE...
Sticky:
对于一个多人可写的目录,此权限用于限制每个仅能删除自己的文件;
展现在文件其他位的执行权限位上
t: 其他位原本拥有x权限;
T: 其他位原本无x权限;
权限设定: chmod o+t FILE...
取消:chmod o-t FILE...
注意:三位二进制数字表示是否有对应SUID, SGID, STICKY权限
000 001 010 011 100 101 110 111
0 1 2 3 4 5 6 7
可以使用chmod命令修改文件的SUID, SGID, STICKY权限
chmod 4777 FILE
chmod 3755 DIR
5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;
(1)设备
设备类别:
“块”设备(b):block,随机设备
“字符”设备(c):character,线性设备
设备文件:是一种特殊文件,在/dev/下,设备文件关联至对应设备的驱动程序
设备号:
major: 主设备号,区别设备类型,关联驱动程序
minor: 次设备号,区别同一类型下的不同设备
mkmod命令:创建设备文件
mkmod 选项 设备名称 设备类别(b/c) 主设备号 次设备号
mkmod -m 664设备名称 设备类别(b/c) 主设备号 次设备号 (-m;指明权限)
注意:设备文件的设备名称不能随便命名,由ICANN定义
(2)磁盘设备
磁盘设备接口类型:
并行接口 :IDE (ATA):133MB/s,
两个IDE控制口,每个控制器可通过线缆介入两块磁盘,一主一从
设备文件在/dev/hd[a-z]
SCSI: 640MB/s,设备文件在/dev/sd[a-z][#}
串行接口: SATA:6Gbps,设备文件在/dev/sd[a-z][#}
SAS:6Gbps,设备文件在/dev/sd[a-z][#}
USB:480MB/s,设备文件在/dev/sd[a-z][#}
硬盘:
SSD:固态硬盘
机械式硬盘:
track:磁道
sector: 扇区,512bytes
cylinder: 柱面,分区的基本单位;
MBR:Master Boot Record,主引导扇区,存放磁盘分区表,0磁道0扇区
512bytes
前446: bootloader,是一个程序,加载当前磁盘上的操作系统
中64: filesystem allocation table分区表
每16: 标识一个分区
后2:55AA ,MBR的有效性标记
注意: 在Linux系统中硬盘设备文件在:/dev/sd[a-z][#}
标记不同的硬盘设备:/dev/sd[a-z]
标记同一设备上的不同分区:[#]
#:1-4表示主分区或扩展分区
5+:表示逻辑分区
(3)分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;
每一个磁盘最多可以创建4个主分区,可以将其中的某一个主分区创建为扩展分区后,
再在扩展分区中创建逻辑分区
创建分区的命令:
fdisk, parted, sfdisk
fdisk:最多支持在一块硬盘上的15个分区;fdisk提供了一个交互式接口来管理分区,
它有许多子命令,分别用于不同的管理功能,所有的操作均在内存中完成,没有直接同步到磁盘
fdisk -l :查看当前系统下所有被识别的硬盘及分区情况
fdisk -l /dev/[hs]d[a-z]:查看当前系统下所有被识别的硬盘及分区情况
fdisk /dev/设备名1:管理设备1的分区
分区管理子命令:
p: 显示现有分区表
n: 创建新分区
d: 删除现有分区
t: 修改分区ID(修改文件系统类型)
l: 列出所有支持ID类型
w: 保存退出
q: 放弃修改并退出
m: 获取帮助
创建完成之后,查看内核是否已经识别新的分区:
# cat /proc/partitions
注意:在Centos6中,新磁盘分区后,内核可直接成功识别,但磁盘已有分区且分区已挂载,在将剩余磁盘空间分区后需要让内核重读磁盘分区表(可能要2次以上才能成功读取)后才能查看到
有三个命令可以让内核重读磁盘分区表:
CentOS 5: partprobe [DEVICE]
CentOS 6,7: partx,kpartx
partx命令:
partx DEVICE
partx -a DEVICE
partx -a -n M:N DEVICE
kpartx命令:
kpartx -af DEVICE
(4)文件系统:
Linux支持以下类型文件系统:
Linux:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap
光盘:iso9660
Windows: fat32(vfat), ntfs
Unix: ffs, ufs, jfs, jfs2
网络文件系统:nfs, cifs
集群文件系统:ocfs2, gfs2
分布式文件系统:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs
伪文件系统:tmpfs,sysfs,proc,hugepagefs
Linux自己的文件系统可分为:
非日志型文件系统:ext2
日志型文件系统:加速文件检测并修复的过程ext3,ext4,xfs, btrfs等
交换文件系统:swap(必须使用独立的磁盘分区)
创建文件系统:在分区上执行格式化(高级格式化)
要使用某种文件系统,满足两个条件:
内核中:支持此种文件系统
用户空间:有文件系统管理工具
创建工具:mkfs (make filesystem)
mkfs -t type DEVICE
mkfs.type DEVICE
ext系列文件系统的专用工具:
mke2fs -t {ext2|ext3|ext4} DEVICE:创建ext文件系统
-b BLOCK: 1024, 2048, 4096
-L 'LABEL': 设定卷标
blkid命令:查看或修改ext文件系统属性
blkid DEVICE :查看LABEL, UUID, TYPE等属性
6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
# cp /etc/grub.cfg /tmp
#vim /tmp/grub.cfg
:%s@^[[:space:]]@@g
7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为
/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
#cp /etc/rc.d/init.d/functions /tmp
#vim /tmp/functions
:%s@^[[:space:]]@#&@g
8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
#vim /tmp/functions
:%s@\/etc\/sysconfig\/init@\/var\/log@g
9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
#vim /tmp/functions
:%s@^#\([[:space:]]\+\)@v1@g
10、查找/var目录属主为root,且属组为mail的所有文件;
#find /var -usr root -a -group mail
11、查找/usr目录下不属于root、bin或hadoop的所有文件;
#find /usr -not (-user root -o -user bin -o -user hadoop)
12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文
件;
#find /etc -mtime -7 -a -not(-use root -o -user hadoop)
13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
#find / (-nouser -o -nogroup) -a -atime -7
14、查找/etc目录下大于20k且类型为普通文件的所有文件;
#find /etc -f -size +20k
15、查找/etc目录下所有用户都没有写权限的文件;
#finf /etc -not -perm +222
16、查找/etc目录下至少有一类用户没有执行权限的文件;
#find /etc -not -perm -111
17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
#find /etc/init.d -perm -113
18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
#chmod u+s /bin/cat
19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
#mkdir -p /test/data
#chmod u+s /bin/mkdir
#chmod g+s /test/data
#chmod o+t /test/data