Linux基础命令大全
1、文件目录
(1)ls
ls -l | 以详细列表形式显示文件 / 目录信息,包含:权限、链接数、所有者、所属组、文件大小、修改时间、文件名 |
ls -a | 显示目录下所有文件 / 目录,包括以 . 开头的隐藏文件(如 .bashrc)及 .(当前目录)、..(上级目录) |
ls -la | 结合 -l 和 -a 的功能,以长格式显示所有文件(含隐藏文件),是日常查看目录详情的高频命令 |
ls -h | 以友好单位(如 1K、2M、3G)显示文件大小,需搭配 -l 使用才更实用 |
ls -lh | 长格式显示文件信息,并以 K/M/G 单位标注大小,快速直观判断文件占用空间 |
ls -r | 反向排序(默认按字母升序,-r 改为降序),常搭配 -l(ls -lr)或 -t(ls -tr)使用 |
ls -t | 按文件修改时间排序(最新修改的文件在前),搭配 -l(ls -lt)可查看最近更新的文件 |
ls -F | 在文件名后添加符号标识文件类型:/ 表示目录、* 表示可执行文件、@ 表示软链接,快速区分文件属性 |
ls -ltr | 按文件修改时间倒序(最早修改的文件在前)长格式显示,适合追溯历史文件 |
ls --color | 以彩色区分文件类型(如目录蓝色、可执行文件绿色、普通文件黑色),常用 ls --color=auto 自动适配终端 |
ls -d */ | 仅显示当前目录下的子目录(不包含普通文件),*/ 是通配符,限定只匹配目录 |
ls -i | 显示文件的 inode 编号(inode 是文件系统中唯一标识文件的元数据索引),用于硬链接管理等高级操作 |
ls -s | 显示文件大小(默认以 “块” 为单位),搭配 -h(ls -sh)可转为 K/M/G 友好单位 |
ls -R | 递归列出当前目录下所有层级子目录的内容,遍历整个目录树,适合查看完整目录结构 |
(2)cd
cd 目录路径 | 切换到指定的目录(绝对路径或相对路径),例如 cd /home/user 或 cd Documents |
cd ~ | 切换到当前用户的家目录(如 /home/用户名 或 /root),是最常用的快捷方式之一 |
cd .. | 切换到当前目录的上级目录,例如在 /home/user/docs 中执行后会进入 /home/user |
cd - | 切换到上一次所在的目录(相当于 “返回” 操作),常用于两个目录间快速切换 |
cd . | 切换到当前目录(实际无效果,主要用于脚本中规范路径格式或占位) |
cd | 不指定任何参数时,默认切换到当前用户的家目录,等价于 cd ~ |
cd ../../ | 切换到上两级目录,可根据需求叠加(如 cd ../../../ 切换到上三级目录) |
cd ~用户名 | 切换到指定用户的家目录(需有访问权限),例如 cd ~root 切换到 root 用户的家目录 |
(3)mkdir
mkdir 目录名 | 创建单个目录,例如 mkdir docs 会在当前目录下创建名为 docs 的目录 |
mkdir -p 路径 | 递归创建多级目录(若父目录不存在则自动创建),例如 mkdir -p a/b/c 会依次创建 a、a/b、a/b/c 三级目录 |
mkdir -m 权限 目录名 | 创建目录时直接指定权限(无需后续用 chmod 修改),例如 mkdir -m 755 public 创建权限为 rwxr-xr-x 的 public 目录 |
mkdir -v 目录名 | 创建目录时显示详细信息(告知目录已创建),例如 mkdir -v logs 会输出 mkdir: 已创建目录 'logs' |
mkdir -p -v 多级路径 | 递归创建多级目录并显示每个目录的创建信息,例如 mkdir -p -v x/y/z 会逐行输出每个目录的创建过程 |
mkdir 目录1 目录2 目录3 | 一次性创建多个同级目录,例如 mkdir doc img video 同时创建 doc、img、video 三个目录 |
2、文件操作
(1)rm
rm 文件 | 删除指定文件,删除前会提示确认(y 确认,n 取消),例如 rm note.txt 删除 note.txt 文件 |
rm -f 文件 | 强制删除文件,不提示确认(即使文件为只读),例如 rm -f temp.log 直接删除 temp.log 且无提示 |
rm -r 目录 | 递归删除目录及其包含的所有文件和子目录,例如 rm -r docs 删除 docs 目录及其中所有内容(删除前会提示) |
rm -rf 目录 | 强制删除目录及其内容,不提示确认(最危险也最常用的目录删除方式),例如 rm -rf old_data 直接删除 old_data 目录及所有内容 |
rm -i 文件 | 删除前强制提示确认(比默认提示更严格,即使在非交互模式下也会提示),例如 rm -i important.txt 会明确询问是否删除 |
rm -v 文件/目录 | 显示删除过程的详细信息,例如 rm -v file1.txt 会输出 已删除 'file1.txt' |
rm -rf * | 删除当前目录下所有文件和子目录(不包括隐藏文件),* 匹配所有非隐藏项 |
rm -rf .[!.]* ..?* * | 删除当前目录下所有文件(包括隐藏文件),避免因 * 不匹配隐藏文件导致的遗漏 |
(2)cp
cp 源文件 目标路径 | 复制单个文件到指定路径,若目标是目录则保留原文件名名;若目标是新文件名则复制并改名,例如 cp file.txt docs/ 或 cp file.txt newfile.txt |
cp -r 源目录 目标路径 | 递归复制目录及其所有内容(包括子目录和文件),例如 cp -r docs/ backups/ 将 docs 目录复制到 backups 目录下 |
cp -i 源文件 目标 | 复制时若目标文件已存在,会提示确认是否覆盖,例如 cp -i file.txt docs/ 若 docs/file.txt 存在则询问是否覆盖 |
cp -v 源 目标 | 显示复制过程的详细信息,例如 cp -v img.jpg pics/ 会输出 'img.jpg' -> 'pics/img.jpg' |
cp -f 源文件 目标 | 强制复制,若目标文件已存在且无写入权限,会强制覆盖(忽略权限检查),例如 cp -f readme.txt /opt/ |
cp -p 源文件 目标 | 复制时保留文件的原始属性(权限、所有者、修改时间等),例如 cp -p data.log backups/ 保持 data.log 的属性不变 |
cp -a 源目录 目标 | 等价于 -dR --preserve=all,递归复制目录并保留所有属性(包括符号链接),适合完整备份目录,例如 cp -a config/ config_bak/ |
cp -u 源 目标 | 仅当源文件比目标文件新,或目标文件不存在时才复制,例如 cp -u *.txt docs/ 只更新较新的文本文件 |
cp -r 源目录1 源目录2 目标目录 | 一次性复制多个目录到目标目录下,例如 cp -r docs/ pics/ backups/ 将 docs 和 pics 都复制到 backups 中 |
cp -l 源文件 目标 | 不复制文件内容,而是创建硬链接(节省空间,修改任一文件会影响所有链接),例如 cp -l file.txt file_link |
cp -s 源文件 目标 | 创建软链接(符号链接)而非复制文件,例如 cp -s /usr/bin/python3 python 生成指向 python3 的软链接 python |
(3)mv
mv 源文件/目录 目标路径 | 移动文件或目录到指定路径,若目标是目录则保持原名;若目标是新名称则移动并改名,例如 mv file.txt docs/ 或 mv old.txt new.txt |
mv -i 源 目标 | 移动时若目标已存在,会提示确认是否覆盖,例如 mv -i file.txt docs/ 若目标存在则询问确认 |
mv -f 源 目标 | 强制移动,若目标已存在则直接覆盖且不提示,例如 mv -f temp.log logs/ 强制覆盖已有文件 |
mv -v 源 目标 | 显示移动过程的详细信息,例如 mv -v pics/ images/ 会输出 'pics/' -> 'images/' |
mv 文件1 文件2 目标目录 | 一次性移动多个文件到目标目录,例如 mv a.txt b.jpg docs/ 将两个文件都移到 docs 目录 |
mv -n 源 目标 | 若目标文件已存在,则不移动也不提示,避免意外覆盖,例如 mv -n important.txt backups/ 安全移动 |
mv --backup=numbered 源 目标 | 移动时若目标存在,会创建带编号的备份文件(如 file.txt.~1~),例如 mv --backup=numbered file.txt docs/ |
(4)touch
touch 文件名 | 创建一个空文件(若文件不存在);若文件已存在,则更新其访问时间和修改时间为当前时间,例如 touch note.txt |
touch 文件1 文件2 文件3 | 一次性创建多个空文件,例如 touch a.txt b.md c.csv 同时创建三个不同类型的空文件 |
touch -d "时间字符串" 文件名 | 创建文件时指定时间戳(而非当前时间),或修改已有文件的时间戳,例如 touch -d "2023-01-01 12:00" log.txt |
touch -t 时间格式 文件名 | 以 [[CC]YY]MMDDhhmm[.ss] 格式指定时间戳,例如 touch -t 202301011200.30 data.log 设置时间为 2023 年 1 月 1 日 12:00:30 |
touch -a 文件名 | 仅更新文件的访问时间(不改变修改时间),例如 touch -a readme.txt 记录 “查看” 时间 |
touch -m 文件名 | 仅更新文件的修改时间(不改变访问时间),例如 touch -m script.sh 模拟文件 “被修改” |
touch -c 文件名 | 仅更新已有文件的时间戳,若文件不存在则不创建,例如 touch -c oldfile.txt 避免误创建新文件 |
touch -r 参考文件 目标文件 | 让目标文件的时间戳与参考文件保持一致,例如 touch -r template.txt newfile.txt 同步时间戳 |
3、文件读取
(1)cat
cat 文件名 | 读取并显示文件的全部内容,例如 cat README.txt 输出该文件的文本内容 |
cat 文件1 文件2 | 依次显示多个文件的内容,例如 cat part1.txt part2.txt 连续输出两个文件的内容 |
cat -n 文件名 | 显示文件内容并为每一行添加行号(包括空行),例如 cat -n script.sh 方便查看代码行数 |
cat -b 文件名 | 仅为非空行添加行号(空行不编号),例如 cat -b notes.txt 适合处理有较多空行的文本 |
cat > 文件名 | 创建新文件并写入内容(按 Ctrl+D 结束输入),例如 cat > newfile.txt 可快速创建文本文件 |
cat >> 文件名 | 向已有文件末尾追加内容(不会覆盖原有内容),例如 cat >> log.txt 向日志文件添加新内容 |
cat -s 文件名 | 将连续的多个空行压缩为一个空行,例如 cat -s messy.txt 使输出更整洁 |
cat -T 文件名 | 将文件中的制表符(Tab)显示为 ^I,例如 cat -T data.csv 方便区分空格和制表符 |
cat 文件1 文件2 > 合并文件 | 将多个文件的内容合并到一个新文件中,例如 cat chapter1.txt chapter2.txt > book.txt |
cat -v 文件名 | 显示文件中的非打印字符(除换行符和制表符外),用于查看特殊字符 |
(2)more
more 文件名 | 分页显示文件内容(默认从第一行开始),支持按 Space 键翻页、Enter 键逐行滚动,按 q 退出 |
cat 文件名 | more | 将其他命令的输出通过 more 分页显示,解决输出内容过长的问题,例如 ls -lR / | more 分页查看目录递归列表 |
more +数字 文件名 | 从文件的指定行号开始显示内容,例如 more +50 log.txt 直接从第 50 行开始查看日志 |
more -d 文件名 | 显示操作提示(如 “按空格键继续,'q' 退出,'h' 帮助”),避免新手因不知操作方式而卡住 |
more +/关键词 文件名 | 从文件中第一个匹配 “关键词” 的位置开始显示,例如 more +/error app.log 直接定位到首个错误信息 |
more -n 文件名 | 指定每页显示的行数(默认适应终端高度),例如 more -20 longfile.txt 每页固定显示 20 行 |
more -s 文件名 | 将连续的多个空行压缩为一个空行,使输出更紧凑,例如 more -s messy.txt 处理格式松散的文本 |
more -p 文件名 | 显示每页内容前先清屏,避免不同页内容混杂,适合终端窗口较小的场景 |
(3)less
less 文件名 | 分页查看文件内容(支持上下滚动、搜索),按 q 退出,↑↓ 键逐行滚动,PageUp/PageDown 翻页 |
命令 | less | 将其他命令的输出通过 less 分页显示,例如 ls -lR / | less 分页查看大量目录内容 |
less -N 文件名 | 显示文件内容时在每行前添加行号,方便定位特定行,例如 less -N script.py 查看代码行号 |
less +/关键词 文件名 | 打开文件后直接跳转到第一个匹配 “关键词” 的位置,按 n 查看下一个匹配,N 查看上一个 |
less -i 文件名 | 搜索时忽略大小写(如搜索 “error” 会匹配 “Error”“ERROR”),例如 less -i log.txt |
less -S 文件名 | 长行内容不自动折行,按左右方向键横向滚动查看,适合查看表格或代码文件 |
less -m 文件名 | 在底部状态栏显示当前阅读进度(百分比),例如 less -m large_file.txt 了解阅读位置 |
less -g 文件名 | 仅高亮显示当前匹配的搜索结果,而非所有匹配项,减少视觉干扰 |
less -t 标签 文件名 | 跳转到文件中定义的指定标签位置(适用于带标签的文档,如 man 手册) |
less -r 文件名 | 正确显示文件中的颜色控制字符(如 ls --color | less -r 保留彩色输出) |
less --help | 显示 less 的所有快捷键和参数说明,快速查询使用方法 |
(4)head
head 文件名 | 显示文件的前 10 行内容(默认行为),例如 head log.txt 输出日志文件的前 10 行 |
head -n 数字 文件名 | 显示文件的前 N 行内容,-n 可省略直接写数字,例如 head -n 5 note.txt 或 head 5 note.txt 均显示前 5 行 |
head -c 字节数 文件名 | 显示文件的前 N 个字节内容,例如 head -c 100 data.bin 输出文件的前 100 字节(适合查看二进制文件头部) |
命令 | head | 显示其他命令输出的前 10 行,例如 ls -l | head 查看目录列表的前 10 项 |
head -n -数字 文件名 | 显示文件内容,排除最后 N 行,例如 head -n -3 report.txt 输出除最后 3 行外的所有内容 |
head 文件1 文件2 | 显示多个文件的前 10 行,每个文件内容前会添加文件名作为分隔,例如 head a.txt b.txt |
head -v 文件名 | 显示内容前先输出文件名(即使只有一个文件),例如 head -v config.ini 明确标识内容来源 |
(5)tail
tail 文件名 | 显示文件的最后 10 行内容(默认行为),例如 tail log.txt 查看日志文件的最新 10 行 |
tail -f 文件名 | 实时监控文件尾部新增内容(文件更新时自动显示),按 Ctrl+C 退出,常用于跟踪日志,例如 tail -f app.log |
tail -n 数字 文件名 | 显示文件的最后 N 行内容,-n 可省略直接写数字,例如 tail -n 5 note.txt 或 tail 5 note.txt 均显示最后 5 行 |
tail -c 字节数 文件名 | 显示文件的最后 N 个字节内容,例如 tail -c 200 data.bin 输出二进制文件的最后 200 字节 |
命令 | tail | 显示其他命令输出的最后 10 行,例如 ls -l | tail 查看目录列表的最后 10 项 |
tail -n +数字 文件名 | 从文件的第 N 行开始显示到末尾,例如 tail -n +100 report.txt 显示从第 100 行到文件结尾的内容 |
tail -F 文件名 | 类似 -f,但文件被删除后会持续重试打开(适合日志文件轮转场景),例如 tail -F access.log |
tail 文件1 文件2 | 显示多个文件的最后 10 行,每个文件内容前会添加文件名作为分隔,例如 tail a.log b.log |
tail -v 文件名 | 显示内容前先输出文件名(即使只有一个文件),例如 tail -v config.ini 明确标识内容来源 |
tail -f 文件名 | grep 关键词 | 实时监控文件并过滤出包含关键词的内容,例如 tail -f error.log | grep "ERROR" 只跟踪错误信息 |
(6)find
find 路径 -name "文件名" | 在指定路径下按文件名查找(区分大小写),支持通配符 *(任意字符)、?(单个字符),例如 find /home -name "*.txt" 查找 /home 下所有 txt 文件 |
find 路径 -iname "文件名" | 与 -name 功能相同,但忽略大小写,例如 find /etc -iname "hosts" 同时匹配 HOSTS、Hosts 等 |
find 路径 -type 类型 | 按文件类型筛选,f 表示普通文件,d 表示目录,l 表示软链接等,例如 find /usr -type d -name "bin" 查找名为 bin 的目录 |
find 路径 -size 大小 | 按文件大小查找,+N 表示大于 N,-N 表示小于 N,单位:c(字节)、k(KB)、M(MB)、G(GB),例如 find / -size +100M 查找大于 100MB 的文件 |
find 路径 -mtime 天数 | 按文件修改时间查找,+N 表示超过 N 天未修改,-N 表示 N 天内修改过,例如 find ./ -mtime -7 查找 7 天内修改过的文件 |
find 路径 -user 用户名 | 查找指定用户拥有的文件 / 目录,例如 find /home -user john 查找 john 用户的文件 |
find 路径 -perm 权限 | 按文件权限查找,例如 find /bin -perm 755 查找权限为 755 的可执行文件 |
find 路径 -exec 命令 {} \; | 对查找到的文件执行指定命令,{} 代表匹配的文件,\; 是命令结束符,例如 find ./ -name "*.tmp" -exec rm {} \; 删除所有 tmp 文件 |
find 路径 -maxdepth 深度 | 限制查找的目录深度,例如 find / -maxdepth 2 -name "passwd" 只在根目录下两级内查找 |
find 路径 -mindepth 深度 | 限制查找的最小目录深度(跳过浅层目录),例如 find ./ -mindepth 3 -type f 只查找至少 3 级子目录下的文件 |
find 路径 -not 条件 | 查找不满足指定条件的文件,例如 find ./ -type f -not -name "*.txt" 查找非 txt 格式的文件 |
find 路径 -o 条件 | 多个条件满足其一即可,例如 find ./ -name "*.jpg" -o -name "*.png" 查找 jpg 或 png 图片 |
(7)ln
4、文本处理
(1)grep
grep "关键词" 文件名 | 在指定文件中搜索包含 “关键词” 的行并输出,区分大小写,例如 grep "error" log.txt 查找日志中的错误信息 |
grep -i "关键词" 文件名 | 搜索时忽略大小写(匹配关键词的任意大小写形式),例如 grep -i "Error" log.txt 同时匹配 ERROR、error 等 |
grep -r "关键词" 目录 | 递归搜索指定目录下所有文件中包含 “关键词” 的行,例如 grep -r "config" /etc/ 查找 /etc 目录下含 config 的配置 |
命令 | grep "关键词" | 过滤其他命令的输出,只显示包含 “关键词” 的行,例如 ps aux | grep "nginx" 查看 nginx 相关进程 |
grep -n "关键词" 文件名 | 搜索时显示匹配行在文件中的行号,例如 grep -n "function" script.py 定位代码中的函数位置 |
grep -v "关键词" 文件名 | 输出不包含 “关键词” 的所有行,例如 grep -v "^#" config.ini 过滤配置文件中的注释行(以 #开头) |
grep -w "关键词" 文件名 | 只匹配完整单词(避免关键词作为其他词的一部分被匹配),例如 grep -w "cat" text.txt 只匹配 “cat” 不匹配 “category” |
`grep -E" 模式 1 | -E(extended regexp,扩展正则) |
grep -c "关键词" 文件名 | 统计包含 “关键词” 的行数,例如 grep -c "failed" audit.log 统计失败操作的次数 |
grep -l "关键词" 目录/* | 只显示包含 “关键词” 的文件名(不显示具体内容),例如 grep -l "import" *.py 找出包含 import 的 Python 文件 |
grep -A 数字 "关键词" 文件名 | 显示匹配行及之后的 N 行内容,例如 grep -A 3 "error" log.txt 显示错误行及后续 3 行 |
grep -B 数字 "关键词" 文件名 | 显示匹配行及之前的 N 行内容,例如 grep -B 2 "failed" test.log 显示失败行及前面 2 行 |
grep -C 数字 "关键词" 文件名 | 显示匹配行及前后各 N 行内容,例如 grep -C 1 "warning" app.log 显示警告行及前后各 1 行 |
(2)echo
echo "文本内容" | 输出指定的文本内容(默认末尾自动添加换行符),例如 echo "Hello World" 输出 Hello World 并换行 |
echo $变量名 | 打印环境变量或自定义变量的值,例如 echo $PATH 输出系统路径变量,echo $USER 输出当前用户名 |
echo "文本" > 文件名 | 将文本内容写入文件(覆盖原有内容),例如 echo "test content" > file.txt 创建或覆盖文件 |
echo "文本" >> 文件名 | 将文本内容追加到文件末尾(不覆盖原有内容),例如 echo "new line" >> log.txt 向日志添加内容 |
echo -n "文本" | 输出文本后不自动添加换行符,例如 echo -n "Hello " && echo "World" 输出 Hello World(合并为一行) |
echo -e "文本\n转义字符" | 解析字符串中的转义字符(如 \n 换行、\t 制表符),例如 echo -e "Name\tAge\nAlice\t25" 输出格式化表格 |
echo * | 输出当前目录下的所有非隐藏文件和目录(等价于 ls 的简化输出),例如 echo * 快速列出目录内容 |
echo "::set-output name=key::value" | 在 CI/CD 管道中设置输出变量(如 GitHub Actions),例如 echo "::set-output name=version::1.0.0" |
echo -e "\033[31m红色文本\033[0m" | 输出带颜色的文本(通过 ANSI 转义码),例如上述命令输出红色文本,\033[0m 重置颜色 |
(3)sed
sed 's/原字符串/新字符串/' 文件名 | 替换文件中每行第一个匹配的 “原字符串” 为 “新字符串”,例如 sed 's/error/ERROR/' log.txt 替换每行首个 error 为 ERROR |
sed 's/原字符串/新字符串/g' 文件名 | 替换文件中所有匹配的 “原字符串” 为 “新字符串”(每行所有匹配项),例如 sed 's/old/new/g' file.txt 全局替换 old 为 new |
sed -i 's/原/新/g' 文件名 | 直接修改文件内容(不输出到终端),例如 sed -i 's/foo/bar/g' data.txt 原地替换文件中的 foo 为 bar |
sed -n '/关键词/p' 文件名 | 只打印包含 “关键词” 的行(-n 抑制默认输出,p 打印匹配行),例如 sed -n '/warning/p' log.txt 提取所有警告行 |
sed '行号d' 文件名 | 删除指定行号的内容,例如 sed '3d' file.txt 删除第 3 行,sed '1,5d' file.txt 删除 1-5 行 |
sed '/关键词/d' 文件名 | 删除包含 “关键词” 的行,例如 sed '/#/d' config.ini 删除所有注释行(以 #开头) |
sed 's/原/新/2' 文件名 | 只替换每行中第 N 个匹配的字符串,例如 sed 's/ab/cd/2' text.txt 替换每行中第 2 个 ab 为 cd |
sed -e '命令1' -e '命令2' 文件名 | 执行多个 sed 命令,例如 sed -e 's/old/new/' -e '/test/d' file.txt 先替换再删除含 test 的行 |
sed 's/原/新/i' 文件名 | 替换时忽略大小写,例如 sed 's/error/ERROR/i' log.txt 替换所有大小写形式的 error |
sed '行号a 新增内容' 文件名 | 在指定行后追加内容,例如 sed '5a new line' file.txt 在第 5 行后添加 new line |
sed '行号i 新增内容' 文件名 | 在指定行前插入内容,例如 sed '3i header' data.txt 在第 3 行前插入 header |
cat 文件名 | sed 命令 | 处理其他命令的输出,例如 ls -l | sed 's/^/file: /' 给 ls 输出每行前加 file: 前缀 |
(4)awk
awk '{print $列数}' 文件名 | 按列分割文件内容并打印指定列(默认以空格 / 制表符分割,$0 表示整行,$1 第一列,以此类推),例如 awk '{print $1, $3}' data.txt 打印第 1 列和第 3 列 |
awk -F '分隔符' '{print $n}' 文件名 | 自定义列分隔符(如逗号、冒号),例如 awk -F ',' '{print $2}' csvfile.csv 以逗号分割并打印第 2 列 |
awk '/关键词/ {print $0}' 文件名 | 打印包含 “关键词” 的行,例如 awk '/error/ {print $0}' log.txt 提取所有含 error 的行 |
awk '条件 {动作}' 文件名 | 满足条件时执行动作,例如 awk '$3 > 100 {print $1}' data.txt 打印第 3 列值大于 100 的行的第 1 列 |
命令 | awk 命令 | 处理其他命令的输出,例如 ls -l | awk '{print $9, $5}' 提取文件名(第 9 列)和大小(第 5 列) |
awk -v 变量=值 '命令' 文件名 | 在 awk 中定义自定义变量,例如 awk -v threshold=50 '$2 > threshold {print $0}' scores.txt 用变量作为阈值 |
awk 'BEGIN{动作} {处理行} END{动作}' 文件名 | BEGIN 在处理文件前执行(如初始化),END 在处理完所有行后执行(如统计结果),例如 awk 'BEGIN{sum=0} {sum+=$2} END{print sum}' nums.txt 计算第 2 列总和 |
awk '{print NR, $0}' 文件名 | 打印每行内容并在前面添加行号(NR 表示当前行号),例如 awk '{print NR ": " $0}' script.sh 给代码行加编号 |
awk 'NF > 0 {print $0}' 文件名 | 过滤空行(NF 表示当前行的列数,NF > 0 表示非空行),例如 awk 'NF > 0 {print}' messy.txt 去除空行 |
awk '!a[$1]++' 文件名 | 去除指定列的重复行(保留第一次出现的行),例如 awk '!a[$2]++' users.txt 按第 2 列去重 |
awk -f 脚本文件 文件名 | 从外部文件读取 awk 命令(适合复杂逻辑),例如 awk -f process.awk data.txt 执行 process.awk 中的处理逻辑 |
(5)sort
sort 文件名 | 按字典序(字符 ASCII 码) 对文件内容逐行排序,默认升序,例如 sort logs.txt 对日志文件按行首字符排序 |
sort -n 文件名 | 按数值大小排序(而非字典序),解决 “10 排在 2 前面” 的问题,例如 sort -n numbers.txt 对数值列表正确升序排列 |
sort -r 文件名 | 按指定规则反向排序(默认升序→降序),可与 -n/-k 等参数组合,例如 sort -nr scores.txt 对分数按数值降序排列 |
sort -k 列数 文件名 | 按文件中的第 N 列排序(默认以空格 / 制表符分隔列),例如 sort -k 3 data.txt 按第 3 列字典序排序,sort -n -k 2 stats.txt 按第 2 列数值升序排序 |
sort -u 文件名 | 排序后去除重复行(仅保留第一次出现的行),等价于 `sort 文件名 |
sort -t '分隔符' -k 列数 文件名 | 自定义列的分隔符(如逗号、冒号),配合 -k 按指定列排序,例如 sort -t ',' -k 2 csvfile.csv 以逗号为分隔符,按第 2 列字典序排序 |
sort -o 输出文件 输入文件 | 将排序结果写入指定文件(而非默认输出到终端),避免覆盖原文件,例如 sort -n numbers.txt -o sorted_numbers.txt 将数值排序结果保存到新文件 |
sort -f 文件名 | 排序时忽略字符大小写(默认区分大小写,如 A 在 a 前面),例如 sort -f words.txt 让 Apple 和 apple 按相同字母序排序 |
sort -b 文件名 | 排序时忽略每行开头的空格 / 制表符(默认行首空格会参与排序),例如 sort -b messy_data.txt 避免行首空格导致的排序偏差 |
sort -c 文件名 | 仅检查文件是否按当前规则排序,不输出排序结果:若已排序则无输出,若未排序则提示第一个未排序的行,例如 sort -nc numbers.txt 检查数值列表是否已升序排列 |
sort -M 文件名 | 按英文月份缩写排序(如 Jan→Feb→Mar),例如 sort -M dates.txt 对包含 “Jan 2024”“Mar 2024” 的行按月份顺序排序 |
` 命令 | 管道 | 组合 |
(6)uniq
sort 文件名 | uniq | 去除连续重复的行(需先排序使重复行相邻),例如 sort logs.txt | uniq 得到去重后的日志行 |
uniq -u 文件名 | 只输出不重复的行(仅出现一次的行),例如 sort data.txt | uniq -u 提取仅出现一次的数据 |
uniq -d 文件名 | 只输出重复出现的行(至少出现两次),例如 sort names.txt | uniq -d 找出重复的姓名 |
uniq -c 文件名 | 显示每行内容并在前面添加出现次数,例如 sort access.log | uniq -c 统计每个访问记录的出现次数 |
uniq -i 文件名 | 比较时忽略大小写(视 A 和 a 为相同内容),例如 sort words.txt | uniq -i 合并大小写重复的单词 |
uniq -f N 文件名 | 比较时忽略前 N 列内容(按后续内容判断重复),例如 sort logs.txt | uniq -f 2 跳过前 2 列后去重 |
uniq -s N 文件名 | 比较时忽略每行前 N 个字符,例如 sort codes.txt | uniq -s 3 跳过前 3 个字符后去重 |
uniq -w N 文件名 | 判断重复时只比较每行前 N 个字符,例如 sort ids.txt | uniq -w 5 按前 5 个字符去重 |
5、进程管理
(1)ps
ps aux | 显示系统中所有进程的详细信息:a 显示所有用户进程,u 显示用户及进程详细信息,x 包含无终端的进程,例如 ps aux 常用于查看系统整体进程状态 |
ps -ef | 显示所有进程的完整格式信息:-e 等价于 -A(显示所有进程),-f 显示完整格式(包括 UID、PPID、CMD 等),例如 `ps -ef grep nginx` 查找 nginx 相关进程 |
ps -l | 显示当前终端相关进程的详细信息(长格式),包含进程状态、优先级等,例如 ps -l 查看当前用户在当前终端的进程详情 |
ps -ef | grep 进程名 | 过滤并查看指定进程的信息,例如 `ps -ef grep python` 查找所有 python 进程 |
ps -T -p 进程ID | 查看指定进程(-p 指定 PID)的所有线程(-T 显示线程),例如 ps -T -p 1234 查看 PID 为 1234 的进程包含的线程 |
ps aux --sort=-%cpu | 按 CPU 使用率降序排列进程(-%cpu 表示降序,%cpu 升序),例如 ps aux --sort=-%cpu 快速定位高 CPU 占用进程 |
ps aux --sort=-%mem | 按内存使用率降序排列进程,例如 ps aux --sort=-%mem 识别高内存占用进程 |
ps -o 字段1,字段2 进程ID | 只显示指定字段的信息(如 PID、% cpu、cmd 等),例如 ps -o pid,%mem,cmd -p 1234 查看进程 1234 的 PID、内存占比和命令 |
ps -a | 显示所有终端相关的进程(不包括无终端进程),例如 ps -a 查看与终端关联的所有用户进程 |
ps -x | 显示无终端(daemon 进程)的进程,例如 ps -x 查看后台运行的守护进程 |
ps -u 用户名 | 只显示指定用户的进程,例如 ps -u www-data 查看 www-data 用户运行的进程 |
ps -L 进程ID | 显示指定进程的线程 ID(LWP)和线程状态,例如 ps -L -p 1234 查看进程 1234 的线程 ID 列表 |
(2)top
top | 实时动态显示系统进程状态(默认每 3 秒刷新一次),按 CPU 使用率降序排列,顶部显示系统整体资源(CPU、内存、负载等) |
top -p 进程ID | 只监控指定 PID 的进程,例如 top -p 1234 专注查看 PID 为 1234 的进程资源占用 |
top -u 用户名 | 只显示指定用户的进程,例如 top -u www-data 监控 www-data 用户运行的进程 |
top -d 秒数 | 自定义刷新时间间隔(单位:秒),例如 top -d 5 每 5 秒刷新一次进程信息 |
top -H -p 进程ID | 查看指定进程的所有线程(-H 显示线程级信息),例如 top -H -p 1234 分析进程 1234 的线程资源占用 |
top -b | 以非交互式批处理模式运行,适合输出到文件或管道处理,例如 top -b -n 1 > top_snapshot.txt 保存当前进程快照 |
top -n 次数 | 限定刷新次数后自动退出,例如 top -n 3 刷新 3 次后退出,常与 -b 配合用于脚本 |
top -c | 显示进程的完整命令路径及参数(默认只显示简化命令名),例如 top -c 查看进程的详细启动命令 |
top -i | 不显示闲置(Zombie 状态)的进程,使列表更简洁,例如 top -i 只关注活跃进程 |
top -o 字段 | 按指定字段排序(如 % CPU、% MEM 等),例如 top -o %MEM 按内存使用率降序排列进程 |
(3)kill
kill 进程ID | 向指定进程发送 TERM(15)信号,请求进程正常终止(允许进程清理资源),例如 kill 1234 终止 PID 为 1234 的进程 |
kill -9 进程ID | 发送 KILL(9)信号,强制终止进程(不允许进程清理,可能导致数据丢失),例如 kill -9 5678 强制杀死无响应的进程 |
kill -15 进程ID | 等同于默认行为,发送 TERM 信号,请求进程优雅退出,例如 kill -15 9012 让进程安全终止 |
kill -1 进程ID | 发送 HUP(1)信号,通常用于让进程重新加载配置文件(不终止进程),例如 kill -1 1234 让 Nginx 重读配置 |
kill -u 用户名 | 终止指定用户的所有进程,例如 kill -u testuser 结束 testuser 用户的所有进程 |
killall 进程名 | 通过进程名终止所有匹配进程(需安装 psmisc 工具包),例如 killall nginx 终止所有 nginx 进程 |
pkill 进程名 | 按进程名模式匹配并终止进程(支持通配符),例如 pkill -f "python script.py" 终止运行特定脚本的 python 进程 |
kill -l | 显示系统支持的所有信号编号及名称,例如 kill -l 可查看HUP(1)、TERM(15)等信号对照表 |
kill -2 进程ID | 发送 INT(2)信号,等同于按下 Ctrl+C,请求进程中断,例如 kill -2 3456 模拟终端中断操作 |
kill -18 进程ID | 发送 CONT(18)信号,恢复被暂停的进程(与 -19 配合使用),例如 kill -18 7890 继续运行暂停的进程 |
kill -19 进程ID | 发送 STOP(19)信号,暂停进程运行(不终止,可通过 -18 恢复),例如 kill -19 7890 暂停进程执行 |
(4)pkill
kill
和 pkill
都是 Linux 中用于终止进程的命令,但核心区别在于指定进程的方式:kill
需要通过进程 ID(PID)来精确指定要终止的进程,使用时需先通过 ps
等命令获取目标 PID(如 kill 1234
);而 pkill
则可以直接通过进程名、用户名等特征匹配进程(如 pkill nginx
),无需手动查找 PID,更适合批量终止符合条件的进程,但其匹配可能存在模糊性,需注意避免误杀。
pkill 进程名 | 根据进程名(或命令名)终止匹配的进程,例如 pkill nginx 终止所有名称包含 “nginx” 的进程 |
pkill -f "进程参数" | 匹配包含指定参数的完整命令行(而非仅进程名),例如 pkill -f "python app.py" 终止运行app.py的 Python 进程 |
pkill -u 用户名 | 终止指定用户的所有进程,例如 pkill -u testuser 结束 testuser 用户的所有进程 |
pkill -9 进程名 | 向匹配进程发送KILL(9)信号,强制终止进程,例如 pkill -9 java 强制杀死所有 Java 进程 |
pkill -i 进程名 | 匹配进程名时忽略大小写,例如 pkill -i Nginx 同时匹配 “nginx”“NGINX” 等大小写形式的进程 |
pkill -t 终端 | 终止指定终端(如tty1、pts/0)上的所有进程,例如 pkill -t pts/1 结束终端 pts/1 上的进程 |
pkill -l 进程名 | 仅显示匹配的进程名(不终止进程),用于预览匹配结果,例如 pkill -l sshd 查看将被匹配的 sshd 进程名 |
pkill -n 进程名 | 只终止最新启动的匹配进程,例如 pkill -n python 终止最近启动的 Python 进程 |
pkill -o 进程名 | 只终止最早启动的匹配进程,例如 pkill -o mysql 终止最早启动的 MySQL 进程 |
pkill -SIGTERM 进程名 | 向匹配进程发送指定信号(如SIGTERM正常终止、SIGHUP重载配置),例如 pkill -SIGHUP nginx 让 Nginx 重读配置 |
(5)bg/fg
bg | 将最近暂停(按 Ctrl+Z)的前台进程切换到后台运行(后台进程仍会占用终端输出),例如:先按 Ctrl+Z 暂停 vim test.txt,再执行 bg 让 vim 在后台继续运行 |
fg | 将最近后台运行的进程(或暂停的后台进程)切换到前台,重新占据终端输入输出,例如:执行 bg 后若需恢复到前台,直接输入 fg 即可重新操作进程 |
bg %任务编号 | 切换指定编号的后台任务到后台运行,任务编号可通过 jobs 命令查看(编号前带 []),例如:bg %2 将编号为 2 的暂停任务切换到后台 |
fg %任务编号 | 切换指定编号的后台任务到前台,例如:通过 jobs 看到 [1]+ Stopped python script.py,执行 fg %1 可将该 Python 进程恢复到前台 |
bg %任务名 | 按任务名称(进程名)切换到后台,例如:bg %vim 将名称包含 “vim” 的暂停任务切换到后台(需确保任务名唯一,避免歧义) |
fg %任务名 | 按任务名称切换到前台,例如:fg %python 将名称包含 “python” 的后台任务恢复到前台(适合任务编号较多时快速定位) |
jobs ; bg | 先通过 jobs 查看所有后台 / 暂停任务的编号和状态,再用 bg 切换目标任务,例如:执行 jobs 确认任务编号后,再 bg %1 操作,避免误切换 |
(6)jobs
jobs | 显示当前终端中所有后台任务(包括运行中、暂停状态)的编号、状态和命令,例如 jobs 输出形如 [1]+ Running python script.py & |
jobs -l | 除任务编号和状态外,额外显示每个任务的进程 ID(PID),例如 jobs -l 可同时查看任务编号和对应的 PID,方便结合 kill 命令操作 |
jobs -p | 只输出所有后台任务的进程 ID(PID),不显示其他信息,适合脚本中批量处理,例如 `jobs -p xargs kill` 终止所有后台任务 |
jobs -n | 只显示自上次查询后状态发生变化的任务,例如 jobs -n 快速定位状态改变的任务(如从运行变为暂停) |
jobs -r | 只列出处于运行状态的后台任务,过滤暂停状态的任务,例如 jobs -r 查看当前活跃的后台进程 |
jobs -s | 只列出处于暂停状态(被 Ctrl+Z 暂停)的任务,例如 jobs -s 查看需要通过 bg 或 fg 恢复的任务 |
jobs %任务编号 | 显示指定编号的任务详情,例如 jobs %2 只查看编号为 2 的任务状态 |
jobs %任务名 | 显示名称包含指定字符串的任务,例如 jobs %python 查看名称含 “python” 的任务(需名称唯一) |
6、系统管理
(1)uname
uname -a | 显示系统所有相关信息,包括内核名称、主机名、内核版本、硬件架构等,例如 uname -a 输出完整的系统标识信息 |
uname -r | 仅显示内核版本号,例如 uname -r 输出 5.4.0-150-generic(不同系统版本不同) |
uname -m | 显示机器硬件架构,例如 uname -m 在 64 位系统输出 x86_64,32 位系统输出 i686 |
uname -s | 显示内核名称,例如 Linux 系统输出 Linux,Unix 系统可能输出 SunOS 等 |
uname -n | 显示网络节点上的主机名,例如 uname -n 输出当前系统的主机名(如 server01) |
uname -v | 显示内核版本的详细信息(包括编译时间等),例如 uname -v 输出内核编译相关的时间戳和版本细节 |
uname -p | 显示处理器类型,例如 uname -p 可能输出 x86_64 或 unknown(部分系统不支持) |
uname -o | 显示操作系统名称,例如 Linux 系统通常输出 GNU/Linux |
(2)df
df -h | 以易读的单位(GB、MB 等)显示磁盘空间使用情况,例如 df -h 输出 /dev/sda1 50G 15G 35G 30% / |
df | 显示所有已挂载文件系统的磁盘使用情况,默认单位为块(通常 1 块 = 512 字节),例如 df 输出原始块数值 |
df -a | 显示包括虚拟文件系统(如tmpfs、sysfs)在内的所有文件系统,例如 df -a 会列出/proc等特殊文件系统 |
df -T | 额外显示每个文件系统的类型(如ext4、xfs、tmpfs),例如 df -T 输出包含Type列 |
df -H | 以 1000 为基数的人类可读格式(1GB=1000MB),与-h(1GB=1024MB)略有差异,例如 df -H 适合需要 SI 标准单位的场景 |
df -i | 显示 inode 的使用情况(而非磁盘空间),包括总 inode 数、已使用、可用及使用率,例如 df -i 可排查 inode 耗尽问题 |
df -k | 以 KB 为单位显示磁盘使用情况(等价于默认块大小转换),例如 df -k 输出以 KB 为单位的数值 |
df /目录 | 只显示指定目录所在文件系统的使用情况,例如 df /home 仅查看/home分区的磁盘使用 |
df -l | 只显示本地挂载的文件系统(排除网络文件系统如 NFS),例如 df -l 过滤掉远程挂载的磁盘 |
df -P | 以 POSIX 标准格式输出(固定列宽,适合脚本解析),例如 df -P 输出格式更便于脚本处理 |
(3)du
du -h | 以易读单位(GB、MB、KB)显示文件 / 目录的磁盘占用大小,例如 du -h document.pdf 显示文件大小为 2.5M |
du -sh 目录名 | 仅显示指定目录的总大小(不列出子目录详情),例如 du -sh /home 输出 /home 目录的总占用空间 |
du -h --max-depth=N 目录名 | 显示目录下 N 级子目录的大小,例如 du -h --max-depth=1 /var 只显示/var下一级子目录的大小 |
du -a | 同时显示目录和其中所有文件的大小(默认只显示目录),例如 du -a ~/Downloads 列出下载目录下所有文件和子目录大小 |
du -h * | 显示当前目录下所有文件和子目录的大小,例如 du -h * 快速对比当前目录下各项目的占用空间 |
du -c 目录/* | 显示各目录 / 文件大小并在最后增加总大小,例如 du -hc /tmp/* 列出/tmp下内容大小并显示总和 |
du -k 文件名 | 以 KB 为单位显示大小(精确到 KB),例如 du -k log.txt 输出 128 log.txt(表示 128KB) |
du -m 目录名 | 以 MB 为单位显示大小(精确到 MB),例如 du -m /var/log 以 MB 为单位展示日志目录大小 |
du -t 大小 目录名 | 只显示大于指定大小的文件 / 目录,例如 du -h -t 1G /data 找出/data下大于 1GB 的目录 |
du -d N 目录名 | 等同于--max-depth=N,指定显示的目录深度,例如 du -hd 2 /etc 显示/etc下两级目录的大小 |
du -x 目录名 | 忽略其他文件系统的内容(如挂载的外部磁盘),例如 du -xh / 只统计根分区内的文件大小 |
(4)free
free -h | 以易读单位(GB、MB)显示内存使用情况,自动转换最适合的单位,例如 free -h 输出 Mem: 15.5G 8.2G 3.1G 4.2G 52% |
free | 以 KB 为单位显示内存、交换分区的总容量、已使用、空闲等信息,例如 free 输出原始 KB 数值 |
free -m | 以 MB 为单位显示内存使用情况,例如 free -m 输出 Mem: 15872 8345 3167 4360 52% |
free -g | 以 GB 为单位显示内存使用情况(四舍五入),例如 free -g 输出 Mem: 15 8 3 4 52% |
free -s 秒数 | 每隔指定秒数刷新一次内存信息,例如 free -s 5 每 5 秒更新一次内存使用状态(按Ctrl+C退出) |
free -t | 在输出末尾增加一行 “总计”,汇总内存和交换分区的总容量,例如 free -ht 显示各列的总和 |
free -w | 额外区分 “缓冲区(buffers)” 和 “缓存(cache)” 的详细使用情况,例如 free -hw 拆分显示更细致的内存占用 |
free -b | 以字节(B)为单位显示内存使用情况,适合需要精确数值的场景,例如 free -b 输出原始字节数 |
free -k | 明确以 KB 为单位显示(与默认无参数行为一致),例如 free -k 等价于 free |
(5)top
top -p 进程ID | 仅监控指定 PID 的进程,例如 top -p 1234 专注查看特定进程的资源占用 |
top -u 用户名 | 仅显示指定用户的进程,例如 top -u www-data 监控 Web 服务相关进程 |
top -d 秒数 | 自定义刷新时间间隔(单位:秒),例如 top -d 3 每 3 秒刷新一次 |
top -H -p 进程ID | 显示指定进程的所有线程,例如 top -H -p 1234 分析进程的线程级 CPU 占用 |
top -b -n 次数 | 以非交互式模式运行并输出指定次数后退出,例如 top -b -n 1 > top.log 保存进程快照 |
top -c | 显示进程的完整命令路径及参数,例如 top -c 查看进程的详细启动命令 |
(6)htop
htop 是 top 的增强版,更直观地展示系统资源。
htop | 交互式进程监控工具(需单独安装),提供彩色界面、鼠标操作支持,默认展示更多系统指标和进程详情 |
htop -p 进程ID | 过滤并高亮显示指定 PID 的进程,例如 htop -p 5678 快速定位目标进程 |
htop -u 用户名 | 过滤显示指定用户的进程,支持模糊匹配,例如 htop -u john 查看 john 的所有进程 |
htop -d 毫秒数 | 自定义刷新间隔(单位:毫秒),例如 htop -d 2000 每 2 秒刷新一次 |
htop -t | 以树形结构展示进程与线程的关系,例如 htop -t 直观查看进程的线程层级 |
htop --sort-key 字段 | 按指定字段(如PERCENT_CPU、RESIDENT_MEM)排序,例如 htop --sort-key PERCENT_MEM 按内存使用率排序 |
htop -s 字段 | 等价于 --sort-key,按指定字段排序,例如 htop -s CPU 按 CPU 使用率降序排列 |
(7)man
man 命令名 | 查看指定命令的手册页(默认显示第 1 章节),例如 man ls 查看ls命令的帮助文档 |
man -k 关键词 | 搜索包含关键词的所有手册页摘要(等价于apropos命令),例如 man -k "file system" 搜索与文件系统相关的命令 |
man 章节号 命令名 | 查看命令在特定章节的手册页(手册分 8 个章节,1 为用户命令,2 为系统调用等),例如 man 2 open 查看open系统调用的手册 |
man -f 命令名 | 显示命令所属的手册章节及简要描述(等价于whatis命令),例如 man -f passwd 显示passwd在第 1 和第 5 章节的手册信息 |
man -p 格式 命令名 | 指定手册页的预处理程序(如groff、tbl),用于特殊格式的手册页处理,例如 man -p t ls 使用tbl处理表格 |
man -a 命令名 | 依次显示命令在所有相关章节的手册页,例如 man -a passwd 先显示第 1 章,按q后显示第 5 章 |
man -t 命令名 | 将手册页转换为 PostScript 格式(需配合打印机或转换工具),例如 man -t ls > ls.ps 生成 PDF 打印文件 |
man -w 命令名 | 仅显示手册页文件的路径,不打开手册,例如 man -w ls 输出/usr/share/man/man1/ls.1.gz |
man -C 配置文件 命令名 | 使用自定义配置文件替代默认的man.config,例如 man -C my_man.conf grep 用自定义配置查看grep手册 |
(8)date
date | 显示当前系统日期和时间,默认格式如 Sun Sep 14 15:30:22 CST 2025 |
date +"%Y-%m-%d" | 按指定格式显示日期(年 - 月 - 日),例如 date +"%Y-%m-%d" 输出 2025-09-14 |
date +"%H:%M:%S" | 按指定格式显示时间(时:分: 秒),例如 date +"%H:%M:%S" 输出 15:32:45 |
date +"%Y-%m-%d %H:%M:%S" | 同时显示日期和时间,格式如 2025-09-14 15:33:10,常用于日志记录 |
date -s "2025-09-14 15:35:00" | 手动设置系统日期和时间,需 root 权限,例如 date -s "2025-09-14 15:35:00" 同步系统时间 |
date -d "2 days ago" | 显示相对当前时间的日期 / 时间,例如 date -d "2 days ago" 输出 2 天前的日期 |
date +%s | 显示当前时间的 Unix 时间戳(从 1970-01-01 00:00:00 UTC 起的秒数),例如 date +%s 输出 1752682500 |
date -d @1752682500 | 将 Unix 时间戳转换为可读日期时间,例如 date -d @1752682500 输出对应时间 |
date +"%A, %B %d, %Y" | 显示完整星期、月份名称,例如 date +"%A, %B %d, %Y" 输出 Sunday, September 14, 2025 |
date -u | 显示 UTC(世界协调时间),而非本地时间,例如 date -u 输出 UTC 时区的当前时间 |
date +"%z" | 显示当前时区相对于 UTC 的偏移量,例如 date +"%z" 输出 +0800(表示东八区) |
(9)hostname
hostname | 显示当前系统的主机名,例如 hostname 输出 server01 |
hostname 新主机名 | 临时修改主机名(重启后失效),需 root 权限,例如 hostname web-server 将主机名临时改为 web-server |
hostname -i | 显示主机名对应的 IP 地址(优先 IPv4),例如 hostname -i 输出 192.168.1.100 |
hostname -I | 显示系统所有网络接口的 IP 地址(空格分隔),例如 hostname -I 输出 192.168.1.100 10.0.0.5 |
hostname -f | 显示主机的完全限定域名(FQDN),例如 hostname -f 输出 server01.example.com |
hostname -s | 显示主机名的短格式(去除域名部分),例如 hostname -s 从server01.example.com中输出server01 |
hostname -d | 显示主机名中的域名部分(若配置),例如 hostname -d 从server01.example.com中输出example.com |
hostname -A | 显示所有已配置的完全限定域名(空格分隔),例如 hostname -A 输出多个关联的 FQDN |
hostname -y | 显示系统的 NIS(Network Information Service)域名(较少使用),例如 hostname -y 输出 NIS 域名称 |
7、网络操作
(1)netstat
netstat -tuln | 显示所有监听状态的 TCP(-t)和 UDP(-u)端口,以数字形式(-n)显示地址和端口(不解析域名),例如 netstat -tuln 快速查看系统开放的端口 |
netstat -tulnp | 在 -tuln 基础上,显示占用端口的进程 ID(PID)和进程名(-p),需 root 权限,例如 netstat -tulnp 查看哪个进程占用了 80 端口 |
netstat -an | 显示所有 TCP/UDP 连接(包括监听和非监听状态,-a),以数字形式显示(-n),例如 netstat -an 查看所有网络连接的详细信息 |
netstat -ntlp | 仅显示监听状态的 TCP 端口(-t),数字形式(-n)及对应进程(-p),例如 netstat -ntlp 专注查看 TCP 服务端口及进程 |
netstat -nr | 显示内核路由表(-r),以数字形式显示 IP(-n,不解析主机名),例如 netstat -nr 查看系统路由配置,类似 route -n |
netstat -s | 显示网络协议(TCP、UDP、ICMP 等)的统计数据,例如 netstat -s 查看 TCP 重传次数、UDP 错误数等 |
netstat -i | 显示所有网络接口的信息(如 MTU、接收 / 发送数据包数),例如 netstat -i 查看网卡流量统计 |
`netstat -ap | 管道 + grep 过滤,查找指定端口的连接或进程,例如 `netstat -ap grep 8080` 查看 8080 端口的占用情况 |
netstat -tapen | 显示所有 TCP 连接(-t)、关联的进程(-p)、扩展信息(-a)、网卡信息(-e),数字形式(-n),适合详细排查网络问题 |
netstat -c | 持续刷新显示网络状态(每秒一次),例如 netstat -c -tuln 实时监控端口连接变化 |
(2)ifconfig
ifconfig | 显示所有活动网络接口的配置信息(IP 地址、MAC 地址、子网掩码等),例如 ifconfig 输出 eth0、lo 等接口的状态 |
ifconfig 接口名 | 仅显示指定网络接口的详细信息,例如 ifconfig eth0 查看以太网接口 eth0 的配置 |
ifconfig 接口名 up | 激活指定网络接口(相当于启动网卡),例如 ifconfig eth0 up 启用 eth0 接口 |
ifconfig 接口名 down | 禁用指定网络接口(相当于关闭网卡),例如 ifconfig eth0 down 关闭 eth0 接口 |
ifconfig 接口名 IP地址 | 为指定接口配置 IP 地址(临时生效),例如 ifconfig eth0 192.168.1.100 给 eth0 分配 IP |
ifconfig 接口名 IP地址 netmask 子网掩码 | 配置 IP 地址的同时指定子网掩码,例如 ifconfig eth0 192.168.1.100 netmask 255.255.255.0 |
ifconfig 接口名 hw ether MAC地址 | 临时修改网络接口的 MAC 地址(需先禁用接口),例如 ifconfig eth0 down; ifconfig eth0 hw ether 00:11:22:33:44:55; ifconfig eth0 up |
ifconfig 接口名 mtu 数值 | 调整网络接口的最大传输单元(MTU),例如 ifconfig eth0 mtu 1500 设置 MTU 为 1500 字节 |
ifconfig 接口名:编号 IP地址 | 为接口创建虚拟子接口(多 IP 配置),例如 ifconfig eth0:1 192.168.1.101 给 eth0 添加第二个 IP |
ifconfig -a | 显示包括未激活接口在内的所有网络接口,例如 ifconfig -a 查看系统中所有网卡(无论是否启用) |
(3)ip
ip addr | 显示所有网络接口的 IP 地址、MAC 地址等配置信息,等价于 ip address show,例如 ip addr 查看所有网卡的 IP 配置 |
ip addr show 接口名 | 显示指定网络接口的详细地址信息,例如 ip addr show eth0 查看 eth0 的 IP 和状态 |
ip link set 接口名 up | 激活指定网络接口(启用网卡),例如 ip link set eth0 up 启动 eth0 接口 |
ip link set 接口名 down | 禁用指定网络接口(关闭网卡),例如 ip link set eth0 down 关闭 eth0 接口 |
ip addr add IP地址 dev 接口名 | 为指定接口添加 IP 地址(临时生效),例如 ip addr add 192.168.1.100/24 dev eth0 |
ip addr del IP地址 dev 接口名 | 从指定接口删除 IP 地址,例如 ip addr del 192.168.1.100/24 dev eth0 |
ip route | 显示系统路由表,等价于 ip route show,例如 ip route 查看默认网关和子网路由 |
ip route add 目标网段 via 网关 dev 接口名 | 添加静态路由,例如 ip route add 10.0.0.0/24 via 192.168.1.1 dev eth0 |
ip route del 目标网段 | 删除指定静态路由,例如 ip route del 10.0.0.0/24 |
ip link show | 显示所有网络接口的链路层信息(MAC 地址、状态等),例如 ip link show 查看所有网卡的 MAC 和状态 |
ip link set 接口名 mac 新MAC地址 | 临时修改网络接口的 MAC 地址(需先禁用接口),例如 ip link set eth0 down; ip link set eth0 mac 00:11:22:33:44:55; ip link set eth0 up |
ip neigh | 显示 ARP 缓存(IP 与 MAC 地址映射),等价于 arp -a,例如 ip neigh 查看局域网内设备的 ARP 记录 |
ip neigh add IP地址 lladdr MAC地址 dev 接口名 | 手动添加静态 ARP 记录,例如 ip neigh add 192.168.1.2 lladdr 00:aa:bb:cc:dd:ee dev eth0 |
ip -s link | 显示网络接口的流量统计(接收 / 发送数据包数、错误数等),例如 ip -s link show eth0 查看 eth0 的流量详情 |
(4)ping
ping 目标IP/域名 | 向目标发送 ICMP 回声请求包,默认持续发送(按Ctrl+C停止),用于测试网络连通性,例如 ping www.baidu.com 测试与百度服务器的连接 |
ping -c 次数 目标 | 发送指定次数的 ICMP 包后自动停止,例如 ping -c 4 192.168.1.1 只发送 4 个包并统计结果 |
ping -i 间隔秒数 目标 | 指定发送数据包的时间间隔(默认 1 秒),例如 ping -i 2 8.8.8.8 每 2 秒发送一个包 |
ping -s 数据包大小 目标 | 指定 ICMP 数据包的大小(单位:字节,默认 56 字节),例如 ping -s 1024 example.com 发送 1024 字节的测试包 |
ping -W 超时秒数 目标 | 指定等待响应的超时时间(单位:秒),例如 ping -W 3 10.0.0.1 3 秒内无响应则视为超时 |
ping -t TTL值 目标 | 指定 IP 数据包的 TTL(生存时间)值,测试数据包经过的路由跳数,例如 ping -t 10 google.com 设置 TTL 为 10 |
ping -q 目标 | 仅显示最终统计结果,不输出每个包的响应信息,例如 ping -q -c 5 192.168.1.1 只显示汇总数据 |
ping -f 目标 | 以最快速度发送数据包(仅 root 可用),用于压力测试,例如 ping -f 192.168.1.1 快速发送大量包(谨慎使用) |
ping -6 目标 | 使用 IPv6 协议发送测试包,例如 ping -6 2400:da00::6666 测试 IPv6 地址的连通性 |
ping -I 接口名/IP 目标 | 从指定网络接口或源 IP 发送数据包,例如 ping -I eth0 192.168.1.1 从 eth0 接口发送测试包 |
ping -r 目标 | 直接发送数据包到本地网络目标,不经过网关,例如 ping -r 192.168.1.2 测试同一局域网内的设备 |
(5)curl
curl URL | 向指定 URL 发送 HTTP GET 请求,输出响应内容到终端,例如 curl https://example.com 获取网页内容 |
curl -O URL | 下载 URL 指向的文件,保存为远程文件名(URL 路径中的文件名),例如 curl -O https://example.com/file.zip 保存为 file.zip |
curl -o 文件名 URL | 下载文件并指定本地保存的文件名,例如 curl -o localfile.txt https://example.com/data.txt 自定义保存名称 |
curl -L URL | 自动跟随 HTTP 重定向(3xx 状态码),例如 curl -L https://short.url 会跳转至最终目标 URL |
curl -X POST -d "数据" URL | 发送 HTTP POST 请求并携带数据,例如 curl -X POST -d "name=test" https://api.example.com/submit 提交表单数据 |
curl -H "头信息" URL | 向请求添加自定义 HTTP 头,例如 curl -H "Content-Type: application/json" -H "Authorization: Bearer token" URL 设置 JSON 类型和认证头 |
curl -u 用户名:密码 URL | 使用 HTTP 基础认证(Basic Auth)访问需要登录的资源,例如 curl -u admin:pass123 https://example.com/admin 提交用户名密码 |
curl -s URL | 不显示进度条和错误信息,仅输出响应内容,适合脚本中使用,例如 curl -s https://example.com/status 安静获取状态 |
curl -S URL | 与-s配合使用,静默模式下仍显示错误信息,例如 curl -sS https://invalid.url 仅在失败时显示错误 |
curl -k URL | 跳过 SSL 证书验证(不建议生产环境),用于测试 HTTPS 服务,例如 curl -k https://self-signed.example.com 访问自签名证书站点 |
curl -I URL | 发送 HEAD 请求,仅获取 HTTP 响应头信息,例如 curl -I https://example.com 查看状态码、服务器类型等 |
curl -C - -O URL | 继续之前中断的下载(需配合-O),例如 curl -C - -O https://example.com/largefile.iso 恢复中断的大文件下载 |
curl -x 代理:端口 URL | 通过指定代理服务器发送请求,例如 curl -x http://proxy:8080 https://example.com 走代理访问目标 |
curl --data-raw '@文件路径' URL | 读取本地文件内容作为 POST 数据发送,例如 curl -X POST --data-raw '@data.json' https://api.example.com/upload 提交 JSON 文件 |
curl -v URL | 显示请求和响应的详细过程(包括 TCP 握手、HTTP 头),用于调试,例如 curl -v https://example.com 查看完整通信细节 |
(6)wget
wget 网址 | 下载指定 URL 的文件到当前目录,例如 wget https://example.com/file.zip |
wget -O 文件名 网址 | 指定下载文件的保存名称,例如 wget -O document.pdf https://example.com/report.pdf |
wget -c 网址 | 断点续传,继续未完成的下载,例如 wget -c https://example.com/large_file.iso |
wget -r -np 网址 | 递归下载网站内容,不追溯至父目录,例如 wget -r -np https://example.com/docs/ |
wget -b 网址 | 后台下载,输出信息保存到 wget-log,例如 wget -b https://example.com/bigfile.tar.gz |
wget -q 网址 | 安静模式下载,不显示输出信息,例如 wget -q https://example.com/update.tar |
wget -i 文件名 | 从文件中读取多个 URL 进行批量下载,例如 wget -i download_list.txt |
wget --limit-rate = 速度 网址 | 限制下载速度(单位:k 或 m),例如 wget --limit-rate=500k https://example.com/file |
wget -U 浏览器标识 网址 | 模拟指定浏览器的 User-Agent,例如 wget -U "Mozilla/5.0" https://example.com |
wget --no-check-certificate 网址 | 忽略 SSL 证书验证(不推荐),例如 wget --no-check-certificate https://example.com |
wget -P 目录 网址 | 指定文件下载后的保存目录,例如 wget -P ~/downloads https://example.com/image.jpg |
wget -t 次数 网址 | 设置最大尝试下载次数(0 为无限),例如 wget -t 3 https://example.com/unstablefile |
(7)ssh
ssh 用户名 @主机地址 | 以指定用户身份登录远程主机,例如 ssh root@192.168.1.1 |
ssh 主机地址 | 以当前用户名登录远程主机,例如 ssh example.com |
ssh -p 端口号 用户名 @主机地址 | 指定端口号登录远程主机,例如 ssh -p 2222 admin@10.0.0.5 |
ssh -i 密钥文件 用户名 @主机地址 | 使用指定密钥文件登录,例如 ssh -i ~/.ssh/id_rsa user@server.com |
ssh -X 用户名 @主机地址 | 启用 X11 转发(图形界面转发),例如 ssh -X user@remotehost |
ssh -v 用户名 @主机地址 | 显示详细连接过程(调试用),例如 ssh -v root@192.168.1.100 |
ssh 用户名 @主机地址 命令 | 在远程主机执行单条命令后退出,例如 ssh user@host "ls -l /home" |
ssh -N -f -L 本地端口:目标主机:目标端口 用户名 @跳板机 | 建立本地端口转发(隧道),例如 ssh -N -f -L 8080:google.com:80 user@jump server |
ssh -N -f -R 远程端口:目标主机:目标端口 用户名 @远程主机 | 建立远程端口转发,例如 ssh -N -f -R 8080:localhost:80 user@public.server |
ssh -o ServerAliveInterval=60 用户名 @主机地址 | 保持 SSH 连接不中断(每 60 秒发送一次心跳),例如 ssh -o ServerAliveInterval=60 user@host |
ssh-copy-id 用户名 @主机地址 | 将本地公钥复制到远程主机(实现免密登录),例如 ssh-copy-id user@192.168.1.2 |
ssh -t 用户名 @主机地址 另一 ssh 命令 | 通过跳板机登录目标主机,例如 ssh -t user@jump ssh user@target |
(8)scp
scp 本地文件 用户名 @主机地址:远程路径 | 将本地文件复制到远程主机,例如 scp /home/file.txt user@192.168.1.1:/tmp/ |
scp 用户名 @主机地址:远程文件 本地路径 | 将远程文件复制到本地,例如 scp root@server.com:/var/logs.log ~/downloads/ |
scp -r 本地目录 用户名 @主机地址:远程路径 | 递归复制本地目录到远程主机,例如 scp -r /home/docs user@10.0.0.5:/var/www/ |
scp -r 用户名 @主机地址:远程目录 本地路径 | 递归复制远程目录到本地,例如 scp -r admin@example.com:/data ~/backup/ |
scp -P 端口号 本地文件 用户名 @主机地址:远程路径 | 指定端口复制文件,例如 scp -P 2222 ./image.jpg user@host:/tmp/ |
scp 本地文件 1 本地文件 2 用户名 @主机地址:远程路径 | 同时复制多个本地文件到远程,例如 scp file1.txt file2.pdf user@server:/docs/ |
scp 用户名 @主机 1: 文件 用户名 @主机 2: 路径 | 在两个远程主机之间复制文件,例如 scp user1@host1:/data.txt user2@host2:/backup/ |
scp -i 密钥文件 本地文件 用户名 @主机地址:路径 | 使用指定密钥文件进行复制,例如 scp -i ~/.ssh/id_rsa doc.txt user@host:/home/ |
scp -v 本地文件 用户名 @主机地址:路径 | 显示详细传输过程(调试用),例如 scp -v largefile.iso user@server:/data/ |
scp -C 本地文件 用户名 @主机地址:路径 | 启用压缩传输,例如 scp -C archive.tar.gz user@host:/tmp/ |
8、权限管理
(1)chmod
chmod 数字权限 文件名 | 通过 3 位或 4 位八进制数字设置文件 / 目录权限(用户、组、其他用户的读 / 写 / 执行权限),例如 chmod 755 script.sh 表示用户有读 / 写 / 执行权限,组和其他用户有读 / 执行权限 |
chmod u+rwx 文件名 | 为文件所有者(user)增加指定权限(r 读、w 写、x 执行),例如 chmod u+x file 给所有者增加执行权限 |
chmod g-rwx 文件名 | 从用户组(group)中移除指定权限,例如 chmod g-w doc.txt 取消组对文件的写权限 |
chmod o=r 文件名 | 为其他用户(others)直接设置指定权限(覆盖原有权限),例如 chmod o=r log.txt 仅允许其他用户读取文件 |
chmod a+x 文件名 | 为所有用户(all)增加指定权限,例如 chmod a+x app 让所有用户都能执行该应用 |
chmod -R 755 目录名 | 递归修改目录及目录下所有文件 / 子目录的权限,例如 chmod -R 755 /var/www 批量设置网站目录权限 |
chmod u+s 文件名 | 为可执行文件设置 SUID 权限(执行时临时获得文件所有者权限),例如 chmod u+s /usr/bin/passwd 允许普通用户修改密码(临时获得 root 权限) |
chmod g+s 目录名 | 为目录设置 SGID 权限(子文件 / 目录继承父目录的组属性),例如 chmod g+s /data/share 确保共享目录下新建文件继承组权限 |
chmod +t 目录名 | 为公共目录设置粘滞位(仅文件所有者可删除自己的文件),例如 chmod +t /tmp 保护 /tmp 目录下的文件不被其他用户删除 |
chmod --reference=参考文件 目标文件 | 让目标文件的权限与参考文件完全一致,例如 chmod --reference=file1.txt file2.txt 使 file2 权限和 file1 相同 |
chmod -v 755 文件名 | 修改权限时显示详细信息,例如 chmod -v 644 config.ini 输出修改后的权限状态 |
(2)chown
chown 用户名 文件名 | 更改文件 / 目录的所有者为指定用户,例如 chown john file.txt 将 file.txt 的所有者改为 john |
chown 用户名:组名 文件名 | 同时更改文件 / 目录的所有者和所属组,例如 chown john:devs script.sh 将所有者改为 john,所属组改为 devs |
chown :组名 文件名 | 只更改文件 / 目录的所属组(保持所有者不变),例如 chown :admin data/ 将 data 目录的所属组改为 admin |
chown -R 用户名 目录名 | 递归更改目录及目录下所有文件 / 子目录的所有者,例如 chown -R www-data /var/www 批量设置网站目录的所有者 |
chown -R 用户名:组名 目录名 | 递归更改目录及内容的所有者和所属组,例如 chown -R john:team project/ 批量修改项目目录的权限归属 |
chown --reference=参考文件 目标文件 | 让目标文件的所有者和所属组与参考文件一致,例如 chown --reference=template.txt newfile.txt 使 newfile 的归属和 template 相同 |
chown -v 用户名 文件名 | 修改归属时显示详细信息,例如 chown -v alice doc.pdf 输出修改后的所有者信息 |
chown -h 用户名 链接名 | 仅修改符号链接文件的所有者(不跟随链接指向的目标文件),例如 chown -h bob link_to_data 修改链接的所有者而非目标数据 |