3、Linux基础(下):常用命令、文件权限、vim与环境变量

好,咱们接着聊Linux。上一节我们把Linux的目录结构和文件系统摸了一遍,这一节要动真格的了——上手操作。说白了,你装材料计算软件,百分之八十的时间都在跟这几个命令打交道:lscdmkdircpmvrm。再加上文件权限、vim编辑器和环境变量,这套组合拳打熟了,你基本就能在Linux里横着走了。

核心提示:这一节的内容,是你在服务器上生存的「基本功」。我见过太多新手因为一个rm命令删错了东西,或者环境变量配错了导致软件跑不起来。别急,咱们一个一个来。

3.1 常用命令:你的日常工具箱

先说说最常用的几个命令。我个人习惯把它们分成三类:查看类创建类操作类。这样记起来不费劲。

3.1.1 ls —— 看看目录里有什么

ls 就是 list 的缩写,列出当前目录下的文件和文件夹。你想想看,你刚登录服务器,第一件事肯定是看看自己到哪了、里面有什么东西。

ls                    # 列出文件名
ls -l                 # 列出详细信息(权限、大小、修改时间)
ls -a                 # 显示隐藏文件(以.开头的文件)
ls -lh                # 人性化显示文件大小(K、M、G)
ls -lt                # 按修改时间排序,最新的在最上面

我在项目中遇到过一件事:有个师弟跑VASP计算,怎么都找不到输出文件。我过去一看,他用的 ls 没加 -a,结果隐藏的 .out 文件根本没显示出来。嗯,这种坑踩一次就记住了。

3.1.2 cd —— 切换目录

cd 就是 change directory。这个命令太基础了,但有几个小技巧值得记住。

cd /home/user/project    # 绝对路径切换
cd project               # 相对路径切换(当前目录下的project文件夹)
cd ..                    # 返回上一级目录
cd ~                     # 回到用户主目录
cd -                     # 回到上一个目录(这个超好用)

我个人最常用的是 cd -。比如你在 /opt/vasp/bin 里改完配置,想回到刚才的 /home/user/input,一个 cd - 就搞定了。省得再敲一遍长路径。

3.1.3 mkdir —— 创建目录

装软件的时候,你经常需要创建新的文件夹来存放安装文件。

mkdir new_folder          # 创建单个目录
mkdir -p a/b/c            # 递归创建多级目录(如果a不存在,自动创建)

-p 参数是我最推荐的。为什么?因为有时候你写脚本,不确定上级目录是否存在,加个 -p 就万无一失。我曾经写自动化安装脚本时,就因为少了个 -p,结果目录创建失败,整个安装流程卡住了。从那以后,我写 mkdir 必带 -p

3.1.4 cp —— 复制文件或目录

复制操作在安装软件时太常见了——备份配置文件、复制库文件到指定目录等等。

cp file1 file2            # 复制文件
cp -r dir1 dir2           # 递归复制整个目录
cp -i file1 file2         # 交互模式,覆盖前询问(防止误操作)
cp -u file1 file2         # 只复制更新的文件(增量备份)

我的习惯:每次复制重要文件前,先用 cp -i。虽然多了一步确认,但能避免覆盖掉你辛苦改好的配置文件。尤其是 INCARPOTCAR 这类文件,覆盖了就很难找回原样。

3.1.5 mv —— 移动或重命名

mv 有两个用途:移动文件到另一个目录,或者重命名文件。

mv file1 /path/to/dir/    # 移动文件到指定目录
mv old_name new_name      # 重命名文件
mv -i file1 file2         # 交互模式,覆盖前询问

这里有个坑:mvcp 不同,mv 不会保留原文件。你移动之后,原位置的文件就没了。所以如果你只是想备份,用 cp 而不是 mv

3.1.6 rm —— 删除文件或目录

这个命令要特别小心。Linux 里没有回收站,删了就真的没了。

rm file                  # 删除文件
rm -r dir                # 递归删除目录及其内容
rm -f file               # 强制删除,不提示
rm -rf dir               # 最危险的组合:强制递归删除

