linux实验报告

news2024/11/24 10:38:21

实验一: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/

快速筛选ISO文件

选择第一个下载

下载成功,放到合适目录

安装Centos

所需软件:VMware® Workstation 16 Pro

新建虚拟机

自定义-->下一步

默认不修改-->下一步

稍后安装操作系统-->下一步

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

更改虚拟机名称和位置-->下一步

根据自己需要的性能改处理器数量和内核数量-->下一步

分配内存-->下一步

默认-->下一步

默认-->下一步

默认-->下一步

默认-->下一步

默认-->下一步

默认-->下一步

完成

点击编辑虚拟机设置

CD/DVD(IDE)-->使用ISO映像文件-->选择清华源现在的ISO文件-->打开

点击确定

开启虚拟机

点击文字进入系统

用键盘选择install Centos stream9-->回车

等待进入此页面-->继续

用户设置

设置root密码

创建用户

开始安装

重启系统

系统界面

实验结论

通过这次小实验,是我更加了解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

或者打开这两个文件(如使用nanovim编辑器),手动输入不同内容并保存。

2.将上题两个文件合并,将合并结果输出到第3个文件中(文件名如zhangsan03)。
cat zhangsan01.txt zhangsan02.txt > zhangsan03.txt

此命令将zhangsan01.txtzhangsan02.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

man more

man date

这两个命令将分别打开datemore命令的手册页,其中包含了命令的详细说明、选项列表以及使用示例。

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。

实验步骤

一、文件操作命令
  1. touch:创建新文件或更新文件的访问和修改时间。

    示例:

    touch adeng.txt
    

上述命令将在当前目录下创建一个名为adeng.txt的新文件(如果该文件已存在,则其访问和修改时间将被更新)。

  1. cat:用于查看文件内容,尤其适合小文件。

    示例:

    cat adeng.txt
    

    这将输出adeng.txt文件的完整内容。

  1. more:分页查看文件内容。

    more adeng.txt
    

    你可以通过按下空格键来逐页查看文件内容,按q键退出查看。

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

    less adeng.txt
    

使用less查看文件时,可以使用上下箭头翻页,/keyword进行搜索,nN分别查找下一个和上一个匹配项,q退出查看。

  1. head:显示文件开头部分的内容,默认显示前10行。

    head adeng.txt
    

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

head -n n adeng.txt

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

    tail adeng.txt
    

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

tail -n n adeng.txt

  1. cp:复制文件或目录。

    cp adeng.txt backup.txt
    

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

cp -r adeng adeng2

  1. 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,它类似于快捷方式。

  1. mv:移动或重命名文件或目录。

    mv adeng.txt new_name.txt
    mv directory1 directory2/new_directory
    

第一条命令将adeng.txt重命名为new_name.txt。第二条命令将directory1移动到directory2下的new_directory目录中。

  1. rm:删除文件或目录。

    rm adeng.txt
    rm -r adeng
    

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

    cd ..
    cd /
    

第一条命令将当前工作目录切换到指定路径。第二条命令返回上级目录。

  1. pwd:显示当前工作目录的绝对路径。

    pwd
    

执行此命令后,将输出当前所在目录的完整路径。

  1. mkdir:创建新目录。

    mkdir 1234456789
    

上述命令在当前目录下创建名为1234456789的新目录。

  1. ls:列出目录内容。

    ls
    ls -l
    ls -a
    

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

  1. rmdir:删除空目录。

    rmdir 1234456789
    

1234456789为空,上述命令将其删除。若目录非空,需使用rm -r命令。

三、文件规档命令

tar:用于打包、压缩和解压文件。

  1. 打包并压缩文件:

    tar -czvf archive.tar.gz 1 2 3
    

上述命令将11以及3及其内容打包并用gzip压缩成123.tar.gz

  1. 解压文件:

    tar -xzvf 123.tar.gz
    

上述命令将123.tar.gz解压到当前目录。

四、在文件中查找指定字符串命令

grep:在文件或标准输入中搜索匹配指定模式(字符串或正则表达式)的行。

grep "deng" adeng.txt

上述命令在adeng.txt中查找包含deng的所有行,并输出结果。
backup

