fedora
系统常用命令
下面是 Fedora Linux 系统中常用命令的分类整理(适用于日常使用、系统管理、包管理等场景),适合初学者和有一定经验的用户参考。
🗂️ 目录(你可以按需查阅):
✅ 1. 系统信息与基本操作
| 命令 | 说明 |
|---|---|
uname -a |
查看内核信息 |
hostnamectl |
查看或设置主机名 |
uptime |
系统运行时间 |
free -h |
查看内存使用情况 |
df -h |
查看磁盘使用情况 |
top / htop |
查看实时进程信息 |
whoami |
当前用户名 |
id |
查看 UID、GID |
date |
查看/设置当前时间 |
timedatectl |
时间同步和时区管理 |
📁 2. 文件与目录管理
| 命令 | 说明 |
|---|---|
ls -al |
列出文件详细信息 |
cd /path |
进入目录 |
cp a.txt b.txt |
复制文件 |
mv a.txt b.txt |
移动/重命名文件 |
rm file / rm -rf dir |
删除文件/目录(危险) |
mkdir newdir |
创建目录 |
touch file.txt |
创建空文件 |
find / -name "file.txt" |
查找文件 |
locate file.txt |
快速查找(需安装 mlocate) |
👤 3. 用户与权限管理
| 命令 | 说明 |
|---|---|
sudo command |
以管理员权限执行命令 |
adduser username |
添加用户 |
passwd username |
修改用户密码 |
usermod -aG wheel user |
将用户加入管理员组 |
chmod 755 file |
修改权限 |
chown user:group file |
修改所有者 |
groups |
查看用户所属组 |
su - user |
切换用户 |
📦 4. 软件包管理(dnf)
Fedora 默认包管理器是 dnf:
| 命令 | 说明 |
|---|---|
sudo dnf update |
更新所有软件包 |
sudo dnf install package |
安装软件 |
sudo dnf remove package |
卸载软件 |
sudo dnf search keyword |
搜索包 |
sudo dnf info package |
查看软件包信息 |
sudo dnf clean all |
清理缓存 |
dnf list installed |
已安装软件列表 |
🔧 5. 服务与系统管理(systemd)
| 命令 | 说明 |
|---|---|
systemctl status |
查看所有服务状态 |
systemctl start service |
启动服务 |
systemctl stop service |
停止服务 |
systemctl restart service |
重启服务 |
systemctl enable service |
设置服务开机自启 |
systemctl disable service |
禁用开机自启 |
journalctl -xe |
查看系统日志 |
🌐 6. 网络相关命令
| 命令 | 说明 |
|---|---|
ip a |
查看 IP 地址 |
ping 8.8.8.8 |
测试连通性 |
nmcli |
网络管理工具 |
curl 或 wget |
获取网页数据 |
ss -tuln |
查看端口占用 |
dig / nslookup |
DNS 查询 |
firewall-cmd |
防火墙管理工具(使用 firewalld) |
🔐 7. 权限与 SELinux 相关
Fedora 默认启用 SELinux:
| 命令 | 说明 |
|---|---|
getenforce |
查看 SELinux 状态 |
setenforce 0 |
临时禁用 SELinux(不建议长期) |
semanage port -l |
查看 SELinux 端口策略(需安装 policycoreutils-python-utils) |
restorecon -Rv /path |
恢复默认 SELinux 上下文 |
🧰 8. 其他有用工具与快捷命令
| 命令 | 说明 |
|---|---|
man command |
查看命令手册 |
alias ll='ls -l' |
创建命令别名 |
history |
查看历史命令 |
tar -xvf file.tar |
解压 tar 包 |
zip/unzip / gzip/gunzip |
压缩/解压 |
reboot / poweroff |
重启/关机 |
dnf groupinstall "Development Tools" |
安装开发工具组 |
科研环境配置
主要面向以下用户:
- 做数据处理、建模、AI/ML、仿真模拟等工作
- 使用 Python、R、MATLAB、LaTeX、Jupyter 等工具
- 操作科研环境、远程服务器、包管理和性能调试
🧠 Fedora 科研用户常用命令清单
🛠️ 1. 环境初始化与工具安装
# 更新系统软件包
sudo dnf update -y
# 安装基础开发工具包(gcc、make、gdb 等)
sudo dnf groupinstall "Development Tools" -y
# 安装常用科学工具
sudo dnf install python3 python3-pip git wget curl vim htop -y
# 安装 Jupyter Notebook
pip3 install jupyterlab
🧪 2. Python / 科研库环境
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装科学库
pip install numpy scipy pandas matplotlib scikit-learn seaborn jupyter
# 安装 GPU/深度学习相关库(如 PyTorch)
pip install torch torchvision torchaudio
# 安装环境管理器 conda(如使用 Anaconda)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
📈 3. Jupyter Notebook / Lab 启动
# 启动 notebook
jupyter notebook --ip=0.0.0.0 --no-browser
# 启动 jupyter lab(推荐)
jupyter lab --ip=0.0.0.0 --no-browser
然后用浏览器访问 http://localhost:8888(或远程映射)。
📚 4. LaTeX 文档编译
# 安装 TeXLive
sudo dnf install texlive-scheme-full -y
# 编译 tex 文件
pdflatex thesis.tex
🧬 5. Git 版本控制命令(协作必备)
# 初始化项目
git init
git add .
git commit -m "Initial commit"
# 克隆远程仓库
git clone https://github.com/yourname/project.git
# 推送代码
git push origin main
🌐 6. 网络与代理(配合 Clash)
# 获取宿主 IP(如果用 WSL,可参考前述)
hostip=$(ip route | grep default | awk '{print $3}')
# 设置临时代理
export http_proxy="http://$hostip:7890"
export https_proxy="http://$hostip:7890"
# 设置 pip 代理
pip install xxx --proxy="http://$hostip:7890"
🧱 7. 远程服务器使用(科研常用)
# SSH 登录
ssh username@remote.server.edu.cn
# 使用远程 Jupyter,端口转发
ssh -L 8888:localhost:8888 username@server
# 使用 rsync 同步数据
rsync -avz ./data username@server:~/backup/
🧩 8. 性能调优 & 大型程序运行
# 查看内存/CPU 使用情况
htop
# 查看 GPU 使用(需安装)
watch -n1 nvidia-smi
# 后台运行程序
nohup python train.py > log.txt 2>&1 &
disown
# 使用 screen / tmux 保持会话不断
screen
tmux
🔬 9. 科研常用软件推荐(Fedora下可安装)
| 软件 | 功能 | 安装方式 |
|---|---|---|
| R + RStudio | 统计分析 | dnf install R + 官网下载 RStudio |
| Gnuplot | 绘图工具 | dnf install gnuplot |
| Octave | 替代 MATLAB | dnf install octave |
| Zotero | 文献管理 | 从 zotero.org 下载 |
| Typora / TeXstudio | Markdown/LaTeX 编辑 | dnf install texstudio 或 Flatpak |
📦 10. 软件安装方式汇总
# dnf 安装
sudo dnf install package
# flatpak 安装 GUI 软件
flatpak install flathub org.some.App
# pip 安装 python 库
pip install numpy matplotlib ...
✅ 总结:建议养成这些习惯
| 场景 | 建议 |
|---|---|
| 虚拟环境管理 | 使用 venv 或 conda 管理隔离环境 |
| 项目管理 | 用 Git 版本控制,定期提交 |
| 数据同步 | 用 rsync、scp 或 Git LFS |
| 写论文 | 使用 LaTeX + Zotero 管理参考文献 |
| 保持进程 | 用 tmux/screen + nohup 运行程序 |
| 自动化 | 写 Makefile 或 bash 脚本 管理流程 |
ML+RS+CL
遥感数据处理、深度学习建模、可视化与大规模数据管理等方面。
🧠 机器学习 + 遥感 + 海岸带科研:命令与工具指南(Fedora)
🧰 1. 基础科研环境配置
# 安装基本工具
sudo dnf install python3 python3-pip git wget curl vim htop gdal gdal-python -y
# 安装科学计算库
pip install numpy scipy pandas matplotlib scikit-learn seaborn
# 安装深度学习库
pip install torch torchvision torchaudio
pip install tensorflow keras
# 安装 Jupyter 环境
pip install jupyterlab
# 安装 OpenCV(图像处理)
pip install opencv-python
# 安装遥感与地理处理库
pip install rasterio geopandas shapely fiona pyproj scikit-image
# 安装 Xarray、Dask(用于大规模 NetCDF/遥感栅格数据)
pip install xarray dask netCDF4
# 安装 Huggingface + Transformers(卫星图像分类、语义分割)
pip install transformers datasets
🛰️ 2. 遥感与海岸带数据处理命令(栅格 & 矢量)
# 裁剪 GeoTIFF
gdalwarp -te xmin ymin xmax ymax input.tif output.tif
# 计算波段比值(NDVI 等)
gdal_calc.py -A band4.tif -B band3.tif --outfile=ndvi.tif --calc="(A-B)/(A+B)"
# 重采样
gdalwarp -tr 10 10 -r bilinear input.tif output.tif
# 投影转换
ogr2ogr -t_srs EPSG:4326 out.shp in.shp
# 查看 GeoTIFF 信息
gdalinfo image.tif
📦 3. 典型 Python 工具与用法(ML+遥感)
栅格数据读取与处理
import rasterio
with rasterio.open('coastline.tif') as src:
array = src.read(1) # 读取第一波段
profile = src.profile
向量数据(如海岸线 shapefile)
import geopandas as gpd
gdf = gpd.read_file("coastline.shp")
gdf.plot()
利用 Scikit-learn 训练分类器(SVM、RF)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_train, y_train)
深度学习建模(PyTorch 示例)
import torch.nn as nn
class CNN(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1),
nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding=1),
nn.ReLU(), nn.MaxPool2d(2)
)
def forward(self, x):
return self.net(x)
💻 4. 性能调试与大规模数据支持
# 查看 CPU/GPU 资源
htop # 多核调度
watch -n1 nvidia-smi # GPU 使用
# 分布式计算支持
pip install dask[complete]
🌐 5. 网络代理与数据下载(Clash 用户)
# 获取主机 IP
hostip=$(ip route | grep default | awk '{print $3}')
# 设置全局代理
export http_proxy="http://$hostip:7890"
export https_proxy="http://$hostip:7890"
# pip 设置代理
pip install torch --proxy="http://$hostip:7890"
📊 6. 可视化与文档输出
# Matplotlib / Seaborn / Cartopy 绘图
pip install seaborn cartopy contextily
# LaTeX 编译论文
sudo dnf install texlive-scheme-full -y
pdflatex paper.tex
# Markdown 或论文写作(Typora、TeXstudio)
flatpak install flathub io.typora.Typora
flatpak install flathub org.texstudio.TeXstudio
📚 7. 常用开源遥感平台/数据
| 名称 | 用法 |
|---|---|
| Sentinel Hub | 获取哨兵影像 |
| Google Earth Engine (GEE) | 在线遥感分析平台 |
| Copernicus Open Access Hub | 下载 Sentinel-1/2 |
| LandsatLook | 快速查看与下载 Landsat |
| OpenStreetMap | 下载海岸线、建筑、道路矢量数据 |
📁 8. 项目结构与管理建议(科研推荐)
project/
├── data/ # 原始数据
├── notebooks/ # Jupyter 实验
├── src/ # Python 脚本
├── models/ # 训练好的模型
├── outputs/ # 图像和图表
├── paper/ # LaTeX 文档
└── README.md
工作流程
海岸线提取工作流程
- 数据准备(遥感影像 + 标注)
- 预处理(裁剪、标准化)
- 模型训练(U-Net 语义分割)
- 推理与评估(IoU、可视化)
假设你使用的是Python + PyTorch环境,数据来自 Sentinel-2 或 Landsat,并具备海岸线标注(矢量或栅格形式)。
🧭 海岸线提取全流程(基于深度学习)
🗂️ 1. 数据组织结构建议
coastline_project/
├── data/
│ ├── images/ # 遥感影像(如 .tif 或 .png)
│ └── masks/ # 海岸线标注(0:海洋, 1:陆地)
├── src/
│ └── unet.py # 模型定义
├── train.py # 模型训练脚本
├── predict.py # 推理脚本
├── utils.py # 通用工具函数
└── visualize.py # 可视化与评估
📦 2. 安装依赖
pip install torch torchvision opencv-python numpy matplotlib tqdm albumentations rasterio scikit-learn
🧹 3. 数据预处理
# utils.py
import cv2
import numpy as np
from torchvision import transforms
def load_image_mask(image_path, mask_path, resize=(256, 256)):
img = cv2.imread(image_path)
img = cv2.resize(img, resize)
mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)
mask = cv2.resize(mask, resize)
return img / 255.0, (mask > 127).astype(np.float32)
🧠 4. U-Net 模型定义
# src/unet.py
import torch
import torch.nn as nn
class UNet(nn.Module):
def __init__(self):
super().__init__()
def conv_block(in_ch, out_ch):
return nn.Sequential(
nn.Conv2d(in_ch, out_ch, 3, padding=1),
nn.ReLU(), nn.Conv2d(out_ch, out_ch, 3, padding=1), nn.ReLU()
)
self.enc1 = conv_block(3, 64)
self.pool1 = nn.MaxPool2d(2)
self.enc2 = conv_block(64, 128)
self.pool2 = nn.MaxPool2d(2)
self.bottleneck = conv_block(128, 256)
self.up2 = nn.ConvTranspose2d(256, 128, 2, stride=2)
self.dec2 = conv_block(256, 128)
self.up1 = nn.ConvTranspose2d(128, 64, 2, stride=2)
self.dec1 = conv_block(128, 64)
self.out = nn.Conv2d(64, 1, 1)
def forward(self, x):
e1 = self.enc1(x)
e2 = self.enc2(self.pool1(e1))
b = self.bottleneck(self.pool2(e2))
d2 = self.dec2(torch.cat([self.up2(b), e2], dim=1))
d1 = self.dec1(torch.cat([self.up1(d2), e1], dim=1))
return torch.sigmoid(self.out(d1))
🏋️ 5. 模型训练
# train.py
import torch, os
from torch.utils.data import Dataset, DataLoader
from src.unet import UNet
from utils import load_image_mask
import glob
import numpy as np
class CoastDataset(Dataset):
def __init__(self, img_dir, mask_dir):
self.images = sorted(glob.glob(img_dir + '/*.png'))
self.masks = sorted(glob.glob(mask_dir + '/*.png'))
def __len__(self): return len(self.images)
def __getitem__(self, idx):
img, mask = load_image_mask(self.images[idx], self.masks[idx])
return torch.tensor(img).permute(2,0,1).float(), torch.tensor(mask).unsqueeze(0).float()
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = UNet().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
loss_fn = torch.nn.BCELoss()
dataset = CoastDataset('data/images', 'data/masks')
loader = DataLoader(dataset, batch_size=8, shuffle=True)
for epoch in range(10):
model.train()
for img, mask in loader:
img, mask = img.to(device), mask.to(device)
pred = model(img)
loss = loss_fn(pred, mask)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch+1} Loss: {loss.item():.4f}")
torch.save(model.state_dict(), 'coastline_model.pt')
🔍 6. 推理与可视化
# predict.py
from src.unet import UNet
from utils import load_image_mask
import matplotlib.pyplot as plt
model = UNet()
model.load_state_dict(torch.load('coastline_model.pt'))
model.eval()
img, _ = load_image_mask("data/images/test1.png", "data/masks/test1.png")
inp = torch.tensor(img).permute(2,0,1).unsqueeze(0).float()
with torch.no_grad():
out = model(inp).squeeze().numpy()
plt.subplot(1,3,1); plt.imshow(img); plt.title("Image")
plt.subplot(1,3,2); plt.imshow(out > 0.5); plt.title("Prediction")
plt.subplot(1,3,3); plt.imshow(_); plt.title("Ground Truth")
plt.show()
📈 7. 评估指标(IoU、F1)
# visualize.py
from sklearn.metrics import jaccard_score, f1_score
def evaluate(pred, mask):
pred = (pred > 0.5).flatten()
mask = mask.flatten()
iou = jaccard_score(mask, pred)
f1 = f1_score(mask, pred)
print(f"IoU: {iou:.3f}, F1: {f1:.3f}")
🧪 8. 进阶方向建议
| 应用 | 技术建议 |
|---|---|
| 多时相海岸线检测 | 使用 CNN-RNN 或 ConvLSTM 模型 |
| 大图处理 | 分块滑窗推理(sliding window) |
| 分类 + 分割 | 联合分类模型(如 DeeplabV3+) |
| 标注不足 | 使用半监督或伪标签方法 |
| 变化检测 | Siamese 网络、变化图(CDNet) |
✅ 最佳实践总结
- 使用高分辨率哨兵数据 + 多波段输入可提升精度;
- 可将矢量海岸线转栅格作为 mask 输入;
- 多尺度预测(U-Net++、HRNet)适用于复杂海岸结构;
- 遥感增强方法如 NDWI、MNDWI 等可作为额外特征;
- 模型部署可用
ONNX或TorchScript实现跨平台推理。
完整的 Jupyter Notebook 项目
涵盖以下模块:
- 📂 数据加载与预处理(支持
.png图像) - 🧠 U-Net 模型构建(标准结构)
- 🏋️ 模型训练(含损失打印)
- 🔍 推理与可视化(图片 + 分割结果 + 真值对比)
- 📈 评估(IoU、F1)
# coastline_unet_project.ipynb
# 🧪 Notebook: 海岸线提取项目(基于 U-Net)
## 🔧 1. 导入依赖
import os
import cv2
import glob
import torch
import numpy as np
import matplotlib.pyplot as plt
from torch.utils.data import Dataset, DataLoader
from sklearn.metrics import jaccard_score, f1_score
from torch import nn
## 🧱 2. 数据加载工具函数
def load_image_mask(image_path, mask_path, resize=(256, 256)):
img = cv2.imread(image_path)
img = cv2.resize(img, resize)
mask = cv2.imread(mask_path, cv2.IMREAD_GRAYSCALE)
mask = cv2.resize(mask, resize)
return img / 255.0, (mask > 127).astype(np.float32)
class CoastDataset(Dataset):
def __init__(self, img_dir, mask_dir):
self.images = sorted(glob.glob(img_dir + '/*.png'))
self.masks = sorted(glob.glob(mask_dir + '/*.png'))
def __len__(self): return len(self.images)
def __getitem__(self, idx):
img, mask = load_image_mask(self.images[idx], self.masks[idx])
return torch.tensor(img).permute(2,0,1).float(), torch.tensor(mask).unsqueeze(0).float()
## 🧠 3. U-Net 模型定义
class UNet(nn.Module):
def __init__(self):
super().__init__()
def conv_block(in_ch, out_ch):
return nn.Sequential(
nn.Conv2d(in_ch, out_ch, 3, padding=1),
nn.ReLU(), nn.Conv2d(out_ch, out_ch, 3, padding=1), nn.ReLU()
)
self.enc1 = conv_block(3, 64)
self.pool1 = nn.MaxPool2d(2)
self.enc2 = conv_block(64, 128)
self.pool2 = nn.MaxPool2d(2)
self.bottleneck = conv_block(128, 256)
self.up2 = nn.ConvTranspose2d(256, 128, 2, stride=2)
self.dec2 = conv_block(256, 128)
self.up1 = nn.ConvTranspose2d(128, 64, 2, stride=2)
self.dec1 = conv_block(128, 64)
self.out = nn.Conv2d(64, 1, 1)
def forward(self, x):
e1 = self.enc1(x)
e2 = self.enc2(self.pool1(e1))
b = self.bottleneck(self.pool2(e2))
d2 = self.dec2(torch.cat([self.up2(b), e2], dim=1))
d1 = self.dec1(torch.cat([self.up1(d2), e1], dim=1))
return torch.sigmoid(self.out(d1))
## 🏋️ 4. 模型训练
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = UNet().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
loss_fn = torch.nn.BCELoss()
dataset = CoastDataset('data/images', 'data/masks')
loader = DataLoader(dataset, batch_size=8, shuffle=True)
for epoch in range(5):
model.train()
for img, mask in loader:
img, mask = img.to(device), mask.to(device)
pred = model(img)
loss = loss_fn(pred, mask)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch+1} Loss: {loss.item():.4f}")
## 🔍 5. 推理与可视化
model.eval()
img, mask = load_image_mask("data/images/test1.png", "data/masks/test1.png")
inp = torch.tensor(img).permute(2,0,1).unsqueeze(0).float().to(device)
with torch.no_grad():
out = model(inp).squeeze().cpu().numpy()
plt.figure(figsize=(12,4))
plt.subplot(1,3,1); plt.imshow(img); plt.title("Image")
plt.subplot(1,3,2); plt.imshow(out > 0.5); plt.title("Prediction")
plt.subplot(1,3,3); plt.imshow(mask); plt.title("Ground Truth")
plt.show()
## 📈 6. 模型评估
def evaluate(pred, mask):
pred = (pred > 0.5).flatten()
mask = mask.flatten()
iou = jaccard_score(mask, pred)
f1 = f1_score(mask, pred)
print(f"IoU: {iou:.3f}, F1: {f1:.3f}")
evaluate(out, mask)
你可以将 data/images 和 data/masks 替换为你自己的遥感图像与海岸线掩膜数据,立即运行。若你使用 .tif 格式,可告诉我,我可替换为基于 rasterio 的数据读取逻辑。
是否需要我导出为 .ipynb 文件方便你下载?或者补充更复杂的功能,如多时相、光谱指数输入等?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰大海!








