实验一:Linux操作系统的安装与配置
实验目的:
1.掌握虚拟机技术;
2.掌握Linux的安装步骤;
3.掌握安装过程中的基本配置要求。
4.掌握正确启动Linux的方法;
5.掌握正确退出Linux的方法;
6.熟悉已安装Linux版本的桌面内容。
实验内容:
1.建立虚拟机,进行必要的虚拟机设置;
2.在虚拟机上安装Linux操作系统,进行基本的配置;
3.用户的设置,包括用户名和口令的设置;
4.启动Linux的方法及有关命令操作;
5.退出Linux的方法及有关命令操作;
6.熟悉Linux桌面版的桌面系统构成。
实验原理:
虚拟机工作原理、操作系统安装方法。
CentOS 9与CentOS 8区别
CentOS是Community ENTerprise Operating System的缩写,是一个基于Red Hat Enterprise Linux (RHEL)的开源操作系统。它的发布对于开源社区和企业用户来说具有重要意义:
-
免费的企业级品质:CentOS提供了一个与RHEL几乎相同的功能集,但不包含任何商业支持,这为那些需要稳定、安全的操作系统但预算有限的组织提供了选择。
-
软件开发和测试平台:由于其稳定性,CentOS常被用作开发和测试环境的基础,开发者可以在上面构建和测试应用程序,而不必担心许可证费用。
-
学习平台:对于学习Linux管理和服务器运维的学生,CentOS是一个理想的学习平台,因为它提供了与许多企业环境中使用的系统相似的体验。
关于CentOS 9与CentOS 8的关系:
-
CentOS 8于2019年发布,计划服务到2024年,但在2021年底,CentOS项目宣布CentOS Stream将取代传统的CentOS Linux,这意味着CentOS 8的生命周期提前结束。
-
CentOS 9并非直接作为CentOS 8的后续版本出现,而是以CentOS Stream 9的形式存在。CentOS Stream是一个滚动更新的发行版,位于RHEL的主要版本之前或之后,作为一个开发分支,目的是为了更好地与RHEL的开发周期集成。
-
这一变化意味着,如果用户希望一个稳定的、类似于传统CentOS的版本,他们现在应该考虑使用 Rocky Linux 或 AlmaLinux 等替代品,这些项目是在CentOS 8退役后由社区发起的,旨在提供与CentOS Linux类似的目标和服务。
意义
CentOS 9的发布对于开源社区和企业用户来说具有重要的意义,主要体现在以下几个方面:
-
稳定的Linux发行版:CentOS是基于Red Hat Enterprise Linux (RHEL)的一个克隆版本,提供了与RHEL几乎相同的稳定性、安全性和性能,但不收取费用。这对于那些需要稳定操作系统的企业和个人开发者来说是一个极好的选择。
-
最新的软件和技术:CentOS 9保证了用户可以接触到最新的软件包和技术栈,包括Linux内核更新和其他关键应用程序的升级,帮助用户保持系统的现代化和安全性。
-
开发和测试环境:对于开发人员来说,CentOS 9提供了一个免费的平台来测试他们的应用,确保它们能在RHEL环境下正常运行,因为在生产环境中广泛使用的是RHEL或其衍生版。
-
社区支持:CentOS项目拥有庞大的用户和开发者社区,这意味着用户可以获得丰富的文档、教程以及社区成员的帮助,解决了在使用过程中遇到的问题。
-
迁移路径:由于CentOS 8的支持将在2021年底结束,CentOS 9为用户提供了平滑的迁移路径,确保他们能够继续得到长期的技术支持。
-
Stream特性:CentOS 9引入了Stream的概念,这是一个滚动更新的分支,允许用户更早地接触到新功能和改进,同时也保持了一定程度的稳定性。
安装CentOS9
下载Centos 9镜像文件
清华大学源网址https://mirrors.tuna.tsinghua.edu.cn/



安装Centos
所需软件:VMware® Workstation 16 Pro





版本里面没有Centos 9; 这里我们选择Centos 7同样可以使用


















用户设置





