参考linux命令大全一幅图秒懂LoadAverage(负载)

1 查看文件夹

1.1 查看文件夹下所有文件的数量

(1)统计当前目录下文件的个数(不包括目录)
#ls -l | grep "^-" | wc -l
(2)统计当前目录下文件的个数(包括子目录)
#ls -lR| grep "^-" | wc -l
(3)查看某目录下文件夹(目录)的个数(包括子目录)
#ls -lR | grep "^d" | wc -l

1.2 查看文件夹下文件的大小

#查看文件夹下所有文件的大小
du -sh
#查看文件夹下每个文件的大小
du -sh *

1.3 改变文件属性chattr命令

Linux chattr命令用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:

a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。

用chattr命令防止系统中某个关键文件被修改:

centos 实时查询文件打开数 centos查看文件数量_centos

在使用root用户删除服务器上的一个文件时,被系统告知:Operation not permitted。
甚至不能使用chmod给777权限。

上面执行的chmod命令,其底层实现是chattr命令,用此命的功能更为强大,甚至可以锁定文件,即使root用户也操作不了此文件。

chattr是用来更改文件属性。
lsattr可用来查看文件的属性。

可以发现当前文件有个i属性,查阅命令帮助文档可以看到有i属性的文件是不能修改的,更不可被删除,即使是root用户也不可。

既然知道了文件不能删除的原因是加了i属性,所以相应的解决方案就是把文件的i属性去除,然后再删除。

centos 实时查询文件打开数 centos查看文件数量_文件系统_02

1.4 umask

从另外的机器访问nfs创建的文件,属于其他用户。

在linux系统中,我们创建一个新的文件或者目录的时候,这些新的文件或目录都会有默认的访问权限,umask命令与文件和目录的默认访问权限有关。
若用户创建一个文件,则文件的默认访问权限为 -rw-rw-rw-。
若用户创建一个目录,则目录的默认访问权限为 drwxrwxrwx。
而umask值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值。

用户权限+组权限+其他用户权限
-rwxrwxrwx=777
r:read就是读权限 --数字4表示
w:write就是写权限 --数字2表示
x:excute就是执行权限 --数字1表示
这里总共会有10个"-",
第一个表示文件类型,如该文件是文件(-表示),文件夹(d表示),连接文件(l表示)。
后面9个按照三个一组分。

centos 实时查询文件打开数 centos查看文件数量_物理内存_03

一、查看系统的umask

# umask
0022
可以看到umask值为0022。
其中第一个0与特殊权限有关,可以暂时不用理会。
后三位022则与普通权限(rwx)有关。

(1)第一个0与用户(user)权限有关,表示从用户权限减0,也就是权限不变,所以文件的创建者的权限是默认权限(rw-)。
(2)第二个2与组权限(group)有关,表示从组的权限减2,由于w=2,所以群组的默认权限为(r- -)。
(3)最后一位2则与系统中其他用户(others)的权限有关,由于w=2,所以需要从其他用户默认权限(rw)减去2,也就是去掉写(w)权限,则其他人的默认权限为(r- -)。

则创建文件的最终默认权限为 (-rw-r--r--)。
同理,最终创建目录的默认访问权限为 (drwxr-xr-x)。

二、临时更改umask
可以通过命令 umask 值 的方式来更改umask值,比如我要把umask值改为027,则使用命令 umask 027 即可。改成027后,用户权限不变,群组权限减掉2,也就是去掉写(w)权限,其他用户减7,也就是去掉读写执行权限(rwx),所以其他用户没有访问权限。

-rw-r-----
drwxr-----

这种方式并不能永久改变umask值,只是改变了当前会话的umask值,打开一个新的terminal输入umask命令,可以看到umask值仍是默认的0022。

三、永久更改
永久改变umask值,则可以修改文件/etc/bashrc,在文件中添加一行 umask 0027 。

2 查看硬件

2.1 查看磁盘空间大小

#df -h

(1)tmpfs

tmpfs是 Linux/Unix 系统上的一种基于内存的文件系统。 tmpfs 可以使用您的内存或 swap 分区来存储文件。在 Redhat/CentOS 等 linux 发行版中默认大小为物理内存的一半。例如下面的案例中,我执行 df -h 的服务器是8G 内存。

centos 实时查询文件打开数 centos查看文件数量_文件系统_04

