鸟哥系列Linux

本文详细介绍了Linux系统中的文件和目录权限设置,包括用户、群组和其他人的概念,以及权限的重要性。同时,文章还讲解了如何使用ls、chgrp、chown、chmod等命令来管理和改变文件权限。

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

转贴自  http://hi.baidu.com/esta_pessoa/blog/item/4c4a830161f81502728da557.html

鸟哥系列-6:Linux 的档案属性与目录配置(上)
2007年06月06日 星期三 下午 09:09
Linux 一般将档案可存取的方式分为三个类别,分别是owner/group/other, 且各有 read/write/excute 等权限。若管理得当,将会让您的 Linux 主机变的较为安全。

######################################################
使用者与群组

1:档案拥有者--->>> 例如当你将你的 e-mail 情书转存成档案之后,放在您自己的家目录,您总不希望被其它人看见自己的情书吧? 这个时候,你就把该档案设定成『只有档案拥有者,就是我,才能看与修改这个档案的内容』, 那么即使其它人知道你有这个相当『有趣』的档案,不过由于您有设定适当的权限, 所以其它人自然也就无法知道该档案的内容啰!

2:群组概念---->>>> 举个例子来说好了,假如在我的主机上面有两个团体,这第一个团体名称为 testgroup而他的成员是 test1, test2, test3 三个,第二个团体名称为 treatgoup 他的团员为 treat1, treat2,treat3,这两个团体之间是互相有竞争性质的, 但是却又要缴交同一份报告,然而每组团员又需要同时可以修改自己的团体内任何人所建立的档案, 且不能让非自己团体的其它人看到自己的档案内容!这个时候怎么办?

呵呵!在 Linux 底下可就很简单啦!我可以经由简易的档案权限设定,就能限制非自己团队( 亦即是群组啰 )的其它人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所建立的档案! 同时,如果我自己还有私人隐密的文件,仍然可以设定成让自己的团队成员也看不到我的档案数据。 很方便吧!另外,如果 teacher 这个账号是 testgroup 与 treatgroup 这两个群组的老师, 他想要同时观察两者的进度,因此需要两边的群组都能够进去观看,这个时候,您可以设定 teacher 这个账号,『同时支持testgroup 与 treatgroup 这两个群组!』,也就是说, 每个人都可以有多个群组的支持呢!


3:其它人的概念---->>> 假设又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦! 这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永远没有办法进入王家, 更不要说进到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朋友, 那么张小猪就可以透过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的『其它人, Others 』啰!

#####################################################

因此,我们就可以知道啦,在 Linux 里面,任何一个档案都具有『User, Group 及 Others』三个权限!
我们可以将上面的说明以底下的图示来解释:

每個檔案的擁有者,群組與 others 的示意圖
圖一、每個檔案的擁有者、群組與其他人的示意圖

不过,这里有个特殊的人物要来介绍的,那就是 『万能的天神』!这个天神具有无限的神力, 所以他可以
到达任何他想要去的地方,呵呵!那个人在 Linux 系统中的身份代号是 『 root 』啦!所以要小心喔!那
个 root 可是『万能的天神』喔!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Linux 使用者身份与群组记录的档案
在我们 Linux 系统当中,预设的情况下,所有的系统上的账号与一般身份使用者,还有那个   root 的相关
信息,都是记录在 /etc/passwd
 这个档案内的。至于 密码则是记录在 /etc/shadow 这个档案下。 此外,
Linux 所有的群组名称都纪录在 /etc/group 内!这三个档案可以说是 Linux 系统里面账号、密码、群组
信息的集中地啰! 不要随便删除这三个档案啊!  ^_^

#####################################################

Linux 档案权限概念--->>这个部分是相当的重要的,尤其对于初学者来说,因为档案的权限与属性是学习 Linux 的一个相当重要的关卡,如果没有这部份的概念,那么您将老是听不懂别人在讲什么呢! 尤其是当您在您的屏幕前面出现了『Permission deny』的时候,不要担心,『肯定是权限设定错误』啦!呵呵!

#####################################################


嗯!既然要让你了解 Linux 的档案属性,那么有个重要的也是常用的指令就必须要先跟你说啰!哪一个?!就是『   ls  』这一个 list 档案的指令啰!在你以 root 的身份登入 Linux 之后,下达『ls -al 』看看,会看到底下的几个咚咚:  
[root@tsai root]# ls -al 
total 64 
drwxr-x---    4 root     root         4096 Feb 14 22:02 . 
drwxr-xr-x   23 root     root         4096 Feb 16 13:35 .. 
-rw-r--r--    1 root     root         1210 Feb 10 06:03 anaconda-ks.cfg 
-rw-------    1 root     root        12447 Feb 14 23:22 .bash_history 
-rw-r--r--    1 root     root           24 Jun 11 2000 .bash_logout 
-rw-r--r--    1 root     root          234 Jul 6 2001 .bash_profile 
-rw-r--r--    1 root     root          217 Feb 9 22:06 .bashrc 
-rw-r--r--    1 root     root          210 Jun 11 2000 .cshrc 
drwx------    2 root     root         4096 Feb 14 21:54 .gnupg 
-rw-------    1 root     root            8 Feb 14 22:05 .mysql_history 
drwx------    2 root     root         4096 Feb 10 00:44 .ssh 
-rw-r--r--    1 root     root          196 Jul 11 2000 .tcshrc 
-rw-r--r--    1 root     root         1126 Aug 24 1995 .Xresources

第一栏      二 三       四            五      六        七 
[档案属性][档案数][拥有者][所有者群组][大小][建档日期][档名]


ls 是『list』的意思,与在早期的 DOS 年代的 dir 类似功能。而参数『-al』则表示列出所有的档案(包含隐藏档,就是档名前面第一个字符为 . 的那种档案)。如上所示,在你第一次以 root 身份登入 Linux 时,如果你输入指令后,应该有上列的几个东西,先解释一下上面七个字段个别的意思:
1>>> 第一栏代表这个档案的属性:这个地方 最需要注意了!仔细看的话,你应该可以发现这一栏其实 共有十个属性:
    • 第一个属性代表这个档案是『目录、档案或连结文件』:
      • 当为[ d ]则是目录,例如上表的第 11 行;
      • 为[ - ]则是档案,例如上表的第 5 行;
      • 若是[ l ]则表示为连结档(link file);
      • 若是[ b ]则表示为装置文件里面的可供储存的接口设备;
      • 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标。
    • 接下来的属性中,三个为一组,且均为『rwx』的三个参数的组合。其中,[ r ]代表可读、[ w ]代表可写、[ x ]代表可执行:
      • 第一组为『拥有人的权限』,以第五行为例,该档案的拥有人可以读写,但不可执行;
      • 第二组为『同群组的权限』;
      • 第三组为『其它非本群组的权限』。
#####################################################

除此之外,      需要特别留意的是 x 这个标号! 若文件名为一个目录的时候, 例如上表中的 .ssh 这个目录:

drwx------   3   root    root    4096    Jun 25 08:35    .ssh

可以看到这是一个目录,而且只有 root 可以读写与执行。但是若为底下的样式时,请问非 root的其它人是否可以进入该目录呢?

drwxr--r--   3   root    root    4096    Jun 25 08:35    .ss


咦!似乎好像是可以喔!因为有可读[ r ]存在嘛!『错!』答案是非 root 这个账号的其它使用者均不可进入 .ssh 这个目录,为什么呢? 因为   x 与 目录 的关系相当的重要, 如果您在该目录底下不能执行任何指令的话,那么自然也就无法进入了,因此, 请特别留意的是,如果您想要开放某个目录让一些人进来的话, 请记得将该目录的 x 属性给开放呦!

