`

Linux的文件权限与目录配置(From:鸟哥的Linux私房菜)

 
阅读更多

Linux的文件权限与目录配置

**Linux最优秀的地方之一,就在于它的多用户、多任务环境。为了让用户有较保密的文件数据,文件的权限管理很重要。

**Linux一般将文件可存取访问的身份分为3个类别,分别是ownergroupothers,且3种身份各有readwriteexecute等权限。

Linux文件属性

**lslist的意思。

1[-rw--r--]         2[1]         3[root]    4[root]           5[42304]           6[Sep 4 18:26]        7[install.log]

**第一列代表这个文件的类型与权限(permission)

++第一个字符代表这个文件的文件类型目录、文件或链接文件)等等:

--当为[ d ]则是目录

--当为[ - ]则是文件

--当为[ l ]则是连接文件

--当为[ b ]则表示为设备文件里面的可供储存的接口设备(硬盘)

--当为[ c ]则表示为设备文件里面的串行端口设备(鼠标、键盘)

++[ r ]代表可读(read)

++[w]代表可写(write)

++[ x ]代表可执行(execute)

++这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]

++第一组为文件拥有者的权限

++第二组为同群组的权限

++第三组为其他非本群组的权限

**第二栏表示有多少文件名连结到此节点

**第三栏表示这个文件(或目录)的拥有者账号

**第四栏表示这个文件的所在的组

++Linux系统下,账号会附属于一个或多个的群组中

**第五栏为这个文件的大小,默认单位为bytes

**第六栏为这个文件的文件创建的日期或者是最近的修改日期

**第七栏为文件名或目录名

++如果档名之前多一个 . ,则代表这个文件为隐藏文件

改变文件属性与权限

**chgrp:改变文件所属用户组

注意:要被改变的组名必须要在/etc/group文件内存在才行,否则就会显示错误。

[root@www ~]# chgrp [-R] dirname/filename ...

选项与参数:

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录

     都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。

**chown:改变文件所有者。Chown也可顺便直接修改用户组的名称。如果连目录下的所有子目录或文件都同时更改文件所有者的话,直接加上-R参数即可。

[root@www ~]# chown [-R] 账号名称 文件或目录

[root@www ~]# chown [-R] 账号名称:组名 文件或目录

选项与参数:

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更

**chmod:改变文件的权限。两种设置方法,分别是可以使用数字或者是符号来进行权限修改。

++数字类型改变文件权限:

[root@www ~]# chmod [-R] xyz 文件或目录

选项与参数:

xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。

-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

++符号类型改变文件权限:

chmod

u
g
o
a

+(加入)
-(
除去)
=(
设定)

r
w
x

文件或目录

--u:代表文件拥有者

--g:代表该用户所在的其他组员

--o:代表其他用户,a代表所有的身份

[root@www ~]# chmod  u=rwx,go=rx  .bashrc

# 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格!

[root@www ~]# chmod  a+w  .bashrc
[root@www ~]# chmod  a-x  .bashrc

目录与文件的权限意义

**文件的权限

++r (read):可读取此文件的实际内容,如读取文本文件的文字内容等

++w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件)

++x (execute):该文件具有可以被系统执行的权限

++文件是否能被执行是由是否具有x这个权限来决定的,跟文件名是没有绝对的关系

++对一个文件具有w权限时,可以具有写入/编辑/新增/修改文件的内容的权限,但并不具备有删除该文件本身的权限!

++对于文件的rwx来说, 主要都是针对文件的内容而言,与文件名的存在与否没有关系,因为文件记录的是实际的数据

**目录的权限

++目录主要内容为记录文件名列表,文件名与目录有强烈的关连

++r (read contents in directory)表示具有读取目录结构列表的权限,具有r权限时,表示可以查询目录下的文件名数据。 可以利用 ls 这个指令将该目录的内容列表显示出来

++w (modify contents of directory)这个权限对目录来说是很强大的。它表示具有更改该目录结构列表的权限

--建立新的文件与目录

--删除已经存在的文件与目录(不论该文件的权限为何!)

--将已存在的文件或目录进行更名

--转移该目录内的文件、目录位置

--目录的w权限就与该目录下的文件名变动有关

++x (access directory)目录的x代表的是用户能否进入该目录成为工作目录

Linux文件种类与扩展名

**文件种类:

++普通文件:ls –al所显示出来的属性,第一个字符为”-”

--纯文本文件(ASCII):使用cat直接可以看到的文件。

--二进制文件(binary)Linux中的可执行文件(script、批处理文件不算)。

--数据格式文件(data):程序运行时读取的特定格式文件。

--目录:第一个属性为[d]

--连接文件:第一个属性为[l]

--设备与设备文件(device)

^^(block)设备文件:一些存储数据,以提供系统随机访问的接口设备如硬盘

^^字符(character)设备文件:例如键盘、鼠标等

--套接字(socket)[s]

--管道(FIFO,pie):第一个属性为[p]

**Linux文件扩展名:

++Linux的文件没有 “扩展名”,只与第一列的10个属性有关,与文件名没有关系

++使用扩展名为了标识是什么文件类型,只是让用户了解文件可能的用途而已

--*.sh——脚本或批处理文件

--*.Z*.tar.gz*.zip*.tgz——经过打包的压缩文件

--*.html*.php——网页相关文件

++在文件传送过程中,文件的属性可能被更改。

**Linux文件长度限制

**ext2/ext3文件名长度限制为:

++单一文件或目录的文件名长度最大为255个字符

++包含完整路径名称及目录(/)的完整文件名最大为4096个字符

++使用Tab键来确认文件的文件名。

++使用变量(非常方便)

**Linux文件名的限制

++避免使用* ? > < ; & ! [ ] | \ ‘ “ ` ( ) { }

