Linux命令大全2
  CZHsu4xuhYFz 2023年11月02日 38 0


ps -aux --sort -rss|head -n 5

linux系统找出4个占用内存最多的进程

ps -aux|grep "D"

找出D状态的进程

ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]';kill -9 Pid

Linux系统找出僵尸进程并杀死僵尸进程

du -sh

linux系统查看目录总大小

du -h –max-depth=0 *

linux系统查看目录下子目录的大小

du -k /var/*|sort -nr //按字节大小排序

Linux系统查看/var目录下面文件的大小

ls -lSh

Linux系统对目录下下文件按大小排序

ps -A -ostat,ppid,pid,cmd | grep -e '^[T]'

linux查看已经停止进程

https://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/iptables

了解iptables防火墙技术详细博客

systemctl stop firewalld.service

centos7临时关闭防火墙

systemctl disabled firewalld.service

centos7永久关闭防火墙

firewall-cmd --state

centos7查看防火墙状态

systemctl start firewalld.service

centos7开启防火墙

iptables -t filter -nvxL

Linux查看防火墙过滤表(filter)的规则

iptables -t mangle -nvxL

Linux查看防火墙过滤表(mangle)的规则

iptables -t nat -nvxL

Linux查看防火墙过滤表(nat)的规则

iptables -t raw -nvxL

Linux查看防火墙过滤表(raw)的规则

iptables -t raw --line -nvxL INPUT

序号列出Linux查看防火墙过滤表(filter)中INPUT链的规则

iptables -t filter -F INPUT

删除filter表中INPUT链中的所有规则的命令

iptables -t filter -F

删除filter表中所有所有规则(所有链规则都被删除)

iptables -t filter -I INPUT -s 192.168.1.1 -j DROP

丢弃来至192.168.1.1的访问

iptables -t filter -I INPUT -s 192.168.1.1,192.168.1.2 -j DROP

丢弃来至192.168.1.1,192.168.1.2

IP的访问(-s匹配多个IP用逗号隔开)

iptables -t filter -I INPUT -s 192.168.1.0/24 -j DROP

丢弃来至

192.168.1.0/24网段的访问

iptables -t

filter -A INPUT ! -s 192.168.1.146 -j ACCEPT

只要发往本机的报文的源地址不是192.168.1.146,就接受报文(!:表示取反)

iptables -t filter -I INPUT -s 192.168.1.1 -d 10.198.1.2 -j DROP

丢弃从192.168.1.1发往192.168.1.2这个IP的报文(IP1位源地址,IP2位目标地址,规则设在IP2服务器上)

iptables -t filter -I INPUT -d 192.168.1.1 -j DROP

丢弃发往目标地址1的所有数据包,源地址不指定默认位0.0.0.0(-d:指定目标地址)

iptables -t filter -I INPUT -s 192.168.1.1 -d 10.198.1.2 -p tcp -j DROP

丢弃从192.168.1.1发往192.168.1.2

IP的报文(IP1位源地址,IP2位目标地址,规则设在IP2服务器上,-p:匹配协议)

iptables -t filter -I INPUT 2 -s 192.168.1.2 -j DROP

在编号2出插入一条规则,之前编号为2的规则下移为编号3

iptables -t filter -A INPUT -s 192.168.1.2 -j DROP

在filter表的INPUT链中追加一条丢弃规则

iptables -t filter -D INPUT 3

删除编号为3的规则

iptables -t filter -R INPUT 2 -s 192.168.1.2 -j ACCEPT

把编号为2的链由DROP改为ACCEPT

iptables -t filter -P FORWARD DROP

把iptables防火墙中filter表中的FORWARD链改为DROP

watch -n -1 "cat /sys/devices/system/cpu/cpu*/cpufreq/sacling_cur_freq"

查看CPu动态频率

iostat -d -x -k 1

产看磁盘的详细IO情况

iostat -d -k 1

查看TPS和吞吐量信息(磁盘读写速度单位为KB)

iostat -d -m 2

查看TPS和吞吐量信息(磁盘读写速度单位为MB)

netstat -atunlpresc

查看网络端口

parted /dev/sdb

parted对sdb盘进行分区

mklabel gpt

把sdb盘设置成gpt分区

mklabel  msdos

把sdb盘设置成MBR分区

mkpart primary 0 -1

将sdb盘整体划分成一个主分区

mkpart primary 0 1024M

将sdb盘划分成第一个主分区,分区大小1024M

mkpart primary 1024M 10240M

将sdb盘划分成第二个主分区,分区大小9216M

rm 1

删除主分区1

top

在top监视下按P,按照CPU占用排序;按M则按照内存占用排序,按1查看每个逻辑CPU的负载情况

top -d 2

每隔2秒显式所有进程的资源占用情况

top -c

每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名),不断按P对进程按照CPU占用量排名

top -Hp pid

查看进程下的所有线程的信息

top -H

然后敲1,可以看到每个CPU的占有率情况(查看所有线程)

cat /sys/block/sda/queue/nr_requests

查看sda盘的请求IO队列大小(nr_requests:请求的IO调度队列大小,I/O调度器中的最大I/O操作数是nr_requests

* 2。读和写是分开的)

cat /sys/block/sda/device/queue_depth

查看落再底层sda盘上的队列深度(queue_depth:请求在磁盘设备上的队列深度,已经分配到底层设备的I/O操作是queue_depth)

ll /etc |sort -k 2 -nr |grep -v "total"

把/etc下面目录文件所拥有的个数从大到小排序显示(-k:以第几列为参数值排序,-v:过虑掉不要的关键字行)

ll /etc |sort -k 5 -nr |grep -v "total"

把/etc下面目录文件容量按照大到小排序显示(-k:以第几列为参数值排序,-v:过虑掉不要的关键字行)

vmstat

系统整体的CPU使用率、上下文切换次数、中断次数,海包括处于运行和不可中断状态的进程

vmstat:工具可以查看系统的内存、CPU 上下文切换以及中断次数:

vmstat 1 //每隔1秒输出

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

 r  b   swpd   free   buff    cache     si   so   bi   bo    in     cs     us   sy  id  wa  st

 3  0     0   157256 3241604 5144444    0    0    20     0   26503  33960  18   7   75   0   0

17  0     0   159984 3241708 5144452    0    0    12     0   29560  37696  15   10  75   0   0

 6  0     0   162044 3241816 5144456    0    0     8   120   30683  38861  17   10  73   0   0

cs:则为每秒的上下文切换次数。

in:则为每秒的中断次数。

r:就绪队列长度,正在运行或等待 CPU 的进程。

b:不可中断睡眠状态的进程数,例如正在和硬件交互

sar

系统整体的CPU使用率,包括可配置的历史数据

ps

每个进程的状态和CPU使用率

htop

top增强版

lsoft

文件打开最大数

pcstat

