news 2026/6/11 6:08:52

Linux基础命令:文件、用户、权限一网打尽

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux基础命令:文件、用户、权限一网打尽

Linux基础命令:文件、用户、权限一网打尽

前几天发布的从零玩转 Linux 命令行:一位后端菜鸟的硬核笔记 深受大家喜欢,今天我再发一个简洁版的博客,方便大家速查


一、文件查看与检索

1.1 正则表达式:文本处理的基础

在讲文本搜索之前,必须先说说正则表达式。它是文本处理的灵魂,grepsedawk都依赖它来做模式匹配。

基础正则
# . 匹配任意单个字符grep"h.llo"file.txt# 匹配 hello, hallo, hxllo 等# * 匹配前面的字符0次或多次grep"ab*c"file.txt# 匹配 ac, abc, abbc, abbbc 等# ^ 行首锚定grep"^root"/etc/passwd# 匹配以root开头的行# $ 行尾锚定grep"bash$"/etc/passwd# 匹配以bash结尾的行# ^$ 匹配空行grep-n"^$"file.txt# 显示空行及行号# [] 匹配括号中的任意一个字符grep"[0-9]"file.txt# 匹配包含数字的行grep"[a-zA-Z]"file.txt# 匹配包含字母的行# [^] 匹配不在括号中的字符grep"[^0-9]"file.txt# 匹配包含非数字的行# \b 单词边界grep"\bword\b"file.txt# 精确匹配单词word
扩展正则(ERE)

使用grep -E(或egrep)启用扩展正则:

# + 匹配前面的字符1次或多次grep-E"ab+c"file.txt# 匹配 abc, abbc(不匹配ac)# ? 匹配前面的字符0次或1次grep-E"ab?c"file.txt# 匹配 ac, abc(不匹配abbc)# {n} 匹配n次grep-E"[0-9]{3}"file.txt# 匹配连续3个数字# {n,m} 匹配n到m次grep-E"[0-9]{2,4}"file.txt# 匹配2到4个数字# | 或运算grep-E"cat|dog"file.txt# 匹配cat或dog# () 分组grep-E"(ab)+"file.txt# 匹配ab, abab, ababab 等
预定义字符类
[[:alnum:]]# 字母和数字(等同于[a-zA-Z0-9])[[:alpha:]]# 字母(等同于[a-zA-Z])[[:digit:]]# 数字(等同于[0-9])[[:lower:]]# 小写字母[[:upper:]]# 大写字母[[:space:]]# 空白字符[[:punct:]]# 标点符号

实战:验证IP地址格式

#!/bin/bash# 验证IP地址格式是否正确ip="$1"if[[$ip=~^([0-9]{1,3}\.){3}[0-9]{1,3}$]];thenecho"格式正确"elseecho"格式错误"fi

1.2 grep:在海量日志中精准定位你要的内容

做过线上排查的同学一定对grep不陌生。服务报错了,第一反应就是去日志里grep一下错误关键字。但grep的能力远不止于此。

grep(Global Regular Expression Print)是最常用的文本搜索命令,支持正则表达式进行模式匹配。

常用选项速查
# -i 忽略大小写grep-i"error"/var/log/app.log# -v 反向匹配(显示不匹配的行)grep-v"^#"/etc/nginx/nginx.conf|grep-v"^$"# 过滤注释和空行# -c 统计匹配行数grep-c"404"access.log# -l 只显示包含匹配的文件名grep-rl"TODO"./src/# -n 显示行号grep-n"NullPointerException"app.log# -w 精确匹配整个单词grep-w"error"app.log# -A/-B/-C 显示上下文grep-C3"NullPointerException"app.log# 前后各3行

-A-B-C三个参数分别代表After(后几行)、Before(前几行)、Context(前后各几行),在排查问题时配合使用效果拔群。

进阶用法
# 递归搜索整个目录下的所有文件grep-r"TODO"./src/# 只显示匹配到的文件名(快速定位哪个文件有问题)grep-l"deprecated"./src/**/*.java# 反向匹配:显示不包含指定内容的行(过滤注释和空行)grep-v"^#"/etc/nginx/nginx.conf|grep-v"^$"# 使用正则匹配以"Error"开头的行grep"^Error"app.log# 统计匹配到的次数grep-c"Timeout"app.log# 使用扩展正则grep-E"cat|dog"file.txt
实战场景
# 场景1:查找日志中的异常并统计grep-c"OutOfMemoryError"app.log# 场景2:查看配置文件中生效的配置(过滤注释和空行)grep-E-v"^(#|$)"/etc/nginx/nginx.conf# 场景3:查找包含特定方法的Java源文件grep-rl"public void handle"--include="*.java"./src/# 场景4:查找最近100行日志中的ERRORtail-100app.log|grep"ERROR"

