Linux 知识总结3

Linux 开机启动过程?

    1、主机加电自检,加载 BIOS 硬件信息。

    2、读取 MBR 的引导文件(GRUB、LILO)。

    3、引导 Linux 内核。

    4、运行第一个进程 init (进程号永远为 1 )。

    5、进入相应的运行级别。

    6、运行终端,输入用户名和密码。

Linux 有哪些系统日志文件?

比较重要的是

/var/log/messages日志文件。

该日志文件是许多进程日志文件的汇总,从该文件可以看出任何入侵企图或成功的入侵。另外,如果胖友的系统里有 ELK 日志集中收集,它也会被收集进去。

journalctl 用来查询 systemd-journald 服务收集到的日志。systemd-journald 服务是 systemd init 系统提供的收集系统日志的服务。journalctl通常用来查询systemd管理的Unit的日志信息。

内容一:journalctl 日志工具的常用用法

journalctl | grep <服务器名关键词>

journalctl -u <服务名> -p <优先级>

journalctl -n <消息数>

journalctl --since=" " --until=" "

内容二:journalctl 日志工具的使用案例

2.1 案例一:列出最近 5 条重要程度在 ERR 及以上的日志信息

# journalctl -p err -n 5

2.2 案例二:列出所有与服务 httpd 相关的日志信息

# journalctl -u httpd

2.3 案例三:列出前 5 个小时内的日志信息

# journalctl --since "2019-05-01 14:00" --until "2019-05-01 19:00"

2.4 案例四:在紧急模式下查看系统日志

# journalctl -xb

在 if-then 中使用测试命令( -gt 等)来比较两个数字。例如

Linux 知识总结3_第1张图片

Linux 知识总结3_第2张图片

Linux 知识总结3_第3张图片

Linux 知识总结3_第4张图片

Linux 知识总结3_第5张图片

Linux 知识总结3_第6张图片

Find命令

Linux 知识总结3_第7张图片

grep 的规则表达式:

Linux 知识总结3_第8张图片

Linux 知识总结3_第9张图片

ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top

linux上进程有5种状态:

    1. 运行(正在运行或在运行队列中等待)

    2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

    3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

    4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

    5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

top 命令

显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等

前五行是当前系统情况整体的统计信息区。

第一行,任务队列信息,同 uptime 命令的执行结果,具体参数说明情况如下:

14:06:23 — 当前系统时间

up 70 days, 16:44 — 系统已经运行了70天16小时44分钟(在这期间系统没有重启过的吆!)

2 users — 当前有2个用户登录系统

load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行,Tasks — 任务(进程),具体信息说明如下:

系统现在共有206个进程,其中处于运行中的有1个,205个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

第三行,cpu状态信息,具体属性说明如下:

5.9%us— 用户空间占用CPU的百分比。3.4%sy— 内核空间占用CPU的百分比。0.0%ni— 改变过优先级的进程占用CPU的百分比90.4%id— 空闲CPU百分比0.0%wa—IO等待占用CPU的百分比0.0%hi— 硬中断(HardwareIRQ)占用CPU的百分比0.2%si— 软中断(SoftwareInterrupts)占用CPU的百分比

备注:在这里CPU的使用比率和windows概念不同,需要理解linux系统用户空间和内核空间的相关知识!

第四行,内存状态,具体信息如下:

32949016ktotal — 物理内存总量(32GB)14411180kused — 使用中的内存总量(14GB)18537836kfree — 空闲内存总量(18GB)169884kbuffers — 缓存的内存量 (169M)

第五行,swap交换分区信息,具体信息说明如下:

32764556ktotal — 交换区总量(32GB)0kused — 使用的交换区总量(0K)32764556kfree — 空闲交换区总量(32GB)3612636kcached — 缓冲的交换区总量(3.6GB)

第六行,空行。

第七行以下:各进程(任务)的状态监控,项目列信息说明如下:

PID— 进程idUSER— 进程所有者PR— 进程优先级NI— nice值。负值表示高优先级,正值表示低优先级VIRT— 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RESRES— 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATASHR— 共享内存大小,单位kbS— 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程%CPU— 上次更新到现在的CPU时间占用百分比%MEM— 进程使用的物理内存百分比TIME+— 进程使用的CPU时间总计,单位1/100秒COMMAND— 进程名称(命令名/命令行)

tar 命令

用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。

弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件


Linux 知识总结3_第10张图片
Linux 知识总结3_第11张图片
Linux 知识总结3_第12张图片

1.root@lap-141:~# sar -u 1 3

15时12分21秒    CPU    %user    %nice  %system  %iowait    %steal    %idle

15时12分22秒    all      8.03      0.00      4.92      0.00      0.00    87.05

'cat /etc/issue' 'uname -a'

cat /proc/version cat /proc/stat

# 由md设备驱动程序控制的RAID设备信息

cat /proc/mdstat

# OS版本信息

'cat /etc/issue''uname -a' cat /proc/version cat /proc/stat

# 由md设备驱动程序控制的RAID设备信息 cat /proc/mdstat

CPU负载‘load average: 0.02, 0.04, 0.05’,具体指的什么意思?

以单核CPU说明:

0.02, 0.04, 0.05 是1分钟、5分钟、15分钟内系统的平均负荷

假设:CPU每分钟最多处理100个进程

当负荷 0.2,则CPU在这1分钟里只处理20个进程

当负荷 1.0,则CPU在这1分钟里正好处理100个进程

当负荷 1.7,则CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理

很显然:单核的话,1.0是一个关键值,当这个值达到0.7,就应当引起注意。问题出在哪里,防止情况恶化

当负荷达到5.0,就表明你的系统有很严重的问题

Linux 知识总结3_第13张图片
Linux 知识总结3_第14张图片

sar -d

Linux 知识总结3_第15张图片

DEV  磁盘设备的名称,如果不加-p,会显示dev253-0类似的设备名称,因此加上-p显示的名称更直接

tps  每秒I/O的传输总数

rd_sec/s  每秒读取的扇区的总数

wr_sec/s  每秒写入的扇区的总数

avgrq-sz  平均每次次磁盘I/O操作的数据大小(扇区)

avgqu-sz  磁盘请求队列的平均长度

await  从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间

svctm  I/O的服务处理时间,即不包括请求队列中的时间

%util  I/O请求占用的CPU百分比,值越高,说明I/O越慢

默认监控: sar 1 1 // CPU和IOWAIT统计状态

(1) sar -b 1 1        // IO传送速率

(2) sar -B 1 1        // 页交换速率

(3) sar -c 1 1        // 进程创建的速率

(4) sar -d 1 1        // 块设备的活跃信息

(5) sar -n DEV 1 1    // 网路设备的状态信息

(6) sar -n SOCK 1 1  // SOCK的使用情况

(7) sar -n ALL 1 1    // 所有的网络状态信息

(8) sar -P ALL 1 1    // 每颗CPU的使用状态信息和IOWAIT统计状态

(9) sar -q 1 1        // 队列的长度(等待运行的进程数)和负载的状态

(10) sar -r 1 1      // 内存和swap空间使用情况

(11) sar -R 1 1      // 内存的统计信息(内存页的分配和释放、系统每秒作为BUFFER使用内存页、每秒被cache到的内存页)

(12) sar -u 1 1      // CPU的使用情况和IOWAIT信息(同默认监控)

(13) sar -v 1 1      // inode, file and other kernel tablesd的状态信息

(14) sar -w 1 1      // 每秒上下文交换的数目

(15) sar -W 1 1      // SWAP交换的统计信息(监控状态同iostat 的si so)

(16) sar -x 2906 1 1  // 显示指定进程(2906)的统计信息,信息包括:进程造成的错误、用户级和系统级用户CPU的占用情况、运行在哪颗CPU上

(17) sar -y 1 1      // TTY设备的活动状态

strace概述

在操作系统中,进程分为用户态进程和内核态进程,应用程序运行在用户态,内核态负责对资源包括网络,磁盘,内存等管理,用户态进程要访问这些资源时,需要通过系统调用陷入内核态,由内核来统一管理和分配


