系统常用命令

下面是 Fedora Linux 系统中常用命令的分类整理(适用于日常使用、系统管理、包管理等场景),适合初学者和有一定经验的用户参考。

🗂️ 目录(你可以按需查阅):

  1. 系统信息与基本操作
  2. 文件与目录管理
  3. 用户与权限管理
  4. 软件包管理(dnf)
  5. 服务与系统管理(systemd)
  6. 网络相关命令
  7. 权限与SELinux相关
  8. 其他工具与快捷命令

✅ 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 网络管理工具
curlwget 获取网页数据
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 ...

✅ 总结:建议养成这些习惯

场景 建议
虚拟环境管理 使用 venvconda 管理隔离环境
项目管理 用 Git 版本控制,定期提交
数据同步 rsyncscp 或 Git LFS
写论文 使用 LaTeX + Zotero 管理参考文献
保持进程 tmux/screen + nohup 运行程序
自动化 Makefilebash 脚本 管理流程

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 等可作为额外特征;
  • 模型部署可用 ONNXTorchScript 实现跨平台推理。

完整的 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/imagesdata/masks 替换为你自己的遥感图像与海岸线掩膜数据,立即运行。若你使用 .tif 格式,可告诉我,我可替换为基于 rasterio 的数据读取逻辑。

是否需要我导出为 .ipynb 文件方便你下载?或者补充更复杂的功能,如多时相、光谱指数输入等?