第八篇 Linux文件与目录管理(上)

来源:互联网 发布:网络影音嗅探器 编辑:程序博客网 时间:2024/05/22 00:10

最近有几天在忙自己的事,所以没写博客,今天调整好状态,继续开始写吧!

经过了上一篇章中对Linux目录与文件配置的洗礼后,这一篇的内容便是对文件与目录的基本操作


1 目录与路径


1.1 相对路径与绝对路径

谈到目录与文件的操作,不得不提的就是路径问题,

因为在Linux系统中,文件系统是用一层一层的目录串起来的,那么,要进行文件与目录的操作

路径就显得十分重要了!

如上一篇所讲,路径分为绝对路径相对路径,两者的概念,请去上一篇学习.

两者最大的区别在于:**相对路径是相对于当前目录来讲,而绝对路径则是完整的路径名**gyigegongzuo

用处:

相对路径:再进行日常操作时,使用相对路径就较为方便,比如

有/home/Evilcrow/Document/Kitch,,/home/Evilcrow/Document/Option,

要从Kitch目录切换至option目录怎么办? 用cd ../option就显得很方便

绝对路径:进行系统管理,程序编写时,准确无误

就像之前说的一样,使用绝对路径是十分准确的,尤其是进行程序的编写时,使用绝对路径尤为重要!


1.2 目录的基本操作

接下来谈谈目录的基本操作

首先来记忆一些比较特殊,但是又十分好用的目录名

. 表示当前目录

.. 表示上级目录

~ 表示当前用户的主文件夹

~user 表示user用户的主文件夹

— 表示上一个目录

其中,“—”表示”上一级目录”,这个用法,在进行两个目录间的切换时十分方便,需要常用进行熟悉

注:根目录是没有上层目录的,即[Evilcrow@Evilcrow /] $ cd ..仍为根目录

介绍几个常用的目录命令

cd:切换目录 (change dictionary)

pwd:显示当前目录的路径

mkdir: 在当前目录下创建一个新目录 (make dictionary)

rmdir: 删除一个”空”目录 (rm dictionary)


cd 命令,

进行目录的切换 用法:

[Evilcrow@Evilcrow ~]$ cd [相对路径/绝对路径]

其中注意,~,—,两个特殊目录,同时,

[Evilcrow@Evilcrow]$ cd命令,==[Ecilcorw@Evilcorw]$ cd ~命令

注:进行cd命令,切换目录时,cd 与目录路径之间有一个空格,同时我们建议使用[Tab]补齐功能


pwd 命令

显示当前目录路径,用法

[Evilcrow@Evilcrow]$ pwd [-P]

其中,直接使用pwd即可显示当前目录路径,为绝对路径

[-P]选项的作用是显示出文件的真实路径,

举个例子,比如,/var/mail 与 /var/spool/mail

/var/mail连接文件,加上-P参数后,便会完整显示文件路径,不会显示连接文件(可以勉强理解为快捷方式)

pwd -P可以使我们获取到文件的完整路径名


mkdir 命令

创建一个新目录

[Evilcrow@Evilcrow]$mkdir 目录名

重要参数

-m 可以直接进行文件权限的配置 ,不用按照umask的默认权限进行设置

-p 有时我们需要进行多级目录的创建,使用此参数,可以进行目录的递归创建

举个例子:

mkdir -m 744 test 可以自己进行

mkdir -p /home/Evilcrow/test/test1/test2即可进行多级目录的创建

注意:-p参数虽然十分好用,但是一旦你的参数名混乱,就王炸!,后续的处理十分麻烦


rmdir 命令

删除一个空目录

谈到此命令时,必须强调一点就是,删除一个空目录!

即rmdir命令,只是用来删除空目录的!,若目录不为空,不能进行删除!

重要参数:-p参数是用来进行多级目录删除的,若删除此目录后,..目录也为空则一同删除

那么,问题来了,要是目录不为空,怎么一次性删除目录 ?

这时,就要使用到rm -r的命令了

[Evilcrow@Evilcrow]$ rm -r test,可以直接递归删除掉test及其test以下所有目录!

但是,-r,这个递归参数的使用需要十分注意!


1.3 关于路径的变量:PATH

谈到路径的切换,那么为什么在任何地方都可以执行/bin/ls的命令呢?

这就要提到路径PATH的配置,