实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验二:Linux命令行基本操作
实验目的:
1.熟悉Linux命令行界面;
2.掌握Linux命令提示符的基本格式;
3.掌握Linux命令语法格式;
4.掌握Bash自动补全功能、历史命令记录功能;
5.掌握管道、重定向的使用方法;
6.掌握命令排列、命令续行、命令别名及强制中断命令执行的操作。
实验内容:
1.分别创建两个文件并任意输入不同的英文内容(文件名用自己的姓名拼音与编号命名,如zhangsan01、zhangsan02)。
2.将上题两个文件合并,将合并结果输出到第3个文件中(文件名如zhangsan03)。
3.统计第3个文件的行数和单词的个数;在文件3中查找指定字符串。
4.使用自动补全功能重复执行上述某条命令;使用历史命令记录功能重复执行上述某条命令。
5.使用命令行帮助功能查看date、more等命令的帮助信息。
6.显示当前计算机上的日期和时间。
实验步骤
1.分别创建两个文件并任意输入不同的英文内容(文件名用自己的姓名拼音与编号命名,如zhangsan01、zhangsan02)。
echo "Content of zhangsan01" > zhangsan01.txt
echo "Content of zhangsan02" > zhangsan02.txt

或者打开这两个文件(如使用nano
或vim
编辑器),手动输入不同内容并保存。
2.将上题两个文件合并,将合并结果输出到第3个文件中(文件名如zhangsan03)。
cat zhangsan01.txt zhangsan02.txt > zhangsan03.txt
此命令将zhangsan01.txt
和zhangsan02.txt
的内容追加合并至zhangsan03.txt
。

3.统计第3个文件的行数和单词的个数;在文件3中查找指定字符串。
-
统计行数:
wc -l zhangsan03.txt
-
统计单词数(假设单词由空格分隔):
wc -w zhangsan03.txt
-
查找指定字符串(假设要查找的字符串为
adeng
):grep "adeng" zhangsan03.txt

4.使用自动补全功能重复执行上述某条命令;使用历史命令记录功能重复执行上述某条命令。
在命令行中,输入部分命令后按Tab
键,系统会尝试自动补全命令或文件名。例如,要重复执行wc -l zhangsan03.txt
,只需输入wc -l zhang
,然后按Tab
键,系统会自动补全为zhangsan03.txt
,再按Enter
键即可执行命令。
使用历史命令记录功能重复执行上述某条命令:
- 按上箭头键(
↑
),会依次显示之前执行过的命令。找到需要重复执行的命令后,直接按Enter
键即可。
5.使用命令行帮助功能查看date、more等命令的帮助信息。
man date
man more


这两个命令将分别打开date
和more
命令的手册页,其中包含了命令的详细说明、选项列表以及使用示例。
6.显示当前计算机上的日期和时间。
date

执行此命令后,终端将输出当前系统的日期和时间。
实验原理:
Linux操作系统工作原理及shell工作原理
实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验三:Linux文件和目录管理
实验目的:
1.熟悉Linux命令的一般格式;
2.掌握Linux常用文件操作命令;
3.掌握Linux常用目录操作命令;
4.掌握Linux的其他方面的应用命令;
5.理解Linux的工作原理及应用;
6.熟悉Linux的字符界面的工作原理及操作方法。
实验内容:
1.文件操作命令: touch、cat、more、less、head、tail、cp、ln、mv、rm
2.目录操作命令:cd、pwd、mkdir、ls、rmdir、rm
3.文件规档命令:tar
4.在文件中查找指定字符串命令:grep
5.切换用户命令:su;查看当前用户命令:whoami;
6.清屏命令:clear;信息回显命令:echo帮助命令:man、info。
实验步骤
一、文件操作命令
-
touch:创建新文件或更新文件的访问和修改时间。
示例:
touch adeng.txt

上述命令将在当前目录下创建一个名为adeng.txt
的新文件(如果该文件已存在,则其访问和修改时间将被更新)。
-
cat:用于查看文件内容,尤其适合小文件。
示例:
cat adeng.txt
这将输出
adeng.txt
文件的完整内容。

-
more:分页查看文件内容。
more adeng.txt
你可以通过按下空格键来逐页查看文件内容,按
q
键退出查看。

-
less :与
more
类似,但功能更强大,支持前后翻页、搜索等操作。less adeng.txt

使用less
查看文件时,可以使用上下箭头翻页,/keyword
进行搜索,n
和N
分别查找下一个和上一个匹配项,q
退出查看。
-
head:显示文件开头部分的内容,默认显示前10行。
head adeng.txt

