0%

linux的常用命令

前言

本文总结了部分个人认为在linux中比较常用的命令。

文件操作类

首先来看看一些关于文件操作的命令。

cd/ls

cd和ls应该是使用频率最高的两个命令,前者用来切换文件目录,后者则用来看当前目录下的文件列表。

cd比较简单:

cd ~ 进入home目录
cd - 进入上一次选择的目录
cd !$ 将上个命令的参数作为这次cd的参数使用,例如:上一个命令是cd -,那么随后使用cd !$ 等价于 cd -

ls相比cd就多了一些参数选择:

ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

tail/cat/grep

tail,cat,grep这三个命令应该是用来查看日志文件时最常用的命令组合了。

tail

tail是用来显示文件的部分内容,还能将文件的新增内容不断显示出来,是查看日志最好用的命令。

tail [filename] 默认显示文件的最后十行内容
tail -f [filename] 循环读取文件内容,也就是当文件又新增内容会显示出来
tail -c [n] 显示最后n个字节的内容
tail -n [n] 显示最后n行的内容 也可以省略n直接带数字,例如:tail -n 2 等价于 tail -2
tail -n +[n] 显示从第n行到最后一行的内容

cat

cat会将整个文件的内容显示出来,但这只是其中一个用法,他还可以用来创建和合并文件:

cat > [filename] 从键盘创建文件
cat [file1] [file2] … > [fileN] 将几个文件合并成一个新文件,这里多个文件名用空格隔开
cat -n [filename] 输出所有行并带上行号
cat -b [filename] 输出所有行,只对非空行带上行号

grep

grep用于过滤特定关键字的内容,通常会与tail,cat命令组合使用来从日志文件中查询想要的信息。

grep [‘关键字’] 显示带有关键字的行的内容
grep -A [n] [‘关键字’] 显示带有关键字及之后n行的内容
grep -a [‘关键字’] 不忽略二进制的数据
grep -B [n] [‘关键字’] 显示带有关键字及之前n行的内容
grep -b [‘关键字’] 在显示带有关键字的内容前,标示出该行第一个字符的编号
grep -C [n] [‘关键字’] 显示带有关键字及前后n行的内容
grep -c [‘关键字’] 计算带有关键字的行数
grep -E [正则表达式] 可以使用正则表达式来过滤内容
grep -i 忽略字符大小写
grep -v [‘关键字’] 显示不包含关键字的行的内容
grep -w [‘关键字’] 显示能完整匹配关键字的行的内容
例如:类似文本kjkjld,dfdjf>ddd,grep -w ‘>ddd’是无法匹配上的,但是 grep -w ‘ddd’可以
grep -x [‘关键字’] 显示整行匹配关键字的行的内容

以上只列举了grep在筛选文本中常用的参数,这只是他功能的一部分。
比如说,执行命令grep -r ‘kjkjld,dfdjf>ddd’ /Users/rf/myproject,会展示出目录/Users/rf/myproject下所有文件中带有关键字的行的内容。

网络通讯

ping

ping 命令用于测试本机与目标主机的网络连通性,通过 ICMP 协议发送回显请求报文。

ping [host] 发送 ICMP 报文测试连通性(默认持续发送,Ctrl+C 停止)
ping -c [n] [host] 指定发送 n 个包后停止
ping -i [秒数] [host] 设置发包间隔时间
ping -s [大小] [host] 设置数据包大小
ping -W [超时ms] [host] 设置单次请求的超时时间

常见场景:ping -c 4 baidu.com 测试到百度的网络延迟。

curl / wget

用于在命令行中发起 HTTP 请求或下载文件。

curl [url] 获取 URL 内容并输出到标准输出
curl -I [url] 只获取响应头(检查 HTTP 状态码、Server 类型等)
curl -X POST [url] -d ‘key=val’ 发送 POST 请求
curl -H ‘Authorization: Bearer xxx’ [url] 携带自定义 Header
curl -o [filename] [url] 将响应保存为指定文件
wget [url] 下载文件(自动重命名)
wget -c [url] 支持断点续传下载
wget -r [url] 递归下载整个页面及其资源(慎用)