五、其他命令
  1. 切换用户su user_name,用于切换到指定用户。若不指定用户名,通常用于切换到超级用户(root)。

  1. 查看当前用户whoami,显示当前登录用户的用户名。

  1. 清屏clear,清除终端屏幕上的所有内容。

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

  1. 帮助命令
    • 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. 建立新用户、修改用户帐号、删除用户
  • 使用 useraddadduser 命令建立新用户,例如:
    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. 创建组群、修改组群、删除组群、为组群添加用户
  • 使用 groupaddaddgroup 命令创建新组群,例如:
    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.掌握文件系统的挂载和卸载的方法。

实验内容:

  1. 使用虚拟机添加4个不同类型的磁盘设备,如表5-11 所示。查看并确定各个磁盘设备对应的设备文件名,然后通过设备文件名查看各个磁盘的空间大小,以验证你的判断是否正确。

3.为上述各个分区创建文件系统,请确保各个分区的文件系统格式各不相同。

4.创建一个挂载点目录,使用mount命令将第3题中的某个分区挂载到此目录。通过挂载点进入分区并新建文件和目录。卸载该分区,并将其重新挂载到一个新的位置。观察之前创建的文件和目录是否存在。

实验步骤

1. 查看并确定磁盘设备文件名

首先,你需要启动虚拟机并登录。然后,使用以下命令来列出所有可用的磁盘设备及其基本信息:

sudo fdisk -l

根据表5-1中提供的磁盘接口类型和空间大小,你可以识别出每个磁盘对应的设备文件名。例如,IDE磁盘可能显示为/dev/hda,SCSI磁盘可能为/dev/sda,SATA磁盘可能是/dev/sdb等,而NVMe磁盘可能是/dev/nvme0n1。注意,实际命名可能会因系统配置和已连接设备的数量而有所不同。

2. 查看磁盘空间大小

一旦确定了设备文件名,可以使用lsblk命令查看磁盘及其分区的基本信息,包括空间大小:

lsblk -o NAME,TYPE,SIZE

3. 创建分区并格式化文件系统

接下来,使用fdiskgdisk(对于GPT分区表)来创建分区。这里以磁盘1(假设为/dev/sda)为例,创建分区:

sudo fdisk /dev/nvme0n1

fdisk提示符下,依次输入n(新建分区),p(主分区),选择分区号,两次回车接受默认的开始和结束扇区,最后输入w(写入分区表)保存更改。

完成分区后,为每个分区创建不同的文件系统,例如:

  • 对于分区1:sudo mkfs.ext4 /dev/sda1
  • 对于分区2:sudo mkfs.xfs /dev/sda2
  • … (依此类推,选择不同的文件系统类型,如btrfs, reiserfs等)

4. 挂载分区

创建一个挂载点,然后挂载分区:

sudo mkdir /mnt/my_home
sudo mount /dev/nvme0n1p3 /mnt/my_home

进入挂载点,创建文件和目录以验证挂载成功:

cd /mnt/my_home
touch testfile.txt
mkdir testdir

卸载分区:

cd ~
sudo umount /mnt/my_home

然后,重新挂载到新的位置,比如/mnt/new_location,并检查之前创建的文件和目录是否依然存在:

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 命令获取。
  • 在使用 killkillall 命令时,要谨慎选择信号,以避免不必要的数据丢失或系统不稳定。
  • 确保理解每个命令的作用和参数,避免错误的操作导致系统问题。

实验原理:

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程序:比较两个字符串是否相等

#!/bin/bash

echo "请输入第一个字符串:"
read str1

echo "请输入第二个字符串:"
read str2

if [ "$str1" == "$str2" ]; then
    echo "两个字符串相等"
else
    echo "两个字符串不相等"
fi

2. Shell程序:九九乘法表

使用for循环
#!/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循环
#!/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循环
#!/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个整数的总和、最大值、最小值

#!/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编译:

gcc -o 123 123.c

运行编译后的程序并观察输出:

./123


使用gdb进行调试:

gdb ./123

在gdb中可以设置断点、单步执行、查看变量值等,例如:

(gdb) break 5
(gdb) run
(gdb) next
(gdb) print a

5. 多文件C程序与Makefile

