当前位置: 首页 > article >正文

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥,为什么会有给样卷不自带解析的,对答案都没得对,故整理一篇

样卷1

一、选择题

1、为了遍历shell脚本调用时传入的参数,需要在shell脚本中使用_____。

  • A.$#表示参数的个数
  • B.S@表示所有参数
  • C.$0表示脚本名
  • D.$1表示第一个参数

2、安装了带图形化界面的RedHatLinux系统,默认的运行级别为_____。

带图形化界面的RedHat Linux系统默认运行级别为5,选C

3、为了回到个人的home目录,可以执行_____。

cd ~可以回到个人的home目录,选C

4、在 bash 中, 在一条命令后加入 “1>&2” 意味着_____。

表示标准输出重定向到错误输出,选D

5、Linux 启动时第一个启动的进程为init进程,它的进程号PID为_____。

init进程的PID为1,选B

6、假设执行cat/etc/passwd命令后,发现以下记录信息:games:x:12:100:games:/usr/games:/sbin/nologin,下列说法错误的是_____。

/etc/passwd文件中,记录格式为用户名:密码:用户ID:组ID:用户描述:家目录:登录Shell,所以用户ID为12,组ID为100,home目录是/usr/games,不能登录shell,选A

7、某系统已存在一块名为/dev/sda的SCSI硬盘,现在再插入一个U盘, 该U盘的设备名可能为_____。

sda被占用,其他的数字从1开始数,所以可能是/dev/sdb1,选C

8、为了查看端口占用情况,可以用_____命令。

  • A.netstat命令用于显示网络连接、路由表、接口统计信息等,通过相关参数可以查看端口占用情况
  • B.ifconfig主要用于配置和现实网络接口信息,如IP地址、子网掩码、MAC地址等
  • C.ping命令用于测试网络连接,向目标主机发送ICMP数据包并等待响应
  • D.traceroute用于追踪数据包在网络中的传输路径,显示从源主机到目标主机所经过的路由器列表

9、下列说法正确的是_____。

  • A.开源软件不一定是免费的
  • B.GPL协议允许公司销售自由软件,但销售时必须遵循GPL协议的规定
  • C.F热额BSD是一个类Unix操作系统,不是Linux发行版本
  • D.正确

10、不能查看系统资源信息的命令是_____。

  • A.du命令用于查看磁盘使用空间,是查看系统资源信息(磁盘资源方面)的命令
  • B.free命令用于显示系统内存的使用情况,包括物理内存、交换空间等信息,是查看系统资源信息(内存资源方面)的命令
  • C.shfs这个命令在正常的Linux系统命令集中根本不存在
  • D.top命令提供了实时动态地查看系统资源使用情况的功能

11、关于前台进程和后台进程,说法正确的是_____。

  • A.后台进程才需要加&,前台直接执行即可
  • B.正确
  • C.后台进程在后台运行,不影响前台继续执行其他命令,不需要等待后台进程执行完毕后执行下一个命令
  • D.Ctrl+C用于终止前台进程,后台进程需要用kill命令加上进程ID等方式

12、下列命令中,不能实现文件保存的是_____。

  • A.:wq表示保存文件并退出
  • B.:w表示保存文件但不退出
  • C.:x用法类似:wq,只在某些情况下略有不同
  • D.:q!表示不保存文件强制退出

13、下列命令中,没有导致vi工作模式切换的是_____。

  • A.:wq会从编辑模式切换到命令模式然后退出
  • B.o指在当前行下方打开新行并进入插入模式
  • C.gg是跳转到文件开头,一直处于命令模式没有切换
  • D.?wq是在vi中进行反向查找wq,会从命令模式切换到查找模式

14、下列命令中,不能使vi进入插入模式的是_____。

  • A.a用于在光标后进入插入模式
  • B.i用于在光标前进入插入模式
  • C.o用于在当前行下方插入新行并进入插入模式
  • D.r用于替换当前字符,不进入插入模式

15、当字符串用单引号括起来时,shell将_____。

不解释特殊字符,选D

16、以下关于shell程序的说法正确的是_____。

  • A.不同的shell解释器有不同的语法和特性
  • B.shell程序执行效率相对较低,不适合用于时间紧迫型或任务器忙碌型任务
  • C.正确
  • D.如果程序文件本身有可执行权限就可以直接执行

17、将光盘/dev/hdc 卸载的命令是_____。

umount/dev/hdc,选A

18、在利用gdb进行调试过程中,如果需要单步执行,且不进入函数内部,应该使用_____。

  • A.next单步执行,不进入函数内部
  • B.step单步执行,进入函数内部
  • C.run运行程序
  • D.go继续执行程序

19、下面关于less和more的说法错误的是_____。

  • A.lessmore都具备分页查看文件内容的功能,用户可以逐页浏览文件。
  • B.通常情况下,less在处理大容量文档时速度更快,并且具有更多功能,如支持上下键滚动浏览等,而more相对简单。
  • C.less允许用户使用上下方向键在文件中上下浏览,方便查看文件内容。
  • D.more在查看文件时会将整个文档读入内存,这在处理大文件时可能会占用较多内存资源。

20、系统默认的_____用户对整个系统拥有完全的控制权。

  • A.administrator是Windows里面的,Linux里面没有这个
  • B.guest顾名思义肯定不是
  • C.root是Linux默认的超级用户,具有最高权限
  • D.supervistor这个默认用户不存在

二、简答题

1、解释软链接、硬链接以及复制三者之间的联系与区别。

  • 联系:都跟文件操作相关
  • 区别:
    • 软链接就是快捷方式
    • 硬链接是对内存的指针,只有把所有的硬链接删除才算是删除这个文件
    • 复制就是内存复制了一份,两个东西是独立的

2、画出VFS的结构图,并说明VFS的功能与作用。

