linux实验报告

实验一: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程序设计。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】把xmind转换为指定格式txt文本

人工智能训练通常需要使用文本格式&#xff0c;xmind作为一种常规格式不好进行解析&#xff0c;那如何把xmind转换为txt格式呢&#xff1f; 软件信息 python python -v Python 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] on win32…

C#知识|通过ADO.NET实现应用程序对数据库的查询操作。

哈喽,你好啊,我是雷工! 前边学习了通过ADO.NET实现C#应用程序对数据库的增、删、改操作。 接下来接着学习查询操作,以下为学习笔记。 查询返回有两种类型,一种是单行单列的单一结果,一种是结果集,首先了解查询结果是单行单列结果的写法。 01 查询返回单一结果 以前方的…

Python编程学习第一篇——Python零基础快速入门(五)—元组(Tuple)操作

Python元组是一种不可变的有序集合&#xff0c;可以存储多个不同类型的数据。元组使用小括号来表示&#xff0c;其中的元素用逗号分隔开。与列表不同&#xff0c;元组的元素不能被修改、删除或添加。它的一些常规操作包括元组的创建、访问、添加、修改、删除、运算等等&#xf…

编译原理-程序设计语言的设计

变量 存储单元及它的名称由变量的概念来代替; 可以代表一个或一组单元,可以修改。 绑定 绑定:一个实体(或对象)与其某种属性建立起某种联系的 过程,称为绑定。 静态绑定:凡是在编译时能确定的属性,称为静态属性; 若绑定在编译时完成,运行时不改变,称为静态…

武汉科技大学,计算机考研全面改考408,24计算机专硕复试线仅298分!武汉科技大学计算机考研考情分析!

武汉科技大学&#xff08;Wuhan University of Science and Technology&#xff09;简称“武科大”&#xff0c;坐落于湖北省武汉市&#xff0c;是湖北省人民政府、教育部和六家国家特大型企业共建高校&#xff0c;是湖北省“双一流”建设重点高校&#xff0c;入选国家“中西部…

高考志愿填报自动更新数据小程序开源版开发

高考志愿填报自动更新数据小程序开源版开发 版本一&#xff1a;java开源域名授权&#xff08;自动更新数据&#xff09;&#xff1b;5999 自研RSCH算法&#xff0c;专业和测评综合推算 微信一键登录注册&#xff0c;免注册获取微信头像、昵称 支持院校和专业优先&#xff0c;…

28 - 只出现一次的最大数字(高频 SQL 50 题基础版)

28 - 只出现一次的最大数字 select (selectnumfromMyNumbers group bynum havingcount(num)1order by num desc limit 1) as num;

Doris insert into 插入语句执行成功,且select查询成功,返回结果不报错,但查不到该插入数据

问题&#xff1a;Doris insert into 正常执行成功&#xff0c;select 查询也执行成功&#xff0c;但查不到该写入数据 原因&#xff1a;由于有其他 insert commit 事务待提交且该任务处于锁的状态&#xff0c;导致不断在回滚&#xff0c;进而造成其他的insert into 语句也执行成…

广西容县“四力”并举提质效,正宇软件助力智慧人大建设

近日&#xff0c;广西容县在提升人大代表履职质效方面取得显著成效&#xff0c;通过汇聚“四力”——活力、动力、合力、能力&#xff0c;成功打造了一个高效、务实的人大代表履职环境。这一成果不仅为当地人大工作树立了新的标杆&#xff0c;也为广西乃至全国的人大代表履职模…

24-unittest简介

一、unittest简介 unittest是Python中常用的单元测试框架&#xff0c;与Java中的Junit单元测试框架类似。 二、示例程序 1&#xff09;导入unittest模块 import unittest 2&#xff09;使用help()函数查看源码中的示例程序 help(unittest) Simple usage:import unittestc…

数组和指针的联系(C语言)

数组和指针是两种不同的数据类型&#xff0c;数组是一种构造类型&#xff0c;用于存储一组相同类型的变量&#xff1b;而指针是一种特殊类型&#xff0c;专门用来存放数据的地址。数组名除了sizeof(数组名)和&数组名表示整个数组外&#xff0c;其他情况下都表示的是首元素的…

Visual Studio Code 开发esp8266流程2Arduino 配置 nodemcu

http://arduino.esp8266.com/stable/package_esp8266com_index.json http://arduino.esp8266.com/stable/package_esp8266com_index.json Arduino: Library Manager Arduino: Board

零拷贝技术

背景 磁盘可以说是计算机系统重最慢的硬件之一&#xff0c;读写速度相对内存10以上&#xff0c;所以针对优化磁盘的技术非常的多&#xff0c;比如&#xff1a;零拷贝、直接I/O、异步I/O等等&#xff0c;这些优化的目的就是为了提高系统的吞吐量&#xff0c;另外操作系统内核中的…

【Unity学习笔记】反射

文章目录 前言反射通过反射获取类型 Unity中的反射用反射在Unity中动态加载 前言 在我平时做项目的时候&#xff0c;由于我们做的项目都是很简单的&#xff0c;所以不怎么接触反射机制。最早了解反射机制是关于Invoke的时候&#xff0c;知道可以通过方法名来直接进行Invoke调用…

数字人动作解决方案,塑造逼真动作

在品牌形象塑造、市场推广及客户服务等领域&#xff0c;企业正面临着前所未有的挑战和机遇。为满足企业的需求&#xff0c;美摄科技凭借其在人工智能和计算机视觉领域的深厚积累&#xff0c;推出了面向企业的数字人动作解决方案&#xff0c;助力企业轻松打造逼真、灵活的虚拟形…

apple开发者账户证书删除与下载

1.打开并登陆: Sign In - Apple 选择证书 证书管理页面 证书详情 删除或者下载证书 下载证书 删除证书

【实战】kafka3.X kraft模式集群搭建

文章目录 前言kafka2.0与3.x对比准备工作JDK安装kafka安装服务器增加hosts 修改Kraft协议配置文件格式化存储目录 启动集群停止集群测试Kafka集群创建topic查看topic列表查看消息详情生产消息消费消息查看消费者组查看消费者组列表 前言 相信很多同学都用过Kafka2.0吧&#xf…

【MySQL03】【 Buffer Pool】

文章目录 一、前言二、缓冲池&#xff08;Buffer Pool &#xff09;1. 缓冲池的概念2. LRU List、Free List 和 Flush List2.1 Free 链表2.1.1 缓冲页的哈希处理 2.2 Flush 链表2.3 LRU 链表2.3.1 简单 LRU 链表2.3.2 优化后的 LRU 列表2.3.3 更进一步的优化 3. 脏页的刷新4. 多…

【最新鸿蒙应用开发】——Want信息载体

信息传递载体Want 1、概述 上一章节我们学习了UIAbility组件 【最新鸿蒙应用开发】——一篇搞懂什么是UIAbility-CSDN博客 &#xff0c;其中组件间的交互传递信息的媒介就是Want&#xff0c;本章节我们来更加深入学习Want的相关知识。 Want是一种对象&#xff0c;用于在应用组…

性能狂飙:SpringBoot应用优化实战手册

在数字时代&#xff0c;速度就是生命&#xff0c;性能就是王道&#xff01;《极速启航&#xff1a;SpringBoot性能优化的秘籍》带你深入SpringBoot的内核&#xff0c;探索如何打造一个飞速响应、高效稳定的应用。从基础的代码优化到高级的数据库连接池配置&#xff0c;再到前端…