查看文件在内存中的缓存大小以及缓存比例(pcstat

是一个基于 Go 语言开发的工具,所以安装它之前,你首先应该安装 Go 语言)

pidstat:查看进程I/O

pidstat -w 5 

//选项查看具体进程的上下文切换次数

pidstat -wt 1 //表示输出线程上下文切换的指标

pidstat -w -p 3217281 1

10:19:13      UID       PID   cswch/s nvcswch/s  Command

10:19:14        0   3217281      0.00     18.00  stress

10:19:15        0   3217281      0.00     18.00  stress

10:19:16        0   3217281      0.00     28.71  stress

其中cswch/s和nvcswch/s表示自愿上下文切换和非自愿上下文切换。

自愿上下文切换:是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。

非自愿上下文切换:则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换

-d:显示I/O统计信息

-r:显示各个进程的内存使用统计

-s:堆栈的利用率

-u: CPU利用率

-w:任务切换状况

-v:显示任务的线程数和文件描述符数

iotop


mpstat

CPU动态使用情况

dstat

I/O状况查询

top

系统平均负载:是处于可运行或不可中断状态的平均进程数。

可运行进程:使用 CPU 或等待使用 CPU 的进程

不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误)

系统平均负载升高的原因

一般来说,系统平均负载升高意味着 CPU 使用率上升。但是他们没有必然联系,CPU 密集型计算任务较多一般系统平均负载会上升,但是如果 IO 密集型任务较多也会导致系统平均负载升高但是此时的 CPU 使用率不一定高,可能很低因为很多进程都处于不可中断状态,等待 CPU 调度也会升高系统平均负载

CPU性能排查思路

top 系统CPU => vmstat 上下文切换次数 => pidstat 非自愿上下文切换次数 =>

各类进程分析工具(perf strace ps execsnoop pstack)

top 用户CPU => pidstat 用户CPU => 一般是CPU计算型任务

top 僵尸进程 =>  各类进程分析工具(perf strace ps execsnoop pstack)

top 平均负载 => vmstat 运行状态进程数 =>  pidstat 用户CPU => 各类进程分析工具(perf strace ps execsnoop pstack)

top 等待IO CPU => vmstat 不可中断状态进程数  => IO分析工具(dstat、sar -d)

top 硬中断 => vmstat 中断次数 => 查看具体中断类型(/proc/interrupts)

top 软中断 => 查看具体中断类型(/proc/softirqs) => 网络分析工具(sar -n、tcpdump) 或者 SCHED(pidstat 非自愿上下文切换)

top命令执行以后,大写M,按内存使用情况排序;大写P,按cpu使用情况排序;大写H,显示线程数

内存

整个系统的页表可以通过查询/proc/meminfo来查询,每个进程的页表大小可以查看:cat

/proc/<PID>/status中的VmPTE大小

每个页(4k)需要使用一个页表项(PTE)来管理,所以一个进程对应的页表所维护物理内存大小为(物理内存+SWAP)/4k*8字节

pmap pid

pmap

- report memory map of a process(查看进程的内存映像信息)

cat /proc/interrupts

显示中断

cat /proc/version

显示内核的版本

cat /proc/net/dev

显示网络适配器及统计

cat /proc/mounts

显示已加载的文件系统

ln -s file1

lnk1

创建一个指向文件或目录的软链接

ln file1 lnk1

创建一个指向文件的物理链接

rpm -q -a --qf

'%10{SIZE}t%{NAME}n' | sort -k1,1n

以大小为依据依次显示已安装的rpm包所使用的空间

(fedora, redhat类系统)

groupadd

group_name

创建一个新用户组

groupdel

group_name

删除一个用户组

groupmod -n new_group_name old_group_name

重命名一个用户组

useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1

创建一个属于

"admin" 用户组的用户

useradd user1

创建一个新用户

userdel -r

user1

删除一个用户

( '-r' 排除主目录)

usermod -c

"User FTP" -g system -d /ftp/user1 -s /bin/nologin user1

修改用户属性

passwd user1

修改一个用户的口令

(只允许root执行)

chage -E

2005-12-31 user1

设置用户口令的失效期限

pwck

'/etc/passwd'

的文件格式和语法修正以及存在的用户

grpck

'/etc/passwd'

的文件格式和语法修正以及存在的群组

newgrp

group_name

登陆进一个新的群组以改变新创建文件的预设群

文件的特殊属性 - 使用

"+" 设置权限,使用 "-" 用于取消


chattr +a

file1

只允许以追加方式读写文件

chattr +c

file1

允许这个文件能被内核自动压缩/解压

chattr +d

file1

在进行文件系统备份时,dump程序将忽略这个文件

chattr +i

file1

设置成不可变的文件,不能被删除、修改、重命名或者链接

chattr +s

file1

允许一个文件被安全地删除

chattr +S

file1

一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘

chattr +u

file1

若文件被删除,系统会允许你在以后恢复这个被删除的文件

lsattr

显示特殊的属性

打包和压缩文件


bunzip2

file1.bz2

解压一个叫做

'file1.bz2'的文件

bzip2 file1

压缩一个叫做

'file1' 的文件

gunzip

file1.gz

解压一个叫做

'file1.gz'的文件

gzip file1

压缩一个叫做

'file1'的文件

gzip -9 file1

最大程度压缩

rar a

file1.rar test_file

创建一个叫做

'file1.rar' 的包

rar a

file1.rar file1 file2 dir1

同时压缩

'file1', 'file2' 以及目录 'dir1'

rar x

file1.rar

解压rar包

unrar x

file1.rar

解压rar包

tar -cvf

archive.tar file1

创建一个非压缩的

tarball

tar -cvf

archive.tar file1 file2 dir1

创建一个包含了

'file1', 'file2' 以及 'dir1'的档案文件

tar -tf

archive.tar

显示一个包中的内容

tar -xvf

archive.tar

释放一个包

tar -xvf

archive.tar -C /tmp

将压缩包释放到

/tmp目录下

tar -cvfj

archive.tar.bz2 dir1

创建一个bzip2格式的压缩包

tar -jxvf

archive.tar.bz2

解压一个bzip2格式的压缩包

tar -cvfz

archive.tar.gz dir1

创建一个gzip格式的压缩包

tar -zxvf

archive.tar.gz

解压一个gzip格式的压缩包

zip file1.zip

file1

创建一个zip格式的压缩包

zip -r

file1.zip file1 file2 dir1

将几个文件和目录同时压缩成一个zip格式的压缩包

unzip

file1.zip

解压一个zip格式压缩包

RPM 包 -

(Fedora, Redhat及类似系统)


rpm -ivh

package.rpm

安装一个rpm包

rpm -ivh

--nodeeps package.rpm

安装一个rpm包而忽略依赖关系警告

rpm -U

package.rpm

更新一个rpm包但不改变其配置文件