++文件开头为小数点,表示为隐藏文件。在命令执行当中,常常会使用-option之类的参数,尽量避免以-+命名

Linux目录配置标准:FHS

**FHS重点在于规范每个特定的目录下应该放置什么数据

**FHS依据文件系统使用的频繁与否是否允许用户随意改动,而将目录定义成为四种交互作用的形态。

 

可共享的(shareable)

不可共享的(unshareable)

不变的(static

/usr(软件放置处)

/etc(配置文件)

/opt(第三方软件)

/boot(开机与内核文件)

可变的(varible

/var/mail(用户邮件信箱)

/var/run(程序相关)

/var/spool/news(新闻组)

/var/lock(程序相关)

++可共享的:可以共享给其他系统挂载使用的目录,包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂在用的目录。

++不可共享的:自己机器上运行的设备文件或者与程序有关的socket文件等,由于仅与自身机器有关,所以不适合分享给其他机器了。

++不变的:有些数据是不会经常变动的,跟随者发行版而不变动。例如:函数库、文件说明文件、系统管理员所管理的主机服务配置文件等。

++可变动的:经常改变的数据,例如:登陆文件、新闻组等。

**目录的定义:

++/(root,根目录):与开机系统有关

++/usrUnix software resource):与软件安装/执行有关

++/varvarible):与系统运作过程有关。

根目录(/)的意义与内容

**根目录是最重要的一个目录,所有的目录都是由根目录衍生出来的,根目录与开机/还原/系统修复等动作有关。

**FSH希望根目录不要放在非常大的分区内,分区越大放入的数据越多,根目录所在的分区出现错误的机会越大

**FSH标准建议:根目录所在的分区应该越小越好,且应用程序安装的软件最好不要与根目录在同一个分区,保持根目录越小越好。

目录

应放置文件内容

/bin

/bin放置的是在单人维护模式下还能够被操作的指令。 主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。

/boot

主要放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需配置文件等等。 Linux kernel常用的档名为:vmlinuz,如果使用的是grub这个开机管理程序,则还会存在/boot/grub/这个目录!

/dev

所有设备与接口设备都是以文件的型态放置在这个目录。通过存取这个目录底下的某个文件,就等于存取某个装置啰

/etc

系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的启始档等等。这个目录下的各文件属性是可以让一般使用者查阅的,但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中喔。

/home

系统默认的用户家目录。在新增一个一般使用者账号时,默认的用户家目录都会规范到这里来。比较重要的是,家目录有两种代号:
~
:代表目前这个用户的家目录,而~dmtsai :则代表 dmtsai 的家目录!

/lib

/lib放置的则是在开机时使用的库,以及在/bin/sbin底下的指令会调用的库而已尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模块(驱动程序)

/media

/media下放置的就是可移除的设备。包括软盘、光盘、DVD等等设备都暂时挂载于此。常见的文件名有:/media/floppy, /media/cdrom等等。

/mnt

想要暂时挂载某些额外的设备,建议放置到这个目录。较早,这个目录的用途与/media相同!有了/media之后,这个目录就用来暂时挂载用了。

/opt

给第三方软件放置的目录。以前的Linux系统中,习惯放置在/usr/local目录下!

/root

系统管理员(root)的家目录。如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。

/sbin

/sbin目录下的为开机过程中所需要的,包括了开机、修复、还原系统所需要的指令。 常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。

/srv

srv可以看作service的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。常见的服务例如WWW, FTP等等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。