1.3 find:不只是找文件那么简单

find命令的功能非常强大,它可以在指定目录下按照各种条件搜索文件。

# 按文件名查找find/var/log-name"*.log"# 按文件类型查找(f=普通文件,d=目录)find/tmp-typef-name"*.tmp"# 按大小查找(查找大于100M的日志文件)find/var/log-size+100M# 按修改时间查找(查找7天内修改过的配置文件)find/etc-name"*.conf"-mtime-7# 找到文件后执行操作(删除超过30天的日志)find/var/log-name"*.log"-mtime+30-execrm-f{}\;

1.4 wc、sort、uniq:文本统计三剑客

在做数据分析或者日志统计时,这几个命令经常组合使用。

# wc统计行数、单词数、字符数wc-l/etc/passwd# 统计文件行数catapp.log|wc-l# 统计日志行数# sort排序sort-nnumbers.txt# 按数字升序排列sort-rnumbers.txt# 降序排列sort-unumbers.txt# 排序并去重# uniq去重(注意:uniq只能去除相邻的重复行,所以一般要先sort)sortnames.txt|uniq# 排序后去重sortnames.txt|uniq-c# 去重并统计每行出现次数sortnames.txt|uniq-d# 只显示重复的行

实战场景:统计Nginx访问日志中访问次数最多的IP

awk'{print $1}'/var/log/nginx/access.log|sort|uniq-c|sort-rn|head-10

这条管道命令的逻辑是:提取IP字段 → 排序 → 去重计数 → 按次数降序 → 取前10。简洁高效。


二、用户与权限管理

2.1 用户管理基础

Linux是一个多用户操作系统,用户管理是运维的基本功。

# 创建用户useradd-m-s/bin/bash devuser# -m创建家目录,-s指定shell# 设置密码passwddevuser# 删除用户(-r同时删除家目录)userdel-rdevuser# 查看用户信息iddevuser# 查看uid、gid、所属组whoami# 查看当前用户who# 查看当前登录的所有用户

2.2 文件权限:rwx不是随便写的

Linux的权限模型是安全的基础。每个文件都有三组权限:所属用户(owner)、所属组(group)、其他人(others)。

# 查看文件权限ls-la/etc/passwd# -rw-r--r-- 1 root root 2345 Jun 7 10:00 /etc/passwd# 解读:所属用户rw-,所属组r--,其他人r--# 修改权限(数字方式)chmod755script.sh# rwxr-xr-x(用户7=rwx,组5=r-x,其他5=r-x)chmod644config.yml# rw-r--r--# 修改权限(符号方式)chmodu+x script.sh# 给所属用户添加执行权限chmodg-w file.txt# 去掉所属组的写权限chmodo=file.txt# 去掉其他人的所有权限# 修改所属用户和组chowndevuser:devgroup app.logchown-Rdevuser:devgroup /opt/app/# 递归修改目录

权限数字速记:r=4, w=2, x=1,三者相加就是权限数字。比如755就是rwxr-xr-x644就是rw-r--r--

2.3 umask:新文件的默认权限从哪来

你有没有想过,为什么新建的文件权限是644,新建的目录权限是755?这背后就是umask在起作用。

# 查看当前umask值umask# 输出:0022# umask的计算规则:# 文件默认权限 = 666 - umask = 666 - 022 = 644# 目录默认权限 = 777 - umask = 777 - 022 = 755

三、文件类型与压缩

3.1 Linux中的文件类型

Linux中一切皆文件,但文件也分类型:

# 查看文件类型ls-la# 第一个字符标识文件类型:# - 普通文件 d 目录 l 链接文件 s socket文件 c 字符设备 b 块设备filemyfile.txt# 更详细地查看文件类型

3.2 压缩与解压缩

线上部署经常要打包传输文件,压缩命令是必备技能。

# tar打包压缩(最常用)tar-czfapp.tar.gz /opt/app/# 打包并gzip压缩tar-cjfapp.tar.bz2 /opt/app/# 打包并bzip2压缩tar-xfapp.tar.gz# 解压(自动识别格式)tar-xzfapp.tar.gz-C/opt/# 解压到指定目录# 查看压缩包内容(不解压)tar-tzfapp.tar.gz# zip格式(和Windows交互时常用)zip-rapp.zip /opt/app/unzipapp.zip-d/opt/

实用技巧:排除某些文件不打包