我们再使用某一个命令时,系统会根据我们自己PATH的配置,去到相应的目录下

需找该文件,之后就进行命令的使用,那么,PATH很重要,没错吧?

那么,我们如何查看目前的PATH配置呢?

使用echo $PATH命令

echo,有”显示,打印出”的作用,而$则是,之后跟的是变量的标识符

如何上图所示

PATH中,包含了好多的路径配置,用“:”进行路径的区分,对于一个命令,先查找到哪里

他的PATH就是哪里

有时候,某些命令的PATH是没有划给user的,但是你仍然可以通过

使用绝对路径直接访问文件进行命令调用!

亦即是说,如果,目标命令没有添加至PATH中,那么即使是root用户,也不能直接使用此命令!

关于PATH,我们有以下的建议:

不同用户的默认PATH是不同的,所以默认能执行的命令也是不同的

承上一条,PATH是可以修改的,我们可以根据自己的需求进行PATH的修改

可以直接使用绝对路径的方式进行命令的访问,这样来的更快!

由以上几点,命令必须在PATH中配置正确的命令,才能进行正常方便的使用

最后一点,不建议将”.”与”..”这两级目录添加至PATH路径中!


2 文件与目录管理

谈到文件与目录的管理,就是指”移动,复制,重命名,显示属性”等几方面的内容

2.1 文件/目录的查看操作

针对文件/目录的查看操作,用到的命令,想必已经很熟悉了

ls (list)

而ls命令的参数就有很多了,下面一一详细说明,其中加粗的是常用参数

**1. -a 全部文件,连同隐藏文件也一一显示出来(.开头的即为隐藏文件)**2.-A 作用同-a参数,但是并不会列出(...)两个目录**3. 仅列出目录本身,而不会列出目录的文件数据**4.-f直接列出文件的名,并不会进行排序,(使用默认排序)**5. -F根据文件类型,自动附加文件结构**  *可执行文件,  /目录,  =代表socket文件,  | 表示管道FIFO文件6.-h,将文件容量以人们常用的方式读出,GB,KB等7.-i 列出i-node的号码**8.-l列出长数据串,其中包含了目录/文件的各种信息**9.-n 列出UID与GID,而非用户名与用户组10.-r,将排序结果反向输出11.-R,连同子目录的内容一起显示出来12.-S,将文件按照文件容量的大小进行排序,而非文件名13.-t,依照时间名进行排序,而非文件名14.--color=never/auto/always,总是,从不,自动显示颜色15.--full-time,完整的时间进行显示16.--time=atime/ctime(mtime为默认显示),显示权限改变时间/引用时间

从上面就可以看出:ls的命令十分之多,但是,这么多的命令,与你日常经常用到的,

基本上只有4,5和左右,所以熟练掌握常用参数,了解其他参数

正如之前所谈到的,所有的命令,对于他们的参数都是可以进行合并的,比如-alF

但是,请注意,像–color,–time这种完整名的参数,就不能和其他的合并,而要自己单独写

注:由于ls -l异常频繁的使用,在.bashrc文件中,已经用alias加入ll表示ls-l了!


2.2 复制,删除与移动

前一小节谈到的是,文件/目录的查看,那么,这一节就是对文件/目录的操作了!

cp 命令

复制文件,对文件进行更新,创建连接文件,复制整个目录

[Evilcrow@Evilcrow]$ cp 源文件 目标文件

对于cp命令,其参数也是十分之多,

-a == -pdr,集合参数

-d 对连接文件进行复制时,复制连接文件,而并非文件本身

-f fource强制的意思,即如果目标文件存在且无法打开,则删除后再尝试一次

-i,若目标文件已经存在,那么在操作开始前会进行操作是否进行的访问

-l,进行硬连接文件的创建,而非复制文件本体,硬连接

-p,连同文件的属性一起复制过去,而非使用默认的属性,即umask

-r,持续性的递归复制,常用于目录的复制行为

-s,复制成为”符号链接文件”,即”快捷方式”,软连接

-u,目标文件比源文件版本低的时候,会进行文件的更新

重要的内容,如果源文件由两个以上,则最后一个参数,一定是目录!表示多个文件复制进入同一目录

其中,请十分注意-a,-p参数,不同的用户,进行的操作,最后导致的结果会有较大差异

注意:这里要提到cp命令的两个默认属性:

