分享!Linux常用命令整理

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

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

screen -S name
ctrl a+d
screen -ls
screen -r


#多行合并
awk 'ORS=NR%3?" ":"\n"{print}' test.txt


raync+inotify数据量大的时候进城容易死掉,试试sersync+inotify

# 升级gcc到5.3及以上,如下:
升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
 
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
这样退出shell重新打开就是新版的gcc了
以下其他版本同理,修改devtoolset版本号即可。

#检测磁盘状态
smartctl -H /dev/sda10
#修复坏块
fsck -y /dev/sde1
#修改语言
/etc/locale.conf

#bond
Linux 多网卡绑定

网卡绑定mode共有七种(0~6) bond0、bond1、bond2、bond3、bond4、bond5、bond6

常用的有三种

mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下):

mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以 mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。

mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。

七种bond模式说明:

第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)

特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降

第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)

特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N

 

第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)

特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力

 

第四种模式:mod=3,即:broadcast(广播策略)

特点:在每个slave接口上传输每个数据包,此模式提供了容错能力

 

第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)

特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。

外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应 性。

必要条件:

条件1:ethtool支持获取每个slave的速率和双工设定

条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation

条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式

 

第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)

特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。

该模式的必要条件:ethtool支持获取每个slave的速率

 

第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)

特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。

来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上

当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。

必要条件:

条件1:ethtool支持获取每个slave的速率;

条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管

其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量

 
#端口转发

 

 

Linux网口绑定

通过网口绑定(bond)技术,可以很容易实现网口冗余,负载均衡,从而达到高可用高可靠的目的。前提约定:

2个物理网口分别是:eth0,eth1

绑定后的虚拟口是:bond0

服务器IP是:192.168.0.100

第一步,配置设定文件:

/etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=none

ONBOOT=yes

IPADDR=192.168.0.100

NETMASK=255.255.255.0

NETWORK=192.168.0.0

BROADCAST=192.168.0.255

#BROADCAST广播地址

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

第二步,修改modprobe相关设定文件,并加载bonding模块:

1.在这里,我们直接创建一个加载bonding的专属设定文件/etc/modprobe.d/bonding.conf

[root@test ~]# vi /etc/modprobe.d/bonding.conf

#追加

alias bond0 bonding

options bonding mode=0 miimon=200

2.加载模块(重启系统后就不用手动再加载了)

[root@test ~]# modprobe bonding

3.确认模块是否加载成功:

[root@test ~]# lsmod | grep bonding

bonding 100065 0

第三步,重启一下网络,然后确认一下状况:

[root@test ~]# /etc/init.d/network restart

[root@test ~]# cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: fault-tolerance (active-backup)

Primary Slave: None

Currently Active Slave: eth0

……

 [root@test ~]# ifconfig | grep HWaddr

bond0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

eth0 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

eth1 Link encap:Ethernet HWaddr 00:16:36:1B:BB:74

从上面的确认信息中,我们可以看到3个重要信息:

1.现在的bonding模式是active-backup

2.现在Active状态的网口是eth0

3.bond0,eth1的物理地址和处于active状态下的eth0的物理地址相同,这样是为了避免上位交换机发生混乱。

任意拔掉一根网线,然后再访问你的服务器,看网络是否还是通的。

第四步,系统启动自动绑定、增加默认网关:

[root@test ~]# vi /etc/rc.d/rc.local

#追加

ifenslave bond0 eth0 eth1

route add default gw 192.168.0.1

#如可上网就不用增加路由,0.1地址按环境修改.

------------------------------------------------------------------------

留心:前面只是2个网口绑定成一个bond0的情况,如果我们要设置多个bond口,比如物理网口eth0和eth1组成bond0,eth2和eth3组成bond1,

那么网口设置文件的设置方法和上面第1步讲的方法相同,只是/etc/modprobe.d/bonding.conf的设定就不能像下面这样简单的叠加了:

alias bond0 bonding

options bonding mode=1 miimon=200

alias bond1 bonding

options bonding mode=1 miimon=200

正确的设置方法有2种:

第一种,你可以看到,这种方式的话,多个bond口的模式就只能设成相同的了:

alias bond0 bonding

alias bond1 bonding

options bonding max_bonds=2 miimon=200 mode=1

