Linux的文件属性和目录配置

RayDon 2011-06-14

Linux的帮助命令是man命令名

在我们Linux系统当中,预设的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关资讯,都是记录在/etc/passwd这个档案内的。至于密码则是记录在/etc/shadow这个档案下。

此外,Linux所有的群组名称都纪录在/etc/group内!这三个档案可以说是Linux系统里面帐号、密码、群组资讯的集中地棉!不要随便删除这三个档案啊!

文件权限与属性是学习Linux的一个相当重要的关卡

以root的身份登入Linux之后,下达『ls-al』命令,列出所有的文件或目录的详细信息

ls是『list』的意思,与在早期的DOS年代的指令dir类似功能。而参数『-al』则表示列出所有的档案(包含隐藏档,就是档名前面第一个字元为.的那种档案)

第一栏代表这个档案的属性∶-rwxrwx---共十个属性,

第一个属性代表这个档案是『目录、档案或连结档等等』∶

当为[d]则是目录,例如上表的第11行;

当为[-]则是档案,例如上表的第5行;

若是[l]则表示为连结档(linkfile);

若是[b]则表示为装置档里面的可供储存的周边设备;

若是[c]则表示为装置档里面的序列埠设备,例如键盘、滑鼠。

接下来的属性中,三个为一组,且均为『rwx』的三个参数的组合。其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(excute)∶

第一组为『拥有人的权限』,以第5行为例,该档案的拥有人可以读写,但不可执行;

第二组为『同群组的权限』;

第三组为『其他非本群组的权限』。

需要特别留意的是x这个标号,一个目录,而且只有root可以读写与执行

因为x与目录的关系相当的重要,如果您在该目录底下不能执行任何指令的话,那么自然也就无法进入了,因此,请特别留意的是,如果您想要开放某个目录让一些人进来的话,请记得将该目录的x属性给开放在Windows底下一个档案是否具有执行的能力是藉由『附档名』来判断的,例如∶.exe,.bat,.com等等,但是在Linux底下,我们的档案是否能执行,则是藉由是否具有x这个属性来决定的!所以,跟档名是没有绝对的关系的!

第三栏表示这个档案(或目录)的『拥有人』。

第四栏表示拥有人的群组。

第五栏为这个档案的容量大小。

第六栏为这个档案的建档日期或者是最近的修改日期

第七栏为这个档案的档名,如果档名之前多一个『.』,则代表这个档案为『隐藏档』

复制文档命令:cp源文档目的文档

如何修改一个档案的权限呢?

什么时候要使用chown或chgrp呢?!或许您会觉得奇怪吧?!是的,确实有时候需要变更档案的拥有者的,最常见的例子就是在copy档案给你之外的其他人时

chgrp∶改变档案所属群组,格式:chgrp[-r]群组名文件或目录名

要改变成为的群组名称必须要在/etc/group里面存在的名称才行,否则就会显示错误!

chown∶改变档案所属人,格式:chown[-r]账号名称文件或目录名

使用者必须是已经存在系统中的,也就是在/etc/passwd这个档案中有纪录的使用者名称才行改变。

如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上-R的参数即可!

chmod∶改变档案的属性、SUID、等等的特性,格式:chmod[-r]xyz文件或目录名

(1)数字类型改变档案权限

Linux档案的基本属性就有九个,分别是owner/group/others组别的read/write/excute属性,先复习一下刚刚上面提到的资料∶

-rwxrwxrwx

这九个属性是三个三个一组的!其中,我们可以使用数字来代表各个属性,各属性的对照表如下∶r:4w:2x:1

同一组(owner/group/others)的三个属性(r/w/x)是需要累加的,例如当属性为[-rwxrwx---]则是∶

owner=rwx=4+2+1=7

group=rwx=4+2+1=7

others=---=0+0+0=0

所以等一下我们设定属性的变更时,该属性的数字就是770啦!

(2)符号类型改变档案权限

九个属性分别是(1)user(2)group(3)others三群啦!那么我们就可以藉由u,g,o来代表三群的属性!此外,a则代表all亦即全部的三群!

格式:u

g+(加入)

chmodo-(除去)rwx档案或目录

a=(设定)

利用chmoda+xfilename,就可以让该程式拥有执行的权限了。是否很方便?

那个r,w,x对目录是什么意义呢?简单的说∶

r(readcontentsindirectory)∶表示具有读取目录结构清单的权限,所以当您具有读取(r)一个目录的权限时,您就可以利用ls这个指令将该目录的内容列表显示出来!

w(modifycontentsofdirectory)∶这个可写入的权限对目录来说,是很了不起的!因为他表示您将具有异动该目录结构清单的权限,也就是底下这些权限∶

