一、实验目的
- 练习并熟练掌握 shell 中通配符、管道线、重定向等特殊符号的用法
- 练习 shell 中正则表达式的用法
- 体验学习更多常用 linux 命令工具,尤其是和管道线、正则表达式等配合的组合使用
- 掌握 shell 中普通变量的基本用法
- 掌握 shell 脚本程序建立和执行的方法
二、实验准备
结合第 4 章课件,学习/复习第 4 章教材 4.1 节~4.5 节,具体包括:(1)shell 脚本建立和执行的方法(2)shell 特殊字符的用法
三、实验内容
- 练习 shell 中命令历史、别名、特殊字符用法(第 4 章 4.2 节~4.5 节)(必做)
2.shell 命令应用练习(具体见实验步骤)(必做)
3.编写一个 shell 脚本,使用 4 种方式分别执行(具体见实验步骤)(必做)
4.结合个人学习进度条,选择在 linux 环境下进行的新尝试和新探索(选做*)
四、实验步骤及实验结论
1. 练习 shell 中命令历史、别名、特殊字符用法(第 4 章 4.2 节~4.5 节)
2. shell 命令应用练习
(1)通过帮助信息查看,简述以下文件的用途
① /etc/passwd 用户账户信息
② /etc/shadow 可选的加密后的密码文件
③ /etc/group 组账户信息
④ /etc/gshadow 安全组账户信息
(2)依次输入如下命令,观察运行结果。结合 man id 查看到的帮助信息,指出每一条命令功能
① id 显示真实有效的用户ID(UID)和组ID(GID)
② id -u 只显示用户ID
③ id -u root 查看root的用户ID
④ id -u jsj 查看用户hadoop的用户ID
此处,jsj 可用您自己电脑所安装系统中任何账号替换测试
(3)在 shell 命令终端依次输入以下命令,观察执行结果,理解每条命令实现的具体功
能
① which python whereis python locate python
find /usr/bin -name python
(说明: which, whereis, locate, find 都具有检索的功能,结合执行结果,查找帮助信息,总结其区别)
Which 查看可执行文件的位置
Whereis 查看文件的位置
Locate 配合数据库查看文件位置
Find 实际搜寻硬盘查询文件名称
② grep |
-n |
-E |
'root|jsj|^user*' /etc/passwd (提示:扩展正则表达式) |
|
grep |
-n |
-E |
' [[:digit:]] ' |
/etc/passwd |
grep |
-n |
-E |
' [[:alpha:]] ' |
/etc/passwd |
grep |
-n |
'[0-9]\{4,\}' /etc/group (提示: 在用户组文件中查找 GID 是 4 位数 |
及以上的组信息记录)
(说明:带选项-E 的表示扩展的正则表达式;不带选项-E 的是普通的正则表达
式)
grep命令可通过正则表达式搜索文本,并打印匹配到的行
选项-n可打印行号
-E可使用多个正则表达式。
③ sudo apt install gimp which gimp
sudo apt remove gimp which gimp
sudo apt-get install gimp命令可安装gimp
sudo apt -get remove gimp命令可卸载gimp
which gimp用于查看文件的位置。
④ ls -dl /root --time-style=long-iso
ls -dl /root --time-style=long-iso | cut -d' ' -f1,8
(说明:cut 命令的选项-d 后引号里有空格;提示: 和前一行结果对比观察)
选项-d可自定义分隔符
-f显示指定的域中的内容
上述命令指定空格为分隔符,显示第1和第8个域中的内容。
⑤ ls -l --time-style=long-iso ls -l --time-style=long-iso -t
ls -l --time-style=long-iso -t -r (说明:依次执行,对比观察,结合帮助选项)
-t -r分别按正序倒序显示
⑥ ls /usr/share/man
ls /usr/share/man | grep man[1-8] ls /usr/share/man/man1
file /usr/share/man/man1/ls.1.gz(结合执行结果,review2.8.1 节 gzip 命令内容)
mkdir ~/temp; cp /usr/share/man/man1/ls.1.gz ~/temp
cd ~/temp; ls
sudo gzip -d ls.1.gz; ls
(说明:依次执行,结合前后指令执行结果,理解指令功能;关于 gzip 命令,可参考 2.8.1 节理解)
file命令可识别文件类型,然后创建新目录temp,将ls.1.gz拷贝至temp目录
gzip命令是进行解压。
⑦ ls –l /home | grep "^d" | wc –l
ls-l查找在 /home目录下的文件
grep “^d”过滤行开头为d的文件
wc -l统计行数
⑧ sudo adduser user7
ls /home | tee users | wc -l (提示:输入 cat users 观察该文件内容)
sudo adduser命令:添加新用户
(4)根据要求写出相应的 shell 命令
① 在目录/usr/include 下搜索文件 signal.h 是否存在 (提示: find 命令)
② 在/usr/include 目录下的所有文件中查找包含 BUFSIZ 的行,并显示所在行号。
要求:屏幕上只显示查找到的结果,过滤错误信息。
(提示:① 利用 grep 和通配符*;②利用错误信息重定向和特殊设备文件/dev/null)
③ 在用户名密码文件/etc/passwd 中查找登录 shell 为 bash 的用户信息记录,并显
示行号
(提示:使用 grep 和正则表达式中的$)
④ 从/etc/group 文件中截取第 1 列(组名)和第 3 列(组 id),并按照组 id 号的数值大小由小到大排序。(提示:综合使用 cut, 管道线及 sort 命令)
(提交文档时,写出其实现的功能的命令及截图,包括命令和结果在内的截图)
(5)体验 awk, sed 用法:依次执行命令,观察执行结果
① cp /etc/apt/sources.list t1; less t1
② sed -e "s/#.*//g" t1
③ sed -e "s/#.*//g" t1 | awk '{if (length != 0) print $0}' ④ tail -5 /etc/passwd | awk -F: '{print $1}'
⑤ tail -5 /etc/group | tee t2
awk 'BEGIN{print "file t2"} {print "line" NR ":" $0} END {print "over"}' t2
总结:
1. /etc/apt/sources.list是包管理工具apt所用的记录
2.sed可将字符进行替换,上图练习中将hello替换为bye
3.行匹配语句awk ‘’只能用单引号
每行按空格或tab分割,输出文本中指定项
awk -F: -F相当于内置变量FS,指定分割字符
(6)查阅网络或帮助,体验命令 curl 和 wget 用法。
curl是一个利用URL规则在命令行下工作的文件传输工具,是一款很强大的http命令行工具,它支持文件的上传和下载,是综合传输工具。
wget是一个下载文件的工具,它用在命令行下.wget工具功能完善,支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来方便简单。
3. 编写一个 shell 脚本,使用 4 种方式(参见第 4 章教材/课件)分别执行。(1)练习 1
第 1 步,使用 vi/vim/gedit 或其它编辑器,编写 shell 脚本 ex1.sh,内容如下:
该脚本的功能是,备份当前目录下最近 1 天以内(即 24 小时内)被修改过的普通文件。以 backup 系统当前日期时间为文件名,并压缩存档。备份过程中出错信息写入 error_info。
然后分别查看备份文档和报错信息。
第 2 步,尝试第 4 章介绍的四种方式,运行该脚本,并理解本例中综合使用的 shell 命
令。
(2)练习 2
第 1 步,使用 vi/vim/gedit 或其它编辑器,编写 shell 脚本 ex2.sh,内容如下:
尝试第 4 章介绍的四种方式,运行该脚本。
若提示“找不到文件 major_code.txt”,请将公邮实验文件夹中的 major_code.txt 拷贝至 ex1.sh
所在目录,重新执行一次。
注:文件 major_code.txt,请不要做任何改动,包括格式。
结合运行结果,分析脚本代码,在实验报告中总结以下内容:
① 写出 line3 中 read 命令选项-n11 功能
② 写出 line14 的功能
五、总结与体会
本次实验,练习了许多shell命令以及各种用法,需要花时间练习巩固掌握