常用命令

进入个人的主目录

1
cd ~user1

返回上次所在的目录

1
cd -

查看目录中的文件

1
ls -F

显示文件和目录的详细资料

1
ls -l

显示隐藏文件

1
ls -a

显示包含数字的文件名和目录名

1
ls *[0-9]*

递归创建文件夹

1
mkdir -p /tmp/dir1/dir2

删除一个叫做 'dir1' 的目录'

1
rmdir dir1

同时删除两个目录及它们的内容

1
rm -rf dir1 dir2

命名/移动 一个目录

1
mv dir1 new_dir

复制一个文件

1
cp file1 file2

复制一个目录下的所有文件到当前工作目录

1
cp dir/* .

复制一个目录到当前工作目录

1
cp -a /tmp/dir1 .

复制一个目录

1
cp -a dir1 dir2

复制一个目录及子目录(递归)

1
cp -r dir1 dir2

源链接 目标链接 创建一个指向文件或目录的软链接 (不可以相对路径)

1
ln -s 源链接 目标链接

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

1
ln file1 lnk1

从 '/' 开始进入根文件系统搜索文件和目录

1
find / -name file1

显示一个二进制文件、源码或man的位置

1
whereis halt

显示一个二进制文件或可执行文件的完整路径

1
which halt

显示权限

1
ls -lh

通过pid查找端口

1
ps -ef | grep <pid>

显示进程的,查看某个端口是否被占用

1
2
3
4
5
6
7
netstat -nlp |grep 端口号/pid
参数:
```
-n --numeric的缩写,即通过数值展示ip地址
-l --listening的缩写,只打印正在监听中的网络连接
-p --program,打印相应端口号对应进程的进程号
```

使用标准的格式显示进程的

1
2
# 使用ps -ef|grep xxx时候出现带grep字符的命令并不是xxx的进程,而是grep的进程
ps -ef

查找某文件

1
2
# 查找/下所有passwd文件所在位置
find / -name passwd

查找文件夹下包含"xxx"的所有文件记录(*表示当前目录所有文件,也可以是某个文件名)

1
grep -rn "xxx" a/* b/* c/app.js

显示进程的,但是是用BSD的格式来显示,如果STAT显式Z的,则说明是僵尸进程,需要进行删除

1
ps aux

赋权操作

1
2
# 每个括号是一个参数, 前三个括号主要放在一起使用即 chmod + 设置模式 + 文件名(参考https://blog.csdn.net/lyy14011305/article/details/76333041)
chmod (u g o a) (+ - =) (r w x) (文件名)

vim 操作 - 全局替换a为b

1
:%s/a/b/g

解压rpm包

1
rpm2cpio xxx.rpm | cpio -div

查看当前pid下所有线程(默认按cpu使用率排序)

1
top -Hp PID

选删文件

1
2
# 加!为反选删除,maxdepth为层级去掉则查到底,type-f为查找文件,-mtime +7是查找7天前的文件
find . -mtime +7 -maxdepth 1 ! -name ${val} -type f -print -exec rm -rf {} \;

查找目录下的所有文件中是否含有某个字符串

1
find .|xargs grep -ri "IBM"

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

1
find .|xargs grep -ri "IBM" -l 

快速kill pid

1
kill $(ps aux | grep 进程名 | tr -s ' '| cut -d ' ' -f 2)

批量替换文件内容, 例如将/var/www/test文件夹下的所有文件内容中的abc字符串换成123

1
2
# 格式:sed -i "s/旧内容/新内容/g" `grep 旧内容 -rl 文件夹路径`
sed -i "s/abc/123/g" `grep abc -rl /var/www/test`

查看进程内存占用排行

1
ps aux | awk '{print $6/1024 " MB\t\t" $11"\t"$NF}' | sort -nr|head -10

Linux系统下查看网卡相关数据

查看网口基本信息

1
$ ethtool eth0

点亮网卡灯

1
$ ethtool -p eth0 10    # 亮 10 秒

查询网口驱动相关信息

1
2
3
4
5
6
7
8
9
10
$ ethtool -i eth0
driver: igb
version: 5.3.0-k
firmware-version: 1.67, 0x80000d38, 18.3.6
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

查询网口收发包统计信息

1
2
3
4
5
6
7
8
9
10
$ ethtool -S eth0    # 查看网口所有统计相关信息
$ ethtool -S eth0 | grep rx_queue | grep packets # 查看网卡各个队列收包数据
rx_queue_0_packets: 117947
rx_queue_1_packets: 3050
rx_queue_2_packets: 1098
rx_queue_3_packets: 1204
rx_queue_4_packets: 9679
rx_queue_5_packets: 1172
rx_queue_6_packets: 7435
rx_queue_7_packets: 2403

显示网卡 offload 参数的状态

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
tcp-segmentation-offload: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: off
large-receive-offload: off [fixed]
... ...
ntuple-filters: off [fixed]
receive-hashing: on
... ...

参数解释如下:

  • rx-checksumming: 接收包校验和
  • tx-checksumming: 发送包校验和
  • tcp-segmentation-offload: 简称为 TSO,利用网卡对 TCP 数据包分片
  • udp-fragmentation-offload: 简称为 UFO,针对 UDP 的
  • generic-segmentation-offload: 简称 GSO,基本思想就是尽可能的推迟数据分片直至发送到网卡驱动之前,检查网卡是否支持分片功能(如 TSO、UFO),如果支持直接发送到网卡,如果不支持就进行分片后再发往网卡。这样大数据包只需走一次协议栈,而不是被分割成几个数据包分别走,这就提高了效率
  • generic-receive-offload: 简称 GRO,基本思想跟 LRO 类似,克服了 LRO 的一些缺点,更通用。后续的驱动都使用 GRO 的接口,而不是 LRO
  • large-receive-offload: 简称 LRO,通过将接收到的多个 TCP 数据聚合成一个大的数据包,然后传递给网络协议栈处理,以减少上层协议栈处理 开销,提高系统接收 TCP 数据包的能力
  • ntuple-filters: ntuple

配置网卡 offload 参数

1
2
3
4
5
6
$ ethtool -K eth0 rx-checksum on|off
$ ethtool -K eth0 tx-checksum-ip-generic on|off
$ ethtool -K eth0 tso on|off
$ ethtool -K eth0 ufo on | off
$ ethtool -K eth0 gso on | off
$ ethtool -K eth0 ntuple on | off

查看网卡 ntuple 配置规则

1
2
3
4
5
6
7
8
9
10
11
$ ethtool -n eth5
24 RX rings available
Total 480 rules
Filter: 100
Rule Type: Raw IPv4
Src IP addr: 0.0.0.0 mask: 255.255.255.255
Dest IP addr: 10.79.229.11 mask: 255.255.0.0
TOS: 0x0 mask: 0xff
Protocol: 0 mask: 0xff
L4 bytes: 0x0 mask: 0xffffffff
Action: Direct to queue 11

查看现有 flow-hash 配置

1
2
3
4
$ ethtool -n eth5 rx-flow-hash tcp4
TCP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA

配置 flow-hash

1
2
3
4
5
6
7
8
9
$ ethtool -N eth5 rx-flow-hash udp4 sd
$ ethtool -N eth5 rx-flow-hash tcp4 sd
$ ethtool -N eth5 rx-flow-hash udp4 sdfn
$ ethtool -N eth5 rx-flow-hash tcp4 sdfn
# 选项含义
s Hash on the IP source address of the rx packet.
d Hash on the IP destination address of the rx packet.
f Hash on bytes 0 and 1 of the Layer 4 header of the rx packet.
n Hash on bytes 2 and 3 of the Layer 4 header of the rx packet.

查看网卡队列数量

通过 -l 选项查看网卡队列数:

1
2
3
4
5
6
7
8
9
10
11
12
$ ethtool -l eth4
Channel parameters for eth4:
Pre-set maximums:
RX: 16
TX: 16
Other: 1
Combined: 16
Current hardware settings:
RX: 0
TX: 0
Other: 1
Combined: 8 # 当前网卡队列数是 8

查看网卡队列绑定信息

查看 CPU 与网卡多队列绑定信息,执行如下脚本即可:

1
2
3
# 注意修改网卡名称eth0
for i in `cat /proc/interrupts | grep eth0 \
| awk -F: '{print $1}'`; do echo $i && cat /proc/irq/$i/smp_affinity ; done

新浪使用的驱动

  • igb 系列驱动:千兆网卡。包含:82575, 82576, 82580, I210, I211, I350, I354, DH89xx
  • ixgbe 系列驱动:万兆网卡。包含:82598, 82599, X520, X540, X550
  • i40e 系列驱动:万兆网卡。包含:X710, XL710, X722, XXV710

关于驱动常用的几个命令

  • modprobe:安装网卡驱动
  • modinfo:查看网卡驱动具体信息
  • ethtool -i eth0:查看某个网口的驱动信息
  • lvspci:查看pci信息
  • depmod:加载驱动ko的以来模块
  • cat /proc/interrupt | grep ethx:查看网卡的队列数。

执行以下命令,解决网卡驱动依赖问题

1
2
3
$ depmod -a  2.6.32-642.15.1.sina11.3.1.el6.alpha1.x86_64
$ modinfo igb -k 2.6.32-642.15.1.sina11.3.1.el6.alpha1.x86_64
$ depmod -a # 不加内核版本参数,就只针对当前内核

安装官方igb驱动

  • 官网下载即可
  • 编译驱动:cd src; make && make installl
  • 编译驱动程序依赖:kernel-devel 的rpm包
  • 安装完毕后执行:depmod -amodinfo igb

新驱动可能需要设置开启网卡队列

  • 安装新驱动后,reboot后需要查看网卡队列是否开启 cat /proc/interrupt | grep eth4
  • 如果没有开启队列,需要配置 /etc/modprobe.conf/etc/modprobe.d/modprobe.conf
1
2
options igb InterruptThrottleRate=3000,3000,3000,3000 RSS=0,0,0,0 LRO=0,0,0,0 QueuePairs=0,0,0,0
# 具体参数要参考modinfo来设置,RSS=0,0,0,0 分别对应四个网口

千兆网卡出现CPU不均的情况

  • 网卡接收队列包数均匀
  • 网卡发送队列不均匀,基本上都分布在cpu6上
  • 查看中断对应的cpu:cat /proc/irq/71/smp_affinity
  • 驱动是igb千兆,网卡型号:82576
  • 现象:cpu6负载过高,整体cpu负载提高0.8倍

添加用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
groupadd <group_name> #创建一个新用户组 
groupdel <group_name> #删除一个用户组
groupmod -n <new_group_name> <old_group_name> #重命名一个用户组
usermod -a -G <group> <user> #将用户添加到组
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 #修改口令
passwd <user1> #修改一个用户的口令 (只允许root执行)
adduser <user1> sudo #为用户增加管理员权限
chage -E 2005-12-31 user1 #设置用户口令的失效期限
pwck #检查 ‘/etc/passwd’ 的文件格式和语法修正以及存在的用户
grpck #检查 ‘/etc/passwd’ 的文件格式和语法修正以及存在的群组
newgrp group_name #登陆进一个新的群组以改变新创建文件的预设群组

其他

查看内存使用率

1
free -m | sed -n '2p' | awk '{print "used mem is "$3"M,total mem is "$2"M,used percent is "$3/$2*100"%"}'

防火墙

1
2
3
4
# 开启端口
firewall-cmd --permanent --zone=public --add-port=3306/tcp
# 刷新
firewall-cmd --reload

查看权限

1
lsattr filename

剔除限制

1
chattr -i(+i)

Linux下使用curl命令访问https

1
2
# 下载crt证书地址:http://curl.haxx.se/ca/cacert.pem, 下载后放到/etc/pki/tls/certs/ca-bundle.crt路径下
curl --tlsv1 {网址}

centos查看服务器配置信息

1
2
3
查看多少位: uname -a
- 如果有x86_64就是64位的,没有就是32位的
- 后面是X686或X86_64则内核是64位的,i686或i386则内核是32位的

envsubst使用环境变量替换文件内容

一般用法:

envsubst < xxxx.yaml > xxxx1.yaml

指定特定待替换的环境变量:

envsubst '${VAR_NAME}' < xxx.yaml > xxxx1.yaml

查看linux操作系统版本

通过/etc/os-release文件查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ cat /etc/os-release

NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

通过lsb_release 命令查看

可能初始系统不带此指令

1
$ lsb_release -a

通过proc目录中可用版本文件查看

1
2
3
$ cat /proc/version

Linux version 3.10.0-1160.59.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Feb 23 16:47:03 UTC 2022