Linux 知识总结3_第16张图片

strace -p pid

跟踪正在执行的进程,正在执行的系统调用,先来熟悉几个查找进程的命令,pidof 查看当前进行运行程序的进程pid,pstree,跟踪当前进程pid查看,进程树关系。


Linux 知识总结3_第17张图片

1.2.2 strace -i

现在在原来-p的基础上,加上-i参数,可以查看系统调用的入口指针。

通过(1.2.1)步骤,重新查看server的pid,并用strace -p pid -i跟踪系统调用并查看系统调用入口指针。


Linux 知识总结3_第18张图片

 strace -t

在原来-p 的基础上加上-t,跟踪系统调用,同时查看系统调用的时间戳。结合步(1.2.1)使用strace -p pid -t 跟踪系统调用,同时查看。

Linux 知识总结3_第19张图片

其中最左侧的是系统调用的时间戳。

其中strace -t 是精确度是时分秒,-tt是精确为s。

用法:strace -p pid -tt

Shell 命令十问十答

1.在 shell 脚本成功执行前,如何中断脚本执行?

解答:我们需要使用exit命令来实现以上描述的情境。exit命令被强制输出非0值时,脚本会报错并退出。在 Unix 环境下的 shell 脚本中,0值表示成功执行。因此,在脚本终止前执行一个不带引号的exit -1命令将使脚本中止。

#!/bin/bashecho "Hello"exit-1echo "bye"

保存文件并执行。

# sh linuxmi.shHellolinuxmi.sh:行3: exit-1: 未找到命令bye

2.如何使用 Linux 命令来移除文件头?

解答:当我们需要删除文件中的指定行时,sed命令可以用来解决该问题。

这个是用来删除文件头(文件的首行)的正确命令。

# sed '1 d' file.txt

好吧,其实sed命令内建的-i开关就可以干这活,就不需要重定向符了吧。

# sed -i '1 d' file.txt

3. 你怎么检查一个文本文件中某一行的长度?

解答:sed命令也可以用来查找文本文件中的某一行或者检查其长度。

sed -n ‘n p’ file.txt可以解决,这里n表示行号,p打印出匹配内容(到标准输出),该命令通常与-n命令行选项连用。那么,怎样来获取长度计数呢?很明显,我们需要通过管道输出给wc命令来计算。

# sed –n 'n p' file.txt | wc –c

要得到文本文件‘linuxmi.txt’的第五行的长度,运行如下命令:

# sed -n '5 p' linuxmi.txt | wc -c

4.假如你是一个员工组的团队领导,为xyz公司工作。公司要求你创建一个dir_xyz目录,让该组成员都能在该目录下创建或访问文件,但是除了文件创建者之外的其他人不能删除文件,你会怎么做?

# mkdir dir_xyz# chmod g+wx dir_xyz# chmod +t dir_xyz

5.你能告诉我一个Linux进程经历的各个阶段吗?

解答:一个 Linux 进程在它的一生中,通常经历了四个主要阶段。

这里是Linux进程要经历的四个阶段。

等待:Linux进程等待资源。

运行:Linux进程当前正在执行中。

停止:Linux进程在成功执行后或收到杀死进程信号后停止。

僵尸:如果该进程已经结束,但仍然留在进程表中,被称为‘僵尸’。

6.Linux中cut命令怎么用?

解答:cut是一个很有用的 Linux 命令,当我们要截取文件的指定部分并打印到标准输出,当文本区域以及文件本身很大时,这个命令很有用。

例如,截取txt_linuxmi文件的前10列。

# cut -c1-10 txt_linuxmi

要截取该文件中的第二,第五和第七列。

# cut -d;-f2 -f5 -f7 txt_linuxmi

7.cmp和diff命令的区别是什么?

解答:cmp和diff命令用来获取相同的东西,但各有侧重。

diff命令输出为了使两个文件一样而应该做的修改。而‘cmp’命令则将两个文件逐字节对比,并报告第一个不匹配的项。

