【牛客 错题集】Linux系统方面错题合集

前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来。很多涉及嵌入式开发的选择题同样的摘录的作为了解使用


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下列那些命令可以看到文件的大小? ls 显示目录内容 df 查看文件系统占用的磁盘空间使用情况 du 查看指定文件和目录所占用的空间大小 Unix系统和宗,下列那些可以用于进程间的通讯: socket、共享内存、消息队列、信号量
unix进程间的通信方式 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。 (3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。 (4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺 (5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 (6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。 (7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。 (8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。 以下函数中,和其他函数不属于一类的是(pwrite) fwrite putc pwrite putchar getline scanf fwrite:将数据写入文件流; putc:将一个字符写入文件流; putchar:向终端输出一个字符; getline:从输入流中读入一个字符串; scanf:格式输入函数; 以上为为库函数 pwrite是系统调用,写入起始地址的偏移量,写入地址=文件开始+offset 常见文件系统 系统函数 1 fcntl 文件控制 2 open 打开文件 3 creat 创建新文件 4 close 关闭文件描述字 5 read 读文件 6 write 写文件 7 readv 从文件读入数据到缓冲数组中 8 writev 将缓冲数组里的数据写入文件 9 pread 对文件随机读 10 pwrite 对文件随机写 在Linux系统中,在运行一个程序时,程序中未初始化的全局变量会被加载到以下的哪个内存段中?(BSS) BSS TEXT DATA STACK BBS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0.所以,未初始化的全局变量在程序执行之前已经变成0了。 数据段:data segment通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。 代码段:code segment/text segment通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序允许前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。 :head堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减) :stack堆又被称为堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用是,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上来讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区 下面关于i节点描述错误的是?(A) i节点和文件名是一一对应的 i节点能描述文件占用的块数 i节点描述了文件大小和指向数据块的指针 通过i节点实现文件的逻辑结构和物理结构的转换 inode是index node 简写,中文翻译为索引节点,在linux系统中,文件的管理采用inode实现,具体内容包括: 文件的字节数 文件拥有着的user id 文件的group id 文件的读、写、执行权限 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。 文件数据block的位置 反而,文件名并不是文件管理必须使用的,只是为了方便用户,对inode起的一个别名(可以这么理解,因为inode编号是数字,记忆困难),正常情况下一个inode对应一个文件,一个文件名对应一个inode,此时对应关系是一对一的,但是通过硬链接建立一个连接(又起了一个名字)之后,就会出现多个文件名对应同一个inode的情况。
后面有详细关于软硬链接说明) 1:软链接就相当于快捷方式,删除源文件,快捷方式就没有意义了。 2:硬链接相当于备份了文件,但是还可以和源文件内容同步,删除源文件,硬链接文件任然有效。 3:软链接可以跨文件系统,但是硬链接不能 4:软链接的源文件的inode不相同,但是硬链接文件和源文件inode相同 5:软链接可以链接目录,硬链接不行
在Redhat公司发布的Linux版本中,若要使得用户登陆验证,需要修改以下脚本。(/etc/shadow) /etc/inittab /etc/passwd //用户基本信息 /etc/shadow //用户密码 /etc/group 以下那些命令可以打印文件(demo.log)中包含ERP的行到标准输出(D) sed ‘/ERP/a\’ demo.log sed '/ERP/P' demo.log sed '/ERP/d' demo.log sed -n '/ERP/p' demo.log sed命令用于行的新增/删除,行的替换/显示,搜寻并替换,直接修改文件。 -n:使用安静slient模式。经过sed名令特殊处理的那一行才会被列出来 -p:打印,将某个选择的数据印出来。通常p会与参数sed -n一起用 -d:删除 -a:新增 关于unix系统代码段和数据段分开的目的: 可共享正文 可共享数据 可重入 可保护代码为只读 更好的内存回收策略 1)防止程序指令被修改,设置代码段权限为只读,设置数据段权限为可读写 2)代码段和数据段分开有利于提高程序的局部性,现代CPU缓存一般设计为数据缓存和指令缓存分离,指令和数据分开存放可以提高CPU缓存命中率。 3)共享指令,当系统运行多个程序的副本时,它们指令时一样的,因此内存只需保存一份程序的指令代码。每个副本进程的数据区是进程私有,可以节省内存。 linxu用户磁盘配额配置文件aquota.user的默认访问权限是(600) 644 755 600 700 设定linux系统默认为字符模式,需要修改的配置文件是(B) /etc/fstab /etc/inittab /etc/boot /etc/inttab.conf Linux下有7个运行级别: 0 系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。 1 单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。 2 多用户模式,没有NFS网络支持。 3 完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式。 4 系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。 5 图形化模式,登陆后进入图形GUI模式,X Window系统。 6 重启模式,默认运行级别不能设为6,否则不能正常启动。运行init 6机器就会重启。 新建一个管理员用户admin,需要使用的参数(A) useradd -u 0 -o admin //-o选项,则可以重复使用其他用户的标识号; useradd -g -o admin //表示创建用户组 useradd -p -d admin //-p表示创建密码 useradd -e -f admin // -e指定账号的有效期限 缺省表示永久有效 -f指定在密码过期后多少天即关闭该账号 如何删除一个非空子目录/tmp (B) del /tmp/* rm -rf /tmp rm -Ra /tmp/* rm -rf /tmp/* //没读清题目删除一个目录 在一台linux服务器上通过rpm方式安装了dhcp软件包,下列关于dhcp服务器配置文件“dhcpd.conf”说法正确的是(CD)多选 软件包安装好后,dhcpd.conf文件就位于“/etc/”目录下 dhcpd.conf文件默认情况下内容为空 dhcpd.conf文件缺省不存在,需要手工建立 dhcpd.conf文件的配置可以参考模板文件"dhcpd.conf.sample"进行 linux中包括两种链接:硬链接(Hard link)和软链接(soft link),下列说法正确的是() 软链接可以跨文件系统进行连接,硬连接不可以 当删除原文件的时候硬链接文件仍然存在,且内容不变 硬链接被删除,磁盘上的数据文件会同时被删除 硬链接会重新建立一个inode,软链接不会 硬链接与软链接的区别 硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反都是软连接会重新建立一个inode,当然inode的结构跟其他的不一样,他只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。 硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。 软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vi这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接。使用 -s 开关可以创建软链接。 硬连接不管有多少个,都指向的是同一个 I 节点,会把结点连接数增加,只要结点的连接数不是 0 ,文件就一直存在不管你删除的是源文件还是连接的文件。只要有一个存在文件就存在。 当你修改源文件或者连接文件任何一个的时候,其他的文件都会做同步的修改。软链接不直接使用 i 节点号作为文件指针 , 而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件。软链接有自己的 i 节点 , 并在磁盘上有一小片空间存放路径名。 软连接可以对目录进行连接。 下面堆linux下mysqldump备份命令及参数描述正确的是(A) mysqldump -h ip -uroot -p DBNAME >bck.sql mysqldump -Pip -hDBNAME>bck.sql mysqldump -uip -P DBNAME>bck.sql mysqldump -h ip -uDBNAME>bck.sql -h:表示主机名或ip地址,所以bc错误 -P:表示数据库连接的TCP/IP端口号 -u:表示用户名而不是数据库名,所以D错误 -p:表示数据库访问密码 下面关于andriod dvm的进程和linux的进程,应用程序的进程说法正确的是(D) DVM指dalivk的虚拟机,每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念 DVM指dalivk的虚拟机,每一个andriod应用系统程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例,而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念 DVM指dalivk的虚拟机,每一个andriod应用系统程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例,而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念 DVM指dalivk的虚拟机,每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念 Android系统用的就是Linux的内核,DVM可以理解成在Linux上跑的程序,每个应用程序运行时,都会启动一个DVM实例,也就是一个Linux的进程,因此DVM进程和Linux进程实际上是一回事。 统计日志中ip登陆次数,下面可以正确统计的为 (C D) cat catalina.log | awk -F ' ' '{print $3}' | sort | uniq -c | head -10 cat catalina.log | awk '{print $3}' | uniq -c | wc -l cat catalina.log | awk -F ' ' '{print $3}' | sort | uniq -c | wc -l cat catalina.log | awk '{print $3}' | sort -k1nr | uniq -c | wc –l 答案 C D 知识点: 1、awk -F ' ' '{print $3}' 指定空格是分隔符进行分割,取第三个。(不指定默认分隔符也是空格) 2、uniq -c(uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。参数 - c :进行计数) 3、wc -l 行计数。 A : head -10 统计不完整。不符合题目意思 B : 没排序。重复行不相邻。故uniq -c 无法起到正确的作用。故统计结果错误。 答案C、D仔细一看,没毛病。。 建立动态路由需要用到的文件有(B) /etc/hosts //设定用户自已的IP与名字的对应表 /etc/gateways //设定路由器 7系统好像没有 /etc/resolv.conf //设置DNS 终止一个前台进程可能用到的命令和操作 kill //后台进程 ctrl+c //前台进程 shut down halt 下列不是Linux系统进程类型的是 交互进程 //由shell启动的进程,既可在前台运行,也可在后台运行; 批处理进程 //与终端没有联系,是一个进程序列; 守护进程 //linux系统启动时启动的进程,并在后台运行 就绪进程 //就绪指的是进程三状态之一 按照进程的功能和运行的程序分类,进程可划分为两大类: (1) 系统进程:可以执行内存资源分配和进程切换等管理工作;而且,该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。 (2) 用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。 针对用户进程,又可以分为交互进程、批处理进程和守护进程三类。 (1) 交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。 (2) 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。 (3) 守护进程:守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如httpd进程,一直处于运行状态,等待用户的访问。还有经常用的crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务。 一个文件名字为rr.Z,可以用来解压缩的命令是: tar gzip compress uncompress compress 是一个相当古老的 unix 档案 压缩 指令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 u nc ompress解压 。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 g zip 可以产生更理想的压缩比例,一般人多已改用gzip 为档案压缩工具。 linux 常用压缩格式 .zip .gz .bz2 .tar.gz .tar.bz2 zip 压缩文件名 源文件 ——压缩文件 zip -r 压缩文件名 源文件 ——压缩目录 mkdir 名字——创建目录 touch 名字 ——创建文件 unzip 压缩文件 ——解压 .zip文件 gzip 源文件 ——压缩为.gz格式的压缩文件,源文件会消失 gzip -c 源文件 > 压缩文件 ——压缩为.gz格式的压缩文件,源文件会消失 gzip -r 目录 ——压缩目录下的所有子文件,但不能压缩目录 gzip -d 压缩文件 ——解压 .gz文件 gunzip 压缩文件名 ——解压 .gz文件 bzip2 源文件 ——压缩为 .bz2格式,不保留源文件 bzip2 -k 源文件 ——压缩后保留源文件 注意bzip2 不能压缩目录 bzip2 -d 压缩文件 ——解压缩,-k保留压缩文件 bunzip2 压缩文件 ——解压缩 tar -cvf 打包文件名 源文件 tar -zcvf 压缩报名.tar.gz 源文件 ——压缩为.tar.gz格式 tar -zxvf 压缩报名.tar.gz ——解压缩.tar.gz包 tar -jcvf 压缩报名.tar.bz2 源文件 ——压缩为.tar.bz2格式 tar -jxvf 压缩报名.tar.bz2 ——解压缩.tar.bz2包 Samba 服务器的配置文件是D httpd.conf inetd.conf rc.samba smb.conf WEB服务器配置文件 http.conf 启动脚本配置文件 initd.conf samba脚本 rc.samba samba服务配置文件 smb.conf Linux 有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用命令。 cat more less menu cat,less,more都可以查看,只是查看的方式不一样,less可以让光标上下移动,more只能用enter键往下翻,cat的话直接跳到最后一页了 FTP服务器有两个端口,其中21端口用于连接,20端口用于传输数据 进行FTP文件传输中,客户端首先连接到FTP服务器的21端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为20来进行传输数据文件。 也就是说,端口20才是真正传输所用到的端口,端口21只用于FTP的登陆认证。我们平常下载文件时,会遇到下载到99%时,文件不完成,不能成功的下载。其实是因为文件下载完毕后,还要在21端口再行进行用户认证,而下载文件的时间如果过长,客户机与服务器的21端口的连接会被服务器认为是超时连接而中断掉,就是这个原因。解决方法就是设置21端口的响应时间。 tar -zcvf 目标文件 源文件 z表示使用gzip压缩 j表示使用bzip2压缩 c表示压缩 x表示解压缩 进程间通讯方式有那些?
管道
消息队列
共享内存
文件和记录锁定

//漏掉了文件和记录锁定,

UNIX中有如下的通信方式:

1) 文件和记录锁定。

为避免两个进程间同时要求访问同一共享资源而引起访问和操作的混乱,在进程对

共享资源进行访问前必须对其进行锁定,该进程访问完后再释放。这是UNIX为共享

资源提供的互斥性保障。

  2 )管道。

管道一般用于两个不同进程之间的通信。当一个进程创建一个管道,并调用fork创

建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样 提供了

两个进程之间数据流动的一种方式。

  3 ) FIFO 。

FIFO是一种先进先出的队列。它类似于一个管道,只允许数据的单向流动。每个

FIFO都有一个名字,允许不相关的进程访问同一个FIFO。因此也成为命名管。

 4)消息队列。

