Linux文件与目录管理(上)

本篇主要介绍Linux文件和目录的常用操作和命令,内容皆总结摘抄自《鸟哥的Linux私房菜:基础学习篇》,仅作笔记。

特殊目录

这篇文章中提到了“.”和“..”这两个特殊的目录,事实上Linux系统中除了这两个还有不少的特殊目录。下面是特殊目录的简介:

  • .(英文句号):代表此层目录;
  • ..(两个英文句号):代表上一层目录;
  • -:代表前一个工作目录;
  • ~:代表目前用户的工作目录;
  • ~账号名称(例如~root):代表”账号名称“这个用户的家目录。

需要特别注意的是,在所有目录下面都会存在“.”和“..”两个目录,分别代表该层目录以及该层目录的上一层目录。而对于根目录来说,这两个目录是同一个目录,例如下图中笔者使用的云服务器的根目录的“.”和“..”的属性完全一致。

目录操作常用命令

此处仅介绍几个最常用的操作目录的命令。

  • pwd

笔者在看到这个命令的时候以为是打印当前账号的密码或者修改密码之类的,然而它的全拼是print working directory,即打印当前工作目录。使用的格式为:pwd [-P],[]内的内容表示可选。-P选项的意义是打印真正的路径,而不是链接路径。

在root账号的家目录使用pwd命令打印如下:

我们再进入任意一个目录例如/usr/games/,使用pwd命令打印如下:

要验证选项-P的作用就需要选择特殊的链接文件了,例如/var/mail,首先使用pwd命令打印如下:

此结果是在意料中的,再加上-P选项,结果打印如下:

发现打印的是/var/spool/mail,这是因为如果pwd命令使用-P选项且当前工作目录的属性是一个链接文件,则打印的不是当前工作目录的路径而是链接文件指向的路径。使用ls -dl命令(关于ls命令的选项参数后面详细介绍)打印/var/mail的属性如下:

可以看到/var/mail确实是一个链接文件,且指向/var/spool/mail目录。

  • cd

最最最常用的命令就是cd命令了,尴尬的是笔者以前并不知道cd其实是change directory(改变目录)的缩写。既然cd是change directory的缩写,那它的作用就显而易见了:切换工作目录。使用的格式为:cd 绝对路径/相对路径。例如使用cd命令+绝对路径改变工作目录为/usr/games/:

或者再使用cd命令+相对路径改变工作目录为/usr/bin/:

前面介绍的几个特殊目录可以搭配cd命令使用,例如使用cd命令回到前一个工作目录(此处先由/usr/games/目录切换到/var/mail/目录):

 或者使用cd ~回到当前登录账号的家目录:

或者使用cd ~账号名称到指定账号的家目录(笔者的云服务器目前只有root用户,因此还是使用root):

  • mkdir

mkdir的全拼是make directory,即创建新目录。使用的格式为mkdir [-mp] 目录名称,[]内的内容表示可选。mkdir命令的选项介绍如下:

    ①-m:设置创建的新目录的文件权限,不加该选项则使用默认权限(umask的内容后面介绍);

    ②-p:将所需要的目录递归地创建。

我们首先使用mkdir创建一个test目录,该目录拥有默认权限(rwxr-xr-x):

使用-m选项创建test1目录并将其权限设置为rwxrwxrwx,语法格式为:mkdir -m 数字权限 目录名称。关于数字权限的内容在这篇文章

使用mkdir直接创建/test2/test3/test4/目录是不能成功的,默认情况下必须要一层一层的创建目录。

这时就需要用到-p选项了,加上此选项后,mkdir就可以创建多层目录。

并且哪怕是要创建的目录已经存在了,使用-p选项也不会报错。

  • rmdir

rmdir的全拼是remove directory,即删除目录。使用格式为:rmdir [-p] 目录名称。-p选项表示删除“上层”的空目录。

首先将刚刚创建的test和test1目录删除:

rmdir命令是不能删除非空目录的,因此尝试使用rmdir命令直接删除test2目录会提示目录非空。

但使用-p选项,我们可以像下面这样将test2/test3/test4/三级目录都删除。

执行文件路径的变量:$PATH

到目前为止已经介绍了很多命令了,并且也知道有的命令其实就是可执行文件。很多常用命令都放在/bin目录下,但是我们在使用时从没有像这么使用:/账号/bin/ls或/账号/bin/cal,好像在任何目录我们都可以使用这些命令。这是因为Linux系统中也有一个环境变量PATH(就像Windows系统环境变量path,在path中添加了jdk的路径之后在cmd窗口就可以执行很多jdk自带的命令),在环境变量PATH中添加了/bin目录,那么我们在任何路径下都可以直接执行ls或cal等命令而不用担心找不到此命令。

我们可以使用echo $PATH命令来查看我们所使用的Linux系统环境变量PATH定义了哪些目录:

关于PATH需要注意以下几点:

  • 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同;
  • PATH环境变量是可以修改的,例如可以将目录移除或添加新的目录等;
  • 使用绝对路径或相对路径来直接执行指定的某个命令比查找PATH准确。因为PATH中有多个目录,执行指定命令时会按照目录的顺序查找该命令并执行。

文件与目录操作常用的命令

  • ls

ls命令是最常用的命令之一,通过此命令我们可以了解文件的几乎全部信息。但仅执行ls命令时默认只显示:非隐藏文件的文件名,以文件名进行排序及文件名代表的颜色显示。例如:

