常用命令#
#硬件
查看 CPU 信息
> more /proc/cpuinfo | grep "model name"
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
> grep "model name" /proc/cpuinfo
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
model name : Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
> grep "model name" /proc/cpuinfo | cut -f2 -d:
Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
Intel(R) Xeon(R) CPU X3220 @ 2.40GHz
Intel(R) Xeon(R) CPU X3220 @ 2.40GHz查看内存
> grep MemTotal /proc/meminfo
MemTotal: 3706476 kB
> free -m
total used free shared buff/cache available
Mem: 3619 3384 108 9 127 34
Swap: 3839 3236 603
> free -m |grep "Mem" | awk '{print $2}'
> 3619
> grep MemTotal /proc/meminfo | cut -f2 -d:
> 3706476 kB
> free -h
total used free shared buff/cache available
Mem: 3.5G 3.3G 106M 9.6M 124M 30M
Swap: 3.7G 3.2G 607M查看系统负载
> uptime
10:24:26 up 12 days, 3:21, 2 users, load average: 0.08, 0.03, 0.01load average 依次为 1、5、15 分钟的平均负载,可结合 CPU 核数判断是否过载。
> nproc # 查看 CPU 核数
> top -bn1 | head -n 5 # 查看负载、CPU、内存概况#系统
查看 Linux 版本
> more /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
> more /etc/issue
\S
Kernel \r on an \m
> more /proc/version
> Linux version 3.10.0-1160.108.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Jan 25 16:17:31 UTC 2024
查看系统版本
> 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"查看内核版本
> uname -r
2.6.18-92.1.18.el5.028stab060.2PAE
> uname -a
Linux srv.eddiechen.cn 2.6.18-92.1.18.el5.028stab060.2PAE #1 SMP Tue Jan 13 12:31:30 MSK 2009 i686 i686 i386 GNU/Linux查看与修改主机名
> hostname # 查看主机名
srv.eddiechen.cn
# 永久修改主机名(CentOS 7)
> hostnamectl set-hostname srv.example.com查看时区
查看时区
> date -R
Wed, 25 Feb 2009 02:20:50 +0000配置时区
> mv /etc/localtime /etc/localtime.save
> cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
> date -R
Wed, 25 Feb 2009 10:24:26 +0800或使用 timedatectl 直接设置
> timedatectl set-timezone Asia/Shanghai
> timedatectl查看 SELinux 情况
> sestatus
SELinux status: disabled临时关闭(重启后失效)
> setenforce 0永久关闭:修改 /etc/selinux/config 中 SELINUX=disabled,重启生效。
查看命令帮助
> man ls # 查看命令手册,q 退出
> ls --help # 查看命令帮助
> man -k password # 按关键字搜索手册服务管理
> systemctl start nginx # 启动
> systemctl stop nginx # 停止
> systemctl restart nginx # 重启
> systemctl reload nginx # 重载配置(不中断服务)
> systemctl status nginx # 查看状态
> systemctl enable nginx # 开机自启
> systemctl disable nginx # 取消开机自启
> systemctl is-enabled nginx # 查看是否开机自启查看正在运行的服务
> systemctl list-units --type=service --state=running定时任务
> crontab -l # 查看当前用户的定时任务
> crontab -e # 编辑定时任务
> crontab -r # 删除当前用户的全部定时任务(慎用)
> systemctl status crond # 确认 crond 服务已启动格式:分 时 日 月 周 命令
# 每天 02:30 执行备份脚本,并记录日志
30 2 * * * /bin/bash /data/script/bak.sh >> /data/log/bak.log 2>&1
# 每 5 分钟执行一次
*/5 * * * * /bin/bash /data/script/check.sh用户管理
> useradd -m -s /bin/bash deploy # 创建用户并生成家目录
> passwd deploy # 设置密码
> usermod -aG wheel deploy # 加入 wheel 组(拥有 sudo 权限)
> id deploy # 查看 uid、gid 及所属组
> groups deploy # 查看用户所属组
> userdel -r deploy # 删除用户及家目录
> who # 查看当前登录用户
> w # 查看登录用户及其正在执行的命令环境变量
> echo $PATH # 查看 PATH
> env | grep JAVA # 查看已设置的环境变量
# 临时生效(仅当前会话)
> export JAVA_HOME=/usr/local/jdk
# 全局永久生效(推荐放在 /etc/profile.d/ 下)
> echo 'export JAVA_HOME=/usr/local/jdk' > /etc/profile.d/java.sh
> source /etc/profile.d/java.sh时间同步
> date # 查看当前时间
> timedatectl # 查看时间、时区、NTP 状态
> systemctl status chronyd # CentOS 7 默认使用 chronyd
> chronyc sources -v # 查看时间源
> chronyc tracking # 查看同步状态关机与重启
> shutdown -h now # 立即关机
> shutdown -r now # 立即重启
> shutdown -r +10 # 10 分钟后重启
> shutdown -c # 取消定时关机/重启
> reboot # 重启
> poweroff # 关机#网络
ip 地址
> ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
207.154.202.216ip 命令(无需安装 net-tools)
> ip addr
> ip route # 查看路由(默认网关)公网 IP
可以通过 curl 访问第三方服务获取公网 IP。
- 查询纯公网 IP:
curl ifconfig.me- 查询带地理位置信息的公网 IP:
curl cip.cc网关
> cat /etc/sysconfig/network
NETWORKING="yes"
GATEWAY="192.0.2.1"
HOSTNAME="srv.eddiechen.cn"或查看路由表
> ip route | grep default
default via 192.0.2.1 dev eth0 proto static metric 100DNS
> cat /etc/resolv.conf
nameserver 208.74.168.131
nameserver 208.74.168.132
nameserver 4.2.2.1测试域名解析
> nslookup www.baidu.com
> dig www.baidu.com +short端口占用
> ss -tunlp | grep 8080 # 查看端口被哪个进程占用
> netstat -tunlp | grep 8080 # 需安装 net-tools
> lsof -i:8080 # 需安装 lsof
# 查看指定进程占用的端口
> ss -tunlp | grep "pid=1234"防火墙
> systemctl status firewalld # 查看服务状态
> firewall-cmd --state # 查看防火墙状态
> firewall-cmd --list-all # 查看已开放端口与服务
> firewall-cmd --add-port=8080/tcp --permanent # 永久开放端口
> firewall-cmd --remove-port=8080/tcp --permanent # 关闭端口
> firewall-cmd --add-service=http --permanent # 开放服务
> firewall-cmd --reload # 重新加载配置带 --permanent 的修改需要执行 --reload 才会生效。
连通性测试
> ping -c 4 8.8.8.8 # 测试网络连通性
> telnet 192.168.1.124 3306 # 测试端口(需安装 telnet)
> nc -zv 192.168.1.124 3306 # 测试端口(需安装 nc)
> curl -I http://192.168.1.124:8080 # 查看 HTTP 响应头
> traceroute 8.8.8.8 # 路由追踪(需安装 traceroute)#磁盘与文件
查看磁盘和分区
> lsblk # 查看磁盘与分区结构
> fdisk -l # 查看磁盘分区表
> df -h # 查看已挂载分区的使用情况
> df -i # 查看 inode 使用情况查看磁盘剩余空间
> df -h
Filesystem Size Used Avail Use % Mounted on
/dev/simfs 10G 353M 9.7G 4% /查看当前目录下文件大小
> du -sh
2.8G .查看指定目录下文件大小
> du /etc -sh
38M /etc查看当前目录下文件大小,并按大小排序
> du -sh * | sort -hr
1.9G dockfiles
338M dotnet
336M temp
118M dotnet-sdk-3.1.426-linux-x64.tar.gz
20M nginx-1.24.0
1.1M nginx-1.24.0.tar.gz
4.0K dotnet-sdk.sh
4.0K anaconda-ks.cfg查看当前目录下文件大小,并按大小排序,并输出文件名
> du -sh * | sort -hr | awk '{print $2}'
dockfiles
dotnet
temp
dotnet-sdk-3.1.426-linux-x64.tar.gz
nginx-1.24.0
nginx-1.24.0.tar.gz
dotnet-sdk.sh
anaconda-ks.cfg查看文件大小
> du -sh /data/www/api/查看文件大小并排序
> du -sh /data/www/api/* | sort -hr挂载磁盘
> mount /dev/vdb1 /data # 挂载
> umount /data # 卸载
> blkid # 查看分区 UUID 与文件系统类型
> findmnt # 查看当前挂载情况开机自动挂载:编辑 /etc/fstab 追加一行
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 0修改后先执行 mount -a 验证,避免配置错误导致重启失败。
修改文件权限
> chmod +x *.sh
# 或者
> chmod 755 *.sh
# +x 等价于 775权限数字含义:r=4、w=2、x=1,755 即 rwxr-xr-x。
> chmod -R 755 /data/www # 递归修改目录及子文件
> chown -R www:www /data/www # 修改属主与属组
> ls -l /data/www # 查看权限与属主创建软链接
# 创建软链接(类似快捷方式)
> ln -s /data/app/releases/v1.0.0 /data/app/current
# 查看指向
> ls -l /data/app/current
lrwxrwxrwx 1 root root 28 Oct 27 10:24 current -> /data/app/releases/v1.0.0
# 删除软链接(末尾不要加 /,否则可能删到目标目录内容)
> rm -f /data/app/current文件查找
> find /data -name "*.log" # 按名称查找
> find /data -type f -name "*.log" # 只查找文件
> find /data -type d -name "temp" # 只查找目录
> find /data -type f -size +100M # 查找大于 100M 的文件
> find /data -type f -mtime -7 # 查找 7 天内修改过的文件
> find /data -type f -name "*.log" -delete # 查找并删除压缩与解压
# tar
> tar -czvf web.tar.gz /data/www/web # 压缩
> tar -tzvf web.tar.gz # 查看压缩包内容
> tar -xzvf web.tar.gz -C /data/www # 解压到指定目录
# zip(需安装 zip / unzip)
> zip -r web.zip /data/www/web
> unzip web.zip -d /data/www按时间查找并拷贝
# 查找创建时间在 2024-01-01 14:00:00 之后的文件并复制
> find /srv/www/api/ -type f -newermt '2024-01-01 14:00:00' -exec cp '{}' /data/bak/api \;
# 查找创建时间在 2024-01-01 14点至 2024-01-01 15:00:00 之间的文件并复制
#find /srv/www/api/ -type f -newermt '2024-01-01 14:00:00' ! -newermt '2024-01-01 15:00:00' -exec cp -rp '{}' /data/bak/api \;
> find /srv/www/api/ -type f -newermt '2024-01-01 14:00:00' -and ! -newermt '2024-01-01 15:00:00' -exec cp '{}' /data/bak/api \;按时间删除
# 查找创建时间在 2024-01-01 14:00:00 之前的文件压缩为 2023.tar.gz
> find . -type f ! -newermt "2024-01-01 14:00:00" -print0 | tar --null -czvf ../2023.tar.gz --files-from -
# 查找创建时间在 2024-01-01 到 2024-02-01 之间的文件压缩 为 202401.tar.gz
> find . -type f -newermt "2024-01-01" ! -newermt "2024-02-01" -print0 | tar --null -czvf ../202401.tar.gz --files-from -
# 查找创建时间在 2024-01-01 14:00:00 之前的文件并删除
> find /srv/www/api/ -type f ! -newermt '2024-01-01 14:00:00' -exec rm -rf '{}' \;
# 查找创建时间超过 365 天的文件并删除
> find /srv/www/api/ -type f -mtime +365 -exec rm -rf '{}' \;跨服务器拷贝
# 复制本机 /srv/www/web 目录下的所有文件到 192.168.1.124:/data/www/web 的目录下
> scp -rp /srv/www/web/* root@192.168.1.124:/data/www/web
# 查找创建时间在 2024-01-01 14:00:00 之后的文件并复制
> find /srv/www/api/ -type f -newermt '2024-01-01 14:00:00' -exec scp -rp '{}' root@192.168.1.124:/data/www/api \;
# 复制并跳过已存在的文件
> rsync -avz --ignore-existing /srv/www/Api/* root@192.168.1.124:/data/www/api#进程与日志
查看程序进程
> ps -aux | grep redis
> ps -ef | grep java进程管理
> ps -ef | grep java # 查看进程及 PID
> top -p <pid> # 查看指定进程的资源占用
> kill -15 <pid> # 优雅停止(推荐)
> kill -9 <pid> # 强制结束
> pkill -f app.jar # 按命令行关键字结束进程
# 后台运行并输出日志
> nohup java -jar app.jar > app.log 2>&1 &日志查找
在前 1000 行中查找 包含 getMethodList 和 f17fbc0a-8039-494f-b322 的数据
# 在前1000行中查找对应的字符串
> head -n 10000 /var/log/www/api.out.log | grep -E "getMethodList.*f17fbc0a-8039-494f-b322" -n
# 在文件中搜索对应的字符串
> grep -E '订单.*23' /var/log/www/api.out.log实时查看日志
> tail -f /var/log/www/api.out.log # 实时查看新增日志
> tail -n 200 -f /var/log/www/api.out.log # 先显示最后 200 行
> tail -f /var/log/www/api.out.log | grep -E "Error|Exception" # 实时过滤
> less +F /var/log/www/api.out.log # 使用 less 跟随,Ctrl+C 停止systemd 日志
> journalctl -u nginx -n 100 --no-pager # 查看 nginx 最近 100 行日志
> journalctl -u nginx -f # 实时查看
> journalctl --since "2024-01-01 14:00:00" --until "2024-01-01 15:00:00"
> journalctl -p err -b # 查看本次启动的错误日志#软件包管理
查看已安装的软件包
> rpm -qa | wc -l
197
> yum list installed | wc -l
198
> rpm -qa | grep nginx # 查看指定软件是否安装
> rpm -ql nginx # 查看软件安装的文件列表安装、更新与卸载
> yum install -y nginx # 安装
> yum remove -y nginx # 卸载
> yum update -y nginx # 更新指定软件
> yum update -y # 更新全部软件(生产环境慎用)
> yum search nginx # 搜索软件包
> yum info nginx # 查看软件包信息
> yum repolist # 查看已启用的软件源清理与重建缓存
> yum clean all # 清理缓存
> yum makecache # 重建缓存
