本文最后更新于 2026-09-07T11:02:57+08:00
Linux 使用指南
面向测绘工程 / 大气科学(WRF 数值模拟)方向研究生 系统平台:Ubuntu(20.04 / 22.04 / 24.04) 说明:本文所有命令均为真实可用的标准命令,涵盖基础指令、软件安装、系统管理、并行计算、科学计算(netCDF/HDF5)、WRF 实战以及求职应试高频考点。命令请结合实际环境核对参数后再执行。
目录
第一部分 基础篇
Linux 概述与文件系统
命令行基础与 Shell
文件与目录操作
文本查看与处理
文件查找
文件压缩与归档
用户与权限管理
环境变量与 Shell 配置
网络与远程连接
第二部分 系统管理与软件安装
进程管理与系统监控
系统信息与硬件
磁盘与文件系统
服务管理与定时任务
软件安装(apt / 源码 / conda / pip)
第三部分 文本处理与脚本编程
grep / sed / awk 与正则表达式
Vim 编辑器
Shell 脚本编程
第四部分 并行计算与科学计算
高性能计算基础
OpenMP 共享内存并行
MPI 分布式并行
SLURM 作业调度系统
环境模块 module
科学计算库与数据工具
WRF 模型实战
第五部分 求职与应试篇
第一部分 基础篇 1. Linux 概述与文件系统 1.1 什么是 Linux Linux 是一款开源的类 Unix 操作系统内核(Kernel),1991 年由 Linus Torvalds 发布。通常所说的”Linux 系统”是”内核 + GNU 工具集 + 发行版”的组合。常见发行版:
Debian 系:Ubuntu、Debian、Linux Mint —— 使用 apt 包管理
RedHat 系:CentOS、RHEL、Fedora —— 使用 yum/dnf 包管理
SUSE 系:openSUSE、SLES —— 使用 zypper
Arch 系:Arch Linux、Manjaro —— 使用 pacman
为什么科研(WRF)要用 Linux :
免费开源,数值模式(WRF、WRF-Chem、CMAQ)官方支持 Linux
强大的 Shell 脚本能力,便于批量处理与自动循环
适合高性能计算(HPC)集群,多节点并行
稳定、资源占用低、权限控制清晰
大量科研工具(NCL、CDO、netCDF 工具、Fortran 编译器)原生支持
1.2 Shell 与终端
终端(Terminal) :人机交互的窗口程序
Shell :解释执行命令的程序,常见 Bash(Ubuntu 默认)、Zsh、Sh、Tcsh
查看当前 Shell:echo $SHELL
查看系统默认 Shell:cat /etc/passwd | grep $(whoami)
1.3 文件系统层次标准(FHS) Linux 一切皆文件。常用目录:
目录
用途
/
根目录,所有文件的起点
/home
普通用户家目录(如 /home/zhangsan)
/root
超级用户(root)家目录
/etc
系统配置文件
/bin、/sbin
系统可执行命令(sbin 多为管理员命令)
/usr
系统软件与库(/usr/local 常为手动安装软件目录)
/var
可变数据,如日志 /var/log、缓存 /var/cache
/tmp
临时文件,重启可能清空
/opt
第三方大型软件
/dev
设备文件(硬盘、终端等)
/proc
虚拟文件系统,内存中的系统与进程信息
/sys
内核与硬件信息虚拟文件系统
/mnt、/media
挂载点(U 盘、光盘等)
路径概念 :
绝对路径:从根目录开始,如 /home/user/test.nc
相对路径:相对当前目录,如 ./test.nc、../data/
. 当前目录;.. 上一级目录;~ 当前用户家目录;- 上一次所在目录
使用 pwd 查看当前绝对路径
2. 命令行基础与 Shell 2.1 命令格式
ls -la /home:ls 是命令,-l、-a 是选项,/home 是参数
短选项合并:ls -la 等价于 ls -l -a
长选项:ls --all --long
2.2 常用快捷键(Bash)
快捷键
作用
Tab
命令/文件名/路径自动补全
Ctrl + C
终止当前前台进程
Ctrl + Z
挂起当前进程(可用 fg 恢复)
Ctrl + D
退出当前 Shell(EOF)
Ctrl + L
清屏(等价于 clear)
Ctrl + A / Ctrl + E
光标跳到行首 / 行尾
Ctrl + U / Ctrl + K
删除光标前 / 光标后内容
Ctrl + R
反向搜索历史命令
↑ / ↓
浏览历史命令
Ctrl + W
删除光标前一个单词
2.3 获取帮助
man 命令:查看命令手册,如 man ls(q 退出,/ 搜索,n 下一个匹配)
命令 --help 或 命令 -h:快速查看用法
info 命令:更详细的文档
whatis 命令:一句话说明命令用途
apropos 关键词:按功能关键词搜索命令
1 2 3 4 man ls ls --help whatis grep apropos compress
2.4 重定向与管道 1 2 3 4 5 6 7 8 9 10 11 12 command > file command >> file command < file command 2> err.log command > out.log 2>&1 command > /dev/null ps aux | grep wrfls | wc -lcat file | head -20
注意 :2>&1 表示把文件描述符 2(stderr)重定向到 1(stdout)当前指向的位置,必须写成 2>&1 而不是 2>1。
3. 文件与目录操作 3.1 目录操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 pwd cd /home/user cd ~ 或 cd cd - cd .. mkdir dir1 mkdir -p a/b/c rmdir dir ls ls -l ls -a ls -lh ls -lt ls -lR
3.2 文件操作 1 2 3 4 5 6 7 8 9 touch file.txt cp file1 file2 cp -r dir1 dir2 cp -i file1 file2 mv file1 file2 rm file rm -r dir rm -f file rm -rf dir
⚠️ rm -rf 具有破坏性,执行前务必确认路径正确,尤其是 rm -rf / 或 rm -rf ~ 会造成灾难性后果。删除重要数据前建议先备份。
3.3 链接(ln)
软链接(符号链接) :类似 Windows 快捷方式,可跨文件系统,可指向目录;源文件删除后失效
硬链接 :多个名字指向同一 inode,不可跨文件系统,不可指向目录;删除其中一个不影响另一个
1 2 3 4 ln -s /data/file.txt link.txt ln /data/file.txt hard.txt ls -li readlink link.txt
3.4 文件类型与元信息 1 2 file test.nc stat test.nc
4. 文本查看与处理 4.1 查看文件 1 2 3 4 5 6 7 8 9 cat file cat -n file less file more file head -20 file tail -20 file tail -f file tail -n 50 -f log.txtnl file
4.2 文本统计与处理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 wc file wc -l file sort file sort -n file sort -r file sort -k2 file uniq sort file | uniq -c cut -d: -f1 /etc/passwd cut -c1-10 file paste a.txt b.txt tr 'a-z' 'A-Z' < file diff file1 file2 cmp file1 file2
4.3 编码与十六进制 1 2 3 4 file -i file.txt iconv -f gbk -t utf8 old.txt > new.txt od -c file xxd file
5. 文件查找 5.1 find(最强大、最常用) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 find . -name "*.nc" find /data -name "wrfout*" find . -type f find . -type d find . -size +100M find . -size -1k find . -mtime -7 find . -mtime +30 find . -name "*.log" -exec rm {} \; find . -name "*.tmp" -delete find . -maxdepth 2 -name "*.nc" find . -perm 755 find . -user username find . -newer ref.txt
5.2 其他查找命令 1 2 3 4 locate wrfout which mpirun whereis gcc type ls
5.3 在文件内容中查找 1 2 3 4 5 6 7 8 grep "keyword" file grep -r "keyword" /path/ grep -n "error" log.txt grep -i "warning" file grep -v "^#" config grep -c "error" log grep -l "keyword" *.txt grep -A2 -B2 "error" log
6. 文件压缩与归档 6.1 tar(最常用) 1 2 3 4 5 6 7 8 9 10 11 tar -czvf archive.tar.gz dir / tar -cjvf archive.tar.bz2 dir / tar -cJvf archive.tar.xz dir / tar -czvf archive.tar.gz --exclude="*.log" dir / tar -xzvf archive.tar.gz tar -xzvf archive.tar.gz -C /target tar -tzvf archive.tar.gz tar -xvf archive.tar
6.2 单独压缩工具 1 2 3 4 5 6 7 8 gzip file gzip -d file.gz gunzip file.gz bzip2 file xz file zip -r archive.zip dir / unzip archive.zip unzip -l archive.zip
6.3 直接查看压缩文件内容 1 2 3 zcat file.gz zgrep "error" file.gz zless file.gz
科研中最常见的组合是 tar -xzvf 解压源码包,以及 tar -czvf 打包结果数据。建议统一使用 .tar.gz。
7. 用户与权限管理 7.1 用户与用户组概念
用户信息:/etc/passwd;组信息:/etc/group;密码(加密):/etc/shadow
每个用户有 UID(用户 ID),root 的 UID 为 0
每个文件有属主(owner)、属组(group)、其他用户(others)
7.2 查看用户与身份 1 2 3 4 5 6 7 whoami id id username who w last groups
7.3 用户管理(需 root 或 sudo) 1 2 3 4 5 6 7 sudo useradd -m -s /bin/bash zhangsan sudo passwd zhangsan sudo userdel -r zhangsan sudo usermod -aG sudo zhangsan sudo usermod -s /bin/zsh zhangsan sudo groupadd team1 sudo groupdel team1
7.4 权限基础 ls -l 输出中权限字段共 10 位,例如 -rwxr-xr--:
第 1 位:文件类型(- 普通文件、d 目录、l 链接、b/c 设备)
第 2-4 位:属主权限(r 读、w 写、x 执行)
第 5-7 位:属组权限
第 8-10 位:其他用户权限
权限数值(二进制加权):读 r=4,写 w=2,执行 x=1
数值
含义
7
rwx(读+写+执行)
6
rw-(读+写)
5
r-x(读+执行)
4
r–(只读)
0
—(无权限)
7.5 chmod(修改权限) 1 2 3 4 5 6 7 chmod 755 script.sh chmod 644 file.txt chmod 600 id_rsa chmod +x script.sh chmod u+x file chmod g-w file chmod -R 755 dir /
7.6 chown / chgrp(修改属主属组) 1 2 3 4 sudo chown user file sudo chown user:group file sudo chown -R user:group dir / sudo chgrp group file
7.7 特殊权限
setuid (4xxx) :执行时以文件属主身份运行(如 /usr/bin/passwd)
setgid (2xxx) :目录内新建文件继承目录属组
sticky (1xxx) :目录内只能删除自己创建的文件(如 /tmp,权限为 drwxrwxrwt)
1 2 chmod u+s /path/file chmod 1777 /tmp
7.8 默认权限 umask
7.9 su 与 sudo 1 2 3 4 5 su - su - username sudo command sudo -i sudo -u user command
sudo 权限由 /etc/sudoers 控制(用 visudo 编辑)。sudo 执行需要密码,密码有缓存时间(默认 15 分钟)。
8. 环境变量与 Shell 配置 8.1 环境变量 1 2 3 4 5 6 echo $PATH printenv env export MYVAR=value MYVAR=value unset MYVAR
常用环境变量:
PATH:可执行文件搜索路径(冒号分隔)
HOME:当前用户家目录
SHELL:当前 Shell
LANG:语言环境(如 zh_CN.UTF-8)
LD_LIBRARY_PATH:动态库搜索路径(源码编译软件常需设置)
NETCDF、HDF5、MPICH:科学计算软件自定义变量(WRF 安装关键)
8.2 修改 PATH 1 2 3 4 5 6 export PATH=$PATH :/opt/software/binecho 'export PATH=$PATH:/opt/software/bin' >> ~/.bashrcsource ~/.bashrc
8.3 Shell 配置文件加载顺序 登录式 Shell(ssh 登录):/etc/profile → ~/.profile(或 ~/.bash_profile)→ ~/.bashrc 非登录式 Shell(新终端):~/.bashrc
8.4 常用配置示例(~/.bashrc) 1 2 3 4 5 6 7 8 9 10 11 12 13 alias ll='ls -alF' alias la='ls -A' alias rm ='rm -i' alias q='exit' export PS1='\u@\h:\w\$ ' export DIR=/home/user/Build_WRFexport PATH=$DIR /netcdf/bin:$PATH export NETCDF=$DIR /netcdf
8.5 命令历史 1 2 3 4 5 history history 20 !ls !! !$
8.6 通配符 1 2 3 4 5 ls *.nc ls file?.txt ls [abc]*.txt ls file[1-3].txt ls {1..10}.txt
8.7 命令替换与变量替换 1 2 3 4 echo "Today is $(date) " echo "Today is `date`" echo $HOME echo ${HOME}
9. 网络与远程连接 9.1 网络信息查看 1 2 3 4 5 6 7 8 9 10 11 ip addr ip route hostname hostname -I ss -tulnp netstat -tulnp ping www.baidu.com traceroute host nslookup domain dig domain curl -I https://xxx
9.2 SSH 远程登录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ssh user@192.168.1.100 ssh -p 2222 user@host ssh -X user@host ssh-keygen -t ed25519 ssh-copy-id user@host ssh user@host Host cluster HostName 192.168.1.100 User zhangsan Port 22
9.3 文件传输 1 2 3 4 5 6 7 8 9 10 11 12 13 14 scp file.txt user@host:/home/user/ scp -r dir user@host:/home/user/ scp user@host:/path/file.txt ./ rsync -avz /local/dir/ user@host:/remote/dir/ rsync -avz --delete src/ dst/ rsync -avz --progress data/ bak/ rsync -e 'ssh -p 2222' src user@host:dst sftp user@host
9.4 下载工具 1 2 3 4 5 wget -c https://url/file.tar.gz wget -O name.tar.gz https://url curl -O https://url/file.tar.gz curl -o file https://url curl -X POST -d "data" http://...
9.5 长时间任务后台运行 1 2 3 4 5 6 7 8 9 10 11 12 nohup command > log.txt 2>&1 & nohup python run.py > out.log 2>&1 & tmux new -s work tmux detach tmux attach -t work tmux ls screen -S work screen -r work
在远程服务器跑 WRF 等长时间任务,务必使用 nohup 或 tmux/screen,避免 SSH 断开导致任务中断。
第二部分 系统管理与软件安装 10. 进程管理与系统监控 10.1 查看进程 1 2 3 4 5 6 ps aux ps -ef ps -ef | grep wrf pstree pidof sshd pgrep -l python
ps aux 关键列:USER(用户)、PID(进程号)、%CPU、%MEM、VSZ/RSS(内存)、STAT(状态)、START、TIME、COMMAND
STAT 常见状态:R 运行、S 睡眠、D 不可中断睡眠、Z 僵尸进程、T 停止、< 高优先级、N 低优先级
10.2 动态监控 1 2 3 4 5 6 7 top htop free -h uptime watch -n 2 free -h vmstat 1 5 iostat
10.3 终止进程 1 2 3 4 5 kill PID kill -9 PID kill -15 PID pkill python killall mpirun
kill -9 是最后手段,可能导致数据丢失;先尝试 kill(TERM),无效再 -9。
10.4 后台任务管理 1 2 3 4 5 command & jobs fg %1 bg %1 Ctrl+Z
10.5 进程优先级 1 2 nice -n -5 command renice -n -5 PID
10.6 文件占用排查 1 2 3 lsof -i :8080 lsof file.txt lsof | grep deleted
10.7 日志与内核信息 1 2 3 4 dmesg dmesg | tail -50 journalctl journalctl -u sshd -f
11. 系统信息与硬件 1 2 3 4 5 6 7 8 9 10 11 12 13 uname -a cat /etc/os-release cat /etc/lsb-release lscpu free -h lsblk df -h du -sh /path hostnamectl uptime nproc lsusb lspci
12. 磁盘与文件系统 12.1 磁盘使用情况 1 2 3 4 5 df -h df -i du -sh dir / du -sh * du -h --max-depth=1 /home
排查”磁盘满了”的标准流程 :
1 2 3 4 df -h du -sh /* 2>/dev/null du -h --max-depth=1 /home/user 2>/dev/null | sort -hr | head find / -xdev -size +1G -type f 2>/dev/null
12.2 挂载与卸载 1 2 3 4 5 mount mount /dev/sdb1 /mnt/data umount /mnt/data lsblk -f blkid
12.3 分区与格式化(了解,慎用) 1 2 3 sudo fdisk -l sudo fdisk /dev/sdb sudo mkfs.ext4 /dev/sdb1
12.4 /etc/fstab(开机自动挂载) 格式:设备 UUID 挂载点 文件系统类型 选项 备份 检查顺序
1 2 UUID=xxxx-xxxx /data ext4 defaults 0 2
修改后 sudo mount -a 生效(不要随意改动,写错可能导致无法开机)。
13. 服务管理与定时任务 13.1 systemd(现代 Ubuntu 服务管理) 1 2 3 4 5 6 7 8 9 systemctl status sshd systemctl start ssh systemctl stop ssh systemctl restart ssh systemctl enable ssh systemctl disable ssh systemctl list-units --type =service --state=running systemctl daemon-reload systemd-analyze
注意:Ubuntu 上 SSH 服务的单元名为 ssh(不是 sshd),但 RHEL/CentOS 为 sshd。
13.2 journalctl 查看日志 1 2 3 journalctl -u ssh -n 50 journalctl -u ssh -f journalctl --since "1 hour ago"
13.3 crontab 定时任务 1 2 3 crontab -l crontab -e crontab -r
cron 格式:分 时 日 月 周 命令
1 2 3 4 5 6 7 8 9 10 * * * * * command 0 2 * * * /home/user/backup.sh 5 * * * * command 0 8 * * 1 command */10 * * * * command
示例:每天凌晨 3 点备份数据
1 0 3 * * * tar -czf /backup/data_$(date +\%Y\%m\%d).tar.gz /data
注意:cron 命令中 % 需要转义为 \%。
13.4 at 一次性任务 1 2 3 at now + 1 hour at 22:00 atq
14. 软件安装 14.1 apt(Debian/Ubuntu 包管理器) 1 2 3 4 5 6 7 8 9 10 11 sudo apt update sudo apt upgrade sudo apt install <包名> sudo apt install vim htop git sudo apt remove <包名> sudo apt purge <包名> sudo apt autoremove sudo apt search <关键词> apt show <包名> apt list --installed sudo apt clean
换国内源(加速) :编辑 /etc/apt/sources.list(Ubuntu 22.04 及以后可能是 .sources 文件),将 archive.ubuntu.com 替换为清华/阿里/中科大镜像,然后 sudo apt update。
14.2 dpkg(底层包工具) 1 2 3 4 dpkg -l dpkg -L <包名> dpkg -i package.deb dpkg -r <包名>
14.3 源码编译安装(科研软件最常见方式) 标准三步流程:
1 2 3 ./configure --prefix=/opt/mylib make make install
常用编译参数与工具:
1 2 3 4 5 6 ./configure --help ./configure --prefix=$HOME /install make -j4 make check make install make clean
源码编译需安装编译工具链 :
1 2 sudo apt install build-essential sudo apt install gfortran
常见编译错误排查思路 :
缺少头文件 → 安装 *-dev 包
找不到库 → 检查 LD_LIBRARY_PATH、LDFLAGS
找不到编译器 → 检查 PATH 与 CC/FC 环境变量
14.4 conda / Miniconda(Python 科学环境管理) 安装 Miniconda:
1 2 3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh
常用命令:
1 2 3 4 5 6 7 8 9 10 conda create -n myenv python=3.10 conda activate myenv conda deactivate conda env list conda install numpy pandas conda search numpy conda list conda remove -n myenv --all conda env export > env.yml conda env create -f env.yml
加速:配置国内 conda 源(清华镜像)
1 2 3 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free conda config --set show_channel_urls yes
科研建议:用 conda 创建独立环境管理 WRF 后处理工具(wrf-python、xarray、cartopy 等),避免污染系统 Python。
14.5 pip(Python 包管理) 1 2 3 4 5 6 7 pip install numpy pip install -r requirements.txt pip list pip show numpy pip uninstall numpy pip freeze > requirements.txt pip install --upgrade pip
配置国内 pip 源(清华镜像) :
1 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
venv 虚拟环境(系统自带 Python 用) :
1 2 3 python3 -m venv myenvsource myenv/bin/activate deactivate
14.6 其他安装方式 1 2 sudo snap install <软件> sudo apt install flatpak
第三部分 文本处理与脚本编程 15. grep / sed / awk 与正则表达式 15.1 正则表达式基础
符号
含义
示例
.
任意单个字符
a.c 匹配 abc、axc
*
前一个字符重复 0 次或多次
ab*c 匹配 ac、abc、abbc
+
前一个字符重复 1 次或多次(需 -E)
ab+c
?
前一个字符出现 0 或 1 次(需 -E)
ab?c
[]
字符集合
[abc]、[0-9]、[a-z]
[^]
排除集合
[^0-9] 非数字
^
行首
^# 注释行
$
行尾
end$
()
分组
(ab)+
|
或(需 -E)
cat|dog
{}
重复次数(需 -E)
a{2,4}
\b
单词边界
\bwrf\b
\d、\w、\s
数字、单词字符、空白
15.2 grep(文本搜索) 1 2 3 4 5 6 7 8 9 grep "error" file grep -E "error|fail" log grep -E "^[0-9]+" file grep -P "\d+" file grep -v "^#" config grep -n "wrf" namelist.input grep -r "SUCCESS" . grep -i "warning" log grep -w "file" txt
实用场景 :
1 2 3 4 5 6 grep "SUCCESS" rsl.out.0000 grep -c "ERROR" rsl.error.0000 grep -rl "error" /home/user/logs/
15.3 sed(流编辑器) 基本格式:sed [选项] '脚本' 文件
1 2 3 4 5 6 7 8 9 10 11 sed 's/old/new/' file sed 's/old/new/g' file sed -i 's/foo/bar/g' file sed -n '5,10p' file sed -n '1p' file sed '/^$/d' file sed '/pattern/d' file sed -i '/^#/d' config sed 's/^/>> /' file sed 's/$/<< /' file sed 's/pattern/& &/' file
实用场景 :
1 2 3 4 sed -i.bak 's/old/new/g' file sed -i 's|/home/old|/home/new|g' namelist.wps
15.4 awk(文本处理神器) 基本格式:awk [选项] '模式 {动作}' 文件
1 2 3 4 5 6 7 8 9 10 11 awk '{print $1}' file awk '{print $1, $3}' file awk -F: '{print $1}' /etc/passwd awk '{print NR, $0}' file awk '{sum += $1} END {print sum}' data awk '$3 > 100 {print $1}' data awk 'NR>=2 && NR<=5 {print}' file awk '{printf "%s %.2f\n", $1, $2}' file awk 'BEGIN {print "start"} {print} END {print "end"}' file awk '/pattern/ {print}' file awk '{a[$1]++} END {for (k in a) print k, a[k]}' file
awk 内置变量:NR 当前行号、NF 当前行字段数、$0 整行、$1~`$n 各字段、FS 字段分隔符、OFS` 输出分隔符
实用场景 :
1 2 3 4 5 6 awk '{print $1, $2, $7}' obs.logls -l *.nc | awk '{sum += $5} END {print sum/1024/1024 " MB"}' ps aux | awk '{print $8}' | sort | uniq -c
16. Vim 编辑器 16.1 三种模式
普通模式 :默认模式,用于移动与操作
插入模式 :输入文字(按 i 进入)
命令模式 :输入命令(按 : 进入)
1 2 vim file.txt vim +20 file.txt
16.2 基本操作速查
操作
按键
进入插入模式
i(光标前)、a(光标后)、o(下一行新建)、O(上一行新建)
退出插入模式
Esc
保存
:w
退出
:q;强制退出 :q!
保存并退出
:wq 或 ZZ
移动光标
h j k l(左 下 上 右)
跳行首/行尾
0 / $
跳文件首/尾
gg / G
跳第 N 行
:N 或 N G
删除当前字符
x
删除当前行
dd
删除 N 行
N dd
复制当前行
yy
粘贴
p(光标后)、P(光标前)
撤销
u;重做 Ctrl+R
查找
/keyword(n 下一个、N 上一个)
替换
:s/old/new/g(当前行);:%s/old/new/g(全文)
显示行号
:set nu;取消 :set nonu
分屏
:sp 水平、:vsp 垂直,Ctrl+W 切换
保存为其他文件
:w newfile
打开多个文件
vim f1 f2,:n 下一个,:prev 上一个
16.3 vim 个性化配置(~/.vimrc) 1 2 3 4 5 6 7 8 set nu set tabstop=4 set shiftwidth =4 set expandtab set hlsearch set incsearch syntax on set mouse=a
修改 WRF 的 namelist.wps、namelist.input 等配置文件,vim 是最常用工具。
17. Shell 脚本编程 17.1 脚本基础 1 2 3 #!/bin/bash echo "Hello World"
执行方式:
1 2 3 bash script.sh ./script.sh source script.sh
17.2 变量 1 2 3 4 5 6 7 8 9 name="wrf" echo $name echo "${name} _run" readonly pi=3.14 unset name echo "脚本名: $0 , 第一个参数: $1 , 参数个数: $# "
17.3 数组 1 2 3 4 5 arr=(a b c)echo ${arr[0]} echo ${arr[@]} echo ${#arr[@]} for i in "${arr[@]} " ; do echo $i ; done
17.4 运算 1 2 3 4 echo $((3 + 5 )) echo $((10 / 3 ))echo "scale=2; 10/3" | bc
17.5 条件判断 1 2 3 4 5 6 7 if [ -f file ]; then echo "文件存在" elif [ -d dir ]; then echo "是目录" else echo "不存在" fi
常用测试:
1 2 3 4 5 6 7 8 9 10 [ -f file ] [ -d dir ] [ -e path ] [ -z "$var " ] [ -n "$var " ] [ "$a " = "$b " ] [ "$a " != "$b " ] [ "$n " -gt 10 ] [ -x file ] [ -r file ]
17.6 循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 for i in {1..10}; do echo $i done for f in *.nc; do echo "处理 $f " done i=1while [ $i -le 10 ]; do echo $i i=$((i+1 ))done while read line; do echo "$line " done < file.txt
17.7 case 分支 1 2 3 4 5 case "$1 " in start) echo "启动" ;; stop) echo "停止" ;; *) echo "用法: $0 {start|stop}" ;;esac
17.8 函数 1 2 3 4 5 function myfunc () { echo "参数: $1 $2 " return 0 } myfunc hello world
17.9 实用脚本示例 示例 1:批量重命名 .nc 文件(加前缀)
1 2 3 4 #!/bin/bash for f in *.nc; do mv "$f " "wrf_$f " done
示例 2:备份脚本
1 2 3 4 5 6 7 #!/bin/bash backup_dir="/backup" data_dir="/data/wrfout" date_str=$(date +%Y%m%d_%H%M%S)mkdir -p $backup_dir tar -czf "$backup_dir /wrf_$date_str .tar.gz" "$data_dir " echo "备份完成: $backup_dir /wrf_$date_str .tar.gz"
示例 3:批量提交作业(配合 sbatch)
1 2 3 4 5 #!/bin/bash for case in {2019,2020,2021}; do sed "s/CASE/$case /g" template.slurm > run_$case .slurm sbatch run_$case .slurmdone
17.10 脚本调试 1 2 3 4 5 6 bash -x script.sh bash -n script.sh set -e set -u set -x
17.11 后台与等待 1 2 3 4 5 #!/bin/bash ./task1.sh & ./task2.sh &wait echo "全部完成"
第四部分 并行计算与科学计算 18. 高性能计算基础 18.1 为什么要并行 数值模式(WRF 等)计算量大,单核无法满足时效要求。并行方式:
共享内存并行(OpenMP / 多线程) :多核共享内存,线程间通过共享变量通信。适用于单节点。
分布式内存并行(MPI / 多进程) :进程间通过消息传递通信,可跨节点。适用于集群。
WRF 采用 MPI(分布式内存)为主 ,可结合 OpenMP 混合并行(较少用)。
18.2 查看计算资源 1 2 3 4 nproc lscpu free -h df -h /data
18.3 编译优化选项 1 2 3 4 5 6 7 8 9 -O2 -O3 -O0 -g -Wall -fopenmp -march=native -O2 -march=native
19. OpenMP 共享内存并行 19.1 概念 OpenMP 是共享内存并行编程标准,用编译指导指令 #pragma omp(C/C++)或 !$OMP(Fortran)实现。
19.2 示例(C) 1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> #include <omp.h> int main () { #pragma omp parallel { int tid = omp_get_thread_num(); printf ("Hello from thread %d\n" , tid); } return 0 ; }
19.3 编译与运行 1 2 3 4 gcc -fopenmp -o hello_omp hello.c OMP_NUM_THREADS=4 ./hello_omp export OMP_NUM_THREADS=8 ./hello_omp
19.4 常用 OpenMP 指令 1 2 3 4 5 #pragma omp parallel for #pragma omp parallel num_threads(4) #pragma omp critical #pragma omp reduction(+:sum) #pragma omp single / master
19.5 环境变量 1 2 3 OMP_NUM_THREADS OMP_DYNAMIC OMP_STACKSIZE
20. MPI 分布式并行 20.1 MPI 实现
MPICH :经典实现,WRF 官方教程默认推荐
OpenMPI :另一主流实现
Ubuntu 快速安装:
1 2 sudo apt install mpich libmpich-dev sudo apt install openmpi-bin libopenmpi-dev
查看安装:
1 2 3 mpirun --version mpif90 --versionwhich mpirun
20.2 示例(C,MPI 基础流程) 1 2 3 4 5 6 7 8 9 10 11 12 #include <mpi.h> #include <stdio.h> int main (int argc, char **argv) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf ("Hello from rank %d of %d\n" , rank, size); MPI_Finalize(); return 0 ; }
20.3 编译与运行 1 2 3 4 5 6 7 mpicc -o hello_mpi hello.c mpif90 -o hello_mpi hello.f90 mpic++ -o hello_mpi hello.cpp mpirun -np 4 ./hello_mpi mpiexec -np 4 ./hello_mpi mpirun -np 8 ./wrf.exe
20.4 多节点运行 1 2 3 4 5 6 mpirun -np 16 -hostfile hostfile ./a.out mpirun -np 16 --hosts compute01,compute02 ./a.out
20.5 常见 MPI 函数(了解) 1 2 3 4 5 6 7 MPI_Init / MPI_Finalize MPI_Comm_rank / MPI_Comm_size MPI_Send / MPI_Recv MPI_Bcast MPI_Reduce / MPI_Allreduce MPI_Barrier MPI_Gather / MPI_Scatter
21. SLURM 作业调度系统
大多数超算中心 / 大学 HPC 平台使用 SLURM。登录节点用于编辑提交,计算节点用于跑作业。不要在登录节点直接运行大规模计算 。
21.1 查看资源与队列 1 2 3 4 5 sinfo sinfo -Nel squeue squeue -u $USER squeue -l
sinfo 中节点状态:idle 空闲、alloc 已占满、mix 部分占用、down 故障、drain 维护。
21.2 提交批处理作业(sbatch) 作业脚本 job.slurm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/bash cd $SLURM_SUBMIT_DIR module load mpich netcdf mpirun -np $SLURM_NTASKS ./wrf.exe
提交与查看:
1 2 3 sbatch job.slurm squeue -u $USER scancel <jobid>
21.3 交互式作业(srun / salloc) 1 2 3 4 5 srun --partition=compute --nodes=1 --ntasks=4 --time =01:00:00 --pty bash salloc --ntasks=16 --time =2:00:00 mpirun -np 16 ./wrf.exe
21.4 查看作业详情与历史 1 2 3 4 scontrol show job <jobid> sacct -j <jobid> sacct -u $USER sacct --format=JobID,JobName,State,Elapsed,MaxRSS,NodeList
21.5 SLURM 常用选项汇总
选项
含义
--nodes/-N
节点数
--ntasks/-n
总进程数
--ntasks-per-node
每节点进程数
--cpus-per-task/-c
每进程 CPU 核数
--time/-t
时间限制(DD-HH:MM:SS 或 HH:MM:SS)
--partition/-p
分区(队列)
--mem
内存需求
--gres=gpu:1
GPU 资源
--job-name/-J
作业名
--output/--error
输出/错误文件
--array=1-10
任务数组(批量并行)
21.6 PBS/Torque 简介(部分平台) 1 2 3 qsub job.pbs qstat qdel <jobid>
22. 环境模块 module 超算平台常用 module 管理软件环境,避免冲突。
1 2 3 4 5 6 7 module avail module list module load netcdf module load mpich/4.0.2 module unload netcdf module purge module show netcdf
为什么用 module :不同版本软件共存、环境变量自动配置、避免污染系统环境。
23. 科学计算库与数据工具 23.1 编译器 1 2 3 gcc --version g++ --version gfortran --version
23.2 netCDF 工具 netCDF 是 WRF 输入输出采用的数据格式。命令行工具:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ncdump -h wrfout_d01_2026-09-01_00:00:00 ncdump file.nc ncdump -v T2 file.nc ncdump -c file.nc ncview wrfout_d01_2026-09-01_00:00:00
安装:
1 sudo apt install netcdf-bin ncview
23.3 NCO(netCDF 操作工具) 1 2 3 4 5 6 7 8 9 sudo apt install nco ncks -v T2,T,PSFC in.nc out.nc ncatted -a units,T2,o,c,K in.nc ncra in1.nc in2.nc out.nc ncecat -u time *.nc out.nc ncbo in1.nc in2.nc diff.nc ncap2 -s "T2C=T2-273.15" in.nc out.nc ncks -d time ,0,10 in.nc out.nc
23.4 CDO(气候数据操作工具) 1 2 3 4 5 6 7 8 9 10 sudo apt install cdo cdo info file.nc cdo daymean in.nc out.nc cdo monmean in.nc out.nc cdo timmean in.nc out.nc cdo remapbil,r360x180 in.nc out.nc cdo selvar,t2m in.nc out.nc cdo seldate,2026-01-01,2026-01-31 in.nc out.nc cdo mergetime f*.nc out.nc
23.5 HDF5 工具 1 2 3 sudo apt install hdf5-tools h5ls file.h5 h5dump file.h5
23.6 Python 科学计算栈(WRF 后处理) 常用库:numpy、scipy、pandas、matplotlib、xarray、netCDF4、wrf-python、cartopy、metpy、pyshp
1 2 3 4 conda create -n wrf python=3.10 conda activate wrf conda install numpy scipy matplotlib xarray netcdf4 pip install wrf cartopy metpy
1 2 3 4 5 import xarray as xr ds = xr.open_dataset('wrfout_d01_2026-09-01_00:00:00' )print (ds['T2' ].values) print (ds.data_vars)
1 2 3 4 5 6 from netCDF4 import Datasetimport wrf nc = Dataset('wrfout_d01_2026-09-01_00:00:00' ) slp = wrf.getvar(nc, 'slp' ) wrf.cartopy_xlim(slp)
23.7 常用数据格式
格式
说明
查看工具
NetCDF (.nc)
WRF 输入输出、大气科学标准格式
ncdump、ncview、NCO、CDO
GRIB (.grb/.grb2)
气象业务数据(如 GFS、ERA5)
wgrib2、grib_ls
HDF5 (.h5)
科学数据通用格式
h5ls、h5dump
二进制 (.dat)
无头信息,需说明文档
od、xxd
24. WRF 模型实战 24.1 WRF 简介 WRF(Weather Research and Forecasting)是下一代中尺度天气预报模式,广泛应用于科研与业务。编译运行依赖:
netCDF-C + netCDF-Fortran :数据 I/O 库(WRF 的 Fortran 代码必须链接 Fortran 接口)
HDF5 :netCDF-4 底层存储库
zlib、libpng、Jasper :GRIB2 压缩支持(WPS ungrib 处理 GRIB2 数据需要)
MPICH(或 OpenMPI) :并行库
gcc、gfortran、make :编译工具链
24.2 环境准备 1 2 3 4 5 6 7 8 9 sudo apt updatesudo apt install -y build-essential gfortran cpp m4 csh tcsh \ curl wget git unzip byacc flex bison libssl-dev libxml2-dev cmake gcc --version gfortran --version make --version
24.3 目录规划与依赖库编译 1 2 3 export DIR=$HOME /Build_WRFmkdir -p $DIR /src $DIR /LIBRARIEScd $DIR /src
1) 编译安装 netCDF(C 与 Fortran)
1 2 3 4 5 6 7 8 cd $DIR /src wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz wget https://zlib.net/zlib-1.3.1.tar.gz wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.3/src/hdf5-1.14.3.tar.gz wget https://github.com/OSGeo/libpng/archive/refs/tags/v1.6.39.tar.gz wget https://github.com/jasper-software/jasper/archive/refs/tags/version-2.0.33.tar.gz wget https://www.mpich.org/static/downloads/4.2.3/mpich-4.2.3.tar.gz
按顺序编译:zlib → HDF5 → netCDF-C → netCDF-Fortran(netCDF-Fortran 依赖 C 库)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 cd $DIR /src tar -xzvf zlib-1.3.1.tar.gz && cd zlib-1.3.1 ./configure --prefix=$DIR /grib2 make -j4 && make installcd $DIR /src tar -xzvf hdf5-1.14.3.tar.gz && cd hdf5-1.14.3 ./configure --prefix=$DIR /grib2 --with-zlib=$DIR /grib2 --disable-shared make -j4 && make installcd $DIR /src tar -xzvf netcdf-c-4.9.2.tar.gz && cd netcdf-c-4.9.2 CPPFLAGS=-I$DIR /grib2/include LDFLAGS=-L$DIR /grib2/lib \ ./configure --prefix=$DIR /netcdf --disable-dap --disable-shared make -j4 && make installcd $DIR /src tar -xzvf netcdf-fortran-4.6.1.tar.gz && cd netcdf-fortran-4.6.1 CPPFLAGS=-I$DIR /netcdf/include LDFLAGS=-L$DIR /netcdf/lib \ LIBS=-lnetcdf ./configure --prefix=$DIR /netcdf --disable-shared make -j4 && make install
2) 编译安装 MPICH
1 2 3 4 cd $DIR /src tar -xzvf mpich-4.2.3.tar.gz && cd mpich-4.2.3 ./configure --prefix=$DIR /mpich make -j4 && make install
3) 配置环境变量(写入 ~/.bashrc 持久化)
1 2 3 4 5 6 7 8 9 10 cat >> ~/.bashrc << 'EOF' export DIR=$HOME /Build_WRFexport PATH=$DIR /netcdf/bin:$DIR /grib2/bin:$DIR /mpich/bin:$PATH export NETCDF=$DIR /netcdfexport HDF5=$DIR /grib2export JASPERLIB=$DIR /grib2/libexport JASPERINC=$DIR /grib2/includeexport LD_LIBRARY_PATH=$DIR /netcdf/lib:$DIR /grib2/lib:$LD_LIBRARY_PATH EOFsource ~/.bashrc
版本号请以 WRF 官方在线教程(https://www2.mmm.ucar.edu/wrf/OnLineTutorial/)当前推荐版本为准。不同 WRF 版本对依赖库版本有兼容性要求,务必核对官方教程。
24.4 编译 WRF 1 2 3 4 5 cd $DIR wget https://github.com/wrf-model/WRF/releases/download/v4.5.2/v4.5.2.tar.gz tar -xzvf v4.5.2.tar.gzcd WRF-4.5.2 ./configure
./configure 会进入交互菜单,选择 Fortran 编译器为 gcc (gfortran)、并行方式为 dmpar 的选项。不同版本序号不同(WRF 4.x 中通常为 34 或 35 号附近),务必以屏幕菜单实际显示的选项为准 ,例如选 34 后提示 Configuration successful。
1 2 3 4 5 6 ./compile em_real 2>&1 | tee compile.logls -l main/*.exe
若缺文件,用 grep -E "Error|错误" compile.log 排查。
24.5 编译 WPS(前处理) 1 2 3 4 5 6 7 8 cd $DIR wget https://github.com/wrf-model/WPS/releases/download/v4.5/v4.5.tar.gz tar -xzvf v4.5.tar.gzcd WPS-4.5 ./configure ./compile 2>&1 | tee compile.logls geogrid.exe ungrib.exe metgrid.exe
下载静态地理数据 (geogrid 需要):
1 2 3 cd $DIR wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_complete.tar.gz tar -xzvf geog_complete.tar.gz
24.6 WRF 标准运行流程 第 1 步:geogrid(定义模拟区域,生成静态地形场)
1 2 3 cd $DIR /WPS-4.5 vi namelist.wps ./geogrid.exe
第 2 步:ungrib(解码 GRIB 气象数据)
1 2 3 ./link_grib.csh /path/to/your/gfs_files/*.grib2 ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable ./ungrib.exe
第 3 步:metgrid(水平插值到模式网格)
1 2 vi namelist.wps ./metgrid.exe
第 4 步:real(生成初始场与边界条件)
1 2 3 4 cd $DIR /WRF-4.5.2/runln -sf /path/to/WPS/met_em.d01.* . vi namelist.input ./real.exe
第 5 步:wrf(运行模式主程序)
dmpar 版本用 mpirun 并行运行:
1 2 mpirun -np 8 ./real.exe mpirun -np 8 ./wrf.exe
24.7 运行结果检查 1 2 3 4 5 6 7 8 9 10 11 12 tail -20 rsl.out.0000tail -20 rsl.error.0000 grep "SUCCESS" rsl.out.0000ls wrfout_d01_* ncdump -h wrfout_d01_2026-09-01_00:00:00
24.8 常见错误与排查
现象
常见原因
排查方向
real.exe 找不到文件
met_em 未链接或 namelist 不一致
检查 run 目录下的 met_em 链接、时间设置
CFL 错误 / 计算崩溃
时间步长太大
减小 time_step(建议 dx/(6×风速量级))
编译缺库
依赖库未安装或路径错
检查 NETCDF/HDF5/JASPERLIB 环境变量
configure 找不到 Fortran
gfortran 未装
sudo apt install gfortran
ungrib 报 GRIB2 错误
Jasper/libpng 缺失
检查 JASPERLIB/JASPERINC 与 Vtable 链接
运行到一半 stopped
磁盘满 / 内存不足 / 超过时限
df -h、free -h、查看 rsl.error.0000
24.9 WRF 后处理 1 2 3 4 5 6 7 8 9 ncdump -h wrfout_d01_* | head -50 ncks -v T2,PSFC,RAINC wrfout_d01_* out.nc ncview wrfout_d01_2026-09-01_00:00:00 conda activate wrf python plot_wrf.py
超算上提交 WRF 的 SLURM 脚本模板 :
1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/bash cd $SLURM_SUBMIT_DIR module load intel mpich netcdf mpirun -np $SLURM_NTASKS ./wrf.exe
第五部分 求职与应试篇 25. 高频面试考点 25.1 场景题(必会) Q1:服务器 CPU/内存/磁盘满,如何排查?
1 2 3 4 5 top free -h df -h du -sh /* ps aux --sort =-%mem | head
Q2:某端口被占用,如何定位进程?
1 2 ss -tulnp | grep 8080 lsof -i :8080
Q3:如何查找某个文件?
1 2 find / -name "wrfout*" 2>/dev/null locate wrfout
Q4:如何实时查看日志?
1 2 tail -f /var/log/syslog journalctl -f -u ssh
Q5:如何找出并杀掉占用资源的进程?
1 2 ps aux | grep pythonkill -9 <PID>
25.2 概念题 1. 软链接 vs 硬链接
软链接:指向路径,可跨文件系统,可指目录,源删除则失效,有自己的 inode
硬链接:指向 inode,不可跨文件系统,不可指目录,源删除不影响
2. 进程 vs 线程
进程是资源分配的基本单位,有独立地址空间
线程是 CPU 调度的基本单位,共享进程地址空间
3. 管道 vs 重定向
管道 |:前命令输出作为后命令输入
重定向:改变输入/输出流向(文件等)
4. 僵尸进程 vs 孤儿进程
僵尸进程:子进程已退出但父进程未回收(wait),占用少量资源;用 ps aux | grep Z 查看
孤儿进程:父进程先退出,被 init(PID 1)收养
5. inode 是什么
存储文件元信息(权限、属主、大小、数据块指针)的数据结构,ls -i 查看 inode 号;df -i 查看 inode 使用
6. 如何设置开机自启
1 systemctl enable service
7. 绝对路径与相对路径
8. > >> 2>&1 区别
> 覆盖、>> 追加、2>&1 把标准错误并入标准输出
9. 如何彻底删除用户
1 sudo userdel -r username
10. 查看系统版本
1 2 cat /etc/os-releaseuname -a
25.3 高频命令问答
问题
答案
查看端口监听
ss -tulnp / netstat -tulnp
查看进程
ps aux / top
查找文件
find / locate
查看文件内容
cat / less / tail
文本查找
grep
文本替换
sed 's/old/new/g'
按列处理
awk
压缩解压
tar -czvf / tar -xzvf
查看磁盘
df -h
查看目录大小
du -sh
远程拷贝
scp / rsync
查看内存
free -h
修改权限
chmod
定时任务
crontab -e
查看历史
history
查看系统负载
uptime / top
25.4 面试常问的 Linux 核心概念
发行版与内核 的区别
Shell 环境变量 PATH 的作用与修改
硬链接/软链接 区别(上文)
进程状态 (R/S/D/Z/T)
信号 (SIGTERM=15、SIGKILL=9)
文件系统挂载 mount/umount
swap 分区 的作用
静态库(.a) vs 动态库(.so) :静态库链接进程序,动态库运行时加载(LD_LIBRARY_PATH)
DNS、DHCP 基本概念
防火墙 ufw(Ubuntu):sudo ufw status、sudo ufw allow 22
26. 常用命令速查表 26.1 文件与目录
命令
作用
ls / ls -la
列出 / 详细列出
cd pwd
切换 / 查看目录
mkdir -p / rmdir
创建 / 删除目录
cp -r / mv / rm -rf
复制 / 移动 / 删除
touch
创建空文件
ln -s
软链接
file stat
文件类型 / 元信息
26.2 文本查看与处理
命令
作用
cat less more
查看文件
head tail
首尾 N 行
tail -f
实时跟踪
wc -l
统计行数
sort uniq
排序 / 去重
cut paste
列操作
tr
字符转换
diff
文件比较
26.3 查找
命令
作用
find
按条件查找
grep
内容查找
which whereis locate
定位命令 / 文件
26.4 权限与用户
命令
作用
chmod chown chgrp
权限 / 属主 / 属组
useradd userdel usermod
用户管理
passwd
改密码
su sudo
切换 / 提权
id whoami who
身份查看
26.5 进程与系统
命令
作用
ps top htop
查看进程
kill pkill killall
终止进程
free df du
内存 / 磁盘
uptime uname lscpu
系统信息
nohup & jobs fg bg
后台任务
26.6 网络
命令
作用
ssh
远程登录
scp rsync sftp
文件传输
wget curl
下载
ping ip addr ss
网络诊断
hostname
主机名
26.7 软件与压缩
命令
作用
apt dpkg
软件管理
make make install
源码编译
conda pip
Python 环境
tar gzip zip
压缩归档
26.8 服务与任务
命令
作用
systemctl
服务管理
journalctl
日志查看
crontab
定时任务
at
一次性任务
26.9 并行与科学计算
命令
作用
mpirun -np N
MPI 并行运行
sbatch squeue sinfo scancel sacct
SLURM 作业管理
module load
环境模块
ncdump ncview ncks cdo
netCDF 数据处理
gfortran gcc
编译
nproc lscpu
查看核数
结语 这份指南覆盖了从基础命令到 WRF 实战的完整路径。建议学习路线:
打基础 :掌握第一、二、三部分(命令、权限、系统管理、脚本)
并行能力 :掌握第四部分 18-23 章(这是超算和科研求职的核心竞争力)
结合科研 :按第 24 章完整走一遍 WRF 安装与运行流程
应试准备 :用第 25-26 章做考前速查与自测
学习建议 :任何命令都可以用 man 查询官方手册;多动手练习,多读日志,才是掌握 Linux 的最好方式。所有命令都建议先在本地 Ubuntu 虚拟机或实验机上验证后再用于生产环境。