rpm -F

package.rpm

更新一个确定已经安装的rpm包

rpm -e

package_name.rpm

删除一个rpm包

rpm -qa

显示系统中所有已经安装的rpm包

rpm -qa | grep

httpd

显示所有名称中包含

"httpd" 字样的rpm包

rpm -qi

package_name

获取一个已安装包的特殊信息

rpm -qg

"System Environment/Daemons"

显示一个组件的rpm包

rpm -ql

package_name

显示一个已经安装的rpm包提供的文件列表

rpm -qc

package_name

显示一个已经安装的rpm包提供的配置文件列表

rpm -q

package_name --whatrequires

显示与一个rpm包存在依赖关系的列表

rpm -q

package_name --whatprovides

显示一个rpm包所占的体积

rpm -q

package_name --scripts

显示在安装/删除期间所执行的脚本l

rpm -q

package_name --changelog

显示一个rpm包的修改历史

rpm -qf

/etc/httpd/conf/httpd.conf

确认所给的文件由哪个rpm包所提供

rpm -qp

package.rpm -l

显示由一个尚未安装的rpm包提供的文件列表

rpm --import

/media/cdrom/RPM-GPG-KEY

导入公钥数字证书

rpm --checksig

package.rpm

确认一个rpm包的完整性

rpm -qa

gpg-pubkey

确认已安装的所有rpm包的完整性

rpm -V

package_name

检查文件尺寸、

许可、类型、所有者、群组、MD5检查以及最后修改时间

rpm -Va

检查系统中所有已安装的rpm包-

小心使用

rpm -Vp

package.rpm

确认一个rpm包还未安装

rpm2cpio

package.rpm | cpio --extract --make-directories *bin*

从一个rpm包运行可执行文件

rpm -ivh

/usr/src/redhat/RPMS/`arch`/package.rpm

从一个rpm源码安装一个构建好的包

rpmbuild

--rebuild package_name.src.rpm

从一个rpm源码构建一个

rpm 包

YUM

软件包升级器 

Fedora,

RedHat及类似系统包管理器

yum

clean all

清除原有yum缓存

yum

repolist

列出仓库信息

yum

install software 

安装

yum

update

更新

yum list

software

查看软件

yum list

all

查看所有软件

yum list

installed

列出已安装软件

yum list

available

列出可安装软件

yum

reinstall software

重新安装

yum info

software

查看软件信息

yum

whatprovides file

根据文件找出包含此文件的软件

yum

history

查看系统中软件管理信息

yum

history info

对该数字为id的信息进行显示

yum

groups list

列出软件组 

yum

groups info

查看软件组的信息

yum

groups install sfgroup

安装软甲组

yum

groups remove sfgroup

卸载软件组

yum install package_name

下载并安装一个rpm包

yum

localinstall package_name.rpm

将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系

yum update

package_name.rpm

更新当前系统中所有安装的rpm包

yum update

package_name

更新一个rpm包

yum remove

package_name

删除一个rpm包

yum search

package_name

在rpm仓库中搜寻软件包

yum clean

packages

清理rpm缓存删除下载的包

yum clean

headers

删除所有头文件

yum makecache

使其更新缓存生效

ifconfig eth0

显示一个以太网卡的配置

ifup eth0

启用一个

'eth0' 网络设备

ifdown eth0

禁用一个

'eth0' 网络设备

slabtop

slab内存分配查询

ssh -v -p username@ip;-v 调试模式(会打印日志),-p

指定端口,username:登录用户,ip:远程主机;

telnet ip port;

curl ip:port;

wget ip:port;

Linux端口四种测试方法

awk

AWK善于按照用户定义的格式化输出文本信息,awk每次读取文本一行,每一行又被指定的分隔符划分成多列,读取行后列,列用$1...$n表示,

awk内置参数

F:间隔符;NR:输出行记录数:NF:输出列记录数;$0:表示整行输出

awk '/^ab/' /etc/passwd

passwd文件中输出所有以ab开头的行

awk '/^[no|yes]/' /etc/passwd

passwd文件中输出所有以no或yes开头的行

ifconfig|awk

-F " " '{if(NR==2)print "ip=" $2}'

过滤Linux系统的Ip地址

awk '{if(NR>=20 && NR<=30)print $0}' /etc/passwd

只输出/etc/passwd文件的20到30之间的行

awk -F '[: /]+'  '{print

$1,$6}' passwd1

以:或/为分割符输出每一行第1和第6列的置,"+"加号为正则表达式匹配":"和"/"出现一次或者多次

sed命令

非交互式。处理文件时,把当前处理的行存储在临时缓冲区(称为“模式空间”(Pattern

Space))中,即它是基于模式匹配过滤及修改文本

sed参数

i:直接修改文件内容,而不是输出到终端,n:安静模式,屏蔽默认输出(全部文本),只有经过sed特殊处理的那一行才会被列出来,e

:指定sed动作,可以由多个-e指定多个动作,{}:可组合多个命令,以分号分隔

sed -ne '$='

test.txt

统计文本有多少行

sed -n -e '1p'

test.txt

仅输出文件的第一行内容

sed -n -e '5p'

test.txt

仅输出第5行内容

sed -n -e

'1,5p' test.txt

输出第1至第5行之间的内容

sed -n -e

'5p,$p' test.txt

输出第5至最后一行之间的内容

sed -n -e '$p'

test.txt

输出文件的最后一行内容

sed -sne 'p'

test.txt test1.txt test2.txt

输出3个文件的内容

sed -sne '$p'

test.txt test1.txt test2.txt

输出3个文件最后一行的内容

sed -n -e

'/systemd/p' test.txt

仅输出包含字符串“systemd”的行

sed -n -e

'/^systemd/p' test.txt

仅输出以符串“systemd”开头的行

sed -n -e

'/systemd$/p' test.txt

仅输出以符串“systemd”结尾的行

sed -n -e

'/./p' test.txt

仅输出含有字符的行(过滤掉文本中的空行)

sed -n -e

'/^$/p' test.txt

仅输出文本中空行

sed -ne

'/\/usr\/sbin\/nologin/p'test.txt

输出含有“/usr/sbin/nologin/”字符串的有所行

sed -n -e

'/admin.*false/p'test.txt

仅输出包含字符串“admin”后面有字符串“false”的行(在它们之间有任意数量的任意字符)

sed -i '/^HOSTNAME/cHOSTNAME=mysvr.tarena.com' /etc/sysconfig/network

修改

/etc/sysconfig/network文件中以HOSTNAME开头的整行,c表示替换整行(-i:表示直接修改文件内容,不加i只是把文件内容替换输出屏幕,原文件内容不修改)

sed -i

's/book/books/' file

将file文件中每一行的第一个book替换为books

sed -i

's/book/books/g' file

替换file文件每一行中的所有匹配到的book

