Linux 基础 - 目录操作与 $PATH
本文大纲:
绝对路径与相对路径
Linux 中路径分为绝对路径与相对路径
- 绝对路径:由根目录作为起始路径
- 相对路径:由当前所在路径作为起始路径,当前路径可用
./表示
在编写 shell 脚本时最好采用绝对路径,因为这样不会随着脚本文件所在的路径而对代码执行结果产生影响
常用目录操作
Linux 系统常见的目录操作指令有:
- cd: 变换目录
- pwd: 显示当前的目录
- mkdir: 创建新目录
- rmdir: 删除目录
cd(change directory, 变换目录)
每一个登入 Linux 系统的用户第一个进入的目录都是该用户的 Home 目录,即 ~,同样也可以执行 cd ~ 回到 Home 目录,如果仅仅输入 cd 代表的就是 cd ~,cd - 代表回到前一个目录,在预设指令模式(bash shell)中,可以利用 tab 键来自动补齐路径。
pwd(print working directory, 显示当前所在目录)
如果想要知道当前所在的工作目录,执行 pwd 即可。
-P 选项是显示当前目录链接的真实目录,例如,ubuntu 系统在 /var/spool/mail 下执行 pwd 会显示 /var/spool/mail,而执行 pwd -P 指令会显示 /var/mail,这表明 /var/spool/mail 链接到了 /var/mail。
返回上一级目录执行 ls -al 我们会看到 mail 目录指向了 ../mail/。
1 | drwxr-xr-x 0 root root 512 Sep 23 2017 ./ |
mkdir(make directory, 新建目录)
默认情况下,执行 mkdir /home/pango/testing 目标目录需要一层一层的新建才行,为了递归创建目录,添加 -p 选项可以自动创建不存在的目录。
另外,通过 -m 选项可以在新建目录时为该目录指定权限,例如当执行 mkdir -p -m 711 /home/pango/testing 时,在该目录树上的所有新建的目录都会具有 drwx--x--x 权限。如果不指定 -m 选项,其默认权限会与 umask 有关,见后文。
rmdir(remove directory, 删除目录)
与 mkdir 指令类似,默认情况下,目标目录需要一层一层的删除才行,且被删除的目录必须为空,即该目录下不能存在任何目录或文件。
而 -p 提供了递归删除目录选项,且会删除指定目录下的任何目录和文件,该操作比较危险,使用时需谨慎。
执行程序的环境变量: $PATH
指令 ls 的二进制可执行程序所在的目录为 /bin/ls,可是为何可以在任何目录下执行 ls 这个指令呢?这就是环境变量 $PATH 的作用。
当执行 ls 指令时,系统会根据 PATH 的值去每个定义的目录下搜索名称为 ‘ls’ 的可执行文件,如果在 PATH 定义的目录中包含多个名称为 ‘ls’ 的可执行文件,那么先被找到的指令会被执行。
执行 echo $PATH 会在屏幕上打印出所有定义的路径值,$ 表示环境变量,PATH 表示环境变量的键,注意 PATH 一定都是大写字母,其定义的多个路径每个之间由 : 分隔。
现在,如果将 ls 指令从 /bin/ls 通过 mv /bin/ls /root/ 移动到 /root/ 目录下,
- 即使执行
cd /root切换到与其相同的目录下,执行ls指令仍被告知找不到指定的指令,因为PATH中并未定义/root路径,系统搜索不到该指令。 - 可以通过使用绝对路径或相对路径来执行该指令:
/root/ls或./ls。 - 可通过
PATH="${PATH}:/root"将/root加入到PATH变量中。
此外,关于 PATH 需要注意以下几项:
- 不同的用户的环境变量
PATH的值是不同的。 PATH是可以修改的- 相比修改
PATH的值,优先使用绝对路径或相对路径来执行某个指令。 - 指令放置到正确的目录下
- 最好不要将当前目录
.加入到PATH当中。