若要查看文件前n
行内容,可使用如下命令:
head -n n adeng.txt

-
tail:显示文件末尾部分的内容,默认显示后10行。
tail adeng.txt

若要查看文件后n
行内容,可使用如下命令:
tail -n n adeng.txt

-
cp:复制文件或目录。
cp adeng.txt backup.txt

上述命令将adeng.txt
复制为backup.txt
。若要复制整个目录及其内容,需添加-r
选项:
cp -r adeng adeng2

-
ln :创建链接文件,包括硬链接(
ln
)和符号链接(ln -s
)。ln adeng.txt link_to_adeng.txt ln -s adeng.txt symlink_to_adeng.txt

第一条命令创建了adeng.txt
的硬链接link_to_adeng.txt
,两者指向同一块数据。第二条命令创建了adeng.txt
的符号链接symlink_to_adeng.txt
,它类似于快捷方式。
-
mv:移动或重命名文件或目录。
mv adeng.txt new_name.txt mv directory1 directory2/new_directory

第一条命令将adeng.txt
重命名为new_name.txt
。第二条命令将directory1
移动到directory2
下的new_directory
目录中。
-
rm:删除文件或目录。
rm adeng.txt rm -r adeng

第一条命令删除`adeng.txt`文件。第二条命令递归删除`adeng`及其所有内容,需谨慎使用。
二、目录操作命令
-
cd:改变当前工作目录。
cd .. cd /

第一条命令将当前工作目录切换到指定路径。第二条命令返回上级目录。
-
pwd:显示当前工作目录的绝对路径。
pwd

执行此命令后,将输出当前所在目录的完整路径。
-
mkdir:创建新目录。
mkdir 1234456789

上述命令在当前目录下创建名为1234456789
的新目录。
-
ls:列出目录内容。
ls ls -l ls -a

第一条命令列出当前目录下的文件和子目录。第二条命令以详细格式列出(包含权限、大小、所有者等信息)。第三条命令显示隐藏文件(以.
开头的文件)。
-
rmdir:删除空目录。
rmdir 1234456789

若1234456789
为空,上述命令将其删除。若目录非空,需使用rm -r
命令。
三、文件规档命令
tar:用于打包、压缩和解压文件。
-
打包并压缩文件:
tar -czvf archive.tar.gz 1 2 3

上述命令将1
、1
以及3
及其内容打包并用gzip压缩成123.tar.gz
。
-
解压文件:
tar -xzvf 123.tar.gz

上述命令将123.tar.gz
解压到当前目录。
四、在文件中查找指定字符串命令
grep:在文件或标准输入中搜索匹配指定模式(字符串或正则表达式)的行。
grep "deng" adeng.txt

上述命令在adeng.txt
中查找包含deng
的所有行,并输出结果。
backup
五、其他命令
- 切换用户 :
su user_name
,用于切换到指定用户。若不指定用户名,通常用于切换到超级用户(root)。

- 查看当前用户 :
whoami
,显示当前登录用户的用户名。

- 清屏 :
clear
,清除终端屏幕上的所有内容。


- 信息回显 :
echo "message"
,输出指定的字符串或变量值。

- 帮助命令 :
man command
:查看指定命令的手册页,提供详细帮助信息。

info command
:提供与man
类似的信息,但通常结构更清晰,内容更丰富,且支持超链接导航。

实验原理:
Linux操作系统工作原理及shell工作原理
实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验四:Linux用户和组管理
实验目的:
1.掌握Linux系统中增加、修改、删除用户和用户组的方法;
2.掌握用户帐号管理及安全管理的方法;
3.熟悉Linux系统的用户访问权限及文件的权限修改。
实验内容:
1.查看用户帐号文件:/etc/passwd(用户帐号信息文件)、/etc/shadow(用户口令文件);
2.查看组群文件:/etc/group(组群帐号文件)、/etc/gshadow(组群口令文件);
3.建立新用户命令:useradd或adduser;修改用户帐号:usermod及删除用户:userdel;
4.设置用户口令:passwd及修改用户口令:chage;
5.创建组群:groupadd或addgroup;修改组群:groupmod、删除组群groupdel、为组群添加用户gpasswd;
6.修改访问权限命令chmod;管理默认访问权限命令umask。
实验步骤:
1. 查看用户帐号文件
-
打开终端,输入以下命令查看用户帐号信息:
cat /etc/passwd
或
more /etc/passwd