建立新的档案与目录;

删除已经存在的档案与目录(不论该档案是属于谁的!)

将已存在的档案或目录进行更名;

搬移该目录内的档案、目录位置。

所以说,如果您是一般身份使用者,例如鸟哥的帐号dmtsai,那么在/home/dmtsai这个家目录内,无论是谁(包括root)建立的档案,无论该档案属于谁,无论该档案的属性是什么,dmtsai这个使用者都『有权力将该档案删除』的喔!

x(accessdirectory)∶这个在上头我们已经稍微提过了,这个x与能否进入该目录有关呢!

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

1,正规档案(regularfile)∶就是一般我们在进行存取的类型的档案,在由ls-al所显示出来的属性方面,第一个属性为-,如果是目录,第一个为d。按照内容分为:

(1)纯文字档(ASCII)∶就是文本文档,可以用cat命令显示文件内容

(2)二进位档(binary)∶如一些可执行文件,举例来说,刚刚下达的指令cat就是一个binaryfile。

(3)资料格式档(data)∶有些程序在运作的过程当中会读取某些特定格式的档案

举例来说,我们的Linux在使用者登入时,都会将登录的资料记录在/var/log/wtmp那个档案内,该档案是一个datafile,他能够透过last这个指令读出来!但是使用cat时,会读出乱码

2,目录(directory)∶就是目录棉~第一个属性为[d],例如[drwxrwxrwx]。

3,连结档(link)∶就是类似Windows底下的捷径啦!第一个属性为[l],例如[lrwxrwxrwx];

4,设备与装置档(device)∶与系统周边及储存等相关的一些档案,通常都集中在/dev这个目录之下!通常又分为两种∶(1)区块(block)设备档∶就是一些储存资料,以提供系统存取的周边设备,简单的说就是硬碟啦!例如你的一号硬碟的代码是/dev/hda1等等的档案啦!第一个属性为[b];

(2)字元(character)设备档∶亦即是一些序列埠的周边设备,例如键盘、滑鼠等等!第一个属性为[c]。

Linux的档案是没有所谓的『附档名』(即文件后缀名)的,因为由前面的说明我们可以知道,一个Linux档案能不能被执行,与他的第一栏的十个属性有关,与档名根本一点关系也没有。虽然没有用,但通常我们还是会以适当的档名来表示该档案是什么种类的。

如*.sh∶批次档(scripts),因为批次档为使用shell写成的,所以附档名就编成.sh棉;

*Z,*.tar,*.tar.gz,*.zip,*.tgz∶经过打包的压缩档。这是因为压缩软体分别为gunzip,tar等等的,由于不同的压缩软体,而取其相关的附档名棉!

*.html,*.php∶网页相关档案

x代表这个档案具有可执行的能力,但是能不能执行成功,当然就得要看该档案的内容。如一个文本文件没有执行的内容,就执行不成功。

在Linux底下,每一个档案或目录的档名最长可以到达255的字元,加上完整路径,最长可达4096个字元

Linux文件名避免使用:*?><;&![]|\'"`(){}。

另外,档案名称的开头为小数点『.』时,代表这个档案为『隐藏档』喔!同时,由于指令下达当中,常常会使用到-option之类的参数,所以您最好也避免将档案档名的开头以-或+来命名啊!

Linux目录配置的依据FHSFilesystemHierarchyStandard(FHS),因为linux开发者巨多,不可能目录结构不同,所以需要一个规范。它只是规定出根目录(/)底下各个主要的目录应该是要放置什么样的档案而已。FHS定义出两层规范出来,第一层是/底下的各个目录应该要放置什么样内容的档案资料,例如/etc应该要放置设定档,/bin与/sbin则应该要放置可执行档等等。第二层则是针对/usr及/var这两个目录的次目录来定义的。例如/var/log放置系统登录档、/usr/share放置共享资料等等。

根据档名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。绝对路径为∶由根目录(/)开始写起的档名或目录名称,例如/home/dmtsai/.bashrc;相对路径为相对于目前路径的档名写法。例如./home/dmtsai或../../home/dmtsai/等等。反正开头不是/就属于相对路径的写法。单一档案或目录的最大容许档名为255个字元;

查看根目录下的

[root@linux~]#ls-l/

drwxr-xr-x2rootroot4096Jul1405:22binls,mv,rm,mkdir,rmdir,gzip,tar,cat,cp,

mount等等重要指令都放在这个目录当中。