首先我们要说明, tmpfs 既可以使用物理内存,也可以使用交换分区,因为 tmpfs 使用的是 “ 虚拟内存 ” 。 Linux 内核的虚拟内存同时来源于物理内存和交换分区,主要由内核中的 VM 子系统进行调度,进行内存页和 SWAP 的换入和换出操作, tmpfs 自己并不知道这些页面是在交换分区还是在物理内存中。

(2)udev
udev是一种工具,它能够根据系统中的硬件设备的状况动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下,使用udev后,在/dev下面只包含系统中真实存在的设备。它于硬件平台无关的,位于用户空间,需要内核sysfs和tmpfs的支持,sysfs为udev提供设备入口和uevent通道,tmpfs为udev设备文件提供存放空间。

(3)overlay

overlayfs文件系统类似于aufs,相比aufs,overlay实现更简洁,很早就合入了linux主线, 合入主线后overlayfs修改为overlay。docker 使用overlay文件系统来构建和管理镜像与容器的磁盘结构。

centos 实时查询文件打开数 centos查看文件数量_centos 实时查询文件打开数_05


OverlayFS是一种堆叠文件系统,它依赖并建立在其它的文件系统之上,不直接参与磁盘空间结构的划分,仅将原来文件系统中不同目录和文件进行“合并”。因此OverlayFS更像是一个粘合剂,输出多个文件系统目录的“合集”。

2.2 查看网卡是千兆还是百兆

(1)先查网卡ifconfig,如查询结果eth2。

(2)然后ethtool是Linux下用于查询及设置网卡参数的命令。
#ethtool eth2 | grep Speed
输出Speed: 1000Mb/s
表示千兆网卡

2.3 查看每个物理CPU内核个数

(1)查看每个物理CPU中core的个数

grep "cpu cores" /proc/cpuinfo|uniq
或
cat /proc/cpuinfo | grep "cpu cores" | uniq

(2)查看逻辑CPU的个数

cat /proc/cpuinfo | grep "processor" | wc -l

#总核数 = 物理CPU个数 X 每颗物理CPU的核数
#总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

3 crontab 命令

用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然可以重启 cron 来马上执行

而 linux 任务调度的工作主要分为以下两类:
(1)系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存。
(2)个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信息,这些工作可由每个用户自行设置 。

3.1 语法

语法crontab [ -u user ] file
语法crontab [ -u user ] { -l | -r | -e }

其中
-e : 执行文字编辑器来设定时程表。
-r : 删除目前的时程表。
-l : 列出目前的时程表。

时间格式如下:f1 f2 f3 f4 f5 program
其中
f1 是表示分钟,
f2 表示小时,
f3 表示一个月份中的第几日,
f4 表示月份,
f5 表示一个星期中的第几天,
program 表示要执行的程序。

当f1为*时表示每分钟都要执行program,f2为*时表示每小时都要执行程序,类推。
当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a 到第b小时都要执行,类推。
当f1为*/n时表示每n分钟个时间间隔执行一次,f2 为*/n表示每n小时个时间间隔执行一次,类推。
当f1为a,b,c,...时表示第a,b,c,...分钟要执行,f2为a,b,c,...时表示第 a,b,c...个小时要执行,类推。

centos 实时查询文件打开数 centos查看文件数量_top命令_06


centos 实时查询文件打开数 centos查看文件数量_文件系统_07

3.2 实例

(1)待执行的程序
#vi test.py

for i in range(3):
	print(i)

#python /root/test.py >> /root/kkk.txt

(2)加入定期执行
每一分钟执行一次
#crontab -e

* * * * * python /root/test.py >> /root/kkk.txt

4 yum的使用

其中yum install安装软件
其中yum remove卸载软件

Linux升级命令有两个分别是yum upgrade和yum update, 这个两个命令是有区别的:
代码如下:yum -y update
升级所有包同时也升级软件和系统内核

代码如下:yum -y upgrade
只升级所有包,不升级软件和系统内核

(1)nslookup

一个监控网络中DNS服务器是否能正确实现域名解析的命令行工具。

nslookup 命令是 bind-utils 包的一部分

#yum install bind-utils

centos 实时查询文件打开数 centos查看文件数量_文件系统_08


(2)traceroute

跟踪路由,用于确定IP数据报访问目标所采取的路径。

#yum install traceroute

CMD>tracert www.baidu.com

下载后离线安装

#yum install --downloadonly --downloaddir=/root -y postgresql12-server

#yum localinstall xxx.rpm

4.1 epel-release的卸载重装

(1)卸载
yum remove epel-release

