用户与用户组
- 文件拥有者(owner):
- 用户组(group):团队协作
- 其他人(others)
在linux里面,任何一个文件都具有用户(USer)、所属群组(group)和其他人(others)三种身份的个别权限。
文件权限
第一栏
-rw-r--r-- 14 root root 91 Jun 26 14:03 .dbus
文件类型权限 硬链接数 文件拥有者 文件所属组 文件大小 文件最后修改时间 文件名
- 第一栏代表文件的类型好权限
(1)第一个字符代表这个文件是目录、文件还是链接。【d】是目录,【-】是普通文件,【l】是链接。 - 接下来3个一组,而且均为【rwx-】的组合,【r】代表可读(read)、【w】代表(write)、x代表可执行(execute),如果没有权限,则用【-】表示。
- 3组中,第1组表示文件拥有者可具备的权限,第2组表示文件所属组所具备的权限,第3组表示其他人具备的权限。
- 用数字表示权限【r=4】、【w=2】和【x=1】,例如:【-rwxr-xr–】则表示一个权限为754的普通文件。
第二栏
表示有多少个文件名链接到此节点(inode,每个文件都会讲它的权限和属性记录到文件系统的iNode中)
第三栏
文件拥有者账号
第四栏
文件所属组账号
第五栏
文件大小,默认为【Bytes】
第六栏
- 文件的创建日期或是最近的修改日期
- 文件被修改的时间距离现在太久,则时间部分只会仅显示年份。
- 可以使用【
ls -l --full-time
】显示完整时间
第七栏
文件名,如果文件名前面有个【.】则代表这个文件为隐藏文件。
修改文件的属性和权限
chmod
: 修改文件的权限,SUID、SGID、SBIT等特性chown
:修改文件的拥有者chgrp
:修改文件所属用户组,修改组名必须要在/etc/group
文件中存在。
chmod
权限设备方法有两种,分别可以用数字或是符号来进行权限的修改
数字类型修改文件权限
owner = rwx = 4+2+1 = 7
group = rw- = 4+2+0=6
others = --- = 0+0+0 = 0
语法:
chmod [-R] xyz 文件或目录
xyz:数字权限
-R: 递归,即连同子目录下的所有文件都会修改
范例
[root@jiangguobiao ~]# ll test.txt
-rw-r--r--. 1 775 root 21 Nov 17 2019 test.txt
[root@jiangguobiao ~]# chmod 775 test.txt
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 775 root 21 Nov 17 2019 test.txt
符号类型修改权限
身份:
u--user = 用户
g--group = 用户组
o--others = 其他人
a--all = 全部身份
操作:
+ 增加权限
- 移除权限
= 设置权限
权限:
r--read = 可读
w--write = 可写
x -- execute = 可执行
范例
chmod u=rwx,go=rx .bashrc # 文件所属用户具有可写可读可执行权限,所属组具有可读可执行权限,其他人具有可读可执行权限
chmod a+w .banshrc # 文件所属用户、所属用户组和其他人增加可写权限
chmod u-x .bashrc # 文件所属用户移除可执行权限
chown
语法:
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录
-R:递归
范例
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 775 root 21 Nov 17 2019 test.txt
[root@jiangguobiao ~]# chown root test.txt
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 root root 21 Nov 17 2019 test.txt
[root@jiangguobiao ~]# chown jiang:jiang test.txt
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 jiang jiang 21 Nov 17 2019 test.txt
[root@jiangguobiao ~]# chown :root test.txt
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 jiang root 21 Nov 17 2019 test.txt
chgrp
语法:
chgrp [-R] dirname/filenames ...
-R:递归
范例:
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 jiang root 21 Nov 17 2019 test.txt
[root@jiangguobiao ~]# chgrp jiang test.
test.i5g test.txt test.txt.gpg
[root@jiangguobiao ~]# chgrp jiang test.txt
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 jiang jiang 21 Nov 17 2019 test.txt
思考
何时使用chown或chgrp?
答:当复制文件给他人时,cp
命令会复制执行者的属性和权限,当复制文件给其他用户时,其他用户还是没有权限操作,这是就可以修改文件所属用户或者所属用户组。
目录与文件的权限意义
文件是实际含有数据的地方,包含一般文本文件、数据库文件、二进制可执行文件等。
文件权限含义
- r(read):可读取此文件的实际内容
- w(write):可以编辑、新增或是修改文件的内容(不含删除该文件)
- x(execute):该文件具有可以被系统执行的权限
目录权限含义
目录主要的内容在记录文件名列比饿哦,文件名和目录有强烈的关联。
- r(read contents indirectory):具有读取目录结构列表的权限。一个目录具有【r】权限,表示可以查询该目录下的文件名数据,因此,可以利用【ls -l】显示该目录下的内容列表。
- w(modify contents of directory):具有改动该目录结构列表的权限,如建立新的文件与目录、删除已存在的文件和目录、将已存在的文件或目录进行更名和移动该目录的文件、目录位置。
- x(access directory):表示用户能否进入该目录成为工作目录(当前所在目录)
注意:当我们要开放目录共任何人浏览时,至少应该给予【r】和【x】权限,但【w】权限不可以随便给。
用户操作功能与权限总结
假设有两个文件,如下:
/dir1/file1
/dir2
假设有个用户dmtsi,那么这个账号针对【/dir1】、【/dir2】和【file1】需要最少什么权限才能完成各项任务。
操作 | /dir1 | file1 | /dir2 | 重点 |
---|---|---|---|---|
读取file1内容 | x | r | - | 要能够进入dir1才能独到里面的文件数据 |
修改file1内容 | x | rw | - | 能够进入dir1才能修改file1 |
执行file1内容 | x | rx | - | 能进入dir1,才能执行 |
删除file1内容 | wx | - | - | 能够进入dir1,而且具有目录修改权限 |
将file1复制到dir2中 | x | r | wx | 要能够读file1而且能够修改dir2内的数据 |
文件种类
常规文件
以-
表示,包含:
- 纯文本文件
- 二进制文件
- 数据文件
[root@jiangguobiao ~]# ll test.txt
-rwxrwxr-x. 1 jiang jiang 21 Nov 17 2019 test.txt
目录
第一个属性以d
表示
[root@jiangguobiao ~]# ll /root
total 29252
drwxr-xr-x. 4 root root 4096 Nov 24 2019 a
链接文件
第一个属性以【l】表示
[root@jiangguobiao ~]# ll tt
lrwxrwxrwx. 1 root root 8 Jul 8 22:39 tt -> test.txt
设备与设备文件
与系统周边及存储等相关的一些文件,通常都集中在/dev目录下:
- 区块设备文件:以【b】表示,如【/dev/sda】
- 字符设备文件:以【c】表示,如一些串行端口的接口设备,例如,键盘、鼠标等。这些设备能一次性读取,不能截断输出。
数据接口文件
用于网络上的数据交互,第一个属性为【s】,通常在【/run】或【/tmp】这些目录中
数据输送文件(FIFO,pipe)
Linux目录配置
依据
FHS(Filesystem Hierachy Standard):主要目的是希望用户可以了解到已安装的软件通常放置于哪个目录下。
FHS依据文件系统使用的频繁与否与是否允许用户随意修改,将目录定义成为交互作用的形态:
可分享 | 不可分享 | |
---|---|---|
不变(static) | /usr(软件存放处) | /etc(配置文件) |
/opt(第三方辅助软件) | /boot(启动与内核文件) | |
可变动(variable) | /var/mail(用户邮箱) | /var/run(程序相关) |
/var/spool/news(新闻组) | /var/lock(程序相关) |
- 可分享:可以分享给其他系统挂载使用的目录,包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载使用的目录。
- 不可分享:自己机器上运行的设备文件或与程序相关的socket文件等,由于 仅与自身机器两个,当然就不适合分享给其他主机。
- 不变:有些数据是不会经常变动的,跟随者发行版而不变动。如函数库、文件说明、系统管理员所管理的主机服务配置文件等。
- 可变动:经常修改的文件,如日志文件等。
FHS目录
目录 | 放置文件内容 |
---|---|
第一部分:FHS要求必须存在的目录 | |
/bin | 存放执行文件的目录,主要是单人维护模式下还能使用的命令。如在/bin目录下可被root和一般账号使用的命令:cat、chmod、chown、date、mv、mkdir、cp、bash等 |
/boot | 与启动相关的文件和系统内核文件。如linux内核常用文件:【vmlinuz】和grub2启动引导程序:【/boot/grub2/】 |
/dev | 设备和接口设备文件,比较重要的如:【/dev/null、/dev/zero、/dev/tty、/dev/loop*、/dev/sd*】 |
/etc | 存放系统配置文件,一般来说在这个目录下的各文件属性可让一般用户查看,但只有root用户有权力修改,如:【/etc/passwd、/etc/group、/etc/issue、/etc/profile】 * /etc/opt:存放第三方辅助软件/opt的相关配置文件 * /etc/X11:与X window有关的各种配置文件,如xorg.conf这个X server配置文件 * /etc/xml:与XML格式有关的配置文件 |
/lib | 启动时用到的函数库,以及在/bin和/sbin下面的命令会调用的函数库。【/lib/modules】目录放置内核相关文件(驱动程序) |
/media | 可删除的设备,软盘、光盘、DVD等,如:【/media/cdrom】 |
/mnt | 暂时挂载设备所用的目录,早些时候同/media相同,都用来挂载 |
/opt | 第三方辅助软件放置目录 |
/run | 系统启动后所产生的各项信息放置在/var/run |
/sbin | 启动、修复、还原系统所需要的命令 |
/srv | service的缩写,是一些网络服务启动后,所需要使用的数据目录,如WWW、FTP等,常见默认建议放在【/var/lib】下 |
/tmp | 正在执行的程序或一般用户临时放置文件的地方 |
/usr | 软件安装、执行相关的目录 |
/var | 放置变动性的数据 |
第二部分:FHS建议可以存在的目录 | |
/home | 用户家目录,【】表示当前用户的家目录,【dmtsai】代表dmtsai这个用户的家目录 |
/lib<qual> | 用来存放于/lib不同格式的二进制函数库 |
/root | 系统管理员(root)的家目录 |
第三部分:FHS之外比较重要的目录 | |
/lost+found | 使用标准的ext2、ext3、ext4文件系统才会产生的目录,在于当文件系统发生错误是,将一些遗失的片段放置在这个目录下,如果使用xfs文件系统,则不存在这个目录 |
/proc | 虚拟文件系统,放置的数据都在内存中,如系统内核、进程信息、外接设备的状态及网络状态等。这个目录的数据都在内存中,所以本身不占任何硬盘空间:/proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/ioports、/proc/net/* |
/sys | 也是一个虚拟文件系统,主要记录内核和系统硬件信息相关的内容。 |
/usr目录
/usr就是Unix software resource的意思,是unix系统软件资源放置的目录。
目录 | 放置文件内容 |
---|---|
第一部分:FHS要求必须存在 | |
/usr/bin | 一般用户使用的命令,Centos将全部用户的命令放置于此,在/bin下使用链接文件至此 |
/usr/sbin | 系统命令,/sbin链接到此目录 |
/usr/local | 系统管理员在本机安装自己下载的软件,建议安装到此目录。如发行版提供的软件比较旧,想安装新文件但又不想删除旧版,可以将新软件安装到此目录下 |
/usr/lib | /lib链接此目录 |
/usr/share | 放置只读的数据文件,包括共享文件。/usr/share/man、/usr/share/doc、/usr/share/zoneinfo |
第二部分:FHS建议存在 | |
/usr/games | 游戏相关的数据 |
/usr/include | c/c++等程序语言的头文件与包含文件放置处 |
/usr/libexec | 某些不被一般用户常用的执行文件或脚本,如X窗口下的操作命令 |
/usr/lib<qual> | 与/lib<\qual>同 |
/usr/src | 源代码放置于此 |
/var目录
/var目录主要放置经常变动的文件,包括缓存(cache)、日志文件(log)以及某些软件运行所产生的文件,包括程序文件(lock file、run file),如MySQL数据库的文件
目录 | 放置文件内容 |
---|---|
/var/cache | 应用程序本身运行过程中产生的一些缓存 |
/var/lib | 程序本身执行过程中,需要使用的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录,如:MySQL的数据库放置/var/lib/mysql。rpm的数据库放在/var/lib/rpm |
/var/lock | 某些设备或文件资源一次只能被一个应用程序所使用。 |
/var/log | 日志文件 |
/var/mail | 个人电子邮箱 |
/var/run | 放置程序运行或服务启动后的PID |
/var/spool | 放置一些队列数据 |