面试常见问题之Linux知识点

1.1 硬链接与软链接的区别

前提知识:

文件的组成部分:

  • inode: 一个文件占用一个inode, 记录文件属性, 同时记录此文件的内容所在的block编号
  • block: 记录文件的内容, 文件很大时, 会占用多个block

为了解决文件的共享问题, Linux系统引入了两种链接: 硬链接(hard link)和软链接(又称符号链接, 即soft link或symbolic link).

若一个inode号对应多个文件名, 则称这些文件为硬链接. 换言之, 硬链接就是同一个文件使用了多个别名. 硬链接可以由命令link或ln创建

link oldfile newfile

硬链接特点:

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

若文件用户数据块中存放的内容是另一文件的路径名的指向, 则该进程就是软链接. 软链接的创建与使用没有类似硬链接的诸多限制.

详细

1.2 僵尸进程与孤儿进程的区别, 从SIGCHLD分析产生僵尸进程的原因

进程的状态: R, S, D, T, Z, X

R: 可执行状态

S: 可中断的睡眠状态

D: 不可中断的睡眠状态

T: 暂停状态或跟踪状态

Z: 退出状态, 进程成为僵尸进程(zombie, terminated but not reaped by its parent)

进程的三种基本状态:

就绪(Ready) 执行(Running) 阻塞(Blocked)

SIGCHLD

当一个子进程改变了它的状态时, 会发生:

  • 得到SIGCHLD信号
  • waitpid()或者wait()调用会返回

在子进程退出时, 它的进程描述符不会立即释放, 这是为了让父进程得到子进程信息, 父进程通过wait()和waitpid()来获得一个已经退出的子进程信息

孤儿进程

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

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

由于孤儿进程会被init进程收养, 所以孤儿进程不会对系统造成危害

僵尸进程

一个子进程的进程描述符在子进程退出时不会释放, 只要当父进程通过wait()或waitpid()获取了子进程信息后才会释放. 如果子进程退出, 而父进程并没有调用wait()或waitpid(), 那么子进程的进程描述符仍然保存再系统中, 这种进程被称为僵尸进程

僵尸进程通过ps命令显示出来的状态为Z(zombie)

系统所能使用的进程号是有限的, 如果产生大量僵尸进程, 将因为没有可用的进程号而导致系统不能产生新的进程

要消灭系统中大量的僵尸进程, 只需要将其父进程杀死, 此时僵尸进程就会变成孤儿进程, 从而被init所收养, 这样init就是释放所有僵尸进程所占有的资源, 从而结束僵尸进程.

1.3能够使用常用的命令, 比如cat文件内容查看, find搜索文件, 以及cut, sort等管线命令. 了解 grep 和 awk 的作用

使用find命令搜索文件
find [basedir] [option]
实例: find . -name "shadow*" 
返回当前目录下, 文件名匹配"shadow"的路径

管道指令

管道是将一根命令的标准输出作为另一个命令的标准输入, 在数据需要经过多个步骤的处理之后才能得到我们想要的内容时就可以使用管道

在命令之间使用 |分隔各个管道命令

1. 提取指令

cut可以对数据进行切分, 得到想要的部分

-d  分隔符
-f 通过-d分割后, 使用-f n 取出第 n 个区间
-c 以字符为单位取出数据

实例

last | cut -d ' ' -f 1
说明: last显示登入者的信息, 使用分隔符 -d 用空格" "把信息分割开, 使用 -f 取出第 1 块区间

export | cut -c 12-
说明: 取出第 12 字符以后的字符串
2. 排序指令
sort用于排序
参数:
-f 忽略大小写
-b 忽略最前面的空格
-n 使用数字
-r 反向排序
-u unique, 重复的内容只出现一次
-t 分隔符, 默认为tab
-k 指定排序区间

正则表达式

grep, 使用正则表达式进行全局查找并打印

grep [-acinv] 要搜寻的字符串 filename
-c 统计个数
-i 忽略大小写
-n 输出行号
-v 反向选择
实例:
grep -n "the" filename

注意: {}在shell中有特殊意义, 所以必须使用转义字符

你可能感兴趣的:(linux,实习准备)