UNIX下不同进程之间可实现共享资源的一种机制;UNIX允许不同进程将格式化的数

据流以消息形式发送给任意

进程。对消息队列具有操作权限的进程都可以使用msget完成对消息队列的操作控制

。通过使用消息类型,进程可以按任何顺序读消息,或为消息安排优先级顺序。

  5 )信号灯。

作为进程间通讯的一种方法,它不是用于交换大批数据,而用于多进程之间的同步

(协调对共享存储段的存取)。

  6 )共享内存。

通过信号灯实现存储共享(类似“红灯停、绿灯行”)

文件操作的唯一依据是?(B)

文件名
文件句柄
物理地址

文件句柄是唯一标识,相当于ID
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数据传送给操作系统。当完成任务后,在通过调用系统函数来关闭该文件。


在CPU和物理内存之间进行地址转换时,(B)将地址从虚拟(逻辑)地址空间映射到物理地址空间
TCB
MMU
CACHE
DMA

TCB 线程控制块;PCB,进程控制块
MMU(Memory Management Unit)内存管理单元,是中央处理器用来管理虚拟内存和物理内存寄存器的控制线路,同时也负责虚拟内存映射为物理内存等
CACHE 这道题环境应该是指高速缓冲存储器
DMA (direct memory access)直接内存存储,传输数据从一个地址空间到另一个地址空间

下面那些命令可以查看file文件的第300-500行的内容?

cat file1 | tail -n +300 | head -n 200
cat file1| head -n 500 | tail -n +300
sed -n '300,500p' file1

下面哪些是死锁发生的必要条件? ABCD
互斥条件
请求和保持
不可剥夺
循环等待

互斥条件,请求和保持,不可剥夺,这三个条件可能发生死锁,但不一定会发生死锁,这三个条件再加上循环等待才一定会发生死锁

系统当前已经加载的所有文件系统在______文件中得到反映

/usr/sbin/cfdisk
/sbin/fdisk
/etc/mtab
/etc/fstab

/etc/mtab:记载的是现在系统已经挂载的文家系统,包括操作系统建立的虚拟文件等;而/etc/fstab/是系统准备挂载的
/etc/fstab:记录了计算机上硬盘分区的相关消息,启动Linux的时候,检查分区的fsck命令,和挂载分区的mount命令,都需要fstab中的信息。来正确的检查和挂载硬盘

dstab不一定都是已经挂载上了

vivek希望将他的login ID 从vivek改为viv,应该执行下列那个命令?

usermod -l viv vivek
usermod -l vivek viv
usermod -m viv vivek
usermod -m vivek viv

 usermod(选项)(参数):参数若为两个,顺序一般为  usermod (选项)  目标参数  原始参数
-c<备注>:修改用户帐号的备注文字;
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;    使用格式:usermod -l  new_name  old_name
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-U:解除密码锁定。

在linux中用使用tar命令将文件aaa打包为bak.tar。  A

tar -cf bak.tar  aaa
tar -xf bak.tar  aaa
tar -czf bak.tar  aaa
tar -rf bak.tar  aaa

//打包就行了,所以不需要+z压缩
 tar 主要命令:

-c 创建包
-x 解包
-t 列出包中的内容
-r 增加文件到指定包中
-u 更新包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

可选命令:
-j 创建或解开包时 使用bzip2 进行压缩或解压
-z 创建或解开包时 使用gzip 进行压缩或解压
-Z 创建或解开包时 使用compress 进行压缩或解压
-f 后面跟指定的包文件名
-v 显示打包/解包过程
-C 指定解包后的路径


 Linux下多少个"-"将被打印: (B)
    
int main(void){
  int i;
  for(i=0;i<4;i++){
  fork();
  printf("-\n");
 }
 return 0;
}

 



16
30
32
15


i=0时,主进程和其创建的子进程分别打印'-',  打印2个
i=1时,之前两个进程打印'-', 每个进程又创建新的子进程, 共打印4个'-'
i=2时,之前的四个进程分别打印'-', 并创建新的子进程, 故共打印8个'-'
i=3时,之前的8个进程分别打印'-', 并创建新的子进程,故共打印16个'-'
综上所述, 共打印2+4+8+16=30个


fork的题可以按以下公式来算。

主进程1分为2,每个子进程1分为2,构成一个二叉树,树高等于循环的次数n。
最后一层是最后得到的子进程数,它是偶数,等于2^n,前面有一题,循环5次有32个进程。

本题是求fork了多少次,即二叉数的节点数,它等于2^(n+1)-1,注意第一次fork后就会打印2个模杠,实际上没有第0次。
所以是2^(n+1) - 1 -1当n=4时,得30.


关于linux的I/O复用接口select和epoll,下列说法错误的是(C)

select调用时会进行线性遍历,epoll采用回调函数机制,不需要线性遍历
select的最大连接数为FD_SETSIZE
select较适合于有大量并发连接,且活跃链接较多的场景
epoll较适用于有大量并发连接,但活跃连接不多的场景
epoll的效率不随FD数目增加而线性下降
epoll通过共享存储实现内核和用户的数据交互

select 和 epoll效率差异的原因:select采用轮询方式处理连接,epoll是触发式处理连接。
Select:
1.Socket数量限制:该限制可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
2.操作限制:通过遍历FD_SETSIZE(1024)个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍。