另外,你也必须要更加的小心的是,在 Windows 底下一个档案是否具有执行的能力是藉由『 附
檔名 』来判断的, 例如:.exe, .bat, .com 等等,但是 在 Linux 底下, 我们的档案是否能执
行,则是藉由是否具有 x 这个属性来决定的!所以,跟档名是没有绝对的关系的!

#####################################################

注意,仍然在讲这个,上面只是说了档案属性的具体十个信息.下面开始说后面的部分:

2>>>第二栏表示为 连结占用的节点 (i-node): 这个跟连结档 (link file) 比较有关系,   如果是目录的话,那么就与该目录下还有多少目录有关。
3>>>第三栏表示这个档案(或目录)的 『拥有人』
4>>>第四栏表示 拥有人的群组
   这里再次解释一下,在 Linux 中,你的 ID ( 如 root 或 test 等账号均是所谓的 ID ) 即是你的身份,而且你还有附属在一个或多个群组之下,例如刚刚我们上面提到的,你有一个团体 ( 即群组 ) 代号为 testgroup ,且这个群体里有三个人,其代号分别是 test1, test2, 与 test3,则这三个人为同一群组即 testgroup!那么如果以上图的[-rwxrwx---]的档案属性来看,如果该档案属于 test1 所有,那么 test2, test3 亦有读、写、执行的权力,因为他们都属于同一个 group 呀!而如果您不是属于 test1, test2, test3 的任何一个人,也不属于 testgroup 这个群组时,那么您将不具备读、写、执行这个档案的权限了!  

5>>>第五栏为这个档案的大小;

6>>>第六栏为这个档案的建档日期或者是最近的修改日期,分别为月份、日期及时间。请特别留意,如果您是以繁体中文来进行安装您的 Linux 时,那么预设的语系可能会被改为中文。而 由于中文无法显示在文字型态的终端机上面,所以这一栏会成为怪怪的乱码,这个时候,请修改一下 /etc/sysconfig/i18n 这个档案,里面的『 LC_TIME 』修改为:『 LC_TIME=en 』再储存离开,再登入一次,就可以得到英文字形显示的日期了!那么如何修改该档案呢?呵呵!以 root 身份用 vi 修改!

7>>> 第七栏为这个档案的档名,如果档名之前多一个『 . 』,则代表这个档案为『 隐藏档』,例如上表第 6 行的『.bashrc_history』档名即是隐藏档,由于我们有下一个参数为 ls -al,所以连隐藏档都列出来,如果你只输入 ls 则档名有加『 . 』的档案就不会被显示出来!

#####################################################
Linux 档案属性的重要性:   (此部分的话语我一句也不敢大意,因为确实十分重要的)
与 Windows 系统不一样的是,在 Linux 系统(或者说 Unix-Like 系统)当中,每一个档案都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢?基本上,最大的用途是在『安全性』上面的。举个简单的例子,在你的 系统中, 关于系统服务的档案通常只有 root 才能读写,或者是执行,例如 /etc/shadow 这一个账号管理的档案,由于该档案记录了你的系统中的所有账号的数据,因此是很重要的一个信息文件,当然不能让任何人读取,只有 root 才能够来读取啰!所以该档案的属性就会成为 [   -rw------- ]啰!  

那么, 如果你有一个开发团队,在你的团对中,你希望每个人都可以使用某一些目录下的档案,而 非你的团队的其它人则不予以开放呢?以上面的例子来说,testgroup 的团队共有三个人,分别是 test1, test2, test3 !那么我就可以将 test1 的 档案属性订为 [  -rwxrwx---  ]来提供给 testgroup 的工作团队使用啰!这可是相当重要的。  

再举个例子来说,如果你的目录权限没有作好的话,可能造成其它人都可以在你的系统上面乱搞啰!例如本来只有 root 才能做的开关机、ADSL 的拨接程序、新增或删除使用者等等的指令,若被你改成任何人都可以执行的话,那么如果使用者不小心给你重新开机啦!重新拨接啦!等等的!那么你的系统不就 会常常莫名其妙的挂掉啰!而且万一你的使用者的密码被其它不明人士取得的话,只要他登入你的系统就可以轻而易举的执行一些 root 的工作!可怕吧!因此, 在你修改你的 linux 档案与目录的属性之前,一定要先搞清楚,什么是可变的,什么是不可变的!千万注意啰!

#####################################################


如何改变档案权限

  • chgrp :改变档案所属群组
    chown :改变档案所属人
    chmod :改变档案的属性、 SUID 、等等的特性

1>>>改变所属群组, chgrp

           请记得,要改变成为的群组名称必须要在  /etc/group  里面存在的名字才行,否则就会显示错误!例如底下的例子中,我们要将 tmp 的群组改变一下,其中, users 这个群组本身已经存在 /etc/group 当中了,但是 testing 这个群组名字就不存在 /etc/group 当中,所以就会有错误讯息发生啦!  

语法: 
chgrp 群组名称 档案或目录

