shell编程(1)
shell 命令应用练习
(1)通过帮助信息查看,简述以下文件的用途
① /etc/passwd (提示:通过 man 5 passwd 查看此文件描述说明)
② /etc/shadow (提示:通过 man 5 shadow 查看此文件描述说明)
③ /etc/group (提示:通过 man 5 group 查看此文件描述说明)
④ /etc/gshadow (提示:通过 man 5 gshadow 查看此文件描述说明)
password文件作用:该目录存储的是操作系统用户信息,该文件为所有用户可见
shadow文件负责用户所有的密码
group文件是有关于系统管理员对用户和用户组管理的文件,linux用户组的所有信息都存放在/etc/group文件中。具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
(2)依次输入如下命令,观察运行结果。结合 man id 查看到的帮助信息,指出每一条 命令功能
① id ② id -u ③ id -u root ④ id -u jsj
d命令可以显示真实有效的用户ID(UID)和组ID(GID)
-u或--user 显示用户ID。
(3)在 shell 命令终端依次输入以下命令,观察执行结果,理解每条命令实现的具体功能
① which python
whereis python
locate python
find /usr/bin -name python
locate命令不是实时查找,所以查找的结果不精确,但查找速度很快。因为它查找的不是目录,而是一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
which命令是查找命令是否存在,以及命令的存放位置在哪儿。
whereis命令只能用于搜索程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
② 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
带选项-E的是扩展的正则表达式,不带选项-E的是普通的正则表达式
③ sudo apt install gimp
which gimp
sudo apt remove gimp
which gimp
安装gimp
查找成功
卸载gimp
查找失败
④ ls -dl /root --time-style=long-iso
ls -dl /root --time-style=long-iso | cut -d' ' -f1,8
ls -dl /root --time-style=long-iso 文件目录信息,详细信息,时间信息为long-iso格式
ls -dl /root --time-style=long-iso | cut -d' ' -f1,8 以空格为分隔符,截取第一和第八 drwx------- /root
⑤ ls -l --time-style=long-iso
ls -l --time-style=long-iso -t
ls -l --time-style=long-iso -t -r
ls -l --time-style=long-iso 默认排序
ls -l --time-style=long-iso -t 按时间由近到远
ls -l --time-style=long-iso -t -r 按时间由远到近
⑥ ls /usr/share/man 显示其下目录
ls /usr/share/man | grep man[1-8] 在选定目录里搜索man1-8
ls /usr/share/man/man1
file /usr/share/man/man1/ls.1.gz 显示该目录下ls.1.gz信息
mkdir ~/temp; 创建目录
cp /usr/share/man/man1/ls.1.gz ~/temp 将文件复制过去
cd ~/temp; ls进入该目录并显示
sudo gzip -d ls.1.gz; ls 解压文件并显示
⑦ ls –l /home | grep "^d" | wc –l
ls-l查找在 /home目录下的文件,grep “^d”过滤行开头为d的文件,wc -l统计行数
⑧ sudo adduser user7 创建用户
ls /home | tee users | wc -l 在home目录下查找用户统计数量
(4)根据要求写出相应的 shell 命令
① 在目录/usr/include 下搜索文件 signal.h 是否存在 (提示: find 命令)
② 在/usr/include 目录下的所有文件中查找包含 BUFSIZ 的行,并显示所在行号。 要求:屏幕上只显示查找到的结果,过滤错误信息。 (提示: ① 利用 grep 和通配符*; ②利用错误信息重定向和特殊设备文件/dev/null)
③ 在用户名密码文件/etc/passwd 中查找登录 shell 为 bash 的用户信息记录,并显 示行号
第 3 页 /共 5 页
(提示:使用 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
文件/etc/apt/sources.list的用途:
/etc/apt/sources.list 是包管理工具,apt 所用的记录软件包仓库位置的配置文件,保存了ubuntu软件更新的源服务器的地址。
SED是一项Linux指令,可依照script的指令,来处理、编辑文本文件,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。
(6)查阅网络或帮助,体验命令 curl 和 wget 用法。
curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。
wget是Linux系统中的一个下载文件的命令工具。对于经常要下载一些软件或从远程服务器恢复备份到本地服务器的用户来说是必不可少的工具。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理,可以自动下载、支持断点续传,还很稳定。
编写一个 shell 脚本,使用 4 种方式(参见第 4 章教材/课件)分别执行。
(1)练习 1
该脚本的功能是,备份当前目录下最近 1 天以内(即 24 小时内)被修改过的普通文件。 以 backup 系统当前日期时间为文件名,并压缩存档。备份过程中出错信息写入 error_info。 然后分别查看备份文档和报错信息。 第
(2)练习 2
line3 中 read 命令选项-n11 功能: read读取变量值 n11代表有11位。
line14 的功能:$code:专业号,是11位学号的5~8位,$filename为major_code.txt,将专业号和文件名重定向到t1,t1作为之前命令输出,再作为命令输入,由t1的命令grep $code,从major_code.txt读取专业名到major。