Epoll
1.Socket数量无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限制(默认4k)。
2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询。
但当所有的Socket都活跃的时候,所有的callback都被唤醒,会导致资源的竞争。既然都是要处理所有的Socket,
那么遍历是最简单最有效的实现方式

 select

    select能监控的描述符个数由内核中的FD_SETSIZE限制,仅为1024,这也是select最大的缺点,因为现在的服务器并发量远远不止1024。即使能重新编译内核改变FD_SETSIZE的值,但这并不能提高select的性能。
    每次调用select都会线性扫描所有描述符的状态,在select结束后,用户也要线性扫描fd_set数组才知道哪些描述符准备就绪,等于说每次调用复杂度都是O(n)的,在并发量大的情况下,每次扫描都是相当耗时的,很有可能有未处理的连接等待超时。
    每次调用select都要在用户空间和内核空间里进行内存复制fd描述符等信息。

poll

    poll使用pollfd结构来存储fd,突破了select中描述符数目的限制。
    与select的后两点类似,poll仍然需要将pollfd数组拷贝到内核空间,之后依次扫描fd的状态,整体复杂度依然是O(n)的,在并发量大的情况下服务器性能会快速下降。

epoll

    epoll维护的描述符数目不受到限制,而且性能不会随着描述符数目的增加而下降。
    服务器的特点是经常维护着大量连接,但其中某一时刻读写的操作符数量却不多。epoll先通过epoll_ctl注册一个描述符到内核中,并一直维护着而不像poll每次操作都将所有要监控的描述符传递给内核;在描述符读写就绪时,通过回掉函数将自己加入就绪队列中,之后epoll_wait返回该就绪队列。也就是说,epoll基本不做无用的操作,时间复杂度仅与活跃的客户端数有关,而不会随着描述符数目的增加而下降。
    epoll在传递内核与用户空间的消息时使用了内存共享,而不是内存拷贝,这也使得epoll的效率比poll和select更高。

在退出unix系统账户之后还需要继续运行某个进程,那么可用(D)
awk
sed
crontab
nohup

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思

下面哪个命令不是用来查看网络故障?
telnet
ping
init
netstat

A选项:telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
B选项:Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机(send ICMP ECHO_REQUEST to network hosts),并显示响应情况,这样我们就可以根据它输出的信息来确定目标主机是否可访问(但这不是绝对的)。有些服务器为了防止通过ping探测到,通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于开启状态。
C选项: init init 命令进程和作业管理 init 命令是 Linux 下的进程初始化工具, init 进程是所有 Linux 进程的父进程,它的进程号为 1 。 init 命令是 Linux 操作系统中不可缺少的程序之一, init 进程是 Linux 内核引导运行的,是系统中的第一个进程。
D选项: n etstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 n etstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用 n etstat查一查为什么会出现这些情况了。


 如果参数列表个数为1则执行$<1 , 如果参数列表个数为2则执行$<2<$ ,其他情况则……,补充下面的命令
    
Case (  ) in (B)
1>
   $<1
2>
   $<2<$1
Default > 
   echo ……

 



$$
$#
$@
$*


$# 是传给脚本的参数个数
$0是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

 请问下面的程序最后会产生多少个进程:
    
#include
#include
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;
}

 


5   10   15   32

25=32。
每一个fork()出来的新进程,和父进程使用相同的代码段,复制父进程的数据段和堆栈段,不过有“逻辑”复制和“物理”复制之分,在本题没有影响。也就是说每一个fork()出的新进程和父进程有相同大小的i,并且执行位置也是一样的。


i = 0时,生成两个进程
i = 1时,两个进程各生成两个进程
i = 2时,4个进程各生成两个进程
i = 3时,8个进程各生成两个进程
i = 4时,16个进程各生成两个进程,总共32个

若基于Linux操作系统所开发的ARM应用程序源文件名为test.c,那么要生成该程序代码的调试信息,编译时使用的GCC命令正确的是?  (D)

arm-linux-gcc -c -o test.o test.c
arm-linux-gcc -S -o test.o test.c
arm-linux-gcc -o test test.c
arm-linux-gcc -g -o test test.c

 D
-o参数用于指定输出的文本,如果不指定输出文件则默认输出.out文件
-c参数将对源程序test.c进行预处理、编译、汇编操作,生成test.0文件
-S参数将对源程序test.c进行预处理、编译,生成test.s文件
-g选项,加入GDB能够使用的调试信息,使用GDB调试时比较方便
所以选D

 arm-linux-gcc  -g -o example example.c
-g选项,加入GDB能够 使用 的调试信息, 使用 GDB调试时比较方便

arm-linux-gcc  -o example example.c
   不加-c、-S、-E参数,编译器将执行预处理、编译、汇编、连接操作直接生成可执行代码。
    -o参数用于指定输出的文件,输出文件名为example,如果不指定输出文件,则默认输出a.out
  arm-linux-gcc  -c -o example.o example.c
   -c参数将对源程序example.c进行预处理、编译、汇编操作,生成example.0文件
   去掉指定输出选项"-o example.o"自动输出为example.o,所以说在这里-o加不加都可以
arm-linux-gcc  -S -o example.s example.c
   -S参数将对源程序example.c进行预处理、编译,生成example.s文件
   -o选项同上

使用pthread库的多线程程序编译时需要加什么连接参数?

-pthread
-fthis-is-varialble
fcond-mismatch
-MMD


A,因为:-fthis-is-varialble 就是向传统c++看齐,可以使用this当一般变量使用.
-fcond-mismatch允许 条件表达式 的第二和第三参数 类型不匹配 ,表达式的值将为void类型
-MMD和-MM相同,但是输出将导入到.d的文件里面

int main()
{
    char *p = "hello,world";
    return 0;
}

 


p和"hello,world"存储在内存哪个区域?

栈,堆
栈,栈
堆,只读存储区
栈,只读存储区


(1)从静态存储区域分配:
内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。
(2)在栈上分配:
在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配:
即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码区。

关于Linux系统的负载(Load),以下表述正确的是______。 (B、C)
通过就绪和运行的进程数来反映
可以通过TOP命令查看
可以通过uptime查看
Load:2.5,1.3,1.1表示系统的负载压力在逐渐减少

 D三个数分别代表不同时间段的系统平均负载(一分钟、五分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越大,这也可能是服务器出现某种问题的信号。但是一分钟和五分钟的平均负载大于十五分钟的,不是负载在变小吧。

Linux中,一个端口能够接受tcp链接数量的理论上限是? (D)
1024
65535
65535 * 65535
无上限

一个端口可以建立的连接数量没有理论上限,上限就是你系统的性能

 不算 main 这个进程自身,到底创建了多少个进程啊? (B)
int main(int argc, char* argv[])
{
   fork();
   fork() && fork() || fork();
   fork();
}

 


18   19   20   21

 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.


此题考查两个知识点:
1.fork()是一个分叉函数,返回值: 若成功调用一次则返回两个值,子进程返回0, 父进程 返回子进程标记;否则,出错返回-1。
2.  A&& B|| C的考查,  A&&B,如果A=0,就没有必要继续执行&&B了;A非0,就需要继续执行&&B。  
    A||B,如果A非0,就没有必要继续执行||B了,A=0,就需要继续执行||B。  
所以,第一次fork()之后,进程数为2,
第二条,
A&& B|| C
A执行后,返回两个分别为0,和非0,按照上面2的规则,执行情况一共是5条路径,所以结束后共有进程数2*5,最后一条执行完毕,再次加倍,2*5*2=20,减去main()主进程,共有19个

关于 linux 的进程,下面说法不正确的是:  (A)

僵尸进程会被 init 进程接管,不会造成资源浪费;
孤儿进程的父进程在它之前退出,会被 init 进程接管,不会造成资源浪费;
进程是资源管理的最小单位,而线程是程序执行的最小单位。Linux 下的线程本质上用进程实现;
子进程如果对资源只是进行读操作,那么完全和父进程共享物理地址空间。

 linux提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。 但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放。

        孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
        僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

         僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程,所以,解决方法就是kill那个父进程,于是僵尸进程就可以被init进程接收,释放。


linux下查看磁盘挂载状态的命令式?  (B)

rpm   mount   netstat   df

//选了D df为磁盘空间查看命令   


Linux执行ls,会引起哪些系统调用(B、C、D)
 
nmap
read
execve
fork

任何shell都会执行 exec 和 fork
而    ls会执行read
三个加起来


 下列哪个git命令不是合并代码用的:
git pull --rebase
git merge
git cherry-pick
git blame
执行git blame;命令时,会逐行显示文件,并在每一行的行首显示commit号,提交者,最早的提交日期等

你被需要检查系统中的设备情况,需要检查哪个log日志?
/var/log/tmp
/var/log/lastlog
/var/log/messages
/var/log/utmp


    /var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
    /var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
    /var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
    /var/log/boot.log — 包含系统启动时的日志。
    /var/log/daemon.log — 包含各种系统后台守护进程日志信息。
    /var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
    /var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
    /var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
    /var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
    /var/log/user.log — 记录所有等级用户信息的日志。
    /var/log/Xorg.x.log — 来自X的日志信息。
    /var/log/alternatives.log – 更新替代信息都记录在这个文件中。
    /var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
    /var/log/cups — 涉及所有打印信息的日志。
    /var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
    /var/log/yum.log — 包含使用yum安装的软件包信息。
    /var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
    /var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
    /var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
    /var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。

除了上述Log文件以外, /var/log还基于系统的具体应用包含以下一些子目录:

    /var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
    /var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
    /var/log/mail/ –  这个子目录包含邮件服务器的额外日志。
    /var/log/prelink/ — 包含.so文件被prelink修改的信息。
    /var/log/audit/ — 包含被 Linux audit daemon储存的信息。
    /var/log/samba/ – 包含由samba存储的信息。
    /var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
    /var/log/sssd/ – 用于守护进程安全服务。


局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是?
route add –net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1
route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1
route add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0 metric 1
route add default 192.168.1.0 netmask 172.168.1.1 metric 1

-net 后面跟的是目标网络,gw就是gateway(网关入口)就是你从哪个网关去到那个目标网络。

设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项错误的是: (B、C、D)
可以随意读和写
只能写不能读
可以在原有内容后追加写
写操作结束后可以从头开始读
fopen(“file”,”w”)打开文件,并赋值为“w”权限,即写权限,则B正确,A错误,因为这里不具有读权限;对于C的解释:用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。所以C错误;对于D的解释:D所描述的权限应该是“w+”而非“w”,所以D错误;

有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?(B)

uniq -c ip.txt│sort -nr│head -n 3
sort ip.txt│uniq -c│sort -rn│head -n 3
cat ip.txt │count -n│sort -rn│head -n 3
cat ip.txt │sort │uniq -c│sort -rn│top -n 3

sort | uniq -c| 搭配使用,并且需要优先sort 再uniq -c 才能再输出行前面加上每行在文件中出现的次数;
count命令不存在,
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。

 sort 是按ASCII码排序
-n   依照数值的大小排序。
-r   以相反的顺序来排序。
uniq -c 是去重并显示个数
head -n 3 为取前3行

你在一台Windows 2000 Server 上部署了几个web 站点,这些Web 站点都已启用了日志。你用一个第三方的报表工具来分析web站点产生的日志文件,你发现所有从上午7:00到午夜的数据都被包含在第二天的日志文件中。你希望这些数据包含在当天的日志文件中,你该怎么做?
确保日志类型被设置为W3C
在web站点的日志属性中修改日志翻转属性
在web服务器的时间属性中修改时间区域设置
在web服务器上配置时间服务器使用LocalSystem账户

下面哪些属于,Fork后子进程保留了父进程的什么?AC
环境变量
父进程的文件锁,pending alarms和pending signals
当前工作目录
进程号
 使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

子进程与父进程的区别在于:

1、父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了)