# 排除日志和临时文件tar-czfapp.tar.gz--exclude="*.log"--exclude="*.tmp"/opt/app/

四、磁盘与进程

4.1 磁盘空间管理

磁盘满了是线上常见的告警之一,这几个命令要熟练掌握。

# 查看磁盘使用情况df-h# 以人类可读的格式显示df-hT# 多显示文件系统类型# 查看目录大小du-sh/var/log/# 查看目录总大小du-sh/var/log/*# 查看子目录各自大小du-sh/var/log/|sort-rh|head-10# 找出最大的目录

4.2 进程管理

# 查看进程psaux|grepjava# 查找Java进程ps-ef|grepnginx# 另一种写法# 实时查看系统资源top# 实时监控CPU、内存htop# 更好看的top(需要安装)# 杀死进程killPID# 优雅终止kill-9PID# 强制杀死(慎用)# 后台运行nohupjava-jarapp.jar>app.log2>&1&

五、网络相关命令

5.1 网络连通性测试

# 测试网络连通性ping-c4baidu.com# 只ping 4次# 查看路由traceroutebaidu.com# DNS解析nslookupbaidu.comdigbaidu.com

5.2 端口与连接

# 查看端口占用netstat-tlnp# 查看所有监听端口ss-tlnp# 更现代的写法# 查看特定端口ss-tlnp|grep:8080# 查看网络连接状态统计ss-ant|awk'{print $1}'|sort|uniq-c|sort-rn

5.3 curl与wget

# 测试HTTP接口curl-s-o/dev/null-w"%{http_code}"http://localhost:8080/healthcurl-XPOST-H"Content-Type: application/json"-d'{"key":"value"}'http://api.example.com# 下载文件wgethttps://example.com/file.tar.gzwget-chttps://example.com/large.iso# 断点续传

六、sed:流编辑器

sed(Stream Editor)是一个强大的流式文本编辑工具。它逐行读取文件,对匹配的行执行指定操作,然后输出结果。

6.1 工作原理

文件 → 逐行读入模式空间 → 执行命令 → 输出结果 → 清空模式空间 → 读下一行

6.2 基本语法

sed[选项]'命令'文件名# 常用选项:# -n 静默模式,只输出被处理的行# -i 直接修改文件(不加-i只预览不修改)# -E 使用扩展正则# -e 执行多条命令

6.3 打印(p)

# 打印第2行sed-n'2p'file.txt# 打印第2到5行sed-n'2,5p'file.txt# 打印包含关键字的行sed-n'/ERROR/p'app.log# 打印奇数行/偶数行sed-n'1~2p'file.txt# 奇数行sed-n'0~2p'file.txt# 偶数行

6.4 删除(d)

# 删除第3行sed'3d'file.txt# 删除空行sed'/^$/d'file.txt# 删除注释行sed'/^#/d'file.txt# 删除注释行和空行sed-e'/^#/d'-e'/^$/d'file.txt# 直接修改文件(加-i)sed-i'/^#/d'file.txt

6.5 替换(s)

这是sed最常用的功能:

# 基本替换:替换每行第一个匹配sed's/old/new/'file.txt# 全局替换:替换所有匹配sed's/old/new/g'file.txt# 直接修改文件sed-i's/old/new/g'file.txt# 指定行替换sed'3s/old/new/'file.txt# 只替换第3行sed'3,5s/old/new/g'file.txt# 替换第3到5行# 使用不同的分隔符(处理路径时很有用)sed's#/usr/local#/opt#g'file.txt# 备份原文件再修改sed-i.bak's/old/new/g'file.txt# 原文件备份为file.txt.bak

实战:获取IP地址

# 从ifconfig输出中提取IP(分组提取)ifconfigeth0|sed-nr's/.*inet ([0-9.]+).*/\1/p'

6.6 插入和追加

# 在第3行前插入sed'3i\新内容'file.txt# 在第3行后追加sed'3a\新内容'file.txt# 在匹配行后追加sed'/server/a\ listen 443 ssl;'nginx.conf# 在文件末尾追加sed'$a\新增的最后一行'file.txt

6.7 实战:批量修改配置文件

#!/bin/bash# 批量修改Nginx配置CONF="/etc/nginx/nginx.conf"# 修改端口号sed-i's/listen 80/listen 8080/'"$CONF"# 修改server_namesed-i's/server_name localhost/server_name www.example.com/'"$CONF"# 在http块中添加配置sed-i'/http {/a\ client_max_body_size 100m;'"$CONF"# 删除空行sed-i'/^$/d'"$CONF"echo"配置修改完成"