/tmp

这是让一般使用者或者是正在执行的程序暂时放置文件的地方。任何人都能够存取,所以需要定期清理一下。重要数据不可放置在此目录啊! FHS甚至建议在开机时,应该要将/tmp下的数据都删除!

其他目录

目录

应放置文件内容

/lost+found

使用标准的ext2/ext3文件系统格式才会产生的一个目录,在当文件系统发生错误时,将一些遗失的片段放置到这个目录下。这个目录通常会在分区的最顶层存在,例如你加装一块硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录“/disk/lost+found

/proc

这个目录本身是一个“虚拟文件系统(virtual filesystem)”。放置的数据都是在内存当中,例如系统核心、行程信息(process)、外部设备的状态及网络状态等等。本身不占任何硬盘空间!

/sys

/proc非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量.

<!--[if !supportLists]-->Ø  <!--[endif]-->这些根目录下与开机过程有关的目录,不能够与根目录放到不同的分区。

<!--[if !supportLists]-->n  <!--[endif]-->/etc

<!--[if !supportLists]-->n  <!--[endif]-->/bin

<!--[if !supportLists]-->n  <!--[endif]-->/dev

<!--[if !supportLists]-->n  <!--[endif]-->/lib

<!--[if !supportLists]-->n  <!--[endif]-->/sbin

/usr目录

**所有系统默认的软件都会放置到/usr下,这个目录有点类似Windows系统上的C\WindowsC\Program Files这两个目录的综合体,系统装完后,这个目录占用最多的硬盘空间。

目录

应放置文件内容

/usr/X11R6/

X Window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意。

/usr/bin/

绝大部分的用户可使用指令都放在这里,请注意到他与/bin的不同之处。(是否与开机过程有关)

/usr/include/

放置c/c++等程序语言的头文件与包含文件,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档!

/usr/lib/

包含各应用软件的库、目标文件,以及不被一般使用者惯用的执行档或脚本(script)。如果使用的是X86_64Linux系统,那可能会有/usr/lib64/目录!

/usr/local/

系统管理员在本机自行安装自己下载的软件(distribution默认提供者),建议安装到此目录,这样会比较便于管理。举例来说,distribution提供的软件较旧,想安装较新的软件但又不想移除旧版,此时可以将新版软件安装于/usr/local/目录下,该目录下也是具有bin, etc, include, lib...的子目录!

/usr/sbin/

非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)

/usr/share/

放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,在此目录下常见的还有这些次目录:

<!--[if !supportLists]-->·         <!--[endif]-->/usr/share/man:联机帮助文件

<!--[if !supportLists]-->·         <!--[endif]-->/usr/share/doc:软件杂项的文件说明

<!--[if !supportLists]-->·         <!--[endif]-->/usr/share/zoneinfo:与时区有关的时区文件

/usr/src/

一般源码建议放置到这里。至于核心原始码则建议放置到/usr/src/linux/目录下。

/var

**/var在系统工作后逐渐占用硬盘空间的目录。/var目录主要存放经常会变动的文件,包括缓存、登陆文件以及某些软件运行后生成的文件,包括程序文件(lock file, run file)或者例如MySQL数据库的文件等。

 

目录

应放置文件内容

/var/cache/

应用程序本身运行过程中会产生的一些暂存文件;

/var/lib/

程序本身执行的时,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。举例来说,MySQL的数据库放置到/var/lib/mysql/rpm的数据库则放到/var/lib/rpm去!

/var/lock/

某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用。举例来说,刻录机正在刻录一块光盘,你想一下,会不会有两个人同时在使用一个刻录机烧片?如果两个人同时刻录,那片子写入的是谁的数据?所以当第一个人在刻录时该刻录机就会被上锁,第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用。

/var/log/

非常重要。这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。

/var/mail/

放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中!通常这两个目录是互为链接文件!

/var/run/

某些程序或者是服务启动后,会将他们的PID放置在这个目录下!

/var/spool/

这个目录通常放置一些队列数据,所谓的队列就是排队等待其他程序使用的数据! 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中,但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中,等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中!

**FHS仅定义//usr/var的目录内容,在其他目录层次内,可以随开发者自行来配置。

目录树

**Linux下,所有的文件与目录都是由根目录开始的。

++目录树的起始点为根目录(/root)

++每一个目录不仅能够使用本地分区的文件系统,也可以使用网络上的文件系统。

++每一个文件在目录中的文件名都是独一无二的

**CentOS的目录

++/selinux:这个目录内容数据也是内存中的信息,不占用任何的硬盘空间。主要针对程序(或网络程序)的访问权限来限制

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics