查看硬件配置
查看服务器型号
1 2
| dmidecode dmidecode | grep "System Information" -A16
|
查看CPU
物理CPU数(physical id):主板上实际插入的cpu数量,可以数不重复的 physical id 有几个。
CPU核心数(cpu cores):单块CPU上面能处理数据的芯片组的数量,如双核、四核等
逻辑CPU数:一般情况下,逻辑CPU=物理CPU个数×每颗核数;如果开启了超线程技术,逻辑CPU=物理CPU个数×每颗核数x2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| lscpu cat /proc/cpuinfo
lscpu | grep -i "Architecture" | wc -l cat /proc/cpuinfo | grep "physical id" |sort | uniq | wc -l
lscpu | grep "per socket" cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l
lscpu | grep -e "per socket" -e "per core" cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq
lscpu | grep -i "CPU(s):" cat /proc/cpuinfo | grep "processor" | wc -l
|
lscpu查看到的Core(s) per socket
表示这颗物理CPU有多少核心,Thread(s) per core
表示每个核心能同时处理多少线程。
参考文档:/proc/cpuinfo文件解读(超易理解)
查看内存
1 2 3 4
| free -h free -m cat /proc/meminfo
|
查看磁盘
查看显卡
1 2 3
| lspci | grep -i vga lspci | grep -i nvidia lspci -v -s 00:02.0
|
查看系统信息
查看系统版本
1 2 3 4 5
| lsb_release -a cat /etc/issue cat /etc/os-release cat /etc/centos-release hostnamectl
|
查看系统位数
1 2 3 4
| uname -a file /bin/ls getconf LONG_BIT hostnamectl
|
查看内核版本
查看是否是物理机
1 2
| dmidecode -s system-product-name hostnamectl
|
查看系统日志
1 2 3 4
| dmesg -T dmesg -T | grep -i -e "error" -e "fail"
journalctl -xb
|
dmesg用于显示内核环境下的系统日志,包括内核启动时的信息、硬件检测信息、内核模块加载信息、内核错误等。通常用于诊断系统启动和运行时出现的问题。dmesg命令显示的日志信息来自系统内核环缓冲区,因此是最新的系统日志。
journalctl -xb
命令用于查看 systemd 日志,输出系统启动时的所有日志信息,包括内核消息、系统服务和应用程序的日志信息。其中,-x 参数显示完整的日志信息,-b 参数表示显示系统启动时的日志信息。
通过 journalctl -xb
命令,可以查看系统启动时的各个服务启动情况,应用程序启动情况,以及其他系统级别的消息。可以用来诊断系统启动过程中的错误和问题。
更多journalctl的用法,参考文档《systemctl命令》。
查看重启前的系统日志
/var/log目录下存在dmesg日志文件:
1 2 3 4
| dmesg dmesg.0 dmesg.1.gz ...
|
dmesg 日志文件中保存的是本次重启后的日志,而 dmesg.0 是这次重启前的 dmesg 日志,dmesg.1.gz 是上次重启前的 dmesg 日志,依次类推。
1 2
| journalctl -k -b -1 journalctl -r -k -b -1
|
系统配置
修改默认shell
1 2 3 4
| echo $SHELL cat /etc/shells which bash chsh -s /bin/bash
|
禁止检查邮件
系统经常提示:您在 /var/spool/mail/root 中有新邮件
1 2
| echo "unset MAILCHECK" >> /etc/profile source /etc/profile
|
添加用户
创建用户,并添加sudo权限
1 2 3
| useradd -m voidking -s /bin/bash passwd voidking adduser voidking sudo
|
添加用户到组
1 2
| usermod -G docker -a gitlab-runner usermod -G root -a gitlab-runner
|
添加字体
查看字体
添加字体
1 2 3 4
| mkdir -p /usr/share/fonts/win/ cd /usr/share/fonts/win/ rz tar -xzvf fonts.tgz
|
添加字体后更新缓存
软件安装
查看命令属于哪个软件包
1、centos7
1 2
| yum makecache fast yum whatprovides lsb_release
|
2、ubuntu
1 2 3
| apt-get install -y apt-file apt-file update apt-file search ifconfig
|
重建软件安装源
centos7
1 2 3 4 5
| cd /etc/yum.repos.d rm -f *.repo scp 192.168.56.101:/etc/yum.repos.d/* . yum clean all yum makecache fast
|
EPEL源
EPEL(ExtraPackagesforEnterpriseLinux)是基于Fedora的一个项目,为RedHat系的操作系统提供额外的高质量软件包。
1
| yum install epel-release
|
安装epel源之后,可以安装很多原本 No package xxx available 的软件,比如jq:
安装指定版本软件
以安装Docker为例,参考文档《Docker入门篇》
问题排查
查看CPU负载
一个逻辑CPU可以处理一个线程,一般当 load average 超过逻辑CPU数量的70%,就可以认为 CPU 的负载较高。
查看内存占用
查看磁盘空间占用
有时候du执行速度太慢,可以使用它的升级版ncdu(NCurses Disk Usage)
1 2 3
| yum install -y ncdu ncdu /home/voidking ncdu *
|
ncdu二进制安装方法
1 2 3 4 5
| wget https://dev.yorhel.nl/download/ncdu-2.2.1-linux-x86_64.tar.gz --no-check-certificate tar -xzvf ncdu-2.2.1-linux-x86_64.tar.gz cp ncdu /usr/local/bin ln -s /usr/local/bin/ncdu /usr/bin/ncdu
|
查看磁盘IO负载
在iostat命令的输出中,磁盘IO请求队列长度对应的是avgqu-sz字段,表示平均每秒的I/O请求队列长度。它可以用来判断系统的磁盘IO瓶颈情况,如果该值超过了磁盘的最大IO队列长度,就说明磁盘IO请求队列积压了,系统IO性能可能会受到影响。一般来说,当avgqu-sz值超过1时,就可能会有IO瓶颈的风险。
查看网络负载
详情参考《iftop命令》
查看进程和线程
1 2 3 4 5 6 7 8 9 10 11 12 13
| ps -ef
ps aux
ps auxww
ps -efL
ps -T -p 12345
|
根据端口找进程
已知端口号(例如22),怎样查找对应的进程(PID)?怎样找到该进程启动命令?
方法一:使用lsof
1 2
| lsof -i:22 ps -ef | grep 12345
|
方法二:使用netstat
1 2
| netstat -nlp | grep ":22" ps -ef | grep 12345
|
查看端口是否可以正常连接
1 2 3 4 5 6 7 8
| nc -v 192.168.56.101 8080 nc -zv -w 5 192.168.56.101 8080
telnet 192.168.56.101 8080 echo '' | timeout --signal=9 5 telnet 192.168.56.101 8080 echo 'q' | timeout --signal=9 5 telnet -e 'q' 192.168.56.101 8080
|
查看进程资源占用
1、查看进程的实时资源占用
1 2 3
| top -p 12234
cat /proc/12345/status
|
2、查看进程从启动到此刻的资源占用平均值
参考文档:
查看本机IP地址
1、查看本机当前namespace所有IP地址
ifconfig
或者 ip address
2、获取某个网卡的IP地址
ifconfig eth0 | awk 'NR==2{print $2}'
查看外网出口IP
curl myip.ipip.net
查看局域网所有IP
需求:查看当前局域网已经分配的IP,已知局域网为192.168.56.0/24
1、通过扫描更新arp缓存
1 2 3 4
| nmap -sP 192.168.56.0/24
nmap -PR 192.168.56.0/24
|
2、查看本地arp缓存
1 2
| cat /proc/net/arp | awk '{print $1}' | grep '192.168' | sort arp -a | awk '{print $2}' | grep '192.168' | sort
|
根据IP排序
需求:/proc/net/arp中的内容,根据IP进行排序
1
| cat /proc/net/arp | grep 192.168.56 | sort -t'.' -k1n,1 -k2n,2 -k3n,3 -k4n,4
|
测试mtu值
MTU是Maximum Transmission Unit的缩写,表示最大传输单元,MTU的单位是字节。大部分网络设备的MTU都是1500。
把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率。
把数据包长度加上数据包头28字节,就得到MTU的值。
1 2
| ping -c 3 -s 1472 -M do www.baidu.com ping -c 3 -s 1473 -M do www.baidu.com
|
带宽测试
1、安装测试工具iperf
2、启动iperf服务端
3、使用iperf客户端测试网速
1
| iperf -c 192.168.56.112 -i 3
|
跟踪系统调用
假设ls执行卡住,可以通过strace命令查看ls具体的执行情况
Uncategories
时间和时间戳
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| date
date "+%Y-%m-%d %H:%M:%S"
date "+%s"
microsecond=$(($(date "+%s%N")/1000000))
date -d @1612351314 "+%Y-%m-%d %H:%M:%S"
|
还原history
万万没想到,centos4.3的history -c
命令,不止会清除当前登录的操作历史记录,还会清除 .bash_history 中的内容。
如果不小心清除了 .bash_history 中的内容,该怎么办?如果屏幕上还残留着history的历史记录,那么还有得救。
拷贝屏幕上的内容,到 history.txt,假设内容为:
1 2 3
| 244486 2021-01-08 17:35:18 cd haojin 244487 2021-01-08 17:36:01 vim main.py 244488 2021-01-08 17:38:33 python main.py
|
怎么恢复成标准的 .bash_history 格式呢?使用如下脚本:
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/bash
cat /dev/null > bash_history while read line do time=$(echo $line | awk '{print $2" "$3}') cmd=$(echo $line | awk -F " " '{for (i=4;i<=NF;i++)printf("%s ", $i);print ""}') timestamp=$(date -d "$time" +%s) echo "#"$timestamp >> bash_history echo $cmd >> bash_history done < history.txt
|
执行完成,使用 bash_history 替换 .bash_history 即可。