Linux文件权限与目录管理详解

一、Linux文件系统的三种身份

1)、文件所有者
2)、同组用户
同一个用户组的用户可以访问该用户组的文件;
每个账号可以加入多个用户组。
在同一个用户组的文件也可以设置不同的权限,可以不让本组用户查看。
3)、其他人
除了文件主、同组用户以外的人就是其他人。
PS: /etc/passwd 记录所有用户的账号
/etc/shadow 记录所有用户的密码
/etc/group 记录所有的组名

二、文件属性

ls -al 显示所有的文件名和相关属性(包括以.开头的隐藏文件)

total 72
drwxr-xr-x+ 28 chaibozhou staff  952 4 23 08:08 .
drwxr-xr-x  5 root    admin  170 4 13 21:24 ..
-r--------  1 chaibozhou staff   9 3 21 12:00 .CFUserTextEncoding
-rw-r--r--@ 1 chaibozhou staff 10244 4 23 11:25 .DS_Store
drwx------  5 chaibozhou staff  170 4 23 14:13 .Trash
-rw-------  1 chaibozhou staff  3205 4 23 16:37 .bash_history
drwxr-xr-x  6 chaibozhou staff  204 4 4 15:51 .config

第一列:文件的类型和权限
d:目录文件
-:普通文件
l:链接文件
b:用于存储数据的设备文件
c:用于传输数据的设备文件:鼠标、键盘

接下来都是三个字符为一组,分别表示文件所有者的权限、同组用户的权限、其他用户的权限,而且r、w、x的顺序是固定不变的。

第二列:有多少文件名连接到此节点

第三列:这个文件/目录的所有者账号
第四列:这个文件所属的用户组
第五列:这个文件的大小,单位是B
第六列:这个文件的创建日期或修改日期
若想要现实完整的日期时间,可以在ls上加上参数:ls -l Cfull-time
PS:在Linux的命令中,如果参数以-开头,则表示后面的参数是简写;如果以--开头,则表示后面的参数是完整的。这里的full-time就是一个完整的参数。
PS:如果当初使用中文安装Linux的话,显示完整的日期应该会以中文显示,但中文无法在命令窗口中显示,此时就会出现乱码,此时只能设置一下,让日期用英文显示:LANG=en_US
第七列:文件名

三、Linux权限的重要性

1、保护系统文件的功能
通常系统文件只有root管理员才有读、写、执行的权限。
2、为团队开发提供数据共享的功能
同一个开发团队可以设置成同组用户,从而能够共享文件。

四、改变文件属性与权限的命令

1、chgrp:改变文件所属的用户组
chgrp [-R] 新用户组 目录或文件 : 将这个路径下的文件的用户组改成“新用户组“
PS:这个新用户组一定得是/etc/group下有的,否则会报错。
PS:若最后一个参数是目录,则表示只将这个目录下的文件的用户组改成这个。
PS:-R表示若最后一个参数是目录,则将当前目录下的文件连同子目录下的所有文件的用户组都改成这个。
2、chown:改变文件主
chown [-R] 用户名 文件或目录 : 将这个目录下的所有文件的文件主都改成这个用户名。
PS:这个用户名必须是/etc/passwd下有的才行。
这个命令可以既修改文件主又修改用户组:chown [-R] 用户名:用户组名 目录/文件
chown [-R] 用户名.用户组名 目录/文件
PS:由于用户名可以存在小数点,当出现含有小数点的用户名时,系统会发生误判,所以我们一般都使用:来连接用户名和用户组名。
还可以仅修改用户组名:chown [-R] .用户组名 目录/文件
什么时候需要改变文件的文件主和用户组?
当我们把一个文件拷贝给别人的时候,假设这个文件只能文件主读取,由于拷贝会把文件的权限和所有的属性都一同复制,那么当另外一个人拿到拷贝后的文件后仍然无法访问;所以在拷贝完成之后,第一个人应当修改文件的属性和权限。