常见场景:用 curl -I https://api.example.com/health 快速检查服务健康状态。

netstat / ss

查看网络连接、端口占用、路由表等信息。ss 是 netstat 的现代替代品,性能更好。

ss -tlnp 查看 TCP 监听端口及对应进程(排查端口被谁占用最常用)
ss -tulnp 同时查看 TCP 和 UDP 监听端口
ss -an 查看所有连接状态(含 LISTEN/ESTABLISHED/TIME_WAIT)
netstat -tlnp 功能同 ss -tlnp(老版本兼容)
netstat -an | grep ESTABLISHED 查看当前已建立的连接

常见场景:ss -tlnp | grep :8080 查看 8080 端口被哪个进程占用。

ssh / scp

远程登录和安全拷贝。

ssh user@host 远程登录目标主机
ssh -p [port] user@host 指定端口的远程登录
scp [localfile] user@host:/path/ 上传本地文件到远程主机
scp -r [localdir] user@host:/path/ 上传整个目录
scp user@host:/path/file ./ 从远程主机下载文件

进阶技巧:配置 ~/.ssh/config 后可以用别名免密码登录(配合 SSH Key)。

tcpdump

抓包工具,用于分析网络传输数据包,定位通信问题。

tcpdump -i eth0 抓取 eth0 网卡的所有流量
tcpdump -i eth0 port 8080 只抓 8080 端口的流量
tcpdump -i eth0 host 192.168.1.100 只抓与该 IP 的通信
tcpdump -i eth0 -w capture.pcap 将抓包结果保存为 pcap 文件(Wireshark 可打开分析)
tcpdump -A -i eth0 以 ASCII 格式显示包内容(方便看 HTTP 明文)

常见场景:tcpdump -i any port 8080 -A 抓取 8080 端口的 HTTP 请求明文。

进程管理类

在 Linux 上排查服务异常、杀进程、查看资源占用时必不可少。

ps / top / htop

ps aux 显示所有进程详细信息(CPU、内存、PID、启动命令)
ps aux | grep java 过滤出 Java 相关进程
ps -ef | grep nginx 另一种常用格式,显示 PPID(父进程ID)
top 实时动态显示进程资源占用(按 CPU 排序,交互式界面)
top -u username 只显示某用户的进程
htop top 的增强版(彩色、支持鼠标操作、树形视图,需单独安装)
按 F6 可按 CPU/内存/PID 排列,F9 杀进程,F10 退出

常见场景:ps aux --sort=-%mem | head -10 找出内存占用最高的 10 个进程。

kill / killall

kill [pid] 默认发送 SIGTERM(15),优雅终止进程
kill -9 [pid] 发送 SIGKILL(9),强制杀死进程(不可捕获/忽略)
kill -l 列出所有信号编号及名称
killall [process_name] 按进程名批量终止(如 killall java)

注意:优先使用 kill(SIGTERM),让进程有机会做清理工作;kill -9 应作为最后手段。

jobs / fg / bg / nohup

管理前后台任务,适合长时间运行的脚本或服务。

nohup command & 后台运行且不受终端关闭影响(输出默认写入 nohup.out)
nohup command > app.log 2>&1 & 重定向输出到指定日志文件
jobs 查看当前终端的后台任务列表
Ctrl+Z 将前台任务暂停并放入后台(stopped 状态)
bg [%jobnum] 将 stopped 任务转为后台运行(bg 默认操作最后一个任务)
fg [%jobnum] 将后台任务调到前台继续执行

常见场景:启动一个 Java 服务——nohup java -jar app.jar > app.log 2>&1 &

systemctl

管理系统服务(CentOS 7+ / Ubuntu 16.04+ 使用 systemd)。

systemctl status nginx 查看 Nginx 服务状态
systemctl start nginx 启动服务
systemctl stop nginx 停止服务
systemctl restart nginx 重启服务
systemctl reload nginx 重新加载配置(不中断连接)
systemctl enable nginx 设置开机自启
systemctl disable nginx 取消开机自启
journalctl -u nginx -f 实时查看服务的日志输出

磁盘与存储

df / du / free