1.cp命令进行文件的复制时,会改变用户名,用户名等属性,所以,不仅有-p,-r命令,更要有-a

2.cp命令再进行复制时,以源文件为主,意思是默认并不会复制符号连接文件,会去复制源文件

所以,要进行”快捷方式”的复制时,需要加上-d参数

另外很重要的一点,再使用-a保留文件属性时,使用root用户,一般用户没有修改用户,用户组的权限


rm 命令

移除文件/目录的命令

[Evilcrow@Evilcrow]$rm 文件/目录名

rm命令的参数不是很多,但是很关键

-f 同之前cp命令的参数,强制进行,忽略警告消息

-i 互动模式,即在删除文件前进行询问(root下的默认模式)

-r 递归删除,当目录不为空的时候,可以使用递归参数进行删除

建议:一般进行删除操作时,可以加上-i,仔细检查文件名,以防误删操作

通配符 *,此符号如其名,通配,可以表示任何字符{..}无穷个

意即,File*表示,以File开头的文件,*File表示,以File结尾的文件

再介绍两个技巧:

1.删除以-开头的文件,-之后接的是参数,那么误判该怎么处理?

很简单,使用.本目录即可化解,eg: ./-aaa-,即可表示本目录下的-aaa-文件

在man中,还提供了一种方法,rm – -aaa-
2.如何忽略-i参数,默认真的有时候有点烦

在命令前加上反斜杠\即可,eg:\rm test.即可不进行互动直接删除


mv 命令

进行文件/目录的移动,重命名的操作

[Evilcrow@Evilcrow]$ mv 源文件 目标文件

[Evilcrow@Evilcrow]$ mv 源文件 源文件 源文件.... 目标目录

参数与rm基本相同,略有差异

-f fource强制,若目标文件已经存在,不会进行询问,而是直接进行覆盖

-i 互动默认,会进行询问

-u 不同于-r的递归,(mv怎么能递归…),若源文件更新,则进行目标文件的更新

当两个文件/目录在同一个目录下时.,在进行mv命令的调用,即为重命名操作

rename可以进行多个文件的重命名,以后再进行详述

mv主要功能即在于进行文件的移动和重命名!


2.3 取得文件的路径名和文件名

看到这个标题,你会想到,之前不是有pwd命令进行路径的显示吗?

但是,此命令是对于长串的文件名(最长可达4096字符)进行文件名和路径名(目录名)的区别的命令

[Evilcrow@Evilcrow]$basename 绝对路径 获得文件名

[Evilcrow@Evilcrow]$dirname 绝对路径 获得路径名

这两个命令可能你看上去比较鸡肋,说出来你可能不信,我也觉得鸡肋

但是,则会两条命令既然存在就有他存在的意义,主要是用于程序中进行判断的命令.


3.文件内容查阅

上一节提到的是文件/目录的操作,实现完毕后,我们就来进行文件的查阅

首先预告一下,文件查阅的命令:cat,tac,more,less,head,tail,od,nl

3.1 直接查阅文件内容

直接查看文件内容可以使用cat,tac,nl几个命令进行查看


cat 命令

查阅文件内容的功能

cat命令具有几个很实用的参数

-A 相当于-vET,同样地,是个聚合参数

-b,可以列出行号,但是指针对于非空白行,空白行不列出行号

-E,将结尾的断行字符(\n)以”$”的形式输出

-n,完整的打引出行号,即使空白行也打引出行号

-T,将[Tab]制表符按照^T,进行打印

-v,列出一些看不出来的特殊字符

cat命令实际上是”Concatenate”即在屏幕上连续的显示文件内容


tac 命令

可能眼尖的你也发现了,tac命令正是cat命令的逆置!

tac命令的作用也正是与cat命令相反,将内容反向输出至屏幕上

两者的参数也都是相同的

但是,即便如此,还是不推荐平时使用cat和tac命令,因为一旦文件内容过长,那么

屏幕上并不能完整的显示出文件的内容,很不方便

而使用more,less,nl等命令,则十分方便


nl 命令

添加行号打印的功能

[Evilcrow@Evilcrow]$ nl 文件,即可在屏幕上显示文件内容

-b 指定行号指定的方式,有两种:

-b a,不论有无空行,都显示行号 cat -n

-b t,空行不显示行号,(默认值)

-n 列出行号表示的方法

