Linux常见易错题

僵尸进程和孤儿进程

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

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

umask

如果系统的umask设置为244,创建一个新文件后,它的权限:()
umask是从权限中“拿走”相应的位,且文件创建时不能赋予执行权限.
创建时,文件 默认666,目录默认777,减去umask的位就是结果。

硬连接和软链接

在这里插入图片描述
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:

  1. 文件有相同的 inode 及 data block;
  2. 只能对已存在的文件进行创建;
  3. 不能交叉文件系统进行硬链接的创建;
  4. 不能对目录进行创建,只可对文件创建;
  5. 删除一个硬链接文件并不影响其他有相同 inode 号的文件。


软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:

软链接有自己的文件属性及权限等;
可对不存在的文件或目录创建软链接;
软链接可交叉文件系统;
软链接可对文件或目录创建;
创建软链接时,链接计数 i_nlink 不会增加;
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

UNIX系统中进程由三部分组成:进程控制块,正文段和数据段。这意味着一个程序的正文与数据可以是分开的,这种分开的目的是为了?

可共享正文
可共享数据
可重入

一个进程由三个部分组成:进程控制块PCB、数据和程序。在UNIX中,一个进程也由三个部分组成:进程控制块、数据段和共享正文段,并有其自身的不同含义。
进程运行时用到的数据以及工作区,构成了一个进程的数据段。要注意的是,如果进程执行的程序是不能被共享的,那么也把它归入到数据段中。
为了管理好进程的共享正文段,UNIX在内存专门开辟了一个text结构区域,形成正文段表text[ ].
因此,划分进程为进程控制块、正文段、数据段可以实现共享正文,共享数据和可重入。

配置网络的骚操作

一台主机要实现通过局域网与另一个局域网通信,需要做的工作是?
答: 定义一条本机指向所在网络网关的路由

Linux中的骚命令

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

假如你需要找出/etc/my.conf文件属于哪个包(package),你可以执行:()
rpm -qf /etc/my.conf

ifconfig

ifconfig的主要作用是:
用于查看和更改网络接口的地址和参数,包括IP地址、网络掩码、广播地址,其使用权限是超级用户
主要为配置本地回环地址、配置网卡的IP地址、激活网络适配器
不包括加载网卡到内核中

Linux Shell中带$的骚命令

$$
Shell本身的PID(ProcessID)

$!
Shell最后运行的后台Process的PID

$?
最后运行的命令的结束代码(返回值)

$-
使用Set命令设定的Flag一览

∗ 所 有 参 数 列 表 。 如 " * 所有参数列表。如" "*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

@ 所 有 参 数 列 表 。 如 " @ 所有参数列表。如" @"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。

$#
添加到Shell的参数个数

$0
Shell本身的文件名

1 ~ 1~ 1n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

Linux骚配置文件

/etc/hosts 设定用户自已的IP与名字的对应表
/etc/gateways 设定路由器 (建立动态路由)
/etc/resolv.conf 设置DNS

Linux进程间的通信

下列哪些可以用于Linux进程间通讯?
A. UNIX套接字
B. 信号量
C. 无名管道
D. 文件锁
E.共享内存

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

Linux 下进程间的通信方式有以下几种
(1)管道/无名管道
(2)信号
(3)共享内存
(4)消息队列
(5)信号量
(6)socket
这是书上说的六种通信方式,通过文件锁的方式也可以实现进程间的通信(上网查了一下)所以要记住文件锁

无聊的命令题

以下哪些命令可以查看当前系统的启动时间()
A. w
B. top
C. ps
D. uptime

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

解析:

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

鄙人批注:
这种题最没有意思。茴香豆的茴字有四种写法

TCP连接

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

正确答案: D 你的答案: B (错误)
窃以为: 这逼题有毛病

如何标识一个TCP连接

在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。

client最大tcp连接数

client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short,因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。

server最大tcp连接数

server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

实际的tcp连接数

上面给出的是理论上的单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制,特别是sever端,其最大并发tcp连接数远不能达到理论上限。在unix/linux下限制连接数的主要因素是内存和允许的文件描述符个数(每个tcp连接都要占用一定内存,每个socket就是一个文件描述符),另外1024以下的端口通常为保留端口。

对server端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发TCP连接数超过10万 是没问题的,国外 Urban Airship 公司在产品环境中已做到 50 万并发 。在实际应用中,对大规模网络应用,还需要考虑C10K 问题。

内核线程 用户线程

下面有关内核线程和用户线程说法错误的是?
A. 用户线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会
B. 内核线程只运行在内核态,不受用户态上下文的影响。
C. 用户线程和内核线程的调度都需要经过内核态。
D. 内核线程有利于发挥多处理器的并发优势,但却占用了更多的系统开支。

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

解释:
1、内核线程是一直处于内核态的轻量级进程,LWT,根本不会切换到用户态。

2、至于内核级线程,在深入linux内核没见过这个概念,我觉得就是普通线程,实际上对于linux而言, 内核不会区分线程和进程,线程跟进程一样会有用进程拥有的所有描述符,只是线程共享了页表,线性区等, 不懂可以看看fork(),vfork(),clone的调用区别。或者看一下pthread库的底层实现。因此这里讲的应该是内核级线程应该指的是普通线程。

3、至于用户级线程,个人认为题目讲的就是协程,调度都是在用户态,不能利用多核优势。

如果上述理解正确:
那么A是正确的,因为一个协程阻塞其他都会阻塞。
B 是正确的,内核线程为内核服务,不会切换到用户态。
C 是错误的,协程调度不进入内核态
D 是正确的,内核线程的跟进程调度一样,可以利用多核优化

进程 线程 协程

线程是共享进程的地址空间

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

ext2/etx3 文件系统

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 的文件。

数据和代码分开

1)防止程序指令被修改,设置代码段权限为只读,设置数据段权限为可读写
2)代码段和数据段分开有利于提高程序的局部性,现代CPU缓存一般设计为数据缓存和指令缓存分离,指令和数据分开存放可以提高CPU缓存命中率。
3)共享指令,当系统运行多个程序的副本时,它们指令时一样的,因此内存只需保存一份程序的指令代码。每个副本进程的数据区是进程私有,可以节省内存。

Ngix配置

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

cront tab

基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

*/5 * * * * exam
每5分钟运行一次exam

用户态和内核态的切换

用户态切换到内核态的 3 种方式
a. 系统调用
read系统调用
b. 异常
整数除以零
c. 外围设备的中断

&& ||

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

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

c++内存区域

(1)从静态存储区域分配:
内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。

(2)在栈上分配:
在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

(3)从堆上分配:
即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码区。

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

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等),一定程度上保证可靠性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值