(2)清空epel目录
rm -rf /var/cache/yum/x86_64/7/epel/

(3)安装
yum install  epel-release

5 监控指标

5.1 CPU使用情况top -n1

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。

top-n1命令表示仅仅显示一次!

centos 实时查询文件打开数 centos查看文件数量_文件系统_09

一、top命令的第一行
top - 10:43:39 up 1:14, 2 users, load average: 0.01, 0.03, 0.00
系统当前时间 、系统到目前为止已运行的时间、当前登录系统的用户数量、系统负载(任务队列的平均长度)三个值分别为1分钟、5分钟、15分钟前到现在的平均值【这三个一般会小于1,如果持续高于5,请仔细查看那个程序影响系统的运行】。

我们都知道load average分别代表最近一分钟、最近5分钟、最近15分钟的负载。但是有的负载值才0.01,有的负载值可以到1,有的甚至可以到5.这到底是什么意思呢?当负载数大于1的时候是不是就预示着系统负载很高?

先查看一下cpu核数
cat /proc/cpuinfo |grep "cpu core"|wc -l
16
看一下是否开启超线程
cat /proc/cpuinfo | grep "processor" | wc -l
16
显然没有开启超线程,因为cpu线程数和cpu核数相同。

centos 实时查询文件打开数 centos查看文件数量_centos_10


Linux top命令的load average满负荷是cpu核心的个数,实际上应该比满负荷的值要小,不然会影响性能。如果负载超过cpu核心数的话,则说明系统超负荷运行。

负载最大值和并发执行的线程数有关,大小基本和并发执行的线程数一致。

1、多核心处理器与多处理器的区别。
从性能的角度上理解,一台主机拥有多核心的处理器与另一台拥有同样数目的处理器性能基本上可以认为是相差无几。当然实际情况会复杂得多,不同数量的缓存、处理器的频率等因素都可能造成性能的差异。

但即便这些因素造成的实际性能稍有不同,其实系统还是以处理器的核心数量计算负载均值 。这使我们有了两个新的法则:

(1)“有多少核心即为有多少负荷”法则: 在多核处理中,你的系统均值不应该高于处理器核心的总数量。

(2)“核心的核心”法则: 核心分布在分别几个单个物理处理中并不重要,其实两颗四核的处理器 = 四个双核处理器 = 八个单处理器。所以,它应该有八个处理器内核。

二、top命令的第二行
Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie
所有启动的进程数、正在运行的进程数、挂起的进程数、停止的进程数、僵尸进程数。
三、top命令的第三行
%Cpu(s): 1.4 us, 4.2 sy, 0.0 ni, 94.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

us,user: time running un-niced user processes 用户空间占用CPU百分比
sy,system: time running kernel processes 内核空间占用CPU百分比
ni,nice: time running niced user processes 用户进程空间内改变过优先级的进程占用CPU百分比
wa,IO-wait: time waiting for I/O completion 等待输入输出的CPU时间百分比
hi: time spent servicing hardware interrupts 硬件中断
si: time spent servicing software interrupts 软件中断
st: time stolen from this vm by the hypervisor

四、top命令第四行

MiB Mem : 3827.9 total, 3545.2 free, 82.5 used, 200.2 buff/cache

物理内存总量、空闲物理内存、已使用的物理内存、内核缓存内存量。

五、top命令第5行

MiB Swap: 100.0 total, 100.0 free, 0.0 used. 3609.9 avail Mem

交换区总量、“空闲交换区总量、已使用交互区总量、缓冲的交换区总量。

六、top命令第6行

centos 实时查询文件打开数 centos查看文件数量_top命令_11

PID--------进程ID 
USER-------进程所有者
PR---------优先级priority,越小越被执行
NI---------nice值,负值表示高优先级,正值表示低优先级  
VIRT-------进程使用的虚拟内存总量,单位为KB。  
RES--------该进程使用的物理内存的大小,单位为KB。  
SHR--------共享内存大小,单位为KB。 
S----------进程状态 
%CPU-------上次更新到现在的CPU时间占用百分比 
%MEM-------进程使用的物理内存百分比    
TIME+------进程使用CPU总时间  
COMMAND----命令名、命令行

5.2 查看磁盘IO情况iostat

iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析

#iostat显示所有设备负载情况

centos 实时查询文件打开数 centos查看文件数量_centos 实时查询文件打开数_12


cpu属性值说明

CPU有两种工作模式即系统模式(核心态)和用户模式(用户态)。

