5.1 使用者与群组
1. 文件拥有者:
2. 群组概念:
3. 其他人的概念:
Linux 使用者身份与群组记录的文件
默认的情况下,所有的系统上的帐号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。
至于个人的密码则是记录在/etc/shadow这个文件下。
Linux所有的群组名称都纪录在/etc/group内!
这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地!
5.2 Linux 文件权限概念
1、文件属性
第一栏代表这个文件的类型与权限(permission):
第一个字符代表这个文件是“目录、文件或链接文件等等”:
当为[ d ]则是目录,例如上表文件名为“.config”的那一行;
当为[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
若是[ l ]则表示为链接文件(link file);
若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。
接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。
第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例, 该文件的拥有者可以读写,但不可执行;
第二组为“加入此群组之帐号的权限”;
第三组为“非本人且没有加入本群组之其他帐号的权限”。
---------------------------------------------------------------------------------------------------------
第二栏表示有多少文件名链接到此节点(i-node):
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node。
这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。
-----------------------------------------------------------------------------------------------------------
第三栏表示这个文件(或目录)的“拥有者帐号”
第四栏表示这个文件的所属群组
第五栏为这个文件的容量大小,默认单位为Bytes;
第六栏为这个文件的创建日期或者是最近的修改日期:
这一栏的内容分别为日期(月/日)及时间。如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。
如果想要显示完整的时间格式,可以利用ls的选项,亦即:“ls -l --full-time”就能够显示出完整的时间格式了!包括年、月、日、时间。
-----------------------------------------------------------------------------------------------------------------------
第七栏为这个文件的文件名
这个字段就是文件名了。比较特殊的是:如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”,例如上表中的.config那一行,该文件就是隐藏文件。 你可以使用“ls”及“ls -a”这两个指令去感受一下什么是隐藏文件。
2、如何改变文件属性与权限
chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
改变所属群组, chgrp
改变一个文件的群组:
直接以chgrp来改变即可,不过,请记得,要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!
改变文件拥有者, chown
要注意的是, 使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。
chown的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可!语法与范例:
chown也可以使用“chown user.group file”,亦即在拥有者与群组间加上小数点“ . ”也行! 不过很多朋友设置帐号时,喜欢在帐号当中加入小数点(例如vbird.tsai这样的帐号格式),这就会造成系统的误判了! 所以比较建议使用冒号“:”来隔开拥有者与群组!此外,chown也能单纯的修改所属群组! 例如“chown .sshd initial-setup-ks.cfg”就是修改群组~看到了吗?就是那个小数点的用途!
******************************************************************************************************************************
改变权限, chmod
数字类型改变文件权限:
文件权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。
----------------------------------------------------------------------------------------------------------------------------
符号类型改变文件权限:
九个权限分别是
(1)user (2)group (3)others三种身份 !
我们就可以借由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x
“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
user (u):具有可读、可写、可执行的权限;
group 与 others (g/o):具有可读与执行的权限。 所以就是:
那么假如是“ -rwxr-xr-- ”这样的权限呢?可以使用“ chmod u=rwx,g=rx,o=r filename ”来设置。此外,如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:
而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
************************************************************************************************************************************
3、目录与文件之权限意义:
权限对文件的重要性:
文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:
r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
x (eXecute):该文件具有可以被系统执行的权限。
那个可读(r)代表读取文件内容是还好了解,那么可执行(x)呢?这里你就必须要小心啦!因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe,.bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的!
至于最后一个w这个权限呢?当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限!对于文件的rwx来说, 主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系喔!因为文件记录的是实际的数据!
权限对目录的重要性:
目录主要的内容在记录文件名清单,文件名与目录有强烈的关连啦! 所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
r (read contents in directory):
表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
--------------------------------------------------------------------------------------------
w (modify contents of directory):
这个可写入的权限对目录来说,表示你具有异动该目录结构清单的权限,也就是下面这些权限:
创建新的文件与目录;
删除已经存在的文件与目录(不论该文件的权限为何!)
将已存在的文件或目录进行更名;
搬移该目录内的文件、目录位置。
总之,目录的w权限就与该目录下面的文件名异动有关!
-----------------------------------------------------------------------------------------------
x (access directory):
目录的x代表的是使用者能否进入该目录成为工作目录的用途!
所谓的工作目录(work directory)就是你目前所在的目录!
举例来说,当你登陆Linux时, 你所在的主文件夹就是你当下的工作目录。而变换目录的指令是“cd”(change
directory)!
先用root的身份创建所需要的文件与目录环境
一般用户的读写权限为:
目录是744的权限设置,一般用户应该能有 r 的权限, 但这样的权限使用者能做啥事呢?
如果该目录属于用户本身,会有什么状况?
x 在目录当中是与“能否进入该目录”有关,至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录, 是
个很重要的参数
使用者操作功能与权限:
假设两个文件名,分别是下面这样:
/dir1/file1
/dir2
假设你现在在系统使用 dmtsai 这个帐号,那么这个帐号针对 /dir1, /dir1/file1, /dir2 这三个文件名来说,分别需要“哪些最小的权限”才能达成各项任务?
*******************************************************************************************
4、linux文件种类与扩展名
文件种类:
正规文件
纯文本文件(ASCII)
二进制档(binary)
数据格式文件(data):有些程序在运行的过程当中会读取某些特定格式的文件,Linux在使用者登陆时,都会将登录的数据记录在
/var/log/wtmp那个文件内,该文件是一个data file,他能够通过last这个指令读出来! 但是使用cat时,会读出乱码~因为他是属于
一种特殊 格式的文件
目录(directory):第一个属性为 [ d ]
链接文件(link):第一个属性为 [ l ]
设备与设备文件(device):
区块(block)设备文件:查一下/dev/sda看看, 会发现第一个属性为[ b ]
字符(character)设备文件:第一个属性为 [ c ]
数据接口文件(sockets):第一个属性为[ s ],最常在/run或/tmp这些个目录中看到这种文件类型.
数据输送档(FIFO, pipe):FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。
---------------------------------------------------------------------------------------------------------------------------------
Linux文件扩展名:
x代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容.
通常我们还是会以适当的扩展名来表示该文件是什么种类的
*.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh
Z, .tar, .tar.gz, .zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar等等的,由于不同的压缩软件,而取其相关的扩展名
.html, .php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰!
5.3 Linux 目录配置
1、Linux目录配置的依据--FHS
FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是下面这三个目录的定义:
/ (root, 根目录):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运行过程有关。
usr是Unix Software Resource的缩写, 也就是“Unix操作系统软件资源”所放置的目录
2、目录树 (directory tree)
主要的特性有:
目录树的启始点为根目录 (/, root);
每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
CentOS在根目录下面会有什么样子的数据?
3、绝对路径与相对路径
根据文件名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。 这两种文件名/路径的写法依据是这样的:
绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
相对路径:相对于目前路径的文件名写法。 例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法
4、CentOS 的观察
Linux distribution 的差异性, 除了 FHS 之外,还有个 Linux StandardBase (LSB) 的标准是可以依循。
重点回顾:
要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)
请问下面的目录与主要放置什么数据: /etc/, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev,
/var/log, /run
/etc/:几乎系统的所有设置文件均在此,尤其 passwd,shadow
/boot:开机配置文件,也是默认摆放核心 vmlinuz 的地方
/usr/bin, /bin:一般可执行文件摆放的地方
/usr/sbin, /sbin:系统管理员常用指令集
/dev:摆放所有系统设备文件的目录
/var/log:摆放系统登录文件的地方
/run:CentOS 7 以后才有,将经常变动的项目(每次开机都不同,如程序的PID)移动到内存暂存,所以 /run 并不占实际磁盘容量