本文大部分应该都是与 Linux 笔试题有关,因为我之前几场笔试,百度和 SNK 都遇到了 Linux 的笔试题,所以总结本文。

chmod 和 chown 的区别

chmod 和 chown 的主要区别在于 chmod 用于修改文件权限,而 chown 用于修改文件所有权。

chmod 700 file
chown newowner:newgrp file

提一下文件的权限组成:700,7 表示所有者的权限,0 表示组的权限,0 表示其他人的权限。每个数其实都是 3bit,依次是读、写、执行三种权限。 umask 作为掩码,通常是 022,而文件默认权限值为 0666,0666-022=0644 才是实际的文件权限

除了数字,还有符号表示法:使用 u、g、o 和 a 表示用户、组、其他人和所有人,使用 +、- 和 = 表示添加、删除和设置权限,使用 r、w 和 x 表示读、写和执行权限。

chmod u+rwx,g+rwx,o-rwx path/to/file

du 和 df 区别

du 是计算文件 / 目录的磁盘使用情况,而 df 是计算文件系统磁盘空间的使用情况。二者都可以使用 - h 选项使得结果显示对人类友好。这里顺便提一下 /proc 目录,这是一个虚拟文件系统,它提供了有关系统内核和进程的信息。

  • /proc/cpuinfo: 包含有关 CPU 的信息,例如 CPU 型号、速度、缓存大小等。
  • /proc/meminfo: 包含有关系统内存的信息,例如总内存、可用内存、缓存大小等。
  • /proc/loadavg: 包含有关系统负载的信息,例如平均负载、运行进程数等。
  • /proc/version: 包含有关内核版本的信息。
  • /proc/net: 包含有关网络协议的信息,例如 TCP、UDP 等。
  • /proc/sys: 包含有关内核参数的信息,例如文件句柄限制、TCP 缓冲区大小等。

所以我们可以使用 cat 命令来查看相关信息。

sed 匹配

  • sed ‘s/AAA/BBB’ xyz 将第一个 AAA 替换为 BBB
  • sed ‘s/AAA/BBB/g’ xyz 将全局 AAA 替换为 BBB
  • sed ‘s/AAA/BBB/p’ xyz 将第一个 AAA 替换为 BBB,并打印替换后的那一行,这不是全局的,但是可以加上 g
  • sed ‘s/AAA/BBB/d’ xyz,删除匹配的那一行,也不是全局的

uptime 命令

输出结果: 10:32:47 up 1 day, 2:30, 1 user, load average: 0.00, 0.01, 0.05

“up” 后面的数字表示系统已经运行的时间,以天、小时和分钟为单位。在上面的示例中,系统已经运行了 1 天 2 小时 30 分钟。

查看远程 Linux 系统运行了多少时间命令:ssh user@被监控主机 ip “uptime” 含义为使用 SSH 连接到远程 Linux 系统并运行 uptime 命令。注意不是 scp,这个命令是远程 / 本地两个系统之间复制文件用的。

缺省的 shell

Linux 缺省的 shell 为 bash,缺省就是没有指定,默认的意思。wc 这种题就不能好好说话吗?不能直接说默认的 shell 吗?

wc 命令

例题为:统计一个文件中” 运维派” 出现的行数?

命令为:grep “运维派” 文件名 | wc -l

其中 - l 选项就是计算行数(grep 也是匹配行)

find -newer 命令

直接看例子:find -newer file1 ! file2 查找更改时间比文件 file1 新但比文件 file2 旧的文件

init 进程

若一个进程退出时,其子进程还在运行(没有被杀死),则这些子进程会变成孤儿进程(Orphan Process)。孤儿进程就会被 init 进程管理。

拓展一下其他进程:

  • syslogd:守护进程,和记录日志有关
  • sshd:opensshd 软件套件中的服务器守护进程

ls>c 命令

这个命令,如果没有 c 文件会先创建 c 文件,再执行 ls。假设当前目录只有 ab 两个文件,那么 ls>c 后 c 文件的内容为 abc

定义 bash 环境的用户文件

bashrc &.bash_profile

TCP_NODELAY 参数

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

在 TCP 的实现中广泛使用 Nagle 算法。
算法如下:若发送应用进程把要发送的数据逐个字节地送到 TCP 的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有在收到对前一个报文段的确认后才继续发送下一个报文段。当数据到达较快而网络速率较慢时,用这样的方法可明显地减少所用的网络带宽。Nagle 算法还规定,当到达的数据已达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。