sed -i

's|book|books|2g' file

从file每一行第二个匹配到的开始替换(注意:竖线也可以作为sed分隔符)

sed -i '/^$/d' file

删除空白行

sed -i '2d' file

删除第二行

sed -i '$d' file

删除最后一行

sed -i '2,$d' file

删除第二行到最后一行

sed -i '/^test/d' file

删除所有以test开头的行

sed -i 's/^/#/g' file  

给文件的每行加上#号

 sed -i 's/|/\,/g' *.txt

将所有文件|替换为逗号

sed -i

's/^#//g' file

去掉文件每行开头的#号

sed -i 's/^ //g' file

去掉文件每行开头的空格

sed -e '1d'

result.txt

从文件example.txt 中排除第一行

sed -n

'/stringa1/p'

查看只包含词汇

"string1"的行

sed -e 's/

*$//' example.txt

删除每一行最后的空白字符

sed -e

's/stringa1//g' example.txt

从文档中只删除词汇

"string1" 并保留剩余全部

sed -n

'1,5p;5q' example.txt

查看从第一行到第5行内容

sed -n '5p;5q'

example.txt

查看第5行

sed -e

's/00*/0/g' example.txt

用单个零替换多个零

sed

's/stringa1/stringa2/g' example.txt

将example.txt文件中的

"string1" 替换成 "string2"

sed '/^$/d'

example.txt 从example.txt

文件中删除所有空白行

sed '/ *#/d;

/^$/d' example.txt 从example.txt

文件中删除所有注释和空白行

echo 'esempio'

| tr '[:lower:]' '[:upper:]'

合并上下单元格内容

grep

文件过滤神器,-v :反向选择,-i

:忽略大小写,-E:支持扩展正则表达式,-r:递归搜索,搜索当前目录和子目录

grep -E 'A|B'

file

输出匹配到含有A或B的行

grep -i ‘abc'

file

匹配输出含有abc的行,忽略大小写

find

文件、目录查找命令

find /etc/

-iname "*.conf"

忽略大小写查找以".conf"结尾的文件或者目录(因没指定输出文件类型,所以会输出所有类型的文件)

find /etc/

-iname "abc*"

忽略大小写查找以"abc"开头的文件或者目录(因没指定输出文件类型,所以会输出所有类型的文件)

find /etc/

-type f -exec ls -l {} \;

查找/etc目录下所有文件并输出

find /etc/

-type f | xargs -i ls -l

查找/etc目录下所有文件并输出

find /etc/

-name "*.conf"

把查找到以.conf结尾的所有文件复制到/tmp目录下面

find /etc/

-name "*.conf" -exec cp -rf {} /tmp/ \;

把查找到以.conf结尾的所有文件复制到/tmp目录下面

find /etc/

-name "*.conf"|xargs -i cp -rf {} /tmp

把查找到以.conf结尾的所有文件复制到/tmp目录下面

find /var/log/

-mtime +30 -exec rm -f {} \;

删除30天前的文件

find /var/log/

-mtime +30 | xargs -i rm -f {}

删除30天前的文件

find . -name "*.log" -size +10M|xargs -i rm -f {}

找出大于10M日志并删除

find . -name "*.log" -size -10M| -exec i rm {} -f;

找出小于10M日志并删除

find . -name "*.log" -size +10K -exec rm -f {} \;

找出大于10K日志并删除

find . -empty -type f | xargs -i rm -f {}

找出当前目录下空文件并删除

find /var/log/

-name "*.log" -mtime +30 -exec cp -rf {} /tmp/ \;

查找出目录中的日志文件,并且其存在时间超过30天,将其复制到/tmp目录下

find /etc/

-type f -newer /etc/passwd

查找在修改/etc/passwd此文件之前修改的所有文件(此条命令可以查找修改某个文件时其他也受到关联影响的文件)

cd

/etc/yum.repos.d

查看Linux源(yum)配置情况

ipmitool -I lanplus -H ip -U user -P PASSWORD user list

ipmitool -I lanplus

-H 10.198.75.88 -U admin -P Admin#123 user list //查看所有底层管理口用户

ipmitool -I

lanplus -H ip -U user -P PASSWORD chassis status

查看设备状态

ipmitool -I

lanplus -H ip -U user -P PASSWORD lan print 1

查看BMC网络信息

ipmitool -I

lanplus -H ip -U user -P PASSWORD power reset

重启服务器

ipmitool -I

lanplus -H ip -U user -P PASSWORD user set password 2 newpassword

修改BMC用户密码

cat

/sys/class/fc_host/host3/node_name

查询linux系统下HBA卡WWN号

cat

/dev/urandom | sed 's/[^a-zA-Z]//g' | strings -n 5 | head -n 5

随机生成5个长度为5的字符串,其中strings表示长度,head表示个数

cd

/etc/yum.repos.d

查看Linux源(yum)配置情况

dmidecode -t

按照指定显示服务器硬件信息

dmidecode -q

显示服务器主要硬件信息

lspci

查看PCI总线命令

lscpu

查看CPU信息命令

lshw -short

查看各硬件信息

lsscsi

列出像硬盘和光驱等 scsi/sata

设备的信息(组合阵列的盘也会列出,但lsblk只列出阵列组合后逻辑出来的盘)

chkconfig

--list

列出所有系统服务

blktrace

硬盘跟踪工具

Linux内存大页

Linux内存大页在需消耗大块内存的场景可以提升系统性能,大页的使用要根据场景来应用,在KVM虚拟化中可以使用大页来提高性能

宿主机的大页是平均分到每个 NUMA 节点上的,除非某个 NUMA 节点本身没有足够的可用连续内存来生成大页,那么此时大页将由另外一个 NUMA 节点生成,虚拟机要使用宿主机的大页技术,还必须在虚拟机配置表修改支持

当大页面的总数为 256,有 2 个 NUMA 节点时,那么每个 NUMA 节点的大页数为 256/2 = 128 个

cat /sys/devices/system/node/node*/meminfo | fgrep Huge //查看NUMA节点的大页资源

cat /proc/meninfo | grep -i HugePage//查看宿主机大页的配置情况

重点:AnonHugePages参数统计的是Transparent HugePages (THP,透明大页),THP与Hugepages不是一回事,区别很大

useradd username -s /bin/bash -m /home/username  -e 2022-12-31 -g groupname -G other

groupname

创建用户username指定运行的shell,目录、过期时间、属组、附加属组

Linux进程


R (TASK_RUNNING),可执行状态

只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。

很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在linux下统一为 TASK_RUNNING状态

S (TASK_INTERRUPTIBLE),可中断的睡眠状态

处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。

通过ps命令我们会看到,一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态(除非机器的负载很高)。毕竟CPU就这么一两个,进程动辄几十上百个,如果不是绝大多数进程都在睡眠,CPU又怎么响应得过来。

