4、Linux基础命令(下):权限、用户、进程与网络管理

各位同学,欢迎来到第四讲。上一节我们聊了文件操作和文本处理,今天咱们继续深入,把Linux日常管理中最核心的几个命令模块讲透。权限管理、用户管理、进程管理、网络管理——这四个东西,说白了就是嵌入式Linux开发者的“四把刀”。

我个人习惯把这四个模块串起来理解:谁(用户)能对什么(权限)做什么事(进程),以及这些东西怎么跟外界通信(网络)。你想想看,是不是这个理?

4.1 权限管理命令:chmod、chown、chgrp

权限管理,是Linux安全模型的基石。我在项目中遇到过好几次,设备跑起来莫名其妙报“Permission denied”,最后发现都是权限没设对。

4.1.1 chmod —— 修改文件权限

chmod 的全称是 change mode。它有两种用法:数字法和符号法。

数字法:用三位八进制数表示权限。r=4, w=2, x=1。加起来就行。

chmod 755 my_script.sh
# 所有者:7 (rwx),组用户:5 (r-x),其他用户:5 (r-x)

符号法:用 u/g/o/a 表示用户类别,+/-/= 表示操作。

chmod u+x my_script.sh   # 给所有者加执行权限
chmod go-w my_script.sh  # 去掉组和其他用户的写权限
我的小技巧: 嵌入式开发中,脚本文件经常需要执行权限。我习惯写完脚本直接 chmod +x,省得后面调试时才发现没权限。

4.1.2 chown —— 修改文件所有者

chown 是 change owner 的缩写。嵌入式设备上,不同服务进程通常用不同用户运行,这时候 chown 就派上用场了。

chown root:root /etc/config.conf   # 同时修改所有者和组
chown -R appuser:appgroup /data/    # 递归修改整个目录
注意: 只有 root 用户才能修改文件的所有者。普通用户不能把自己的文件“送”给别人。

4.1.3 chgrp —— 修改文件所属组

chgrp 相对简单,只改组,不改所有者。实际工作中,我经常用 chgrp 来让多个用户共享一个目录。

chgrp developers /project/code
chgrp -R iot_group /var/log/

避坑指南: 我曾经在批量修改权限时,不小心把系统关键文件的权限改成了 777。结果系统直接崩了。记住:权限越少越安全,够用就行。

4.2 用户管理命令:useradd、passwd、userdel

嵌入式Linux虽然不像服务器那样有大量用户,但合理管理用户依然重要。比如,让每个服务进程用独立用户运行,能有效隔离风险。

4.2.1 useradd —— 创建用户

useradd 是添加用户的命令。我建议创建用户时,顺手指定家目录和 shell。

useradd -m -s /bin/bash newuser
# -m:创建家目录,-s:指定登录 shell

创建系统用户(无登录权限)时,常用:

useradd -r -s /sbin/nologin myservice

4.2.2 passwd —— 设置密码

创建用户后,必须设置密码才能登录。

passwd newuser
# 系统会提示输入两次密码

嗯,这里要注意:嵌入式设备上,我经常用 passwd -l username 来锁定用户,防止未授权登录。调试完再解锁。

4.2.3 userdel —— 删除用户

userdel -r olduser   # -r 会同时删除家目录和邮件池

如果不加 -r,用户的家目录会残留。我个人习惯是:确定不再需要时,一定加 -r 清理干净。

4.3 进程管理命令:ps、top、kill

进程管理,是嵌入式调试的日常。设备跑着跑着卡住了?进程挂了?内存泄漏了?这些命令就是你的“听诊器”。

4.3.1 ps —— 查看进程快照

ps 是 process status 的缩写。我最常用的组合是:

ps aux          # 查看所有进程的详细信息
ps -ef          # 另一种格式,显示父进程 PID
ps aux | grep myapp   # 查找特定进程

输出字段说明:

字段含义
USER进程所有者
PID进程ID
%CPUCPU使用率
%MEM内存使用率
VSZ虚拟内存大小
RSS常驻内存大小
STAT进程状态(R运行,S睡眠,Z僵尸)
COMMAND进程命令

实战经验: 我在调试一个物联网网关时,发现内存持续增长。用 ps aux --sort=-%mem 按内存排序,很快就找到了那个有内存泄漏的进程。

4.3.2 top —— 动态监控进程

top 是实时监控工具,相当于动态版的 ps。

top                    # 默认启动
top -u username        # 只看某个用户的进程
top -p 1234,5678       # 只看指定 PID

在 top 界面中,按 q 退出,按 k 可以杀掉进程,按 M 按内存排序,按 P 按CPU排序。

4.3.3 kill —— 终止进程

kill 不是“杀死”,而是“发送信号”。

kill -15 PID    # 优雅终止(默认)
kill -9 PID     # 强制杀死(SIGKILL)
kill -1 PID     # 重启进程(SIGHUP)

重要提醒: 能用 -15 就别用 -9。我曾经在项目里直接 kill -9 了一个数据库进程,结果数据损坏,恢复了一整天。先给进程一个“体面退场”的机会。

4.4 网络管理命令:ifconfig、ping、netstat

嵌入式设备离不开网络。这三个命令,基本能覆盖日常网络调试的 80% 场景。

4.4.1 ifconfig —— 查看和配置网络接口

ifconfig 是 interface configuration 的缩写。虽然新系统推荐用 ip 命令,但 ifconfig 依然广泛使用。

ifconfig                    # 查看所有网络接口
ifconfig eth0               # 查看指定接口
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up   # 配置IP并启用

输出中,inet addr 是IP地址,HWaddr 是MAC地址,RX/TX 是收发数据包统计。

4.4.2 ping —— 测试网络连通性

ping 用 ICMP 协议测试目标是否可达。我调试网络时,第一步永远是 ping。

ping 192.168.1.1            # 测试到网关的连通性
ping -c 4 8.8.8.8           # 只发4个包
ping -I eth0 192.168.1.100  # 指定从哪个接口发

我的习惯:先 ping 127.0.0.1(本机),确认协议栈正常;再 ping 网关,确认局域网通;最后 ping 外网,确认路由和DNS没问题。三步定位法,屡试不爽。

4.4.3 netstat —— 查看网络连接状态

netstat 是 network statistics 的缩写。它告诉你谁在连你的设备,你的设备在连谁。

netstat -tlnp     # 查看所有 TCP 监听端口
netstat -ulnp     # 查看所有 UDP 监听端口
netstat -anp      # 查看所有连接

常用字段:

字段含义
Proto协议(tcp/udp)
Local Address本地地址和端口
Foreign Address远端地址和端口
State连接状态(LISTEN、ESTABLISHED等)
PID/Program name进程ID和程序名

排查案例: 有一次设备端口被占用,服务起不来。我用 netstat -tlnp | grep 8080 一看,发现是另一个进程占着端口。kill 掉之后,服务正常启动。这种问题,netstat 一查一个准。

好了,这一讲的内容就到这里。权限、用户、进程、网络——这四个模块是嵌入式Linux开发的“基本功”。你想想看,设备跑起来之后,你总得知道谁在跑、跑得怎么样、能不能联网吧?这些命令就是你的眼睛和手。

下一讲,我们会进入更高级的主题:文件系统与存储管理。到时候再聊。