-n ln 行号在屏幕左边显示

-n rn 行号在右边显示,不加0

-n rz 行号在右边显示,加0

-w :行号字符段占用的位数(即行号0的个数)

使用nl命令时,多个参数组合使用,比如“`[Evilcrow@Evilcrow]$nl -b a -n rz -w 3


3.2 翻页查看文件内容

刚才所介绍的,cat,tac,nl三个命令都是将文件内容输出到屏幕上的命令

当文件内容很多的时候,毕竟不方便,所以,就有以下的翻页查看命令

more 命令

一页一页的翻动

more使用的时候,可以作为一个程序对待,类似与man,可以进行操作

[Evilcrow@Evilcrow]$ more 文件

Space 向下翻一页

Enter 向下一行

/字符串 向下查找字符串

:f 立刻显示出文件名及当前行数

q 退出more程序

b或者Ctrl-b 进行退格

more命令只要按照以上要求操作就好

less 命令

less与more大同小异,只不过less功能更具有弹性,所以推荐使用less

Space 向下翻页

[Pagedown] 向下一页

[Pageup] 向上一页

/string 向下搜索字符串

?string 向上搜索字符串

n 向下一个查询

N 向上一个查询

q 离开less程序

以上即为less命令的操作,

是不是和man的用法很像啊?

对,没错,man文档实际上就是用less显示在屏幕上的

3.3 数据选取

以上的几个命令都是对文件内容的显示,那么如果我取出文件中的部分内容使用,怎么办呢?

head 与 tail命令

从文件开头/末尾取出一定行的内容(默认值为10行)

[Evilcrow@Evilcrow]$ head/tail [-number] 文件

其中number即为你指定后想要取出的行数

注意,number -,+的使用,对于head,-number表示减去后面若干行输出

而对于,tail +number表示减去前面若干行进行输出

这很方便在不知道文件总行数的情况下进行操作,而且,可以通过管道这两个命令联合使用


3.4 非纯文本文件

od 命令

将文件按照二进制进行读取

由C语言文件的知识可知,计算机中文件分为文本与二进制,之前的命令都是对文本文件适用

对于二进制文件,就得使用od命令了

[Evilcrow@Evilcrow]$ od [-参数] 文件

a :利用默认字符进行输出

c :利用ASCII码进行输出

d[SIZE] :利用十进制输出,每个整数SIZE个字节

o[SIZE] :利用八进制输出,每个整数SIZE个字节

x[SIZE] :利用十六进制进行输出,每个整数SIZE个字节

活用以上的参数,可以有效的处理二进制文件!

举个例子:[Evilcrow@EVilcrow]$ od -oCc test

意思即是,使用八进制输出,每个整数12个字节,按照ASCII码输出


3.5 创建文件与修改时间

之前讲了这么多的目录创建,现在该轮到文件的创建了

首先来了解几个概念:时间的几个概念

modification time(mtime):当文件的”数据内容”改变时,此时间刷新

status time(stime):当文件的权限发生改变的时候,此时间刷新

access time(atime):当此文件被引用,被访问时,此时间刷新

要查看这三个时间属性的方法,之前已经在ls的参数中提到过了–time=a/stime(mtime默认)

在系统的操作中,时间属性是很关键的!

那么,万一时间出错我们怎么修改呢?

touch 命令

用于新建文件,修改文件时间

[Evilcrow@Evilcrow]$ touch [-acdmt] 文件

-a 仅修改访问时间(atime)

-c 仅修该文件时间,若文件不存在,则不新建文件

-d 可以指定修改的日期,并非是当前的日期(默认),格式–date=”…..”

-m,仅修改mtime

-t 同-d,但是日期的格式为[YYMMDDhhmm]

注:平时最关心的时mtime,因为它记录了文件什么时候被修改。

注:可以在同一行中使用 ;来表示命令的顺序执行

touch最常用的情况:1.新建文件 2.修改文件日期为当前日期(mtime与atime)


PS:至此,Linux文件/目录的基本操作就告一段落了,但是你还记得吗?之前在文件属性中有10个字符

是不是匪夷所思呢?这就是文件的隐藏属性,属于下一篇探讨的内容了.

从这篇开始,换了新的输入法,同时合理使用了标题,我还会尽快使自己的博客风格成型的

06/16/2017

原创粉丝点击