D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态

与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。

绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。否则你将惊奇的发现,kill -9竟然杀不死一个正在睡眠的进程了!于是我们也很好理解,为什么ps命令看到的进程几乎不会出现TASK_UNINTERRUPTIBLE状态,而总是TASK_INTERRUPTIBLE状态。

而TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程(这个插入的流程可能只存在于内核态,也可能延伸到用户态),于是原有的流程就被中断了。(参见《linux内核异步中断浅析》)

       在进程对某些硬件进行操作时(比如进程调用read系统调用对某个设备文件进行读操作,而read系统调用最终执行到对应设备驱动的代码,并与对应的物理设备进行交互),可能需要使用TASK_UNINTERRUPTIBLE状态对进程进行保护,以避免进程与设备交互的过程被打断,造成设备陷入不可控的状态。这种情况下的TASK_UNINTERRUPTIBLE状态总是非常短暂的,通过ps命令基本上不可能捕捉到。

linux系统中也存在容易捕捉的TASK_UNINTERRUPTIBLE状态。执行vfork系统调用后,父进程将进入TASK_UNINTERRUPTIBLE状态,直到子进程调用exit或exec(参见《神奇的vfork》)。

通过下面的代码就能得到处于TASK_UNINTERRUPTIBLE状态的进程:

#include   void main() {  if (!vfork()) sleep(100);  }

编译运行,然后ps一下:

kouu@kouu-one:~/test$ ps -ax | grep a\.out  4371 pts/0    D+     0:00 ./a.out  4372 pts/0    S+     0:00 ./a.out  4374 pts/1    S+     0:00 grep a.out

然后我们可以试验一下TASK_UNINTERRUPTIBLE状态的威力。不管kill还是kill -9,这个TASK_UNINTERRUPTIBLE状态的父进程依然屹立不倒。

T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态

向进程发送一个SIGSTOP信号,它就会因响应该信号而进入TASK_STOPPED状态(除非该进程本身处于TASK_UNINTERRUPTIBLE状态而不响应信号)。(SIGSTOP与SIGKILL信号一样,是非常强制的。不允许用户进程通过signal系列的系统调用重新设置对应的信号处理函数。)

向进程发送一个SIGCONT信号,可以让其从TASK_STOPPED状态恢复到TASK_RUNNING状态。

当进程正在被跟踪时,它处于TASK_TRACED这个特殊的状态。“正在被跟踪”指的是进程暂停下来,等待跟踪它的进程对它进行操作。比如在gdb中对被跟踪的进程下一个断点,进程在断点处停下来的时候就处于TASK_TRACED状态。而在其他时候,被跟踪的进程还是处于前面提到的那些状态。

对于进程本身来说,TASK_STOPPED和TASK_TRACED状态很类似,都是表示进程暂停下来。

而TASK_TRACED状态相当于在TASK_STOPPED之上多了一层保护,处于TASK_TRACED状态的进程不能响应SIGCONT信号而被唤醒。只能等到调试进程通过ptrace系统调用执行PTRACE_CONT、PTRACE_DETACH等操作(通过ptrace系统调用的参数指定操作),或调试进程退出,被调试的进程才能恢复TASK_RUNNING状态

Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程

进程在退出的过程中,处于TASK_DEAD状态。

在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外。于是进程就只剩下task_struct这么个空壳,故称为僵尸。

之所以保留task_struct,是因为task_struct里面保存了进程的退出码、以及一些统计信息。而其父进程很可能会关心这些信息。比如在shell中,$?变量就保存了最后一个退出的前台进程的退出码,而这个退出码往往被作为if语句的判断条件。

当然,内核也可以将这些信息保存在别的地方,而将task_struct结构释放掉,以节省一些空间。但是使用task_struct结构更为方便,因为在内核中已经建立了从pid到task_struct查找关系,还有进程间的父子关系。释放掉task_struct,则需要建立一些新的数据结构,以便让父进程找到它的子进程的退出信息。

父进程可以通过wait系列的系统调用(如wait4、waitid)来等待某个或某些子进程的退出,并获取它的退出信息。然后wait系列的系统调用会顺便将子进程的尸体(task_struct)也释放掉。

  子进程在退出的过程中,内核会给其父进程发送一个信号,通知父进程来“收尸”。这个信号默认是SIGCHLD,但是在通过clone系统调用创建子进程时,可以设置这个信号。

通过下面的代码能够制造一个EXIT_ZOMBIE状态的进程:

#include   void main() {  if (fork())  while(1) sleep(100);  }

编译运行,然后ps一下:

kouu@kouu-one:~/test$ ps -ax | grep a\.out  10410 pts/0    S+     0:00 ./a.out  10411 pts/0    Z+     0:00 [a.out]   10413 pts/1    S+     0:00 grep a.out

只要父进程不退出,这个僵尸状态的子进程就一直存在。那么如果父进程退出了呢,谁又来给子进程“收尸”?

当进程退出的时候,会将它的所有子进程都托管给别的进程(使之成为别的进程的子进程)。托管给谁呢?可能是退出进程所在进程组的下一个进程(如果存在的话),或者是1号进程。所以每个进程、每时每刻都有父进程存在。除非它是1号进程。

1号进程,pid为1的进程,又称init进程。

linux系统启动后,第一个被创建的用户态进程就是init进程。它有两项使命:

1、执行系统初始化脚本,创建一系列的进程(它们都是init进程的子孙);

2、在一个死循环中等待其子进程的退出事件,并调用waitid系统调用来完成“收尸”工作;

init进程不会被暂停、也不会被杀死(这是由内核来保证的)。它在等待子进程退出的过程中处于TASK_INTERRUPTIBLE状态,“收尸”过程中则处于TASK_RUNNING状态。

X (TASK_DEAD - EXIT_DEAD),退出状态,进程即将被销毁

而进程在退出过程中也可能不会保留它的task_struct。比如这个进程是多线程程序中被detach过的进程(进程?线程?参见《linux线程浅析》)。或者父进程通过设置SIGCHLD信号的handler为SIG_IGN,显式的忽略了SIGCHLD信号。(这是posix的规定,尽管子进程的退出信号可以被设置为SIGCHLD以外的其他信号。)

 此时,进程将被置于EXIT_DEAD退出状态,这意味着接下来的代码立即就会将该进程彻底释放。所以EXIT_DEAD状态是非常短暂的,几乎不可能通过ps命令捕捉到

信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了


linux进程优先级

Linux 进程 分为3种类型 : 限期进程 、实时进程、普通进程,从 " 进程优先级 " 角度对比 ,

优先级从高到低分别是 : 限期进程 > 实时进程 > 普通进程

限期进程 : 优先级为 -1

