当前位置: 首页 > news >正文

Linux 进阶命令实战:sudo 授权、文件查找、文本处理与进程管理

继文件权限和用户管理之后,我们继续学习 Linux 系统中非常实用的进阶命令:如何为普通用户授权sudo权限、如何使用find命令灵活查找文件、以及如何利用管道符和文本处理工具(wcgrep)高效处理数据。这些技能将极大提升你的日常工作效率。

前言

在日常的 Linux 使用和运维中,我们经常需要以普通用户执行特权命令、快速查找特定文件、统计日志行数、筛选文本内容,或者实时监控进程、按名称终止进程。这些操作看似零散,却是系统管理和故障排查的核心技能。

本文从sudo授权配置开始,带你掌握find的多条件文件查找、管道符|的组合技巧、grepwc的文本处理,最后深入进程管理:用top动态监控系统、用pgrep快速定位进程 PID、用pkillkill按需终止进程。

一、sudo:让普通用户执行特权命令

1.1 为什么需要sudo

在 Linux 中,很多系统管理操作(如安装软件、修改配置文件、重启服务)需要root权限。但直接使用root用户登录存在安全风险。sudo允许普通用户在需要时临时获得 root 权限,执行特定命令。

1.2 授权配置:visudo

重要sudo的授权文件是/etc/sudoers必须使用visudo命令编辑,不能直接用vimnano,因为visudo会进行语法检查,避免配置错误导致无法使用sudo

  • 命令格式:sudo visudo

  • 也可以编辑/etc/sudoers.d/下的独立文件:sudo visudo -f /etc/sudoers.d/文件名

1.3 常见授权规则格式