警告:千万不要在不确定的情况下执行 rm -rf /。这会把整个系统删光。我曾经有个同事,在清理临时文件时手滑多打了个空格,结果把 /usr 目录删了一半……嗯,那天下午他都在重装系统。

我的建议是:每次用 rm 之前,先 ls 确认一下你要删的是什么。或者用 rm -i,让系统每次删除前都问你一遍。

3.2 文件权限管理:谁可以做什么

Linux 是个多用户系统,文件权限决定了谁能读、谁能写、谁能执行。你装软件的时候,经常会遇到「Permission denied」的报错——说白了就是权限不够。

3.2.1 权限的三组九位

ls -l 查看文件,你会看到类似这样的输出:

-rwxr-xr--  1 user group  1024 Mar 15 10:00 script.sh

第一列 -rwxr-xr-- 就是权限位。拆开来看:

位置 含义 示例
第1位 文件类型(-普通文件,d目录,l链接) -
第2-4位 文件所有者(user)的权限 rwx(读、写、执行)
第5-7位 所属组(group)的权限 r-x(读、执行)
第8-10位 其他用户(others)的权限 r--(只读)

3.2.2 修改权限:chmod

chmod 有两种用法:符号模式和数字模式。

符号模式:

chmod u+x script.sh      # 给文件所有者增加执行权限
chmod g-w script.sh      # 移除所属组的写权限
chmod o+r script.sh      # 给其他用户增加读权限
chmod a+x script.sh      # 给所有人增加执行权限

数字模式:

数字模式更简洁。权限用数字表示:r=4, w=2, x=1。加起来就是一组权限。

chmod 755 script.sh      # 所有者:7(rwx), 组:5(r-x), 其他:5(r-x)
chmod 644 file.txt       # 所有者:6(rw-), 组:4(r--), 其他:4(r--)
chmod 700 private.sh     # 只有所有者可以读写执行

我的经验:对于可执行脚本(比如VASP的提交脚本),我一般用 755。对于配置文件(比如 INCAR),用 644。对于私钥文件(比如SSH密钥),必须用 600,否则SSH会报错。

3.2.3 修改所有者和组:chown

有时候你从别处拷贝了文件,所有者不是你,导致你无法修改。这时候用 chown

sudo chown user:group file    # 修改文件所有者和所属组
sudo chown -R user:group dir  # 递归修改目录下所有文件

注意:chown 通常需要 sudo 权限。我在配置共享计算节点时,经常用 chown -R 把整个软件目录的所有权交给一个专门的计算用户。

3.3 vim编辑器使用:你的文本利器

在服务器上,你基本没有图形界面可用。改配置文件、写脚本,全靠命令行编辑器。vim 是其中最强大的一个,但学习曲线确实有点陡。别怕,你只需要掌握几个核心操作就够了。

3.3.1 vim的三种模式

vim 有三种模式,新手最容易搞混的就是这个。

模式 作用 如何进入
普通模式(Normal) 移动光标、复制粘贴、删除 启动vim时默认进入,按 Esc 返回
插入模式(Insert) 输入文本内容 i 进入
命令模式(Command) 保存退出、搜索替换 : 进入

3.3.2 基本操作流程

打开一个文件:

vim INCAR

进入后,你看到的是普通模式。按 i 进入插入模式,开始修改内容。改完后,按 Esc 回到普通模式,然后输入:

:wq      # 保存并退出
:w       # 只保存不退出
:q!      # 不保存强制退出(放弃修改)

3.3.3 常用快捷键

这些是我每天都会用到的:

普通模式下:
  dd        # 删除当前行
  yy        # 复制当前行
  p         # 粘贴到光标下方
  u         # 撤销上一步操作
  /keyword  # 搜索关键词(按n跳到下一个)
  :set nu   # 显示行号