第二种,这种方式,不同的bond口的mode可以设成不一样:

alias bond0 bonding

options bond0 miimon=100 mode=1

install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0

仔细看看上面这2种设置方法,现在如果是要设置3个,4个,甚至更多的bond口,你应该也会了吧!

后记:简单的介绍一下上面在加载bonding模块的时候,options里的一些参数的含义:

miimon 监视网络链接的频度,单位是毫秒,我们设置的是200毫秒。

max_bonds 配置的bond口个数

mode bond模式,主要有以下几种,在一般的实际应用中,0和1用的比较多,
     【关闭反向解析】
sed  -i "s/#UseDNS yes/UseDNS no/g"  /etc/ssh/sshd_config 
sed  -i "s/GSSAPIAuthentication yes/GSSAPIAuthentication no/g" /etc/ssh/sshd_config 




#根据inode删除文件
find /  -inum 2097490 | xargs rm -rf

#rpm安装到指定位置
rpm -ivh --prefix=/java  xx.rpm
#yum安装到指定位置
yum --installroot=/opt/all_venv/  install nginx
#yum 仅下载包
yum install --downloadonly --downloaddir= <directory> <package-name>

#使用 lsof 命令查看当前是否有进程打开指定文件
.extundelete可以通过iNode节点号、文件名、目录来进行恢复

恢复之前最好将需要恢复的挂载点进行卸载 umount,确保数据没有被覆盖擦除

a.通过iNode节点号恢复

先进行iNode节点的查询

extundelete /dev/sdb1 --inode 2

-----------图中被圈出的部分为文件的iNode节点号

[root@web2-server yum.repos.d]# umount /mnt/cdrom/
umount: /mnt/cdrom: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))

[root@web2-server yum.repos.d]# umount /mnt/cdrom/ -f //强制卸载也不行
umount2: 设备或资源忙
umount: /mnt/cdrom: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
umount2: 设备或资源忙

VIP
ifconfig eth0:1 192.168.1.22 broadcast 192.168.1.2 netmask 255.255.255.0 up

[root@web2-server yum.repos.d]# fuser -m /mnt/cdrom/
/mnt/cdrom/: 1338c 5830c //占用进程pid

#fuser -m -k /mnt/cdrom/
 //或者查询后直接杀死进程 后面的2步就不需要执行了
 

[root@web2-server yum.repos.d]# ps aux |grep 1338  //查看占用进程
root 1338 0.0 0.2 108292 1912 pts/2 Ss+ 14:27 0:00 -bash
root 1423 0.0 0.1 103236 884 pts/1 S+ 14:49 0:00 grep 1338
 

[root@web2-server yum.repos.d]# kill -9 1338  5830 // 或使用下面的一个一个杀死进程
[root@web2-server yum.repos.d]# kill -9 1338  
 

[root@web2-server yum.repos.d]# fuser -m /mnt/cdrom
[root@web2-server yum.repos.d]# umount  /目录名称
[root@web2-server yum.repos.d]# mount /设备名  /目录名称
 将信息写入fstab,让系统开启自动挂载

复制代码
vim /etc/fstab 
UUID=94e4e384-0ace-437f-bc96-157dd64642ee / ext4 defaults,barrier=0 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID=97e89f17-1767-4ccd-a4b5-f2bd3737c0b1

//UUID=97e89f17-1767-4ccd-a4b5-f2bd3767c0b9  挂载的目录名称/路径 ext3 defaults 0 0

 # 有的挂载使用的是 UUID,如果你不知道你的UUID对应的设备名称往下看 ;

df -h #查看设备名
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 2.9G 35G 8% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/vdb1 99G 2.3G 92G 3% /home/wwwroot

dumpe2fs -h /dev/vdb1 #查看挂载设备的uuid
  Filesystem UUID:          97e89f17-1767-4ccd-a4b5-f2bd3737c0b1

blkid # 使用这个命令更简洁 或者 blkid /dev/vdb1
/dev/vda1: UUID="94e4e384-0ace-437f-bc96-157dd64642ee" TYPE="ext4"
/dev/vdb1: UUID="97e89f17-1767-4ccd-a4b5-f2bd3737c0b1" TYPE="ext3"

 

  最后wq退出保存即可

