一.实验内容
- 练习 shell 中命令历史、别名、特殊字符用法(第 4 章 4.2 节~4.5 节)
2. shell 命令应用练习(具体见实验步骤) - 编写一个 shell 脚本,使用 4 种方式分别执行(具体见实验步骤)
- 结合个人学习进度条,选择在 linux 环境下进行的新尝试和新探索
二.实验步骤及实验结论
1.练习shell中命令历史、别名、特殊字符用法(第4章4.2节~4.5节)
2.shell命令应用练习
(1)通过帮助信息查看,简述以下文件的用途
① /etc/passwd (提示:通过 man 5 passwd 查看此文件描述说明)
etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
② /etc/shadow (提示:通过 man 5 shadow 查看此文件描述说明)
/etc/shadow文件格式与/etc/passwd文件格式类似,同样由若干个字段组成,字段之间用“:”隔开。
文件中字段主要含义为:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
③ /etc/group (提示:通过 man 5 group 查看此文件描述说明)
用户组的所有信息都存放在/etc/group文件中。此文件的格式是由冒号(:)隔开若干个字段,这些字段具体如下:
组名:口令:组标识号:组内用户列表
④ /etc/gshadow (提示:通过 man 5 gshadow 查看此文件描述说明)
/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。
组名:口令:组管理者:组内用户列表
(2)依次输入如下命令,观察运行结果。结合 man id 查看到的帮助信息,指出每一条 命令功能
① id 显示当前用户id
② id -u 显示用户id
③ id -u root 显示root的id
④ id -u kyo 显示用户kyo的id
(3)在 shell 命令终端依次输入以下命令,观察执行结果,理解每条命令实现的具体功
能
① which python 查看可执行文件的位置
whereis python 查看文件的位置
locate python 配合数据库查看文件位置
find /usr/bin -name python 实际搜寻硬盘查询文件名称
(说明: which, whereis, locate, find 都具有检索的功能,结合执行结果,查找帮 助信息,总结其区别)
② grep -n -E 'root|kyo|^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的是普通的正则表达式)
[:digit:] 匹配任意一个数字字符
[:alpha:] 匹配任意一个字母字符(包括大小写字母)
③sudo apt install gimp:安装软件gimp
which gimp:查询gimp的位置
sudo apt remove gimp:卸载gimp
which gimp:查询gimp的位置,此时已经没有查询结果
④ls -dl /root --time-style=long-iso:/root下显示文件目录信息,详细信息,时间按完整的IOS时间格式显示
ls -dl /root --time-style=long-iso | cut -d' ' -f1,8:以空格为分隔符,截取上一条指令中的第一和第八个域
(说明:cut命令的选项-d后引导里有空格;提示:和前一行对比视察)
⑤ ls -l --time-style=long-iso,:ls -l 是列出文件的详细信息,时间设置为long-iso格式,默认排序
ls -l --time-style=long-iso -t:在前一条命令的基础上按时间由近到远排序
ls -l --time-style=long-iso -t -r:在前一条命令的基础上按时间排序,但变为由远到近排序
⑥ ls /usr/share/man:显示/usr/share/man下的目录
ls /usr/share/man | grep man[1-8]:在上一条命令的基础上搜索man1~man8
ls /usr/share/man/man1:显示/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:根目录下创建temp
文件夹,把ls.1.gz复制到temp下
cd ~/temp; ls:转到temp目录下,查看所有文件目录,此时有后缀.gz
sudo gzip -d ls.1.gz; ls:解压并查看目录,此时.gz消失,说明已经解压并删除了压缩包
⑦
统计home目录下以d开头的档的行数
⑧
添加用户
统计home目录下的用户行数
(4)根据要求写出相应的shell命令
① 在目录/usr/include 下搜索档 signal.h 是否存在
② 在/usr/include 目录下的所有档中查找包含 BUFSIZ 的行,并显示所在行号。
③ 在用户名密码档/etc/passwd 中查找登录 shell 为 bash 的用户信息记录,并显示行号
④ 从/etc/group 档中截取第 1 列(组名)和第 3 列(组 id),并按照组 id 号的数值大小由小到大排序。
(5)
① 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
3.编写个shell脚本并用四种方式分别执行
(1)方式1: bash < filename
方式2: bash filename [ arguments ]
方式3: filename
方式4: . filename
(2)
三.总结
此次试验了解到了编辑命令时缺少或者多出一个空格会造成截然不同的结果,让我明白了编写代码时要十分细心,不可粗心大意。另外在练习2中没有找到major_code文件,对此不明所以,希望日后学习可以解决。