2、各自的进程ID和父进程ID不同

3、子进程的未决告警被清除;

4、子进程的未决信号集设置为空集。

子进程继承父进程

    用户号UIDs和用户组号GIDs
    环境Environment
    堆栈
    共享内存
    打开文件的描述符
    执行时关闭(Close-on-exec)标志
    信号(Signal)控制设定
    进程组号
    当前工作目录
    根目录
    文件方式创建屏蔽字
    资源限制
    控制终端

子进程独有

    进程号PID
    不同的父进程号
    自己的文件描述符和目录流的拷贝
    子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
    不继承异步输入和输出

父进程和子进程拥有独立的地址空间和PID参数。
子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”

下面有关Ext2和ext3文件系统的描述,错误的是?AD

ext2/ext3文件系统使用索引节点来记录文件信息,包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息
ext3增加了日志功能,即使在非正常关机后,系统也不需要检查文件系统
ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏
ext3支持 1EB 的文件系统,以及 16TB 的文件。

EXT2、EXT3:linux环境上的文件系统。ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。

EXT2、EXT3的区别如下:
(1)ext2和ext3的格式完全相同,只是在ext3硬盘最后面有一部分空间用来存放Journal(日志)的记录;
(2)在ext2中,写资料到硬盘中时,先将资料写入缓存中,当缓存写满时才会写入硬盘中;
(3)在ext3中,写资料到硬盘中时,先将资料写入缓存中,鼗缓存写满时系统先通知Journal,再将资料写入硬盘,完成后再通知Journal,资料已完成写入工作;
(4)是否有Journal的差别:
在ext2中,系统开机时会去检查有效位(Valid bit),如果值为1,表示系统上次有正常关机;如果为0,表示上次关机未正常关机,那系统就会从头检查硬盘中的资料,这样时间会很长;
在ext3中,也就是有Journal机制里,系统开机时检查Journal的资料,来查看是否有错误产生,这样就快了很多;
(5)tune2fs –j 将ext2转换成ext3

Ext3 目前所支持的最大16TB 文件系统和最大2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。

vsftpd服务流量控制的参数( )BC
system_max_rate
local_max_rate
anon_max_rate
guest_max_rate


访问速率设置:
anon_max_rate=0
设置匿名登入者使用的最大传输速度,单位为B/s,0 表示不限制速度。默认值为0。
local_max_rate=0
本地用户使用的最大传输速度,单位为B/s,0 表示不限制速度。预设值为0。

下列哪个命令可以看到文件的大小? C
ls   df   du   find
du : disk usage df: disk. free

man 5 passwd D

显示关于passwd的前五处说明文档显示关于passwd的前五处说明文档
显示passwd命令的使用方法
显示passwd命令的说明的前五行
显示passwd文件的结构

当前目录下有a和b两个文件,执行命令“ls>c”,请问文件c里面的内容是什么?

a   b   ab   abc

使用ls命令产生的输出为当前路径下的所有文件名。>c即代表将结果输出至c中,若没有c则先产生c文件,即内容里含有abc

下列关于管道(Pipe)通信的叙述中,正确的是()     C
一个管道可以实现双向数据传输
管道的容量仅受磁盘容量大小限制
进程对管道进行读操作和写操作都可能被阻塞
一个管道只能有一个读进程或一个写进程对其操作

 管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文
件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向 的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。管道的容 量大小通常为内存上的一页,它的大小并不是受磁盘容量大小的限制。当管道满时,进程在 写管道会被阻塞,而当管道空时,进程读管道会被阻塞,因此选 C。

管道是半双工的,读写不能同时双向进行数据操作。管道的容量还受其它因素的影响,管道缓冲区的大小也会影响程序的执行结果。管道必须打开一个读端和一个写端。若写端关闭,读端只能返回0。如读端关闭,写端返回错误值-1

命令:[-z””]&&echo 0 ||echo 1的输出是什么 0
1   0   

[ -z "" ] 命令判断双引号中变量的字符串长度是否为0,
[ -z "" ] && echo 0 || echo 1
    ^                ^             ^
命令1         命令2     命令3

本题即:  先判断 “” 变量中是否无值,成功
                 然后根据 && 符特性,当命令1执行成功时执行命令2,也就是执行echo 0
                 然后根据 || 符特性,前一个命令不能执行才执行后一个,命令2 echo 0 执行成功,所以命令3 echo 1 不执行
                 命令结束

在CPU和物理内存之间进行地址转换时,( )将地址从虚拟(逻辑)地址空间映射到物理地址空间

TCB
MMU
CACHE
DMA

MMU 是Memory Manage Unit的缩写,即是存储管理单元,其功能是和物理内存之间进行地址转换 在CPU和物理内存之间进行地址转换,将地址从逻辑空间映映射到物理地址空间。
 A.TCB,线程控制块;PCB,进程控制块
B.MMU(Memory Management Unit) 内存管理单元,是中央处理器用来管理虚拟内存和物理内存寄存器的控制线路,同时也负责虚拟内存映射为物理内存等。
C.CACHE,感觉在这道题里应该指的是高速缓冲存储器。
D.DMA,(direct memory access)直接内存存储,传输数据从一个地址空间到另一个地址空间。


 64位Linux系统里,下面几个sizeof的运行结果是()D
1
2
3
4
5
6
    
int intValue = 1024;
char str[] = “Tencent”;
const char* ch = str;
sizeof(intValue) = __a__;
sizeof(str) = ___b__;
sizeof(ch) = __c___;

 



a=1,b=1,c=1
a=4,b=4,c=4
a=4,b=8,c=4
a=4,b=8,c=8


64位操作系统
char :1个字节(固定)
*(即指针变量): 8个字节
short int : 2个字节(固定)
int: 4个字节(固定)
unsigned int : 4个字节(固定)
float: 4个字节(固定)
double: 8个字节(固定)
long: 8个字节
unsigned long: 8个字节(变化*其实就是寻址控件的地址长度数值)
long long: 8个字节(固定)

b末尾还有一个\0

在RHEL5系统中使用vi编辑文件report.txt时,要自下而上查找字符串“2006”,应该在命令模式下使用(   )B
/2006
?2006
#2006
%2006

/从上到下查找
?从下到上查找

下面的内存管理模式中,会产生外零头的是()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


页式-内零头
段式-外零头


有关线程说法正确的是( )AC
线程是程序的多个顺序的流动态执行
线程有自己独立的地址空间
线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
线程是系统进行资源分配和调度的一个独立单位


进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,一个进程中包含多个线程。是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位
B进程有独立的地址空间,线程没有。线程是共享进程的地址空间,因此B错误
D进程是 操作系统进行资源分配和调度的一个独立单位,而线程只是CPU调度和分派的基本单位,因此D错误


apache目录访问控制的参数有( )

authname
authtype
authhost
authuserfile


AuthName:验证窗口的名称

AuthType:验证的类型,这里定义的是Basic

AuthUserFile:验证所使用的帐号密码配置文件

Require:指定可以登录网页的用户

Linux系统中,已经将DHCP服务器架设好,客户端的网络接口eth0,可以通过( )命令获得服务器分配的IP地址。ABD
dhclient
ifdown eth0;
ifdown eth0;ifup eth0
ifconfig
service network stop;service network start

在xdm的配置目录中,哪个文件用来设置在用户通过xdm登录后自动起动的应用程序?B
The Xsession file
The Xsetup_0 file
The Xstart_up file
The GiveConsole file

 xdm (X Display Manager)是一种图形化的登录界面。配置文件都放在/etc/X11/xdm目录下
