一、实验目的

  1. 练习并熟练掌握 shell 中通配符、管道线、重定向等特殊符号的用法
  2. 练习 shell 中正则表达式的用法
  3. 体验学习更多常用 linux 命令工具,尤其是和管道线、正则表达式等配合的组合使用
  4. 掌握 shell 中普通变量的基本用法
  5. 掌握 shell 脚本程序建立和执行的方法

二、实验准备

 

结合第章课件,学习/复习第章教材 4.1 ~4.5 节,具体包括:(1)shell 脚本建立和执行的方法(2)shell 特殊字符的用法

 

三、实验内容

 

  1. 练习 shell 中命令历史、别名、特殊字符用法(第 4.2 ~4.5 节)(必做)

         2.shell 命令应用练习(具体见实验步骤)(必做)

         3.编写一个 shell 脚本,使用种方式分别执行(具体见实验步骤)(必做)

   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 文件中截取第列(组名)和第列(组 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工具功能完善,支持断点下载功能,同时支持FTPHTTP下载方式,支持代理服务器和设置起来方便简单。

3. 编写一个 shell 脚本,使用 4 种方式(参见第 4 章教材/课件)分别执行。(1)练习 1

 

步,使用 vi/vim/gedit 或其它编辑器,编写 shell 脚本 ex1.sh,内容如下:

 

该脚本的功能是,备份当前目录下最近天以内(即 24 小时内)被修改过的普通文件。以 backup 系统当前日期时间为文件名,并压缩存档。备份过程中出错信息写入 error_info。

然后分别查看备份文档和报错信息。

 

步,尝试第章介绍的四种方式,运行该脚本,并理解本例中综合使用的 shell 

 

令。

 

 

(2)练习 2

 

步,使用 vi/vim/gedit 或其它编辑器,编写 shell 脚本 ex2.sh,内容如下:

 

尝试第章介绍的四种方式,运行该脚本。

 

若提示“找不到文件 major_code.txt”,请将公邮实验文件夹中的 major_code.txt 拷贝至 ex1.sh

 

所在目录,重新执行一次。

 

注:文件 major_code.txt,请不要做任何改动,包括格式。

 

结合运行结果,分析脚本代码,在实验报告中总结以下内容:

 

① 写出 line3  read 命令选项-n11 功能

 

② 写出 line14 的功能

 

五、总结与体会

 

本次实验,练习了许多shell命令以及各种用法,需要花时间练习巩固掌握