七、awk:文本分析利器

awk是三剑客中最强大的,它不仅能过滤和提取,还能做数学运算和格式化输出。如果说grep是查找,sed是编辑,那awk就是分析。

7.1 基本语法

awk'pattern {action}'fileawk-F'分隔符''pattern {action}'file

7.2 字段提取

awk最核心的能力是按列提取数据:

# 提取第1列和第3列awk'{print $1, $3}'file.txt# 指定分隔符(默认是空格)awk-F':''{print $1, $7}'/etc/passwd# $0表示整行,$NF表示最后一列awk-F':''{print $1, $NF}'/etc/passwd# $(NF-1)表示倒数第二列awk'{print $(NF-1)}'file.txt

7.3 内置变量

变量含义
NR当前行号
NF当前行的字段数
FS输入字段分隔符
OFS输出字段分隔符
FILENAME当前文件名
$0整行内容
$n第n个字段
# NR:行号awk'{print NR, $0}'file.txt# NF:字段数awk'{print NF}'file.txt# 输出分隔符awk-F':'-vOFS=","'{print $1, $3, $7}'/etc/passwd

7.4 BEGIN和END

# BEGIN:处理数据前执行# END:处理数据后执行awk-F':''BEGIN{print "用户名\tUID\tShell"} {print $1"\t"$3"\t"$7} END{print "---完毕---"}'/etc/passwd

实战:格式化输出成绩表

#!/bin/bashcat<<'EOF'>scores.txt姓名 语文 数学 英语 张三 85 90 78 李四 92 88 95 王五 76 82 80 赵六 88 95 92 EOFawk'BEGIN{ printf "===================================\n" printf "|%-4s|%4s|%4s|%4s|%5s|\n","姓名","语文","数学","英语","总分" printf "===================================\n" } NR>=2{ total=$2+$3+$4 printf "|%-4s|%4d|%4d|%4d|%5d|\n",$1,$2,$3,$4,total yu+=$2; shu+=$3; ying+=$4 } END{ printf "===================================\n" printf "|合计|%4d|%4d|%4d|\n",yu,shu,ying printf "===================================\n" }'scores.txt

7.5 条件与循环

# 条件判断awk-F':''$3 >= 1000 {print $1, $3}'/etc/passwd# UID>=1000的用户# if语句awk-F':''{if($3>=1000) print $1, "普通用户"; else print $1, "系统用户"}'/etc/passwd# for循环awk'{sum=0; for(i=2;i<=NF;i++) sum+=$i; print $1, sum}'scores.txt# 数组统计awk'{count[$1]++} END{for(k in count) print k, count[k]}'access.log

7.6 内置函数

# 字符串长度awk'BEGIN{print length("hello")}'# 字符串截取awk'BEGIN{print substr("hello world", 1, 5)}'# 大小写转换awk'BEGIN{s="Hello"; print toupper(s), tolower(s)}'# 数学函数awk'BEGIN{print sqrt(144)}'# 12awk'BEGIN{print int(3.7)}'# 3

7.7 实战案例

统计Nginx日志中每个IP的访问次数:

awk'{ip[$1]++} END{for(k in ip) print k, ip[k]}'access.log|sort-k2-rn|head-10

统计HTTP状态码分布:

awk'{status[$9]++} END{for(k in status) print k, status[k]}'access.log|sort-k2-rn

找出响应时间超过1秒的请求:

awk'$NF > 1.0 {print $0}'access.log

统计每天的访问量:

awk-F'[/:]''{date=$2"-"$3"-"$4; count[date]++} END{for(d in count) print d, count[d]}'access.log|sort

八、三剑客组合实战

8.1 综合案例:Nginx日志分析报告

#!/bin/bash# 功能:生成Nginx访问日志分析报告LOG="${1:-/var/log/nginx/access.log}"if[!-f"$LOG"];thenecho"日志文件不存在:$LOG"exit1fiecho"========================================"echo" Nginx日志分析报告"echo" 生成时间:$(date'+%F %T')"echo" 日志文件:$LOG"echo" 日志行数:$(wc-l<"$LOG")"echo"========================================"echo""echo"--- 访问量TOP10的IP ---"awk'{print $1}'"$LOG"|sort|uniq-c|sort-rn|head-10echo""echo"--- HTTP状态码分布 ---"awk'{print $9}'"$LOG"|sort|uniq-c|sort-rnecho""echo"--- 访问量TOP10的URL ---"awk'{print $7}'"$LOG"|sort|uniq-c|sort-rn|head-10echo""echo"--- 每小时访问量 ---"awk-F'[/:]''{print $2}'"$LOG"|sort|uniq-c|sort-k2necho""echo"--- 4xx/5xx错误请求 ---"awk'$9 ~ /^[45]/ {print $9, $7}'"$LOG"|sort|uniq-c|sort-rn|head-10echo"========================================"

