15.1 Linux 常用命令¶
本章整理计算集群日常使用中常见的 Linux 命令。命令示例均为可直接复制执行的纯命令,不含提示符。
注意
登录节点主要用于登录、编辑文件、编译小程序、提交作业和查看结果。请不要在登录节点上运行长时间、高 CPU、高内存或大量 I/O 的计算任务,这类任务应提交到 HTCondor 或 Slurm 作业系统。
15.1.1 获取当前环境信息¶
| 功能 | 命令示例 |
|---|---|
| 查看当前用户 | whoami |
| 查看用户 ID 和所属用户组 | id |
| 查看所属用户组 | groups |
| 查看当前主机名 | hostname |
| 查看当前目录 | pwd |
| 查看当前时间 | date |
| 查看系统运行时间和负载 | uptime |
| 查看系统内核和架构 | uname -a |
| 查看操作系统版本 | cat /etc/os-release |
常用示例:
15.1.2 目录与路径操作¶
| 功能 | 命令示例 |
|---|---|
| 切换到指定目录 | cd /path/to/dir |
| 返回用户家目录 | cd 或 cd ~ |
| 返回上一级目录 | cd .. |
| 返回上一次所在目录 | cd - |
| 显示当前目录绝对路径 | pwd |
| 创建单个目录 | mkdir dirname |
| 创建多级目录 | mkdir -p project/logs |
| 查看目录树 | tree |
如果系统未安装 tree,可以用 find 查看目录层级:
15.1.3 文件与目录查看¶
| 功能 | 命令示例 |
|---|---|
| 查看当前目录文件 | ls |
| 查看详细信息 | ls -l |
| 查看隐藏文件 | ls -a |
| 按时间倒序查看 | ls -lt |
| 按文件大小排序 | ls -lhS |
| 以易读方式显示大小 | ls -lh |
| 查看文件类型 | file filename |
| 查看文件前几行 | head filename |
| 查看文件后几行 | tail filename |
| 实时查看日志更新 | tail -f job.out |
| 分页查看文件 | less filename |
| 直接输出文件内容 | cat filename |
常用组合:
15.1.4 文件与目录创建、复制、移动、删除¶
| 功能 | 命令示例 |
|---|---|
| 创建空文件 | touch file.txt |
| 复制文件 | cp source.txt target.txt |
| 复制目录 | cp -r source_dir target_dir |
| 保留属性复制 | cp -a source_dir target_dir |
| 移动文件或目录 | mv old_path new_path |
| 重命名文件 | mv old.txt new.txt |
| 删除文件 | rm file.txt |
| 交互式删除文件 | rm -i file.txt |
| 删除空目录 | rmdir empty_dir |
| 删除非空目录 | rm -r dir |
注意
rm 删除后通常无法从命令行直接恢复。执行 rm -r、rm -rf 前请务必确认路径,尤其不要在变量为空或路径不确定时使用递归删除。
安全一点的删除示例:
15.1.5 文件搜索与内容检索¶
| 功能 | 命令示例 |
|---|---|
| 按文件名查找 | find . -name "*.txt" |
| 查找目录 | find . -type d -name "logs" |
| 查找普通文件 | find . -type f |
| 查找大文件 | find . -type f -size +1G |
| 查找最近修改文件 | find . -type f -mtime -1 |
| 在文件中搜索文本 | grep "keyword" file.txt |
| 递归搜索文本 | grep -R "keyword" . |
| 显示匹配行号 | grep -n "keyword" file.txt |
| 忽略大小写搜索 | grep -i "keyword" file.txt |
| 统计匹配次数 | grep -c "keyword" file.txt |
如果系统安装了 rg,优先使用 rg,速度通常比 grep -R 更快:
常见搜索场景:
# 查找当前目录下所有 .out 文件
find . -type f -name "*.out"
# 查找 1GB 以上的大文件
find . -type f -size +1G -ls
# 在日志中查找错误
grep -Rni "error" logs/
15.1.6 文件大小、磁盘空间与配额¶
| 功能 | 命令示例 |
|---|---|
| 查看文件系统空间 | df -h |
| 查看当前目录总大小 | du -sh . |
| 查看各子目录大小 | du -h --max-depth=1 |
| 按大小排序目录 | du -h --max-depth=1 | sort -h |
| 查看文件大小排序 | ls -lhS |
| 查看 AFS 配额 | fs listquota /afs/ihep.ac.cn/users/... |
| 查看 Lustre 用户配额 | lfs quota -u username /scratchfs |
| 查看 Lustre 文件系统空间 | lfs df -h /scratchfs |
常用示例:
df -h
du -sh *
du -h --max-depth=1 | sort -h
fs listquota /afs/ihep.ac.cn/users/a/username
lfs quota -u username /scratchfs
lfs quota -u username /workfs
清理空间时,建议先定位大目录和大文件:
15.1.7 文件权限与属主¶
| 功能 | 命令示例 |
|---|---|
| 查看权限 | ls -l file.sh |
| 添加执行权限 | chmod +x file.sh |
| 设置文件权限为仅本人读写 | chmod 600 file.txt |
| 设置目录权限为仅本人访问 | chmod 700 private_dir |
| 设置文件所有人读写、其他人只读 | chmod 644 file.txt |
| 设置目录常用权限 | chmod 755 dir |
| 查看 ACL 权限 | getfacl file_or_dir |
| 设置 ACL 权限 | setfacl -m u:username:rwx dir |
权限数字常见含义:
| 权限 | 含义 |
|---|---|
7 |
读、写、执行 |
6 |
读、写 |
5 |
读、执行 |
4 |
只读 |
0 |
无权限 |
示例:
chmod +x run.sh
chmod 600 id_rsa
chmod 700 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
getfacl /workfs/group/project
15.1.8 文本编辑与文本处理¶
| 功能 | 命令示例 |
|---|---|
| 使用 vim 编辑 | vim file.txt |
| 使用 nano 编辑 | nano file.txt |
| 统计行数、词数、字节数 | wc file.txt |
| 只统计行数 | wc -l file.txt |
| 排序 | sort file.txt |
| 去重 | uniq file.txt |
| 排序后去重 | sort file.txt | uniq |
| 提取列 | awk '{print $1}' file.txt |
| 替换文本 | sed 's/old/new/g' file.txt |
| 比较两个文件 | diff old.txt new.txt |
| 查看二进制或特殊字符 | od -c file.txt |
常用示例:
# 查看文件前 20 行
head -n 20 data.txt
# 查看文件第 10 到 20 行
sed -n '10,20p' data.txt
# 提取第一列并去重
awk '{print $1}' data.txt | sort | uniq
# 统计日志中 error 出现次数
grep -i "error" job.log | wc -l
15.1.9 压缩、解压与打包¶
| 文件类型 | 解压命令 |
|---|---|
.tar |
tar -xvf file.tar |
.tar.gz 或 .tgz |
tar -zxvf file.tar.gz |
.tar.bz2 |
tar -jxvf file.tar.bz2 |
.tar.xz |
tar -Jxvf file.tar.xz |
.gz |
gunzip file.gz |
.zip |
unzip file.zip |
打包压缩:
# 打包目录,不压缩
tar -cvf project.tar project/
# 打包并 gzip 压缩
tar -zcvf project.tar.gz project/
# 打包并排除某些目录
tar --exclude="*.tmp" --exclude="output/" -zcvf project.tar.gz project/
zip 压缩目录
zip -r project.zip project/
查看压缩包内容:
注意
大量小文件会显著影响并行文件系统性能。长期保存或传输前,建议先用 tar 打包。
15.1.10 文件传输¶
| 功能 | 命令示例 |
|---|---|
| 从本地复制到集群 | scp local.txt username@lxlogin.ihep.ac.cn:/path/ |
| 从集群复制到本地 | scp username@lxlogin.ihep.ac.cn:/path/file.txt ./ |
| 复制目录 | scp -r local_dir username@lxlogin.ihep.ac.cn:/path/ |
| 断点续传/同步目录 | rsync -avP source/ target/ |
| 使用 sftp | sftp username@lxlogin.ihep.ac.cn |
| 下载网页文件 | wget URL |
| 下载网页文件 | curl -O URL |
常用示例:
# 上传文件
scp input.dat username@lxlogin.ihep.ac.cn:/workfs/group/username/
# 下载结果
scp username@lxlogin.ihep.ac.cn:/workfs/group/username/result.out ./
# 同步目录,适合大目录或网络不稳定场景
rsync -avP ./project/ username@lxlogin.ihep.ac.cn:/workfs/group/username/project/
# 只预览 rsync 会同步哪些内容
rsync -avP --dry-run ./project/ username@lxlogin.ihep.ac.cn:/workfs/group/username/project/
15.1.11 进程查看与管理¶
| 功能 | 命令示例 |
|---|---|
| 查看当前终端进程 | ps |
| 查看所有进程 | ps -ef |
| 查看自己的进程 | ps -u username |
| 按关键字查找进程 | pgrep -af python |
| 动态查看进程 | top |
| 动态查看进程 | htop |
| 结束进程 | kill PID |
| 强制结束进程 | kill -9 PID |
| 后台运行命令 | command & |
| 查看后台任务 | jobs |
| 将后台任务调回前台 | fg %1 |
| 后台任务继续运行 | bg %1 |
示例:
注意
不要用 kill -9 作为默认选择。普通 kill PID 会给程序清理和退出的机会,只有进程无法正常结束时再使用 kill -9 PID。
15.1.12 系统资源查看¶
| 功能 | 命令示例 |
|---|---|
| 查看 CPU 和内存占用 | top |
| 查看内存使用 | free -h |
| 查看虚拟内存和系统负载 | vmstat 1 |
| 查看磁盘 I/O | iostat -x 1 |
| 查看 GPU 状态 | nvidia-smi |
| 持续刷新 GPU 状态 | watch -n 1 nvidia-smi |
| 查看登录用户 | who |
| 查看当前终端信息 | w |
示例:
如果 iostat 或 htop 不存在,说明当前系统未安装对应工具,可使用 top、free 等基础命令替代。
15.1.13 网络与连接检查¶
| 功能 | 命令示例 |
|---|---|
| 测试主机连通性 | ping hostname |
| 查看路由路径 | traceroute hostname |
| 检查端口连通性 | nc -vz hostname port |
| 查看本机网络地址 | ip addr |
| 查看路由 | ip route |
| 查看监听端口 | ss -lntp |
| 查看所有 TCP 连接 | ss -ant |
示例:
15.1.14 SSH 与远程会话¶
| 功能 | 命令示例 |
|---|---|
| SSH 登录 | ssh username@lxlogin.ihep.ac.cn |
| 指定端口登录 | ssh -p 2222 username@hostname |
| 指定私钥登录 | ssh -i ~/.ssh/id_rsa username@hostname |
| 开启 X11 转发 | ssh -XYC username@hostname |
| 生成 SSH 密钥 | ssh-keygen -t ed25519 |
| 复制公钥到远端 | ssh-copy-id username@hostname |
示例:
长时间交互操作建议使用 tmux 或 screen,避免网络断开导致会话丢失:
注意
tmux 和 screen 适合保留编辑、编译、小规模调试等交互会话,不应替代作业系统运行正式计算任务。
15.1.15 软件环境与命令定位¶
| 功能 | 命令示例 |
|---|---|
| 查看环境变量 | env |
| 查看某个环境变量 | echo $PATH |
| 临时设置环境变量 | export VAR=value |
| 查看命令位置 | which python |
| 查看命令类型 | type module |
| 查看可执行文件依赖库 | ldd program |
| 查看当前 shell | echo $SHELL |
| 查看命令帮助 | command --help |
| 查看手册 | man command |
集群常用 module 管理软件环境:
# 查看可用软件
module avail
# 加载软件
module load python/3.7
# 查看已加载软件
module list
# 卸载软件
module unload python/3.7
# 清空已加载软件环境
module purge
# 查看模块说明
module help python/3.7
定位程序和动态库问题:
15.1.16 AFS/Kerberos 认证相关¶
在 AFS 目录下读写文件时,可能需要有效 token。
| 功能 | 命令示例 |
|---|---|
| 获取 Kerberos 票据 | kinit username |
| 获取 AFS token | aklog |
| 查看 Kerberos 票据 | klist |
| 查看 AFS token | tokens |
| 删除 AFS token | unlog |
| 修改 Kerberos 密码 | kpasswd |
常用示例:
如果在 /afs 下无法写文件,可先检查:
15.1.17 Shell 历史、别名与脚本¶
| 功能 | 命令示例 |
|---|---|
| 查看历史命令 | history |
| 搜索历史命令 | history | grep keyword |
| 查看当前别名 | alias |
| 设置临时别名 | alias ll='ls -lh' |
| 取消别名 | unalias ll |
| 查看脚本执行过程 | bash -x script.sh |
| 检查脚本语法 | bash -n script.sh |
常用脚本开头:
说明:
set -e:命令失败时退出脚本。set -u:使用未定义变量时报错退出。
15.1.18 输入输出重定向与管道¶
| 功能 | 命令示例 |
|---|---|
| 输出写入文件,覆盖原文件 | command > output.txt |
| 输出追加到文件 | command >> output.txt |
| 错误输出写入文件 | command 2> error.txt |
| 标准输出和错误输出都写入文件 | command > all.log 2>&1 |
| 管道连接命令 | command1 | command2 |
| 同时显示并保存输出 | command | tee output.txt |
| 追加保存输出 | command | tee -a output.txt |
示例:
15.1.19 常见日志排查命令¶
| 场景 | 命令示例 |
|---|---|
| 查看日志末尾 | tail -n 100 job.out |
| 实时跟踪日志 | tail -f job.out |
| 搜索错误 | grep -i "error" job.out |
| 搜索失败信息 | grep -Ei "error|failed|fatal|killed" job.out |
| 查看空输出文件 | ls -lh job.out |
| 查看最近生成的文件 | ls -lt |
| 查看程序退出码 | echo $? |
示例:
常见关键词:
| 关键词 | 可能含义 |
|---|---|
No such file or directory |
路径错误或输入文件不存在 |
Permission denied |
权限不足或脚本不可执行 |
command not found |
软件未加载或命令路径不在 PATH 中 |
Killed |
可能超内存或被系统终止 |
out of memory / OOM |
内存不足 |
Disk quota exceeded |
磁盘配额已满 |
15.1.20 作业前后常用检查¶
提交作业前建议检查:
# 当前在哪个目录
pwd
# 输入文件是否存在
ls -lh input.dat
# 脚本是否有执行权限
ls -l run.sh
chmod +x run.sh
# 软件环境是否正确
module list
which python
python --version
# 存储空间是否足够
du -sh .
df -h .
作业结束后建议检查:
# 查看输出文件
ls -lh
tail -n 100 job.out
# 搜索错误
grep -Ei "error|failed|fatal|killed|oom" job.out
# 查看结果文件大小
du -sh output/
15.1.21 获取帮助¶
| 功能 | 命令示例 |
|---|---|
| 查看简短帮助 | command --help |
| 查看手册 | man command |
| 查看命令路径 | which command |
| 查看 shell 内建命令说明 | help cd |
| 查看 module 帮助 | module help module_name |
示例:
常见问题(FAQ)¶
见常见问题。
有问题?输入后跳转到对话页继续交流