第七章 文件与目录管理

本文介绍了Linux系统中文件与目录的基本管理操作,如显示属性、拷贝、删除和移动等。重点讲解了ls命令的常见用法,以及cp、rm、mv命令的功能和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=large][b]文件与目录管理:[/b][/size]

谈了谈目录与路径之后,再来讨论一下关於文件的一些基本管理吧!文件与目录的管理上,不外乎[color=red]『显示属性』、 『拷贝』、『删除文件』及『移动文件或目录』[/color]等等,由於文件与目录的管理在 Linux 当中是很重要的, 尤其是每个人自己家目录的数据也都需要注意管理!所以我们来谈一谈有关文件与目录的一些基础管理部分吧!

[size=small][b]文件与目录的检视: ls[/b][/size]

[img]http://dl2.iteye.com/upload/attachment/0099/5814/8d521e6e-5b73-3066-abde-2a984685fc13.png[/img]

在Linux系统当中,这个 ls 命令可能是最常被运行的吧!因为我们随时都要知道文件或者是目录的相关资讯啊~ 不过,我们Linux的文件所记录的资讯实在是太多了,ls 没有需要全部都列出来呢~ 所以,当你只有下达 ls 时,默认显示的只有:非隐藏档的档名、 以档名进行排序及档名代表的颜色显示如此而已。举例来说, 你下达『 ls /etc 』之后,只有经过排序的档名以及以蓝色显示目录及白色显示一般文件,如此而已。

那如果我还想要加入其他的显示资讯时,可以加入上头提到的那些有用的选项呢~ 举例来说,我们之前一直用到的 -l 这个长串显示数据内容,以及将隐藏档也一起列示出来的 -a 选项等等。

其实 ls 的用法还有很多,包括查阅文件所在 i-node 号码的 ls -i 选项,以及用来进行文件排序的 -S 选项,还有用来查阅不同时间的动作的 --time=atime 等选项(更多时间说明请参考本章后面touch的说明)。而这些选项的存在都是因为 Linux 文件系统记录了很多有用的资讯的缘故。那么 Linux 的文件系统中,这些与权限、属性有关的数据放在哪里呢? 放在 i-node 里面。关於这部分,我们会在下一章继续为你作比较深入的介绍啊!

无论如何, [color=red]ls 最常被使用到的功能还是那个 -l 的选项[/color],为此,很多 distribution 在默认的情况中, 已经将 ll (L 的小写) 配置成为 ls -l 的意思了!其实,那个功能是 Bash shell 的 [color=red]alias[/color] 功能呢~也就是说,我们直接输入 ll 就等於是输入 ls -l 是一样的~关於这部分,我们会在后续 bash shell 时再次的强调滴~

[size=small][b]复制、删除与移动: cp, rm, mv[/b][/size]

[color=red]要复制文件,请使用 cp (copy) 这个命令即可~[/color]不过, cp 这个命令的用途可多了~ 除了单纯的复制之外,还可以创建连结档 (就是捷径罗),比对两文件的新旧而予以升级, 以及复制整个目录等等的功能呢![color=red]至於移动目录与文件,则使用 mv (move), 这个命令也可以直接拿来作更名 (rename) 的动作喔![/color]至於移除吗?那就是 rm (remove) 这个命令罗~底下我们就来瞧一瞧先~

[size=small][b]cp (复制文件或目录)[/b][/size]

[img]http://dl2.iteye.com/upload/attachment/0099/5816/a6ee4bec-2f4c-3bb8-b941-8a38d475fc99.png[/img]

复制(cp)这个命令是非常重要的,不同身份者运行这个命令会有不同的结果产生,尤其是那个-a, -p的选项, 对於不同身份来说,差异则非常的大!底下的练习中,有的身份为root有的身份为一般帐号(在我这里用vbird这个帐号), 练习时请特别注意身份的差别喔!好!开始来做复制的练习与观察:

[img]http://dl2.iteye.com/upload/attachment/0099/5818/057ba602-a6e2-3a3c-a71d-d77efa2daf5e.png[/img]

这个 cp 的功能很多,由於我们常常会进行一些数据的复制,所以也会常常用到这个命令的。 一般来说,我们如果去复制别人的数据 ([color=red]当然,该文件你必须要有 read 的权限才行啊! ^_^)[/color] 时, 总是希望复制到的数据最后是我们自己的,所以,在默认的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是命令操作者本身。举例来说, 上面的范例二中,由於我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了! 这样说,可以明白吗?^_^

[color=red]由於具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档 (/etc/shadow) 以及一些配置档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行![/color]另外,如果你想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、运行以及文件拥有者等等), 否则,其他人还是无法针对你给予的文件进行修订的动作喔!注意注意!