-
输入以下命令查看用户口令文件:
cat /etc/shadow
或
more /etc/shadow
注意:/etc/shadow 文件通常只有root用户可以查看。

2. 查看组群文件
-
输入以下命令查看组群帐号文件:
cat /etc/group
或
more /etc/group

-
输入以下命令查看组群口令文件:
cat /etc/gshadow
或
more /etc/gshadow
注意:/etc/gshadow 文件通常只有root用户可以查看。

3. 建立新用户、修改用户帐号、删除用户
-
使用
useradd
或adduser
命令建立新用户,例如:useradd newuser
或
adduser newuser

-
使用
usermod
命令修改用户帐号,例如:usermod -c "This is Howtoing" howtoing
这里
-C
参数用于指定用户的备注。


-
使用
userdel
命令删除用户,例如:userdel username
若要同时删除用户的主目录和邮件池,可以使用
-r
参数:userdel -r username


4. 设置用户口令、修改用户口令
-
使用
passwd
命令设置或修改用户口令,例如:passwd username

-
使用
chage
命令修改用户口令的相关信息,例如:chage -l username
查看用户口令信息。
chage -d 0 username
强制用户在下次登录时更改口令。

5. 创建组群、修改组群、删除组群、为组群添加用户
-
使用
groupadd
或addgroup
命令创建新组群,例如:groupadd groupname
或
addgroup groupname


-
使用
groupmod
命令修改组群,例如:groupmod -n newgroupname groupname
这里
-n
参数用于更改组群名称。


-
使用
groupdel
命令删除组群,例如:groupdel groupname


-
使用
gpasswd
命令为组群添加用户,例如:gpasswd -a username groupname
将用户添加到组群中。


6. 修改访问权限命令和管理默认访问权限命令
-
使用
chmod
命令修改文件或目录的权限,例如:chmod 755 filename
或
chmod u+x filename

-
使用
umask
命令管理默认的文件和目录权限,例如:umask 022
设置默认的umask值为022,即新建的文件和目录将不会有其他用户的写权限。

注意事项:
- 在执行以上操作时,一些命令需要root权限,可以使用
sudo
命令获取。 - 在实验过程中,要注意不要随意更改或删除系统中的重要用户和组群。
- 确保理解每个命令的作用和参数,避免错误的操作导致系统问题。
实验原理:
Linux操作系统用户管理及权限管理
实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验五:磁盘存储管理
实验目的:
1.熟悉磁盘及磁盘分区命名规则;
2.掌握Linux下使用磁盘管理工具管理磁盘的方法;
3.掌握创建文件系统和使用文件系统的方法;
4.掌握文件系统的挂载和卸载的方法。
实验内容:
- 使用虚拟机添加4个不同类型的磁盘设备,如表5-11 所示。查看并确定各个磁盘设备对应的设备文件名,然后通过设备文件名查看各个磁盘的空间大小,以验证你的判断是否正确。

3.为上述各个分区创建文件系统,请确保各个分区的文件系统格式各不相同。
4.创建一个挂载点目录,使用mount命令将第3题中的某个分区挂载到此目录。通过挂载点进入分区并新建文件和目录。卸载该分区,并将其重新挂载到一个新的位置。观察之前创建的文件和目录是否存在。
实验步骤
1. 查看并确定磁盘设备文件名
首先,你需要启动虚拟机并登录。然后,使用以下命令来列出所有可用的磁盘设备及其基本信息:

bash
sudo fdisk -l

根据表5-1中提供的磁盘接口类型和空间大小,你可以识别出每个磁盘对应的设备文件名。例如,IDE磁盘可能显示为/dev/hda
,SCSI磁盘可能为/dev/sda
,SATA磁盘可能是/dev/sdb
等,而NVMe磁盘可能是/dev/nvme0n1
。注意,实际命名可能会因系统配置和已连接设备的数量而有所不同。
2. 查看磁盘空间大小
一旦确定了设备文件名,可以使用lsblk
命令查看磁盘及其分区的基本信息,包括空间大小:
bash
lsblk -o NAME,TYPE,SIZE

