文件权限与目录配置
# 使用者与群组
文件权限分为下面三种
文件拥有者
只有文件的拥有者才可以查看
群组
团队开发的时候用得到
其他人
在我们 Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root的相关信息,都是记录在/etc/ passwd这个文件内的。至于个人的密码则是记录在/etc/hadow这个文件下此外, Linux所有的组名都纪录在 /etc/group内!这三个文件可以说是 Linux系统里面账号、密码、群组信息的集中地啰!
# 文件权限的概念
# 文件属性
使用 ls -al
可以查看文件的详细信息
[root@localhost ~]# ls -al
总用量 317976
dr-xr-x---. 18 root root 4096 5月 14 17:35 .
dr-xr-xr-x. 22 root root 284 12月 7 11:24 ..
-rw-------. 1 root root 19163 5月 14 17:18 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 373 10月 25 2020 .bashrc
drwxr-xr-x. 6 root root 60 3月 7 16:28 .cache
drwxrwxrwx 3 root root 26 12月 8 13:06 .chromium-browser-snapshots
drwx------ 5 root root 53 3月 7 16:27 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
2
3
4
5
6
7
8
9
10
11
12
比如下面这个文件
-rw-r--r-- 1 root root 13 5月 14 17:35 test.txt
-rw-r--r--
表示文件的权限
权限一般会使用10位来进行显示
第一位表示文件的类型。文件有下面这几种类型
后面9位分别表示拥有者,群组,其他人所拥有的权限(每个用3位来表示)r表示读 w表示写 x表示执行权限
如果是3位来表示的话 1表示读 2表示写 4表示可执行
1
表示连结数
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个档名就会连结到一个i-node啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。关于i-node的相关资料我们会在第七章谈到文件系统时再加强介绍的
root
表示文件拥有者
root
表示文件所属群组
13
表示文件的大小
默认单位为字节
5月 14 17:35
表示最后修改时间
test.txt
表示文件名
如果想显示详细的时间,可以加上 --full-time
[root@localhost ~]# ls -l --full-time
总用量 317904
drwxr-xr-x 9 root root 155 2021-04-21 05:00:56.000000000 +0800 elasticsearch-7.12.1
-rw-r--r-- 1 root root 325529336 2021-05-06 21:32:47.789600827 +0800 elasticsearch-7.12.1-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 13 2021-05-14 17:35:19.651584631 +0800 test.txt
2
3
4
5
# 如何修改文件属性与权限
有下面这几个命令
chgrp:改变文件所属群组
chown:改变文件拥有者
chmod:改变文件的权限,SUID,SGID,SBIT等等的特性
2
3
注意如果想修目录下所有的文件,可以加上 -r
参数
首先我们修改一下 test.txt
群组为 www
chgrp www test.txt
[root@localhost ~]# ls -l
总用量 317904
-rw-r--r-- 1 root www 13 5月 14 17:35 test.txt
2
3
4
下面修改一下文件拥有者
[root@localhost ~]# chown www test.txt
[root@localhost ~]# ls -l
总用量 4
-rw-r--r-- 1 www www 13 5月 14 17:35 test.txt
2
3
4
最后我们修改一下权限(这个754 就是数字表示权限)
[root@localhost ~]# chmod 755 test.txt
[root@localhost ~]# ls -l
总用量 4
-rwxr-xr-x 1 www www 13 5月 14 17:35 test.txt
2
3
4
当然我们也可以通过符号类型来改变文件的权限
[root@localhost ~]# chmod u=x,go=x test.txt
[root@localhost ~]# ls -l
总用量 4
---x--x--x 1 www www 13 5月 14 17:35 test.txt
2
3
4
user(u):具有可读、可写、可执行的权限 group与 others(g/o):具有可读与执行的权限。
如果我们想让所有人都有写的权限可以这样操作,去掉可以直接使用-
[root@localhost ~]# chmod a+w test.txt
[root@localhost ~]# ls -l
总用量 4
--wx-wx-wx 1 www www 13 5月 14 17:35 test.txt
[root@localhost ~]# chmod a-w test.txt
[root@localhost ~]# ls -l
总用量 4
---x--x--x 1 www www 13 5月 14 17:35 test.txt
2
3
4
5
6
7
8
# 目录与文件的权限意义
下面这个例子说明了目录权限的意义
看了上面这个表格,你应该会觉得很可怕喔!因为,要读一个文件时,你得要具有『这个文件所在目录的x权限』才行!所以,通常要开放的目录,至少会具备rx这两个权限!现在你知道为啥了吧?
# 文件种类与扩展名
有下面几种文件的种类
- 正规文件(包括纯文本,二进制,数据格式文件) 一般使用 - 来表示
- 目录 使用 d 来表示目录
- 快捷方式 一般用l表示 (相当于软链接)
- 装置与设备文件分为 b(区块设备,比如磁盘) c(字符设备,比如键盘)
- s 数据接口文件(其实就是socket通信)
- 数据传输文件 p
# 文件扩展名
基本上, Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个 Linux文件能不能被执行,与他的第一栏的十个属性有关,与文件名根本一点关系也没有。这个观念跟 Windows的情况不相同喔!在Windows底下,能被执行的文件扩展名通常是.com.exe.bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ rwxr-Xr-X]即代表这个文件具有可以被执行的能力喔!
基本上,Linuⅸx系统上的文件名真的只是让你了解该文件可能的用途而已,真正的执行与否仍然需要权限的规范才行!例如虽然有一个文件为可执行文件,如常见的/bin/ls这个显示文件属性的指令不过,如果这个文件的权限被修改成无法执行时,那么ls就变成不能执行啰!上述的这种问题最常发生在文件传送的过程中。例如你在网络上下载一个可执行文件,但是偏偏在你的Linuⅸ系统中就是无法执行!呵呵!那么就是可能文件的属性被改变了!不要怀疑,从网络上传送到你的 Linux系统中,文件的属性与权限确实是会被改变的喔!
linux文件名大概在128个中午字符左右
# Linux文件名限制
# Linux目录配置
# Linux目录配置依据FHS
为了保持各个系统文件目录之间的规范,就有了FHS这个标准,有点像下面这个样子:
- 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录
- 不可分享的:自己机器上面运作的装置文件或者是与程序有关的 socket文件等,由于仅与自身机器有关所以当然就不适合分享给其他主机了
- 不变的:有些数据是不会经常变动的,跟随着 distribution而不变动。例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
- 可变动的:经常改变的数据,例如脊录文件、一般用户可自行收受的新闻组等
实际上FHS只规定了三层目录底下应该放置的数据
- /(root,根目录):与开机系统有关;
- usr( unix software resource):与软件安装执行有关
- var( variable):与系统运作过程有关。
# 根目录的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。由于系统开机时需要特定的开机软件、核心文件、开机所需稈序函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分区槽内,因为越大的分区槽妳会放入越多的数据,如此一来根目录所在分区槽就可能会有较多发生错误的机会。
因此FHS标准建议:根目录(所在分区槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
下面贴一下各个目录的作用
# user目录下的内容
默认所有的系统软件都会放到user目录下,一般有下面这些内容
# var目录下的内容
如果/usr是安装时会占用较大硬盘容量的目录,那么/ar就是在系统运作后才会渐渐占用硬盘容量的目录。因为var目录主要针对常态性变动的文件,包括快取( cache)、登录档( og file)以及某些软件运作所产生的文件,包括程序文件( (lock file, run file),或者例如 MySQL数据库的文件等等。常见的次目录有
# 目录树
在我们的实际centos系统中,目录树长下面这样
# 绝对路径与相对路径
- 绝对路径:由根目录()开始写起的文件名或目录名称,例如 /home/dmtsai/. bashrc
- 相对路径:相对于目前路径的文件名写法。例如./home/ desai或..home/ dmtsai等等。反正开头不是 就属于相对路径的写法
# centos观察
有下面几个查看版本的指令
# 查看Linux核心版本
[root@localhost usr]# uname -r
3.10.0-1160.6.1.el7.x86_64
# 查看系统的位数
[root@localhost usr]# uname -m
x86_64
# 查看更详细的信息
# 先安装下面这个软件
yum install redhat-lsb
# 然后我们就可以看到详细的信息了
[root@localhost usr]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.9.2009 (Core)
Release: 7.9.2009
Codename: Core
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16