linux复习总结
Linux复习总结
前言
在面试中,linux知识点相对于网络和操作系统等知识点没有那么重要;
- 能简单使用一些命令;
- 文件系统相关的原理,inode和block等概念,数据恢复;
- 硬链接和软链接
- 进程管理相关的,僵尸进程与孤儿进程,SIGCHLD;
1.常用命令
- info:它与man类似,它将文档分成以一个个页面,每个页面可以跳转;
- doc: /usr/share/doc存放着软件的一整套说明文件;
- 关机: 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命令
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进程就会释放所有僵尸进程所占有的资源,从而结束僵尸进程;
更多推荐
所有评论(0)