2.恢复命令 extundelete --restore-inode 12 /dev/sdb1      -----通过iNode节点号恢复

extundelete --restore-file passwd.bak /dev/sdb1          -----通过文件名恢复

extundelete --restore-directory test /dev/sdb1             -----通过目录恢复


#图形化
xhost +
export DISPLAY=:0

#keepalive
#拷贝执行文件 
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#将init.d文件拷贝到etc下,加入开机启动项 (错误:缺少rc.d 目录,1.2版本之后,这个目录编译后不再出现放在源码包里面)
# vim /etc/init.d/keepalived
#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /usr/local/keepalived/run/keepalived.pid
# config: /usr/local/keepalived/etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived

# Source function library
. /etc/rc.d/init.d/functions

# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /usr/local/keepalived/etc/sysconfig/keepalived

keepalived=/usr/local/keepalived/sbin/keepalived
keepalived_config=/usr/local/keepalived/etc/keepalived/keepalived.conf
keepalived_pid=/usr/local/keepalived/run/keepalived.pid

RETVAL=0

prog="keepalived"

start() {
    echo -n $"Starting $prog: "
    daemon $keepalived -f ${keepalived_config} ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $keepalived
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}

reload() {
    echo -n $"Reloading $prog: "
    killproc $keepalived -1
    RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi
        ;;
    status)
        status $keepalived
        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        RETVAL=1
esac

exit $RETVAL

#将keepalived文件拷贝到etc下,加入网卡配置 
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
#创建keepalived文件夹 
mkdir -p /etc/keepalived
#将keepalived配置文件拷贝到etc下 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
#添加可执行权限 
chmod +x /etc/init.d/keepalived
#加入开机启动:
chkconfig --add keepalived    #添加时必须保证/etc/init.d/keepalived存在
chkconfig keepalived on
#添加完可查询系统服务是否存在:
chkconfig --list

#防火墙
Centos6 使用的是iptables,Centos7 使用的是filewall
iptables 用于过滤数据包,属于网络层防火墙。
firewall 能够允许哪些服务可用,那些端口可用...属于更高一层的防火墙。

systemctl status firewalld  查看状态
systemctl stop firewalld  关闭
systemctl start firewalld 开启
systemctl  restart firewalld 重启
systemctl  disable firewalld  关闭开机启动
firewall-cmd --state 查看状态
firewall-cmd --list-all 查看防火墙规则

系统配置目录(/usr/lib/firewalld/services)
目录中存放定义好的网络服务和端口参数,系统参数,不能修改

用户配置目录(/etc/firewalld/)
用户可以通过修改配置文件的方式添加端口,也可以通过命令的方式添加端口,注意:修改的内容会在/etc/firewalld/目录下的配置文件中体现。

添加端口:
firewall-cmd --permanent --add-port=9527/tcp
参数介绍:
1、firewall-cmd:是Linux提供的操作firewall的一个工具;
2、--permanent:表示设置为持久;
3、--add-port:标识添加的端口;
另外,firewall中有Zone的概念,可以将具体的端口制定到具体的zone配置文件中。


一、netem与tc介绍

    netem 是 Linux 2.6 及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。

    使用 Linux 2.6 (或以上) 版本内核的很多发行版 Linux 都开启了该内核功能,比如Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian等等。

    tc 是 Linux 系统中的一个工具,全名为traffic control(流量控制)。tc 可以用来控制 netem 的工作模式,也就是说,想要使用 netem ,则需要内核开启了 netem,而且安装了 tc工具。


    tc控制的是发包动作,不能控制收包动作。它直接对物理接口生效,如果控制了物理的eth0,那么逻辑网卡(比如eth0:1)也会受到影响,反之则不行,控制逻辑网卡是无效的。

二、模拟延迟传输

将 eth0 网卡的传输设置为延迟100毫秒发送。
 $ tc  qdisc  add  dev  eth0  root  netem  delay  100ms  

真实的情况下,延迟值不会这么精确,会有一定的波动,下面命令模拟带有波动性的延迟值:
 $ tc  qdisc  add  dev  eth0  root  netem  delay  100ms  10ms

该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。
由于各个包的延迟值不通,也会在一定程度上打乱发包的次序。