范例: 
[root@test root]# chgrp users tmp 
[root@test root]# ls –l 
drwx------    2 root     root         4096 Oct 19 11:43 drakx/ 
drwx------    2 root     users        4096 Oct 19 21:24 tmp/ 
[root@test root]# chgrp testing tmp 
chgrp: invalid group name `testing'   <==发生错误讯息啰!



2>>>改变档案拥有者, chown
           要注意的是,使用者必须是已经存在系统中的,也就是在   /etc/passwd  这个档案中有纪录的使用者名称才行改变。 chown 的用途还满多的,他还可以顺便直接修改群组的名称呢!此外, 果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 –R 的参数即可!

范例:  
语法: 
chown [ -R ] 账号名称 档案或目录 
chown [ -R ] 账号名称:群组名称 档案或目录

范例: 
[root@test root]# chown test tmp 
[root@test root]# ls -l 
total 28 
drwx------    2 root     root         4096 Oct 19 11:43 drakx/ 
drwx------    2 test     users        4096 Oct 19 21:24 tmp/ 
[root@test root]# chown –R root:root tmp 
[root@test root]# ls –l 
drwx------    2 root     root         4096 Oct 19 11:43 drakx/ 
drwx------    2 root     root         4096 Oct 19 21:24 tmp/


那么什么时候要使用 chown 或 chgrp 呢?!或许您会觉得奇怪吧?!是的,确实有时候需要变更档案的拥有者的,最常见的例子就是在 copy 档案给你之外的其它人时,我们使用最简单的 cp 来说明好了,  
语法: 
cp 来源档案 目的档案

假设您今天要将 .bashrc 这个档案拷贝成为 .bashrc_test ,且是要给 test 这个人,您可以这样做:  
[root@test root]# cp .bashrc .bashrc_test 
[root@test root]# ls –al .bashrc* 
-rw-r--r--    1 root     root          226 Feb 16 2002 .bashrc 
-rw-r--r--    1 root     root          226 Oct 21 14:24 .bashrc_test

哇!怎么办? .bashrc_test 还是属于 root 所有,如此一来,即使你将档案拿给 test 这个使用者了,那他仍然无法修改的( 看属性就知道了吧! ),所以你就必须要将这个档案的拥有者与群组修改一下啰!

我自己来说一下吧.执行: chown –R test:test  .bashrc_test     

{在这里说明一下test:test 前面一个是改变所有者为test,后面一个是改变群组为test,是不同的,也可以这么改root:test,这么所有者就是root,群组为test.}

##########################################################

3>>>改变九个属性 ( chmod )

           其实关于chmod的话,很多人都是十分了解的,这里就说一个比较重要的吧:读=4,写=2,执行=1.记住这个加法就能改变你想改变的任何情况.


几个常用的改变值:

如果要将属性变成  -rwxr-xr-- 』呢?那么就成为   [4+2+1][4+0+1][4+0+0]=754  啰!所以你需要下达   chmod 754 filename

如果要将他 变成可执行档,并且 不要让其它人修改此一档案的话,那么就需要 -rwxr-xr-x 这一个   755  的属性,所以   chmod 755 test.sh  就需要这样做啰!

另外,有些档案你不希望被其它人看到,例如 -rwxr-----,那么就下达 chmod 740 filename 吧!

{{{{
         x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建档案或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^
}}}



关于使用u,g,o,+,-,=的方法我就不说了,因为完全可以用数字代替.

#####################################################

Linux 支持的档案格式与档案种类

Linux 能够支持的档案格式与核心是否有编译进去有关,所以你可以到你的 Linux 系统的

  •  
    /lib/modules/`uname –r`/kernel/fs
底下看一看,如果有你想要的档案格式,那么这个核心就有支持啦!目前使用的最广泛的虽然还是 ext2 ,不过,最近释出的 Linux distribution 大多已经预设采样   ext3 或 reiserfs  这种具有 日志式管理( Journaling )的档案格式了。那为什么要使用 ext3 这种档案格式呢?我们采用第一个使用 ext3 做为 Linux distribution 的 Red Hat 公司中,首席核心开发者 Michael K. Johnson 的话:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
『为什么你想要从ext2转换到ext3呢?有四个主要的理由:可利用性、数据完整性、速度及易于转换』

『可利用性』,他指出,这意味着从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复。ext3的日志式条件可以避免数据毁损的可能。他也指出:

『除了写入若干数据超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬盘读取头的移动能更有效的进行』

然而或许决定的因素还是在Johnson先生的第四个理由中。

『它是可以轻易的从ext2变更到ext3来获得一个强而有力的日志式档案系统而不需要重新做格式化』。『那是正确的,为了体验一下ext3的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作』。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在这里,您只要记得,我们 Linux 正统的档案格式是 ext2 ,而目前有逐渐被 Journaling 的档案格式取代的趋势就是了。 
#####################################################

Linux 档案种类与附档名

Linux 的档案种类主要有底下这几种:

 正规档案 (regular file ): 就是一般我们在进行存取的类型的档案,在由 ls –al 所显示出
    来的属性方面,第一个属性为 [ - ],例如 [-rwxrwxrwx ]。另外,依照档案的内容,又大略可
    以分为:
          o 纯文字文件(ASCII):这是 Unix 系统中最多的一种档案类型啰,称为纯文字文件是因为内容为我们人类可以直接读到的数据, 例如数字、字母等等。几乎只要我们可以用来做为设定的档案都属于这一种档案类型。 举例来说,您可以下达『 cat ~/.bashrc 』就可以看到该档案的内容。 (cat 是将一个档案内容读出来的指令)

        o    二进制文件(binary):还记得我们在『 Linux 是什么 』那一章里面的 GNU 发展史中提过, 我们的系统其实仅认识且可以执行二进制档案 (binary file) 吧?没错~ 您的Linux 当中的可执行档 (scripts, 文字型批次文件不算) 就是这种格式的啦~ 举例来说,刚刚下达的指令 cat 就是一个 binary file 。
       
o    数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件 (data file)。举例来说,我们的 Linux 在使用者登入时,都会将登录的数据记录在 /var/log/wtmp 那个档案内,该档案是一个 datafile ,他能够透过 last 这个指令读出来! 但是使用 cat 时,会读出乱码~因为他是属于一种特殊格式的档案。

 目录 (directory):就是目录啰~第一个属性为 [ d ],例如 [drwxrwxrwx]。
• 连结档 (link):就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ], 例如
    [lrwxrwxrwx] ;
 设备与装置文件 (device):与系统周边及储存等相关的一些档案, 通常都集中在 /dev 这个目
    录之下!通常又分为两种:
          o 区块 (block) 设备档 :就是一些储存数据, 以提供系统存取的接口设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的档案啦!第一个属性为 [ b ];

          o   字符 (character) 设备档 :亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!第一个属性为 [ c ]。

 资料接口文件 (sockets):既然被称为数据接口文件, 想当然尔,这种类型的档案通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket 来进行数据的沟通了。第一个属性为 [ s ], 最常在 /var/run 这个目录中看到这种档案类型了。

 数据输送文件 (FIFO, pipe): FIFO 也是一种特殊的档案类型,他主要的目的在解决多个程序同时存取一个档案所造成的错误问题。 FIFO 是 first-in-first-out 的缩写。 第一个属性为 [p] 

那么使用刚刚的『 ls -al 』这个指令,你就可以简单的经由判断每一个档案的 第一个属性来了解这个档案是何种类型!很简单吧! 除了设备文件是我们系统中很重要的档案,最好不要随意修改之外(通常他也不会让你修改的啦!),.

另一个比较有趣的档案就是连结档
如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows 底下有所谓的 快捷方式。同样的,你可以将 linux 下的连结档简单的视为一个档案或目录的快捷方式。在 Linux 中,连结档可以直接连结到主程序, 因此你只要改了这个连结文件,则主程序亦被改变了!

#####################################################
Linux 档案附档名:

基本上,Linux 档案的附档名是没有意义的 !因为由前面的说明我们可以知道, 一个 Linux 档案能不能被执行,与他的第一栏的十个属性有关,与文件名根本一点关系也没有

虽然附档名没有什么真的帮助,不过,由于我们仍然希望可以藉由附档名来了解该档案是什么东西?!所以, 通常我们还是会以适当的附档名来表示该档案是什么种类的。底下有数种常用的附档名:
• *.sh : 批次檔 ( scripts ),因为批次档为使用 shell 写成的,所以附档名就编成 .sh 啰;
• *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩档。这是因为压缩软件分别为 gunzip, tar
     等等的,由于不同的压缩软件,而取其相关的附档名啰!
• *.html, *.php:网页相关档案,分别代表 HTML 语法与 PHP 语法的网页档案啰! .html 的档案可使用网页浏览器来直接开启,至于 .php 的档案, 则可以透过 client 端的浏览器来 server端浏览,以得到运算后的网页结果呢!
另外,还有程序语言如 perl 的档案,其附档名也可能取成 .pl 这种档名!基本上, Linux 上面的档名真的只是让你了解该档案可能的用途而已,真正的执行与否仍然需要属性的规范才行!


Linux 文件名称的限制:

由于 Linux 在文字接口下的一些指令操作关系,一般来说,您在设定 Linux 底下的文件名称时, 最好可
避免一些特殊字符比较好!例如底下这些:
      *?><;&![]|/'"`(){}
因为这些符号在文字接口下,是有特殊意义的!另外,文件名称的开头为小数点『.』时, 代表这个档案
『隐藏档』喔!同时,由于指令下达当中,常常会使用到 -option 之类的参数, 所以您最好也避免
档案档名的开头以 - 或 + 来命名啊!

#####################################################
Linux 目录配置的依据 FHS

目录树主要的特性有:
• 目录树的启始点为根目录 (/, root);

• 每一个目录不止能使用本地端的 partition 的档案系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。

• 每一个档案在此目录树中的文件名(包含完整路径)都是独一无二的。

此外,根据档名写法的不同,也可将所谓的路径 (path) 定义为绝对路径 (absolute) 相对路
(relative)

绝对路径为:由根目录 (/) 开始写起的文件名或目录名称。
相对路径为:相对于目前路径的文件名写法。

特别注意这两个特殊的目录:
    
• . :代表当前的目录,也可以使用 ./ 来表示;
    