df -h 以人类可读格式查看磁盘分区使用情况(看整体空间够不够)
df -ih 查看 inode 使用情况(小文件过多时会耗尽 inode)
du -sh [dir] 查看目录总大小(定位哪个子目录占用最多空间)
du -sh * | sort -rh | head 查看当前目录下各子目录的大小排名
free -h 查看内存使用情况(total/used/buff/cache available)
free -m 以 MB 为单位显示内存

常用组合:du -sh /* | sort -rh | head -5 快速找出根目录下最大的 5 个文件夹。

mount / umount

mount /dev/sdb1 /mnt/data 挂载磁盘分区到指定目录
umount /mnt/data 卸载挂载点
mount -t nfs 192.168.1.100:/data /mnt/nfs 挂载 NFS 共享目录
df -h | grep mounted 查看已挂载的文件系统

fdisk / lsblk

lsblk 以树形结构列出所有块设备(硬盘、分区一目了然)
fdisk -l 列出所有磁盘分区的详细信息
fdisk /dev/sdb 进入交互模式对新磁盘进行分区

压缩与解压

Linux 下最常用的压缩格式是 .tar.gz(tgz),其次是 .zip.tar.bz2

tar(最常用)

tar -czvf archive.tar.gz dir/ 将目录打包并 gzip 压缩(c=创建, z=gzip, v=详细, f=文件名)
tar -xzvf archive.tar.gz 解压 .tar.gz 到当前目录
tar -czvf archive.tar.gz file1 file2 file3 打包多个文件
tar -tzvf archive.tar.gz 不解压,只查看压缩包内文件列表(预览)
tar -xzvf archive.tar.gz -C /target/path/ 解压到指定目录
tar -cjvf archive.tar.bz2 dir/ 使用 bzip2 压缩(压缩率更高,速度更慢)
tar -xjvf archive.tar.bz2 解压 .tar.bz2

参数记忆技巧:c=create(创建), x=extract(解压), z=gzip, j=bzip2, v=verbose(显示过程), f=file(必须放在最后)

gzip / gunzip / zip / unzip

gzip [file] 压缩单个文件(原文件会被删除,生成 .gz 文件)
gunzip [file].gz 解压 .gz 文件
zip -r archive.zip dir/ 递归打包目录为 zip(跨平台通用格式)
unzip archive.zip 解压 zip 文件
unzip -l archive.zip 不解压,只查看 zip 内文件列表
unzip -o archive.zip 覆盖已有文件(不询问)

用户与权限

chmod / chown

chmod 755 script.sh 赋予脚本执行权限(rwxr-xr-x)
chmod +x script.sh 同上(更直观的写法)
chmod -R 644 /var/www/html/ 递归修改目录下所有文件的权限
chown user:group file 修改文件的所有者和所属组
chown -R www:www /var/www/ 递归修改目录归属(Web 服务部署时常用)

权限数字速查:

1
2
3
4
5
6
7
r=4(读) w=2(写) x=1(执行)
7 = rwx (4+2+1)
6 = rw- (4+2)
5 = r-x (4+1)
4 = r--
0 = ---
三位分别代表:所有者 | 组用户 | 其他用户

su / sudo

su - root 切换到 root 用户(加载完整环境变量)
sudo command 以 root 身份执行单条命令
sudo -u mysql command 以指定用户身份执行命令(切换用户但不需知道密码)
sudo visudo 编辑 sudoers 配置文件(给普通用户分配 sudo 权限)

useradd / passwd

useradd -m -s /bin/bash newuser 创建新用户(-m 创建 home 目录,-s 指定 shell)
passwd [username] 设置或修改用户密码
userdel -r username 删除用户及 home 目录
groups [username] 查看用户所属的组

文本处理进阶

除了前面提到的 cat/grep/tail,还有几个强大的文本处理工具。

find

find /var/log -name “.log” 按名称查找文件
find . -type f -mtime -7 查找 7 天内修改过的文件
find . -type d -name “node_modules” 查找名为 node_modules 的目录
find . -size +100M 查找大于 100MB 的文件
find . -empty 查找空文件或空目录
find . -perm 777 查找权限为 777 的文件(安全审计常用)
find . -name “
.log” -delete 直接删除匹配的文件(谨慎使用)
find /tmp -type f -atime +30 -delete 清理 30 天以上未访问的临时文件

awk / sed

文本处理的两大利器:awk 擅长按列处理表格化文本,sed 擅长流式替换编辑。

awk — 列处理器

awk ‘{print $1}’ access.log 提取日志第 1 列(如 IP 地址)
awk ‘{print $NF}’ file 提取每行最后一列(NF = Number of Fields)
awk -F ‘:’ ‘{print $1}’ /etc/passwd 用冒号分隔后提取第 1 列
awk ‘{sum+=$1} END {print sum}’ 对第一列求和
awk ‘$3 > 100’ file 过滤第 3 列大于 100 的行
awk ‘/error/‘ file 匹配包含 error 的行(类似 grep 功能)

sed — 流编辑器

sed ‘s/old/new/g’ file 全局替换文件中的字符串(不修改原文件,输出到 stdout)
sed -i ‘s/old/new/g’ file 直接替换原文件内容(-i = in-place)
sed -n ‘10,20p’ file 只打印第 10~20 行
sed ‘/pattern/d’ file 删除匹配行的内容并输出
sed -i ‘5d’ file 直接删除文件的第 5 行

sort / uniq / wc

sort file 按字典序排序
sort -rn file 按数值倒序排列
sort -k2 -rn file 按第 2 列数值倒序
uniq file 去除连续重复行(需要先 sort 才能全局去重)
sort file | uniq -c 统计每个值出现的次数(常用来统计日志频率)
sort file | uniq -c | sort -rn | head 取出现次数最多的前几项
wc -l file 统计行数
wc -w file 统计单词数
wc -c file 统计字节数

less / more / head

less [file] 分页浏览大文件(支持上下翻页、搜索、支持二进制文件)
more [file] 分页浏览基础版(不支持向上翻页)
head -n 20 file 查看文件前 20 行
head -c 1K file 查看前 1KB 内容

提示:less 中 /关键字 搜索,q 退出,G 跳到末尾,g 跳到开头。

系统信息与运维

uname / hostname / uptime

uname -a 查看完整的内核版本和系统架构信息
hostname 查看主机名
hostnamectl set-hostname newname 修改主机名(CentOS 7+/Ubuntu)
uptime 查看系统负载和运行时间(load average 很重要)

uptime 输出示例:16:30:01 up 120 days, 3 users, load average: 0.15, 0.08, 0.05

  • load average 三个数字分别是 1分钟/5分钟/15分钟的平均负载
  • 单核负载 > 1.0 或多核 > 核心数说明系统压力大

history / which / whereis

history 查看最近执行的命令历史
history | grep docker 过滤历史命令
![cmd] 重新执行上一条命令(!! 即两个感叹号)
!n 重新执行历史中的第 n 条命令(从 history 编号获取)
which python3 查看可执行文件的路径
whereis nginx 查看程序的二进制、源码、手册页位置

crontab

定时任务管理。

crontab -e 编辑当前用户的定时任务
crontab -l 查看当前定时任务列表
crontab -r 删除所有定时任务(慎用)

cron 表达式格式:分 时 日 月 周 命令

1
2
3
4
5
6
# 示例
* * * * * command 每分钟执行一次
0 2 * * * command 每天凌晨 2 点执行
*/15 * * * * command 每 15 分钟执行一次
0 9 * * 1-5 command 周一到周五早上 9 点执行
30 18 1 * * command 每月 1 号下午 6:30 执行

journalctl(systemd 日志)

journalctl -u nginx 查看 Nginx 服务的全部日志
journalctl -u nginx -f 实时跟踪日志(类似 tail -f)
journalctl -u nginx –since “2026-03-01” 查看某日期之后的日志
journalctl -p err 只看错误级别的日志
journalctl -xe 查看本次启动以来的崩溃/失败日志(排查启动问题首选)

以上命令覆盖了 Linux 运维和开发中最常见的场景,掌握这些足以应对日常工作中的大部分需求。建议结合实际项目多练多查,man 命令名 可以随时查阅官方文档。