Xsession文件决定了用户会话的风格,包含用户会话使用的命令
Xsetup_0文件中的程序会和图形登录界面一起运行
GiveConsole文件决定了在Xwindows移交给用户之前要执行的一些程序。

linux下解释: ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500。    B
向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,使用路由表2,优先选择1500的端口

向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,使用路由表2,这条规则的优先级是1500

向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,不使用路由表2,优先选择1500的端口

命令语法不正确
规则包含3个要素:

什么样的包,将应用本规则(所谓的SELECTOR,可能是filter更能反映其作用);

符合本规则的包将对其采取什么动作(ACTION),例如用那个表;

本规则的优先级别。优先级别越高的规则越先匹配(数值越小优先级别越高)。
pref是preference(优先)的缩写

在RHEL5系统vi编辑器的末行模式中,若需要将文件中每一行的第一个“Linux”替换为“RHEL5”,可以使用(  )
:s/Linux/RHEL5

:s/Linux/RHEL5/g

:%s/Linux/RHEL5

:%s/Linux/RHEL5/g

A选项:指将当前行中的第一个linux换为RHEL5
B选项:指将当前行中所有的linux换为RHEL5
C选项:指将文件中每一行的第一个linux换为RHEL5
D选项:整个文档范围内的linux换为RHEL5

:S 表示当前行     g表示对应范围内的所有
%S表示整个文档


:s/old/new 将当前行中查找到的第一个字符“old” 串替换为“new”

:s/old/new/g 将当前行中查找到的所有字符串“old” 替换为“new”

:#,#s/old/new/g 在行号“#,#”范围内替换所有的字符串“old”为“new”

:%s/old/new/g 在整个文件范围内替换所有的字符串“old”为“new”

:s/old/new/c 在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认

使用什么命令把打印任务放到打印队列中去打印D

lprm

lpq

lpd

lpr

答案: lpr
lprm 命令用于将一个工作由打印机贮列中移除
lpq 命令用于查看一个打印队列的状态,该程序可以查看打印机队列状态及其所包含的打印任务。
lpd 命令 是一个常驻的打印机管理程序,它会根据 /etc/printcap 的内容来管理本地或远端的打印机。
lpr(line printer,按行打印)实用程序用来将一个或多个文件放入打印队列等待打印。

在Linux系统中搭建DHCP服务器时,若需要给客户机指定默认网关地址为192.168.1.1,可以在dhcpd.conf配置文件中进行( )设置


option default-gate-way 192.168.1.1;

option gateways 192.168.1.1;

option routers 192.168.1.1;

option router-servers 192.168.1.1;

option routers 192.168.1.1:网关IP设置

什么命令用来查看硬盘被占用了多少空间和剩余多少空间?B


du

df

free

vmstat

 Linux系统中,用户文件描述符0表示 __ ___ 。 A

标准输入设备文件描述符

标准输出设备文件描述符

管道文件描述符

标准错误输出设备文件描述符


文件描述符0:标准输入设备
文件描述符1:标准输出设备
文件描述符2:标准错误输出设备

 linux 创建文件的命令有() BCDE

ls

touch

cat

vi/vim

>

 ls用来显示目标列表
当前位置:首页 » 文件和目录管理 » ls ls命令 目录基本操作 ls命令用来显示目标列表

当前位置:首页 » 文件和目录管理 » ls ls命令 目录基本操作 ls命令用来显示目标列表

touch命令
创建空白文件或修改文件时间

cat主要有三大功能:
1.一次显示整个文件。
2.从键盘创建一个文件。
   只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件

vi/vim可用来创建文件编辑文件并保存

> 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空;

将光盘/dev/hdc卸载的命令是?AC

umount /mnt/cdrom /dev/hdc

mount /dev/hdc

umount /dev/hdc

mount /mnt/cdrom /dev/hdc


挂载设备使用mount,卸载设备使用umount,有三种方式,通过设备名,挂载点或者设备名和挂载点
如题目所示:
umount /dev/hdc
umount /mnt/cdrom
umount /mnt/cdrom /dev/hdc

在linux编程中,以下哪个TCP的套接字选项与nagle算法的开启和关闭有关?


TCP_MAXSEG

TCP_NODELAY

TCP_SYNCNT

TCP_KEEPALIVE

 当有一个TCP数据段不足MSS,比如要发送700Byte数据,MSS为1460Byte的情况。nagle算法会延迟这个数据段的发送,等待,直到有足够的数据填充成一个完整数据段。也许有人会问,这有什么影响呢?没有太大的影响,总体上来说,这种措施能节省不必要的资源消耗。但是要发送的总体数据很小时,这种措施就是拖后腿了。比如,用户请求一个网页,大约十几KB的数据,TCP先发送了八九个数据包,剩下几百字节一直不发送,要等到另一个RTT才发送,这时候前面发送数据的ACK已经返回了。这样的用户体验是很不好的。 所以,现在很多服务器都选择主动关闭nagle算法,因为带宽够大,资源消耗不是问题,速度反而是个大问题。
从上述描述中,禁用 nagle,实质就是不在延迟 TCP_NODELAY

下述是Linux下多线程编程常用的pthread库提供的函数名和意义,说法正确的有?ABCD



pthread_create 创建一个线程

pthread_join用来等待一个线程的结束

pthread_mutex_init 初始化一个线程互斥锁

pthread_exit结束一个线程
 pthread_join()函数等待线程指定的线程
终止。 如果线程已经终止,那么pthread_join()
立即返回。 指定的线程必须可接合线程。


如果retval不是NULL,那么pthread_join()退出状态的副本
目标线程(即。 目标线程提供的价值
pthread_exit(3))* retval所指向的位置。 如果沥青量
线程被取消了,那么PTHREAD_CANCELED放在* retval。


如果多个线程同时试图加入相同的线程,
结果是未定义的。 如果线程调用pthread_join()
取消,然后目标仍可接合线程(即。 ,它将
不分离)。

以下哪些命令可以查看当前系统的启动时间(ABD)


w

top

ps

uptime

//漏了W
ps   查看当前系统中的进程
who -b   查看当前系统的启动时间
last reboot   查看当前系统的启动时间
w    查看当前系统的启动时间
top   查看当前系统的启动时间
uptime    查看当前系统的启动时间

编译内核时,可以使用哪些命令对内核进行配置?ABCD


make config

make menuconfig

make oldconfig

make xconfig

在Linux主机上完全安装了RHEL5,这时系统会默认安装DHCP服务器软件包,下面关于DHCP服务器的配置文件描述正确的是(BD)

DHCP服务器的配置文件为/etc/dhcp/dhcpd.conf

DHCP服务器的配置文件为/etc/dhcpd.conf

DHCP服务器的配置文件默认是存在的,不需要创建

DHCP服务器的配置文件默认是不存在的,需要手工创建

对于Linux说法,下列说法正确的是()A


线性访问内存非法时,当前线程会进入信号处理函数

用mv命令移动文件时,文件的修改时间会发生变化

ulimit -c设置的是函数调用栈的大小

malloc函数是应用程序向操作系统申请内存的接口

 A
B:不会变化
C:ulimit用于shell启动进程所占用的资源.-c size:设置core文件的最大值.单位:blocks
D:malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

如果系统的umask设置为244,创建一个新文件后,它的权限:()


--w-r--r--

-r-xr--r--

-r---w--w-

-r-x-wx-wx

 umask是从权限中“拿走”相应的位,且文件创建时不能赋予执行权限.
创建时,文件 默认666,目录默认777,减去umask的位就是结果。

Linux系统中某个可执行文件属于root并且有setid,当一个普通用户 mike运行这个程序时,产生的进程的有效用户和实际用户分别是?

root mike

root root

mike root

mike mike

deamon mike

mike deamon

setuid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。
因此当程序设置了setid权限位时,普通用户会临时变成root权限,但实际用户任然是原来的mike。

调用setid使进程成长为一个会话组长,setid调用成功后,进程成为新的会话组长和进程组长,并与原来的登陆会话和进程组脱离,由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
这也是在创建daemon程序时,经常用到的一个步骤。

从四个选项选出不同的一个。B


telnet

rsync

wget

scp

linux下,这些四个命令或者工具,都在特定目录下对应有相应的可执行程序,终端下输入的参数,对应的是源码中函数的参数,所以工具或者命令,它们的都是可执行程序。
telnet为用户提供了在本地计算机上完成远程主机工作的能力,使用Telnet协议,是TCP/IP 协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。;
wget 是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。
scp是有Security的文件copy,可以把当前一个文件copy到远程另外一台主机上,基于SSH登录,SSH采用面向连接的TCP协议传输 ,应用22号端口 安全系数较高。
rsync是类unix系统下的数据镜像备份工具——remote sync。支持本地复制,或者与其他SSH、rsync主机同步。可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
个人认为,rsync支持的协议更多,可以是面向连接的(tcp协议),也可以是无连接的(udp协议,socket中可以选择),然而上面三个采用的都是面向连接的协议(Telnet,TCP,HTTP, SSH等),一定程度上保证可靠性。

关于静态库与动态库的区别,以下说法错误的是()C


加载动态库的程序运行速度相对较快

静态库会被添加为程序的一部分进行使用

动态库可用节省内存和磁盘空间

静态库重新编译,需要将应用程序重新编译

动态库的函数到实际使用的时候才加载到内存,所以运行速度较慢

linux的系统调用是指D

由内核发起的调用

glibc函数库里的函数

由系统管理员运行的程序

是用户进程调用内核功能的接口

所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口。

bash中,需要将脚本demo.sh的标准输出和标准错误输出重定向至文件demo.log,以下哪些用法是正确的()ABC


