前言

在面试中,linux知识点相对于网络和操作系统等知识点没有那么重要;

  • 能简单使用一些命令;
  • 文件系统相关的原理,inode和block等概念,数据恢复;
  • 硬链接和软链接
  • 进程管理相关的,僵尸进程与孤儿进程,SIGCHLD;

1.常用命令

  1. info:它与man类似,它将文档分成以一个个页面,每个页面可以跳转;
  2. doc: /usr/share/doc存放着软件的一整套说明文件;
  3. 关机: who(查看有没有其它用户在线),sync(为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立刻同步到磁盘,sync同步操作); shutdown

GNU计划,译为革奴计划,它的目标是创建一套完成自由的操作系统;称为GNU;,其内容软件完全以GPL方式发布。其GPL全称为GNU通用公共许可协议;

2.磁盘

1.磁盘接口
(1)IDE:又称(ATA),接口速度最大为133MB/s,因为并口线抗干扰性太差,且排线占用空间较大,不利于电脑内部散热,已逐渐被SATA取代;
在这里插入图片描述
(2)SATA: 支持热插拔等功能;SATA-11=300MB/s, 3可达600M/s;
在这里插入图片描述

(3)SCSI(小型机系统接口):
在这里插入图片描述
(4)SAS:与SATA硬盘相同,都是采用序列式计数以获取更高的传输速度,可达6Gb/s;
在这里插入图片描述

  • 常见的磁盘文件名:
    (1)IDE磁盘:/dev/hd[a-d]
    (2)SATA/SCSI/SAS磁盘: /dev/sd[a-p]

3.分区

  • 主要有两种:一种时限制较多的MBR的分区表,一种是较新且限制较少的GPT分区表;
    (1)MBR:第一个扇区主要有开机记录(446bytes)和分区表(64bytes);分区表最多只能存储4个分区;一个扩展分区 3个主分区;
    (2)GPT:扇区是磁盘的最小存储单位;第一高区块记录了主要的开机记录,紧接着的是33个区块记录分区信息,并把最后的33的区块用于对分区信息进行备份;
    GPT没有扩展分区的概念,都是主分区,每个LBA(逻辑区块地址)可以分4个分区,总共可以分4*32=128个; 因为第一个区块为GPT的表头记录;

3.1开机检测程序

1.BIOS:一个固件(切入在硬件中的软件),这个程序知道可以开机的磁盘,并读取磁盘的第一高扇区的主要开机记录(MBR),由主要开机记录执行其中的开机管理程序,这个开机管理程序会加载操作系统的核心文件;

  • BIOS不可以读取GPT分区表,而UEFI可以;

4.文件系统

  • 对分区进行格式化是为了在分区上建议文件系统;
  • 主要组成部分:
  • inode:一个文件占用一个inode,记录文件的属性,同时记录此文件的内容所在的block编号;
  • block:记录文件的内容,文件太大时,会占用多个block;
  • superblock:记录文件系统的整体信息,包含inode和block的总量、使用量、剩余量、以及文件系统的格式与相关信息等;
  • block bitmap:记录block是否被使用的位图;
    在这里插入图片描述
fsck #文件系统修复
dumpe2fs 分区设备文件(/dev/sda1) #查看分区信息;
dumpe2fs /dev/sdb5 | grep "Free";
stat folder #查看文件或目录的inode和信息;
  • 文件读取
    (1)对于EXt2文件系统,当要读取一个文件内容时,先在inode中查找文件内容所在的block,然后把所有的block内容读取出来;
    在这里插入图片描述
    (2)对于FAT文件系统,它没有inode,每一个block中存储这下一个block
    的编号;
    在这里插入图片描述

  • 磁盘碎片:指一个文件内容所在的block过于分散,导致磁盘磁头移动距离过大,从而降低磁盘的读写性能;

  • 目录
    在建立一个目录时,会分配一个inode与最少一个block,block记录的内容时目录下所有文件的inode编号以及文件名;

  • 日志
    如果突然断电,那么文件系统将会错误,数据没有真正写入block中;ext3/ext4文件系统引入了日志功能,用于修复文件系统;

  • 目录配置
    最基础的三个目录:
    (1)/根目录
    (2)/usr :所有系统默认的软件都会安装到这个目录
    (2) /var: 存放系统或程序运行过程中的数据文件;

5.文件

  • 用户分为三种:文件拥有者、群组以及其它人;
    例如 drwxr-xr-x 3 root root 17 May 6 00:14 .config,
    drw… :文件类即权限
    3: 链接
    root:文件拥有者;
    root:文件所属群组;

5.1 修改权限

(1)r:4 , w:2, x:1;
chmod [ugoa] [±=] [rwx] file
-u拥有者 -g所属群组 -o 其他人 -a所有人
-+ 添加权限 --移除权限 -=设定权限
chmod a+w file

  • 可以通过umask设置或查看默认权限;

5.2链接

ln [-sf] source_filename dist_filename
-s:默认时实体链接,加-s为符号链接(软链接);
注意source_filename的路径必须为绝对路径;
-f:如果目标文件存在时,先删除目标文件;
在这里插入图片描述

注意:1.实体链接限制:不能跨越文件系统,不能对目录进行链接;

5.2获取文件内容

  • tac:与cat相反操作,从最后一行开始打印;
  • od:以字符或十六进制的形式显示二进制文件;

5.3指令与文件搜索

  • which:指令搜索
  • whereis= :搜索命令的二进制文件与man文件;
  • locate:可以使用关键字或者正则表达式对文件进行搜索;locate使用/var/lib/mlocate/这个数据库来进行搜索,它存储在内存中,并且给每天更新一次,所以无法用locate搜索新建文件,可以使用updatedb进行更新数据库;
  • find:可以使用文件属性和权限进行搜索;