还可以更进一步加强这种波动的随机性,将 eth0 网卡的传输设置为 100ms ,同时,大约有30%的包会延迟 ± 10ms 发送:
 $ tc  qdisc  add  dev  eth0  root  netem  delay  100ms  10ms  30%

三、模拟网络丢包

将 eth0 网卡的传输设置为随机丢掉 1% 的数据包。
 $ tc  qdisc  add  dev  eth0  root  netem  loss  1%  

也可以设置丢包的成功率,将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为30% :
 $ tc  qdisc  add  dev  eth0  root  netem  loss  1%  30%

四、模拟包重复

将 eth0 网卡的传输设置为随机产生 1% 的重复数据包。
 $ tc  qdisc  add  dev  eth0  root  netem  duplicate 1% 

五、模拟数据包损坏

将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包。 (内核版本需在2.6.16以上)
 $ tc  qdisc  add  dev  eth0  root  netem  corrupt  0.2% 

六、模拟数据包乱序

将 eth0 网卡的传输设置为:有25%的数据包(50%相关)会被立即发送,其他的延迟10秒。
 $ tc  qdisc  change  dev  eth0  root  netem  delay  10ms   reorder  25%  50%

七、一个实例
step1:使用ifconfig命令查看你的网卡信息,如:eth0
step2:将网卡加入监控列表 
       $ sudo tc qdisc add dev eth0 root netem
step3:
       设置丢包率 
       $ sudo tc qdisc change dev eth0 root netem loss 0.5% 
       设置重发
       $ sudo tc qdisc change dev eth0 root netem duplicate 1%
       设置发乱序包
       $ sudo tc qdisc change dev eth0 root netem gap 5 delay 10ms


如果想让网络恢复正常,只需要删除监控,或将设置的值相应归0即可。

例如,设置延时
$ sudo tc qdisc add dev eth0 root netem delay 4s

取消延时
$ sudo tc qdisc del dev eth0 root netem delay 4s



八、禁止访问一个IP
如果要禁止访问一个IP,不使用tc,而是用iptables。iptalbes可以简单理解为linux下的防火墙,控制网络访问。
1、禁止访问10.237.0.1
$ iptables -A OUTPUT -d 10.237.0.1 -j REJECT


2、查看规则
$ iptables -L OUTPUT -n
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            10.237.0.1        reject-with icmp-port-unreachable


3、查看规则号
$ iptables -L OUTPUT -n --line-numbers
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            10.237.0.1        reject-with icmp-port-unreachable


4、删除规则
$ iptables -D OUTPUT 1





#vim常用操作
yy复制
nyy 复制光标所在后的多行
p 粘贴输出
G最后一行
gg第一行
0行首
$行尾
:1?XXXX 从最后开始查找
ngg指定行
d1G
dG
#互信
ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
#抓包
1. 默认启动
tcpdump
默认情况下,直接启动tcpdump将监视第一个网络接口(非lo口)上所有流通的数据包。这样抓取的结果会非常多,滚动非常快。
2 . 监视指定网络接口的数据包
tcpdump -i ens33
3. 监视指定主机的数据包,例如所有进入或离开node1的数据包
tcpdump -i ens33  host node1
4. 打印node1<-->node2或node1<-->node3之间通信的数据包
tcpdump -i ens33 host node1 and \(node2 or node3\)
5. 打印node1与任何其他主机之间通信的IP数据包,但不包括与node4之间的数据包
tcpdump -i ens33 host node1 and not node4
6. 截获主机node1 发送的所有数据
tcpdump -i ens33 src host node1
7. 监视所有发送到主机node1 的数据包
tcpdump -i ens33 dst host node1
8. 监视指定主机和端口的数据包
tcpdump -i ens33 port 8080 and host node1
9. 监视指定网络的数据包,如本机与192.168网段通信的数据包,"-c 10"表示只抓取10个包
tcpdump -i ens33 -c 10 net 192.168
10. 打印所有通过网关snup的ftp数据包
tcpdump 'gateway snup and (port ftp or ftp-data)'
注意,表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析
11. 抓取ping包
tcpdump -c 5 -nn -i ens33 
==指定主机抓ping包==
tcpdump -c 5 -nn -i eth0 icmp and src 192.168.100.62
12. 抓取到本机22端口包
tcpdump -c 10 -nn -i ens33 tcp dst port 22
13. 解析包数据
tcpdump -c 2 -q -XX -vvv -nn -i ens33 tcp dst port 22