bash  demo.sh &>demo.log

bash  demo.sh>&demo.log

bash  demo.sh >demo.log 2>&1

bash  demo.sh 2>demo.log 1>demo.log

 该题考察Linux下的输入/输出重定向。在Linux中,每个打开的文件被赋予一个文件描述符(file descriptor),包括标准输入(stdin),标准输出(stdout)和标准错误输出(stderr),由0,1,2分别描述。

    A选项,command &> file 表示将标准输出(stdout)和标准错误输出(stderr)重定向至指定的文件file中。

    B选项,语法错误。正确的语法是M >& N,M和N都是文件描述符,M在不指定的情况下默认是文件描述符1。

    C选项,command > file 2>&1,是由两部分组成。首先command>file表示将标准输出(stdout)重定向到文件file中。接下来的2>&1表示将标准错误输出(stderr)输出到文件描述符1指定的位置,即标准输出(stdout)的位置,由于标准输出已经冲定向到文件file中,所以标准错误输出也会重定向到文件file中。

    D选项,command 2> file 1> file,也可看成是由两部分组成。首先command 2> file,表示将标准错误输出(stderr)重定向到文件file中;1> file,表示将标准输出(stdout)重定向到文件file中。 最终的file中不会包含标准错误输出(stderr)的信息,因为会被之后的标准输出(stdout)覆盖。


下列有关Nginx配置文件nginx.conf的叙述正确的是()


nginx进程数设置为CPU总核心数最佳

虚拟主机配置多个域名时,各域名间应用逗号隔开

sendfile on;表示为开启高效文件传输模式,对于执行下载操作等相关应用时,应设置为on

设置工作模式与连接数上限时,应考虑单个进程最大连接数(最大连接数=连接数*进程数)


参考网络上的一篇总结。  Nginx配置文件nginx.conf中文详解
详见:http://www.2cto.com/os/201212/176520.html
A. 进程数设置为CPU总核心数最佳。  (正确)
B. 配置虚拟主机,多个域名时,用 空格 分隔。 (错误)
C. 设定http服务器中 sendfile on;   #开启高效文件传输模式
     普通应用设置为on;
     用于进行下载等应用磁盘IO重负载应用,设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。(错误)
D. 工作模式与连接数上限 :(最大连接数 = 连接数 * 进程数)(正确)

程序员小李通过管道统计prog.c函数中for语句通过的次数,需要使用的指令分别是BC

vi

grep

wc

sort

grep “for”  proc.c  | wc -l  

Redhat 9所支持的安装方式有?


通过HTTP进行网络安装

通过Telnet进行网络安装

通过NFS进行网络安装

从本地硬盘驱动器进行安装