避坑指南:我曾经在改 .bashrc 时,不小心按了 Ctrl+S(习惯性保存),结果vim卡死了。后来才知道,Ctrl+S 在终端里是暂停输出,按 Ctrl+Q 才能恢复。嗯,这个坑我踩过,你别再踩了。

3.4 环境变量配置:让系统找到你的软件

环境变量,说白了就是系统用来查找程序和库的「路径提示」。你装好一个软件,如果系统不知道它装在哪,你就没法直接运行它。这就是为什么需要配置环境变量。

3.4.1 最重要的环境变量:PATH

PATH 变量告诉系统:当你在终端输入一个命令时,去哪些目录里找这个命令的可执行文件。

echo $PATH    # 查看当前的PATH
# 输出示例:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin

如果你把VASP装到了 /opt/vasp/bin,但 PATH 里没有这个目录,你输入 vasp 就会提示「command not found」。解决方法就是把这个目录加到 PATH 里。

3.4.2 临时添加环境变量

直接在终端里执行:

export PATH=/opt/vasp/bin:$PATH

注意:$PATH 要放在后面,表示保留原有的路径,把新的加在前面。这样系统会优先查找新加的目录。

但这种方法只在当前终端会话中有效。关掉终端再打开,就没了。

3.4.3 永久配置环境变量

要永久生效,需要把 export 命令写到配置文件中。常用的配置文件有:

文件 作用范围 加载时机
~/.bashrc 当前用户 每次打开新终端时
~/.bash_profile 当前用户 登录时加载
/etc/profile 所有用户 系统级,需要root权限
/etc/environment 所有用户 系统级,纯变量赋值

我个人习惯把软件相关的环境变量写在 ~/.bashrc 里。比如:

# 用vim打开配置文件
vim ~/.bashrc

# 在文件末尾添加:
export PATH=/opt/vasp/bin:$PATH
export LD_LIBRARY_PATH=/opt/vasp/lib:$LD_LIBRARY_PATH
export VASP_HOME=/opt/vasp

# 保存退出后,让配置生效
source ~/.bashrc

3.4.4 其他常用环境变量

变量名 作用 示例
LD_LIBRARY_PATH 指定动态库的搜索路径 /opt/intel/lib
HOME 用户主目录 /home/user
USER 当前用户名 user
LANG 系统语言编码 en_US.UTF-8

注意:配置 LD_LIBRARY_PATH 时要小心。如果路径配错了,或者把不兼容的库路径加进去了,可能会导致系统命令都运行不了。我遇到过有人把 /usr/lib 覆盖了,结果 ls 都报错。嗯,那场面……只能进救援模式修复了。

3.5 本章知识体系

下面这张图帮你梳理一下这一节的核心内容。你可以把它当作一个「速查地图」,以后忘了哪个命令,回来看看就行。

Linux基础(下)知识体系 常用命令 ls - 查看目录 cd - 切换目录 mkdir - 创建目录 cp - 复制文件 mv - 移动/重命名 rm - 删除(小心!) 文件权限管理 权限三组九位 chmod - 修改权限 chown - 修改所有者 数字模式:755/644 符号模式:u+x vim编辑器 三种模式 i - 插入模式 Esc - 普通模式 :wq - 保存退出 dd/yy/p - 删/复/粘 环境变量 PATH - 命令路径 LD_LIBRARY_PATH export 临时设置 ~/.bashrc 永久 source 生效 核心原则:先确认,再操作。权限不够加sudo,路径不对配变量。 ⚠ 三大坑:rm -rf 手滑、vim 按 Ctrl+S、PATH 配错导致系统命令失效 —— 把这四个模块练熟,Linux 操作就算入门了 ——

好了,这一节的内容就到这里。命令不在多,在于熟练。你可以在自己的服务器或者虚拟机里多敲几遍,尤其是 rmchmod,一定要养成「先确认再执行」的习惯。环境变量配置是装软件的关键一步,配错了软件就跑不起来。嗯,这些经验都是我用时间和教训换来的,你拿过去直接用就行。


专注资料整理