[img]http://dl2.iteye.com/upload/attachment/0099/5820/c6eb40c3-333d-3b25-b43b-9ce9848a2c64.png[/img]

范例四可有趣了!使用 -l 及 -s 都会创建所谓的连结档(link file),但是这两种连结档却有不一样的情况。这是怎么一回事啊? 那个 -l 就是所谓的实体连结(hard link),至於 -s 则是符号连结(symbolic link), 简单来说,bashrc_slink 是一个『捷径』,这个捷径会连结到bashrc去!所以你会看到档名右侧会有个指向(->)的符号!

至於bashrc_hlink文件与bashrc的属性与权限完全一模一样,与尚未进行连结前的差异则是第二栏的link数由1变成2了! 鸟哥这里先不介绍实体连结,因为实体连结涉及 i-node 的相关知识,我们下一章谈到文件系统(filesystem)时再来讨论这个问题。


例题:
你能否使用vbird的身份,完整的复制/var/log/wtmp文件到/tmp底下,并更名为vbird_wtmp呢?
答:
实际做看看的结果如下:
[vbird@www ~]$ cp -a /var/log/wtmp /tmp/vbird_wtmp
[vbird@www ~]$ ls -l /var/log/wtmp /tmp/vbird_wtmp
-rw-rw-r-- 1 vbird vbird 96384 9月 24 11:54 /tmp/vbird_wtmp
-rw-rw-r-- 1 root utmp 96384 9月 24 11:54 /var/log/wtmp
由於vbird的身份并不能随意修改文件的拥有者与群组,因此虽然能够复制wtmp的相关权限与时间等属性, 但是与拥有者、群组相关的,原本vbird身份无法进行的动作,即使加上 -a 选项,也是无法达成完整复制权限的!


总之,由於 cp 有种种的文件属性与权限的特性,所以,在复制时,你必须要清楚的了解到:

是否需要完整的保留来源文件的资讯?
来源文件是否为连结档 (symbolic link file)?
来源档是否为特殊的文件,例如 FIFO, socket 等?
来源档是否为目录?

[size=small][b]rm (移除文件或目录)[/b][/size]

[img]http://dl2.iteye.com/upload/attachment/0099/5822/220c8578-aaed-3588-a9ee-9b85bda9f8bc.png[/img]

这是移除的命令(remove),要注意的是,通常在Linux系统下,为了怕文件被误杀,所以很多 distributions 都已经默认加入 -i 这个选项了!而如果要连目录下的东西都一起杀掉的话, [color=red]例如子目录里面还有子目录时,那就要使用 -r 这个选项了[/color]!不过,使用『 rm -r 』这个命令之前,请千万注意了,因为该目录或文件『肯定』会被 root 杀掉!因为系统不会再次询问你是否要砍掉呦!所以那是个超级严重的命令下达呦! 得特别注意!不过,如果你确定该目录不要了,那么使用 rm -r 来循环杀掉是不错的方式!

另外,范例四也是很有趣的例子,我们在之前就谈过,档名最好不要使用 "-" 号开头, 因为 "-" 后面接的是选项,因此,单纯的使用『 rm -aaa- 』系统的命令就会误判啦! 那如果使用后面会谈到的正规表示法时,还是会出问题的!所以,只能用避过首位字节是 "-" 的方法啦! 就是加上本目录『 ./ 』即可!如果 man rm 的话,其实还有一种方法,那就是『 [color=red]rm -- -aaa-[/color] 』也可以啊!

[size=small][b]mv (移动文件与目录,或更名)[/b][/size]

[img]http://dl2.iteye.com/upload/attachment/0099/5824/0f091f7c-7078-31bd-bdf1-7852b6ecbccf.png[/img]

这是搬移 (move) 的意思!当你要移动文件或目录的时后,呵呵!这个命令就很重要啦! 同样的,你也可以使用 -u ( update )来测试新旧文件,看看是否需要搬移罗! 另外一个用途就是『变更档名!』,我们可以很轻易的使用 mv 来变更一个文件的档名呢!不过,在 Linux 才有的命令当中,[color=red]有个 rename , 可以用来更改大量文件的档名[/color],你可以利用 man rename 来查阅一下,也是挺有趣的命令喔!


[size=large][b]取得路径的文件名称与目录名称[/b][/size]


我们前面介绍的完整档名 (包含目录名称与文件名称) 当中提到,完整档名最长可以到达 4096 个字节。 那么你怎么知道那个是档名?那个是目录名?嘿嘿!就是利用斜线 (/) 来分辨啊! 其实,取得档名或者是目录名称,一般的用途应该是在写程序的时候,用来判断之用的啦~ 所以,这部分的命令可以用在第三篇内的 shell scripts 里头喔! 底下我们简单的以几个范例来谈一谈 basename 与 dirname 的用途!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值