8.2 综合案例:配置文件批量处理

#!/bin/bash# 功能:批量处理应用配置文件# 提取配置文件中的有效行(过滤注释和空行)grep-E-v"^(#|$)"application.yml# 替换数据库连接字符串sed-i's/localhost:3306/db-server:3306/g'application.yml# 提取所有配置项的keyawk-F':''/^[^#]/{print $1}'application.yml|tr-d' '# 统计每个环境的配置数量grep-c"dev\|test\|prod"application.yml

8.3 综合案例:服务器巡检脚本

#!/bin/bash# 功能:服务器巡检echo"========== 服务器巡检报告 =========="echo"巡检时间:$(date'+%F %T')"echo""# CPU使用率cpu_usage=$(top-bn1|grep"Cpu(s)"|awk'{print $2}')echo"CPU使用率:${cpu_usage}%"# 内存使用率mem_info=$(free-m|awk'/Mem/{printf "%d/%dM (%.1f%%)", $3, $2, $3/$2*100}')echo"内存使用:$mem_info"# 磁盘使用率echo"磁盘使用:"df-h|awk'/^\/dev/{printf " %-20s %s\n", $6, $5}'# 系统负载load=$(uptime|awk-F'load average:''{print $2}')echo"系统负载:$load"# TCP连接状态echo"TCP连接状态:"ss-ant|awk'NR>1{state[$1]++} END{for(s in state) printf " %-15s %d\n", s, state[s]}'# 最近登录失败记录echo"最近登录失败:"lastb2>/dev/null|head-5||echo" 无权限查看"echo""echo"====================================="

九、实用技巧速查

日常开发中非常高频的命令组合:

# 查看Java进程的线程数ps-eLf|grepjava|wc-l# 实时查看日志最新100行tail-f-n100/var/log/app.log# 统计文件中每个单词出现的次数catfile.txt|tr' ''\n'|sort|uniq-c|sort-rn# 批量替换文件中的字符串sed-i's/old_value/new_value/g'config.yml# 查找并杀死所有匹配的进程psaux|grep"app.jar"|grep-vgrep|awk'{print $2}'|xargskill-9# 统计日志中关键字的出现次数grep-c"ERROR"app.log# 从日志中提取特定字段并排序统计awk'{print $1}'access.log|sort|uniq-c|sort-rn|head-10# 递归替换目录下所有文件中的字符串find./src-typef-name"*.java"-execsed-i's/OldClass/NewClass/g'{}\;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 6:03:57

RStudio效率翻倍:巧用Wind/iFinD的‘超级命令’和插件,告别手动写API代码

RStudio效率革命&#xff1a;用Wind/iFinD图形化工具实现零代码金融数据抓取在量化研究和金融分析领域&#xff0c;数据获取往往是第一个拦路虎。许多分析师花费大量时间反复查阅API文档、调试参数语法&#xff0c;却忽略了现代金融终端早已内置的智能解决方案。本文将揭示如何…

作者头像 李华
网站建设 2026/6/11 6:00:53

ViewRope:革新视频生成中的几何一致性技术

1. 项目概述&#xff1a;ViewRope如何革新视频世界模型的几何一致性在视频生成领域&#xff0c;保持3D场景的长期一致性一直是个棘手难题。想象一下&#xff0c;当你在虚拟环境中环顾四周后回到原点&#xff0c;眼前的场景却与最初看到的大相径庭——这就是当前视频生成模型面临…

作者头像 李华
网站建设 2026/6/11 6:00:53

5分钟快速上手SadTalker:开源AI数字人生成终极指南

5分钟快速上手SadTalker&#xff1a;开源AI数字人生成终极指南 【免费下载链接】SadTalker [CVPR 2023] SadTalker&#xff1a;Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitcode.com/Gi…

作者头像 李华
网站建设 2026/6/11 5:58:54

3步打造你的专属Minecraft电影级光影:Bliss Shader新手完全指南

3步打造你的专属Minecraft电影级光影&#xff1a;Bliss Shader新手完全指南 【免费下载链接】Bliss-Shader A minecraft shader which is an edit of chocapic v9 项目地址: https://gitcode.com/gh_mirrors/bl/Bliss-Shader 还在为Minecraft中单调的光影效果感到乏味吗…

作者头像 李华