光盘安装 (常规情况) 硬盘安装 (无光驱情况)
网络安装-NFS方式 (适合于批量安装大量服务器,和kickstart自动安装一起使用)
网络安装-FTP方式 (适合于批量安装大量服务器,和kickstart自动安装一起使
网络安装-HTTP方式 (适合于批量安装大量服务器,和kickstart自动安装一起使

Linux系统上,下面哪些文件是与用户管理相关的配置文件()ABC


/etc/passwd

/etc/shadow

/etc/group

/etc/password

在Linux系统下,你用vi编辑器对文本文件test.txt进行了修改,想保存对该文件所做的修改并正常退出vi编辑器,可以(   )。AD


在命令模式下执行ZZ命令

在命令模式下执行WQ命令

在末行模式下执行:q!

在末行模式下执行:wq

//漏了A

在bash中,下列哪些语句是赋值语句?()C


a ="test"

$a ="test"

a="test"

$a="test"

 bash中有两个内置的命令declare 和 typeset 可用于创建变量。除了使用内置命令来创建和设置变量外,还可以直接赋值,格式为:变量名=变量值

  注意:变量名前面不应加美元“$”符号。(和PHP不同)

         等号“=”前后不可以有空格。

         Shell中不需要显式的语法来声明变量。

         变量名不可以直接和其他字符相连,如果想相连,必须用括号:    echo “this is $(he)llo!”

下面说法哪个正确的: D


各个线程拥有相同的堆栈

i++是线程安全的,不需要同步

x=y是线程安全的,不需要同步

对进程来说,其虚拟内存的大小不受物理内存大小的限制

线程有自己的栈,但没有堆所以A错。普通整数的一般赋值、增量和减量语句会产生多条机器指令,操作均不具有原子性,需要同步,BC错。虚拟存储器具有请求调入和置换功能,所以虚拟内存的大小不受物理内存大小的限制。D对

你尝试登出时收到一个错误消息,显示你还有任务未完成,你需要使用下面哪个命令?A



kill PID-of-the-process

kill job-number-of-process

kill

kill PID-of-the-last-command

答案A
B不行
想使用命令结束一个正在运行的job:
kill %job number

你们公司有三个办事处,这三个办事处的电脑在公司网络上都属于一个Windows 2000域。所有的服务器都装有Windows 2000Server 系统,此网络通过帧中继连接。你在名为Mon1服务器上安装了一个第三方网络管理套件。你需要确保这个新的软件能结合并管理网络中现有的设备。你该怎么做?


在Mon1上安装SNMP

除了Mon1,所有的计算机都安装SNMP

在Mon1上的TCP/IP安装属性中配置SNMP服务选项

在除了Mon1的所有计算机上的TCP/IP安装属性中配置SNMP服务选项


SNMP基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理。换句话说就是所有 支持 SNMP协议的 设备 ,都可以由SNMP统一管理,那么管理员可以使用统一的操作进行,不用担心下面的设备是linux,mac,win还是路由器,防火墙。
然后NMS是 一个网管平台,也叫管理站,负责网管命令的发出、数据存储、及数据分析。被管理的设备上要运行SNMP代理,代理实现设备与管理站的SNMP通信。
现在题目的意思就是 Mon1服务器安装那个NMS管理站,所以其他被他管的设备就要安装SNMP服务作为代理。
就好比各个国家的人组成一个公司。老大说中文,他就安装一个中文管理软件,属下英国人、西班牙人、意大利人就各自安装语言翻译器作为代理吧。

以下哪一个命令只查找源代码、二进制文件和帮助文件,而不是所以类型的文件?此命令查找的目录是由环境变量$PATH指定的



whereis

whatis

which

apropos

 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
1.命令格式:
whereis [-bmsu] [BMS 目录名 -f ] 文件名
2.命令功能:
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
3.命令参数:
-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B   指定搜索可执行文件的路径。
-M   指定搜索帮助文件的路径。
-S   指定搜索源代码文件的路径。

下面有关bash配置文件,说法正确的是?

.bash_logout:退出shell时,要执行的命令

.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下

/etc/bash.bashrc 该文件包含专用于个人的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行
 正确答案:A、B、D
.bash_profile 类似于编程中的构造函数,当登录shell时,shell会寻找该文件做环境初始化。
.bashrc 是在bash环境时.bash_profile的替补。
.bash_logout 类似于编程中的析构函数,当登录shell退出时,shell会寻找该文件,并按其指示办事。
/etc/profile是系统文件,对系统下全体用户起作用
 C选项中:/etc/bash.bashrc 对所有用户起作用
而容易混淆的: ~/.bashrc 是对拥有当前home目录的用户起作用,也就是当前用户。


TCP的握手与分手,可能出现的情形有()。



握手需要3次通信

分手需要进行4次通信

FIN和ACK 在同一包里

ACK 和SYN 在同一包里

ABCD, C正确,理论上在接受到fin后,接收方恰好也要关闭连接,则可以在一个包内发送fin和ack(这从tcp包头格式可以看出是正确的,fin和ack不是在同一个bit位上的,所以为什么不能同时发),其次在tcp状态转移图中也可以看到从fin_wait1直接到time_wait的情况,这种情况就就同时接受到fin和ack的结果

运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?A


SpinLock

Mutex

Semaphore

Condition variable

spinlock在多处理器多线程环境的场景中有很广泛的使用,一般要求使用spinlock的临界区尽量简短,这样获取的锁可以尽快释放,以满足其他忙等的线程。Spinlock和mutex不同,spinlock不会导致线程的状态切换(用户态->内核态),但是spinlock使用不当(如临界区执行时间过长)会导致cpu busy飙高。

Linux下两个进程可以同时打开同一个文件,这时如下描述错误的是:D



两个进程中分别产生生成两个独立的fd

两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性

进程可以通过系统调用对文件加锁,从而实现对文件内容的保护

任何一个进程删除该文件时,另外一个进程会立即出现读写失败

两个进程可以分别读取文件的不同部分而不会相互影响

一个进程对文件长度和内容的修改另外一个进程可以立即感知

应该选D, 一般删除都是文件索引,如果两个文件同时打开同一个文件,一个线程执行删除操作,只要另一个线程不退出,就可以继续对该文件进行操作,一旦退出才找不到该文件的索引节点而报错

下面有关内核线程和用户线程说法错误的是?C

用户线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会

内核线程只运行在内核态,不受用户态上下文的影响。

用户线程和内核线程的调度都需要经过内核态。

内核线程有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
线程通常被定义为一个进程中代码的不同执行路线。从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。这种线程甚至在象 DOS 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似 Windows 3.x 的协作式多任务。另外一种则需要内核的参与,由内核完成线程的调度。其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态敏感词线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。 Windows NT和OS/2支持内核线程。Linux 支持内核级的多线程
用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程

在 Linux 中查看 ARP 缓存记录的命令是?A

"arp –a"

"arp –d"

"arp -L"

"arp –D"

 arp缓存就是IP地址和MAC地址关系缓存列表。在Windows下 arp -d [$ip] 不指定IP地址时清除所有arp缓存 。在Linux下 arp -d $ip 必须指定IP地址才能执行这条命令的此参数, 所有在Linux系统下 arp -d $ip 命令只能清除一个IP地址的对应MAC地址缓存


arp -a   查看缓存记录
arp -d   删除某些内容

将文件file1复制为file2可以用下面哪些命令()ABCDE


cp file1 file2

cat file1 >file2

cat < file1 >file2

dd if=file1 of=file2

cat file1 | cat >file2

 cp命令 :cp指令用于复制文件或目录。
        将文件file1复制成文件file2命令如下:cp file1 file2
cat命令 :cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的。
         一次显示整个文件命令如下: cat filename
> : linux中的数据流重导向:输出导向,覆盖导向的文件内容。
< : linux中的数据流重导向:输入导向,理解为原本由键盘输入改为文本输入
dd命令 : 作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
        参数:if  输入文件(或设备名称)  of  输出文件(或设备名称)
       将文件file1拷贝到文件file2中命令如下:  dd if=file1 of=file2
| :管道命令操作符,处理经由前面一个指令传出的正确输出信息,然后,传递给下一个命令,作为标准的输入

在Linux上,对于多进程,子进程继承了父进程的下列哪些?



进程地址空间

共享内存

信号掩码

已打开的文件描述符

以上都不是

 子进程继承父进程

    用户号UIDs和用户组号GIDs
    环境Environment
    堆栈
    共享内存
    打开文件的描述符
    执行时关闭(Close-on-exec)标志
    信号(Signal)控制设定
    进程组号
    当前工作目录
    根目录
    文件方式创建屏蔽字
    资源限制
    控制终端

子进程独有

    进程号PID
    不同的父进程号
    自己的文件描述符和目录流的拷贝
    子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
    不继承异步输入和输出

父进程和子进程拥有独立的地址空间和PID参数。
子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”            

在/etc/fstab文件中指定的文件系统加载参数中, 参数一般用于CD-ROM等移动设备D


defaults

sw

rw和ro

noauto

题目的意思是什么参数一般用于CD-ROM等移动设备
参数 default表示和使用默认设置
        sw 表示自动挂载的可读写分区
        ro 表示挂载只读权限的
        rw 表示挂载读写权限的
所以选择D。表示手动挂载的,也用于CD-ROW等移动设备

linux中调用write发送网络数据返回n(n>0)表示(B )


对端已收到n个字节

本地已发送n个字节

系统网络buff收到 n个字节

系统调用失败

 B
已发送,但不保证对方收到
write函数的返回值的含义本来就是这样

下列关于网络编程的描述中,错误的是?


一个 Socket 可以绑定多个网卡

客户端和服务器端都可以主动关闭 Socket

Socket 支持阻塞模式和非阻塞模式

TCP 和 UDP 协议不能绑定同一端口

 TCP、UDP可以绑定同一端口来进行通信。
类似于文件描述符,每个端口都拥有一个叫端口号(port   number)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。

下面有关孤儿进程和僵尸进程的描述,说法错误的是?D


孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

孤儿进程和僵尸进程都可能使系统不能产生新的进程,都应该避免

 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

如果进程不调用wait / waitpid的话,  那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上 ,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和政府出面处理它的一切善后工作。 因此孤儿进程并不会有什么危害。

内核不包括的子系统是 D


进程管理系统

内存管理系统

I/O管理系统

硬件管理系统

内核分为进程管理子系统,内存管理子系统,io管理子系统,文件管理子系统


下面那些命令可以用来查看Linux主机的默认路由()AD


route

ifconfig

ping

netstat

 答案:A

A,route命令用来显示目前本机路由表的内容,并且还可以针对路由表中的记录来进行相应的添加、删除或修改等操作。
B,ifconfig命令用来来检测和设置本机的网络接口。

C,ping命令用来检测两部主机之间的传输信道是否畅通,或远程主机是否正常

D,netstat命令用来查看主机的连接状态

以下哪些命令可以获取linux主机的负载相关指标ABD


uptime

top

ls

sar

crontab

 uptime命令过去只显示系统运行多久。现在,可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
top命令可以查看系统整体状态
最后一些输出信息的解释:
load average: 0.09, 0.05, 0.01
三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字是越小越好。在多核处理中,系统的均值不应该高于处理器核心的总数量
进程使用的内存可以用top,有3个列VIRT RES SHR, 标示了进程使用的内存情况, VIRT标识这个进程可以使用的内存总大小, 包括这个进程真实使用的内存, 映射过的文件, 和别的进程共享的内存等. RES标识这个这个进程真实占用内存的大小. SHR标识可以和别的进程共享的内存和库大小.
sar -u输出显示CPU信息。-u选项是sar的默认选项。该输出以百分比显示CPU的使用情况
ls跟dos下的dir命令是一样的都是用来列出目录下的文件
crontab是一个定时执行任务命令,不能查看系统负载。

批量删除当前目录下后缀名为.c的文件。如a.c、b.c。AB


rm *.c

find . -name "*.c" -maxdepth 1 | xargs rm

find . -name "*.c"   | xargs  rm

以上都不正确

A, B
A没有问题
B:题目中是说删除当前目录下 后缀名为.c的文件,需要加上-maxdepth 1,表示是当前目录,不包括其子目录
所以C这样是不对的


用 xargs 是由于很多命令不支持 | 管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令

int main{
    fork() || fork()
}

 


共创建了()个进程 A



3

2

1

4

 fork()给子进程返回一个零值,而给父进程返回一个非零值;
在main这个主进程中,首先执行 fork() || fork(), 左边的fork()返回一个非零值,根据||的短路原则,前面的表达式为真时,后面的表达式不执行,故包含main的这个主进程创建了一个子进程,
由于子进程会复制父进程,而且子进程会根据其返回值继续执行,就是说,在子进程中, fork() ||fork()这条语句左边表达式的返回值是0, 所以||右边的表达式要执行,这时在子进程中又创建了一个进程,
即main进程->子进程->子进程,一共创建了3个进程。

在linux网络编程中,以下关于socket描述符正确的是:ABC


socket存在两种模式:阻塞和非阻塞

系统调用read从socket中读取数据时,当read返回0的时候,表示socket中数据读取完毕

如果socket设置成非阻塞模式,当socket的输入缓冲区没有可读数据时,read操作会返回错误

在阻塞socket上调用write函数发送数据,函数返回时,表示数据已经发送出去

我觉得答案是AC.
B:非阻塞模式下,返回0表示对端发送close关闭连接;所以我觉得这个也不一定正确。
C:正确.非阻塞模式下,如果缓冲区为空,那么read返回-1,同时设置errno=EAGAIN。
D:非阻塞模式下,表示写入内核socket缓冲区;阻塞模式下表示成功发送出去。

进程A读取B进程中的某个变量(非共享内存),可行的方式有()



B进程向消息队列写入一个包含变量内容的消息,A进程从队列中读出

通过本地环路通信

如果A、B 非亲属,那么A通过命名管道把这个变量的地址发给B进程

如果 B是A 进程的子进程,那么B直接读取变量内容即可


答案:A、B、C
本题考查进程间通信方式。
A选项为消息队列的实现方式。
B选项为本地socket通信方式。
C选项为命名管道通信方式。
D选项通过fork子进程的方式,但是二者的地址空间是各自独立的,子进程无法读取父进程的数据,故不可用。

下列关于文件系统中元数据(比如ext2中的inode)的基本作用及ext2和ext3的根本区别描述错误的有?B


EXT2 inode用来定义文件系统的结构以及描述系统中每个文件的管理信息,每个文件都有且只有一个inode,即使文件中没有数据,其索引结点也是存在的

EXT2 inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。

ext2文件系统是非日志文件系统,而ext3有多种日志模式

ext3文件系统能够极大地提高文件系统的完整性
inode分為內存中的inode和文件系統中的inode,為了避免混淆,我們稱前者為VFS inode, 而後者以EXT2為代表,我們稱為Ext2 inode。下面分別對VFS inodee與Ext2 inode做一下簡單的描述:
  1、VFS inode包含文件訪問許可權、屬主、組、大小、生成時間、訪問時間、最後修改時間等信息。它是linux管理文件系統的最基本單位,也是文件系統連接任何子目錄、文件的橋樑。inode結構中的靜態信息取自物理設備上的文件系統,由文件系統指定的函數填寫,它只存在於內存中,可以通過inode緩存訪問。雖然每個文件都有相應的inode結點,但是只有在需要的時候系統才會在內存中為其建立相應的inode數據結構,建立的inode結構將形成一個鏈表,我們可以通過遍歷這個鏈表去得到我們需要的文件結點,VFS也為已分配的inode構造緩存和哈希表,以提 高系統性能。inode結構中的struct inode_operations *i_op為我們提供了一個inode操作列表,通過這個列表提供的函數我們可以對VFS inode結點進行各種操作。每個inode結構都有一個i結點號i_ino,在同一個文件系統中每個i結點號是唯一的。

  2、EXT2 inode用來定義文件系統的結構以及描述系統中每個文件的管理信息,每個文件都有且只有一個inode,即使文件中沒有數據,其索引結點也是存在的。每個文件用一個單獨的Ext2 inode結構來描述,而且每一個inode都有唯一的標誌號。Ext2 inode為內存中的inode結構提供了文件的基本信息,隨著內存中inode結構的變化,系統也將更新Ext2 inode中相應的內容。Ext2 inode對應的是Ext2_inode結構。
EXT2 inode不包含文件的创建时间,ext3 inode包含。所以B错误。

init启动进程需要读取()配置文件



/sbin/init

/bin/sh

/etc/sysvinit

/etc/inittab


/sbin/init在核心完整的加载后,开始运行系统的第一支程序,主要的功能就是准备软件运行的环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等。
/bin/sh解释脚本的shell命令,开机后运行
/etc/sysvinit就是 system V 风格的 init 系统,顾名思义,它源于 System V 系列 UNIX。sysvinit 中运行模式描述了系统各种预订的运行模式。
/etc/inittab定义了系统引导时的运行级别, 进入或者切换到一个运行级别时做什么。

执行指令find / -name “test.c”,按ctrl+z后的提示有[1] 166,可以继续执行的方式有()C



kill 166

Ctrl+h

fg 1

bg 1

fg是将进程放到前台并唤醒
bg是将进程放到后台并唤醒

linux下查看当前网络连接的命令。
正确答案: B   你的答案: A (错误)

ping

netstat

route

tracert

inux查看网络链接状况命令:netstat
ping测试网络是否连接
route设置路由表
tracert不是linux命令,在linux下应该是traceroute,追踪数据包在网络上传输时的路径

 内存空间被分成不同区域,其中用函数

    void* malloc(unsigned int size);

申请的内存在()
正确答案: C   你的答案: B (错误)

程序区

静态存储区

动态存储区

ROM区

静态储存:全局变量 静态变量 Stack:局部变量 系统会自动回收 heap:new malloc

Linux执行ls,会引起哪些系统调用()
正确答案: B C D   你的答案: A B C (错误)

nmap

read

execve

fork

任何shell都会执行 exec 和 fork
而    ls会执行read
三个加起来

你被需要检查系统中的设备情况,需要检查哪个log日志?
正确答案: C   你的答案: A (错误)

/var/log/tmp

/var/log/lastlog

/var/log/messages

/var/log/utmp

 答案:C  

    /var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
    /var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
    /var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
    /var/log/boot.log — 包含系统启动时的日志。
    /var/log/daemon.log — 包含各种系统后台守护进程日志信息。
    /var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
    /var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
    /var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
    /var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
    /var/log/user.log — 记录所有等级用户信息的日志。
    /var/log/Xorg.x.log — 来自X的日志信息。
    /var/log/alternatives.log – 更新替代信息都记录在这个文件中。
    /var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
    /var/log/cups — 涉及所有打印信息的日志。
    /var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
    /var/log/yum.log — 包含使用yum安装的软件包信息。
    /var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
    /var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
    /var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
    /var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。

除了上述Log文件以外, /var/log还基于系统的具体应用包含以下一些子目录:

    /var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
    /var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
    /var/log/mail/ –  这个子目录包含邮件服务器的额外日志。
    /var/log/prelink/ — 包含.so文件被prelink修改的信息。
    /var/log/audit/ — 包含被 Linux audit daemon储存的信息。
    /var/log/samba/ – 包含由samba存储的信息。
    /var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
    /var/log/sssd/ – 用于守护进程安全服务。

设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项错误的是:
正确答案: A C D   你的答案: C D (错误)

可以随意读和写

只能写不能读

可以在原有内容后追加写

写操作结束后可以从头开始读

正确答案:ACD;本题考察C语言中的文件操作;
解析:
fopen(“file”,”w”)打开文件,并赋值为“w”权限,即写权限,则B正确,A错误,因为这里不具有读权限;对于C的解释:用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。所以C错误;对于D的解释:D所描述的权限应该是“w+”而非“w”,所以D错误;

有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?()

正确答案: B   你的答案: A (错误)

uniq -c ip.txt│sort -nr│head -n 3

sort ip.txt│uniq -c│sort -rn│head -n 3

cat ip.txt │count -n│sort -rn│head -n 3

cat ip.txt │sort │uniq -c│sort -rn│top -n 3

sort | uniq -c| 搭配使用,并且需要优先sort 再uniq -c 才能再输出行前面加上每行在文件中出现的次数;
 sort 是按ASCII码排序
-n   依照数值的大小排序。
-r   以相反的顺序来排序。
uniq -c 是去重并显示个数
head -n 3 为取前3行

关于Linux系统的负载(Load),以下表述正确的是______。
正确答案: B C   你的答案: B (错误)

通过就绪和运行的进程数来反映

可以通过TOP命令查看

可以通过uptime查看

Load:2.5,1.3,1.1表示系统的负载压力在逐渐减少

D三个数分别代表不同时间段的系统平均负载(一分钟、五分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越大,这也可能是服务器出现某种问题的信号。但是一分钟和五分钟的平均负载大于十五分钟的,不是负载在变小吧。

下面选项关于linux下查看cpu,内存,swap,硬盘信息的命令描述错误的是?
正确答案: C   你的答案: C

cat  /proc/cpuinfo 查看CPU相关参数的linux系统命令

cat  /proc/meminfo 查看linux系统内存信息的linux系统命令

du -h: 查看硬盘信息

cat /proc/swaps :查看所有swap分区的信息

1.查看CPU信息命令
cat  /proc/cpuinfo

2.查看内存信息命令
cat  /proc/meminfo

3.查看硬盘信息命令
fdisk -l

下面哪个命令不是用来查看网络故障?
正确答案: C   你的答案: C

telnet

ping

init

netstat

 A选项:telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
B选项:Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”、不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机(send ICMP ECHO_REQUEST to network hosts),并显示响应情况,这样我们就可以根据它输出的信息来确定目标主机是否可访问(但这不是绝对的)。有些服务器为了防止通过ping探测到,通过防火墙设置了禁止ping或者在内核参数中禁止ping,这样就不能通过ping确定该主机是否还处于开启状态。
C选项: init init 命令进程和作业管理 init 命令是 Linux 下的进程初始化工具, init 进程是所有 Linux 进程的父进程,它的进程号为 1 。 init 命令是 Linux 操作系统中不可缺少的程序之一, init 进程是 Linux 内核引导运行的,是系统中的第一个进程。
D选项: n etstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 n etstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用 n etstat查一查为什么会出现这些情况了。

网络服务的daemon是:
正确答案: C   你的答案: C

netd

httpd

inetd

lpd

 A:     Netd 就是Network Daemon 的缩写,表示Network守护进程. Netd负责跟一些涉及网络的配置,操作,管理,查询等相关的功能实现,比如,例如带宽控制(Bandwidth),流量统计,带宽控制,网络地址转换(NAT),个人局域网(pan),PPP链接,soft-ap,共享上网(Tether),配置路由表,interface配置管理,等等.好像Andorid用的
C:    inetd是监视一些网络请求的 守护进程 ,其根据网络请求来调用相应的服务进程来处理连接请求。它可以为多种服务管理连接,当 inetd 接到连接时,它能够确定连接所需的程序,启动相应的进程,并把 socket 交给它 。
个人觉得应该选A

下列关于 clone 和 fork 的区别描述正确的有?
正确答案: C   你的答案: C

clone和fork最大不同在于fork不再复制父进程的栈空间,而是自己创建一个新的。

clone和fork最大不同在于clone不再复制父进程的栈空间,而是自己创建一个新的。

clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等

fork是clone的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选择的继承父进程的内存、甚至可以将创建出来的进程变成父进程的兄弟进程等等

fork() 函数复制时将父进程的所以资源都通过复制数据结构进行了复制,然后传递给子进程,所以 fork() 函数不带参数; clone() 函数则是将部分父进程的资源的数据结构进行复制,复制哪些资源是可选择的,这个可以通过参数设定,所以 clone() 函数带参数,没有复制的资源可以通过指针共享给子进程

fork()是全部复制
vfork()是共享内存
clone()是可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。

下面有关linux查看系统负载的命令,说法错误的是?
正确答案: D   你的答案: D

uptime命令主要用于获取主机运行时间和查询linux系统负载等信息

vmstat命令可以查看查看cpu负载

sar命令可以查看网络接口信息

free命令可以查看磁盘负载情况


D错误
free - Display amount of tree and used memory in the system
描述的是内存使用情况,不是磁盘负载

Linux下通过哪个命令怎么查看中断?
正确答案: B   你的答案: B

cat /proc/ioports

cat /proc/interrupts

cat /proc/kcore

cat /proc/kms


/proc/interrupts 显示使用的中断
 /proc/ioports 当前使用的I/O端口
 /proc/kcore 系统物理内存映像。与物理内存大小完全一样,但不实际占用这么多的内存。
 /proc/kmsg  内核输出的消息,也被送到syslog

Linux下的进程有哪三种状态?()
正确答案: B   你的答案: B

精确态,模糊态和随机态

运行态,就绪态和等待态

准备态,执行态和退出态

手动态,自动态和自由态



    运行态 (Running) :              占有CPU,并在CPU上运行
    就绪态 (Ready):                  已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
    等待态 (Waiting/Blocked):   因等待某一事件而暂时不能运行:如等待读盘结果

查看TCP连接的命令是什么?
正确答案: C   你的答案: C

tcpdump

top

netstat

ifconfig

tcpdump是简单可靠网络监控的实用工具
top 显示活动进程方面的情况
netstat显示网络有关的信息,比如套接口使用情况、路由、接口、协议(TCP等)等
ifconfig是查看活动的网卡信息

转载于:https://www.cnblogs.com/hehehe886/p/7502451.html

你可能感兴趣的:(【牛客 错题集】Linux系统方面错题合集)