实验三 shell 编程(1)

一、shell命令应用练习

1.简述以下几个文件的用途

① /etc/passwd

passwd为密码文件,用来管理用户的密码。普通用户通常只能修改自己的密码信息。

② /etc/shadow

shadow是一个影子化的密码文件,它包含系统账户的密码信息和可选的年龄信息。只有管理员能查看修改。

③ /etc/group

group文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特征。

④ /etc/gshadow

/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。

2.依次输入如下命令,观察运行结果。结合 man id 查看到的帮助信息,指出每一条 命令功能

id:id命令可以显示真实有效的用户ID(UID)和组ID(GID)

id -u只显示用户ID

id -u root 即查看root的用户ID,为0

id -u jsj 查看jsj这个用户的ID,结果为没有jsj这个用户。

3.在 shell 命令终端依次输入以下命令,观察执行结果,理解每条命令实现的具体功能

① which python:查找系统PATH目录下名为python的可执行文件
whereis python:whereis命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广
locate python:通过数据库查找文件。这个命令可以找到任意你指定要找的文件,并且可以只输入部分文件名。
find /usr/bin -name python:通过直接搜索硬盘的方式查找/usr/bin目录下名为python的文件。

② grep -n -E ‘root|cy|^user*‘:/etc/passwd -n为显示行号,该指令作用是在/etc/passwd文件中查找以root或cy为行首的行,其中*表示重复零次以上,^表示必须出现在行首。
grep -n -E ‘ [[:digit:]] ‘ /etc/passwd:在 /etc/passwd文件中查找含有纯数字的行。
grep -n -E ‘ [[:alpha:]] ‘ /etc/passwd:在 /etc/passwd文件中查找含有纯字母的行。
grep -n ‘[0-9]\{4,\}‘ /etc/group 因为不加-E,所以使用花括号加转义符\{\} ,[0-9]等价于[[:digit:]],找出纯数字,4代表4位以上。

③ 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:以空格为分隔符,截取上一条指令中的第一和第八个域。

⑤ 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消失,说明已经解压并删除了压缩包。

⑦ ls –l /home | grep "^d" | wc –l:在home目录下查找以d开头的行,并统计行数。

⑧ sudo adduser user7:创建用户user7。
ls /home | tee users | wc -l:在home目录下查找用户名,并统计行数。

4.根据要求写出相应的 shell 命令

① 在目录/usr/include 下搜索文件 signal.h 是否存在 (提示: find 命令)

② 在/usr/include 目录下的所有文件中查找包含 BUFSIZ 的行,并显示所在行号。
要求:屏幕上只显示查找到的结果,过滤错误信息。

③ 在用户名密码文件/etc/passwd 中查找登录shell为bash的用户信息记录,并显示行号

④ 从/etc/group 文件中截取第 1 列(组名)和第 3 列(组 id),并按照组 id 号的数值大小由小到大排序。

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 功能,截图显示 2~3 个自己尝试的 sed 命令练习,并对具体功能作必要陈述说明:

删除含有“2”的行:

把第一行换成0000000:

③ 命令工具 awk 功能,截图显示 2~3 个自己尝试的 sed 命令练习,并对具体功能作必要陈述说明

统计/etc/passwd里的用户数:

统计当前目录下所有文件占用的总大小:

其中size=size+$5中,$5代表每行第五列,第五列是大小,因此这样写。

6.查阅网络或帮助,体验命令 curl 和 wget 用法

① 命令工具 curl 功能

curl+网址,显示网址的html。

获取网站cookie

保存网页

② 命令工具 wget 功能

下载单个文件:

断点续传:

测试网站能否正常访问:

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

(1)练习 1

方式1:bash<filename

方式二:bash filename [ arguments ]

方式3: filename

方式4:. filename

(2)练习 2

方式1:bash<filename

方式二:bash filename [ arguments ]

方式3: filename

方式4:. filename

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

read用于从键盘读取变量值,11n代表有11位。

② 写出 line14 的功能

$code:专业号,从line6来看是11位学号的5~8位,$filename就是line11的major_code.txt,该行代码将专业号和文件名重定向到t1,t1作为前面的命令输出,然后再作为命令输入,根据t1的命令grep $code,从major_code.txt读取专业名到major。

三、总结与体会

通过这次linux实验,我踏入了一个新的领域——shell编程。linux的命令种类繁多,功能微小但却齐全,组装起来十分强大,可以实现各种功能,构建新的世界。不过实验的过程是很辛苦的,经常会少输入空格或者出现一些奇奇怪怪的错误。接触到了很多不了解的命令,收获了不少新知识 。认识到自己还有很多不足,遗憾的是平时没有很多时间去完善自我,还需加倍努力。

