大家好,今天的内容涵盖三个重要领域:Linux 系统信息与网络管理 、Linux 权限修改 ,以及 Python 中的协程与线程。系统信息查看是服务器运维的基础,权限管理是安全的核心,而并发编程则是提升程序性能的关键手段。本文将逐一讲解,并结合实用示例帮助理解。
一、Linux 系统信息查看
1.1 操作系统信息:uname
uname 用于查看系统内核和操作系统信息。
# 查看操作系统名称
uname
# Linux
# 查看详细系统信息
uname -a
# Linux hostname 5.15.0-91-generic #101-Ubuntu SMP ...
1.2 CPU 信息:lscpu
lscpu 显示 CPU 架构的详细信息。
lscpu
输出解读:
| 字段 | 说明 |
|---|---|
Architecture |
架构类型(x86_64、aarch64 等) |
CPU(s) |
逻辑 CPU 核心数 |
Thread(s) per core |
每核心线程数(超线程) |
Core(s) per socket |
每颗物理 CPU 的核心数 |
Model name |
CPU 型号 |
CPU MHz |
当前主频 |
1.3 内存信息:free -h
free 显示内存使用情况,-h 以人类可读格式显示。
free -h
输出解读:
| 字段 | 说明 |
|---|---|
total |
总内存 |
used |
已使用内存 |
free |
空闲内存 |
shared |
共享内存 |
buff/cache |
缓冲区/缓存占用 |
available |
可用内存 |
1.4 磁盘信息:df -h
df(Disk Free)显示磁盘分区使用情况,-h 以人类可读格式显示。
df -h
输出解读:
| 字段 | 说明 |
|---|---|
Filesystem |
文件系统 |
Size |
总大小 |
Used |
已使用 |
Avail |
可用 |
Use% |
使用百分比 |
Mounted on |
挂载点 |
二、网络信息查看与测试
2.1 查看 IP 地址:ip address / ifconfig
# 查看所有网络接口的 IP 地址(新版命令)
ip address
# 简写
ip a
# 查看指定网卡
ip addr show eth0
# 旧版命令(可能需要安装 net-tools)
ifconfig
2.2 测试网络连通性:ping
ping 用于测试与目标主机的网络连通性。
# 测试与百度的连通性
ping baidu.com
# 指定发送次数
ping -c 4 baidu.com
# 指定间隔时间(秒)
ping -i 2 baidu.com
2.3 查看网络端口与连接状态:netstat / ss
# 查看所有监听端口(新版推荐)
ss -tuln
# 查看所有监听端口(旧版)
netstat -tuln
# 查看所有 TCP 连接
ss -tan
# 查看所有 UDP 连接
ss -uan
| 选项 | 说明 |
|---|---|
-t |
TCP 端口 |
-u |
UDP 端口 |
-l |
仅显示监听状态 |
-n |
显示数字地址和端口(不解析域名) |
-a |
显示所有连接 |
2.4 文件下载:wget
wget 是一个强大的命令行下载工具。
# 基本下载
wget https://example.com/file.zip
2.5 HTTP 请求工具:curl
curl 是一个功能强大的 HTTP 请求工具,常用于 API 测试。
# GET 请求
curl https://api.github.com/users/octocat
# 下载文件
curl -O https://example.com/file.zip
三、Linux 权限管理
3.1 权限的基本概念
Linux 中每个文件/目录都有三组权限:
| 权限位 | 说明 |
|---|---|
r |
读(read) |
w |
写(write) |
x |
执行(execute) |
三组权限分别对应:
| 角色 | 说明 |
|---|---|
u |
文件所有者(user) |
g |
用户组(group) |
o |
其他用户(other) |
ls -l file.txt
# -rw-r--r-- 1 user group 1024 Aug 19 10:00 file.txt
# 第一个字符:- 文件,d 目录
# 接着三位:所有者权限(rw-)
# 接着三位:组权限(r--)
# 接着三位:其他用户权限(r--)
3.2 修改权限:chmod
chmod(Change Mode)用于修改文件或目录的权限。
数字方式:
| 数字 | 权限 |
|---|---|
| 4 | 读(r) |
| 2 | 写(w) |
| 1 | 执行(x) |
# 所有者:读写执行(4+2+1=7)
# 组:读执行(4+1=5)
# 其他:读(4)
chmod 754 file.txt
# 所有者:读写(6),组:读(4),其他:读(4)
chmod 644 file.txt
# 所有用户:读写执行(777)
chmod 777 file.txt
符号方式:
# 为所有者添加执行权限
chmod u+x file.sh
# 为组和其他用户移除写权限
chmod go-w file.txt
# 为所有用户添加读权限
chmod a+r file.txt
# 递归修改目录权限
chmod -R 755 myfolder/
四、Python 中的协程
4.1 什么是协程
协程(Coroutine)是一种用户态的轻量级线程 ,由程序自身控制调度,不需要操作系统参与上下文切换。协程适合 I/O 密集型 任务,如网络请求、文件读写、数据库操作等。
协程的特点:
| 特点 | 说明 |
|---|---|
| 轻量级 | 一个线程可运行数万个协程 |
| 非抢占式 | 协程主动让出控制权(await) |
| 单线程 | 无需考虑线程安全问题 |
| 高效 I/O | 等待时切换执行其他任务 |
4.2 基础语法
python
import asyncio
# 定义协程
async def hello():
print("开始")
await asyncio.sleep(1) # 模拟 I/O 操作
print("结束")
# 运行协程
asyncio.run(hello())
4.3 并发执行多个协程
python
import asyncio
import time
async def task(name: str, delay: int):
print(f"任务 {name} 开始")
await asyncio.sleep(delay)
print(f"任务 {name} 完成")
return f"{name} 的结果"
async def main():
start = time.time()
# 并发执行多个协程
results = await asyncio.gather(
task("A", 3),
task("B", 2),
task("C", 1)
)
print(f"结果: {results}")
print(f"总耗时: {time.time() - start:.2f}秒")
asyncio.run(main())
# 输出:总耗时约 3 秒(而不是 3+2+1=6 秒)
五、Python 中的线程
5.1 什么是线程
线程是操作系统调度的最小单位,属于系统级并发 。Python 的线程适用于 I/O 密集型 任务,但由于 GIL(全局解释器锁)的存在,不适合 CPU 密集型 任务。
python
import threading
import time
def worker(name: str, delay: int):
print(f"线程 {name} 开始")
time.sleep(delay)
print(f"线程 {name} 完成")
# 创建并启动线程
t1 = threading.Thread(target=worker, args=("A", 2))
t2 = threading.Thread(target=worker, args=("B", 3))
t1.start()
t2.start()
# 等待线程完成
t1.join()
t2.join()
print("所有线程完成")
5.2 线程安全与锁
多线程访问共享资源时,需要使用锁避免数据竞争。
python
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
for _ in range(100000):
with lock: # 加锁
counter += 1
threads = [threading.Thread(target=increment) for _ in range(10)]
for t in threads:
t.start()
for t in threads:
t.join()
print(f"计数器: {counter}") # 1000000
六、协程 vs 线程
| 对比项 | 协程 | 线程 |
|---|---|---|
| 调度方式 | 用户态(程序自己控制) | 内核态(操作系统调度) |
| 切换开销 | 极小(微秒级) | 较大(毫秒级) |
| 数量上限 | 数万甚至数十万 | 通常数百到数千 |
| 适用场景 | I/O 密集型、高并发网络 | I/O 密集型、阻塞操作 |
| CPU 密集型 | 不适合 | 不适合(受 GIL 限制) |
| 语法复杂度 | async/await |
threading |
选择建议:
# 网络请求、Web API → 协程
# 文件 I/O、数据库操作 → 协程或线程
七、总结
| 分类 | 核心命令/概念 |
|---|---|
| 系统信息 | uname、lscpu、free -h、df -h |
| 网络工具 | ip address、ping、ss、netstat、wget、curl |
| 权限管理 | chmod、chown、chgrp |
| Python 协程 | async、await、asyncio.gather()、asyncio.run() |
| Python 线程 | threading、ThreadPoolExecutor、Lock |
| 并发选择 | I/O 密集型用协程/线程,CPU 密集型用多进程 |
系统信息查看和权限管理是 Linux 运维的基础技能,Python 并发编程则是提升程序性能的核心手段。协程轻量高效,适合高并发网络请求;线程适合阻塞型 I/O 操作。根据场景选择合适的并发方式,可以显著提升程序的执行效率。
如果觉得这篇内容对你有帮助,欢迎收藏备用。