一文走进Linux——文件权限与目录配置
鸟哥的Linux私房菜第五章——Linux的文件权限与目录配置
文章目录
- 第五章——Linux的文件权限与目录配置
- 一、拥有者、群组、其他人
- 二、文件权限
- 1. 文件属性
- 2. 改变文件属性
- 3. 文件和目录的权限的意义
- 4. 文件种类和扩展名
- 三、Linux目录配置
- 1. 目录配置的依据——FHS
- 2. 目录树
- 3. 绝对路径和相对路径
- 四、重点回顾
第五章——Linux的文件权限与目录配置
Linux最优秀的地方之一就在于他的多用户多任务环境
Linux一般将文件可存取的身份分为三个类
别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限
一、拥有者、群组、其他人
- 使用者
由于Linux是个多用户多任务的系统,因此可能常常会有多人同时使用这部主机来进行工作的情况发生, 为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这个“文件拥有者”的角色就显的相当的重要了!
- 群组
可以经由简易的文件权限设置,就能限制非自己团队(亦即是群组啰) 的其他人不能够阅览内容啰!而且亦可以让自己的团队成员可以修改我所创建的文件! 同时,如果我自己还有私人隐密的文件,仍然可以设置成让自己的团队成员也看不到我的文件数据。
- others
因此,我们就可以知道啦,在Linux里面,任何一个文件都具有“User, Group及Others”三种身份的个别权限, 我们可以将上面的说明以下面的图示来解释:
- Linux 使用者身份与群组记录的文件
在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊!
二、文件权限
这个文件的权限要如何针对这些所谓的“使用者”与“群组”来设置呢?
1. 文件属性
“ ls ”这一个察看文件的指令啰!在你以dmtsai登陆系统,然后使用 su - 切换身份成为root后, 下达“ ls -al ”看看
要注意的是, 我们还是不建议你直接使用 root 登陆系统,建议使用 su - 这个指令来切换身份喔!离开 su - 则使用 exit 回到 dmtsai 的身份即可!
ls是“list”的意思,重点在显示文件的文件名与相关属性。而选项“-al”则表示列出所有的文件详细的权限与属性(-a表示显示隐藏文件,-l表示详细信息),-l之后共有7个字段
- 第一栏:权限
共有10个字符:- 第1个:类型
- d:目录
- -:文件
- l:链接文件
- 第2、3、4个:对拥有者权限
- r:可读
- w:可写
- x:可执行(execute)
- -:没有该权限,用-代替
- 第5、6、7个:对群组权限
- 第8、9、10个:对其他人权限
- 第1个:类型
不论是那一组权限,基本上,都是“针对某些帐号来设计的权限”喔!以群组来说,他规范的是“加入这个群组的帐号具有什么样的权限”之意
[-][rwx][r-x][r–] > 1 234 567 890
1 为:代表这个文件名为目录或文件,本例中为文件(-); 234为:拥有者的权限,本例中为可读、可写、可执行(rwx); 567为:同群组使用者权限,本例中为可读可执行(rx);890为:其他使用者权限,本例中为可读(r),就是只读之意
同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。另外,目录与文件的权限意义并不相同,这是因为目录与文件所记录的数据内容不相同所致。 由于目录与文件的权限意义非常的重要,
- 第二栏:链接文件数
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。 - 第三栏:拥有者
- 第四栏:群组
- 第五栏:文件大小
- 第六栏:修改日期
- 第七栏:名称
2. 改变文件属性
几个常用于群组、拥有者、各种身份的权限之修改的指令(root身份使用)
- chgrp:改变文件所属群组
前提:要被改变的群组名称必须要做/etc/group中存在才可以,否则会显示错误
假设你已经是root的身份了,那么在你的主文件夹内有一个名为 initial-setup-ks.cfg 的文件,如何将该文件的群组改变一下呢?假设你已经知道在/etc/group里面已经存在一个名为users的群组, 但是testing这个群组名字就不存在/etc/group当中了,此时改变群组成为users与testing分别会有什么现象发生呢?
发现了吗?文件的群组被改成users了,但是要改成testing的时候, 就会发生错误~注意喔!
- chown:改变文件的拥有者
使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。
还可以顺便直接修改群组的名称呢
确实有时候需要变更文件的拥有者的,最常见的例子就是在复制文件给你之外的其他人时, 我们使用最简单的cp指令来说明好了,假设你今天要将.bashrc这个文件拷贝成为.bashrc_test文件名,且是要给bin这个人,你可以这样做:
由于复制行为(cp)会复制执行者的属性与权限,所以!怎么办?.bashrc_test还是属于root所拥有, 如此一来,即使你将文件拿给bin这个使用者了,那他仍然无法修改的(看属性/权限就知道了吧), 所以你就必须要将这个文件的拥有者与群组修改一下啰!
- chmod:改变文件权限
使用数字
文件的权限字符为:“-rwxrwxrwx”, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:> r:4 > w:2 > x: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啦!变更权限的指令
chmod的语法是这样的:
举例来说,如果要将.bashrc这个文件所有的权限都设置启用,那么就下达:
如果有些文件你不希望被其他人看到,那么应该将文件的权限设置为例如:“-rwxr-
----”,那就下达“ chmod 740 filename ”吧!使用符号
九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以借由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x 啰!也就是可以使用下面的方式来看:
| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |
假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
那么假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设
置。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均
可写入的权限, 那么我就可以使用:而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权
限
3. 文件和目录的权限的意义
这些文件权限对于一般文件与目录文件有何不同呢? 有大大的不同啊!
- 文件权限
文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:
可执行(x)?这里你就必须要小心啦!因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe,.bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!
w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系喔
- 目录权限
文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名清单,文件名与目录有强烈的关连啦!
总结:
例题:有个目录的权限如下所示:
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh
系统有个帐号名称为vbird,这个帐号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中?答:vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限,亦即 vbird 没有这个抽屉的钥匙啦! 因此vbird并不能切换到此目录内!(相当重要的概念!)
上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关啦!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或w的权限。
要注意:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给!
例题:假设有个帐号名称为dmtsai,他的主文件夹在/home/dmtsai/,dmtsai对此目录具有
[rwx]的权限。 若在此目录下有个名为the_root.data的文件,该文件的权限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data
请问dmtsai对此文件的权限为何?可否删除此文件?答:如上所示,由于dmtsai对此文件来说是“others”的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容就是了。
但是由于这个文件在他的主文件夹下, 他在此目录下具有rwx的完整权限,因此对于the_root.data这个“文件名”来说,他是能够“删除”的! 结论就是,dmtsai这个用户能够删除the_root.data这个文件!
4. 文件种类和扩展名
任何设备在Linux下面都是文件, 不仅如此,连数 据沟通的接口也有专属的文件在负责~
使用“ls -l”观察到第一栏那十个字符中,第一个字符为文件的类型。 除了常见 的一般文件(-)与目录文件(d)之外,还有哪些种类的文件类型呢?
文件类型:
- 正规文件:符号为 -
- 纯文本文件
- 二进制文件
- 数据格式文件
- 目录:符号为 d
- 链接文件:一个文件或目录的快捷方式,符号为l
- 设备、设备文件:一般集中在/dev目录下
- 区块(block)设备文件:硬盘,符号为b
- 字符(character)设备文件:键盘、鼠标,符号为 c
- 数据接口文件(sockets):被用作在网络上的数据承接,符号为 s
- 数据输送档(FIFO、pipe):解决多个程序同时存取一个文件造成的错误,符号为p
扩展名
其实,Linux中是没有扩展名的,比如,一个文件能不能被执行,在windows中根据扩展名是否为.exe、.bat这些表示可执行文件的扩展名,而在Linux中,一个文件能不能被执行,取决于这个文件是否具有x权限,有就可以执行,没有就不能执行,与扩展名无关
还有一点,可执行权限 和 可执行的程序码 不是一回事。比如:一个纯文本文件,你可以给他x权限,那么就有了执行权限;但是纯文本文件怎么执行啊?!,所以它没有可执行的程序码。,所以它也就不能被执行成功。而一个指令对应的文件,它的x权限是可以执行的,因为它是可执行程序码
但是我们希望能通过扩展名来了解这个文件是什么东西,所以有一些常见的扩展名:
- *.sh:脚本或批处理文件
- Z,.tar,.tar.gz,.zip,.tgz:压缩文件,因为压缩软件不同导致扩展名不同
- html、php:网页文件
扩展名只是帮助了解它是个什么用途的文件而已
文件名的长度
CentOS 7对文件名长度限制为:255B(字节)
- 一个ASCII英文占用1B,可以达到255个英文字母
- 一个汉字占用2B,可以达到128个汉字
文件名避免使用特殊字符,因为大部分都有特殊意义,比如 - 不能用在文件名开头,因为指令的选项就以 - 开头,会引起混乱
三、Linux目录配置
1. 目录配置的依据——FHS
Filesystem Hierarchy Standard (FHS)
主要目的:让使用者可以了解到已安装的软件通常放置在哪个目录下;规范每个特定的目录下应该要放置什么样的数据
FHS只定义了三个目录下的数据:
- /(根目录):与开机有关
- /usr(unix software resource):和软件的安装、执行有关
- /var(variable):和系统的运行过程有关
根目录(/)的意义和内容:
所有的目录都是由根目录衍生出来的,同时 根目录也与开机/还原/系统修复等动作有关。 由于系统开机时需要特定的开机软件、核心文 件、开机所需程序、函数库等等文件数据,若系统出现错误时,根目录也必须要包含有能够 修复文件系统的程序才行。
| 第一部分:FHS要求必须存在的 |
目录 | 应放置的文件内容 |
---|---|
/bin | 存放可以被root和普通用户使用的指令文件 |
/boot | 存放开机使用到的文件 |
/dev | 存放设备的文件(设备以文件形式存在) |
/etc | 存放系统的配置文件,例如用户的账号密码 |
/lib | 存放开机用的函数库,还有/bin和/sbin中的指令用的函数库 |
/media(媒体) | 存放可移除的设备(软盘、光盘等) |
/mnt | 与media类似,用来暂时的挂载某些设备 |
/opt | 第三方软件安装到这里(以前习惯放在/usr/local下) |
/run | 存放开机后产生的各项信息 |
/sbin | 设置系统环境,存放开机、修复、还原系统使用的指令(root才能使用) |
/srv(service服务) | 存放一些网络服务所需要使用的数据目录(WWW服务需要的网页数据) |
/tmp | 暂时放置文件的地方(任何人都可用),开机前一般都清除掉 |
/usr | |
/var | |
第二部分:FHS建议存在的 | |
/home | 使用者主文件夹,里面包含了所有的普通用户的主文件夹(~ 和 ~lzh两种) |
/lib64 | 存放与/lib不同格式的函数库,支持64位的lib64函数库 |
/root | 管理员(root)的主文件夹 |
事实上FHS针对根目录所定义的标准就仅有上面的咚咚,不过我们的Linux下面还有许多目录 你也需要了解一下的。 下面是几个在Linux当中也是非常重要的目录喔:
/lost+found:
ext2/ext3/ext4这个文件系统格式才会有的,将文件系统发生错误时,遗失掉的片断放置这里,xfs文件系统没有这个目录(CentOS没有)
/proc:
虚拟文件系统,存放的数据都在内存中 ,例如系统核心、行程信息(process)、周边设备的 状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间
/sys:
跟/proc类似,包括目前已载入的核心模块与核心侦测到的硬件设备信息等等。这个目录同样不占硬盘容量
早期 Linux 在设计的时候,若发生问题时,救援模式通常仅挂载根目录而已,因此有五个重 要的目录被要求一定要与根目录放置在一起, 那就是 /etc, /bin, /dev, /lib, /sbin 这五个重要目 录。现在许多的 Linux distributions 由于已经将许多非必要的文件移出 /usr 之外了, 所以 /usr 也是越来越精简,同时因为 /usr 被建议为“即使挂载成为只读,系统还是可以正常运行”的 模样,所以救援模式也能同时挂载 /usr 喔! 例如我们的这个 CentOS 7.x 版本在救援模式的 情况下就是这样。因此那个五大目录的限制已经被打破了呦!例如 CentOS 7.x 就已经将 /sbin, /bin, /lib 通通移动到 /usr 下面了哩!
- /usr的意义和内容
依据FHS,/usr放置的数据属于可分享的与不可变动的, 如果你知道如何通过网络进行分区的挂载,那么/usr确实可以分享给区域网络内的其他主机来使用喔!
usr是Unix Software Resource的缩写,是“Unix操作系统软件资源”所放置的目录,而不是使用者的数据
系统默认的软件(distribution发布者提供的软件)都会放置到/usr下面,因此类似Windows 系统的“C:\Windows\ (当中的一部份) + C:\Program files\”这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。
目录 | 应放置的文件内容 |
---|---|
第一部分:FHS要求必须存在的 | |
/usr/bin | 一般用户都能够使用的指令,CentOS 7将/bin链接到这里 |
/usr/lib | /lib就是链接的这里 |
/usr/local | 系统管理员自行安装的软件放到这里 |
/usr/sbin | 网络服务器软件程序的服务指令 |
/usr/share | 存放不分硬件架构均可读取是数据文件:/usr/share/man、doc、zoneinfo等 |
第二部分:FHS建议存在的 | |
/usr/games | 和游戏相关的数据放置处 |
/usr/include | c/c++等的头文件和包含档放置处 |
/usr/libexec | 可执行文件或脚本,例如大部分的 X 窗口下面的操作指令 |
/usr/lib64 | /lib64链接的这里 |
/usr/src | 源代码放置处 |
- /var 的意义和内容
如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括高速缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。
目录 | 应放置的文件内容 |
---|---|
第一部分:FHS要求必须存在的 | |
/var/cache | 应用程序本身运行过程中会产生的一些暂存盘 |
/var/lib | 应用程序执行过程中,需要使用到的数据文件,举例来说,MySQL的数据库放置到/var/lib/mysql/ |
/var/lock | 设备或文件一次只能被一个应用程序所使用,俩程序同时使用时,该设备要上锁(lock),已挪到 /run/lock 中! |
/var/log | 这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登陆者的信息)等 |
/var/mail | 放置个人电子邮箱,和/var/spool/mail互为链接文件 |
/var/run | 某些程序或者是服务启动后,会将他们的PID放置在这个目录下喔,链接/run |
/var/spool | 放置排队等待其他程序使用的数据,这些数据被使用后通常都会被删除 |
CentOS 7 目录的更改
比较大的差异在于将许多原本应该要在根目录 (/) 里面的目录,将他内部数据全部挪到 /usr 里面去,然后进行链接设置!包括下面这些:/bin --> /usr/bin/sbin --> /usr/sbin/lib --> /usr/lib/lib64 --> /usr/lib64/var/lock --> /run/lock/var/run --> /run
2. 目录树
3. 绝对路径和相对路径
- 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
- 相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 …/…/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
相对路径是以“你当前所在路径的相对位置”来表示的。举例来说,你目前在/home 这个目录下, 如果想要进入 /var/log 这个目录时,可以怎么写呢?
- cd /var/log (absolute)
- cd …/var/log (relative)
因为你在 /home 下面,所以要回到上一层 (…/) 之后,才能继续往 /var 来移动的! 特别注意这两个特殊的目录:
- . :代表当前的目录,也可以使用 ./ 来表示;
- . .:代表上一层目录,也可以 …/ 来代表。
你常常会看到 cd … 或 ./command 之类的指令下达方式,就是代表上一层与目前所在目录的工作状态喔
四、重点回顾
一文走进Linux——文件权限与目录配置相关推荐
- 【笔记】linux文件权限与目录配置
linux文件权限与目录配置 文章目录 linux文件权限与目录配置 一.文件权限 <1>文件属性 [特别注意] <2>连接数 二.修改文件权限 <1>改变群组 c ...
- 还没掌握Linux文件权限与目录配置命令?就这还不点进来看看干货
1.用户和用户组其他人 2.Linux文件权限概念 常用的ls命令 常用的cd命令 linux文件属性权限> 3.修改文件属性和权限 ...
- Linux操作系统使用基础03:Linux文件权限与目录配置
目录 1. 用户与用户组简介 1.1 作用 1.2 相关配置文件 1.2.1 用户信息文件:/etc/passwd 1.2.2 影子文件:/etc/shadow 1.2.3 组信息文件:/etc/gr ...
- 【Linux入门学习之】Linux文件权限与目录配置
一.Linux的文件权限 Linux最优秀的地方之一在于它的多用户.多任务环境.而为了让各个用户具有较保密的文件数据,文件的权限管理就相当重要了.Linux一般将文件可存取访问的身份分为三个类别:ow ...
- linux b权限开头的文件夹,linux文件权限与目录配置
一.Linux文件属性及权限 1.文件/目录属性查看 (1)文件属性查看 [root@localhost ~]# ls -l file - rw-r--r--. 1 ...
- 鸟哥的Linux私房菜(基础篇)- 第六章、Linux 的文件权限与目录配置
第六章.Linux的文件权限与目录配置 最近更新日期:2009/08/18 Linux最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要 ...
- Linux 的文件权限与目录配置
第六章.Linux的文件权限与目录配置 最近更新日期:2009/08/18 3. Linux目录配置 3.1 Linux目录配置的依据--FHS:/,/usr, /var 3.2 目录树(direct ...
- linux基础学习——linux的文件权限和目录配置
linux基础学习--linux的文件权限和目录配置 1.用户和用户组和其他人概念: 三个概念的前提宗旨:linux是一个多人多任务的系统环境.如果不对文件作出一个权限限制的话.任何人都能操作这份文件 ...
- 鸟哥的私房菜笔记—文件权限与目录配置
本文参考鸟哥的私房菜-文件权限与目录配置 1.linux中的角色 user group others 每种角色都有三种权限:r(read) w(write) x(execute) 2.linux文件属 ...
最新文章
- python ddos攻击脚本_python版本DDOS攻击脚本
- Ubuntu下安装NetBeans步骤和相关问题的解决方法
- 关于IOS数据解析的错误分析
- 解决导入Beautifulsoup 报错 AttributeError: 'module' object has no attribute '_base'的问题
- hg255d php,HG255D刷潘多拉共享惠普1020打印机的问题汇总
- 年会互动游戏有哪些?年会微信互动游戏制作流程是什么?
- 虚拟机win7装oracle,大神教你win7系统安装Oracle VM VirtualBox虚拟机的处理教程
- sql server order by 的一些高级用法
- 暴雪插件占用服务器,你还在用这款插件吗?暴雪公布《魔兽世界》怀旧服卡顿原因...
- 德育知识元素挖掘系统设计 软件工程 spring boot + Vue.js + python机器学习
- VUE中根据文件后缀名显示对应的图标
- 全国绿色计算大赛 模拟赛第三阶段
- 数学/数论专题-学习笔记:狄利克雷卷积
- IPV6 邻居发现协议(NDP)
- Arduino 高级教程 01:基础篇
- 2021/1/16-每日三题第23弹:skr小机灵鬼儿 ?你知道 JavaScript 中的原型和原型链是什么吗 ???
- win10系统开机出现grub,一步进入window系统
- windows 平台使用dul 抽取Linux oracle ASM 磁盘数据文件
- 生僻字用计算机怎么弹歌曲,抖音生僻字简谱:计算器数字乐谱计算器弹奏音乐总结...
- 云原生计算基金会宣布Envoy毕业