转自知乎@Linux内核库

  • 功能:提供统一的文件和文件系统操作系统,隐藏底层文件系统的差异
  • 作用:隔离应用程序与底层文件系统,方便应用程序的兼容

3、以图解方式解释xinetd工作模式,并说明选择该工作模式的原则。

原则:系统中有多个不常用的网络服务或是安全性要求较高的话就用xinetd

三、编程题

1、编写一个shell程序可以完成以下执行过程。

首先是熟悉的多case,直到读入q结束,不然就是循环读数字,最后返回他们的和

#!/bin/bash

while true
do
    echo "Input a list of number:"
    read numbers
    if [ "$numbers" = "q" ]; then
        break
    fi
    sum=0
    for num in $numbers
    do
        sum=$(($sum + $num))
    done
    echo "the result is $sum"
done

2、编写一段shell程序实现以下功能。

熟悉的if-else开会

#!/bin/bash

while true
do
    echo "Please input the student's score:"
    read score
    if [ $score -lt 0 ]; then
        exit 0
    elif [ $score -le 60 ]; then
        echo "Failed!"
    elif [ $score -le 69 ]; then
        echo "Passed!"
    elif [ $score -le 79 ]; then
        echo "Medium!"
    elif [ $score -le 89 ]; then
        echo "Good!"
    elif [ $score -le 100 ]; then
        echo "Excellent!"
    else
        echo "Error score"
    fi
done

四、综合应用题

1、根据要求写出相应的操作命令,假设文件和目录已存在。

  • 1) ls -al /tmp
    • ls是列出目录内容的命令。
      • -a选项表示显示所有文件,包括隐藏文件(以.开头的文件)。
      • -l选项以长格式显示文件信息,包括文件权限、所有者、大小、修改时间等。
  • 2) chmod 754 /tmp/a.txt
    • chmod用于修改文件权限。
    • 754是权限的八进制表示,其中7表示所有者具有读(4)、写(2)、执行(1)权限,5表示同组用户具有读(4)和执行(1)权限,4表示其他用户具有读(4)权限。
  • 3) chown mail:games /tmp/b.txt
    • chown用于更改文件所有者和所属组。
    • mail是要设置的文件所有者,games是要设置的文件所属组。
  • 4) mv /tmp/c.txt /tmp/c.txt.bak
    • mv命令用于移动或重命名文件。
    • 这里将/tmp/c.txt重命名为/tmp/c.txt.bak
  • 5) date >> ~/d.txt
    • date命令用于显示当前系统时间。
    • >>是追加输出重定向符号,将当前时间追加到当前用户主目录下的d.txt文件中。
  • 6) who | wc -l >> ~/d.txt
    • who命令用于显示当前登录系统的用户信息。
    • wc -l用于统计行数,这里统计who命令输出的行数,即当前用户个数。
    • >>将统计结果追加到d.txt文件。
  • 7) ln -s ~/d.txt /tmp/e.txt
    • ln命令用于创建链接。
    • -s选项表示创建软链接。
    • ~/d.txt是源文件路径(当前用户主目录下的d.txt文件),/tmp/e.txt是软链接的目标路径。
  • 8) tar -cvf tmp.tar /tmp
    • tar是打包工具。
    • -c选项表示创建新的归档文件。
    • -v选项表示显示详细信息。
    • -f选项指定归档文件名,这里是tmp.tar,最后指定要打包的目录/tmp
  • 9) ps -ef | grep vsftpd
    • ps -ef命令用于查看系统中所有进程的详细信息。
    • grep vsftpd用于过滤出包含vsftpd的进程信息,即查看进程名为vsftpd的进程信息。
  • 10) find /usr -name "*.xml"
    • find命令用于在指定目录下查找文件。
    • /usr是要查找的起始目录。
    • -name "*.xml"表示查找文件名以.xml结尾的文件。

2、根据下面的依赖关系图,写出对应的makefile文件内容。

main: a.o main.o b.o
        gcc -o main a.o main.o b.o

a.o: f1/a.c f1/a.h
        gcc -c f1/a.c

main.o: main.c f1/a.h f2/b.h
        gcc -c main.c

b.o: f2/b.c f2/b.h
        gcc -c f2/b.c

3、系统需要定期做数据库的备份工作,请根据以上描述给出相应的crontab文件内容,不需要编写脚本内容。