3. 创建分区并格式化文件系统
接下来,使用fdisk
或gdisk
(对于GPT分区表)来创建分区。这里以磁盘1(假设为/dev/sda
)为例,创建分区:
bash
sudo fdisk /dev/nvme0n1
在fdisk
提示符下,依次输入n
(新建分区),p
(主分区),选择分区号,两次回车接受默认的开始和结束扇区,最后输入w
(写入分区表)保存更改。
完成分区后,为每个分区创建不同的文件系统,例如:
- 对于分区1:
sudo mkfs.ext4 /dev/sda1
- 对于分区2:
sudo mkfs.xfs /dev/sda2
- ... (依此类推,选择不同的文件系统类型,如btrfs, reiserfs等)


4. 挂载分区
创建一个挂载点,然后挂载分区:
bash
sudo mkdir /mnt/my_home
sudo mount /dev/nvme0n1p3 /mnt/my_home
进入挂载点,创建文件和目录以验证挂载成功:
bash
cd /mnt/my_home
touch testfile.txt
mkdir testdir

卸载分区:
bash
cd ~
sudo umount /mnt/my_home

然后,重新挂载到新的位置,比如/mnt/new_location
,并检查之前创建的文件和目录是否依然存在:
bash
sudo mkdir /mnt/new_location
sudo mount /dev/sda1 /mnt/new_location
cd /mnt/new_location
ls -la

实验原理:
Linux操作系统磁盘管理。
实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验六:进程管理
实验目的:
1.熟悉进程的基本概念;
2.掌握进程状态监测方法;
3.掌握进程状态控制方法;
4.掌握进程启动与作业控制方法;
实验内容:
1.进程静态监测命令ps、动态监测命令top;
2.查看进程树命令pstree;
3.列出进程打开文件信息的命令lsof;
4.调整进程优先级的命令nice;改变进程优先级的命令renice;
5.向进程发送信号的命令kill;杀死进程的命令killall;
6.显示任务状态命令jobs;将任务移至前台命令fg;将任务移至后台命令bg。
实验步骤:
1. 进程静态监测与动态监测
-
使用
ps
命令进行进程静态监测,例如:ps aux
或
ps -ef

-
使用
top
命令进行进程动态监测,例如:top
在
top
命令界面中,可以按q
键退出。

2. 查看进程树
-
使用
pstree
命令查看进程树,例如:pstree
或
pstree -p
-p
参数用于显示进程的PID。

3. 列出进程打开文件信息
-
使用
lsof
命令列出进程打开的文件信息,例如:lsof -p PID
这里
PID
是进程的ID。

4. 调整进程优先级
-
使用
nice
命令启动一个新进程并设置其优先级,例如:nice -n 10 command
这里
-n 10
表示将优先级设置为10。

-
使用
renice
命令改变运行中进程的优先级,例如:renice 10 PID
这里
PID
是进程的ID。

5. 向进程发送信号
-
使用
kill
命令向进程发送信号,例如:kill -SIGTERM PID
或
kill -9 PID

这里 PID
是进程的ID,SIGTERM
是请求终止信号的符号名,-9
是强制终止信号的编号。
-
使用
killall
命令杀死所有同名进程,例如:killall md
这里
processname
是进程的名称。

6. 显示任务状态与作业控制
ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
jobs
查看当前有多少在后台运行的命令
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
-
使用
jobs
命令显示任务状态,例如:jobs

-
使用
fg
命令将任务移至前台,例如:fg %jobnumber
这里
%jobnumber
是任务的编号。

-
使用
bg
命令将任务移至后台,例如:bg %jobnumber
这里
%jobnumber
是任务的编号。

注意事项:
- 在执行以上操作时,一些命令需要root权限,可以使用
sudo
命令获取。 - 在使用
kill
和killall
命令时,要谨慎选择信号,以避免不必要的数据丢失或系统不稳定。 - 确保理解每个命令的作用和参数,避免错误的操作导致系统问题。
实验原理:
Linux操作系统进程管理。
实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验七:Linux网络服务管理
实验目的:
1.熟悉Linux环境下软件包和网络服务管理的基本方法;
2.掌握网络配置命令;学会使用网络测试工具;
3.掌握FTP服务器的安装与配置;
4.掌握Samba服务器的安装与配置;
6.掌握Linux防火墙配置。
实验内容:
1.掌握FTP服务器的安装与配置;
2.掌握Samba服务器的安装与配置;
3.掌握Linux防火墙配置。
【注:内容1~3选择其中一个写实验报告】
实验步骤
安装ftp