drwxr-xr-x3rootroot4096Jul905:18boot这个目录主要的目的是放置Linux系统开机会用到的档案。这个目录底下档名为vmlinuz的就是Linux的Kernel啦

drwxr-xr-x9rootroot4880Jul1100:45dev

drwxr-xr-x6rootroot4096Jun2901:06disk1

drwxr-xr-x3rootroot4096Jun2508:53disk2

drwxr-xr-x83rootroot12288Jul1405:23etc系统主要的设定档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。

drwxr-xr-x6rootroot4096May3020:07home这是系统预设的使用者家目录(homedirectory)。

drwxr-xr-x10rootroot4096Jul1405:23lib

drwx------2rootroot16384Jun2516:21lost+found系统不正常产生错误时,会将一些遗失的片段放置于此目录下

drwxr-xr-x3rootroot4096Jun2519:34media

drwxr-xr-x2rootroot4096Apr2523:54misc

drwxr-xr-x2rootroot4096May2312:28mnt这是软碟与光碟预设挂载点的地方;通常软碟挂在/mnt/floppy下,而光碟挂在/mnt/cdrom下,不过也不一定啦

drwxr-xr-x2rootroot4096May2312:28opt

dr-xr-xr-x59rootroot0Jul1001:25proc

drwx------9rootroot4096Jul1311:31root

drwxr-xr-x2rootroot4096Jul1405:22sbin

drwxr-xr-x2rootroot4096Jun2508:23selinux

drwxr-xr-x2rootroot4096May2312:28srv

drwxr-xr-x10rootroot0Jul1001:25sys

drwxr-xr-x10rootroot4096Jun2520:24system

drwxrwxrwt10rootroot4096Jul1405:23tmp这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以您需要定期的清理一下。当然,重要资料不可放置在此目录啊

drwxr-xr-x14rootroot4096Jun2508:27usr

drwxr-xr-x24rootroot4096Jun2520:16var

从属性的角度来看,上面的档名每个都是『目录名称』,较为特殊的是root,由于root这个目录是管理员root的家目录,这个家目录可重要了!所以一定要设定成较为严密的700(rwx------)这个属性才行呐!

有几个比较重要的目录您也需要了解一下∶

/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这个档案是否有异常啊~

什么是档案系统(filesystem)呢?目前的操作系统大多数是将资料由硬碟读出来的,那么每个操作系统使用的硬碟在x86架构上的,都一样啊!都是同样的硬碟。但是,每种作业系统都有其独特的读取档案的方法,也就是说,每种作业系统对硬碟读取的方法不同,所以就造就了不同的档案系统了。

举例来说,Windows98预设的档案系统是FAT(或FAT16)档案系统,Windows2000有所谓的NTFS档案系统,至于Linux的正统档案系统则为ext2(Linuxsecondextendedfilesystem,ext2fs)这一个。

我们的系统能不能读取某个档案系统,与前面提过的『核心功能』有关。你必须要将你所想要支持的档案系统编译到你的核心当中才能被支持。

文件管理器(文件和目录管理)

特殊目录:

.代表此层目录

..代表上一层目录

-代表前一个工作目录

~代表『目前使用者身份』所在的家目录

~account代表account这个使用者的家目录

目录操作:

cd∶变换目录

pwd∶显示目前的目录,pwd是PrintWorkingDirectory的缩写

mkdir∶建立一个新的目录,你所需要的目录得一层一层的建立才行!例如∶假如你要建立一个目录为/home/bird/testing/test1,那么首先必须要有/home然后/home/bird,再来/home/bird/testing都必须要存在,才可以建立/home/bird/testing/test1这个目录!假如没有/home/bird/testing时,就没有办法建立test1的目录棉!不过,现在有个更简单有效的方法啦!那就是加上-p这个参数喔!你可以直接下达∶『mkdir-p/home/bird/testing/test1』则系统会自动的帮你将/home,/home/bird,/home/bird/testing依序的建立起目录!并且,如果该目录本来就已经存在时,系统也不会显示错误讯息喔!挺快乐的吧!

rmdir∶删除一个空的目录。目录需要一层一层的删除才行!而且被删除的目录里面必定不能还有其他的目录或档案!这也是所谓的空的目录(emptydirectory)的意思啊!那如果要将所有目录下的东西都杀掉呢?!

这个时候就必须使用rm-rftest棉!不过,还是使用rmdir比较不危险!不过,你也可以尝试以-p的参数加入,来删除上层的目录喔!

执行文件环境变量:$PATH

请下达echo$PATH,echo有『显示、印出』的意思,而PATH前面加的$表示后面接的是变量档案与目录的管理上,不外乎『显示属性』、『拷贝』、『删除档案』及『移动档案或目录』等等

