音乐播放器
Great Wei
 
文章 标签
16

Powered by Gridea | Theme: Fog

Linux

sync

为了加快对磁盘文件的读写速度,位于内存中的文件数据不会立即同步到磁盘,因此关机之前需要先进行 sync 同步操作。

PATH

可以在环境变量 PATH 中声明可执行文件的路径,路径之间用 : 分隔。

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin

磁盘的文件名

Linux 中每个硬件都被当做一个文件,包括磁盘。磁盘以磁盘接口类型进行命名,常见磁盘的文件名如下:
IDE 磁盘:/dev/hd[a-d]
SATA/SCSI/SAS 磁盘:/dev/sd[a-p]
其中文件名后面的序号的确定与系统检测到磁盘的顺序有关,而与磁盘所插入的插槽位置无关。

分区

磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。

MBR

MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot record, MBR)及分区表(partition table),其中主要开机记录占 446 bytes,分区表占 64 bytes。
分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它使用其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑分区。
Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。

文件系统

分区与文件系统

对分区进行格式化是为了在分区上建立文件系统,一个分区通常只能格式化为一个文件系统,但是磁盘阵列等技术可以将一个分区格式化为多个文件系统。

组成

最主要的几个组成部分如下:
innode:一个文件占用一个inode,记录文件的属性,同时记录此文件的内容所在block编号。
block:记录文件内容,文件太大时,会占用多个block.
除此之外还包括
superblock:记录文件系统的整体信息,包括inode和block的总量,剩余量,使用量,以及文件系统的格式与相关信息等;
block bitmap:记录block是否被使用的位图。

文件读取

对于EXT2文件系统,当要读取一个文件的内容时,先在inode中查找文件内容所在的所有block,然后把所有的内容读出来。

而对于FAT文件系统,它没有inode,每个block中存储着下一个block的编号。

磁盘碎片

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

block

在Ext2文件系统中所支持的block大小有1k,2k及4k三种,不同的大小限制了单个文件和文件系统的最大大小。
一个block只能被一个文件所使用,未使用的部分直接浪费了。因此如果需要存储大量的小文件,那么最好选用比较小的block。

inode

inode具体包含以下信息:
权限、拥有者/群组、容量、建立或状态改变时间、最近读取时间、最近修改时间、定义文件特性的旗标、改文件真正内容的指向。

inode具有以下特点:
每个inode大小均固定为128bytes (新的ext4 与 xfs可设定到256bytes)
每个文件都仅会占用一个inode

inode 中记录了文件内容所在的 block 编号,但是每个 block 非常小,一个大文件随便都需要几十万的 block。而一个 inode 大小有限,无法直接引用这么多 block 编号。因此引入了间接、双间接、三间接引用。间接引用让 inode 记录的引用 block 块记录引用信息。

目录

建立一个目录时,会分配一个inode与至少一个block,block记录的内容是目录下所有文件的inode编号以及文件名。
可以看到文件的inode本身不记录文件名,文件名记录在目录中,因此新增文件,删除文件,更改文件名这些操作与目录的写权限有关。

日志

如果突然断电,那么文件系统会发生错误,例如断电前只修改了block bitmap,而还没有将数据真正写入block中。ext3/ext4文件系统引入了日志功能,可以利用日志来修复文件系统。

挂载

挂载利用目录作为文件系统的进入点,也就是说,进入目录之后就可以读取文件系统的数据。

目录配置

为了使不同linux发行版本的目录结构保持一致性,FHS规定了Linux的目录结构。最基础的三个目录如下:
/root /usr /var

文件

文件属性

用户分为三种:文件拥有者、群组以及其它人,对不同的用户有不同的文件权限。

使用 ls 查看一个文件时,会显示一个文件的信息,例如 drwxr-xr-x 3 root root 17 May 6 00:14 .config,对这个信息的解释如下:

drwxr-xr-x:文件类型以及权限,第 1 位为文件类型字段,后 9 位为文件权限字段
3:链接数
root:文件拥有者
root:所属群组
17:文件大小
May 6 00:14:文件最后被修改的时间
.config:文件名
常见的文件类型及其含义有:

d:目录
-:文件
l:链接文件
9 位的文件权限字段中,每 3 个为一组,共 3 组,每一组分别代表对文件拥有者、所属群组以及其它人的文件权限。一组权限中的 3 位分别为 r、w、x 权限,表示可读、可写、可执行。

文件时间有以下三种:

modification time (mtime):文件的内容更新就会更新;
status time (ctime):文件的状态(权限、属性)更新就会更新;
access time (atime):读取文件时就会更新。

文件与目录的基本操作

....

链接

实体链接
在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode。
删除任意一个条目,文件还是存在,只要引用数量不为 0。
有以下限制:不能跨越文件系统、不能对目录进行链接。

ln /etc/crontab .
ll -i /etc/crontab crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
符号链接
符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式。

当源文件被删除了,链接文件就打不开了。

因为记录的是路径,所以可以为目录建立符号链接。

ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab

进程管理

查看进程:

ps -l 查看自己的进程
ps aux 查看系统所有进程
ps aux | grep php 查看特定进程
pstree -A 查看所有进程树
top 实时显示进程信息
top -d 2 两秒刷新一次
netstat

查看占用端口的进程

netstat -anp | grep port

进程状态

SIGCHLD

当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:

得到 SIGCHLD 信号;
waitpid() 或者 wait() 调用会返回。
其中子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等。

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

wait()

父进程调用 wait() 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,之后 wait() 函数会销毁子进程并返回。

如果成功,返回被收集的子进程的进程 ID;如果调用进程没有子进程,调用就会失败,此时返回 -1,同时 errno 被置为 ECHILD。

参数 status 用来保存被收集的子进程退出时的一些状态,如果对这个子进程是如何死掉的毫不在意,只想把这个子进程消灭掉,可以设置这个参数为 NULL。

waitpid()

作用和 wait() 完全相同,但是多了两个可由用户控制的参数 pid 和 options。

pid 参数指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号。如果 pid=-1 时,那么和 wait() 作用相同,都是关心所有子进程退出的 SIGCHLD 信号。

options 参数主要有 WNOHANG 和 WUNTRACED 两个选项,WNOHANG 可以使 waitpid() 调用变成非阻塞的,也就是说它会立即返回,父进程可以继续执行其它任务。

孤儿进程

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

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

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

僵尸进程

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

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

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

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

系统诊断命令

free

需要学会查看系统内存 未使用的内容 = free + buffers + cached -m 单位转换M -g 单位转换为G

vmstat

分析系统问题
r (running) 列表运行和等待的进程数量,如果长期大于1说明cpu不足,需要cpu。
b 列表等待资源的进程数,如等待I/O,或者内存交换等。

cpu使用状态
us 表示用户进程cpu时间占比,如果长期大于50%,需要考虑优化用户程序。
sy 显示了内核进程cpu时间占比,如果us + sy 大于80%说明可能存在CPU不足。
wa 显示了IO等待所占用的CPU时间的百分比,说明IO等待严重,磁盘大量随机访问造成的,也可能是磁盘或者磁盘访问控制器带宽瓶颈造成的
id cpu处于空闲的百分比

system显示采集间隔中观察到的每秒设备中断数。
in 列表在某一时间间隔中观察到的每秒设备中断数
cs 表示每秒产生的上下文切换次数

memory 内存情况
swpd 切换到内存交换区的内存数量,如果swpd的值不为0,或者比较大,只要si,so的长期为0,系统性能还是正常
free 当前的空闲页面列表中内存数量(k表示)
buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。
cache 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap
si 由内存进入内存交换区数量
so 有内存交换区进入内存数量

IO
bi 从块设备读入数据的总量(读磁盘)(每秒kb)
bo 块设备写入数据的总量(写磁盘)(每秒kb)
这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

dd

模拟读写磁盘操作

top

系统

watch more /proc/net/dev

用于定位丢包,错报情况,以便看望了瓶颈

netstat

查看端口

ping

traceroute ip

路由追踪

dig

查看域名解析

dmesg

查看系统日志

df

查看磁盘剩余空间

du

查看磁盘使用空间

ps

查看进程

tcpdump

抓包

traceroute

路由追踪


请到客户端“主题--自定义配置--配置”中填入leancloud_appID和key