如果想了解文件的更多信息,就需要使用ls命令提供的各种不同的选项,ls命令提供的选项及说明如下表(这些选项中的大多数可以一起使用,比如ls -hfl):

选项说明
-a全部的文件,连同隐藏文件(开头为.的文件)一起列出
-A全部的文件,连同隐藏文件,但不包括.与..这两个目录
-d仅列出目录本身,而不是列出目录内的文件数据
-f不进行排序的文件列表,ls默认会按照文件名排序
-F根据文件、目录等信息,给予附加的数据结构,例如:*表示可执行文件,/表示目录,=表示socket文件,|表示FIFO文件,@表示链接文件等
-h将文件容量以人类较易解读的方式(例如KB、GB等)列出来
-i列出innode号码,关于innode号码后续介绍
-l列出文件的详细信息,例如文件的属性和权限等
-n列出UID和GID而非使用者和用户组的名称,关于UID和GID后续介绍
-r将排序结果反向输出,例如ls默认排序是按照文件名由小到大,反向则变为由大到小
-R连同子目录内容一起列出来,即该目录下的所有文件都会显示出来
-S以文件容量大小排序
-t以时间排序
--color=never不要根据文件特性给予颜色显示
--color=always根据文件特性显示颜色
--color=auto系统自行依据设置来判断是否给予颜色显示
--full-time以完整时间模式(年、月、日、时、分、秒)输出
--time={atime,ctime}输出access时间或改变权限属性的时间ctime

下面对上面提到的常用的选项举例比较。这里笔者使用的是阿里云的根目录来举例,使用ls命令打印文件名如下:

①-a

    使用-a选项多出了包括了.和..目录以及.开头的隐藏文件或目录:

②-A

    -A选项与-a选项的差别在于-A不会将.和..目录列出:

③-f

    使用ls命令打印的文件名默认会按照文件名字母大小排序,-f则取消任何排序。

    事实上,-f除了取消排序,还会列出隐藏文件和目录,且会将表示文件特性的颜色去除。

④-F

    使用-F选项可以帮助我们快速了解文件的数据结构,例如根目录下多数文件的数据结构都为目录(表示为/),bin、lib等则为链接文件(表示为@)。

    再进入/bin目录,可以看到大多数为可执行文件(表示为*)。

⑤-l

    -l选项除了文件名外还给出了例如文件属性、权限、大小、所属用户以及所属用户组等信息。关于下面每列所代表的含义在这篇文章中介绍过,此处不再赘述。

⑥-h

    -h选项不能单独使用,因此我们使用ls -h命令时会发现与ls命令并无差异。

    它的主要意义是将表示文件大小的数字转换成我们人类易读的方式,例如上面介绍过的-l选项有一列表示文件大小的单位为Bytes的数据,对于我们来说需要再去换算才能得到文件大小。使用-h命令就简单易懂了。

⑦-R

    -R选项可以输出当前目录下的所有目录及文件,因为根目录使用此选项打印信息太多(没错,笔者在根目录试了下),这里笔者选择目录和文件相对较少的/var/db目录,打印信息如下:

  • cp

cp命令的全拼是copy,顾名思义是复制文件,但是它的作用又不仅是复制。cp命令还可以用来创建链接文件、比对两文件的新旧而予以更新、复制整个目录等。使用格式为:①cp 源文件 目标文件②cp 源文件1 源文件2 ... 源文件n 目标目录。它的选项以及说明如下表:

选项说明
-d若源文件为链接文件,则复制链接文件属性而非文件本身
-f全拼为force,若目标文件已经存在且无法开启,则删除后再次尝试
-i若目标文件已经存在,则覆盖时会先询问操作是否进行
-l进行硬链接(hard link)的链接文件建立,而非复制文件本身
-p连同文件的属性(包括权限、用户、时间)一起复制过去,而非默认属性
-r递归复制,用户目录的复制操作
-s复制为源文件的链接文件
-u目标文件比源文件旧才更新目标文件,或目标文件不存在时复制源文件
--preserve=all//TODO 笔者暂时没理解书上写的这个选项的意思,理解后补充
-a相当于-dr --preserve=all的意思

cp命令在不使用任何选项的时候只能复制文件而不能复制目录,复制的文件属性会随着账号的不同而不同(包括拥有者、文件权限、创建时间等)。因此在使用cp命令时需要注意以下几点:

    ①是否需要完善的保留源文件信息;

    ②源文件是否为符号链接文件;

    ③源文件是否为特殊文件(例如FIFO、socket等);

    ④源文件是否为目录。

  • rm

rm的全拼是remove,即删除文件或目录。使用格式为rm [-fir] 文件或目录。选项说明如下表:

选项说明
-f即force,忽略不存在的文件,不会出现警告信息
-I交互模式,在删除前会询问使用者是否操作
-r递归删除,最常用语目录的删除
  • mv

mv的全拼是move,即移动文件或目录,它还可以用来修改文件或目录名称。使用格式为:①mv [-fiu] 源文件 目标文件;②mv [options] 源文件1 源文件2 ... 目标目录;③mv 旧文件名 重命名文件名。选项说明如下表:

选项说明
-f即force,如果目标文件已存在,不会询问而是直接覆盖
-i如果目标文件已存在,则询问是否覆盖
-u如果目标文件已存在,则比较目标文件和源文件,当源文件比较新时才会覆盖

获取路径的文件名和目录名

我们可以使用”basename 路径“来获取指定路径的文件名或最后一个目录名,例如:

使用“dirname 路径”来获取指定路径的目录名,例如:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值