原文地址:https://www.cnblogs.com/ColdEurope016/p/8940819.html

时间: 2024-10-09 23:21:14

实验三 shell 编程(1)的相关文章

Linux实验三 shell编程(1)

1. 练习 shell 中命令历史.别名.特殊字符用法(第 4 章 4.2 节~4.5 节) (1)定义别名 定义别名是,往往用单引号将它所代表的内容括起来,以防止shell对其中的内容产生歧义,如对空格和特殊字符另作解释. (2)特殊字符用法 1.一般通配符 *(星号):匹配任意字符的0次或多次(文件名中的圆点和路径名中的斜线必须显示匹配) ?(问号):匹配任意一个字符 [字符组]:匹配该字符组所限定的任何一个字符 !(惊叹号):如果它紧跟在一对方括号的左方括号[之后,表示不在此字符组的所列出

实验四 shell 编程(2)

一.实验步骤 1.shell 变量基本用法及常用符号使用 (1)将 主提示符改为 用户的主目录名 export PS=$HOME (2)将字符串 DOS file c:>\$student\*赋值给变量 x,并显示出来 (3)在 shell 命令终端输入 likes=(cosmos galaxy moon); likes[6]=mars,然后使用 echo 分别显示以下表达式的值,并结合结果,写出表达式的作用. likes=(cosmos galaxy moon); likes[6]=mars:

[芯片] 3、接口技术&#183;实验三&#183;可编程并行接口8255A

目录 一.实验目的和要求 二.实验原理与背景 2-1.8255A简介 2-2.8255A编程 三.实验具体的内容 3-1.8255方式0实验1 3-2.8255方式0实验2 3-3.8255方式1输出实验 3-4.8255方式1输入实验 四.实验的代码说明 4-1.8255方式0实验1代码及说明 4-2.8255方式0实验2代码及说明 4-3.8255方式1输出实验代码及说明 4-4.8255方式1输入实验代码及说明 五.实验结果的分析 5-1.8255方式0实验1实验分析 5-1.8255方式

实验四 shell编程2

1. shell 变量基本用法及常用符号使用 此部分要求写出实现相应要求的 shell 命令,截图显示 (1) 将主提示符改为用户的主目录名 (提示:参考教材 4.6.8 节环境变量PS1 和HOME 的用法) (2) 将字符串 DOS file c:>\$student\*赋值给变量 x,并显示出来 (提示:注意引号的选择,同时确保字符串中多个空格.$.*等完全原样显示) (3) 在 shell 命令终端输入likes=(cosmos galaxy moon); likes[6]=mars,然

实验四 shell编程(2)

1.  shell 变量基本用法及常用符号使用 (1)将主提示符改为用户的主目录名 重新登陆之后ps1值恢复默认值. (2)将字符串  DOS file   c:>\$student\*赋值给变量 x,并显示出来 若赋值的字符串中有空格时需要用双引号或者单引号括起来. (3)在 shell 命令终端输入 likes=(cosmos galaxy moon); likes[6]=mars,然后使用 echo 分别显示以下表达式的值,并结合结果,写出表达式的作用. ① ${likes[*]}:显示l

实验三 shell命令(1)

四.实验结论 1. 练习shell中命令历史.别名.特殊字符用法(第4章4.2节~4.5节) 2.  shell命令应用练习 (1)通过帮助信息查看,简述以下文件的用途 ①/etc/passwd (提示:通过man 5 passwd查看此文件描述说明) /etc/passwd存放密码文件,文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性,包括:登录名,可选的加密后的密码,数字用户id,数字组id,用户名和注释字段,用户主目录,可选的用户命令解释器. ②/etc/shadow(提

汇编语言_实验三_编程、编译、连接、跟踪

四.实验结论 1.       练习1 第一步,在记事本中输入实验要求中提供的代码,结果如下: 将其以文件名t1.asm另存为到E:/masm. 第2步,为方便后续操作,此处先准备一个批处理文件: 同样将其放入E盘masm路径下,重命名为process.bat. (1)进入并配置好DSBox环境,使用process t1对t1.asm进行编译.连接并运行: 屏幕上出现36. (2)将修改line 4和line 6中寄存器dl增加的值,发现line 4中写入的数值是屏幕上显示的第一位数字1,lin

centos shell编程4【分发系统】 第三十八节课

centos shell编程4[分发系统]  第三十八节课 http://www.cnblogs.com/MYSQLZOUQI/p/4811790.htmlmkpasswd 生成密码的工具,安装 expect包 yum install -y expect 上半节课 下半节课 f

centos shell编程5LANMP一键安装脚本 第三十九节课

centos shell编程5LANMP一键安装脚本  第三十九节课 上半节课 下半节课 f