- 以下哪些命令可以查看当前系统的启动时间( )
A. w
B. top
C. ps
D. uptime
ABD
ABD都可以查看系统时间以及系统负载
- 从四个选项选出不同的一个( )
A. telnet
B. rsync
C. wget
D. scp
B
- 在shell中变量的赋值有四种方法,其中,采用name=12的方法称( )
A. 直接赋值
B. 使用read命令
C. 使用命令行参数
D. 使用命令的输出
A
- linux下查看磁盘挂载状态的命令式( )
A. rpm
B. mount
C. netstat
D. df
D
- 一个文件名字为rr.Z,可以用来解压缩的命令是( )
A. tar
B. gzip
C. compress
D. uncompress
D
tar是操作.tar的命令
gzip是压缩.gz压缩包的命令
compress:压缩.Z文件
uncompress:解压缩.Z文件
- 建立动态路由需要用到的文件有( )
A. /etc/hosts
B. /etc/HOSTNAME
C. /etc/resolv.conf
D. /etc/gateways
D
/etc/hosts 设定用户自已的IP与名字的对应表
/etc/HOSTNAME 设定用户的节点名
/etc/resolv.conf 设置DNS
/etc/gateways 设定路由器
- 下列关于clone和fork的区别描述正确的有( )
A. clone和fork最大不同在于fork不再复制父进程的栈空间,而是自己创建一个新的。
B. clone和fork最大不同在于clone不再复制父进程的栈空间,而是自己创建一个新的。
C. clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等
D. fork是clone的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等
C
- 终止一个前台进程可能用到的命令和操作( )
A. kill
B. ctrl+c
C. shut down
D. halt
C
- 以下哪些方式/命令不可以查看某IP是否可达( )
A. telnet
B. ping
C. tracert
D. top
D
- 若一台计算机的内存为128MB ,则交换分区的大小通常是( )
A. 64MB
B. 128MB
C. 256MB
D. 512MB
C
- crontab文件由6个域组成,每个域之间用空格分隔,下列哪个排列方式是正确的( )
A. MIN HOUR DAY MONTH YEAR COMMAND
B. MIN HOUR DAY MONTH DAYOFWEEK COMMAND
C. COMMAND HOUR DAY MONTH DAYOFWEEK
D. COMMAND YEAR MONTH DAY HOUR MIN
B
M:MIN
H:HOUR
D:DAY
m:MONTH
d:DAYOFFWEEK
cmd:COMMAND
- Linux系统中某个可执行文件属于root并且有setid,当一个普通用户mike运行这个程序时,产生的进程的有效用户和实际用户分别( )
A. root mike
B. root rooy
C. mike root
D. mike mike
E. deamon mike
F. mike deamon
A
[
当一个进程的SETUID为打开,它的有UID将变成相应可执行文件所有者的UID, 所以这个时候进程的有效用户是root,但是实际用户还是Mike.
]
- 以下哪些命令可以打印文件(demo.log)中包含ERP的行到标准输出( )
A. sed '/ERR/a' demo.log
B. sed '/ERP/p' demo.log
C. sed '/ERP/d' demo.log
D. sed -n '/ERP/p' demo.log
D
sed命令用于行的新增/删除, 行的替换/显示, 搜寻并替换, 直接修改文件。
-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行才会被列出来。
p:打印,将某个选择的数据印出来。通常 p 会与参数 sed -n 一起用
d:删除
a:新增
- 下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是( )
A. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.
B. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.
C. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念
D. DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.
D
- 在 Linux 中查看 ARP 缓存记录的命令是( )
A. "arp –a"
B. "arp –d"
C. "arp -L"
D. "arp –D"
A
arp -a 和你通信了的一些机器。IP和MAC .arp的中文意思就是通过IP而知道别人的MAC地址,也就是常说的地址解析。
ARP -d 就是清除缓存中的数据。也是删除IP和MAC绑定的项目
- arp协议用了( )
A. broadcast
B. multicast
C. unicast
D. 以上选项都不正确
A
地址解析协议,即ARP(Address Resolution Protocol),是根据 IP地址 获取 物理地址 的一个 TCP/IP协议 。 主机 发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
- 以下函数中,和其他函数不属于一类的是( )
A. strcpy
B. strncpy
C. snprintf
D. strcat
E. strtok
F. strncat
C
snprintf 在stdio.h头文件中,其他的在string.h头文件中
- 不算main这个进程自身,到底创建了多少个进程啊?
int main(int argc, char* argv[])
{
fork();
fork() && fork() || fork();
fork();
}
A. 18
B. 19
C. 20
D. 21
B
fork()是一个分叉函数, 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程 返回子进程标记;否则,出错返回-1
每一次fork()就翻倍;
fork();
fork() && fork() || fork();
fork();
第一条和第三条分别X2;关键在第二条语句。第二条有 5个分支;
A&&B||C
A为假,跳过B,判断C-----------------------2
A为真,判断B,若B为真,跳过C-----------1
若B为假,判断C ------------2
故总数为2(2+1+2)2=10;减去自己就是19
- 有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?
A. uniq -c ip.txt | sort -nr | head -n 3
B. sort ip.txt | uniq -c | sort -rn | head -n 3
C. cat ip.txt | count -n | sort -rn | head -n 3
D. cat ip.txt | sort | uniq -c | sort -rn | top -n 3
B
首先排序sort,相同的ip会排在一起,然后uniq -c 会去掉重复的ip,只有保留一条,同时记录重复数在行首,如: 3 ip1 \n 1 ip2 \n 2 ip3,再按照数字反向排序即可sort -nr,-n是按照数字,-r是降序,最好 head -n 3取出前三个即可。
int main{
fork() || fork()
}
共创建了()个进程
A. 3
B. 2
C. 1
D. 4
A
fork()给子进程返回一个零值,而给父进程返回一个非零值;
在main这个主进程中,首先执行 fork() || fork(), 左边的fork()返回一个非零值,根据||的短路原则,前面的表达式为真时,后面的表达式不执行,故包含main的这个主进程创建了一个子进程,由于子进程会复制父进程,而且子进程会根据其返回值继续执行,就是说,在子进程中, fork() ||fork()这条语句左边表达式的返回值是0, 所以||右边的表达式要执行,这时在子进程中又创建了一个进程,
即main进程->子进程->子进程,一共创建了3个进程。
- 下列提法中,不属于ifconfig命令作用范围的是 。
A. 配置本地回环地址
B. 配置网卡的IP地址
C. 激活网络适配器
D. 加载网卡到内核中
D
ifconfig
1.作用:ifconfig用于查看和更改网络接口的地址和参数,包括IP地址、网络掩码、广播地址,使用权限是超级用户。
2.格式 ifconfig -interface [options] address
3.主要参数如下:
-interface:指定的网络接口名,如eth0和eth1。
up:激活指定的网络接口卡。
down:关闭指定的网络接口。
broadcast address:设置接口的广播地址。
pointopoint:启用点对点方式。
address:设置指定接口设备的IP地址。
netmask address:设置接口的子网掩码。
- 内核不包括的子系统是 。
A. 进程管理系统
B. 内存管理系统
C. I/O管理系统
D. 硬件管理系统
D
- 在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用()命令实现
A. #shutdown -r now
B. #halt
C. #reboot
D. #init3
A
- 在Linux 系统中,在运行一个程序时,程序中未初始化的全局变量会被加载到以下哪个内存段中?
A. BSS
B. TEXT
C. DATA
D. STACK
A
- 请问下面的程序最后会产生多少个进程:
#include<stdio.h>
#include<unistd.h>
Int main( )
{
int i;
for(i = 0; i<5;i++){
int pid = fork();
if(pid == 0){
//do something
} else {
//do something
}
}
// do somthing,sleep
return 0;
}
A. 5
B. 10
C. 15
D. 32
D
多项选择
- 下面的内存管理模式中,会产生外零头的是()
A. 页式
B. 段式
C. 请求页式
D. 请求段式
BD
页式-内零头
段式-外零头
操作系统在分配内存时,有时候会产生一些空闲但是无法被正常使用的内存区域,这些就是内存碎片,或者称为内存零头,这些内存零头一共分为两类:内零头和外零头。
内零头是指进程在向操作系统请求内存分配时,系统满足了进程所需要的内存需求后,还额外还多分了一些内存给该进程,也就是说额外多出来的这部分内存归该进程所有,其他进程是无法访问的。
外零头是指内存中存在着一些空闲的内存区域,这些内存区域虽然不归任何进程所有,但是因为内存区域太小,无法满足其他进程所申请的内存大小而形成的内存零头。
页式存储管理是以页为单位(页面的大小由系统确定,且大小是固定的)向进程分配内存的,例如:假设内存总共有100K,分为10页,每页大小为10K。现在进程A提出申请56K内存,因为页式存储管理是以页为单位进程内存分配的,所以系统会向进程A提供6个页面,也就是60K的内存空间,那么在最后一页中进程只使用了6K,从而多出了4K的内存碎片,但是这4K的内存碎片系统已经分配给进程A了,其他进程是无法再访问这些内存区域的,这种内存碎片就是内零头。
段式存储管理是段(段的大小是程序逻辑确定,且大小不是固定的)为单位向进程进行内存分配的,进程申请多少内存,系统就给进程分配多少内存,这样就不会产生内零头,但是段式分配会产生外零头。
例如:假设内存总的大小为100K,现在进程A向系统申请60K的内存,系统在满足了进程A的内存申请要求后,还剩下40K的空闲内存区域;这时如果进程B向系统申请50K的内存区域,而系统只剩下了40K的内存区域,虽然这40K的内存区域不归任何进程所有,但是因为大小无法满足进程B的要求,所以也无法分配给进程B,这样就产生了外零头。请求段式存储管理是在段式存储管理的基础上增加了请求调段功能和段置换功能。
所以段式和请求段式存储管理会产生外零头,选BD。
- UNIX系统由哪几部分组成?
A. Kernel(内核)
B. Shell(外壳)
C. 工具及应用程序
D. 虚拟机
ABC
- 在linux编程中,以下哪个TCP的套接字选项与nagle算法的开启和关闭有关?
A. TCP_MAXSEG
B. TCP_NODELAY
C. TCP_SYNCNT
D. TCP_KEEPALIVE
B
Nagle算法的规则:
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
Nagle算法只允许一个未被ACK的包存在于网络,它并不管包的大小,因此它事实上就是一个扩展的停-等协议,只不过它是基于包停-等的,而不是基于字节停-等的。Nagle算法完全由TCP协议的ACK机制决定,这会带来一些问题,比如如果对端ACK回复很快的话,Nagle事实上不会拼接太多的数据包,虽然避免了网络拥塞,网络总体的利用率依然很低。
Nagle算法是silly window syndrome(SWS)预防算法的一个半集。SWS算法预防发送少量的数据,Nagle算法是其在发送方的实现,而接收方要做的是不要通告缓冲空间的很小增长,不通知小窗口,除非缓冲区空间有显著的增长。这里显著的增长定义为完全大小的段(MSS)或增长到大于最大窗口的一半。
注意:BSD的实现是允许在空闲链接上发送大的写操作剩下的最后的小段,也就是说,当超过1个MSS数据发送时,内核先依次发送完n个MSS的数据包,然后再发送尾部的小数据包,其间不再延时等待。(假设网络不阻塞且接收窗口足够大)
举个例子,比如之前的blog中的实验,一开始client端调用socket的write操作将一个int型数据(称为A块)写入到网络中,由于此时连接是空闲的(也就是说还没有未被确认的小段),因此这个int型数据会被马上发送到server端,接着,client端又调用write操作写入‘\r\n’(简称B块),这个时候,A块的ACK没有返回,所以可以认为已经存在了一个未被确认的小段,所以B块没有立即被发送,一直等待A块的ACK收到(大概40ms之后),B块才被发送。整个过程如图所示:
这里还隐藏了一个问题,就是A块数据的ACK为什么40ms之后才收到?这是因为TCP/IP中不仅仅有nagle算法,还有一个TCP确认延迟机制 。当Server端收到数据之后,它并不会马上向client端发送ACK,而是会将ACK的发送延迟一段时间(假设为t),它希望在t时间内server端会向client端发送应答数据,这样ACK就能够和应答数据一起发送,就像是应答数据捎带着ACK过去。在我之前的时间中,t大概就是40ms。这就解释了为什么'\r\n'(B块)总是在A块之后40ms才发出。
当然,TCP确认延迟40ms并不是一直不变的,TCP连接的延迟确认时间一般初始化为最小值40ms,随后根据连接的重传超时时间(RTO)、上次收到数据包与本次接收数据包的时间间隔等参数进行不断调整。另外可以通过设置TCP_QUICKACK选项来取消确认延迟。
- 在UNIX操作系统中,若用户键入的命令参数的个数为1时,执行cat$1命令:若用户键入的命令个数为2时,执行cat>>$2<$1命令,请将下面所示的shell程序的空缺部分补齐
case () in
1)cat $1
2)cat>>$2<$1
*)echo 'defult...'
case
A. $#
B. $@
C. $$
D. $*
A
$# 是传给脚本的参数个数
$0是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误