linux期末考试题

一、选择题(共30分,每小题2分)

1.以下关于自由软件的说法,正确的是(D

A、自由软件是一种有版权保护的软件 B、修改自由软件应取得原作者的许可

C、微软的 Ofice 软件属于自由软件 D、自由软件不一定都是免费的

解答:

自由软件确实有版权保护(通常基于版权法或类似法律框架),但它通过特定的许可证(如GPL、MIT等)赋予用户特定的自由。因此,自由软件是有版权保护的,但这种保护是为了确保用户享有自由软件的自由,而不是限制用户的使用。

自由软件的核心原则之一是用户可以自由地修改软件,而无需事先取得原作者的许可。只要遵守相应的自由软件许可证条款(如提供修改后的源代码),用户就可以自由地修改和分发软件。

微软的Office软件是专有软件,其源代码不公开,用户没有自由使用、修改和分发的权利。

自由软件的“自由”指的是用户享有运行、复制、分发、学习、修改和改进软件的自由,而不是指软件的价格。自由软件可以免费获取,也可以收费(例如,某些公司可能提供自由软件的技术支持或附加服务并收费)。关键在于用户是否享有上述自由,而不是软件是否免费。

2.使用下列哪个命令可以将目录下所有文件和子目录全都显示出来(D)

A、ls -l B、dir -all C、ls -a D、ls -R

解答:

ls -l 用于以长格式(详细信息)列出当前目录下的文件和子目录,但它不会递归显示子目录中的内容。

dir 是一个在某些系统(如Windows的CMD)中使用的命令,用于列出目录内容。在Unix/Linux系统中,dir 通常是 ls 的别名,但 -all 不是 dirls 的有效选项。因此,这个选项在Unix/Linux系统中不适用。

ls -a 用于列出当前目录下的所有文件和子目录,包括隐藏文件(以点开头的文件)。然而,它不会递归显示子目录中的内容。

ls -R 用于递归列出当前目录及其所有子目录中的文件和子目录。

3.下面哪个命令可以在文件中查找内容(C)。

A、pause B、cat C、grep D、 more

解答:

pause 不是Unix/Linux系统中的标准命令。在某些环境(如Windows批处理脚本)中,pause 用于暂停脚本执行并等待用户按键,但它与文件内容查找无关。

cat 命令用于显示文件的全部内容,但它不具备搜索功能。

grep 是一个强大的文本搜索工具,专门用于在文件中查找匹配特定模式(字符串或正则表达式)的行。

ore 是一个分页查看文件内容的命令,用户可以逐页浏览文件内容,但它本身不提供搜索功能。

4.以下哪个环境变量表示命令的搜索路径(A)。

A、PATH B、PWD C、HOME D、PSI

解答:

PATH 是一个环境变量,用于定义系统在哪些目录中查找可执行命令。当用户在终端输入一个命令时,系统会按照 PATH 中列出的目录顺序依次查找该命令的可执行文件。echo $PATH 会输出当前系统的命令搜索路径。

PWD(Print Working Directory)是一个环境变量,表示当前工作目录的绝对路径。它与命令的搜索路径无关。

HOME 是一个环境变量,表示当前用户的主目录路径。它通常用于存储用户的个人文件和配置,与命令的搜索路径无关。

PSI 不是一个常见的环境变量,也不是用于定义命令搜索路径的变量。在某些上下文中,PSI 可能有其他含义(如进程状态接口),但与本题无关。

5.默认情况下管理员创建了一个用户,就会在(B)目录下创建一个用户主目录。

A、/usr B、/ home C、/root D、/boot

解答:

/usr 目录通常用于存储系统软件和程序资源,例如可执行文件、库文件和文档等。

/home 是Linux系统中用户主目录的标准存储位置。默认情况下,当管理员创建一个新用户时,系统会在 /home 目录下为该用户创建一个以用户名命名的子目录作为其主目录。

/root 是系统管理员(root用户)的专属主目录。

/etc 目录用于存储系统的配置文件,例如用户账户信息、网络配置、服务配置等。

6.vi中哪条命令可以用来保存文件(A)。

A、:w B、:save C、:q D、:r

解答:

:wvi 编辑器中的命令,用于将当前缓冲区的内容写入(保存)到文件中。如果文件已存在,则覆盖原文件;如果文件不存在,则创建新文件。

:save 不是 vi 的标准命令。vi 中没有直接名为 :save 的命令用于保存文件。

:qvi 编辑器中的命令,用于退出编辑器。但如果文件未保存,直接使用 :q 会导致错误(除非使用 :q! 强制退出)。

:rvi 编辑器中的命令,用于读取文件内容并将其插入到当前光标位置。

7.Linux中,用户的密码保存在以下哪个文件里(C)。

A、/etc/sudoers B、/etc/ passwd C、/etc/shadow D、/etc/inittab

解答:

/etc/sudoers 文件用于配置 sudo 命令的权限,定义哪些用户或用户组可以以其他用户(通常是 root)的身份执行命令。

/etc/passwd 文件是Linux系统中用于存储用户账户信息的文件,包括用户名、用户ID、组ID、家目录、登录Shell等。然而,出于安全考虑,现代Linux系统通常不在此文件中存储加密后的用户密码,而是使用一个占位符(如 x*)代替。

/etc/shadow 文件是Linux系统中专门用于存储加密后的用户密码的文件。它只能由 root 用户读取,包含了用户的加密密码、密码最后修改时间、密码有效期等信息。

/etc/inittab 文件(在较新的系统中可能已被 systemd 取代)用于配置系统的初始化过程,定义系统运行级别、启动脚本等。

8.Linux 中显示文件的类型的命令是(C)。

A、whereis B、list C、file D、cat

解答:

whereis 用于查找二进制文件、源文件和手册页的位置。

ls 用于列出目录内容,但不显示文件类型(除非结合 -F-l 等选项查看部分类型信息,但不直接显示文件类型描述)。

file 是Linux中的一个命令,用于确定文件的类型。它会读取文件的内容并尝试识别文件的格式(如文本文件、二进制文件、可执行文件、图片文件等),并输出相应的描述。

cat 命令用于显示文件的全部内容,但它不提供文件类型的信息。它只是将文件内容输出到终端。

9.dirl是一个目录,当执行"rm -rf dirl"命令时,Linux系统会(B)。

A.经过用户确认后再删除 dirl B.直接删除 dirl及 dirl下的所有文件

C.只删除 dirl 下的文件,保留目录 dirl D.只有当 dirl 非空时才能删除

解答:

rm 是用于删除文件或目录的命令。

-r(或 -R)选项表示递归删除,即删除目录及其所有内容(包括子目录和文件)。

-f 选项表示强制删除,即不提示用户确认,直接删除文件或目录(即使文件是只读的或用户没有写权限,也会尝试删除,除非遇到权限完全拒绝的情况)。

10.执行"cp -s"命令可以(D)。

A.拷贝文件 B.拷贝目录 C.创建一个文件的硬链接 D.创建一个文件的符号链接

解答:

cp 是用于复制文件或目录的命令。

-s选项在cp命令中用于创建符号链接(也称为软链接),而不是复制文件内容。

符号链接是一个指向另一个文件或目录的特殊文件,类似于Windows中的快捷方式。如果源文件被删除或移动,符号链接将失效(成为“悬空链接”)。

cp 命令的基本功能是拷贝文件,但 -s 选项改变了默认行为,不进行实际拷贝,而是创建符号链接。

cp 命令可以使用 -r-R 选项递归拷贝目录。

硬链接是通过 ln 命令(不带 -s 选项)创建的,硬链接是文件的另一个名称,与原文件共享相同的inode和数据块。

11.以下哪个命令可以对文件重命名(C)。

A、chown B、chname C、mv D、chmod

解答:

hown 命令用于更改文件或目录的所有者(即用户或用户组)。它的基本语法是 chown [选项] 新所有者 文件

chname 不是Linux中的标准命令。在常见的Linux发行版中,没有这个命令用于文件重命名。

mv 命令用于移动文件或目录,同时也可以用于重命名文件或目录。它的基本语法是 mv [选项] 源文件或目录 目标文件或目录。如果目标路径与源路径在同一目录下但名称不同,则相当于重命名。

chmod 命令用于更改文件或目录的权限(即读、写、执行权限)。它的基本语法是 chmod [选项] 权限 文件

12.使用gcc命令编译C语言程序,需要输出的可执行程序带调试信息,应该(B)

A、gcc -o B、gcc -g C、gcc -E D、gcc -c

解答:

-o 选项用于指定输出文件的名称。例如,gcc -o myprogram source.c 会将编译后的可执行文件命名为 myprogram。但 -o 本身并不添加调试信息。

-g 选项用于在编译时生成调试信息。这些调试信息(如符号表、行号信息等)会被嵌入到可执行文件中,供调试器(如 gdb)使用。

gcc -E 用于仅对源文件进行预处理,并将预处理结果输出到标准输出(或通过重定向保存到文件)。它不生成可执行程序,也不添加调试信息。

-c 选项用于仅编译源文件,生成目标文件(.o 文件),而不进行链接。它不生成最终的可执行程序,也不添加调试信息到可执行程序(因为根本没有生成可执行程序)。

13.文件的 inode 中不包含以下哪些内容(A)。

A、文件名称 B、文件的访问权限 C、文件的链接数 D、文件数据 block 的位置

解答:

inode(索引节点)是Linux文件系统中用于存储文件元数据的数据结构。

inode中包含的信息通常包括:

  • 文件的类型(如普通文件、目录、符号链接等)。
  • 文件的访问权限(如读、写、执行权限)。
  • 文件的硬链接数(即指向该inode的目录项数量)。
  • 文件所有者的用户ID和组ID。
  • 文件的大小(以字节为单位)。
  • 文件数据块的指针(即文件数据在磁盘上的存储位置)。
  • 文件的创建时间、修改时间、访问时间等时间戳。

inode中不包含的信息是文件名。文件名存储在目录项中,目录项将文件名映射到对应的inode号。

14.为了达到使文件的属主和同组用户有读(r)、写(w)和执行(x)的权限,而其他用户有读(r)执行权限(x),在设置文件的许可值时,应当设为(C)。

A、665 B、774 C、775 D、654

解答:

读(r):4 写(w):2 执行(x):1

属主权限:4+2+1=7

同组用户权限:4+2+1=7

其他用户权限:4+1=5

故而设置许可值时,应当设为775

15.shell编程时,表达式[ $a = $b ]的含意是(B)

A、将变量b的值赋给变量a B、测试字符串a和字符串b是否相等

C、测试整数a和整数b是否相等 D、将变量b的值赋给变量a并返回b的值

解答:

=[ ] 中用于字符串比较(不是赋值)。

如果变量 $a$b 的字符串值相同,则表达式返回真(退出状态为0),否则返回假(非0)。

=[ ] 中不是赋值操作,赋值在shell中用 = 直接完成(如 a=$b

测试整数是否相等应使用 -eq(如 [ $a -eq $b ]

[ ] 是条件测试,不会赋值或返回值。

二、简答题(共40 分,每小题10分)

1、什么是 Linux 的管道功能和输入/输出重定向功能?举例说明如何使用该功能。

答:Linux的管道功能(|)用于将一个命令的输出作为另一个命令的输入,实现命令间的数据传递;输入/输出重定向则通过符号(如 >>><)将命令的输入/输出从默认设备(如键盘/屏幕)重定向到文件或其他设备。例如:

  • 管道:ls -l | grep ".txt"ls -l 的输出通过管道传递给 grep,仅显示包含 .txt 的文件。
  • 输出重定向:echo "Hello" > file.txtecho 的输出重定向到 file.txt(覆盖原内容),>> 则追加内容。
  • 输入重定向:grep "word" < file.txtfile.txt 读取输入并搜索 "word"

2.请列出Linux操作系统的主要目录,并说明该目录的功能是什么。(注:请至少列出10个要目录)

答:

以下是Linux操作系统中至少10个主要目录及其功能的说明:

  1. /(根目录)

    整个文件系统的起点,所有其他目录和文件都位于根目录下或其子目录中,是Linux文件系统的最高层级。
  2. /bin

    存放系统启动和日常操作所必需的基本命令,如lscpmvcat等,这些命令无需额外权限即可使用。
  3. /sbin

    存放关键的命令,这些指令大多专为root用户设计,比如分区工具、ifconfig(网络配置工具)和shutdown(关机命令)等。
  4. /etc

    存放系统的配置文件,几乎所有的系统服务设置文件都被放置在这个目录中,涵盖了从用户账户设置(如/etc/passwd)到网络设置(如/etc/network),以及系统启动相关设置(如/etc/hostname)等多个方面。
  5. /dev

    存放设备文件,这些文件并非用于存储数据,而是充当操作系统与各类硬件设备沟通的桥梁,通过这些设备文件来实现对硬件如硬盘、键盘、鼠标、光驱等的识别与操作。
  6. /proc

    一个虚拟文件系统,实时反映了系统运行时的状态信息,用户可以通过这个目录下的文件来获取进程、内存、CPU以及硬件状态等数据。
  7. /var

    存放系统中经常变动的文件,如系统日志、缓存、邮件和打印队列等。由于这些文件会不断增多,管理员需要定期对其进行维护和清理。
  8. /tmp

    用于存储临时文件,无论是程序运行时产生的临时文件,还是用户操作生成的临时数据,都会存放在这里,该目录下的文件通常有效期限较短。
  9. /usr

    用于存放通用文件和用户应用程序的区域,其中包含了众多应用程序、库文件及文档等。
  10. /home

    存放所有普通用户个人资料的根目录,每个用户都有一个以其用户名命名的专属子目录,这里保存了他们的个人文件、设置和文档。用户可以独立管理自己的主目录内容,而系统管理员则有权限访问和管理所有用户的主目录。

3.什么是内存泄漏?内存泄漏对系统有什么影响?在编程时如何避免内存泄漏。

答:内存泄漏是指程序在动态分配内存后未正确释放不再使用的内存,导致这部分内存被永久占用,无法被系统回收利用;

其对系统的影响包括逐渐耗尽可用内存、引发程序或系统性能下降(如卡顿、响应变慢),甚至导致系统崩溃(尤其在长期运行的进程或内存资源受限的环境中);

编程时避免内存泄漏的方法包括:及时释放不再使用的内存、采用自动内存管理的语言(如Java/Python的垃圾回收机制)、利用工具检测泄漏,并养成良好编程习惯避免循环中重复分配未释放的内存。

4.系统管理员每天需完成以下的重复工作,请按照下列要求,用crontab命令编制完成这些工作:

(1)每小时(整点)在屏幕上显示当前时间;

0 * * * * echo "当前时间: $(date)"

(2)每天早上6:00定时打开网络设备(eth0);

0 6 * * * ifconfig eth0 up

(3)每天晚上23:00定时关闭网络设备(eth0);

0 23 * * * ifconfig eth0 down

(4)周一至周五每2小时进行一次备份 pub 文件数据到 data 文件中;

0 */2 * * 1-5 cp /opt/pub /opt/data

(5)每周五下午18:00 删除临时文件(/temp 目录中的文件)。

0 18 * * 5 rm -rf /temp/*

三、综合编程题(共 30分,每小题15分)

1.编写shell脚本,能够循环录入学生的百分制成绩,将其转换为对应的成绩等级显示。

优:90-100 良:80-89 中:70-79 及格:60-69 不及格0-59

录入完毕时按q或Q键,显示已经录入的各个等级成绩的人数,然后退出程序。

解:

#!/bin/bash

# 初始化计数器
excellent=0
good=0
medium=0
pass=0
fail=0 # 循环录入成绩
#使用read命令提示用户输入成绩,并将输入存储在变量score中
while true; do
read -p "请输入学生的百分制成绩(输入q或Q退出): " score # 检查是否退出
if [[ "$score" =~ ^[qQ]$ ]]; then
break
fi # 检查输入是否为数字
if ! [[ "$score" =~ ^[0-9]+$ ]]; then
echo "输入无效,请输入一个整数或q/Q退出。"
continue
fi # 判断成绩等级
if (( score >= 90 && score <= 100 )); then
((excellent++))
elif (( score >= 80 && score <= 89 )); then
((good++))
elif (( score >= 70 && score <= 79 )); then
((medium++))
elif (( score >= 60 && score <= 69 )); then
((pass++))
elif (( score >= 0 && score <= 59 )); then
((fail++))
else
echo "输入的成绩无效,请输入0-100之间的整数。"
fi
done # 显示各个等级成绩的人数
echo "成绩等级统计:"
echo "优: $excellent"
echo "良: $good"
echo "中: $medium"
echo "及格: $pass"
echo "不及格: $fail"

注意:

if [[ "$score" =~ ^[qQ]$ ]]; then break fi

if ! [[ "$score" =~ ^[0-9]+$ ]]; then echo "输入无效,请输入一个整数或q/Q退出。" continue fi

[[]]:是 Bash 中用于条件判断的语法结构,称为条件表达式,是 [ ](test 命令)的增强版,支持更多的操作符和功能,比如正则表达式匹配、字符串比较、数字比较。

=~ 是 Bash 中用于正则表达式匹配的操作符。用于检查字符串是否与给定的正则表达式模式匹配。[[ "$score" =~ ^[qQ]$ ]] 用于检查变量 $score 的值是否与正则表达式 ^[qQ]$ 匹配。

"$score" 是一个变量引用,其中 $score 是变量名,引号 "" 用于防止变量值中的空格或特殊字符导致的问题。

^:表示匹配字符串的开始。

[qQ]:表示匹配字符集合中的任意一个字符。

$:表示匹配字符串的结束。

+:表示匹配前面的字符集合一次或多次。

if (( score >= 90 && score <= 100 ));

(( ... )) 是一个算术上下文,用于执行算术运算和条件判断。

if 语句中,(( ... )) 用于判断一个算术条件是否为真。如果条件为真,则返回退出状态码 0(表示成功);否则,返回非零状态码。

2.用C语言编写多进程程序,主进程每隔1分钟将系统当前时间和在线人数写入文件record.txt,子进程每隔5分钟读取一次该文件,并将文件内容显示到屏幕上。

解:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <fcntl.h> //获取当前时间并格式化为字符串
void get_current_time(char *time_str) {
time_t now;
time(&now);
struct tm *local = localtime(&now);
strftime(time_str, 20, "%Y-%m-%d %H:%M:%S", local);
} //获取在线用户数
int get_online_users() {
FILE *fp = popen("who | wc -l", "r");
if (fp == NULL) {
perror("popen");
return -1;
}
int count;
fscanf(fp, "%d", &count);
pclose(fp);
return count;
} //主进程函数
void parent_process(const char *filename) {
FILE *file;
char time_str[20];
int online_users; while (1) {
get_current_time(time_str);
online_users = get_online_users(); file = fopen(filename, "a");
if (file == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
fprintf(file, "Time: %s, Online Users: %d\n", time_str, online_users);
fclose(file); sleep(60);// 每隔1分钟写入一次
}
} //子进程函数
void child_process(const char *filename) {
FILE *file;
char buffer[256]; while (1) {
file = fopen(filename, "r");
if (file == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
} printf("Contents of %s:\n", filename);
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
fclose(file); sleep(300);//每隔5分钟读取一次
}
} int main() {
pid_t pid;
const char *filename = "record.txt"; pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} if (pid == 0) {
// 子进程
child_process(filename);
} else {
// 主进程
parent_process(filename);
} return 0;
}

linux期末考试题(2)的更多相关文章

  1. C++期末考试题库

    哈尔滨商业大学计算机专业C++期末考试题库 下载:题库 示例: 一.单选题:1.能作为 C ++程序的基本单位是( C )A .字符 B .语句 C .函数 D .源程序文件2.程序中主函数的名字为( ...

  2. 中期linux课程考试题

    [口头表达] 1)请描述你了解的磁盘分区的相关知识2)什么是rsync,你有什么生产环境的应用?3)在生产环境中,公司的IDC机房即将超过254台机器,请问你有什么解决方案来规划扩展IDC机房的内网网 ...

  3. (转)linux实战考试题:批量创建用户和密码-看看你会么?

    老男孩教育第五关实战考试题:批量创建10个用户stu01-stu10,并且设置随机8位密码,要求不能用shell的循环(例如:for,while等),只能用linux命令及管道实现. 方法1:[roo ...

  4. Linux期末总结

    Linux内核学习总结 1.计算机是如何工作的? 存储程序计算机工作模型 X86汇编基础 汇编一个简单的C程序分析其汇编指令执行过程 2.操作系统是如何工作的? 三个法宝——存储程序计算机.函数调用堆 ...

  5. Linux期末复习题

    版权声明: https://blog.csdn.net/u014483914/article/details/36622451 1.More和less命令的差别         More命令通经常使用 ...

  6. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  7. 基于Web在线考试系统的设计与实现

    这是一个课程设计的文档,源码及文档数据库我都修改过了,貌似这里复制过来的时候图片不能贴出,下载地址:http://download.csdn.net/detail/sdksdk0/9361973   ...

  8. AC日记——单词替换 1.7 21

    21:单词替换 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区 ...

  9. AC日记——删除单词后缀 openjudge 1.7 20

    20:删除单词后缀 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个单词,如果该单词以er.ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否 ...

  10. 【Beta阶段】展示博客

    Beta阶段展示博客 blog software buaa 1.团队成员简介 Email:qianlxc@126.com Free time:8:00 7:00 a.m ~ 11:00 12:00p. ...

随机推荐

  1. LangChain基础篇 (05)

    LangChain 核心模块:Data Conneciton - Document Transformers 一旦加载了文档,通常会希望对其进行转换以更好地适应您的应用程序. 最简单的例子是,您可能希 ...

  2. Kettle - hello world

    Kettle下载页面:点这里 Kettle 版本:pdi-ce-9.4.0.0-343 流程概览 详细步骤 1.首先打开Kettle的Spoon.bat 2.在主对象树中选择转换 3.然后在核心对象的 ...

  3. LCP 17. 速算机器人

    地址:https://leetcode-cn.com/problems/nGK0Fy/ <?php /** LCP 17. 速算机器人 小扣在秋日市集发现了一款速算机器人.店家对机器人说出两个数 ...

  4. nginx: [error] open() "/usr/local/nginx/nginx.pid" failed (2: No such file or directory)

    nginx 启动出现错误 nginx: [error] open() "/usr/local/nginx/nginx.pid" failed (2: No such file or ...

  5. Git--命令常用

    GITLab 命令 git remote add origin https://gitee.com/gtnotgod/Data-Quality-Management.git #增加了远程仓库 git ...

  6. Linux下如何重启Oracle

    操作步骤 切换到oracle用户 su – oracle 通过sqlplus以管理员身份登录 sqlplus / as sysdba 然后执行 shutdown immediate 退出sqlplus ...

  7. 手把手教你如何给 Docker 开启 IPv6 网络支持

    Docker 默认是不开启 IPv6 支持的,但是我们某些业务往往又需要 IPv6 的支持,特别是 IPv6 普及大势所趋,本文主要介绍的是如何开启 Docker 桥接网络 IPv6 支持,这篇文章具 ...

  8. .NET 中的 Swagger 文档排序设置

    Swagger的API默认排序往往达不到效果,甚至设置了Action排序也没有作用.这里直接给出代码,关键在于 IDocumentFilter 实现. 注意 DocumentFilter 注册要放在尾 ...

  9. macos设置docker可以ping容器

    macos设置docker可以ping容器 项目连接不上seata 今天在启动项目时候seata报错: io.seata.common.exception.FrameworkException: ca ...

  10. 一文速通Python并行计算:02 Python多线程编程-threading模块、线程的创建和查询与守护线程

    一文速通 Python 并行计算:02 Python 多线程编程-threading 模块.线程的创建和查询与守护线程 摘要: 本文介绍了 Python threading 模块的核心功能,包括线程创 ...