实时进程 : 优先级值为 0~99 ; 实时进程中优先级的数值越大 , 优先级越高,其优先是由内核设置的,只能从代码层把一个普通进程修改为实时进程;实时进程调度策略有:SCHED_FIFO:优先级高的先运行,优先级相同的按先进先出的队列方式运行;SCHED_RR:优先级高的先运行,优先级相同的以时间片轮询运行。top命令中RT值为:rt的标示此进程为实时进程

普通进程 :优先级值为 100~139; 普通进程中优先级的数值越小 , 优先级越高,用户可以修改nice值改变普通进程优先级

普通进程可以通过调整nice值来改变优先级 , 计算公式为:普通静态进程优先级=nice+120,nice取值[-20~19]

top命令中PR值:PR是在top 命令执行后的显示,其代表的是进程的调度优先级,它与静态优先级(static_priority)关系为

static_priority=PR+100,static_priority取值为[100, 139],所以PR取值是 [0, 39],PR和NI关系为 : PR(new) = PR(old) + nice;普通进程的的调度策略是:CFS,完全公平调度策略

cgroup

cgroups其名称源自控制组群(control

groups)的缩写,是内核的一个特性,用于限制、记录和隔离一组进程的资源使用(CPU、内存、磁盘 I/O、网络等),cgroup文件系统是如何集成进vfs(虚拟文件系统).因为cgroup通过vfs向用户层提供接口,用户层通过挂载,创建目录,读写文件的方式与cgroup交互

资源限制:可以配置 cgroup,从而限制进程可以对特定资源(例如内存或 CPU)的使用量

优先级 :当资源发生冲突时,您可以控制一个进程相比另一个 cgroup 中的进程可以使用的资源量(CPU、磁盘或网络)

记录:在 cgroup 级别监控和报告资源限制

控制:您可以使用单个命令更改 cgroup 中所有进程的状态(冻结、停止或重新启动)

Cgroups功能的实现依赖于四个核心概念:子系统、控制组、层级树、任务

子系统(subsystem):一个内核的组件,一个子系统代表一类资源调度控制器。例如内存子系统可以限制内存的使用量,CPU 子系统可以限制 CPU 的使用时间。子系统是真正实现某类资源的限制的基础

Subsystem(子系统) cgroups 中的子系统就是一个资源调度控制器(又叫 controllers)

在/sys/fs/cgroup/这个目录下可以看到cgroup子系统

cpu:使用调度程序控制任务对cpu的使用

cpuacct:自动生成cgroup中任务对cpu资源使用情况的报告

cpuset:可以为cgroup中的任务分配独立的cpu和内存

blkio:可以为块设备设定输入输出限制,比如物理驱动设备

devices:可以开启或关闭cgroup中任务对设备的访问

freezer: 可以挂起或恢复cgroup中的任务

pids:限制任务数量

memory:可以设定cgroup中任务对内存使用量的限定,并且自动生成这些任务对内存资源使用情况的报告

perf_event:使用后使cgroup中的任务可以进行统一的性能测试

net_cls:docker没有直接使用它,它通过使用等级识别符标记网络数据包,从而允许linux流量控制程序识别从具体cgroup中生成的数据包

ns :名称空间子系统

控制组(control group):控制组就是一组按照某种标准划分的进程。Cgroups中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用cgroups以控制组为单位分配的资源,同时受到cgroups以控制组为单位设定的限制

层级(hierarchy):由一系列的控制组按照树状结构排列组成的。这种排列方式可以使得控制组拥有父子关系,子控制组默认拥有父控制组的属性,也就是子控制组会继承于父控制组。比如,系统中定义了一个控制组 c1,限制了 CPU 可以使用 1 核,然后另外一个控制组 c2 想实现既限制 CPU 使用 1 核,同时限制内存使用 2G,那么 c2 就可以直接继承 c1,无须重复定义 CPU 限制

任务(task) :在cgroup中,任务就是一个进程。一个任务可以是多个cgroup的成员,但这些cgroup必须位于不同的层级,子进程自动成为父进程cgroup的成员,可按需求将子进程移到不同的cgroup中

子系统、控制组、层级树、任务四者之间关系:

1.每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认 cgroup(我们称之为 root cgroup ,此cgroup在创建层级时自动创建,后面在该层级中创建的cgroup都是此cgroup的后代)的初始成员。

2.一个子系统最多只能附加到一个层级。

3.一个层级可以附加多个子系统

4.一个任务可以是多个cgroup的成员,但是这些cgroup必须在不同的层级。

5.系统中的进程(任务)创建子进程(任务)时,该子任务自动成为其父进程所在 cgroup 的成员。然后可根据需要将该子任务移动到不同的 cgroup 中,但开始时它总是继承其父任务的cgroup。

cgroup安装及使用:

yum install -y libcgroup  //centos6上安装

yum install -y libcgroup-tools  //centos7上安装

 /etc/cgconfig.conf  //配置文件

lssubsys -a  //查看系统支持的所有子系统

mount -t cgroup //查询系统中已经mount 的cgroup的文件系统,这里的t表示type

Linux系统中断

Linux系统把一个中断分为上半部中断和下半部中断,上半部中断也称为硬中断,下半部中断称为软中断;

上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行;

下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行;

举例:网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了。这时,CPU就应该调用内核中断处理程序来响应它。

对上半部来说,既然是快速处理,其实就是要把网卡的数据读到内存中,然后更新一下硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信号,通知下半部做进一步的处理。

而下半部被软中断信号唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理,直到把它送给应用程序。

不过,软中断不只是包括硬件设备中断处理程序的下半部,一些内核自定义事件也属于软中断,比如内核调度等、BLOCK、NET_RX、NET_TX、SCHED、TIMER、HI、RCU 锁(内核里常用的一种锁)等

cat /proc/softirqs //查看软中断统计情况;

cat /proc/interrupts //查看硬中断统计情况;

watch -d cat /proc/softirqs //查看软中断的变化情况

watch -d cat /proc/interrupts //查看硬中断的变化情况

lsmod

查看Linux系统加载的内核模块,此命令的数据来源于:cat

/proc/modules文件的数据

irqblance服务

irqblance服务是Linux中断负载均衡工具,通过它可以把中断均分到CPU多核心上去处理

/etc/sysconfig/irqbalance  //irqbalance配置文件

systemctl start/stop irqbalance.service //启动/停止irqbalance服务

systemctl  disable irqbalance.service  //禁用irqbalance服务,开机重启也不会生效

systemctl status irqbalance.service   //查看irqbalance服务开机重启

user  ALL = (ALL) ALL

user标示允许的用户

,第一个ALL标示主机的任何位置 第二个ALL标示任何用户 第三个ALL标示任何命令

tcpdump上传包手动安装

rpm

-ivh libpcap0-0.9.8-50.10.1.x86_64.rpm

rpm -ivh tcpdump-3.9.8-1.21.x86_64.rpm

hwclock --show

查看硬件的时间