cp  原目录/原文件  新目录/新文件
1、chmod:改变文件的权限
改变文件的权限有两种办法,分别是:用数字进行权限的修改、用符号进行权限的修改。
a)用数字进行权限的修改
前面我们已经知道,权限有9个字母组成,并且每三个为一组,分别表示:文件主的权限、同组用户的权限、其他人的权限。在这种方式中,r=4、w=2、x=1,将每一组的三个值加起来,组成一个三位数即可。例如:
文件主:rwx = 4+2+1=7;
同组用户:rwx=4+2+1=7;
其他人:---=0+0+0=0;
所以命令如下:

chmod [-R] 770 文件/目录

b)用符号进行权限的修改
chmod  u/g/o/a  +/-/=  r/w/x  文件/目录
例子:文件主能够读、写、执行;同组用户和其他用户能够读、执行。
chmod  u=rwx,go=rx  文件名
假设原先不知道文件的属性,现在只想让所有的人能够执行这个文件,则:
chmod  a+x  文件/目录
假设原先不知道文件的属性,现在只想让同组用户和其他用户无法写,则:
chmod  go-w  文件/目录
目录与文件权限的意义

一个文件具有rwx,仅仅表示用户可以对这个文件内容进行读、写、执行,即读取文件内容、向文件中写入内容、执行文件。但并不具备删除这个文件的权限。

一个目录具有rwx:
r:表示具有读取目录结构的权限,也就是我可以通过ls这个命令来查看目录的结构,但是,我是无法通过cd进入到这个目录下的。
w:表示具有更改目录结构的权限,即能够创建/删除/重命名/移动文件/目录。
x:表示某一用户能够通过cd进入到这个目录下。
PS:一个目录是否有x权限是非常重要的,如果没有x权限,表示不能进入到这个目录下,也就是不能执行这个目录下的所有程序。例:有一个目录文件如下

drwxr--r--  3  root  root  4096  日期  .ssh
这个目录文件的同组用户和其他用户只能通过ls查看目录的结构,不能cd到这个目录中去,也不能执行这里面的所有程序。

在架站时,要将服务器中的一些资源给外界访问,但如果一个目录只开放了r权限,那么只能ls这个目录的结构,却不能进入到这个目录中访问里面的数据。若要把目录中的数据开放给别人浏览的话,至少要开放r和x权限,但w权限不能轻易开放。例如:

假设有个账号user1,她的主文件夹是:/home/user1,user1对此目录文件具有rwx权限,在这个文件夹下有一个data文件,权限如下:-rwx―― 1 root root ……,则:
user1对于这个文件来说属于其他用户,不具备任何权限;但是对于这个文件夹来说,具有rwx,能够通过ls查看文件夹的目录结构,能够通过cd进入该文件夹,能够在这个文件夹下创建、删除、重命名、移动文件。

使用root账号在/temp下创建一个目录/dir,该目录的权限为744;再在/dir下创建文件test。
分析:对于dir这个目录,文件主rwx,同组用户和其他用户只能r;即:文件主能够ls这个目录结构,能够cd到这个目录,能够在这个目录中创建、删除、重命名、移动文件;而同组用户和其他用户只能ls这个目录结构。
PS:创建目录:mkdir 目录名
PS:创建空文件:touch 文件名

#用root身份进行以下操作
cd /temp
mkdir dir
chmod 744 dir
touch dir/test
chmod 600 dir/test #对于这个文件,文件主4+2:读和写,同组用户和其他用户啥也不能干
#现在切换身份至chai
su - chai #切换身份的命令:su - 用户名
cd /temp
ls -l dir #现在身份是chai,对于这个目录来说,是其他用户,那么只有r权限,也就是只能ls这个目录的结构,无法cd到这个目录中去
cd dir #直接报错:permission denied
exit #退出到刚才的身份
chown chai /temp/dir #将dir这个目录的文件主改为chai,此时chai具有rwx权限
cd /temp/dir #此时chai可以cd到dir中,可以在dir中创建、删除、重命名、移动文件
rm test #删除test文件

五、Linux文件种类

普通文件-
1. 纯文本文件
可以通过cat /chai来查看chai这个普通文件。
2. 二进制文件
Linux中的可执行文件(scripts和文字批处理文件不算)。
刚才的cat就是二进制文件。
3. 数据格式文件
就是程序运行时会被读取的具有特定格式的文件,如配置文件。
例如:用户在登陆Linux时,登陆日志会被记录在/var/log/wtmp这个文件中,这个文件就是一个数据格式文件。
PS:数据格式文件要用last去读,若用cat读会出现乱码。

目录文件d

连接文件l
就是Windows下的快捷方式。

设备文件
1. 块设备文件b
用于存储数据的设备文件,如:硬盘、软盘。
2. 字符设备文件c
用于数据传输的设备文件,如:键盘、鼠标。
3. 套接字s
这个设备文件在/var/run中。
4. 管道p
用于解决多个程序同时访问一个文件所造成的错误问题。

六、Linux扩展名

Linux并没有扩展名,一个Linux的文件是否可以执行,取决于这个文件的属性中是否有x这个权限。
但是为了增强文件的可读性,我们还是给文件增加了“扩展名“。
*.sh表示脚本或批处理文件。
*Z、*.tar、*.tar.gz、*.zip、*.tgz他们都是压缩文件。
PS:从网上下载的文件的权限是有可能发生改变的,所以当我们下载的文件无法运行时查看一下它的权限是否有x。

七、Linux对文件的限制

Linxu默认采用Ext2/Ext3文件系统,对文件名的长度限制为:
单个文件名或目录名最大长度255个字符;
完整的文件或目录名最大长度为4096个字符。
文件命名时要避免一些特殊字符。

八、Linux目录配置标准

由于开发Linux distribution的厂商非常多,所以要对这些厂商开发的文件系统规范化,因此就出现了文件系统配置规范:Filesystem Hierarchy Standard=FHS。

FHS对目录规范的四种类型:

1、可分享的目录
表示这个目录可以分享给网络上的其他主机挂载使用。
2、不可分享的目录
只能在自己机器上运行的设备文件或者与程序有关的socket文件,由于只与自己的机器有关,所以自然就不能分享给其他主机了。
3、不变的目录
不管什么样的distributions,这些目录是固定不变的,而且目录里面的文件数据基本不发生变化。一般这些目录中存放函数库、系统配置文件等。
4、可变的目录
这些目录中文件的数据一直会发生变化,如日志文件。
根目录是整个系统最重要的目录,其他所有的饿目录都是由根目录衍生而来的,同时根目录也与开机、还原、系统修复等操作有关。

FHS建议:根目录要足够的小,而且应用程序不要和根目录放在同一个分区中。

FHS建议根目录下必须要有这些目录:
- /bin:在bin目录下的命令可以被所有账号使用,一般的命令是:cat、chmod、chown、date、mv、mkdir、cp、bash
- /boot:放开机会用到的文件
- /dev:任何设备都是以文件的形式存放在这个目录当中
- /etc:系统主要的配置文件都放在这个目录中。这个目录下的文件属性是可以给一般用户查阅的,但只有root才可以修改,FHS建议:这个目录下不要放置可执行文件。
- /home:系统默认的用户主文件夹。
~表示当前登陆用户的主文件夹
~chai表示指定用户的主文件夹
- /lib:存放开机时用到的库函数及/bin、/sbin目录下的命令会使用到的库函数。
- /media:放置可删除的设备文件。如:软盘、光盘。
- /mnt:如果要临时挂载一些额外的设备就放在这个文件夹下。
- /opt:放置第三方软件的目录
- /root:系统管理员的主文件夹
- /sbin:放置开机过程中需要的,包括开机、修复、还原系统所需要的命令
- /srv:是service的缩写,存放网络服务所需的一些数据。
- /tmp:一般用户执行程序暂时存放数据的地方。任何人都可以访问,所以要定时清理一下。FHS建议distributions开机时要将这个目录清空。

其他重要的目录:
- /lost+found:使用ext2/ext3文件系统才会产生的一个目录。当文件系统发生错误时,一些丢失的片段就会放在这个目录中。
- /proc:是一个虚拟文件系统,也就是它的数据都是存放在内存中的,不占用硬盘空间。
- /sys:也是一个虚拟文件系统,记录内核相关信息。

开机的时候只有根目录被挂载了,其他的目录所在的分区都是在系统启动完成之后才被挂载的。因此与开机过程有关的目录就必须要和根目录放在同一个分区中。必须与根目录放在同一个分区中的目录有:

/etc:配置文件
/bin:重要的执行文件
/dev:所需要的设备文件
/lib:执行文件所需要的库函数与内核所需要的模块
/sbin:重要的系统执行文件

/usr目录
=UNIX Software Resource,是操作系统关键资源放置的目录。
FHS建议:所有软件开发者都应将数据放置在这个目录的子目录下,而不要自行创建独立的目录。
这个目录就相当于Windows下的c:\program files。

/var目录
/usr放置安装程序时所需要的较大容量的文件,而/var下存放在程序执行过程中渐渐才会占用硬盘的目录。如:缓存、日志等。

每一个目录不只能挂载本地的文件系统,还可以使用网络上的文件系统。可以利用Network File System服务器=NFS服务器来挂载网络山的指定目录。

以上就是本文的全部内容,希望对大家的学习有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