• .. :代表上一层目录,也可以 ../ 来代表。

这个 . 与 .. 目录概念是很重要的,您常常会看到 cd .. 或 ./command 之类的指令下达方式, 就是代表上一层与目前所在目录的工作状态喔!很重要的吶!此外,针对『档名』与『完整档名 (由 / 开始写起的文件名)』 的字符限制大小为:
    
• 单一档案或目录的最大容许文件名为 255 个字符;
    
• 包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。

我们知道 /var/log/ 底下有个文件名为 message ,这个 message 档案的最大的档名可达 255 个符。

var 与 log 这两个上层目录最长也分别可达 255 个字符。但总的来说,由 /var/log/messages 这样完整
档名最长则可达 4096 个字符。

#############################################
Linux 目录配置:
由于 root 这个目录是管理员 root 的家目录,这个家目录可重要了!所以一定要设定成较为严密的 700 ( rwx------ )这个属性才行吶!如果以较为完整的树状目录来视察的话,可以将整个 Linux 的树状目录会制程下图:
请注意,每个目录都是依附在 / 这个根目录底下的,所以我们在安装的时候一定要有一个 / 对应的 partition 才能安装的原因即在于此!这也就是我们俗称的『树状目录』啰!

鸟哥系列-6:Linux 的档案属性与目录配置(下)
2007年06月07日 星期四 上午 01:48
~~~~~~~~~~~~
接上回~
#####################################

每个目录的大致内容如下表所示:  
/bin这是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用的执行档的地方(这些执行档的执行方法会在后面提到),有时候这个目录的内容与 /usr/bin 是一样的(有时候甚至会使用连结档哩),是给一般使用者使用的执行程序放置的所在!
/boot没错,这里就是放置你 Linux 核心与开机相关档案的地方,这个目录底下的 vmlinuz-xxx 就是 Linux 的 Kernel 啦!粉重要的东西!而如果你的开机管理程序选择 grub 的话,那么这个目录内还有 /boot/grub 这个次目录呦!
/dev摆放一些与装置有关的档案。基本上 Unix 或 Linux 系统均把装置当成是一个档案来看待,例如 /dev/fd0 代表软盘,亦即 Windows 系统下的 A 槽,而 /dev/cdrom 则代表光盘,等等!而如上所述,在这个目录底下的档案型态通常分为两种喔,分别是管理磁盘 Input/Output 的 Block 档案与周边的 Character 档案。
/etc系统在开机过程中需要读取的档案均在这个目录中,例如 Lilo 的参数、人员的账号与密码、系统的主要设定、http 架站的参数内容、你所要开启的服务项目等等都在这个目录中,所以在这个目录下工作的时候,请记得一定要备份,否则档案被改掉了可是很麻烦的!
/etc/rc.d这个路径主要在记录一些开关机过程中的 scripts 档案, scripts 有点像是 DOS 下的批次档(.bat檔名)
/etc/rc.d/init.d所以服务预设的启动 scripts 都是放在这里的,例如要启动与关闭 iptables 的话,可以: 
/etc/rc.d/init.d/iptables start 
/etc/rc.d/init.d/iptables stop
/etc/xinetd.d这个路径在较新的 Linux distribution 当中才有,由于早期的版本用来开启服务的档案是 inetd.conf ,但是在较新的版本中,开启服务的项目已经变成使用 xinetd.conf 这个档案,因此,你若需要启动一些额外的服务的话,在 Mandrake 9.0 或者是 Red Hat 7.0 以后就要到 /etc/xinetd.d 这个目录下了。
/etc/X11这是与 X windows 有关的设定文件所在的目录,尤其里面的 XF86Config-4 更是重要呢!
/home基本上,这是系统预设的使用者的家目录( home directory ),在你新增一般使用者账号的时候,预设的使用者家目录都在这里设定好啰!
/lib在 Linux 执行或编译一些程序的时候,均会使用到一些函式库(library),就在这个目录下
/lost+fount系统不正常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。例如你加装一棵硬盘于 /disk 中,那在这个目录下就会自动产生一个这样的目录 /disk/lost+found
/mnt这是软盘与光盘预设挂载点的地方;通常软盘挂在 /mnt/floppy 下,而光盘挂在 /mnt/cdrom 下,不过也不一定啦!只要你高兴,随便找一个地方来挂载也可以呀!
/proc系统核心与执行程序的一些信息。例如你的网络状态的问题啦!这个目录将在启动 Linux 的时候自动的被挂上,而且该目录底下不会占去硬盘空间!因为里面都是『内存』内的数据啦
/root系统管理员的家目录
/sbin放置一些系统管理常用的程序,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。与 /bin 不太一样的地方,这个目录下的程序通常是给 root 等系统管理员使用的程序喔!
/tmp这是让一般使用者暂时存放档案的地方,例如你在安装 Linux 下的软件时,可能软件预设的工作目录就是 /tmp ,所以你要定期的清理一下,当然,重要数据最好不要放在这里!
/usr这是最重要的一个目录了,里面含有相当多的系统信息,内有许多目录,用来存放程序与指令等等。这个目录有点像是 Windows 底下的『Program Files』那个目录说~
/usr/bin放置可执行程序,如前所说,这个目录的档案与 /bin 几乎是相同的。
/usr/include一些套件的header檔。基本上,当我们在以 tarball 方式( *.tar.gz 的方式安装软件)安装某些数据时,会使用到的一些函式库都在这个目录底下喔!
/usr/lib内含许多程序与子程序所需的函式库。
/usr/local在你安装完了 Linux 之后,基本上所有的配备你都有了,但是软件总是可以升级的,例如你要升级你的 proxy 服务,则通常软件预设的安装地方就是在 /usr/local 中( local 是『当地』的意思),同时,安装完毕之后所得到的执行文件,为了与系统原先的执行文件有分别,因此升级后的执行档通常摆在 /usr/local/bin 这个地方。

给个建议啦,通常 VBird 都会将后来才安装上去的软件放置在这里,因为便于管理呦!

/usr/sbin放置管理者使用程序,与 /sbin 类似的功能
/usr/share/doc放置一些系统说明文件的地方,例如你安装了 lilo 了,那么在该目录底下找一找,就可以查到 lilo 的说明文件了!很是便利!
/usr/share/man放置一些程序的说明文件的地方,那是什么?呵呵!就是你使用 man 的时候,会去查询的路径呀!例如你使用 man ls 这个指令时,就会查出 /usr/share/man/man1/ls.1.bz2 这个说明档的内容啰!
/usr/src这是放置核心原始码的预设目录,未来我们要编译核心的时候,就必须到这个目录底下呦!
/usr/X11R6X Window System存放相关档案的目录
/var这个目录可就重要了!所有服务的登录文件或错误讯息档案(log files)都在 /var/log 里面,此外,一些数据库如 MySQL 的数据库则在 /var/lib 里头,此外,使用者未读邮件邮件的预设放置地点为 /var/spool/mail !呵呵!你说重不重要呀!?


#############################################
需要注意的目录