hwclock --set --date '2016-01-08 15:15:15'

置硬件时间(这个时间是RTC时间,也是UTC时间,UTC+8=CST)

linux中tty是什么

终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是J),是由Teletype公司生产的。设备名放在特殊文件目录/dev/下

ethtool -g eth0

g

--show-ring(显示物理网卡的队列深度信息)

ethtool -l eth0

显示物理网卡队列数信息

ethtool -L eth0 combined 64

修改网卡队列深度为64

env

查看系统的环境变量

numactl -H/numastat -m

查看numa架构的内存

dmesg -T

查看系统重启日志

top -p 2312

查看2312进程的负载

/opt/cloud/services/nova-compute/venv/bin/python2.7


/etc/nova-compute/nova-util/query_hypervisor_resource.py

Nova查看内存(进入Python运行环境,执行名Python脚本)

ls -l /etc/libvirt/qemu/

查看虚拟机XML配置文件

/etc/Hugepage.conf;/etc/Hugepages_node.conf

UVP大页配置文件

cat /proc/meminfo

查看大页配置

cat /proc/pid号/maps

查看进程的虚拟地址空间,显示进程映射了的内存区域和访问权限

device mapper

du -sh .[!.]*

查看目录下隐藏文件的大小

sysctl -a|grep fs.file-max

cat /proc/sys/fs/file-max

查看系统能打开的最大文件数

echo "fs.file-max=655350">>

/etc/sysctl.conf;sysctl -p

修改系统的最大文件打开数并生效

vim /etc/security/limits.conf

修改用户级打开的最大文件数(单个用户能打开最大文件数)

ulimits -n

查看用户级打开的最大文件数(单个用户能打开最大文件数)

grep  -iE  'vmx|svm' /proc/cpuinfo

查看CPU是否支持虚拟化

blkid

查看分区对应的UUID

gcc hello.c -o hello.exe

GCC把hello.c源文件编译成可执行文件hello.exe

journalctl -k

查看内核日志

journalctl -b

查看系统本次启动的日志

journalctl -b -1

查看系统上次启动的日志

journalctl /usr/lib/systemd/system

查看指定服务的日志

"/"

标示根目录

"../"

表示上级目录

"./"

表示当前目录

dd if=/dev/sdb of=/root/backup

将sdb盘的数据被分到/root/backup文件

dd if=root/backup of=dev/sdb

将/root/backup文件备份数据恢复到sdb盘

dd if=/dev/sda of=/dev/sdb

将sda盘的数据被分到sdb文件

dd if=/dev/sdb | gzip>/root/backup.gz

将sdb盘数据通过gzip压缩保存为/root/backup.gz

gzip -dc /root/backup.gz | dd of=/dev/sdb

通过gzip解压/root/backup.gz文件并保存到/dev/sdb

dd if=/dev/cdrom(hdc) of=/tmp/cd.iso

拷贝光盘内容到指定文件夹,并保存为cd.iso文件

time dd if=dev/zero of=/test.dbf bs=4k count=100000

测试硬盘的写性能

rpm -qa|grep smartmontools

查看smartctl软件是否安装

yum install -y smartmontools

在redhat类系统安装smartctl工具

smartctl -i /dev/sda

查看硬盘的基本参数

(设备型号、厂商、驱动版本等)

smartctl -x /dev/sdb

查看硬盘的所有smart和非smart的信息

smartctl --scan

查看系统上的所有设备

smartctl -H /dev/sda

查看硬盘的健康状况

smartctl -a /dev/sda -d megaraid,{n}

对于raid设备,

需要加上 “-d megaraid,{n}” n 为raid控制器的编号,没做阵列则不加

smartctl -t short /dev/sda

对磁盘进行短期测试

smartctl -l selftest /dev/sda

查看磁盘测试结果

smartctl -l error 

/dev/sdb

查看磁盘错误日志

kdump

kdump

是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时,kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。

kdump 需要两个不同目的的内核,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的 ramdisk 一起组建一个微环境,用以对生产内核下的内存进行收集和转存

/sys/devices

这是内核对系统中的所有设备分层表达模型,也是syfs文件系统管理设备的重要目录结构

/sys/block

这里是系统中当前所有的块设备所在,按照功能来说放置在

/sys/class 之下会更合适,但只是由于历史遗留因素而一直存在于 /sys/block, 但从 2.6.22 开始就已标记为过时,只有在打开了 CONFIG_SYSFS_DEPRECATED 配置 下编译才会有这个目录的存在,并且在 2.6.26 内核 中已正式移到 /sys/class/block, 旧的接口 /sys/block 为了向后兼容保留存在,但其中的内容已经变为指向它们在 /sys/devices/ 中真实设备的符号链接文件

/sys/dev

这个目录下维护一个按字符设备和块设备的主次号码(major:minor)链接到真实的设备(/sys/devices下)的符号链接文件,它是在内核 2.6.26

首次引入;

/sys/bus

这是内核 设备按总线类型分层放置的目录结构,

devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的一部分

/sys/class

这是按照设备功能分类的设备模型,如系统所有输入设备都会出现在

/sys/class/input 之下,而不论它们是以何种总线连接到系统。它也是构成 Linux 统一设备模型的一部分

/sys/fs

里按照设计是用于描述系统中所有文件系统,包括文件系统本身和按文件系统分类存放的已挂载点,但目前只有 fuse,gfs2 等少数文件系统支持 sysfs 接口,一些传统的虚拟文件系统(VFS)层次控制参数仍然在 sysctl (/proc/sys/fs) 接口中;

touch

$(date +%Y-%m-%d-%R)或者touch `date +%Y-%m-%d-%R`

用日期时间戳作为文件名创建文件

Linux修改内核参数文件/proc/sys与/etc/sysctl.conf区别

Linux在系统运行时修改内核参数(/proc/sys与/etc/sysctl.conf),而不需要重新引导系统,这个功能是通过/proc虚拟文件系统实现的。

在/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改, 可以通过更改/proc/sys中内核参数对应的文件达到修改内核参数的目的(修改过后,保存配置文件就马上自动生效),不过重新启动机器后之前修改的参数值会失效,所以只能是一种临时参数变更方案。(适合调试内核参数优化值的时候使用,如果设置值有问题,重启服务器还原原来的设置参数值了。简单方便。)

但是如果调试内核参数优化值结束后,需要永久保存参数值,就要通过修改/etc/sysctl.conf内的内核参数来永久保存更改。但只是修改sysctl文件内的参数值,确认保存修改文件后,设定的参数值并不会马上生效,如果想使参数值修改马上生效,并且不重启服务器,可以执命令sysctl -p

sysctl –a //查看内核所有变量

kubectl get node

查看k8s管理的容器节点

mcelog.service进程

mcelog

是 x86 的 Linux 系统上用来 检查硬件错误,特别是内存和CPU错误的工具:machine check exception