6.压缩和解压(需要再看)

7.bash

  • 可以通过shell请求内核提供的服务,Bash正是shell的一种;

7.1变量操作

  • 变量操作:对变量的取用需要在变量前加上 , 或 者 用 ,或者用 ,{}; 如果变量的内容有空格,可以使用双引号或单引号;
  • 也可以使用指令 ( 指 令 ) 的 方 式 将 指 令 的 结 果 赋 值 给 变 量 ; 如 : v e r s i o n = (指令)的方式将指令的结果赋值给变量;如:version= ();version=(uname -r);
  • 也可以使用export将自定义遍历转成环境变量;
  • 变量的声明使用declare命令:

declare [-aixr] variable
-a:定义为数组类型
-i: 整形类型
-x:环境变量
-r:定义为readonly类型;
使用[]来对数组进行索引操作;
array[1]=a

  • 数据流重定向
    标准输入(stdin ) 0 <或<<
    标志错误输出(stderr) 2 2>或2>>

如果需要将标准输出以及标准错误输出同时重定向到一个文件,需要将某个输出转换为另一个输出,例如2>&1表示将标准错误输出转换为标准输出;

find /home  -name .bashrc > list 2>&1

8、管道指令

  • 管道:一个命令的标准输出作为另一个命令的标准输入;|

8.1提取指令

  • cut对每一行数据进行切分,取出想要的部分;切分过程一行一行的进行;
cut
-d:设置分隔符
-f:经过-d分割后,使用-f n取出第n个区间
-c:以字符为单位取出区间;

export  | cut -c 12-    "取出第12个字符以后的所有字符串;
  • sort排序、uniq去重指令

8.2双向输出重定向

  • 使用tee 指令,一个输出会同时传送到文件和屏幕上;
tee [-a]  file  #从标准输入获得输入数据;
ls | tee -a file

8.3字符转换指令

  • tr用来删除一行中的字符,或者进行替换
tr [-ds]  SET1...
-d :删除指定的字符;
last | tr '[a-z]' '[A-Z]'   //将last输出的信息所有小写转换为大写;
  • col将tab字符转换为空格字符
col [-xb]
-x:将tab键转换为对等的空格键;
  • expand:将tab转换为一定数量的空格,默认为8;
  • join:将相同的数据的那一行合并在一起; join [-ti12] file1 file2;
  • paste:直接将两行粘贴在一起;
  • split:将一个文件划分为多干文件;

9.正则表达式

  • grep:使用正则表达式进行全局查找并打印;
grep [-acinv]  [--color=auto]  搜索字符串   filename
-c:统计匹配到行的个数
-i:忽略大小写 
-n:  输出行号
-v :反向选择;
--color=auto  :找到的关键字加颜色显示;
  • 实例:正则表达a{m,n} 用来匹配字符a的m~n次,这里需要将{和}进行转义,因为它们在shell中右特殊的意义;
grep -n 'a\{2,5\}' regular_express.txt
  • printf:用于格式化输出,在给printf传输数据时,需要使用$()形式;
printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt)

9.1、awk命令

awk命令记录

10.进程管理

  • ps aux :查看所有进程

  • ps -l :查看自己的进程

  • ps aux | grep treadx 查看特定的进程

  • pstree :查看进程树

  • pstree -A 查看所有进程树;

  • top -d 2 :没两秒钟刷新一次;

  • netstat:查看占用端口的进程

  • netstat -anp | grep port 查看特定端口的进程

状态说明
R正在执行或者可执行,此时进程位于执行队列中;
D不可中断阻塞(Uninterruptible sleep),通常为IO阻塞;
S可中断阻塞的(interruptible sleep),此时进程正在等待某个事件完成;
Z僵尸(zombie),进程已经终止但是尚未被其父进程获取信息;
T结束,进程即可以被作业控制信号结束,也可以是被正追踪;

在这里插入图片描述

10.SIGCHLD

  • 当一个子进程改变了它的状态时(停止运行,继续运行或退出),有两件事会发生在父进程中:
    (1)得到SIGCHLD信号;
    (2)waitpid()或者wait()调用会返回;
    其中子进程发送的SIGCHLD信号包含了子进程的信息,比如进程ID、进程状态、进程使用CPU的时间等等;

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

10.1wait()

pid_t wait(int *status)

  • 父进程调用wait()会一直阻塞,直到收到一个子进程退出的SIGCHLD信号;之后wait()函数会销毁子进程并返回;
  • 如果成功,返回被收集的子进程ID;
  • 参数Status用来保存被收集的子进程退出时的一些状态;

10.2、waitpid()

pid_t waitpid(pid_t pid, int *status, int options)

  • 作用和wait()完全相同;
    pid参数指示一个子进程的ID,表示只关心这个子进程退出的SIGCHLD信号;

10.3、孤儿进程和僵尸进程

  • 孤儿进程
    (1)一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程就称为孤儿进程;
    (2)孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作;由于已被init进程收养,所以孤儿进程不会对系统造成危害;

  • 僵尸进程
    (1)如果子进程退出,而父进程并没有调用wait()或waitpid()函数,那么子进程的进程描述符仍然保存在系统中,这种进程称为僵尸进程;
    (2)系统所能使用的进程号有限,如果产生大量的僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程;
    (3)要消除僵尸进程,只需要将其父进程杀死,此时的僵尸进程就会变为孤儿进程,从而被init进程所收养,这样init进程就会释放所有僵尸进程所占有的资源,从而结束僵尸进程;

参考:linux

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