(1)内核模式下,应用可以直接存取内存,能够执行任何CPU指令。一般来说驱动运行在该模式下。内核模式的应用一旦崩溃,整个操作系统都会崩溃。所以驱动必须要非常稳定,否则蓝屏常在你身边。

(2)用户模式就是我们一般应用所在的模式。用户模式下,应用想要存取硬件或者内存,必须通过系统API。由于与底层被隔离开来,所以用户模式下的应用崩溃通常不会影响到系统正常运行。

%user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
%system:CPU处在系统模式下的时间百分比。
%iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
%idle:CPU空闲时间百分比。

如果%iowait的值过高,表示硬盘存在I/O瓶颈。
如果%idle值高,表示CPU较空闲。
如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量。
如果%idle值持续低于10,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU。

cpu属性值说明:

tps:该设备每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read: 读取的总数据量;
kB_wrtn:写入的总数据量;

5.3 进程使用情况ps -aux

ps -aux | grep python3

centos 实时查询文件打开数 centos查看文件数量_centos_13

USER:启动该进程的用户账号名称
PID:该进程的ID号,在当前系统中是唯一的
%CPU:CPU占用的百分比
%MEM:内存占用的百分比
VSZ:占用虚拟内存(swap空间)的大小,单位KB。
RSS:占用常驻内存(物理内存)的大小,单位KB。
TTY:该进程在哪个终端上运行。?表示未知或不需要终端。
STAT:显示进程当前的状态。
START:启动该进程的时间。
TIME:该进程占用CPU的时间。
COMMAND:启动该进程的命令的名称。

(1)VSZ:指的是进程内存空间的大小,并不代表进程真正用到的内存,因为有些空间会仅在页表中挂个名,也就是说只是虚拟存在着,只有真正用到的时候内核才会把虚拟页面和真正的物理页面映射起来。
(2)RSS:(resident set size)表示常驻内存的大小,但是由于不同的进程之间会共享内存,所以把所有进程RSS进行累加的方法会重复计算共享内存,得到的结果是偏大的。

例如:如果进程A的二进制文件大小为500KB,并且链接到了2500KB的共享库,有200KB的stack/heap大小,这200KB中又有100KB位于内存中,100KB位于SWAP空间中,并且加载了1000KB的共享库和400KB的自身二进制文件。

RSS=400K + 1000K + 100K = 1500K
VSZ=500K + 2500K + 200K = 3200K

6 查看

6.1 开机历史记录

查看linux系统的开机时间/重启历史记录
1、who -b命令
[root@rusky opt]# who -b —查看最后一次(上次)系统启动的时间
system boot Dec 27 05:06
2、who -r命令
[root@rusky opt]# who -r —查看最后一次(上次)系统启动的时间,及运行级别
run-level 5 Dec 27 05:06
3、last reboot命令

6.2 linux删除文件后空间没有释放问题lsof

参考Linux lsof命令详解 参考lsof命令使用详解(原创) 参考解决linux删除文件后空间没有释放问题 将这个工具称之为lsof名副其实,因为它是指“列出打开文件(lists openfiles)”。
而有一点要切记,在Unix中一切(包括网络套接口)都是文件。

lsof(List Open Files)用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件,是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息。

例如lsof +L1

6.3 ulimit

用于控制由shell启动的进程的可用资源。
参考Linux中ulimit使用

6.4 自动删除n天前的日志文件

代码文件auto-del-5-days-ago-log.sh

#!/bin/sh

#1、添加文件可运行权限
#chmod +x /data/shell/bin/auto-del-5-days-ago-log.sh
#2、打开系统 定时任务的配置
# crontab -e
#3、添加配置 每天0:00执行任务
# 0 0 * * * /root/nezha-proxy/auto-del-5-days-ago-log.sh

DIR=$(cd `dirname $0` ; pwd)
echo "删除5天前的log日志" $DIR/Logs/
find $DIR/Logs/ -mtime +5 -name "*.log" -exec rm -rf {} \;

代码分析如下

-mtime +5目录中更改时间在5日以前的普通文件
-name 文件名称符合格式的文件
-exec 对符合条件的文件,执行命令

6.5 批量杀死指定进程

ps -ef | grep ttlsa | awk '{ print $2 }' | sudo xargs kill -9

7 centos7设置中文语言

echo $LANG查看当前设置的语言
locale -a查看本地安装的语言,是否有zh
export LANG="zh_CN.UTF-8"临时设置