vi,find,bash,磁盘管理,chmod
作业(练习)内容:
1、总结文本编辑工具vim的使用方法;
Vim :全屏编辑器,模式化编辑器
Vim模式:
编辑模式(命令模式)
输入模式
末行模式
模式转换:
编辑--à输入:
i:在当前光标所在字符的前面,转为输入模式;
a:在当前光标所在字符的后面,转为输入模式;
o:在当前光标所在的下方,新建一行,并转为输入模式;
I:在当前光标所在行的行首,转换为输入模式
A:在当前光标所在行的行尾,转换为输入模式
O:在当前光标所在行的上方,新建一行,并转为输入模式:
打开文件
#vi /tmp/grub2.cfg
Vi +#:打开文件,并定位于第#行
Vi + :打开文件,定位至最后一行
Vi +/PSTTERN: 打开文件,定位至第一次被PATTERN匹配到的行的行首
默认处于编辑模式
关闭文件
末行模式关闭文件
:q 不保存退出
:wq 保存退出
:q! 强制不保存退出
:w 保存
:w! 强行保存
:wq --à:x
2编辑模式下退出
zz:保存并退出
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:全局替换
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/
分隔符可替换为其它字符:例如@,#等;
1、总结文件查找命令find的使用方法;
find命令:实时查找;查找速度略慢;精确查找;
find [OPTION]... [查找路径] [查找条件] [处理动作]
查找路径:默认为当前路径;
查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
查找条件:
根据文件名进行查找:
-name "文件名称": 支持使用glob;
*, ?,[]
-iname "文件名称":不区分字符大小写,支持使用glob;
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-user USERNAME: 查找属主为指定用户的文件;
-group GROUPNAME:
-uid UserID: 查找文件的属主指定uid的文件;
-gid GroupID:
-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 {} \;
无需用户确认;
2、总结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 -xname=value
查看:env, printenv, export
撤消变量:
unset name
引用变量:
${name},$name
bash中的引用符号:
'': 强引用,变量替换不会发生
"":弱引用
``: 命令引用
3、总结Linux文件系统上的特殊权限(SUID、SGID、Sticky)的知识点;
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...
权限模型:
u, g, o
r, w, x
进程的安全上下文:
前提:进程有属主(进程以哪个用户的身份运行);文件有属主和属组;
(1) 用户是否能够把某个可执行程序文件启动为进程,取决于用户对程序文件是否拥有执行权限;
(2) 程序启动为进程后,此进程的属主为当前用户,也即进程的发起者;进程所属的组,为发起者的基本组;
(3) 进程拥的访问权限,取决其属主的访问权限:
(a) 进程的属主,同文件属主,则应用文件属主权限;
(b) 进程的属主,属于文件的属组,则应用文件属组权限;
(c) 则应用其它权限;
5、总结Linux磁盘管理、文件系统相关知识点及其相关命令的使用方法;
分区:分隔存储空间为多个小的空间,每个空间可独立使用文件系统;
分区工具:
fdisk,parted, sfdisk
fdisk工具的使用:
最多支持在一块硬盘上的15个分区;
分区管理子命令:
p: 显示
n: 创建
d: 删除
t: 修改分区ID
l: 列出所有支持ID类型
w: 保存退出
q: 放弃修改并退出
m: 获取帮助
创建完成之后,查看内核是否已经识别新的分区:
# cat/proc/partitions
有三个命令可以让内核重读磁盘分区表:
CentOS5: partprobe [DEVICE]
CentOS6,7:
partx
kpartx
partx命令:
partxDEVICE
partx-a DEVICE
partx-a -n M:N DEVICE
M
M:
:N
kpartx命令:
kpartx-af DEVICE
Linux文件系统管理:
mkfs, mkfs -ttype = mkfs.type
ext:mke2fs
创建文件系统:
mke2fs[OPTION]... DEVICE
-t {ext2|ext3|ext4}
-b{1024|2048|4096}
-L'LABEL'
-j:mke2fs -t ext3
-i #:
-N #:
-m #: 预留磁盘空间占据多大百分比的空间为后期管理使用;
-OFEATURE[,...]
-O^FEATURE:关闭此特性
has_journal
文件系统属性查看及调整工具:
e2label
e2lableDEVICE [LABEL]
tune2fs
显示ext系列文件系统的属性,或调整其属性;
-l:显示超级块中的信息;显示整个文件的属性及布局等相关信息;
-L'LABEL':修改卷标;
-m #: 调整预留给管理员的管理空间百分比;
-j: ext2--> ext3
-O:文件系统属性的启动或关闭
-o:文件系统默认挂载选项的启用或关闭
dumpe2fs:
-h: 仅显示超级块信息;
文件系统检测:
fsck:Filesystem check
fsck -ttype
fsck.type
-a: 自动修复错误
-r: 交互式修复错误
-f: 强制检测
e2fsck:ext系列文件系统专用的检测修复工具;
-y: 自动回答为"yes"
-f:force
6、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
[root@localhost~]# cp -p /etc/grub2.cfg /tmp/[root@localhost~]# ls /tmp/grub2.cfg[root@localhost~]# vi /tmp/grub2.cfg:%s/^\s*//g或者:%s/^[[:space:]]//g 在左下角命令模式
7、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
[root@localhost~]# cp /etc/rc.d/init.d/functions /tmp/[root@localhost~]# vi /tmp/functions
:%s/^\s/#&/g或者:%s/^[[:space:]]/#&/g 在左下角命令模式
8、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
[root@localhost~]# vi /tmp/functions:%s/\/etc\/sysconfig\/init/\var\/log/g
9、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
[root@localhost~]# vi /tmp/functions:%s/^#\(\s\+\)/\1/g
10、查找/var目录属主为root,且属组为mail的所有文件;
[root@localhost~]# find /var -user root -group mail -ls134295027 0 drwxrwxr-x 2 root mail 6 Jun 10 2014 /var/spool/mail[root@localhost~]#
11、查找/usr目录下不属于root、bin或hadoop的所有文件;
[root@localhost~]# find /usr ! -user root ! -user bin ! -user hadoop -lsfind: 'hadoop'is not the name of a known user[root@localhost~]# useradd hadoop[root@localhost~]# find /usr ! -user root ! -user bin ! -user hadoop -ls--------------这里可能需要等待几秒中,不要以为卡在这里---------200304 0 drwx------ 2 polkitd root 6 Jun 10 2014 /usr/share/polkit-1/rules.d
12、查找/etc目录下最近一周内其内容修改过,且属主不为root或hadoop的所有文件;
[root@localhost~]# find /etc -mtime -7 ! -user hadoop -ls67108993 12 drwxr-xr-x 74 root root 8192 Sep 2 08:23 /etc431625 4 -rw-r--r-- 1 root root 14 Sep 2 04:36 /etc/tuned/active_profile67985872 4 -rw-r--r-- 1 root root 470 Sep 2 08:23 /etc/group67985873 4 ---------- 1 root root 371 Sep 2 08:23 /etc/gshadow67985868 4 -rw-r--r-- 1 root root 995 Sep 2 08:23 /etc/passwd67985871 4 ---------- 1 root root 643 Sep 2 08:23 /etc/shadow67109049 4 drwxr-xr-x 6 root root 4096 Sep 2 04:36 /etc/sysconfig134732599 4 drwxr-xr-x 2 root root 4096 Sep 2 04:36 /etc/sysconfig/network-scripts135058400 4 -rw-r--r-- 1 root root 352 Aug 28 05:38/etc/sysconfig/network-scripts/ifcfg-eno1677773667427376 4 -rw-r--r-- 1 root root 952 Sep 2 08:18 /etc/passwd-67109038 4 ---------- 1 root root 614 Sep 2 08:18 /etc/shadow-67311285 4 -rw-r--r-- 1 root root 455 Sep 2 08:18 /etc/group-67109030 4 ---------- 1 root root 360 Sep 2 08:18 /etc/gshadow-[root@localhost~]#
[root@localhost~]# find /etc -mtime -7 ! -user hadoop ! -user root -ls[root@localhost~]# ----这里如果把root也除外什么都没有了,但是可以修改属主吖[root@localhost~]# cp -p /etc/group- /etc/group1[root@localhost~]# find /etc -mtime -7 ! -user hadoop ! -user root -ls[root@localhost~]# chown bin: /etc/group1[root@localhost~]# find /etc -mtime -7 ! -user hadoop ! -user root -ls67985874 4 -rw-r--r-- 1 bin bin 455 Sep 2 08:18 /etc/group1[root@localhost~]#
13、查找当前系统上没有属主或属组,且最近一周内曾被访问过的所有文件;
[root@localhost ~]# find /-nouser -mtime -7
14、查找/etc目录下大于20k且类型为普通谁的的所有文件;
[root@localhost ~]# find /etc -type f-size +20k -ls[root@localhost ~]# find /etc-size +20k -type f -ls
15、查找/etc目录下所有用户都没有写权限的文件;
[root@localhost ~]# find /etc ! =perm+222 -ls[root@localhost ~]# find /etc-not -perm +222
16、查找/etc目录下至少有一类用户没有执行权限的文件;
[root@localhost~]# find /etc ! -perm -111 -ls[root@localhost~]# find /etc -not -perm -222 -ls
17、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户拥有写权限的文件;
[root@localhost~]# find /etc/init.d -perm -113 -ls67208865 0 lrwxrwxrwx 1 root root 11 Aug 21 04:01/etc/init.d -> rc.d/init.d
18、让普通用户能使用/tmp/cat去查看/etc/shadow文件;
[root@localhost~]# which cat/usr/bin/cat[root@localhost~]# cp /bin/cat /tmp[root@localhost~]# ls -l /tmp/total 76-rwxr-xr-x. 1root root 54048 Sep 2 09:01 cat-rw-r--r--. 1root root 13430 Sep 2 07:45 functions-rw-r--r--. 1root root 3976 Aug 21 04:12 grub2.cfg[root@localhost~]# chmod u+s /tmp/cat [root@localhost~]# ls -l /tmp/total 76-rwsr-xr-x. 1root root 54048 Sep 2 09:01 cat-rw-r--r--. 1root root 13430 Sep 2 07:45 functions-rw-r--r--. 1root root 3976 Aug 21 04:12 grub2.cfg[root@localhost~]# chmod u-s /tmp/cat [root@localhost~]# ls -l /tmp/total 76-rwxr-xr-x. 1root root 54048 Sep 2 09:01 cat-rw-r--r--. 1root root 13430 Sep 2 07:45 functions-rw-r--r--. 1root root 3976 Aug 21 04:12 grub2.cfg[root@localhost~]# chmod 4755 /tmp/cat [root@localhost~]# ls -l /tmp/total 76-rwsr-xr-x. 1root root 54048 Sep 2 09:01 cat-rw-r--r--. 1root root 13430 Sep 2 07:45 functions-rw-r--r--. 1root root 3976 Aug 21 04:12 grub2.cfg[root@localhost~]#
19、创建目录/test/data,让某组内普通用户对其有写权限,且创建的所有文件的属组为目录所属的组;此外,每个用户仅能删除自己的文件;
[root@localhost~]# mkdir -p /test/data[root@localhost~]# groupadd only[root@localhost~]# chown :only /test/data/[root@localhost~]# ls -l /test/total 0drwxr-xr-x. 2root only 6 Sep 2 09:14 data[root@localhost~]# chmod o+t /test/data/[root@localhost~]# ls -l /test/total 0drwxr-xr-t. 2root only 6 Sep 2 09:14 data[root@localhost~]# useradd -G only user1