#fio压测
dd if=/dev/zero of=/u01/test.dbf bs=8k count=200000 conv=fdatasync
测试随机读写:
fio --filename=/u01/test.dbf -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20-group_reporting -name=test-rand-write

测试顺序读取:
fio --filename=/bdata/test.big -iodepth=64 -ioengine=libaio --direct=1 --rw=read --bs=1m --size=2g --numjobs=4 --runtime=10 --group_reporting --name=test-read

测试顺序写性能
fio --filename=/bdata/test.big -iodepth=64 -ioengine=libaio -direct=1 -rw=write -bs=1m -size=2g -numjobs=4 -runtime=20 -group_reporting -name=test-write

测试随机读:
fio --filename=/root/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randread -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-read

测试随机写:
fio --filename=/root/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20-group_reporting -name=test-rand-write

采用同步IO的随机写:
fio --filename=/root/rndwrite -iodepth=64 -ioengine=psync -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=32 -runtime=20 -group_reporting -name=test-rand-write 

4k,100%读写:
fio --filename=/dev/sdx --direct=1 --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=libaio --bs=4k --rwmixread=100 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=4ktest

8k,70%读取,30%写入:
fio --filename=/dev/sdx --direct=1 --rw=randrw --refill_buffers --norandommap --randrepeat=0 --ioengine=libaio --bs=8k --rwmixread=70 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=8k7030test

#根据innode号删除文件
rm -rf `find ./ -inum 131447`

#按照内存/CPU排序,筛选指定用户
ps aux --sort -pmem/cpu | grep root

#根据日志关键字检索
cat test | sort -n | uniq  -c | sort -r | awk '$1>=2 {print $0}'

#找大文件
du -h --max-depth=1 /root | sort -n

#批量杀进程
ps -ef | grep test | grep -v grep |awk '{print $2}'  | xargs kill -9

#增加逻辑卷
pvcreate /dev/sdd
vgextend vg_orasoft /dev/sdd
lvextend -l +100%FREE /dev/vg_orasoft/lv_orasoft_soft
resize2fs /dev/vg_orasoft/lv_orasoft_soft

##操作系统相关命令
#查看服务器硬件配置
lshw
#查看磁盘名称和容量
lsblk
#查看硬件相关信息
dmidecode
#输出内核环形缓冲区内容
dmesg
#查看CPU信息
lscpu
#查看内存信息
lsmem
#控制和监控磁盘的命令
smartctl -a /dev/sda
#查看裸盘型号信息
lsscsi
#查看ssd/sata
cat /sys/block/sda/queue/rotational
#网卡总线相关信息
lspci -m -vvv
#查看网络驱动程序
ethtool -i eth0
#打印本地IB驱动程序获取的基本信息
ibstat


##常用性能监控命令

#查看mysql进程对应所有线程的内容
top -U mysql -c -H
Tasks — 任务(进程),系统现在共有144个进程,其中处于运行中的有1个,143个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
us, user: 运行(未调整优先级的) 用户进程的CPU时间
sy,system: 运行内核进程的CPU时间
ni,niced:运行已调整优先级的用户进程的CPU时间
wa,IO wait: 用于等待IO完成的CPU时间
hi:处理硬件中断的CPU时间
si: 处理软件中断的CPU时间
st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

#查看io详情
iotop

#查看ip带宽信息
iftop -s

#网络测试
#服务端
iperf -s
#客户端
iperf -c ip -i 60 -t 60 -f -a -m -P 3

#按照cpu/内存对进程排序
ps aux --sort -pmem/cpu

#查看cpu使用情况
pidstat
-u:默认参数,显示各个进程的cpu使用情况;
-r:显示各个进程的内存使用情况;
-d:显示各个进程的I/O使用情况;
-w:显示每个进程的上下文切换情况;
-p:指定进程号;
-t:显示进程中线程的统计信息

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

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

#进程线程区别
(1)调度

在传统OS中,拥有资源、独立调度和分派的基本单位都是进程,在引入线程的系统中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位。

在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的线程时,将会引起进程切换。