在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及预设相关的用途:  
  • /etc这个目录相当重要,如前所述,你的开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那你的系统大概也就差不多该死掉了!而在往后的文件中,你会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是开启一些 Linux 系统服务 scripts (可以想成是 批次檔 )的地方。而在 /etc/rc.d/rc.local 这个档案是开机的执行档,有点像是旧 Windows 系统下的 autoexec.bat 及 config.sys 檔。所以,如果你有需要在开机加载的服务或执行档案,可以写在这个档案的最后一行,则开机时就会自动帮你加载执行档了!
  • /bin, /sbin, /usr/bin, /usr/sbin:这是系统预设的执行文件的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个执行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统使用者使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!
  • /usr/local:这是系统预设的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。安装在这里有个好处,因为目前大家的系统都是差不多的,所以如果你的系统要让别人接管的话,也比较容易上手呀!也比较容易找的到数据喔!因此,如果你有需要的话,通常我都会将 /usr/local/bin 这个路径加到我的 path 中
  • /home:这个是系统将有账号的人口的家目录设置的地方。
  • /var:这个路径就重要了!不论是登入、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的档案数据中察看问题的所在啰!而 mail 的预设放置也是在这里,所以他是很重要的喔!
  • /usr/share/man, /usr/local/man:这两个目录为放置各类套件说明档的地方,例如你如果执行 man man,则系统会自动去找这两个目录下的所有说明文件,如果有相同的数据就会叫出来给你幽!
######################

分区小技巧》》》》
建议不可与 root partition 分开的目录

在 Linux 的安装里面,最重要的就是根目录 / 所在的那个 partition 了。 我们也可以将其它的例如 /home 放在不同的partition 里面。 那么是否有   『一定』要放在 root partition 内的目录呢?有啊!那就是: /etc/, /sbin/,/bin/, /dev/ 以及 /lib/ 这几个目录了。

为什么呢?因为我们的 Linux 系统在开机的时候,一开始进行核心加载时, 只会挂载一个 partition ,那就是 / 。但是开机的时候会用到很多的指令与函式库,    举例来说,要挂载, 就得需要 mount 这支程序,而且我们也需要 init 这支程序,还需要用到很多的设定档,例如 /etc/inittab 等等。而我们核心的模块则是放置在 /lib 里面。当然, /dev 是所有装置放置的目录, 也需要在开机的时候使用到的。因此,这些目录都需要跟 / 绑在一起喔! 先有概念即可,下面两章会跟您介绍所谓的 partition 概念的!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
建议最好独立成为单一 partition 的目录

上面提到的是最好不要跟 / 这个 partition 分离的目录。至于有些目录则是因为安全性与特殊功能性,而希望能够独立成为一个自己的 partition 呢!例如: /home, /usr, /var, /tmp 等等。

我们必须要先知道的,系统上的使用者个人家目录在 /home 里面, 这个目录也是可能被使用的最频繁的目录之一。此外,为了资源分配较为平均, 我们可能会希望针对每个人限制他可以使用的最大硬盘总量(quota),在这个前提之下, 您就必须要将 /home 独立出来,而且最好这个 partition 能够大一点,尤其是您的 Linux 是作为档案服务器 (file server) 时,就更形重要了。至于 /usr 则是一些程序安装的目录,也可以独立出来的;还有 /var/, 这个目录由于记录了相当多的常用数据,   读取真的是很频繁,       所以是 『很容易挂点的 partition 一! 
如果能够将他独立出来, 那么当 /var/真的、万一、不小心挂点时,就不会影响到其它的 partition , 最起码能有一定程度的安全性啦!

