Linux【2】-管理文件-1-4-目录与路径(cd/pwd/mkdir/rmdir/path)

绝对路径与相对路径:

  • 绝对路径:路径的写法『一定由根目录/ 写起』,例如: /usr/share/doc 这个目录。
  • 相对路径:路径的写法『不是由 / 写起』,例如由/usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『cd ../man』这就是相对路径的写法啦!相对路径意指『相对于目前工作目录的路径!

一、目录常见的操作

  • cd:变换目录
  • pwd:显示当前目录
  • mkdir:建立一个新的目录
  • rmdir:删除一个空的目录

1.1 cd的用法

Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令。所谓 Shell 内置命令,就是 Shell 自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,所以会有命令的执行文件。Linux 中的绝大多数命令是外部命令,而 cd 命令是一个典型的 Shell 内置命令,所以 cd 命令没有执行文件所在路径。

[root@www ~]# cd [相对路径或绝对路径]
# 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号啰!

特殊符号:

.         代表此层目录
..        代表上一层目录
-         代表前一个工作目录
~         代表『目前用户身份』所在的家目录。~account  代表 account 这个用户的家目录(account是个账号名称)
~用户名    表示切换至指定用户的主目录

例子:

[root@www ~]# cd ~vbird
# 代表去到 vbird 这个用户的家目录,亦即/home/vbird

[root@www vbird]# cd ~
# 表示回到自己的家目录,亦即是 /root 这个目录

[root@www ~]# cd
# 没有加上任何路径,也还是代表回到自己家目录的意思喔!

[root@www ~]# cd ..
# 表示去到目前的上层目录,亦即是 /root 的上层目录的意思;

[root@www /]# cd -
# 表示回到刚刚的那个目录,也就是 /root 啰~

[root@www ~]# cd /var/spool/mail
# 这个就是绝对路径的写法!直接指定要去的完整路径名称!

[root@www mail]# cd ../mqueue
# 这个是相对路径的写法,我们由/var/spool/mail 去到/var/spool/mqueue 就这样写!

1.2 Pwd用法

pwd 命令,是 Print Working Directory (打印工作目录)的缩写,功能是显示用户当前所处的工作目录

[root@www ~]# pwd [-P]

选项与参数:
-P  :显示出确实的路径,而非使用链接 (link) 路径。

范例:单纯显示出目前的工作目录:

[root@www ~]# pwd
/root   <== 显示出目录啦~

范例:显示出实际的工作目录,而非链接文件本身的目录名而已

[root@www ~]# cd /var/mail   <==注意,/var/mail是一个连结档

[root@www mail]# pwd
/var/mail         <==列出目前的工作目录

[root@www mail]# pwd -P
/var/spool/mail   <==怎么回事?有没有加 -P 差很多~

[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail

# 看到这里应该知道为啥了吧?因为/var/mail 是连结档,连结到 /var/spool/mail
# 所以,加上 pwd -P 的选项后,会不以连结文件的数据显示,而是显示正确的完整路径啊!

1.3 mkdir用法:

[root@www ~]# mkdir [-mp] 目录名称

选项与参数:

-m :配置文件案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色,默认权限值是 755~
-p :帮助你直接将所需要的目录(包含上层目录)递归建立起来!

范例:请到/tmp底下尝试建立数个新目录看看:

[root@www ~]# cd /tmp
[root@www tmp]# mkdir test    <==建立一名为 test 的新目录

[root@www tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4':
No such file or directory       <== 没办法直接建立此目录啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4
# 加了这个 -p 的选项,可以自行帮你建立多层目录!

范例:建立权限为rwx--x--x的目录

[root@www tmp]# mkdir -m 711 test2
[root@www tmp]# ls -l
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

#仔细看上面的权限部分,如果没有加上 -m 来强制设定属性,系统会使用默认属性。 #那么你的默认属性为何?这要透过底下介绍的umask 才能了解喔!

1.4 Rmdir

[root@www ~]# rmdir [-p] 目录名称

选项与参数:

-p :连同上层『空的』目录也一起删除

范例:将于mkdir范例中建立的目录(/tmp底下)删除掉!

[root@www tmp]# ls -l   <==看看有多少目录存在?
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

[root@www tmp]# rmdir test   <==可直接删除掉,没问题
[root@www tmp]# rmdir test1  <==因为尚有内容,所以无法删除!
rmdir: `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4

[root@www tmp]# ls -l        <==您看看,底下的输出中test与test1不见了!

drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

#瞧!利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除~

#不过要注意的是,这个 rmdir 仅能『删除空的目录』。所以一旦目录中有内容,就会报错

1.5 Path

范例:先用root的身份列出搜寻的路径为何?

[root@www ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin
:/bin:/usr/sbin:/usr/bin:/root/bin  <==这是同一行!

范例:用vbird的身份列出搜寻的路径为何?

[root@www ~]# su - vbird
[vbird@www ~]# echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/vbird/bin

#仔细看,一般用户vbird的PATH中,并不包含任何『sbin』的目录存在喔!

例子:

[root@www ~]# mv /bin/ls /root
# mv 为移动,可将档案在不同的目录间进行移动作业

[root@www ~]# /root/ls  <==直接用绝对路径指定该文件名
[root@www ~]# ./ls      <==因为在 /root 目录下,就用./ls来指定

如果直接输入Ls,及时是在/root目录下也不行,调用程序要么绝对路径,要么相对路径,要么调用环境变量中的,而直接输入程序的名字为调用环境变量中的,环境变量中没有就不可以。

加入环境变量

[root@www ~]# PATH="$PATH":/root

二、Linux文件(目录)命名规则

我们知道,在 Linux 系统中,一切都是文件,既然是文件,就必须要有文件名。同其他系统相比,Linux 操作系统对文件或目录命名的要求相对比较宽松。

Linux 系统中,文件和目录的命名规则如下:

  1. 除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,使用某些特殊字符并不是明智之举。例如,在命名时应避免使用 <、>、?、* 和非打印字符等。如果一个文件名中包含了特殊字符,例如空格,那么在访问这个文件时就需要使用引号将文件名括起来。
  2. 目录名或文件名的长度不能超过 255 个字符。
  3. 目录名或文件名是区分大小写的。如 DOG、dog、Dog 和 DOg ,是互不相同的目录名或文件名,但使用字符大小写来区分不同的文件或目录,也是不明智的。
  4. 与 Windows 操作系统不同,文件的扩展名对 Linux 操作系统没有特殊的含义,换句话说,Linux 系统并不以文件的扩展名开分区文件类型。例如,dog.exe 只是一个文件,其扩展名 .exe 并不代表此文件就一定是可执行文件。

需要注意的是,在 Linux 系统中,硬件设备也是文件,也有各自的文件名称。Linux 系统内核中的 udev 设备管理器会自动对硬件设备的名称进行规范,目的是让用户通过设备文件的名称,就可以大致猜测处设备的属性以及相关信息。

udev 设备管理器会一直以进程的形式运行,并侦听系统内核发出的信号来管理位于 /dev 目录下的设备文件。

表 1 Linux硬件设备文件名称

硬件设备 文件名称
IDE设备 /dev/hd[a-d],现在的 IDE设备已经很少见了,因此一般的硬盘设备会以 /dev/sd 开头。
SCSI/SATA/U盘 /dev/sd[a-p],一台主机可以有多块硬盘,因此系统采用 a~p 代表 16 块不同的硬盘。
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0 或 /dev/ht0

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn