程序员书籍笔记 程序员书籍笔记
  • JavaScript
  • HTML/CSS
  • PHP
  • Python
  • Go
  • 数据库
  • 容器
  • 微服务
  • 消息队列
  • 搜索引擎
  • 大数据
  • 鸟哥Linux私房菜
其他
  • 大数据
  • 深度学习
APP下载 (opens new window)
GitHub (opens new window)
  • JavaScript
  • HTML/CSS
  • PHP
  • Python
  • Go
  • 数据库
  • 容器
  • 微服务
  • 消息队列
  • 搜索引擎
  • 大数据
  • 鸟哥Linux私房菜
其他
  • 大数据
  • 深度学习
APP下载 (opens new window)
GitHub (opens new window)
  • 鸟哥Linux私房菜

    • 基本概念
    • 文件权限与目录配置
      • 使用者与群组
      • 文件权限的概念
        • 文件属性
        • 如何修改文件属性与权限
        • 目录与文件的权限意义
        • 文件种类与扩展名
      • Linux目录配置
        • Linux目录配置依据FHS
        • 目录树
        • 绝对路径与相对路径
        • centos观察
    • 文件与目录管理
  • 系统
  • 鸟哥Linux私房菜
小游
2021-05-14

文件权限与目录配置

# 使用者与群组

文件权限分为下面三种

  • 文件拥有者

    只有文件的拥有者才可以查看

  • 群组

    团队开发的时候用得到

  • 其他人

在我们 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
1
2
3
4
5
6
7
8
9
10
11
12

比如下面这个文件

-rw-r--r--   1 root root        13 5月  14 17:35 test.txt
1

-rw-r--r-- 表示文件的权限

权限一般会使用10位来进行显示

第一位表示文件的类型。文件有下面这几种类型

image-20210514174114850

后面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
1
2
3
4
5

# 如何修改文件属性与权限

有下面这几个命令

chgrp:改变文件所属群组
chown:改变文件拥有者
chmod:改变文件的权限,SUID,SGID,SBIT等等的特性
1
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
1
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
1
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
1
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
1
2
3
4

image-20210514175420706

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
1
2
3
4
5
6
7
8

# 目录与文件的权限意义

image-20210514175634814

下面这个例子说明了目录权限的意义

image-20210514175845706

看了上面这个表格,你应该会觉得很可怕喔!因为,要读一个文件时,你得要具有『这个文件所在目录的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文件名限制

image-20210515151632489

# Linux目录配置

# Linux目录配置依据FHS

为了保持各个系统文件目录之间的规范,就有了FHS这个标准,有点像下面这个样子:

image-20210515151905420

  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的 socket文件等,由于仅与自身机器有关所以当然就不适合分享给其他主机了
  • 不变的:有些数据是不会经常变动的,跟随着 distribution而不变动。例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
  • 可变动的:经常改变的数据,例如脊录文件、一般用户可自行收受的新闻组等

实际上FHS只规定了三层目录底下应该放置的数据

  • /(root,根目录):与开机系统有关;
  • usr( unix software resource):与软件安装执行有关
  • var( variable):与系统运作过程有关。

# 根目录的意义与内容

根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。由于系统开机时需要特定的开机软件、核心文件、开机所需稈序函式库等等文件数据,若系统出现错误时,根目录也必须要包含有能够修复文件系统的程序才行。因为根目录是这么的重要,所以在FHS的要求方面,他希望根目录不要放在非常大的分区槽内,因为越大的分区槽妳会放入越多的数据,如此一来根目录所在分区槽就可能会有较多发生错误的机会。

因此FHS标准建议:根目录(所在分区槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

下面贴一下各个目录的作用

image-20210515152355673

image-20210515152440068

image-20210515152451561

image-20210515152520491

image-20210515152616760

# user目录下的内容

默认所有的系统软件都会放到user目录下,一般有下面这些内容

image-20210515152824703

image-20210515152833961

# var目录下的内容

如果/usr是安装时会占用较大硬盘容量的目录,那么/ar就是在系统运作后才会渐渐占用硬盘容量的目录。因为var目录主要针对常态性变动的文件,包括快取( cache)、登录档( og file)以及某些软件运作所产生的文件,包括程序文件( (lock file, run file),或者例如 MySQL数据库的文件等等。常见的次目录有

image-20210515153030125

# 目录树

在我们的实际centos系统中,目录树长下面这样

image-20210515153318242

# 绝对路径与相对路径

  • 绝对路径:由根目录()开始写起的文件名或目录名称,例如 /home/dmtsai/. bashrc
  • 相对路径:相对于目前路径的文件名写法。例如./home/ desai或..home/ dmtsai等等。反正开头不是 就属于相对路径的写法

image-20210515153447841

# 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
编辑 (opens new window)
上次更新: 2021/05/15, 20:39:34
基本概念
文件与目录管理

← 基本概念 文件与目录管理→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式