启动ftp

测试ftp

关闭防火墙

本机局域网测试


实验原理:
Linux操作系统的网络配置及管理
实验结论
通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。
实验八:Shell编程与Linux C编程
实验目的:
1.熟悉shell脚本的编写与使用流程;
2.掌握shell脚本的建立和运行的方法;
3.掌握shell的基本语法;掌握shell的控制结构;
4.掌握Linux下C编程的常用工具和流程;
5.掌握利用GCC编译器进行C程序编译的过程;
6.掌握利用GDB对简单的C语言项目进行调试的方法;
7.理解make工具的功能,学会编制makefile的方法
实验内容:
1.设计Shel程序, 从键盘输入两个字符串,比较两个字符串是否相等;
2.设计Shell程序,分别用for、while、 until语句编写九九乘法表;
3.设计Shell程序,该程序能接收用户从键盘输入的20个整数,然后求出其总和、最大值及最小值;
4.编写一个C程序,利用gcc进行编译编译,观察并分析显示结果;利用gdb调试编译后的C程序。
5.编写一个由多文件构成的c语言程序,编制makefile,运行make工具进行维护。
实验步骤:
这些任务涵盖了Shell脚本编程和C语言编程的多个方面,下面我将分别为您提供示例代码或指导来完成这些任务。
1. Shell程序:比较两个字符串是否相等
bash
#!/bin/bash
echo "请输入第一个字符串:"
read str1
echo "请输入第二个字符串:"
read str2
if [ "$str1" == "$str2" ]; then
echo "两个字符串相等"
else
echo "两个字符串不相等"
fi

2. Shell程序:九九乘法表
使用for循环
bash
#!/bin/bash
for i in {1..9}; do
for j in $(seq 1 $i); do
echo -n "$j*$i=$((i*j)) "
done
echo "" # 换行
done

使用while循环
bash
#!/bin/bash
i=1
while [ $i -le 9 ]; do
j=1
while [ $j -le $i ]; do
echo -n "$j*$i=$((i*j)) "
((j++))
done
echo "" # 换行
((i++))
done

使用until循环
bash
#!/bin/bash
i=1
until [ $i -gt 9 ]; do
j=1
until [ $j -gt $i ]; do
echo -n "$j*$i=$((i*j)) "
((j++))
done
echo "" # 换行
((i++))
done

3. Shell程序:计算20个整数的总和、最大值、最小值
bash
#!/bin/bash
sum=0
max=-999999
min=999999
echo "请输入20个整数:"
for ((i=1; i<=20; i++)); do
read num
sum=$((sum + num))
if [ $num -gt $max ]; then max=$num; fi
if [ $num -lt $min ]; then min=$num; fi
done
echo "总和: $sum, 最大值: $max, 最小值: $min"

4. C程序编译与调试
首先,编写一个简单的C程序,例如123.c
:

使用gcc编译:
bash
gcc -o 123 123.c
运行编译后的程序并观察输出:
bash
./123

使用gdb进行调试:
bash
gdb ./123
在gdb中可以设置断点、单步执行、查看变量值等,例如:
(gdb) break 5
(gdb) run
(gdb) next
(gdb) print a


5. 多文件C程序与Makefile
假设您有两个源文件main.c
和helper.c
,以及一个头文件helper.h
。
:
main.c
c
#include <stdio.h>
#include "helper.h"
int main() {
printHello();
return 0;
}
helper.c
c
#include <stdio.h>
#include "helper.h"
void printHello() {
printf("Hello, World!\n");
}
helper.h
c
#ifndef HELPER_H
#define HELPER_H
void printHello();
#endif // HELPER_H
接下来,创建一个Makefile
:
makefile
CC=gcc
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.c helper.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=program
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
%.o: %.c
$(CC) $(CFLAGS) $< -o $@
clean:
rm -f *.o $(EXECUTABLE)
在命令行中运行make
来编译程序,运行./program
来执行程序,使用make clean
来清理生成的二进制文件和对象文件。




实验原理:
Shell工作原理及shell编程;Gcc、gdb、makefile的应用;C、C++、Java、Python程序设计。