起步 处理器架构,参考 x86是指intel的开发的一种32位指令集 intel和amd早期的cpu都支持这种指令集 AMD比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64 Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64,后来支持AMD64的指令集,
pscp pscp -P 22 C:\work\test.txt root@192.168.1.5:/home/data pscp -P 22 root@192.168.1.5:/home/data/test.txt C://work// 检索 find / -name default.config
文件处理 ls -a # 显示所有文件 ls -l # 显示详细信息 ls -d # 显示路径 mkdir /目录名称 # 创建目录 cd /目录名称 # 切换目录 pwd # 显示当前路径 rmdir /目录名称 # 删除目录 cp -rp [目录名称] [目标目录] # 复制目录到目标目录 cp
准备一台电脑(我就用联想拯救者r7000演示) 参考博客制作启动盘 插上U盘,启动电脑,一直按F2 进入如下页面后,将U盘设置为第一启动项,点击exit,保存并退出 之后进入如下页面,选择第三项 进入如下页面,选择第四项 进入如下页面,选择第一项,选中后,先不要点Enter 按e键,将inst.st
认识 Linux系统是参考了UNIX系统作为模板开发的,但没有使用UNIX的代码;是UNIX的一种,但不是衍生版 在Linux内核的基础上开发是发行版 分区 逻辑分区永远从5开始 步骤 挂载:可理解为分配盘符,挂载点即是盘符名;不同之处:Linux中是以空目录名称作为盘符 Hda 第一块硬盘 Hda
文件处理命令 以 . 开头的文件是隐藏文件 以 - 开头表示这是一个文件 以 d 开头表示是一个目录 以 l 开头表示是一个软链接 第一个root是所有者,第二个root是所属组 ls -h 以文件默认大小后缀 显示 ls -i 查看i节点(唯一标识) 所有者:只能有一个,可变更 所属组:只能有一个
参考 01 02 03 前提环境 本地安装VirtualBox,并安装CentOS8,配置网络后,window系统上putty能连接到CentOS8服务器 配置步骤 右键服务器复制 启动复制后的服务器,查看ip和hostname发现和原来的服务器一样,需要修改 hostname # 查看主机名 vi
文件搜索命令 星号匹配任意字符,问号匹配任意单个字符 -iname 根据文件名查找且不区分大小写 -ok 命名会有一个询问的步骤 如果没有找到指定文件,可输入命令:updatedb 更新文件资料库;除tmp目录不在文件资料库收录范围之内 locate -i 文件名 # 检索时不区分大小写 which
安装环境 安装最新版的Virtual Box,点击安装 下载centos8镜像 创建虚拟机,可参考 选择下载到本地的镜像 设置启动顺序 点击启动 启动过程中报错:“FATAL:No bootable medium found!” 1.没有选择iso镜像 2.光驱没有排在第一位置 3.镜像只能选择x8
Linux严格区分大小写 所有内容文件形式保存,包括硬件 Linux不靠扩展名区分文件类型 挂载:将设备文件名和挂载点(盘符)连接的过程 Linux各个目录的作用 bin表示二进制 服务器注意事项 远程服务器不允许关机,只能重启 重启时应该关闭服务 不要在服务器访问高峰运行高负载命令 远程配置防火墙
IDE连接Linux,上传下载文件 参考1 参考2 连接Linux 上传下载文件 本地项目打包后上传 查看是否上传成功,右键下载 补充 后端项目开发完成后,需clean掉临时文件target文件夹,且只推送修改过的文件 前端项目开发的过程中,需要在每个子组件中使用scoped,确保每个子组件中的编码
起步 LTS与普通版本的区别 LTS版本的发布周期更长,更加稳定 安装jdk sudo mkdir /usr/lib/jvm # 在Ubuntu中创建目录 pscp D:\安装包\linux源码包\jdk-8u291-linux-x64.tar.gz chnq@192.168.0.102:/tmp
前言 最近在b站上看了兄弟连老师的Linux教程,非常适合入门:https://www.bilibili.com/video/BV1mW411i7Qf 看完后就自己来试着玩下,正好手上有台空闲的电脑就尝试不使用虚拟机的方式安装Linux系统 安装步骤 制作启动盘 下载ISO镜像,我这里下载的是Cen
新建虚拟电脑 设置内存和处理器 设置硬盘大小 完成 设置 查看光驱 设置启动顺序 点击启动 选择第1项 进入图形安装界面 选择安装位置,开始安装 设置root密码 重启 登录 查看本地文件夹 配置网络,点击设置 查看宿主机ip C:\Users\ychen λ ipconfig 无线局域网适配器 W
源码包安装需手动下载后安装 二进制包则在package目录下 rpm命令管理rpm包 若某个rpm包依赖于某个模块,需要到网站www.rpmfind.net查询该模块依赖的包,安装这个包后自动安装模块,之后就能安装rpm包了 安装升级时使用包全名 查询卸载时使用包名 虚拟机中的Linux系统安装rp
首先进入命令模式,再输入以下命令 命令模式用于输入命令 插入模式可对文件编写操作 编辑模式下的命令是在冒号后输入 :12, 15d # 删除指定范围的行,这里是删除12到15行 :n1,n2s/old/new/g ## 表示从n1行到n2行,old表示旧的字符串 vim使用小技巧:自定义快捷键,如快
使用源码包安装,需要自己指定安装位置,通常是 /usr/local/软件名/ linux中要想启动执行文件,应使用绝对路径 /绝对路径/rpm包名 start ## 执行方式一 service rpm包名 start ## 执行方式二 使用源码包安装后,由于自定义安装路径,就不能使用service命
网络命令 在收邮件的用户中,输入 mail 可查看邮件信息,输入序列号查看详细信息 在mail命令下,输入h 查看所有邮件的列表 输入:d 序列号 # 删除邮件 last # 统计所有用户登录或重启时间,用于日志查询 lastlog # 显示包括未登录用户的登录时间 lastlog -u 用户id
若要使用yum管理,必须能连接网络,首先配置网络IP 进入yum源文件中启动容器 使用yum源头安装rpm包不需要进入package路径,同时也不需要使用包全名,会有yum自动管理 安装软件组
简介 client即是本机安装的docker,相当于git Docker_host相当于centos系统 registry则是docker仓库,相当于GitHub 镜像用于创建docker容器,一个镜像可以创建多个docker容器 容器是由镜像创建的运行实例,(镜像相当于类,容器相当于类创建的对象)