假设您有两个源文件main.chelper.c,以及一个头文件helper.h

main.c

#include <stdio.h>
#include "helper.h"

int main() {
    printHello();
    return 0;
}

helper.c

#include <stdio.h>
#include "helper.h"

void printHello() {
    printf("Hello, World!\n");
}

helper.h

#ifndef HELPER_H
#define HELPER_H

void printHello();

#endif // HELPER_H

接下来,创建一个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程序设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1794757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle存储过程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前置准备1.创建表空间2.创建用户3.赋权 二、存储过程1.创建数据表2.创建存储过程3.执行存储过程4.带参执行5.控制语句 总结 前言 这段时间实习&#xff0c…

.NET AI如何从0开始?

你是否在思考如何利用AI为您公司的产品增加智能方向的业务扩展&#xff1f; 或者你是否有思考过怎么去利用AI减少部分工作量&#xff1f; 如果你有类似于上面的问题&#xff0c;想要学习AI&#xff0c;并且您是一名.NET开发工程师&#xff0c;或您是一名弃暗投明的Java转.NET…

六月的魔力:揭秘2024年加密市场与Reflection的创新与收益

回想过去加密货币市场的沉浮&#xff0c;一年中市场的阶段性牛市大多发生在下半年&#xff0c;六月似乎是一个神奇的时间节点。每年六月一到&#xff0c;加密货币市场仿佛突然被按下启动按钮&#xff0c;沉寂的土狗开始扶苏&#xff0c;经过半年准备的各大项目方开始蠢蠢欲动。…

城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(一)

作者&#xff1a;来自 Elastic Philipp Kahr, Valentin Crettaz 这篇博文的本地部署实践 Jupyter notebook 请详细阅读文章 “城市之旅&#xff1a;使用 LLM 和 Elasticsearch 简化地理空间搜索&#xff08;二&#xff09;”。 探索如何从自然语言提问创建地理空间搜索。在下…

15- Redis 中的 整数集合 数据结构

整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素&#xff0c;并且元素数量不大时&#xff0c;就会使用整数集合这个数据结构作为底层实现。 1. 整数集合结构设计 整数集合本质上是一块连续内存空间&#xff0c;它的结构定义如下&#xff1a; typedef s…

​在 The Sandbox 元宇宙的 CU 超商中寻找Milk币!

CU&#xff08;韩国领先的便利店&#xff09;和 MiL.k&#xff08;基于区块链的忠诚度整合平台&#xff09;合作在 The Sandbox 推出了首款元宇宙游戏&#xff0c;通过独家活动在 Web2 和 Web3 之间建立联系。 在元宇宙中玩转 “Play CU X MiL.k” 体验 通过引人入胜的游戏内容…

uniapp小程序多线程 Worker 实战【2024】

需求 最近遇到个小程序异步解码的需求&#xff0c;采用了WebAssembly&#xff0c;涉及大量的计算。由于小程序的双线程模型只有一个线程处理数据&#xff0c;因此智能寻求其它的解决方案。查看小程序的文档&#xff0c;发现小程序还提供一个异步线程的Worker方案&#xff0c;可…

暗黑系短视频:成都鼎茂宏升文化传媒公司

暗黑系短视频&#xff1a;探索未知的视觉艺术 在短视频盛行的今天&#xff0c;各种风格和主题的作品层出不穷&#xff0c;其中&#xff0c;暗黑系短视频以其独特的魅力和深度&#xff0c;成都鼎茂宏升文化传媒公司吸引了众多观众的关注。这类视频往往带有一种神秘、压抑的氛围…

李良济中医课堂,助力市民健康,传播中医药文化,坚守初心扬国粹!

为了更好地传承并发扬中医文化&#xff0c;传播健康理念&#xff0c;提高民众预防疾病的意识&#xff0c;让广大市民感受到中医药就在我身边。 李良济中医课堂&#xff0c;积极走进老年大学&#xff0c;青年夜校&#xff0c;同时主动加入萌趣中草药的活动等&#xff0c;为市民群…

小程序集arcgis地图显示自定义坐标的功能实现记录!(学习笔记)