# 每月第一天凌晨1点删除/oracle/tmp目录下的dmp文件
0 1 1 * * rm -f /oracle/tmp/*.dmp

# 每月第一天凌晨2点30分以oracle用户执行导出数据脚本
30 2 1 * * su - oracle -c "/home/oracle/exportdata.sh"

# 等待2小时(根据实际情况调整)后打包数据文件
50 4 1 * * tar -cvf /oracle/tmp/datafile.tar /oracle/tmp/*.dmp

# 等待10分钟(根据实际情况调整)后移动压缩文件并修改权限
0 5 1 * * mv /oracle/tmp/datafile.tar /oracle/backup/ && chmod 400 /oracle/backup/datafile.tar

样卷2

一、选择题

1、通过指定gcc的_____选项,可以指定生成的可执行文件名。

-o,选A

2、文件类型标识d表示的是_____。

  • A.普通文件无前缀标识
  • B.设备文件分为字符设备文件(用c表示)和块设备文件(用b表示)
  • C.目录文件用d表示
  • D.链接文件分为软链接(用l表示)和硬链接(无特殊标识)

3、为了要找到服务名和端口号的映射关系,需要查看_____。

  • A./etc/hosts文件主要用于本地主机名解析,将主机名映射到IP地址,它不涉及服务名和端口号的映射关系。
  • B./etc/services文件包含了常见网络服务与它们所使用端口号的映射关系,通过查看该文件可以找到服务名对应的端口号。
  • C./etc/protocols文件定义了系统支持的网络协议,如TCP、UDP等协议的相关信息,而不是服务名和端口号的映射。
  • D./etc/sysconfig/network文件主要用于配置网络相关的基本设置,如主机名、网关等,与服务名和端口号映射无关。

4、下面关于less和more的说法错误的是_____。

通常情况下,less在处理大型文档时速度更快,并且提供了更多方便浏览的功能,如支持上下键滚动浏览等,而more相对简单且速度较慢,选B。

5、下列说法,不正确的是_____。

普通用户除了可以访问自己的 Home 目录外,还可以访问系统中一些公共目录(如/tmp等),并且在具有相应权限的情况下可以访问其他用户共享的资源等,选D。

6、假设执行cat/etc/passwd 命令后,发现以下记录信息: games:x:12:100:games:/usr/games:/sbin/nologin,下列说法错误的是_____。

用户名:密码:用户 ID: 组 ID: 用户描述:家目录:登录 Shell,故选A。

7、用于存放系统配置文件的目录是_____。

前面有原题,选C。

8、为了使系统启动时进入多用户的字符模式,需要把运行级别设定为_____。

选B。

9、不属于Linux系统中的文件类型的是_____。

Swap文件不属于常规文件类型,选D。

10、下列选项中,不属于Linux特点的是_____。

Linux 具有多用户、设备独立性、可移植性和多任务等特点,选A。

11、为了要获取上一个命令的执行结果,需要用到_____。

选B。

12、假设文件权限属性是654,那么通过ls–l命令查看时,应该看到_____。

  • 对于权限属性 654,其分解如下:
    • 所有者权限为 6,即 4(读)+2(写),对应rw-
    • 同组用户权限为 5,即 4(读)+1(执行),对应r-x
    • 其他用户权限为 4,即 4(读),对应r--

选D。

13、系统的监控命令是_____。

选B。

14、某企业需要安装最新的内核稳定版本,应该安装_____。

当前的最新稳定版本是6.12.5(截止2024/12/19),可以在[The Linux Kernel Archives]查到,题目太古早已无参考价值,真遇到的话选中间是偶数的版本号最新的就行。

15、下列命令中,不能实现文件保存的是_____。

选D。

16、用于存放系统外部设备的目录是_____。

选A。

17、为了回到个人的home目录,可以执行_____。

选C。

18、在利用gdb进行调试过程中,如果需要单步执行,且不进入函数内部,应 该使用_____。

选A。

19、sdb2 表示的含义是_____。

选D。

20、关于文件系统的安装和卸载,下面描述错误的是_____。

外部设备可 mount 到其他合适目录,选B。

21、需要把ls命令的输出追加到tmp文件中,需要这样书写_____。

ls >> tmp可将ls命令输出追加到tmp文件,选C。

22、关于前台进程和后台进程,说法正确的是_____。

选D。

23、要删除已经设定的crontab内容,可以使用的命令是_____。

crontab -r用于删除已设定的 crontab 内容,选B。

24、能够启动vsftpd服务的命令是_____。

启动vsftpd服务应使用/etc/rc.d/init.d/vsftpd start(题中无完全正确选项)。

25、使vi显示行号的命令是_____。

:set number使vi显示行号,选D。

26、下列shell 对变量foo的操作,正确的是_____。

  • A:为变量赋值的正确格式是foo=apple,不需要$符号,A 选项错误。
  • B:判断变量是否等于abc的正确格式是[ "$foo" = "abc" ],B 选项错误。
  • C:测试变量是否为空串的正确格式是[ -z "$foo" ]-f用于测试文件是否存在等,C 选项错误。
  • D:显示变量的值的正确格式是echo $foo,D 选项错误。

都是错的,题目太古早无参考价值

27、init 进程作为所有进程的父进程,它的进程号PID为_____。

选B。

28、下列说法不正确的是_____。

选C。

29、下面命令不能实现系统重启的是_____。

halt -f不能实现系统重启,选D。

30、下列选项不属于Linux内核模块的是_____。

选C。

二、简答题

1、画出Linux操作系统的体系结构图,并说明每个模块的功能与联系。

转自知乎

2、画出VFS(虚拟文件系统)的结构图,并说明VFS的功能与作用。

见样卷1

3、说明软链接和硬链接的区别。

  • 软链接
    • 类似快捷方式,创建软链接使用ln -s命令,如ln -s /original/file /link/file
    • 软链接可以跨文件系统创建,其文件大小较小,存储的是指向目标文件的路径。
    • 当目标文件被删除时,软链接失效,变为一个无效的链接(指向不存在的文件路径)。
  • 硬链接
    • 通过 inode 链接到源文件,创建硬链接使用ln命令(不带-s选项),如ln /original/file /link/file
    • 不能跨文件系统,硬链接文件与源文件共享相同的 inode,文件大小与源文件相同。
    • 只有当所有指向同一 inode 的硬链接(包括源文件本身,如果将源文件视为一个硬链接)都被删除时,文件才会被真正从磁盘上删除。

4、以图解方式解释xinetd工作模式和stand-alone工作模式,并说明选择不同工作 模式的原则。

见样卷1

三、综合应用题

1、根据下面makefile文件内容,画出目标依赖关系图。

自己画的

2、根据要求写出相应的操作命令,假设文件和目录已存在。

  1. 以长格式的形式打印 /tmp 目录下的所有文件,包括隐藏文件
    • 命令:ls -al /tmp
    • 解释:ls是列出目录内容的命令,-a选项表示显示所有文件(包括隐藏文件,隐藏文件以.开头),-l选项以长格式显示文件信息,包括文件权限、硬链接数、所有者、所属组、文件大小、修改时间和文件名等。执行该命令后,会详细列出/tmp目录下的所有文件信息。
  2. 创建一个名为 test 的用户,同时指定 shell 为 /bin/sh
    • 命令:useradd -s /bin/sh test
    • 解释:useradd是用于创建新用户的命令,-s选项用于指定用户的登录 shell,这里指定为/bin/sh。执行该命令后,系统会创建名为test的用户,并将其登录 shell 设置为/bin/sh。可以通过查看/etc/passwd文件来确认用户是否创建成功,例如使用cat /etc/passwd | grep test命令查看与test用户相关的记录。
  3. 把 /tmp/b.txt 文件的文件拥有者修改为 mail,同组用户修改为 games
    • 命令:chown mail:games /tmp/b.txt
    • 解释:chown命令用于更改文件的所有者和所属组,mail是要设置的新所有者,games是要设置的新所属组,/tmp/b.txt是要修改的文件路径。执行该命令后,/tmp/b.txt文件的所有者将变为mail,所属组变为games。可以使用ls -l /tmp/b.txt命令查看文件的所有者和所属组信息是否已更新。
  4. 把 /tmp/c.txt 重命名为 /tmp/c.txt.bak
    • 命令:mv /tmp/c.txt /tmp/c.txt.bak
    • 解释:mv命令用于移动或重命名文件,这里将/tmp/c.txt移动到/tmp/c.txt.bak,实现了对c.txt文件的重命名操作。执行命令后,原/tmp/c.txt文件名将变为/tmp/c.txt.bak
  5. 把当前时间追加到当前用户主目录下的 d.txt 文件
    • 命令:date >> ~/d.txt
    • 解释:date命令用于显示当前系统时间,>>是输出重定向符号,表示将命令的输出追加到指定文件中。~/d.txt表示当前用户主目录下的d.txt文件。执行该命令后,当前时间会被追加到d.txt文件的末尾。如果d.txt文件不存在,该命令会创建一个新的d.txt文件并写入当前时间。
  6. 把系统当前用户的个数追加到当前用户主目录下的 d.txt 文件
    • 命令:who | wc -l >> ~/d.txt
    • 解释:who命令用于显示当前登录系统的用户信息,wc -l用于统计行数,这里通过管道|who命令的输出作为wc -l命令的输入,统计出当前登录用户的个数。然后使用>>将统计结果追加到当前用户主目录下的d.txt文件中。执行该命令后,d.txt文件中会新增一行显示当前系统用户的个数。
  7. 创建当前用户主目录下 d.txt 的软链接,链接到 /tmp/e.txt
    • 命令:ln -s ~/d.txt /tmp/e.txt
    • 解释:ln命令用于创建链接,-s选项表示创建软链接(符号链接)。~/d.txt是源文件路径(当前用户主目录下的d.txt文件),/tmp/e.txt是软链接的目标路径。执行该命令后,在/tmp目录下会创建一个名为e.txt的软链接文件,它指向当前用户主目录下的d.txt文件。可以通过查看/tmp目录下e.txt文件的详细信息(使用ls -l /tmp/e.txt命令)来确认软链接是否创建成功,会显示其指向的源文件路径。
  8. 打包 /tmp 目录下的所有内容,生成名为 out.tar.gz 文件
    • 命令:tar -czvf out.tar.gz /tmp/*
    • 解释:tar是一个强大的打包工具,-c选项表示创建新的归档文件,-z选项表示使用 gzip 压缩算法对归档文件进行压缩,-v选项表示显示详细的打包过程信息,-f选项用于指定归档文件名,这里指定为out.tar.gz/tmp/*表示/tmp目录下的所有文件和子目录。执行该命令后,会将/tmp目录下的所有内容打包并压缩成out.tar.gz文件,保存在当前目录下。可以使用ls命令查看当前目录下是否生成了out.tar.gz文件。
  9. 假设 xinetd 正在运行,打印 xinetd 的进程运行信息
    • 命令:ps -ef | grep xinetd
    • 解释:ps -ef命令用于查看系统中所有进程的详细信息,包括进程的 PID(进程 ID)、PPID(父进程 ID)、用户、启动时间、命令等。grep xinetd用于在ps -ef的输出结果中过滤出包含xinetd关键字的进程信息,即只显示与xinetd相关的进程。执行该命令后,如果xinetd正在运行,会显示其进程信息,例如进程 ID、所属用户、启动命令等。如果没有输出任何信息,则表示xinetd没有在运行。
  10. 把 /tmp/a.txt 的文件权限设置为:拥有者具有读写执行权限,同组用户具有读和执行权限,其他用户具有读权限
    • 命令:chmod 754 /tmp/a.txt
    • 解释:chmod命令用于更改文件或目录的权限。在 Linux 系统中,文件权限用数字表示,每个数字对应三个权限位(读、写、执行),分别对应所有者、同组用户和其他用户。数字与权限的对应关系为:4 表示读权限(r),2 表示写权限(w),1 表示执行权限(x)。7(4 + 2 + 1)表示所有者具有读写执行权限,5(4 + 1)表示同组用户具有读和执行权限,4 表示其他用户具有读权限。执行该命令后,/tmp/a.txt文件的权限将被设置为指定的权限,可以使用ls -l /tmp/a.txt命令查看文件权限是否已更改。

3、编写一个shell程序可以完成以下执行过程的需要。

见样卷1

4、日志备份

  1. 首先创建backuplog.sh脚本内容如下:
    #!/bin/bash
    
    # 获取上一个月的年份和月份
    last_month=$(date -d "last month" +%Y%m)
    
    # 备份上一个月的日志文件到/var/tmp目录,生成log.bk后缀的备份文件
    for i in {1..31}
    do
        day=$(printf "%02d" $i)
        log_file="/var/log/nginx/${last_month}${day}.log"
        if [ -f "$log_file" ]; then
            cp "$log_file" "/var/tmp/${last_month}${day}.log.bk"
        fi
    done
    
    # 等待1小时(这里简单使用sleep模拟,实际情况可能需要更精确的等待方式)
    sleep 3600
    
    # 打包备份文件成backup.tar.gz并保存到/var/tmp目录,然后删除原始备份文件
    tar -czvf /var/tmp/backup.tar.gz /var/tmp/*.log.bk
    rm -f /var/tmp/*.log.bk
    
  2. 然后设置crontab任务来定时执行上述操作:
    • 编辑admin用户的crontab(使用crontab -e命令,如果是root用户想编辑admin用户的crontab,可以使用crontab -u admin -e)。
    • 添加以下内容:
    # 每月第一天凌晨1点30分执行备份脚本 
    30 1 1 * * /bin/bash /home/admin/backuplog.sh 
    # 当天凌晨6点移动压缩文件 
    0 6 * * * mv /var/tmp/backup.tar.gz /var/log/backup/ 
    
  3. 解释:
    • backuplog.sh脚本中,首先通过date -d "last month" +%Y%m获取上一个月的年份和月份,然后循环备份上一个月每天可能存在的日志文件(如果存在)到/var/tmp目录下并加上.log.bk后缀。接着使用sleep 3600模拟等待1小时,之后使用tar命令将备份文件打包成backup.tar.gz并保存到/var/tmp目录,最后删除原始的.log.bk后缀的备份文件。
    • crontab设置中,第一行指定每月第一天凌晨1点30分执行backuplog.sh脚本进行日志备份操作。第二行指定每天凌晨6点将/var/tmp目录下的backup.tar.gz文件移动到/var/log/backup目录,实现日志备份文件的整理和归档。

样卷3

一、选择题

1、systemd 进程作为所有进程的父进程,它的进程号PID为_____。

选B。

2、下列说法正确的是_____。

选D。

3、用于存放系统管理员常用指令的目录是_____。

选B。

4、默认情况下创建了一个新用户,就会在_____目录下创建一个对应的用户主目录。

选B。

5、以下不属于内核空间的内容的是_____。

见样卷2简答第1题,C函数库属于用户空间,选A。

6、以下指令不能实现关机的是_____。

选C。

7、Linux 系统中的文件权限属性分为三组,其中第二组代表的是_____的权限属性。

选A。

8、假设文件权限属性是rw—xr-x,执行命令chmodu+x,g+r,o-x后,权限变为___。

在 CentOS 7 中,原始权限rw---xr-x转换为数字表示为 605(所有者读写权限为 4 + 2 = 6,同组用户执行和读权限为 4 + 1 = 5,其他用户执行权限为 1)。执行chmod u+x(所有者添加执行权限,变为 7),g+r(同组用户添加读权限,变为 7),o-x(其他用户去掉执行权限,变为 4)后,权限变为 754,选B。

9、执行_____命令可以回到上一级目录。

选B。

10、 能够设置vsftpd服务开机启动的命令是_____。

在 CentOS 7 中,systemctl enable vsftpd.service用于设置vsftpd服务开机启动。/etc/rc.d/init.d/network start用于启动网络服务;systemctl start vsftpd.service用于启动vsftpd服务;ifup vsftdp命令用法错误,应为ifup <网络接口名>用于启动网络接口,选A。

11、 下面关于less和more命令说法正确的是_____。

lessmore都可以实现分页查看功能,less在打开大型文档时速度更快且提供上下浏览功能,more会把整个文档读入内存(相比less在处理大型文档时可能会更耗内存且速度较慢),选D。

12、 在vi的命令模式下,不能 导致工作模式切换的是_____。

dgg是删除从文档开头到当前光标所在行的内容,不会切换工作模式,仍在命令模式,选A。

13、 sdb1 表示的含义是_____。

选C。

14、 在 bash 中, 在一条命令后加入 “2>&1” 意味着_____。

选C。

15、 假设执行cat/etc/passwd 命令后,发现以下记录信息: scau:x:1001:1002:scau:/usr/scau:/bin/bash,下列说法正确的是_____。

选A。

16、关于前台进程和后台进程,说法错误的是_____。

选C。

17、 将一个前台进程变成后台进程,用到的命令是_____。

将一个前台进程变成后台进程,可在前台进程运行时按Ctrl + Z暂停该进程,然后使用bg命令将其放到后台继续运行,选B。

18、 crontab 文件的格式为:f1 f2 f3 f4 f5 program,其中f5表示的是_____。

crontab文件的格式中f5表示一个星期中的天数(0 - 6,0 表示星期日),用于指定命令在星期几执行。f1表示分钟,f2表示小时,f3表示一个月中的天数,f4表示月份,选D。

19、 shell 程序中,为了要获取上一个命令的执行结果,需要用到_____。

选B。

20、 下列shell对变量foo的操作,正确的是_____。

选D。

二、简答题

1. 软连接和硬连接的区别

  1. 本质与存储内容
    • 软连接:类似快捷方式,是一个独立的文件,有自己的 inode。文件大小较小,存储的是指向目标文件的路径。例如,创建一个软连接ln -s /original/file /link/file,软连接/link/file中存储的是/original/file的路径信息。
    • 硬连接:通过 inode 链接到源文件,与源文件共享相同的 inode,不是独立文件。其文件大小与源文件相同,因为它实际上是源文件的一个额外链接。比如创建硬连接ln /original/file /link/file/link/file/original/file在磁盘上指向同一个 inode。
  2. 跨文件系统支持
    • 软连接:可以跨文件系统创建。例如,可以在一个挂载的外部存储设备(如 U 盘,可能是 FAT32 等文件系统)上创建指向本地硬盘(如 ext4 文件系统)上文件的软连接。
    • 硬连接:不能跨文件系统。如果源文件和硬连接尝试跨不同的文件系统创建,会失败。例如,不能在一个 ext4 文件系统分区上的文件创建硬连接到 FAT32 文件系统分区上的文件。
  3. 对源文件删除的影响
    • 软连接:当源文件被删除时,软连接失效,变为一个无效的链接(指向不存在的文件路径)。如果访问该软连接,会提示文件不存在错误(除非重新创建源文件且路径相同)。
    • 硬连接:只有当所有指向同一 inode 的硬链接(包括源文件本身,如果将源文件视为一个硬链接)都被删除时,文件才会被真正从磁盘上删除。只要还有一个硬连接存在,文件的数据就仍然保留在磁盘上。
  4. 创建命令与方式
    • 软连接:创建使用ln -s命令,语法为ln -s [源文件路径] [软连接路径]。如前面提到的ln -s /original/file /link/file
    • 硬连接:创建使用ln命令(不带-s选项),语法为ln [源文件路径] [硬连接路径]
  5. 链接计数
    • 软连接:不增加源文件的链接计数。源文件的链接计数只与硬连接的数量有关,软连接的创建和删除不会影响源文件的链接计数。
    • 硬连接:会增加源文件的链接计数。每创建一个硬连接,源文件的链接计数就会加 1,表示有多少个文件名指向同一个 inode。例如,一个文件初始链接计数为 1,创建一个硬连接后,链接计数变为 2。

2. VI 的模式及切换

  1. 命令模式(Command Mode)
    • 特点:启动vi后默认进入命令模式,在该模式下可以执行各种命令操作,通过特定的按键组合来移动光标、删除文本、复制粘贴、查找替换等。
    • 操作示例:
      • 移动光标:h左移一个字符,j下移一行,k上移一行,l右移一个字符;Ctrl + f向前翻一页,Ctrl + b向后翻一页;0(数字零)移动到当前行首,$移动到当前行尾。
      • 删除文本:x删除当前光标字符,dd删除当前行,dw删除当前光标所在单词。
      • 复制粘贴:yy复制当前行,p粘贴(在当前光标下方粘贴,如果要在上方粘贴,使用P),3yy复制当前行及下面两行(数字表示复制的行数)。
      • 查找替换:/进入查找模式,输入要查找的字符串后按回车键进行查找;:%s/old/new/g在整个文件中替换oldnew%表示整个文件,s表示替换,g表示全局替换,如果不加g,只替换每行的第一个匹配项)。
    • 切换到其他模式:
      • 插入模式:按i(在当前光标位置插入)、I(在当前光标所在行首插入)、a(在当前光标后插入)、A(在当前光标所在行尾插入)、o(在当前光标所在行下方插入新行并进入插入模式)、O(在当前光标所在行上方插入新行并进入插入模式)等键可进入插入模式。
      • 末行模式:按:进入末行模式。
  2. 插入模式(Insert Mode)
    • 特点:用于输入文本内容,在该模式下输入的字符会直接插入到文件中。
    • 切换到其他模式:按Esc键可从插入模式回到命令模式。
  3. 末行模式(Last Line Mode)
    • 特点:可以执行一些文件操作、设置vi的参数、执行外部命令等。
    • 操作示例:
      • 文件保存与退出::w保存文件但不退出vi:q退出vi(如果文件有未保存修改,会提示),:wq:x保存并退出vi:q!不保存强制退出vi
      • 设置参数::set nu显示行号,:set nonu取消显示行号,:set tabstop=4设置制表符宽度为 4 个字符(默认可能是 8 个字符)等。
      • 执行外部命令::! ls在不退出vi的情况下执行ls命令,查看当前目录文件列表,执行完后按回车键回到vi
    • 切换到其他模式:按Esc键可从末行模式回到命令模式。

3. xinetd 工作模式图解及选择原则

见样卷1

4. X Window 组成部分的功能与作用(简单描述,图解可手绘或使用专业绘图工具制作)

  1. X Server
    • 功能:负责管理硬件设备,包括显示器、键盘、鼠标等。它直接与硬件交互,接收来自硬件的输入事件(如键盘按键、鼠标移动和点击等),并将图形输出显示到屏幕上。例如,当用户按下键盘上的一个键,X Server 会捕获这个事件并传递给相应的程序处理;同时,它会将应用程序请求绘制的图形(如窗口、菜单、文本等)显示在显示器上。
    • 作用:是 X Window 系统与硬件交互的底层组件,为其他组件提供图形显示和输入处理的基础服务。没有 X Server,X Client 应用程序无法与硬件设备进行通信,也就无法实现图形界面的显示和用户输入的处理。
  2. X Client
    • 功能:是应用程序,如文本编辑器、浏览器、图形设计软件等。它们向 X Server 发送绘图请求(如绘制窗口的形状、显示文本内容、绘制图形元素等),并接收用户输入事件(通过 X Server 转发)。例如,浏览器应用程序会向 X Server 请求绘制网页内容的窗口,当用户在浏览器中点击链接时,X Server 将点击事件传递给浏览器应用程序,浏览器根据事件进行相应的页面加载等操作。
    • 作用:多个 X Client 可以同时运行并共享 X Server 提供的显示资源,每个 X Client 专注于实现自身的功能逻辑,通过与 X Server 的通信来实现图形界面的显示和交互功能,从而为用户提供各种丰富的应用服务。
  3. X Protocol
    • 功能:定义了 X Server 和 X Client 之间通信的规则和消息格式。它规定了如何发送绘图请求(如请求创建窗口、绘制线条、填充颜色等)、处理输入事件(如键盘事件、鼠标事件的格式和传递方式)、管理窗口(如窗口的创建、移动、大小调整等操作的协议规范)等操作。例如,当 X Client 想要绘制一个矩形时,它会按照 X Protocol 规定的消息格式向 X Server 发送绘图请求,X Server 根据协议解析请求并在屏幕上绘制出矩形。
    • 作用:确保 X Server 和 X Client 能够正确地交互数据,使得不同的 X Client 和 X Server 能够相互协作,实现统一的图形界面环境。无论使用何种编程语言开发 X Client 应用程序,只要遵循 X Protocol,就可以在支持 X Window 系统的环境中正常运行并与 X Server 进行通信。
  4. Window Manager
    • 功能:负责管理窗口的布局、外观和操作。它决定了窗口在屏幕上的位置、大小、堆叠顺序(哪个窗口在前面显示),提供窗口的装饰(如标题栏、边框等),处理窗口的移动、大小调整、最大化、最小化、关闭等操作。例如,用户通过鼠标拖动窗口标题栏来移动窗口时,Window Manager 会捕获这个操作并相应地调整窗口的位置;当用户点击窗口的最大化按钮时,Window Manager 会将窗口扩展到全屏显示。
    • 作用:提供了用户与多个窗口交互的界面,使用户可以方便地操作和管理运行中的 X Client 应用程序窗口,提高用户操作的便利性和效率,使得用户可以在多窗口环境中高效地工作和使用各种应用程序。

5. gdb 调试过程中常用指令及作用

  1. run(r)
    • 作用:用于启动被调试的程序,程序会从main函数开始执行,直到遇到断点或程序结束。例如,调试一个 C 程序时,在设置好断点后,使用run命令开始执行程序,程序会正常运行直到停在第一个断点处,此时可以查看程序的运行状态。
  2. break(b)
    • 作用:设置断点,可以根据函数名、行号或条件表达式来设置断点,使程序在指定位置暂停执行,方便查看程序状态。
    • 示例:
      • b main:在main函数入口处设置断点,程序执行到main函数开始时会暂停。
      • b file.c:10:在file.c文件的第 10 行设置断点,当程序执行到该行代码时会暂停。
      • b function_name if variable == value:当满足条件variable == value时,在function_name函数内暂停程序,可用于在特定条件下调试程序。
  3. next(n)
    • 作用:单步执行程序,但不进入函数内部,如果遇到函数调用,会将函数视为一条语句执行完,然后停在下一行代码。例如,在调试一个包含多个函数调用的程序时,使用next可以快速跳过函数调用,专注于当前函数的执行流程。
  4. step(s)
    • 作用:单步执行程序,遇到函数调用时会进入函数内部,继续单步执行函数内的代码。这对于深入调试函数内部逻辑非常有用,可跟踪函数内的每一步操作,查看函数参数传递、局部变量变化等情况。
  5. continue(c)
    • 作用:从当前断点处继续执行程序,直到遇到下一个断点或程序结束。如果在调试过程中已经查看了当前断点处的程序状态,想要继续运行程序到下一个断点,可以使用continue命令。
  6. print(p)
    • 作用:用于查看变量或表达式的值。例如,在程序暂停时,可以使用print variable_name查看变量variable_name的值,也可以使用print expression查看表达式(如a + b)的计算结果,帮助分析程序运行过程中数据的变化情况。
  7. backtrace(bt)
    • 作用:打印当前函数调用栈的信息,显示函数的调用顺序和参数,帮助分析程序的执行流程和定位问题所在的函数调用层次。例如,当程序出现错误时,通过backtrace可以查看程序是如何调用到当前函数的,以及每个函数的参数传递情况,有助于快速定位问题根源。
  8. quit(q)
    • 作用:退出 gdb 调试环境。在调试结束后,使用quit命令退出 gdb。如果程序还有未处理的状态(如正在运行或有未保存的调试设置),gdb 会提示是否确认退出。

三、代码题

1、代码阅读题

  • 第一个case分支[1 - 5]
    • 作用:当用户输入的年龄在1到5岁这个区间(包含1和5)时,执行该分支内的语句。即输出You belong to the Preschool class.,提示用户属于学前班级。
  • 第二个case分支[6 - 10]
    • 作用:当用户输入的年龄在6到10岁这个区间(包含6和10)时,输出You belong to the Elementary School class.,告知用户属于小学班级。
  • 第三个case分支[11 - 14]
    • 作用:若用户输入年龄在11到14岁之间(包含11和14),则输出You belong to the Middle School class.,表明用户属于初中班级。
  • 第四个case分支[15 - 18]
    • 作用:对于输入年龄在15到18岁范围内(包含15和18)的情况,输出You belong to the High School class.,说明用户属于高中班级。
  • 最后一个*分支:
    • 作用:当用户输入的年龄不在前面任何一个指定的区间范围内时,执行该分支。输出You are not in the specified age range for a school class.,提示用户输入的年龄不在学校班级的指定年龄区间内。

2、编写一个shell程序实现简单的加减乘除运算。

#!/bin/bash

# 检查输入参数数量是否为2
if [ $# -ne 2 ]; then
    echo "UsageError"
    exit 1
fi

# 检查输入参数是否小于1000
if [ $1 -ge 1000 ] || [ $2 -ge 1000 ]; then
    echo "UsageError"
    exit 1
fi

# 使用expr命令计算乘法结果并输出
result=$(expr $1 \* $2)
echo "$1 * $2 = $result"

3、编写⼀个shell程序实现以下功能。

#!/bin/bash

# 定义累乘函数
factorial() {
    local result=1
    for (( i = 1; i <= $1; i++ )); do
        result=$(($result * $i))
    done
    echo $result
}

while true
do
    echo "Input a list of number:"
    read numbers
    if [ "$numbers" = "q" ]; then
        break
    fi

    product=1
    for num in $numbers
    do
        product=$(($product * $(factorial $num))))
    done
    echo "The result is $product"
done

四、综合应用题

1、根据要求写出相应的操作命令(假设文件和目录已存在)

  1. 统计/dev目录下有多少个socket文件
    • 命令:find /dev -type s | wc -l
    • 解释:find /dev -type s用于查找/dev目录下类型为socket的文件,wc -l用于统计行数,即socket文件的数量。
  2. 创建一个名为usertest的用户,同时指定shell为/bin/sh
    • 命令:useradd -s /bin/sh usertest
    • 解释:useradd用于添加用户,-s选项用于指定用户的登录shell。
  3. 把/etc/passwd中包含root的行追加到/tmp/c.txt文件中
    • 命令:grep root /etc/passwd >> /tmp/c.txt
    • 解释:grep root /etc/passwd用于查找/etc/passwd文件中包含root的行,>>将结果追加到/tmp/c.txt文件。
  4. 把/etc/passwd的前5行追加到/tmp/a.txt文件中
    • 命令:head -5 /etc/passwd >> /tmp/a.txt
    • 解释:head -5用于获取文件的前5行,>>将结果追加到/tmp/a.txt文件。
  5. 查找根目录下包含common路径的所有普通文件并输出到终端
    • 命令:find / -type f -path "*/common/*" -print
    • 解释:find /从根目录开始查找,-type f表示查找普通文件,-path "*/common/*"表示路径中包含common的文件,-print将结果输出到终端。
  6. 打包/tmp目录下的所有内容,生成名为out.tar文件
    • 命令:tar -cvf out.tar /tmp/*
    • 解释:tar -cvf用于创建打包文件,out.tar是打包后的文件名,/tmp/*表示/tmp目录下的所有内容。
  7. 假设vsftpd正在运行,打印vsftpd的进程运行信息
    • 命令:ps -ef | grep vsftpd
    • 解释:ps -ef用于列出所有进程信息,grep vsftpd用于筛选出与vsftpd相关的进程信息。
  8. 把/tmp/a.txt的文件权限设置为:拥有者具有读写执行权限,同组用户具有读和执行权限,其他用户具有读权限
    • 命令:chmod 754 /tmp/a.txt
    • 解释:在Linux权限表示中,7表示拥有者具有读写执行权限(4 + 2+ 1),5表示同组用户具有读和执行权限(4 + 1),4表示其他用户具有读权限。
  9. 写出满足以下要求的crontab内容: 每月的星期三晚上9点 - 11点,执行/usr/bin/run脚本(假设脚本已存在且可执行)
    • 命令:0 21 - 23 * * 3 /usr/bin/run
    • 解释:在crontab中,从左到右依次表示分钟、小时、日期、月份、星期几、要执行的命令。这里表示每月中星期三(星期几用数字3表示)的21点到23点(晚上9点到11点),每分钟(0分钟)执行一次/usr/bin/run脚本。
  10. 把/var/log目录下文件size最大的文件,以长格式的方式,输出到/tmp/bb.txt文件中
    • 命令:ls -lS /var/log | head -1 > /tmp/bb.txt
    • 解释:ls -lS以长格式并按文件大小排序(从大到小)列出/var/log目录下的文件,head -1获取第一行(即文件size最大的文件信息),>将结果输出到/tmp/bb.txt文件。

2、根据下面的依赖关系图,写出对应的makefile文件内容(假设mainfile与 hello.c 在同一层目录下)。

# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall

# 定义目标文件和源文件
OBJS = hello.o hi.o hey.o
SRCS = hello.c hi.c hey.c

# 定义可执行文件
hello: $(OBJS)
    $(CC) $(OBJS) -o hello

hello.o: hello.c
    $(CC) $(CFLAGS) -c hello.c -o hello.o

hi.o: hi.c
    $(CC) $(CFLAGS) -c hi.c -o hi.o

hey.o: hey.c
    $(CC) $(CFLAGS) -c hey.c -o hey.o

# 清理规则
clean:
    rm -f $(OBJS) hello

3、定时统计访问数据。

#!/bin/bash

# 获取当前日期
current_date=$(date +%Y-%m-%d)

# 定义输出文件名
output_file="${current_date}.out"

# 使用关联数组来统计每个id的访问次数
declare -A id_count

# 读取日志文件
while IFS='#' read -r id time runner command result; do
    if [ -z "${id_count[$id]}" ]; then
        id_count[$id]=0
    fi
    ((id_count[$id]++))
done < MyOut.log

# 将统计结果输出到文件
for id in "${!id_count[@]}"; do
    echo "${id}#${id_count[$id]}" >> /tmp/${output_file}
done

将这个写入脚本中即可


http://www.kler.cn/a/442559.html

相关文章:

  • MCP Server开发的入门教程(python和pip)
  • idea 自动导包,并且禁止自动导 *(java.io.*)
  • 怎么防止SQL注入攻击
  • sql_实用查询语句模版
  • 蓝桥杯第二天学习笔记
  • 计算机的错误计算(二百一十一)
  • WPF 布局控件
  • Python什么是动态调用方法?What is Dynamic Method Invocation? (中英双语)
  • OpenCV中的边缘检测和轮廓处理
  • OSLC助力系统工程的全生命周期整合 (转)
  • GEE+本地XGboot分类
  • 智慧商城:首页静态结构,封装首页请求接口,轮播和导航和商品基于请求回来的数据进行渲染
  • STM32 水质水位检测项目 显示模块
  • MATLAB图卷积神经网络GCN处理分子数据集节点分类研究
  • 从零用java实现 小红书 springboot vue uniapp (5)购物页聊天页
  • 【LeetCode】35.搜索插入位置
  • Python `*args` 和 `**kwargs`:优雅处理可变参数的终极指南 配合 frozenset 实现通用缓存装饰器
  • 跨站脚本攻击(XSS)可能存在的位置与实操演示
  • Redis应用—6.热key探测设计与实践
  • qlu数据结构测试
  • 解决/var/lib/docker(默认的 Docker 数据目录)占用较大,并且所在磁盘空间不足
  • 容器安全:风险与对策
  • MyBatis-Plus批量保存与多线程保存比较
  • Linux之条件变量,信号量,生产者消费者模型
  • 配置清晰,nignx http tcp 代理 已经websocket
  • 计算机网络——期末复习(1)背诵