Linux下常用命令
1 端口
1.1 查询端口是否使用,以80端口为例
netstat -tuln | grep :<端口号>
netstat -tuln | grep :80
lsof -i :<端口号>(推荐,会列出使用端口的进程PID)
lsof -i :80
ss -tulnp | grep :<端口号>(在一些新版本的Linux中)
sudo ss -tulnp | grep :80
2 进程
2.1 PID
2.1.1 根据PID查询启动进程的命令
/proc/<PID>/cmdline
cat /proc/1234/cmdline | tr '\0' ' '
2.1.2 根据服务id查询可执行文件位置
ls -l /proc/3371187/cwd
2.2 TID
首先通过 top 命令获取内存或者CPU占用异常的进程的 PID,然后使用下面的命令查看线程级别的占用
top -Hp <PID>
找到占用高的线程 TID → 转十六进制
printf "%x\n" <TID>
用 jstack 输出线程堆栈,txt名称随便起
jstack <PID> > jstack.txt
在 jstack.txt 中搜索该线程,nid是0x起头(十六进制)
grep -A 30 "nid=0x<hex_TID>" jstack.txt
一般如果是代码的问题,这里就能看到具体的堆栈信息了,但是如果是GC导致的,那么就得去打印GC日志定位了。
3 压缩
3.1 zip
- 解压
unzip archive.zip
- 压缩文件
zip archive.zip file1.txt file2.txt
- 压缩整个目录
zip -r archive.zip directory_name
如果没有 unzip 命令,可以使用 JDK 来进行解压操作
jar -xvf yourfile.zip
同样的,也可以进行压缩操作
jar -cvf myapp.zip myapp/
4 rpm
rpm:Red Hat Package Manager,是用于管理 RPM 包的工具。
4.1 手动安装rpm包
5 SELinux
SELinux(Security-Enhanced Linux)
5.1 检查 SELinux 的当前状态
sestatus
5.2 临时设置为宽松模式
setenforce 0
6 时间
使用date
# 简单查询当前时间
date
# 修改,使用这个修改似乎可以绕开下面的那个自动同步的限制
date +%Y-%m-%d\ %H:%M:%S -s "2024-11-14 10:30:00"
使用timedatectl
# 查看当前时区
timedatectl
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 设置当前时间
timedatectl set-time "2024-11-14 10:30:00"
注意,设置时间的时候可能会遇到这个错误
Failed to set time: NTP unit is active
如果在尝试修改时间时遇到错误消息 "Failed to set time: NTP unit is active",意味着系统时间同步服务(NTP)正在运行,并且它会自动调整时间,因此你不能手动设置系统时间。
解决办法是先关掉,修改后再打开。
不是特别老的系统都是chronyd,所以关闭重启的时候试试这2个
systemctl stop ntpd
systemctl stop chronyd
6.1 时区无法设置的临时解决方案
有时候可能会遇到服务器时区无法设置,又不能随便重启服务器,可以使用下面的命令来手动设置时间,减去时区
date --set "$(date --date='8 hours ago')"
7 grep日志查询
7.1 tail实时查询
实时查看日志并过滤特定内容:
tail -f /path/to/logfile | grep -i "关键字"
- tail -f 会实时显示日志文件的内容。
- grep "关键字" 会过滤出包含 "关键字" 的行。
- -i 忽略大小写
查看特定行数的日志后开始过滤:
tail -n 100 /path/to/logfile | grep "关键字"
- 这会显示文件的最后 100 行并过滤出包含 "关键字" 的内容。
查看搜索内容的上下文:
tail -f /var/log/syslog | grep -C 3 "error"
- -B(before)
- -A(after)
- -C(Context)
组合多个 grep 筛选器:
tail -f /var/log/syslog | grep -E "error|warning" | grep -C 3 "error"
查找包含 "error" 和 "warning" 的日志,并且还会显示 "error" 前后各 3 行。
- -E:扩展正则表达式(Extended Regular Expression,简称 ERE)
7.2 cat顺序查询(非实时)
使用 cat 和 grep 组合查询,示例:
cat hil-ibss-itss.dev_info.log | grep -A 30 '告警恢复'
7.3 tac倒叙查询最后一个匹配
使用 tac 可以查询最后一个匹配,示例:
tac hil-ibss-itss.dev_info.log | grep -m1 -B30 '告警恢复' | tac
说明:
- tac:倒序读取文件内容(即从最后一行开始看);
- grep -m1:匹配“告警”的第一个(即倒序时的最后一个);
- -B30:显示匹配行之前的30行(因为现在是倒序);
- 再通过 tac 把结果正过来。
8 看文件和目录的详细信息
查看文件的年份
ll --time-style=long-iso
9 磁盘空间
9.1 磁盘空闲空间
- df:disk free
- -h:human-readable,以 KB/MB/GB 显示
df -h
9.2 磁盘使用空间
- du:disk usage
- --max-depth=1:只显示当前目录和它的直接子目录的大小(不递归更深)
✅ 查看当前目录下所有一级子目录占用空间(人类可读)
du -h --max-depth=1
10 系统和硬件
10.1 判断当前机器是物理机还是虚拟机
方法 1:dmidecode
sudo dmidecode -t system | grep -i "Manufacturer\|Product Name"
常见输出:
物理机(例如 Dell、HP、Lenovo):
Manufacturer: Dell Inc.
Product Name: PowerEdge R740
虚拟机:
Manufacturer: VMware, Inc.
Product Name: VMware Virtual Platform
Manufacturer: Microsoft Corporation
Product Name: Virtual Machine # Hyper-V
Manufacturer: QEMU
Product Name: Standard PC (Q35 + ICH9, 2009) # KVM/QEMU
方法 2:systemd-detect-virt
大多数新系统都有这个命令:
systemd-detect-virt
输出可能是:
kvm → KVM 虚拟机
vmware → VMware
microsoft → Hyper-V
oracle → VirtualBox
none → 物理机
方法 3:lscpu
lscpu | grep Hypervisor
如果有类似:
Hypervisor vendor: KVM
Virtualization type: full
``
→ 说明是虚拟机。
如果没有 Hypervisor 信息 → 多半是物理机。
### 方法 4:dmesg
```shell
dmesg | grep -i hypervisor
如果能看到 KVM, VMware, Hyper-V 等字样 → 虚拟机。
没有 → 大概率物理机。
📌 推荐组合:
dmidecode -t system | egrep -i "Manufacturer|Product"
systemd-detect-virt
lscpu | grep Hypervisor
三条结果对照一下,就能 100% 确认。
11 locale
1️⃣ Locale 是什么
Locale 决定了系统如何处理与语言和地区相关的内容,包括:
- 字符集编码(UTF-8、ASCII 等)
- 日期、时间显示格式
- 数字、货币、单位格式
- 消息语言(系统提示、错误信息)
2️⃣ 命令作用
locale
输出类似你之前看到的:
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
...
LC_ALL=
- LANG:系统默认语言和编码
- LC_CTYPE:字符类型处理,决定 vim 如何识别 UTF-8
- LC_NUMERIC:数字格式
- LC_TIME:时间/日期格式
- LC_MESSAGES:系统提示信息的语言
- LC_ALL:可以覆盖全部 LC_*,优先级最高
如果 LC_ALL 没设置,系统就用 LANG 来作为默认。
3️⃣ 你之前看到的报错
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
说明:
- 系统环境变量是 zh_CN.UTF-8
- 但是系统 没有生成对应的 locale 文件
- 这会导致 vim 等程序无法正确识别 UTF-8 → 中文显示乱码
✅ 解决方案
安装中文 UTF-8 语言包,这个需要连接外网
dnf install glibc-langpack-zh -y

浙公网安备 33010602011771号