- 实验目的:
- 掌握Linux系统文件检索、排序、查找命令;
- 掌握Linux系统文件的特殊权限及文件默认权限umask掩码;
- 掌握Linux系统用户和组管理、配置文件和常用命令。
- 实验内容:
在VMware中启动已经安装好的CentOS,本地登录root账号,并在桌面上打开终端,完成以下任务,截图并粘贴于以下空行中。
或者在启动CentOS后,打开putty或者MobaXterm,远程登录root账号,完成以下任务,截图并粘贴于以下空行中。
- grep与正则表达式的练习
grep格式: grep [选项] 字符串 [文件…]
注:需要查找的字符串最好加上引号
grep的常用选项:
-i :忽略大小写(ignore case)
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印
-n :显示行号
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到
-A n:显示匹配到的字符串所在的行及其后n行,after
-B n:显示匹配到的字符串所在的行及其前n行,before
-C n:显示匹配到的字符串所在的行及其前后各n行,context
正则表达式的模式匹配字符
元字符 | 作用 |
. | 匹配除了换行符外任意一个字符。例如:s..d会匹配在s和d这两个字母之间一定有两个字符的字符串所在的行。 |
* | 匹配前一个字符0次或任意多次。例如:aa*匹配至少包含有一个a的行。 |
^ | 匹配行首。例如:^hello会匹配以hello开头的行。 |
$ | 匹配行尾。例如:hello$会匹配以hello结尾的行。 |
[] | 匹配中括号中指定的任意一个字符,只匹配一个字符。 例如:[aoeiu] 匹配任意一个元音字母,[0-9] 匹配任意一位数字, [a-z][0-9]匹配小写字和一位数字构成的两位字符。 |
[^] | 匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配任意一位非数字字符,[^a-z] 表示任意一位非小写字母。 |
\ | 转义符。用于去掉有特殊意义的元字符的含义,恢复其原义。 |
{n} | 匹配前一个字符恰好出现n次。例如:[0-9]{4} 匹配4位数字,[1][3-8][0-9]{9} 匹配手机号码。使用时需要在大括号前加上\。 |
{n,} | 匹配前一个字符至少出现于n次。例如: [0-9]{2,} 匹配2位及以上的数字。使用时需要在大括号前加上\。 |
{n,m} | 匹配前一个字符至少出现n次,最多出现m次。例如: [a- z]{6,8} 匹配6到8位的小写字母。使用时需要在大括号前加上\。 |
完成以下练习:
利用SSH远程工具将myrefile.txt的文本文件复制到虚拟机中的/temp目录中。
查看此文件的内容。
匹配此文件中以love开头的所有行。
匹配此文件中以love.结尾的所有行。
匹配此文件中含有love或Love的行,并显示所在行号。
匹配此文件中o字符重复出现3次的行,并显示所在行号。
匹配此文件中o字符重复2到4次的行。
匹配此文件中出现you的行和其后1行,并显示所在行号。
匹配此文件中所有以大写字母开头的行,并显示所在行号。
匹配此文件中所有以英文句点“.”结尾的行。(提示:可以结合[]试试)
匹配此文件中所有含有单词love或Love的行。(提示:-w,注意与6) 的不同)
匹配此文件中所有仅由4个小写字母的单词所在的行(-w)。
find命令的练习(类似命令locate)
find格式:find [路径……] [选项] [表达式]
常用选项:
-name:按文件名,-iname忽略大小写
-user:按文件属主(拥有者)名称
-type:按文件类型
f 普通文件
d 目录
b 块文件(缓冲)
c 字符文件(不缓冲)
l 符号链接
p 命名管道(FIFO)
s 套接字
-size:按文件大小
-mtime:按文件修改时间(单位:天)
-mtime n : 列出在n天之前的“一天之内”被更改过内容的文件名
-mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名
-mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名
-atime:按文件访问(存取)时间(单位:天)
-perm:按权限
完成以下练习:
在根目录/下查找 大于2MB的文件。只截取前5个文件。
在根目录/下查找3天内没有访问过的目录。只截取前5个文件。
在根目录/下查找所有以.sh为扩展名的文件。只截取前5个文件。
在根目录/下查找所有以.sh为扩展名且文件属主为root的文件。只截取前5个文件。
在根目录/下将查找到的超过30天没有访问过文件以长格式的详细格式写入文件名为over30.txt的文件中。
find /tmp -atime +30 -exec ls -l {} \; > over30.txt
其中,{}代表的是由 find 找到的内容,找到的结果会被放置到 {} 位置中。
“-exec”和“\;” 是关键字,代表find之后额外动作的开始(-exec)和结束(\;),在这中间的就是find指令的额外动作。因为“;”在bash的环境下是有特殊意义的,因此需要使用转义符——反斜线\。
在/tmp目录下用touch命令一次创建三个空文件,文件名分别为test1、test2、test3。再利用通配符查找这三个文件,并同时将这三个文件删除。(提示:类似上一题,使用 -exec {} \;)
sort命令的练习
sort格式:sort [选项] [文件名]
常用选项:除了教材介绍的选项外,这里补充两个选项
-f:忽略字符的大小写
-t:指定排序时所用的栏位(列)分隔符。如 -t :,表示以“:”作为栏位分隔符
完成以下练习:
利用SSH远程工具将myrsort.txt的文本文件复制到虚拟机中的/tmp目录中。
查看此文件的内容。
对此文件按每行的第一个字符进行排序输出。
对此文件按每行的第一个字符进行逆序输出。
对此文件以“:”作为分隔符的第3列,按字符进行排序输出。
对此文件以“:”作为分隔符的第3列,按数字进行排序输出。
对此文件以“.”作为分隔符的第2列,按数字进行排序输出。
查看系统中root用户和普通用户的umask掩码分别是多少。
切换到root用户,在/tmp目录下新建一个空文件和一个目录,分别查看它们的默认权限分别是什么?
模仿查看passwd的方法,查看自己虚拟机中CentOS7中四个主要配置文件的前后各5行,并截图于每题的空行处,注意理解文件中各字段的含义。
passwd
head -5 /etc/passwd; tail -5 /etc/passwd
shadow
group
gshadow
账户和组的管理命令的练习。
账户管理命令:useradd、usermod、userdel、passwd
组管理命令:groupadd、groupmod、gropudel、gpasswd
创建普通用户Tom,同时设置其过期日期(自行设定),格式为2021-10-30。接着查看/etc/passwd文件中查看刚刚添加的用户(在文件的最后)。由于没有修改有关的默认值,注意查看此用户主目录、所在组等默认信息。
为新用户Tom设置密码,密码自行设定(管理员给普通用户设置密码时,即使密码过短或过于简单,在提示出错时,再重新输入相同的密码即可)。
切换到用户Tom,并用设置好的密码登录,登录后修改自己的密码。
切换到root用户,创建一个名为gr_R的普通组,并查看/etc/group最后一行是否添加成功。
将用户Tom添加到gr_R这个普通组中(gpasswd命令),并查看/etc/group最后一行是否添加成功。
锁定用户Tom的账号,切换到用户Tom,查看是否可以登录。
切换到root用户,解除对用户Tom的锁定,并切换到用户Tom,查看是否可以登录。
删除用户Tom,并在/etc/passwd中查看结果。(若提示该用户正在使用某进程,可使用ctrl+d(或输入exit)退出root用户,系统会自动回到Tom用户;再次使用ctrl+d退出Tom用户,此时系统会自动返回到root用户,此时可正常删除用户。如若不行,重复上述过程再试)
删除普通组gr_R,并在/etc/group中查看结果。