复制、移动与删除∶cp,rm,mv,对于cp除了复制,还可以建立连结档(就是捷径棉),移动目录与档案,则使用mv(move),这个指令也可以直接拿来作更名(rename)的动作喔!

复制后文件,注意文件的权限。某些需要特别注意的特殊权限档案,例如密码档(/etc/shadow)以及一些设定档,就不能直接以cp来复制,而必须要加上-a或者是-p等等可以完整复制档案权限的参数才行!另外,如果您想要复制档案给其他的使用者,也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等),否则,其他人还是无法针对您给予的档案进行修订的动作喔

硬链接:如windows的快捷方式,软链接,又叫符号链接

完整档名最长可以到达4096个字元。那么您怎么知道那个是档名?那个是目录名?嘿嘿!就是利用斜线(/)来分辨啊

最常使用的显示档案内容的指令可以说是cat与more及less了!

cat由第一行开始显示档案内容

tac从最后一行开始显示,可以看出tac是cat的倒著写!

nl显示的时候,顺道输出行号!

more一页一页的显示档案内容

less与more类似,但是比more更好的是,他可以往前翻页!

head只看头几行

tail只看尾巴几行

od以二进位的方式读取档案内容!避免显示二进制文件为乱码

第11到第20行,那么我取前20行,再取后十行,所以结果就是∶『headˉn20~/.bashrc|tailˉn10』,这样就可以得到第11到第20行之间的内容了!但是里面涉及到管线命令

Linux文件有三个时间:

modificationtime(mtime)∶当该档案的『内容资料』变更时,就会更新这个时间!内容资料指的是档案的内容,而不是档案的属性喔!

statustime(ctime)∶当该档案的『状态(status)』改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊~

accesstime(atime)∶当『该档案的内容被取用』时,就会更新这个读取时间(access)。举例来说,我们使用cat去读取~/.bashrc,就会更新atime了。

在预设的情况下,ls显示出来的是该档案的mtime,如果显示其他时间

ls-l--time=atime/etc/man.config

touch指令的功能:

1,建立一个空的档案;

2,将某个档案日期修订为目前(mtime与atime)

例题二∶你的系统有个一般身份使用者dmtsai,他的群组为users,他的家目录在/home/dmtsai,你想将你的~/.bashrc复制给他(假设你是root),可以怎么作?

答∶

cp~/.bashrc~dmtsai/bashrc

chowndmtsai:users~dmtsai/bashrc

例题三∶我想在/tmp底下建立一个目录,这个目录名称为chap2_2_ex1,并且,这个目录拥有者为dmtsai,群组为users,此外,任何人都可以进入该目录浏览档案,不过除了dmtsai之外,其他人都不能修改该目录下的档案。

答∶

因为除了dmtsai之外,其他人不能修改该目录下的档案,此外,dmtsai可以修改,所以整个目录的权限应该是drwxr-xr-x才对!因此

mkdir/tmp/chap2_2_ex1

chown-Rdmtsai:users/tmp/chap2_2_ex1

chmod-R755/tmp/chap2_2_ex1

当你建立一个新的档案或目录时,他的预设属性会是什么吗?umask就是指定『目前使用者在建立档案或目录时候的属性预设值』,那么如何得知或设定umask呢?umask指定的是『该预设值需要减掉的权限!』因为r、w、x分别是4、2、1分

得知unmask,直接输入unmask命令即可,如得到数字0022。

建立档案时∶(-rw-rw-rw-)ˉ(-----w--w-)==>-rw-r--r--

建立目录时∶(drwxrwxrwx)ˉ(d----w--w-)==>drwxr-xr-x

设置unmask,直接在unmask后

若使用者建立为『档案』则预设『没有可执行(x)项目』,亦即只有rw这两个项目,也就是最大为666分,预设属性如下∶

-rw-rw-rw-

若使用者建立为『目录』,则由于x与是否可以进入此目录有关,因此预设为所有权限均开放,亦即为777分,预设属性如下∶

drwxrwxrwx

例题四∶假设您的umask为003,请问该umask情况下,建立的档案与目录权限为?

答∶

umask为003,所以拿掉的属性为--------wx,因此∶

档案∶(-rw-rw-rw-)-(--------wx)=-rw-rw-r--

目录∶(drwxrwxrwx)-(--------wx)=drwxrwxr--

root的umask会拿掉比较多的属性,root的umask预设是022,这是基于安全的考量

至于一般身份使用者,通常他们的umask为002,亦即保留同群组的写入权力!

文件隐藏属性:

chattr(设定档案隐藏属性)

相关推荐