用户与用户组
linux一般将文件可读写的身份分为三个类别:拥有者(owner)、所属群组(group)、其他人(other)
三种身份都有读、写、执行等权限
- 文件拥有者
linux是个多人多任务的系统,可能存在多个人同时使用一台主机的情况,这就需要对每个用户的隐私进行保护
可以设置文件只有拥有者才可以查看,其他用户就查看不到这个文件的内容啦 - 用户组概念
可以设置文件对一组用户可见,保证团队工作的效率与隐私性
每个账号都可以有多个用户组支持 - 其他人
其他人可以通过组内用户访问文件
- linux用户身份与用户组记录的文件
默认情况下,所有的系统上的账号与普通用户、root用户信息都记录在**/etc/passwd文件中,个人密码记录在/etc/shadow文件中,所有组名记录在/etc/group**中
打开/etc/passwd文件后可以看到里面有很多数据,但是很多用户都不是自己创建的,这就是系统自己创建的系统用户,也就是伪用户
这些系统用户不能用来登录系统,但是也不能删除。因为一旦删除,依赖这些用户运行的进程将不能正常执行,会导致系统问题
linux文件权限概念
linux文件属性
列出文件后可以查看其相关属性
上述图片从左到右为:
文件的类型权限,链接数,文件拥有者,文件所属用户组,文件大小,文件最后被修改的时间,文件名
- 第一栏为文件的类型与权限,含10个字符
- 第一个字符代表文件是目录、文件、链接文件等
- d:目录
- -:文件
- l:链接文件
- b:设备文件里面可供存储的周边设备(可按块随机读写的设备)
- c:设备文件里面的串行端口设备,如键盘、鼠标(一次性读取设备)
- 之后的字符,3个为一组,均为rwx三个参数的组合,分别为可读、可写、可执行
- 第一组为文件拥有者具备的权限
- 第二组为加入用户组成员的权限
- 非本人非用户组成员的其他账号的权限
- 第一个字符代表文件是目录、文件、链接文件等
- 第二栏表示有多少文件名链接到此节点
每个文件都会将它的权限与属性记录到文件系统的inode中,但我们平时使用的文件数确是使用文件名来记录,故每个文件名都会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到同一个inode号码 - 第三栏表示文件(或目录)拥有者的账号
- 第四栏表示这个文件的所属用户组
- 第五栏表示文件的容量大小,默认单位为Bytes
- 第六栏为文件的创建日期或是最近的修改日期
修改文件属性与权限
-
chgrp 修改文件所属用户组
change group的缩写
注意,要修改的组名必须在/etc/group文件中才行,否则会显示错误chgrp [-R] 修改为用户组 dirname/filename
- 选项与参数
-R:进行递归修改,即子目录下的所有文件、目录进行同步修改
对于文件修改:
可以看到用户组已经修改
对于文件夹修改:
其内部文件也进行了递归修改 - 选项与参数
-
chown 修改文件拥有者
chown [-R] 新拥有者名称 目标文件(若是文件夹,需要有-R参数) chown [-R] 新拥有者名称:新用户组名称 目标文件(若是文件夹,需要有-R参数)
chown也可以顺便修改用户组的名称
-
chmod 修改文件权限,SUID、SGID、SBIT等的特性
-
数字类型修改权限
rwx视为二进制chmod [-R] 权限数字 文件或目录
-
符号类型修改权限
权限分别对应三种身份:user(u),group(g), others(o)
还有一种all(a)chmod u、g、o、a +(加入)、-(移除)、=(设置) r、w、x 文件或目录 可以对每一部分权限进行具体设置
-
目录与文件的权限意义
-
权限对文件的重要性
- r:可以读取文件内容
- w:可编辑、修改文件内容(但是不能删除文件)
- x:文件具有可以被系统执行的权限
对于rwx权限来说,主要都是针对文件的内容而言,与文件名的存在与否没有绝对关系
在windows下,文件是否具有执行能力是由扩展名来判断的,如exe,bat等
但是在linux下,文件是否能被执行是借由是否具有[x]这个权限来决定的,与文件名没有绝对关系 -
权限对目录的重要性
文件是存放实际数据的存在,目录主要的内容是记录文件名列表,文件名与目录有强烈的关联- r:可以读取目录下文件名数据
- w:具有改动该目录结构列表的权限
- x:用户是否能进入该目录称为工作目录
要开放目录给任何人浏览时,应至少需要基于r及x权限,但w权限不能随便给
linux文件种类
任何设备在linux下都是文件
-
常规文件
一般我们在进行读写的类型的文件,在ls -al所显示出来的属性方面,第一个字符为[-]
依照文件的内容,又可以分为:- 纯文本文件
- 二进制文件
- 数据文件:如linux在用户登录时会将登录的数据记录在/var/log/wtmp文件内,该文件是一个数据文件,可以通过last命令读取出来,但是使用cat时会出现乱码
-
目录:第一个属性为[d]
-
链接文件:属性为[l]
-
设备与设备文件
与系统周边及存储等相关的一些文件,通常都集中在/dev目录下,通常又分为两种-
区块设备文件:第一个属性为[b]。就是一些存储数据,以提供系统随机存取的接口设备
-
字符设备文件:第一个属性为[c]。一些串行端口的接口设备,如键盘、鼠标等。这些设备的特点就是一次性读取,不能截断输出。
-
-
数据接口文件(sockets):第一个属性为[s],通常在/run或/tmp这些目录中看到这种文件类型。这类文件通常被用在网络上的数据交换。我们可以启动一个程序来监听客户端的要求,而客户端可以通过socket来进行数据的沟通
-
数据输送文件(FIFO, pipe):FIFO也是一种特殊的文件类型,她主要的目的是解决多个程序同时读写一个文件所造成的错误问题,FIFO也是先进先出的缩写,即管道,第一个属性为[p]
linux文件扩展名
linux文件是否能执行与扩展名无关,只要有[x]权限即可,但是可以被执行与可执行成功是不一样的,故[x]只是代表这个文件具有可执行的能力,但是能不能执行成功,就要看该文件的内容了
但是,一般扔希望可以通过扩展名来了解该文件是什么东西,故还是以适当的扩展名来表示文件是什么种类
- 一些常用扩展名
- .sh:脚本或批处理文件
- .Z、.tar、.tar.gz 、 .zip、 .tgz:经过打包的压缩文件
- .html、.php:网页相关文件
linux目录配置
Linux目录配置的依据——FHS
为了让用户可以了解到已安装软件通常放置于哪个目录下,方便企业公司管理,便诞生了FHS标准
-
FHS依据文件系统使用的频繁与否与是否允许用户随意修改,将目录定义为四种交互作用的形态
可分享 不可分享 不变 /usr(软件存放处) 、/opt(第三方辅助软件) /etc(配置文件)、/boot(启动与内核文件) 可变动 /var/mail(用户邮箱)、/var/spool/news(新闻组) /var/run(程序相关)、/var/lock(程序相关) - 可分享:可以分享给其他系统挂载使用的目录,故包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录
- 不可分享:自己机器上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器有关,所以不适合分享给其他主机
- 不变:有些数据是不会进程变动的,跟随着发行版而不变动
- 可变动:经常修改的数据,如日志文件、一般用户可自行接收的新闻组等
-
事实上,FHS针对目录树架构仅定义出三层目录下应该放置什么数据而已,下面是这三个目录的定义
- /(root,根目录):与启动系统有关
- /usr(unix software resource):与软件安装/执行有关
- /var(variable):与系统运行过程有关
每层目录下面应该要放置的目录也都有特定的规定
根目录(/)的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都由根目录衍生出来,同时根目录也与启动、还原、系统修复等操作有关。由于系统启动时需要特定的启动软件、内核文件、启动所需程序、函数库等文件数据,若系统出现错误时,跟系统也必须要包含能够修复文件系统的程序才行。
由于根目录这么重要,故FHS要求方面,它希望根目录不要放在非常大的分区内,因为越大的分区会放入越多的数据,如此依赖根目录所在分区就可能会有较多发生错误的机会。
因此FHS建议:根目录(/)所在分区应越小越好,且应用程序锁安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
故FHS定义出根目录应要有下面这些子目录存在才好,即使没有物理目录,FHS也希望至少有链接目录存在才好:
- FHS要求必须存在的目录
- /bin:放置在单人维护模式下还能够被使用的命令。在/bin下面的命令可以被root与一般账号所使用,主要有:cat chmod chown date mv cp等常用命令
- /boot:放置启动会用到的文件,包括Linux内核文件以及启动选项与启动所需配置文件等。Linux内核常用文件名为vmlinuz,若使用的是grub2这个启动引导程序,还会存在/boot/grub2这个目录
- /dev:任何设备与接口设备都是以文件的形式存在于这个目录当中。通过读写这个目录下面的某个文件,就等于读写某个设备,比较重要的文件有/dev/null、/dev/zero、/dev/tty、/dev/loop*、/dev/sd*等
- /etc:系统主要的配置文件几乎都放置在这个目录内,如人员的账号密码文件、各种服务的启动文件等。一般来说这个目录下的各文件属性是可以让一般用户查看的,但只有root用户有权利修改。FHS建议不要放可执行文件(binary)在这个目录中。比较重要的文件有/etc/modprobe.d/、/etc/passwd、/etc/fstab、/etc/issue等。另外,FHS还规范几个重要的目录最好要存在/etc/目录下
- /etc/opt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件
- /etc/X11/(建议):与X window有关的各种配置文件都在这里,尤其是xorg.conf这个X Server的配置文件
- /etc/sgml/(建议):与SGML格式有关的各项配置文件
- /etc/xml/(建议):与xml格式有关的各项配置文件
- /lib:启动时会用到的函数库以及在/bin或/sbin下面的命令会调用的函数库。FHS要求必须存在的目录:
- /lib/modules/:主要放置可抽换式的内核相关模块(驱动程序)
- /media:放置可删除的设备,包括软盘、光盘、DVD等设备都暂时挂载于此
- /mnt:若想暂时挂载某些额外的设备,一般可以放到这个目录中。
- /opt:第三方辅助软件放置的目录
- /run:系统启动后所产生的各项信息
- /sbin:系统启动过程中所需要的命令,里面包括了启动、修复、还原系统所需要的命令。置于某些服务器软件程序,一般则放置在/usr/sbin中;本机自行安装的软件所产生的系统执行文件,放置到/usr/local/sbin中。常见的命令包括:fdisk、fsck、ifconfig、mkfs等
- /srv:可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务如WWW、FTP等。如,WWW服务器需要的网页数据就可以放置在/srv/www/目录里面。不过,系统的服务数据若尚未要提供给因特网任何人浏览的话,默认还是建议放在/var/lib下面即可。
- tmp:一般用户或是正在执行的程序暂时放置文件的地方。任何人都能存取的,故要定时清理,重要数据不可放置在此目录中。
- /usr:二层FHS设置,后续介绍
- /var:二层FHS设置,主要为放置变动性的数据,后续介绍
- 第二部分:FHS建议可以存在的目录
- /home:系统默认的用户家目录。新增一个一般用户账号时,默认的用户家目录都会规范到这里来。
- /lib<qual>:存放与/lib不同的格式的二进制数据库
- /root:系统管理员的家目录,之所以放在这里是因为进入单人维护模式而仅挂载根目录时,该目录就能拥有root的家目录,故我们会希望root家目录与根目录放置在同一个分区中。
事实上FHS针对根目录所定义的标准仅有上面的东西,不过Linux下还有许多目录需要了解
- 几个在Linux下也是非常重要的目录
- /lost+found:使用标准的ext2、ext3、ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些意识的片段放置到这个目录下,但若使用的是xfs文件系统的话,就不会存在这个目录。平时是空的,系统非正常关机而留下“无家可归”的文件就在这里
- /proc:这个目录本身是一个虚拟文件系统,它放置的数据都是在内存当中的,如系统内核、进程信息、外界设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。较重要的文件如:/proc/cpuinfo、/proc/dma、/proc/interrupts、/proc/ioports、/proc/net/*等
- /sys:与/proc相似,也是一个虚拟的文件系统,主要也是记录内核与系统硬盘信息相关的内容。包括目前已加载的内核模块与内核检测到的硬件设备信息等,这个目录同样不占硬盘容量。
/usr的意义与内容
/usr不是/user的缩写,而是UNIX Software Resource的缩写,即UNIX操作系统软件资源所放置的目录(注意不是用户的数据!)FHS建议所有的软件开发者,将她们的数据合理的分别放置到这个目录下的子目录,而不要自行建立该软件自己独立的目录
因为是所有系统默认的软件都会放置到/usr下面,故这个目录有点像Win系统里“C:\windows(当中的一部分)+C:\Program Files\这两个目录的综合体”,系统刚安装完毕时,这个目录会占用最多的硬盘容量。
- /usr:最庞大的目录,要用 到的应用程序和文件几乎都在这个目录。其中包含:
- /usr/x11r6:存放x window的目录。
- /usr/bin:众多的应用程序。
- /usr/sbin:超级用户的一些管理程序。
- /usr/doc:linux文档。
- /usr/include:linux下开发和编译应用程序所需要的头文件。
- /usr/lib:常用的动态链接库和软件包的配置文件。
- /usr/man:帮助文档。
- /usr/src:源代码,linux内核的源代码就放在/usr/src/linux 里。
- /usr/local/bin:本地增加的命令。
- /usr/local/lib:本地增加的库根文件系统。
/var的意义与内容
如果说/usr是在安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。
因为/var目录主要针对经常性变动的文件,包括缓存、日志文件以及某些软件运行所产生的文件,包括程序文件或例如MySQL数据库的文件等。
- /var/cache/:应用程序本身运行过程中会产生的一些缓存
- /var/lib/:程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录
- /var/lock/:某些设备或是文件资源一次只能被一个应用程序所使用,若同时又两个程序使用该设备时,就会产生一些错误的情况,故要讲该设备上锁,以确保该设备只会给单一软件所使用。
- /var/log/:重要到不行。是日志文件放置的目录,里面比较重要的文件有/var/log/messages、/var//log/wtmp(记录登录信息)等
- /var/mail/:放置个人电子邮箱的目录
- /var/run/:某些程序或是服务启动后,会将他们的PID放置到这个目录下,与/run相同,这个目录链接到/run
- /var/spool/:放置一些队列数据(排队等待其他程序使用的数据),这些数据被使用后通常都会被删除。
当前,许多原本在根目录(/)里面的目录,将他内部数据全部移到/usr里面去,然后进行链接设置,包括:
- /bin --> /usr/bin
- /sbin --> /usr/sbin
- /lib --> /usr/lib
- /lib64 --> /usr/lib64
- /var/lock --> /run/lock
- /var/run --> /run