最近再做一个新能源回收项目&#xff0c;项目中有个根据回收点坐标数据显示区域内回收点位置&#xff0c;点击图标直接导航到该位置&#xff0c;及分布的需求&#xff0c;研究了一下&#xff0c;实现效果如下&#xff0c;实现起来很简单&#xff0c;代码及效果 回收点位置及分…

在编程Python的时候发生ModuleNotFoundError: No module named distutils报错怎么办

1.先查看Python版本 首先我们先去打开终端就是先widr再输入cmd 然后进去在输入Python -V要注意大小写 我的版本是3.9.7版本但是我使用的PyCharm 是 2021.1.1 x64版本没有办法主动去识别因为这个版太低了你的Python版本很高所以无法识别 2.解决方法 只需要把你的Python现版…

使用手机小程序给证件照换底色

临时遇到一个需求&#xff0c;需要给证件照换底色。原始图像如下 最终需要换成红底的。 本次使用一款小程序&#xff02;泰世茂证件照&#xff02;&#xff0c;打开该小程序&#xff0c;如下图所示 单击开始制作&#xff0c;然后选择二寸红底&#xff0c;如下图所示 然后单击相…

UI 自动化中的分层设计

以前的设计 在过去 UI 自动化测试领域有一个规范的设计模式是 page object 模式。 意思是测试用例不会直接定位页面元素&#xff0c; 而是把每一个页面封装成一个类。 在这个类中封装页面元素。 然后测试用例调用 page 类来操作页面元素完成测试用例。如下图&#xff1a; 以前…

前端面试题(二)答案版

面试形式&#xff1a;线上面试&#xff08;不露脸&#xff09;&#xff1a;时长40分钟 面试评价&#xff1a;由易到难&#xff0c;由细到全&#xff0c;比较不错 面试官&#xff1a;项目经理 面试官提问&#xff08;面试题&#xff09;&#xff1a; 1、聊聊最近写的这个项目…

【Meetup】探索Apache SeaTunnel的二次开发与实战案例

在数据科技快速演进的今天&#xff0c;业务场景的复杂化和数据量的激增&#xff0c;推动了大数据技术的迅速发展&#xff0c;在众多开源大数据处理工具中&#xff0c;Apache SeaTunnel以其强大的数据集成能力&#xff0c;成为众多企业的首选。 但随着应用深入&#xff0c;企业面…

32个小众搜索网站,相信一定有你想要的

首先问你一个问题&#xff0c;你平时都会用什么搜索引擎来进行搜索&#xff1f; 下面我将推荐32个小众搜索网站&#xff0c;相信一定会有你想要的。 1、多吉搜索 首先对因为拒绝商业化黑客攻击、不可抗力而停止服务的多吉搜索表示哀悼&#xff0c;这款由个人开发的小众搜索引…

Flutter基础 -- Flutter布局练习(小项目)

目录 1. Splash 布局&#xff08;第一页&#xff09; 1.1 目标 1.2 当前效果图 1.3 创建 Splash 界面 1.4 设置 MaterialApp 1.5 设置 Splash 背景色 1.6 布局 Splash 界面 1.7 总结 2. Splash 圆角图片 2.1 目标 2.2 当前效果图 2.3 蓝湖下载图片 2.4 图片导入项…

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件&#xff08;QLineEdit&#xff09;、一个标签控件&#xff08;QLabel&#xff09;和一个文本浏览控件&#xff08;QTextBrowser&#xff09;&#xff0c;在单行文 本编辑控件里的文本被编辑时&#xff0c;标签控件和文本浏览控件都会同步显示…

OpenMV学习笔记4——二维码识别

一、示例程序 按照下图顺序点击&#xff0c;即可打开官方在IDE中准备好的二维码实例程序&#xff1a; # QRCode Example # # This example shows the power of the OpenMV Cam to detect QR Codes # using lens correction (see the qrcodes_with_lens_corr.py script for hig…

【Vue】项目目录介绍和运行流程

文章目录 一、项目目录介绍二、public/index.html三、src/main.js四、运行流程 一、项目目录介绍 虽然脚手架中的文件有很多&#xff0c;目前咱们只需认识三个文件即可&#xff0c;这三个文件就决定了我们项目的运行 main.js 入口文件App.vue App根组件index.html 模板文件 我…