yum-config-manager

命令是对资源库(/etc/yum.repos.d/下的文件)进行增删改查

yum repolist all

查询所有资源库

yum repolist enabled

查询已启用的资源库

yum repolist disabled

查询禁用的资源库

mount -t cgroup或者lssubsys -m

查看已创建并挂载好的cgroup组

timedatectl 

查看系统所有时间信息

timedatectl set-timezone Asia/Shanghai

设置时区为上海

hwclock -s

让系统时间同步硬件RTC时间(以RTC时间为标准,系统时间就是date命令输出的时间,也叫本地时间,所在国的时间)

hwclock -w

让硬件RTC时间同步系统时间(以系统时间为标准)

hwclock -u

让硬件RTC时间保持在UTC时间(意思把RTC时间设置为UTC时间)

hwclock --localtime

让硬件RTC时间保持在本地时间(意思把RTC时间设置为本地时间)

Centos同步时间(阿里云NTP服务为例)

ntpdate

ntp1.aliyun.com

hwclock --systohc --localtime

将硬件时钟调整为与本地时钟一致

关于yum

yum(全称为

Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装

关于epel

EPEL

(Extra Packages for Enterprise Linux)是基于Fedora的一个项目,centos是redhat的开源版本,没有yum功能,所以需要安装epel,使得其具有yum功能,centos配置了epel,还需要配置repo,以使得软件源有软件,repo是配置源的,即配置从哪里下载包(以及依赖关系)

yum install epel-release

centos系统安装epel

rpm -ivh https://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm

centos系统添加wlnmp源(2019年初开始维护wlnmp一键安装包这个项目,起初只是为了在日常运维过程中,可以快速的部署lnmp服务,wlnmp一键安装包基于上游开源软件二次开发,可以在Linux系统上通过wlnmp提供的镜像源,快速部署Nginx/Mysql/PHP等常用软件,所有的包都以“w”开头,方便与官方包进行区分)

centos7系统同步网络时间(以同步阿里云时间为例)

rpm

-ivh https://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm

systemctl start ntpd

timedatectl set-ntp yes

ntpdate ntp1.aliyun.com

timedatectl set-timezone Asia/Shanghai

A机器免密ssh登录B机器(思路:在A机器生成公私钥,把公钥传到B机器)

ssh-keygen

-t rsa (-t:指定秘钥类型,dsa | ecdsa | ed25519 | rsa | rsa1)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip

EOF用法(把EOF中的内容输出给cat,cat再把内容输入到1.txt)

cat >>  /root/1.txt << EOF

12345

12345

EOF

查看网卡的MAC地址

cat

/sys/class/net/ens160/address

查看网卡的UUID

cat

/sys/class/dmi/id/product_uuid

ip a

查看网卡信息(显示比ifconfig全)

centos连接公网跨大版本升级kernel

步骤 1:检查已安装的内核版本,并记录

uname -rs

步骤 2:在 CentOS 7 中升级内核

CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。

在 CentOS 7 上启用 ELRepo 仓库,运行如下命令:

导入该源的秘钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

启用该源仓库

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm

 查看有哪些内核版本可供安装

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装的长期稳定版本,稳定可靠或者安装指定版本

yum --enablerepo=elrepo-kernel install -y kernel-lt //安装长期稳定版本

yum --enablerepo=elrepo-kernel install -y kernel-ml.x86_64 0:6.2.6-1.el7.elrepo  //安装指定版本

步骤 3:设置 GRUB 默认的内核版本

首先备份:cp /etc/default/grub /etc/default/grub.bak

为了让新安装的内核成为默认启动选项,你需要修改 GRUB 配置:vim /etc/default/grub ,设置 GRUB_DEFAULT=0

意思是 GRUB 初始化页面的第一个内核将作为默认内核

执行命令使配置文件生效:grub2-mkconfig -o /boot/grub2/grub.cfg

执行重启:reboot

查看版本是否改变:uname -r

centos连接公网跨小本升级kernel

yum

list kernel

yum update -y kernel

centos离线升级kernel

1.检查已安装的内核版本,并记录

uname -rs

2.下载内核RPM包到指定目录,下面以阿里云源内核链接下载(说明:lt长期维护版 ml最新稳定版,kernel-lt是内核包,kernel-lt-devel是与内核相匹配的内核开发环境,都需要升级,必须保证内核开发环境和内核版本一致)

wget -P /tmp/kernel.file https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.163-1.el7.elrepo.x86_64.rpm

wget -P /tmp/kernel.file https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.163-1.el7.elrepo.x86_64.rpm

3.切换到内核包的目录,安装内核包

rpm -ivh kernel-lt-5.4.163-1.el7.elrepo.x86_64.rpm

rpm -ivh kernel-lt-devel-5.4.163-1.el7.elrepo.x86_64.rpm

4.设置 GRUB 默认的内核版本

首先备份:cp /etc/default/grub /etc/default/grub.bak

为了让新安装的内核成为默认启动选项,你需要修改 GRUB 配置:vim /etc/default/grub ,设置 GRUB_DEFAULT=0

意思是 GRUB 初始化页面的第一个内核将作为默认内核

执行命令使配置文件生效:grub2-mkconfig -o /boot/grub2/grub.cfg

执行重启:reboot

查看版本是否改变:uname -r

清华大学内核包链接

https://mirrors.tuna.tsinghua.edu.cn/elrepo/kernel/el7/x86_64/RPMS/

阿里云内核包下载链接

https://elrepo.org/linux/kernel/el7/x86_64/RPMS/

wget -c

c参数断点续传,适用大文件传输,网络不好的环境

CMA(Contiguous Memory Allocator)

连续内存分配器用于分配大块的连续内存。内存管理系统会根据设备使用情况动态管理CMA区域的页面

readelf -S vmlinux

查看内核包含的段信息

useradd Tom -s /bin/fasle 和useradd Tom -s /sbin/nologin 区别

被赋予/bin/false的用户禁止登录系统,一切服务都不可用,登录不会有报错提示,最严格限制,相当于被系统判了死刑,被赋予/sbin/nologin用户也无法使用bash或者其他shell登录系统,但是能可以使用系统资源,相当于被系统判了无期徒刑,比如各个系统账号,打印作业的lp管理账号,web服务器的apache管理账号,它们都可以运行系统上自己的服务,但无法交互式登录系统

useradd -g -G 

g:用户所属组,G:用户附加组

selinux

SELinux是由美国国家安全局(NSA)开发的,整合在Linux内核当中,针对特定的进程与指定的文件资源进行权限控制的系统。即使你是root用户,也必须遵守SELinux的规则,可以有效防止root用户的误操作

SELinux时通过MAC的方式来管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 工具快捷键 下一篇: linux命令大全1
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

CZHsu4xuhYFz
作者其他文章 更多

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02