• 特别重要的几个目录
    除了针对 partition 的观念来谈目录的重要性之外,有几个比较重要的目录您也需要了解一下:
    
 /etc:这个目录是系统设定文件放置的地方, 包括您系统上的账号与密码 (/etc/passwd,/etc/shadow),还有开机时所要用到的各项设定值 (/etc/sysconfig/*) ,还有各主要的网络服务的设定文件,都在这个目录中。 意思就是说,如果这个目录底下的档案被删除或者是死掉了,嘿嘿~ 您的系统大概也就需要『很花功夫』的重建了~ ^_^。因此, 一般鸟哥都会定期将这个目录的所有档案给他备份下来, 反正这个目录的大小应该不会超过 50MB 才对,多多备份,有备无患啊!
   
 /usr/local:虽然说目前已经将这个目录的重要性移动到 /opt 了, 但是鸟哥还是比较习惯将我自己开发或自行额外安装的软件放置在这个 /usr/local 目录下。 如果您的 Linux 系统是多人共管的话,那么,养成一个良好的操作习惯是有必要的。 那么安装软件的习惯也要好好建立起来啊~不要随意安装呢! 统一放置在 /usr/local 或者是 /opt 底下吧! ^_^
    
 /var:在上面提过一次,这里再次强调。 这个目录是在管理系统运作过程中的重要中间暂存数据的,例如 /var/lib 与 /var/run 。 此外,最终的数据例如邮件 /var/spool/mail 也是放置在这个目录中~ 另外,几乎所有服务的登录文件 (可以记录谁、什么时候、由哪里登入主机、做了什么事等等信息!) 都放在/var/log 这个目录下,因此,这个目录也很重要。记得常常去检查/var/log/messages 这个档案是否有异常啊~

0
-0-0 -0-0-0下面的部分可以选看,因为我个人觉得不是十分重要了,重要的都用红笔标出了哦~0 -0 -0-0
一般主机可能会分配的磁盘情况:

通常一般的大型主机都不会将所有的数据放置在一个磁盘中(就是只有一个『 / 』根目录),这有几个目的: 
  1. 安全性考虑:你的系统通常是在 /usr/ 中,而个人数据则可能放置在 /home 当中,至于一些开机数据则放置在 /etc 当中。如果将所有的数据放在一起,当你的系统不小心被黑客破坏,或者不小心自己砍了一个小东西,则所有的咚咚也都跟着不见了.....这对于我们市井小民 或许无所谓,再安装一次就好了,但是对于一些大型企业可不行这样!因此需要将数据分别放置于不同的磁盘中,会比较保险些。

  2. 便利性:如果你需要升级你的系统的话,是否需要重新 format 安装呢?有些数据例如 /home 里面的数据为个人用户的数据,似乎与系统无关!所以如果你将这些数据分别放置于不同的磁盘,则你要升级或者进行一些系统更动时,将比较有弹性。

你或许可以将你的系统做成这样的 partition 分布: 
  • /
    /boot
    /usr
    /home
    /var

这是比较常见的磁盘分布情况,其中, 
  • / 根目录可以分配约 256 MB 以内;
  • /boot 大概在 50 MB 就可以了,因为开机档案并不大;
  • /var 就至少需要 1GB 以上,因为你的 mail 、 proxy 预设的储存区都在这个目录中,除非你要将一些设定改变!
  • /home  /usr 通常是最大的,因为你所安装的数据都是在 /usr/ 当中,而用户数据则放置在 /home 当中,因此通常书上都会建议你将所剩下的磁盘空间平均分配给这两个目录说!


无论如何,每部主机的环境与功能用途都不相同,自然其磁盘的分配就会不太一样,因此,上面的设定您就看看就好,等您将整个网页内容全 K 完了,那么大概就知道怎样设定您的主机最恰当啦!接着下来,我们来谈一谈简单的档案与目录的管理了!



鸟哥系列-7:Linux 档案与目录管理(上)
2007年06月07日 星期四 下午 05:00
在这里先做一个解释:在下载的书本中,是先说磁盘系统管理,再说档案目录管理的,这里和网页的内容正好颠倒过来了。我2个都看了一下,从网页的顺序入手比较好理解。也可以承接上文。都是从基本shell开始。

##########################################

绝对路径与相对路径:

  • 绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录。
  • 相对路径:路径的写法『 不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 『 cd ../man』这就是相对路径的写法啦!
好了,既然要谈到目录这个东西,自然就需要了解一下有哪些常用的目录『符号』代表的意义啦!
 
.     代表此层目录 
..    代表上层目录 
~     代表自己的家目录 
~user 代表到 user 这个人的家目录
 
#####################################################
cd 与 pwd

cd
语法
[root @test /root ]# cd [相对路径或绝对路径] 
参数说明: 
路径有『相对路径』与『绝对路径』的分别,请千万小心啰! 
范例: 
[root @test /root]# cd ..       <==回到上一层目录 
[root @test /root]# cd ../home     <==相对路径的写法 
[root @test /root]# cd /var/www/html  <==绝对路径的写法 
[root @test /etc]# cd         <==回到使用者的家目录 
[root @test /etc]# cd ~         <==回到使用者的家目录! 
[root @test /etc]# cd ~test      <==回到 test 这个使用者的家目录


这里自己说明一下,pwd -p可以显示完整的目录名路径而不是连接档。他可以让我们取得正确的目录名称,而不是以连结文件的路径来显示的。如果您是 Fedora Core 4 的话,刚刚好, /var/mail 是 /var/spool/mail 的连结档, 所以,透过到/var/mail 下达 pwd -P 就能够知道这个参数的意义啰~ ^_^


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mkdir 与 rmdir 管理目录:

语法
[root @test /root ]# mkdir [-mp] [目录名称] 
参数说明: 
-m :设定档案的权限喔!直接设定,不需要看 umask 这个内容的脸色! 
-p :帮助你直接将上面的目录递归建立起来! 
范例: 
[root @test /root]# cd tmp 
[root @test /tmp]# mkdir test<==建立名称为 test 的目录 
[root @test /tmp]# mkdir -p test1/test2/test3/test4 <==直接建立 test2...等上层目录 
[root @test /tmp]# mkdir -m 711 testqq <==建立权限为 711 的目录! 
[root @test /tmp]# ll test* 
drwxrwxr-x    2 test    test        4096 Feb 6 20:47 test/ 
drwxrwxr-x    3 test    test        4096 Feb 6 20:48 test1/ 
drwx--x--x    2 test    test        4096 Feb 6 20:48 testqq/

rmdir:

语法
[root @test /root ]# rmdir [-p] [目录名称] 
参数说明: 
-p :将上层的目录也删除吧! 
范例: 
[root @test /root]# rmdir test<==删除名称为 test 的目录 
[root @test tmp]# ll 
drwxrwxr-x    3 test    test        4096 Feb 6 20:48 test1/ 
[root @test tmp]# rmdir test1 
rmdir: `test1': Directory not empty 
[root @test tmp]# rmdir -p test1/test2/test3/test4 
[root @test tmp]$ ll

说明
如果想要建立删除旧有的目录时,就使用 rmdir 吧!例如将刚刚建立的 test 杀掉,使用 rmdir test 即可!请注意呦!目录需要一层一层的删除才行!而且被删除的目录里面必定不能还有其它的目录或档案!那如果要将所有目录下的东西都杀掉呢?!这个时候就必须使用 rm -rf test 啰!不过,还是使用 rmdir 比较不危险!不过,你也可以尝试以 -p 的参数加入,来删除上层的目录喔! 

关于ubuntu中没有ll这个命令,这里说一下:ll =ls -ltr    默认没有ll可以通过命令:
alias ll='ls -ltr'
来解决。

-----------------------------------

环境变量 PATH:

在提过了绝对路径、相对路径与指令的下达方式之后,您应该会稍微注意到一件事情,那就是:『为什么我可以在 /root 底下执行 /bin/ls 这个档案呢?』对呀!为什么我可以直接执行 ls 就一定可以显示出一些讯息而不会说找不到该档案呢?这是因为环境变量 PATH 的帮助所致呀!当我们在执行一个指令的时候,系统会依照 PATH 的设定去每个 PATH 定义的路径下搜寻档案,先搜寻到的指令档案先被执行之!现在,请下达 echo $PATH , echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以即会显示出目前的 PATH 了! 
[root@test root]# echo $PATH 
/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin
 
注意到了吗?对啦! /bin 在 PATH 的设定之中,所以自然就可以找的到 ls 啦! 
    • 如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎么办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行文件了,因此就会告诉你, command not found !那么该怎么克服这种问题呢?有两个方法,其一:直接将 /root 的路径加入 PATH 当中!如何增加?可以使用:

    • PATH=”$PATH”:/root

    这种方式来增加即可!另一种方式则是使用完整档名,亦即直接使用相对或绝对路径来执行,例如: 
    • /root/ls
      ./ls
    因为在同一个目录中,而我们又知道在同一个目录中的目录符号为『 . 』,因此,就以上面的 ./ls 来执行也可以!这种执行方式以后您应该会很常见到才对!
    • 如果我有两个 ls 档案在不同的目录中,例如 /usr/local/bin/ls 底下与 /bin/ls 那么当我下达 ls 的时候,那个 ls 会被执行?那还用说,就找出 PATH 里面那个目录先被查询,则那个目录下的档案就会被先执行了!
    • 咦!既然如此的话,那么为何不要在 PATH 里面加入 . 这个目录,如此一来的话,不就可以直接在所在目录执行档案了吗?因为 . 代表所在目录嘛!是这样没错!但是有没有想过,如果某天,某个怪怪的使用者在 /tmp 里面写了一个 ls 的档案,偏偏他是有害的档案,那么当你在 /tmp 底下执行 ls 时,怎么办?!没错,可能会『中标』,所以啰,为了安全起见,不建议将『 . 』加入 PATH 的搜寻当中

##############################################
下面是基本shell:ls ,cp ,rm ,mv .

我只把基本用法列出就足够了。

  • ls

  • 语法
    [root @test /root ]# ls [-ailS] 
    参数说明: 
    -a       :全部的档案都列出(连同隐藏档) 
    -i       :印出 inode 的值 
    -l       :长的列出,连同档案大小的数据等等 
    -S       :以档案大小排序 
    --color=never     :不要显示颜色 
    --color=always    :均显示颜色 
    --color=auto      :由系统自行判断! 
    范例: 
    [root @test /root]# ls -al 
    total 48 
    drwxr-x---    4 root     root         4096 Mar 10 00:37 . 
    drwxr-xr-x   21 root     root         4096 Mar 10 20:16 .. 
    -rw-------    1 root     root          524 Mar 10 00:40 .bash_history 
    -rw-r--r--    1 root     root           24 Jun 11 2000 .bash_logout 
    -rw-r--r--    1 root     root          266 Jun 11 2000 .bash_profile 
    -rw-r--r--    1 root     root          249 Mar 6 20:50 .bashrc 
    -rw-r--r--    1 root     root          210 Jun 11 2000 .cshrc 
    drwx------    2 root     root         4096 Mar 9 11:06 .gnupg 
    -rw-------    1 root     root          524 Jan 16 14:37 .mysql_history
    drwx------    2 root     root         4096 Mar 9 11:06 .ssh 
    -rw-r--r--    1 root     root          196 Jul 11 2000 .tcshrc 
    -rw-r--r--    1 root     root         1126 Aug 24 1995 .Xresources 
    [root @test /]# ls 
    bin   dev    etc   lib         misc opt   root tftpboot usr 
    boot disk1 home lost+found mnt   proc sbin tmp       var 
    [root @test /]# ls --color=never 
    bin   dev    etc   lib         misc opt   root tftpboot usr 
    boot disk1 home lost+found mnt   proc sbin tmp       var 
    [root @test /]# ls -al|more
            完整的呈现档案的修改时间 *(modification time)
    [root@linux ~]# ls -al --full-time ~
    total 252
    drwxr-x---   9 root root 4096 2005-07-16 23:40:13.000000000 +0800 .
    drwxr-xr-x 24 root root 4096 2005-07-16 23:45:05.000000000 +0800 ..


    cp  
    语法
    [root @test /root ]# cp [-drsu] [来源档] [目的档] 
    参数说明: 
    -d     :在进行 copy 的时候,如果是 copy 到 link 档案,若不加任何参数,则预设情况中会将 link 到的源文件 
           copy 到目的地,若加 -d 时,则 link 档案可原封不动的将 link 这个快捷方式其拷贝到目的地! 
    -r     :可以进行目录的 copy 呦! 
    -s          :做成连结档,而不 copy 之意!与 ln 指令相同功能! 
    -u, --update:如果来源档比较新,或者是没有目的档,那么才会进行 copy 的动作!可用于备份的动作中! 
    范例: 
    [root @test /root]# cp    .bashrc bashrc      <==将 .bashrc 拷贝成 bashrc 这个档案! 
    [root @test /root]# cp -r /bin /tmp/bin        <==这个功能就好玩啦!这是用来 copy 整个目录的参数! 
    [root @test /root]# cp -s .bashrc bashrc         <==将 .bashrc 建立一个连结档,档名为 bashrc 
    [root @test /root]# cp -u /home/.bashrc .bashrc <==先检查 /home/.bashrc 是否与 .bashrc 不同,如果不同的话就开始 copy 一份!如果相同则不做任何动作!
    范例二:将 /var/log/wtmp 复制到 /tmp 底下
    [root@linux tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘
    [root@linux tmp]# ls -l /var/log/wtmp wtmp
    -rw-rw-r-- 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
    -rw-r--r-- 1 root root 71808 Jul 18 21:58 wtmp
    # 注意到了吗?!在不加任何参数的情况下,档案的所属者会改变,连权限也跟着改变了~
    # 这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!
    # 如果您想要将档案的所有特性都一起复制过来,可以加上 -a 喔!
    [root@linux tmp]# cp -a /var/log/wtmp wtmp_2
    [root@linux tmp]# ls -l /var/log/wtmp wtmp_2
    -rw-rw-r-- 1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
    -rw-rw-r-- 1 root utmp 71808 Jul 18 12:46 wtmp_2

    说明  
    如果你有些很大档案的需要备份,偏偏这个档案的更新率很低,那么每次备份都需要在 copy 一份吗?看来是不需要了!你可以使用『 cp -u 来源档 目的档』来备份呦!如此一来,当档案被改变过后,才会进行 copy 的动作!
    • rm

    • 语法
      [root @test /root ]# rm [-fir] [檔名] 
      参数说明: 
      -i     :提供使用者确认(这是默认值) 
      -r     :循环,就是一直杀掉,直到没有东西为止的意思 
      -f     :force ,就是强力杀掉啦! 
      范例: 
      [root @test /root]# cp .bashrc bashrc<==建立一个新档案, bashrc 
      [root @test /root]# rm bashrc          <==会显示如下的提示: 
      rm: remove `bashrc'? 
      [root @test /root]# mkdir testing 
      [root @test /root]# cp .bashrc testing 
      [root @test /root]# rmdir testing 
      rmdir: `testing': Directory not empty   <==由于 testing 里面有 .bashrc ,所以砍不掉! 
      [root @test /root]# rm -rf testing     <==持续删除该目录下的所有档案与目录
      范例三:删除一个带有 - 开头的档案
      [root@linux tmp]# ls *aa*
      -rw-r--r-- 1 root root      0 Aug 22 10:52 -aaa-
      [root@linux tmp]# rm -aaa-
      rm: invalid option -- a
      Try `rm --help' for more information. <== 因为 "-" 是参数嘛!
      [root@linux tmp]# rm ./-aaa-
      说明  
      这是移除的指令,相当于 dos 下的 del 指令!这里要注意的是,通常在 Linux 系统下, 为了怕档案被误杀,所以都已经有 -i 这个参数, -i 是指每个档案被杀掉之前都会让使用者确认一次,以预防误杀档案!而如果要连目录下的东西都一起杀掉的话,例如子目录里面还有子目录时,那就要使用 -rf 这个参数了! 不过,使用『 rm -rf 』这个指令之前,请千万注意了,因为,该目录或档案『肯定』会被 root 杀掉!因为系统不会再次询问你是否要砍掉呦! 所以那是个超级严重的指令下达呦!得特别注意!不过,如果你确定该目录不要了,那么 使用 rm -rf 来循环杀掉是不错的方式!  

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



      • mv

      • 语法
        [root @test /root ]# mv [-u] [来源档] [目的档] 
        参数说明: 
        -u   :同样的,为 update 的简写,当来源档比目的档还新的时后才会动作! 
        范例: 
        [root @test /root]# cp .bashrc bashrc 
        [root @test /root]# mv bashrc bashrc.old 
        [root @test /root]# mv bashrc bashrc2 /tmp<==将 bashrc 与 bashrc2 移动到 /tmp 这个目录下!请注意,最后一个才是最终的目标,其它的都是 SOURCE

      • basename

      • 语法
        [root @test /root ]# basename [目录] 
        参数说明: 
        范例: 
        [root @test /root]# basename /usr/local/etc 
        etc 
        这个指令会将后面的[目录]仅撷取出最后面的那个目录或档案, 
        以上面的例子来看, /usr/local/etc 不论 etc 是目录或档案, 
        他都会被撷取出来,因为他是最后一个出现的咚咚!
        说明  
        这个指令颇有点意思~他可以将一个目录或档案的最后一个咚咚秀出来!所以,未来如果你有要使用变量,并且取出最后一个数据(不论是档案还是目录),那么使用这个玩意儿就对啦! ^_^  


      • dirname

      • 语法
        [root @test /root ]# dirname [目录] 
        参数说明: 
        范例: 
        [root @test /root]# dirname /usr/local/etc 
        /usr/local 
        恰恰与 basename 相反,他仅是秀出来前面的『目录』部分喔!
        说明  
        这个指令恰恰与 basename 相反的啦!呵呵!很好玩吧!这部份也最常用在我们第三部分要讲的 Shell 的学习中喔!用最多的地方应该是 scripts 啦!用这两个宝贝蛋来撷取部分数据的内容!


鸟哥系列-7:Linux 档案与目录管理(下)
2007年07月05日 星期四 下午 11:26

今天是采用新的方式的第一次。。唉~好久没哟更新鸟哥了。。。今天再去看鸟哥的中文网站,貌似是搬家了还是已经过期了。反正是没有了。取而代之的是apache的网页。。。

十分惭愧。。。。自己对自己都不是很负责。。

新的鸟哥笔记将更加着重与那本鸟哥的pdf书。如果看官在此疑惑,请参看上一篇文章。附带了下载地址。

#######################################################

接上回:鸟哥的书第306页开始

最常使用的显示档案内容的指令可以说是 cat 与 more 及 less 了!此外,如果我们要查看一个很大型的档案 ( 好几百 MB 时 ),但是我们只需要后端的几行字而已,那么该如何是好?呵呵!用 tail 呀,此外, tac 这个
指令也可以达到!好了,说说各个指令的用途吧!
    •        cat  由第一行开始显示档案内容
    •         tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
    •        nl    显示的时候,顺道输出行号!
    •     more  一页一页的显示档案内容
    •   less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    •   head 只看头几行
    •   tail 只看尾巴几行
    •      od以二进制的方式读取档案内容!

(其使用的基本用法我个人觉得不论是使用man手册还是查看中文的其他手册,都是可以直观得到的,我尽量说不同的地方)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cat -A命令的一些解读:

# 在一般的环境中,打印出来的结果在有 [tab] 与空格键,其实看不出来,
# 那么使用 cat -A 时,会将 [tab] 按键以 ^I 显示,而断行字符也会显示出来~
# 最特殊的当然就是断行字符了!这个段行字符在 Linux 与 Windows 是不一样的。
# 在 Linux 是以 $ 为断行字符,而在 Windows 则是以 ^M$ 为断行字符。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在more下面的搜寻.more一半配合显示十分长的文件,进行分页显示,其实还有在显示时候进行字符串搜寻的功能.在此说明一下:

输入 / 之后,光标就会跑到最底下一行,并且等待您的输入, 您输入了字符串之后,
嘿嘿! more 就会开始向下搜寻该字符串啰~而重复搜寻同一个字符串, 可以直接按下 n 即可啊!最后,
不想要看了,就按下 q 即可离开 more 啦!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
less 里头可以拥有更多的『搜寻』功能喔!不止可以向下搜寻,也可以向上搜寻~ 实在是很不错用~基本上,可以输入的指令有:
• 空格键      :向下翻动一页;
• [pagedown]          :向下翻动一页;
 
[pageup]     :向上翻动一页;
 
/字符串                   :向下搜寻『字符串』的功能;
 
?字符串                   :向上搜寻『字符串』的功能;
 
n           :重复前一个搜寻 (与 / 或 ? 有关!)
 
N        :反向的重复前一个搜寻 (与 / 或 ? 有关!)
 
q        :离开 less 这个程序;
    
######################################################


修改档案时间与建置新档: touch


先熟悉档案的3种时间类型:
• modification time (mtime):当该档案的『内容数据』变更时,就会更新这个时间! 内容数据
指的是档案的内容,而不是档案的属性喔!
• status time (ctime):当该档案的『状态 (status)』改变时,就会更新这个时间,举例来说, 像
权限与属性被更改了,都会更新这个时间啊~
• access time (atime):当『该档案的内容被取用』时,就会更新这个读取时间 (access)。 举例
来说,我们使用 cat 去读取 ~/.bashrc ,就会更新 atime 了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在预设的状态下,如果 touch 后面有接档案,则该档案的三个时间 (atime/ctime/mtime) 都会更新为目前的时间。若该档案不存在, 则会主动的建立一个新的空的档案.

(这里顺便说下:在ubuntu中默认ll即ls -l的替代是默认屏蔽的,在文件~/.bashrc里面注释掉了,如果想恢复就去掉注释然后从新登录即可)

######################################################

档案与目录的预设权限与隐藏权限
(这个部分是十分重要的)


档案预设权限:umask(默认建立新的文件或者文件夹时候的属性)

在预设权限的属性上,目录与档案是不一样的。由于档案我们不希望他具有可执行的权力, 预设情况中,
档案是没有可执行 (x) 权限的。因此:
• 若使用者建立为『档案』则预设『没有可执行 ( x ) 项目』,亦即只有 rw 这两个项目,也就是
    最大为 666 分,预设属性如下:
    -rw-rw-rw-
• 若使用者建立为『目录』,则由于 x 与是否可以进入此目录有关,因此预设为所有权限均开放,
    亦即为 777 分,预设属性如下:
    drwxrwxrwx

用一个例子来简单说明umask的用法:
假设您的 umask 为 003 ,请问该 umask 情况下,建立的档案与目录权限为?

答:    umask 为 003 ,所以拿掉的属性为 --------wx,因此:     (读-4;写-2;执行-1)
        档案: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
        目录: (drwxrwxrwx) - (--------wx) = drwxrwxr--
写什么数字就是去掉什么属性.

Tips:
关于 umask 与权限的计算方式中,有的人喜欢使用档案预设属性 666 与目录预设
属性 777 来与 umask 进行相减的计算~这是不好的喔!     
以上面案例来看, 如果使用预设属性相加减,则档案变成:
666-003=663,亦即是 -rw-rw--wx ,这可是完全不对的喔! 想想
看,原本档案就已经去除 x 的预设属性了,怎么可能突然间冒出
来了? 所以,这个地方得要特别小心喔!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
档案隐藏属性(看完我晕了好一阵子~~)
chattr (设定档案隐藏属性)----请看书本或者man手册.不再说

这个指令是重要的,尤其是在系统的安全性上面!由于这些属性是隐藏的性质,所以需要以 lsattr 
能看到该属性呦!其中,个人认为最重要的当属 +i 这个属性了,因为他可以让一个档案无法被更动,对
于需要强烈的系统安全的人来说, 真是相当的重要的!     里头还有相当多的属性是需要 root 才能设定的呢!此外,如果是 log file 这种的登录档,就更需要 +a 这个可以增加,但是不能修改旧有的数据与删除的
参数了!

档案特殊权限: SUID/SGID/Sticky Bit(呵呵..这个地方是一个文档属性最开头的部分的内容设定)

当 s 这个权限在 user 的 x 时,也就是类似上表的 -r-s--x--x ,称为 Set UID ,
简称为 SUID , 这个 UID 代表的是 User 的 ID(这里特别拿出来是因为现在人喜欢说专有名词,这里普及一下,免得下次人家说你不知道在说什么) ,而 User 代表的则是这个程序 (/usr/bin/passwd) 的
拥有者 (root 啊!)。 


SGID
如果 s 的权限是在 group 时,那么就是 Set GID ,简称为 SGID。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Sticky Bit
这个 Sticky Bit 目前只针对目录有效,对于档案已经没有效果了。 SBit 对于目录的作用是:『在具有
SBit 的目录下,使用者若在该目录下具有 w 及 x 的权限, 则当使用者在该目录下建立档案或目录时,
只有档案拥有者与 root 才有权力删除』。


SUID, SGID 及 Sticky bit的数字属性设定

• 4 为 SUID
• 2 为 SGID
• 1 为 Sticky bit


假设要将一个档案属性改为『-rwsr-xr-x』时,由于 s 在使用者权限中,所以是 SUID ,因此, 在原先
的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来设定!

您必须了解 SUID 不是用在目录上,而 SBIT 不是用在档案上的喔!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
档案的搜寻:
档案的搜寻可就厉害了!     因为我们常常需要知道那个档案放在哪里,     所以来谈一谈怎么搜寻吧! 
Linux 底下也有相当优异的搜寻系统呦!通常 find 不很常用的!因为速度慢之外,也很操硬盘!通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻呦!为什么呢?因为 whereis与 locate 是利用数据库来搜寻数据,所以相当的快速,而且并没有实际的搜寻硬盘,比较省时间啦!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
具体whereis,locate,find的用法自己看手册.

locate 来寻找数据的时候特别的快, 这是因为 locate 寻找的数据是由『已建立的数据库 /var/lib/slocate/』 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,呵呵!当然是很快速啰! 那么有什么限制呢?就是因为他是经由数据库来搜寻的,而数据库的建立预设是在每天执行一次 (每个 distribution 都不同, FC4 是每天更新数据库一次!),所以当您新建立起来的档案, 却还在数据库更新之前搜寻该档案,那么 locate 会告诉您『找不到!』呵呵!因为必须要更新数据库呀!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
find的建议

如果你要寻找一个档案的话,那么使用 find 会是一个不错的主意! 他可以根据不同的参数来给予档案的
搜寻功能!例如你要寻找一个档名为 httpd.conf 的档案,你知道他应该是在 /etc 底下,那么就可以使
用『 find /etc -name httpd.conf 』噜! 那如果你记得有一个档案档名包含了 httpd ,但是不知道全
名怎办?!呵呵,就用万用字符 * ,如上以:
 find /etc -name '*httpd*' 』就可将档名含有 httpd
『的档案都列出来啰!不过,由于 find 在寻找数据的时后相当的耗硬盘!所以没事情不要使用 find 啦!
有更棒的指令可以取代呦!那就是 whereis 与 locate 啰!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值