规则含义
用户名 ALL=(ALL) ALL该用户可以在任何主机上以任何用户身份执行任何命令
%组名 ALL=(ALL) ALL该组中的所有成员拥有完整sudo权限(组名前加%
用户名 ALL=(ALL) NOPASSWD: 命令路径该用户可以免密码执行指定命令

里面出现了三个ALL,它们分别代表不同的含义。按顺序解释:

位置示例含义
第一个 ALLtonyALL=(ALL) ALL主机名匹配:表示该规则适用于所有主机。在多机环境中,你可以指定特定主机名,但通常用ALL表示不限制主机。
括号内的 ALLtony ALL=(ALL) ALL用户身份匹配:表示允许以任何用户的身份执行命令(即可以通过sudo -u 用户名切换成其他用户)。如果写成=(root),则只能以 root 身份执行。
最后一个 ALLtony ALL=(ALL)ALL命令匹配:表示允许执行任何命令。你可以替换成具体命令路径(如/bin/systemctl restart nginx),来限制只能执行特定命令。

这个括号里面的ALL可以省略的,省略后表示不允许以任何用户的身份执行命令,只允许以root身份执行。

完整解读

tony ALL=(ALL) ALL的意思是:

用户 tony 可以在任何主机上,以任何用户的身份,执行任何命令。

我们输入了sudo visudo命令后成功跳转到了编辑页面,可以看到里面很多#开头的,这些都是注释,我们可以不管,我这里只截取了一点,下面其实有其他的授权,可以翻看一下,下面我们试试给kunkun用户授权。只需要找到一个空白位置按照语法要求写入就可以了,这个和vim很像,用法也是一样的,也涉及到了三种模式的切换,但是这个文件的编辑只能使用visudo。

我随便找了一篇空白位置输入了授权,表示授予kunkun用户在所有主机上允许使用root权限进行所有操作(这里我省略了括号中的ALL),输入完授权后和vim操作一样,按esc退出到默认模式,然后输入:进入命令模式,再输入wq保存并退出,这样就完成了授权。

1.4 使用sudo

  • 在需要提权的命令前加上sudo,例如sudo systemctl restart sshd

  • 切换到被授权的用户

  • 以其他用户身份执行命令:sudo 命令

我们刚刚给kunkun用户给授权了sudo,下面我们来切换到kunkun用户,然后我们试试能不能在/root目录下创建目录,我们先来试试不使用sudo,看看能不能在/root目录下创建目录。我们来分析一下,这个/root目录是root用户的家目录,我们执行ls -ld /root命令来查看一下权限然后试试不用sudo来创建目录。

/root目录是root用户的家目录,他的属主是root,属组是root,那么kunkun用户对于这个文件来说就是其他用户,执行完ls -ld /root命令后,可以看到其他用户是没有任何权限的,所以我们分析,不使用sudo不能创建出目录,从截图中可以看出,我们没有使用sudo,确实是未能成功创建目录,显示权限不够。下面我们再来加上sudo试试能否成功创建目录。

加上sudo后执行命令发现并没有报错,这里第一次使用sudo会让输入当前用户的密码,如果没有设置密码需要返回设置密码,我已经执行过了就不用输入密码,然后使用ls -l /root命令查看是否真的创建出来了,可以看到,是成功创建出了这个目录的,我们看看前面,发现属主和属组都是root而不是这个kunkun用户,说明我们是成功使用了sudo的,以为root用户身份创建出了这个目录。

学到这里,不难想到这个sudo应该常常被攻击者用作建立后门,只要拿到一次root后攻击者就可以给普通用户授权sudo,这样就算以后拿不到root了也可以通过普通用户执行sudo拿到root权限。之前我们还提到过SUID后门,这个sudo后门相较于SUID后门就更加隐蔽持久,而SUID后门容易被我们下面讲到的find命令查询到。


二、find:强大的文件查找工具

find命令可以在指定目录中递归搜索文件,并支持多种条件组合。

基本格式find [搜索路径] [条件] [动作]

2.1 常用查找条件

参数作用用法说明
-name按文件名查找支持通配符,通配符需加引号。例如查找所有.conf文件
-type按文件类型f(普通文件)、d(目录)、l(符号链接)
-user/-group按属主或属组查找例如查找属于用户 root 的所有文件
-size按大小查找+100M(大于100MB)、-1k(小于1KB)
-mtime按修改时间-mtime n(n 天前当天修改)、+n(超过 n 天)、-n(n 天内)
-perm按权限查找例如查找权限为755的文件,或查找设置了 SUID 的文件(-perm 4755
  • -name参数可以对文件名进行查找,支持使用通配符,下面是查找出根目录下所有以.conf结尾的文件,这里文件太多了,我就用 | (这是管道符,在文章后面会讲到)只展示了前五个。可以看到成功按照要求筛选出了文件。
  • -type 参数可以指定文件的类型 ,f 代表普通文件 ,d表示目录,l表示链接。下面我们使用这个参数来找出/etc目录下的所有文件,我们还是使用管道符只展示前五个,使用ls命令查看其中一个,发现这确实是一个文件。
  • -user/group可以以属主/属组为条件筛选出所有属主/属组为该用户的文件或者目录,这些筛选都是可以自由组合的,我们可以再加上-type f筛选出所有符合条件的文件,选择其中一个使用ls命令查看,确实是符合筛选条件的。
  • -size参数可以查询出符合大小要求的目录或者文件,+表示大于、-表示小于,我们来试试查找出根目录下大于10G的文件,执行命令后成功查询到了,使用ls命令查看,发现大小128T,大于10G,当然这是虚拟的,实际并没有这么大。
  • -mtime可以根据时间查询,比如某些日志文件,等保要求的一般是保存半年以上,所以我们可以筛选出超过一年的文件,我们还是使用管道符只展示了前十个,我们挑选了一个使用ls命令查看,确实是符合条件的。
  • perm参数可以按照权限进行查询,之前我们提到过SUID后门可以被find查询到,就是通过这个参数查询,我们执行命令就可以查到具有s权限的文件,所以说这个隐蔽性不如sudo后门高。

2.2 组合条件

  • -a(与,可省略):多个条件必须同时满足。

  • -o(或):满足任一条件即可。


三、管道符|与文本处理

3.1 管道符|的作用

管道符将左边命令的标准输出作为右边命令的标准输入,实现命令组合。右边命令必须能处理文本(如grepwcsortheadtailcat等)。

3.2wc -l:统计行数

  • 直接统计文件行数:wc -l 文件名

  • 通过管道统计:其他命令 | wc -l

  • 常见用途:统计登录用户数、统计文件数量、统计日志行数等。

之前我们查询.conf结尾的文件的时候有很多很多,现在我们可以使用这个管道符来查询到底有多少条。

执行完命令可以看到,以.conf结尾的有1646行之多,这也印证了管道符将左边命令的标准输出作为右边命令的标准输入的作用

3.3grep:文本搜索

grep用于在文件或输入流中搜索匹配模式的行。

常用选项

选项作用
-i忽略大小写
-v反向匹配(显示不包含模式的行)
^锚定行首,例如^root表示以 root 开头的行
$锚定行尾,例如bash$表示以 bash 结尾的行
^$匹配空行

常见用法

  • 在日志中搜索包含某个关键词的行(不区分大小写)​​​​​​​
  • 过滤掉配置文件中的注释行和空行,visudo文件中就有很多注释,我们只需要反向查找以#开头的并且反向查找^$就可以了,通过命令我们成功查询到了,原本是有很多注释的,现在都没有了。​​​​​​​
  • 查找以特定字符串开头的行,查找以什么开头的就只需要再前面加上^就可以,可以看到我们成功查询出了符合条件的一行。

  • 查找以特定字符串结尾的行,这个也只需要再要查询的字段后面加上$就可以了,我们也成功查询到了以bash结尾的。


四、小结

本文系统梳理了 Linux 中极为实用的几类进阶命令:

  • 特权授权sudovisudo,让普通用户安全执行高权限命令。

  • 文件查找find支持按名称、类型、大小、时间、权限等组合条件查找,配合-exec可批量操作。

  • 文本处理:管道符|连接命令,grep灵活搜索(忽略大小写、反向匹配、行首行尾定位),wc -l统计行数。

  • 进程管理top实时监控系统负载与进程资源;pgrep按名称快速获取 PID;pkill按名称批量终止进程;kill精确控制单个进程(-9强制杀死)。


原创作者:浅了

http://www.cnnetsun.cn/news/2051737.html

相关文章:

  • Qt串口通信GUI卡顿?试试把QSerialPort丢到子线程里(附完整代码)
  • 从外网打到内网:手把手教你用MSF+Socks代理穿透CFS三层靶机网络
  • 生成引擎优化(GEO)提升数字内容互动与用户体验的新策略
  • 保姆级教程:在Ubuntu 22.04上搞定ROS2 Humble与速腾16线雷达的驱动配置
  • 策略模式的思想的经典案例分析
  • Vivado BD 地址位宽校验失败深度解析:从 [IP_Flow 19-3478] 错误到 AXI 总线对齐原则
  • Jellyfin Kodi插件终极指南:打造无缝跨设备媒体体验
  • 撕下“被动应答”的伪装:清华等团队开源 PASK,AI 终于长出了“眼力见”与“长期记忆”!
  • Star 11.5k 开源的网络钓鱼平台 gophish
  • 从《原神》到Matlab:我是如何用TheColor工具箱自制一套67角色配色包的(附源码思路)
  • 开源神器Serial Studio实战:如何用它的CSV导出和网络功能,做自动化测试报告?
  • CodeCombat游戏化编程学习终极指南:用游戏思维掌握代码技能
  • Docker 27安全扫描零配置接入,5分钟完成SBOM生成+OSV漏洞匹配+自动阻断策略部署
  • 3步彻底清理Mac残留文件:Pearcleaner让你的Mac重获新生
  • Codeforces胡萝卜插件:终极实时评级预测指南
  • 从传感器到屏幕:用STM32的ADC读取电子秤数据并显示(野火指南者实战)
  • 光子量子神经网络架构与混合计算框架解析
  • 从零到精通:大模型完整学习路线(避坑指南+实战变现)
  • VisionMaster 4.2 SDK避坑指南:C#二次开发中那些官方文档没细说的‘坑’
  • 线上Java应用出Bug了?试试阿里开源的JVM-Sandbox,不重启就能动态插桩排查
  • 3步快速上手:R3nzSkin英雄联盟内存换肤终极教程
  • FF14钓鱼神器:渔人的直感 - 智能计时器让你的钓鱼效率提升300%
  • FreeRTOS事件标志组实战:用STM32CubeIDE在STM32F4上实现多任务同步(附代码)
  • Vectorizer:让位图图像拥有矢量灵魂的魔法工具
  • 别只写 `font-family: sans-serif;` 了!聊聊CSS字体栈里那些关于版权、渲染和用户体验的“潜规则”
  • 别再傻傻分不清!一张图看懂门禁卡里的ID卡、M1卡和CPU卡到底有啥区别
  • 3大核心功能,让原神游戏体验提升200%的自动化脚本
  • 深度解析RePKG:Wallpaper Engine资源提取与TEX转换的终极解决方案
  • 用GeoPandas+Matplotlib绘制带标注点的专业地图:从JSON到出图保姆级教程
  • 不止是安装:用Docker在Kali上秒级部署DVWA靶场,并配置持久化与自定义漏洞