(2)并发性

在引入线程的系统中,进程之间可并发,同一进程内的各线程之间也能并发执行。因而系统具有更好的并发性。

(3)拥有资源

无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。即一个进程的所有资源可供进程内的所有线程共享。

(4)系统开销

进程的创建和撤消的开销要远大于线程创建和撤消的开销,进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置,线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作,可见,进程切换的开销远大于线程切换的开销。

同时,同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也变得比较容易。

#网络连接相关信息
netstat -atlunp

#查看当前服务器的网络连接数
ss -s
#查看所有打开的网络端口
ss -pl
#列出所有网络连接
ss -a

#查看详细的CPU信息
mpstat -P ALL 1 1
#中断信号统计信息
mpstat -I SUM -P ALL 1 1

#查看系统资源信息,cpu,磁盘,网络等
dstat -c -l -d -r -m -g -s -n -y -p

#系统各种活动内容
#所有内容
sar -A
#每个块设备状态统计信息
sar -d 1 1
#查看磁盘IO等内容
sar -b 1 1
#内存大页使用信息
sar -H 1 1
#中断信号统计信息
sar -I SUM 1 1
#查看持久化设备的信息
sar -d -j ID 1 1
#查看网络信息
sar -n DEV 1 1
#查看CPU信息
sar -P 0,1 1 1
#查看CPU队列长度
sar -q 1 1
#查看内存信息
sar -R 1 1
#查看innode,文件等信息
sar -v 1 1
#查看swap统计信息
sar -W 1 1
#查看任务创建和上下文切换统计信息
sar -w 1 1


#查看虚拟内存状态
vmstat -a 1 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 2  0   6912 220824 877720 662800    0    0   239   567    5    1  1  1 98  1  0
Procs(进程)
    r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
    b: 等待IO的进程数量。
Memory(内存)
    swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
    free: 空闲物理内存大小。
    inact: 非活动内存
    active: 活动内存
Swap
    si: 每秒从交换区写到内存的大小,由磁盘调入内存。
    so: 每秒写入交换区的内存大小,由内存调入磁盘。
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO(现在的Linux版本块的大小为1kb)
    bi: 每秒读取的块数
    bo: 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统)
    in: 每秒中断数,包括时钟中断。
    cs: 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示)
    us: 用户进程执行时间百分比(user time)
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
    sy: 内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
    wa: IO等待时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
    id: 空闲时间百分比

iostat
#查看磁盘IO及CPU
iostat -x -k 1 1
Linux 3.10.0-957.21.3.el7.x86_64 (xsj)  11/29/2019      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.77    0.01    0.53    0.86    0.00   97.82

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.03     2.48    6.80   12.50   238.65   567.04    83.49     0.72   66.78   11.90   96.62   0.57   1.10
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率


#切割合并文件
1、按行数分割

split -l 300 large_file.txt new_file_prefix
加上-d,使用数字后缀;加上--verbose,显示分割进度:
split -l50000 -d large_file.txt part_ --verbose

2、按字节大小分割,不打碎行

split -C 10m large_file.log new_file_prefix

3、合并 -- cat命令
cat part_* > merge_file.txt
diff 可以做新旧文件对比

#同步
rsync只对差异文件做更新,可以做增量或全量备份;而scp只能做全量备份。简单说就是rsync只传修改了的部分,如果改动较小就不需要全部重传,所以rsync备份速度较快;默认情况下,rsync 通过比较文件的最后修改时间(mtime)和文件的大小(size)来确认哪些文件需要被同步过去。
rsync是分块校验+传输,scp是整个文件传输。rsync比scp有优势的地方在于单个大文件的一小部分存在改动时,只需传输改动部分,无需重新传输整个文件。如果传输一个新的文件,理论上rsync没有优势;
rsync不是加密传输,而scp是加密传输,使用时可以按需选择。

rsync -e "ssh -p22222" -avpgolr --progress db170630.tar.gz 192.168.1.198:/data/upload/
--progress 可以实现本机带进度条提示拷贝,可以实现不同机器带进度条提示拷贝,可以拷贝多个文件
 
scp -v /mnt/full20100526.tar.gz [email protected]:/usr/local/src/



#安文件中指定字段汇总排序
cat a | grep | sort | uniq -c | sort -nr