8. 可以用echo命令来替换ls命令吗?

解答:可以的。‘ls’命令可以用‘echo’命令来替代。‘ls’命令列出目录内容,从替换上述命令的角度讲,我们可以使用‘echo *’,两个命令的输出完全一样。

9. 你可能听过 inode 吧。你能简要描述一下 inode 吗?

解答:inode 是一个数据结构,在 Linux 上用于文件标识。每个文件在 Unix 系统上有一个独立的 inode 和一个唯一的 inode 号。

ss命令

基本使用

我们按照使用场景来看下ss的用法。

查看系统正在监听的tcp连接

ss -atr ss -atn #仅ip

查看系统中所有连接

ss -alt

查看监听444端口的进程 pid

ss -ltp | grep 444

查看进程555占用了哪些端口

ss -ltp | grep 555

和某个 IP 的所有连接

ss dst 10.66.224.130

ss dst 10.66.224.130:http

ss dst 10.66.224.130:smtp

ss dst 10.66.224.130:443

查看流量

有很多工具可以看网络流量,但我最喜欢sar。sar是linux上功能最全的监控软件。如图,使用sar -n DEV 1即可每秒刷新一次网络流量。

Linux 知识总结3_第20张图片

查看占流量最大的 IP

有时候我们发现网络带宽占用非常高,但我们无法判断到底流量来自哪里。这时候,iftop就可以帮上忙了。如图,可以很容易的找出流量来自哪台主机。

Linux 知识总结3_第21张图片

当你不确定内网的流量来源,比如有人在压测,api调用不合理等,都可以通过这种方法找到他。

tcpdump

当我们需要判断是否有流量,或者调试一个难缠的 netty 应用问题,则可以通过抓包的方式去进行进一步的判断。在 Linux 上,可以通过 tcpdump 命令抓取数据,然后使用Wireshark 进行分析。

tcpdump -i eth0 -nn -s0 -v port 80

-i 指定网卡进行抓包

-n 和ss一样,表示不解析域名

-nn 两个n表示端口也是数字,否则解析成服务名

-s 设置抓包长度,0表示不限制

-v 抓包时显示详细输出,-vv、-vvv依次更加详细

1)加入-A选项将打印 ascii ,-X打印 hex 码。

tcpdump -A -s0 port 80

2)抓取特定 IP 的相关包

tcpdump -i eth0 host 10.10.1.1tcpdump -i eth0 dst 10.10.1.20

TIME_WAIT

TIME_WAIT 是主动关闭连接的一方保持的状态,像 nginx、爬虫服务器,经常发生大量处于time_wait状态的连接。TCP 一般在主动关闭连接后,会等待 2MS,然后彻底关闭连接。由于 HTTP 使用了 TCP 协议,所以在这些频繁开关连接的服务器上,就积压了非常多的 TIME_WAIT 状态连接。

某些系统通过 dmesg 可以看到以下信息。

__ratelimit: 2170 callbacks suppressedTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflow

通过ss -s命令查看,可以看到timewait已经有2w个了。

ss -sTotal: 174 (kernel 199)TCP:  20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785

sysctl 命令可以设置这些参数,如果想要重启生效的话,加入/etc/sysctl.conf文件中。

# 修改阈值net.ipv4.tcp_max_tw_buckets = 50000# 表示开启TCP连接中TIME-WAIT sockets的快速回收net.ipv4.tcp_tw_reuse = 1#启用timewait 快速回收。这个一定要开启,默认是关闭的。net.ipv4.tcp_tw_recycle= 1  # 修改系統默认的TIMEOUT时间,默认是60snet.ipv4.tcp_fin_timeout = 10

测试参数的话,可以使用 sysctl -w net.ipv4.tcp_tw_reuse = 1 这样的命令。如果是写入进文件的,则使用sysctl -p生效。

CLOSE_WAIT

CLOSE_WAIT一般是由于对端主动关闭,而我方没有正确处理的原因引起的。说白了,就是程序写的有问题,属于危害比较大的一种。

你可能感兴趣的:(Linux 知识总结3)