判断题
- grep命令的功能是在文件中搜索与字符串匹配的行并输出(√)
- vi编辑器的三种工作模式可直接切换(×)
- chmod命令用于更改文件或目录的所有者(×)
- gcc编译器的编译流程依次为:编译,汇编,预处理,链接(×)
- gzip命令既能用于压缩文件,又能对压缩包解压缩(√)
- cat < file 命令的功能是将cat命令打印的结果重定向到文件file中(×)
- shell最重要的功能是命令解释,Linux系统中的所有可执行文件都可以作为shell命令来执行(√)
- 使用&&命令链接的命令,其前后命令的执行遵循逻辑与关系,只有该链接符之前的命令执行成功时,后面的命令才会被执行(√)
- 在linux系统的文件描述符表中,进程打开的普通文件的文件描述符从3开始(√)
- Linux系统中的文件名存储在文件所在目录的dentry中,而非文件本身中(√)
- 进程是程序的一次执行(√)
- 解决僵尸进程的方法是终止其父进程,使其变成孤儿进程(√)
- fork()函数执行后,系统会立刻为子进程复制一份父进程的资源(×)
- 信号既可以发送给前台进程,也可以发送给后台进程(√)
- 在程序中可以通过signal函数向进程发送指定信号(×)
- 使用信号可实现进程同步(√)
- 因设备或系统出现不恰当的执行时序而得不到正确结果的现象称为时序竞态(√)
- 匿名管道只能用于父子进程间通信(×)
- popen()函数若调用成功,则返回一个I/0文件指针(√)
- 线程是最小的资源分配单位(×)
- 多个线程虚拟地址会被映射到物理磁盘的同一段地址空间(×)
- 父子进程中的全局变量是不共享的,但父子线程中的全局变量是共享的(√)
- socket只能用于网络通信(×)
- 大端序表示高位字节存储在高地址(×)
单选题
- 从以下选项中选出关于Linux特点完全正确的一项(多用户,多线程, 多CPU)
- Linux操作系统多应用领域,下列选项中哪些可能用到了Linux操作系统(汽车,手机,机顶盒)
- 以下哪个选项不属于VMware虚拟网络技术中的网络模式(C/S) # 桥接VMnet0,网络地址转换(仅主机模式)VMnet1,NATVMnet8
- 下面哪个选项不是Linux服务器可提供的服务(xshell) # web sftp smtpd
- 下面哪个版本是Linux系统是中国用户使用最多的版本(Centos)
- 假设当前一个文件权限为rwxr–r--,则下列哪个命令可以使该文件所属组用于对该文件的执行权限(chmod a+x file1)
- 加上Linux系统中不存在文件newfile,现要创建一个新闻界newfile,以下哪个命令无法实现该功能(cd /itheima/newfile)
- 下列各选项中哪个选项不属于vi编辑器的工作模式(视图模式) # 底行模式,插入模式,命令模式
- 从以下选项中选出GCC编译器的正确处理流程(预处理,编译,汇编,链接)
- 若要在当前终端上顺序执行命令,则应使用哪个符号连接( ; )
- 选出下列备选项中不属于特殊文件的选项(硬链接文件) # 管道文件,符号链接文件,软链接文件
- 选出下列选项中不属于ext2文件系统块组成部分的选项(组描述块) # 启动块,inode结构,数据块
- 一个inode结构体中的每个索引项占4个字节,假设数据块的大小为1KB,那么一个二级索引项可索引的数据块数量为(256^2)
- 下列哪个选项不属于进程对信号的响应方式(保存信号) # 忽略信号,捕获信号,执行信号默认动作
- 下列哪个信号不能被进程屏蔽和捕获(SIGSTOP) # SIGINT SIGQUTI SIGCHLD
- 下列哪个选项不是Linux系统中信号的状态(睡眠状态) # 阻塞状态,未决状态,递达状态
- 使用快捷键组合ctrl+\会发送哪个信号到前台进程(SIGQUIT)
- 下列哪个选项不能产生信号(read()) # alarm() kill() kill
- 下列对匿名管道描述错误的是(可以使用lseek()函数修改读写位置) # 采用半双工通信方式,只存在于内存中,有固定的读端和写端
- 下列对命名管道的说法错误的是(管道中的内容保存在磁盘上) # 在文件系统中可以通过操作文件的方式查看,可以用于没有亲缘关系的进程间,通过路径名打开
- 下列进程通信方式中不能实现非亲缘关系进程间通信的是(匿名管道) # 消息队列,共享内存,socket
- 对于整型信号量,在执行一次P操作时,信号量的值应该(减1)
- 下列哪个选项不是使用互斥锁的代码段具有的特性(条件满足方可生效) # 非繁忙等待,原子性,唯一性
- 以下不属于socket类型的是(网络套接字) # 数据报套接字,流式套接字,原始套接字
填空题
- Linux应用领域主要包括(服务器)(超级计算机)和(嵌入式系统)
- VMware提供了(桥接)(NAT)和(仅主机)这三种网络模式,对应名称分别为VMnet0,VMnet8和VMnet1
- 无论是windows还是Linux系统,都可以通过(ping)命令检测网络连接状态
- linux命令中的选项分为(长选项)和(短选项)
- Linux常用的文件处理与管理命令有(ls)(cd)(pwd)(touch)(mkdir)等
- vi编辑器三种工作模式,分别是(插入模式)(命令模式)和底行模式
- GCC编译器的编译流程依次为(预处理)(编译)(汇编)和(链接)
- Linux系统中的用户大体上课分为三组,分别为:(管理员root用户)普通用户和(系统用户)
- 假设当前系统中有一个用户itheima,则删除该用户且同时删除用户相关文件的命令是(userdel -r itheima)
- Linux系统中的输入输出分为3类,分别为:(标准输入)标准输出和(标准错误)
- 当执行gcc -c hello.c 2>file命令时,系统会将执行命令时的(错误)输出到文件file中,执行shell脚本的方法有两种,假设现有一个脚本文件test.sh,则执行该脚本的方式分别为(chmod +x test.sh ./test.sh)和(sh test.sh)
- shell中的变量没有明确的类型,变量值都以字符串的形式存储,但shell中也可能进行一些算术运算,shell中的运算一般通过两个命令实现(let)和(expr)
- shell中通常使用(test)命令或([)命令对条件进行判断
- shell脚本中常用的条件语句有三种,分别为:(if)语句(select)语句和(case)语句
- 磁盘中的第1个扇区非常重要,因为其中存储了与磁盘正常使用的重要信息,包括(主引导记录)(磁盘分区表)和魔数
- 文件的inode编号可以通过(ls -i)命令查看,若要查看当前目录中普通文件test.c的inode编号,所用命令为(ls -i test.c)
- ext2文件系统中,磁盘分区中的空间会被分为多个块组,每个块组又分为6个部分,为别为:(超级块)(组描述符表)(块位图)inode位图(inode表)和数据块
- 目录结构只是一个逻辑概念,Linux系统中通过(挂载)的方式将物理地址与目录进行映射
- Linux系统中的文件可分为:(普通文件)(目录文件)设备文件和(特殊文件)
- 进程的属性保存在一个被称为(进程控制块)的结构体中,包括(进程标识符)进程组,进程环境,进程的运行状态等。
- 进程在内存中可能会出现不同的状态,通常进程的状态被划分为5中,初始态,(运行)(就绪)(等待)和终止态
- 信号递达进程后才可能被处理信号的处理方式有三种,分别为(忽略)(捕获)和(默认动作) #Linux 系统中信号可能发生的状态有:发送状态、(阻塞状态)、(未决状态)、(递达状态)和处理状态。
- kill()函数的参数pid有4中取值,每种取值代表不同含义,若pid<-1,则表示(发送信号sig给属于进程组pid的所有进程)
- Linux系统中使用的进程通信机制包括管道通信(共享内存)(信号量)(消息队列)以及socket通信
- 管道采用(半双工)方式进行通信,其实质是由(内核)管道的一个缓冲区
- 在使用P,V操作实现进程互斥时,调用 ( P ) 操作相当于申请一个共享资源,调用 ( V ) 相当于归还共享资源的使用权。
- 线程中用于退出单个线程的函数为(pthread_exit())
- 计算机网络中常用的体系结构是5层协议体系结构,包括(应用层)(传输层)(网络层)(数据链路层)和物理层
- IP协议的两个基本功能为(寻址)和(分段)
- UDP协议和TCP协议都是作用于(传输层)的协议,UDP是面向(无连接)的,不可靠的,基于(数据报)的通信协议,TCP是面向(连接)的,可靠的,基于(字节流)的传输协议
- socket()函数用于创建(套接字),该函数类似文件操作中open()函数,若调用成功,该函数也返回一个(文件描述符)
简答题
简述Linux操作系统的特点
-
低成本开发系统,可用于多种硬件平台,可定制的内核,性能优异,良好的网络支持
-
完全免费,完全兼容POSIX1.0标准,多用户、多任务,良好的界面,强大的网络功能,安全稳定,支持多平台
陈述ifconfig命令和ping命令的功能和用法
-
ifconfig:查看或配置网卡;
-
ifconfig -a:查看所有的网卡。
-
ping:检测网络是否连通;
-
ping <IP地址> <-c4>:向 IP 地址发送 4 次 ping 请求。
-
ping www.baidu.com -c4
简单说明vi编辑器的工作模式,并画图说明各模式间的切换方法
- 底行模式
- 命令模式
- 插入模式
检查GCC编译器的工作流程,并说明每步执行的内容
- GCC的编译过程分为4个步骤:预处理,编译,汇编,链接
- 1>预处理:主要处理源代码中以 # 开头的预编译指令和一些注释信息
- 2>编译:对经过预处理的文件进行语法、词法和语义分析,确定代码实际做的工作,若检查无误,则声称相应的汇编文件
- 3>汇编:将编译后生成的汇编代码转换为机器可以执行的命令,即二进制指令
- 4>链接:组装各个目标文件,解决符号依赖和库依赖关系,最终生成可执行文件
写出此脚本的执行结果
#!/bin/bash
sum=1
for((i=1;i<=10;i++))
do
sum = ` expr $sum + $i `
echo $sum
done
echo "sum~10 = $sum "
‘’’
2
4
7
11
16
22
29
37
46
56
sum1~10=56
‘’’
写出shell脚本中while循环与until循环的基本格式,并简述这两种循环结构的区别
-
while循环
-
while [表达式]
-
do
-
…
-
done
-
until循环
-
until [表达式]
-
do
-
…
-
done
-
当 while 循环的条件为真时执行循环中的命令
-
当 until 循环中的条件为假时执行循环中的命令
简述文件I/O与标准I/O的区别
- 文件 I/O 是一种无缓存 I/O;
- 标准 I/O 在用户层建立了一个流缓存区,是一种有缓存 I/O。
简单说明程序和进程的区别
- 进程是一个二进制程序的执行过程,在程序执行时产生,但不是程序
- 程序是编译好的二进制文件,存放在磁盘上,不占用系统资源,是具体的
- 进程存在于内存中,占用系统资源,是抽象的
- 一次程序执行结束后,进程随之消失,进程所用的资源被系统回收
分析程序,写出程序的执行结果
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
pid_t pid1,pid2;
if((pid1=fork())==0)
{
sleep(3);
printf("child process_1\n");
exit(0);
printf("child process_1\n");
}
else
{
if((pid2=fork())==0)
{
sleep(1);
printf("child process_2\n");
return 0;
}
else
{
wait(NULL);
wait(NULL);
printf("info1 from parent process\n");
printf("info2 from parent process\n");
return 0;
}
}
return 0;
}
- 运行结果
child process_2
child process_1
info1 from parent process
info2 from parent process
简单说明Linux系统中信号的处理方式
- (1)忽略:除 9 号信号 SIGKILL 和 19 号信号 SIGSTOP 外,大多数信号都可以被忽略。
- (2)捕获:除 9 号信号 SIGKILL 和 19 号信号 SIGSTOP 外,进程可事先为信号设置作为回调函数的信号响应函数,当指定信号产生时,内核会为该进程调用并执行对应的信号相应函数。
- (3)执行默认动作:系统为每个信号设置了默认动作,当信号递达而进程又未设置信号的响应函数时,系统会对进程执行信号的默认动作。
简述使用消息队列实现进程间通信的步骤
- 1>创建消息队列
- 2>发送消息到消息队列
- 3>从消息队列中读取数据
- 4>删除消息队列
简述线程和进程的区别和联系
- 区别:
- 1.进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统进行资源分配和调度的一个独立单位。
- 2.线程是进程的一个实体,是CPU调度和分配的基本单位。线程基本不拥有系统资源,与同一个进程的其他线程共享进程中所拥有的所有资源
- 联系:
- 1.一个进程可以包括多个线程。
- 2.在没有实现线程的操作系统中,进程是资源分配的基本单位,又是调度的基本单位,它是系统中并发执行的单元;而在实现了线程的操作系统中,进程是资源分配的基本单位,但是线程是调度的基本单位,是系统中并发执行的单元。
分别画出基于TCP协议和基于UDP协议进行网络通信时客户端和服务器端的通信流程图
编程题
编写shell基于实现如下菜单界面;
-
Menu
-
1)exit
-
2)edit file
-
3)date
-
4)calc
-
#?
#!/bin/bash echo "Menu" for _cmd in "1)exit" "2)edit file" "3)date" "4)calc" "#?" do echo "$_cmd" done exit 0
编写程序,在程序中创建一个子进程,使父子进程分别打印不同的内容
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t pid = fork();
if(pid == -1)
{
perror("fork error");
exit(1);
}
else if(pid > 0)
{
printf("parent process\n");
}
else if(pid == 0)
{
printf("child process\n");
}
return 0;
}