#滞空,会立马释放空间 
>file

#所有打开的链接数小于1的文件。
lsof +L1

#释放内存
sync
echo 3 > /proc/sys/vm/drop_caches
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存

#swap分区
dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile
swapon /swapfile
/etc/rc.local 添加swapon -a
/etc/fstab /swapfile swap swap defaults 0 0
修改 /etc/sysctl.conf
vm.swappiness=10
sysctl -p


##dd相关
#造文件
dd if=/dev/zero of=/swapfile bs=1M count=2048
1.将本地的/dev/hdb整盘备份到/dev/hdd
#dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
#dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
#dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
#dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
#gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
#dd if=/dev/hda of=/root/image count=1 bs=512
   count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
#dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.备份软盘
#dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)
8.拷贝内存内容到硬盘
#dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)  
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
#dd if=/dev/cdrom(hdc) of=/root/cd.iso
10.增加swap分区文件大小
第一步:创建一个大小为256M的文件:
#dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
#mkswap /swapfile
第三步:启用这个swap文件:
#swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile    swap    swap    default   0 0
11.销毁磁盘数据
#dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
#dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块大小:
#dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
#dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
#dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
#dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘:
#dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。
15.利用netcat远程备份
#dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在源主机上执行此命令备份/dev/hda
#netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
在目的主机上执行此命令来接收数据并写入/dev/hdc
#netcat -l -p 1234 | bzip2 > partition.img
#netcat -l -p 1234 | gzip > partition.img
以上两条指令是目的主机指令的变化分别采用bzip2、gzip对数据进行压缩,并将备份文件保存在当前目录。
将一个很大的视频文件中的第i个字节的值改成0×41(也就是大写字母A的ASCII值)
echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭。
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将time-wait sockets重新用于新的TCP连接,默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout=30 修改系統默认的 TIMEOUT 时间


#perf火焰图
1、第一步
$sudo perf record -e cpu-clock -g -p 28591
Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data.

2、第二步
用perf script工具对perf.data进行解析
perf script -i perf.data &> perf.unfold

3、第三步
将perf.unfold中的符号进行折叠:
./stackcollapse-perf.pl perf.unfold &> perf.folded

4、最后生成svg图:
./flamegraph.pl perf.folded > perf.svg


#ext4文件恢复
yum install e2fsprogs*
yum install extundelete
#根据innode恢复
extundelete /dev/sdb1 --inode 2
#根据文件名恢复
extundelete /dev/sdb1 --restore-file passwd
#根据目录恢复
extundelete /dev/sdb1 --restore-directory test
#恢复所有
extundelete /dev/sdb1 --restore-all
#xfs文件恢复
yum install xfsdump
#备份
xfsdump -f /opt/dump_sdb1 /dev/sdb1
#恢复
xfsrestore -f /opt/dump_sdb1 /mnt/xfs/


#共享库文件
find / -name 'libmysqlclient*' 
ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/local/lib/libmysqlclient.so.20
vi /etc/ld.so.conf
/sbin/ldconfig -v 


find命令的参数;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

#-print 将查找到的文件输出到标准输出
#-exec   command   {} \;      —–将查到的文件执行command操作,{} 和 \;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户
例:find . -name .svn | xargs rm -rf
====================================================

-name   filename             #查找名为filename的文件
-perm                        #按执行权限来查找
-user    username             #按文件属主来查找
-group groupname            #按组来查找
-mtime   -n +n                #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime    -n +n               #按文件访问时间来查GIN: 0px">

-ctime    -n +n              #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                     #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2              找文件,-n指n天以内,+n指n天以前 
-ctime    -n +n               #按文件创建时间来查找文件,-n指n天以内,+n指n天以前 
-nogroup                     #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser                      #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer   f1 !f2               #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                     #查更改时间比f1新但比f2旧的文件
-type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size      n[c]               #查长度为n块[或n字节]的文件
-depth                       #使查找在进入子目录前先行查找完本目录
-fstype                      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                %;      #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount                       #查文件时不跨越文件系统mount点
-follow                      #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio                        #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune                       #忽略某个目录

猜你喜欢

转载自blog.csdn.net/qq_42979842/article/details/108524518
今日推荐