Linux(3):Linux 的文件权限与目录配置

把具有相同的账户放入到一个组里面,这个组就是这两个账户的 群组 。在访问资源(操作系统中计算机的资源)时,可以让这个组里面的所有用户都具有访问权限。

每个账号都可以有多个群组的支持。

在我们Liux 系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有那个 root 的相关信息,都是记录在/etc/passwd 这个文件内的。

个人的密码则是记录在/etc/shadow 这个文件下。此外,Linux 所有的组名都纪录在/etc/group 内。

Linux 的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限

Linux 文件权限

ls[list] 的意思,重点在显示文件的文件名与相关属性。
[-al] 则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为了[.]的文件)。


第一栏代表这个文件的类型与权限(permission);

第一个字符代表这个文件是[目录、文件或链接文件等等]:

当为[d]则是目录,例如上表档名为 [.config] 的那一行;

当为[-]则是文件,例如上表档名为[initial-setup-ks.cfg] 那一行;

若是[1]则表示为连结档(link file);0

若是[b]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);0

若是[c]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为 [rwx] 的三个参数的组合。其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。

要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[-]而已。

第一组为[文件拥有者可具备的权限],以 [initial-setup-ks.cfg] 那个文件为例,该文件的拥有者可以读写,但不可执行:

第二组为[加入此群组之账号的权限];

第三组为[非本人且没有加入本群组之其他账号的权限]。

第二栏表示有多少档名连结到此节点(i-node);
第三栏表示这个文件(或目录)的[拥有者账号];
第四栏表示这个文件的所属群组;
第五栏为这个文件的容量大小,默认单位为 bytes;
第六栏为这个文件的建档日期或者是最近的修改日期;
第七栏为这个文件的档名。

改变文件属性和权限

chgrp : 改变文件所属群组;chgrp [-R] dirname/filename

选项与参数:
-R:进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况

chown :改变文件拥有者;chown [-R] 账号名称 文件或目录

选项与参数:
-R:进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更

chmod : 改变文件的权限,SUID,SGID、SBIT 等等的特性;chmod [-R] xyz 文件或目录

选项与参数:
xyz:就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R:进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
复制行为(cp)会复制执行者的属性与权限

bash 复制代码
cp 来源文件 目标文件

权限对文件
r(read): 可读取此一文件的实际内容,如读取文本文件的文字内容等:
w(write): 可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
x(eXecute): 该文件具有可以被系统执行的权限。

权限对目录
r (read contents in directory) :表示具有读取目录结构列表的权限,所以当你具有读取ri)一个目录的权限时,表示你可以查询该目录下的文件名数据。
w (modify contents of directory)

这个可写入的权限对目录:

1.建立新的文件与目录;

2.删除已经存在的文件与目录(不论该文件的权限为何)

3.将已存在的文件或目录进行更名;

4.搬移该目录内的文件、目录位置。
x (access directory): 目录的x代表的是用户能否进入该目录成为工作目录的用途。 所谓的工作目录(work directory)就是目前所在的目录。

如果在某目录下不具有x 的权限, 那么你无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的rw 的权限。

要开放目录给任何人浏览时,应该至少也要给予,及x的权限,但 w 权限不可随便给

Linux 文件种类与拓展

文件种类

一、正规文件

一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 [-]

依照文件的内容,又大略可以分为:
1.纯文本档(ASCII) : 这是 Limux 系统中最多的一种文件类型, 称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这种文件类型。 举例来说,可以下达[ cat ~/bashrc ] 就可以看到该文件的内容。 (cat 是将个文件内容读出来的指令)
2.二进制文件(bimary) : 系统仅认识且可以执行二进制文件(binary file),Linux 当中的可执行文件(scripts,文字型批处理文件不算)就是这种格式,举例来说,刚刚下达的指令 cat 就是一个binary file.
3.数据格式文件(data) : 有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件(data ile)。举例来说,Linux 在使用者登入时,都会将登录的数据记录在 /ar/log/wtmp 那个文件内,该文件是一个 data file,他能够透过 last 这个指令读出来! 但是使用 cat 时,会读出乱码,因为它是属于一种特殊格式的文件。

二、目录

第一个属性为[d],例如 [drwxrwxrwx]

三、连接档(link)

类似 Windows 系统底下的快捷方式。第一个属性为[l](英文L的小写),例如[lwxrwxrwx]

四、设备与装置文件(device)

与系统周边及储存等相关的一些文件,通常都集中在/dev 这个目录之下! 通常又分为两种:
1.区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等可以随机的在硬盘的不同区块读写,这种装置就是成组设备。第一个属性为[b]
2.字符(character)设备文件 : 亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是[一次性读取]的,不能够截断输出。 !第一个属性为 [c]

五、资料接口文件(sockets)

既然被称为数据接口文件,想当然尔,这种类型的文件通常被用在网络上的数据承接了。可以启动个程序来监听客户端的要求, 而客户端就可以透过这个 socket 来进行数据的沟通了。第一个属性为 [s],最常在/run 或/tmp 这些个目录中看到这种文件类型了。

六、数据输送文件FITFOpipe)

FIFO 也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO 是 first-in-first-out 的缩写。第一个属性为[p]

Linux 文件扩展名

基本上,Linux 的文件是没有所谓的[扩展名]的,一个 Linux 文件能不能被执行,与他的第一栏的十个属性有关, 与文件名根本一点关系也没有。

具有[可执行的权限] 以及[具有可执行的程序代码] 是两回事 :在 Linux 底下,可以让一个文本文件具有了可执行的权限 (加入 x 权限即可), 但是这个文件明显的无法执行,因为他不具备可执行的程序代码。而如果将上面提到的 cat 这个可以执行的指令,将他的 x 拿掉那么 cat 将无法被执行!

常用的扩展名:

  1. *.sh :脚本或批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 .sh
  2. *Z.*.tar, *.targz,*.zip,*tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip,tar 等等的,由于不同的压缩软件,而取其相关的扩展名。
  3. *.html,*,php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件。 .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览来 server 端浏览,以得到运算后的网页结果呢。

Linux 文件长度限制

在 Linux 底下,使用传统的 Ext2/Ext3/Ext4 文件系统以及近来被 CentOS 7 当作预设文件系统的 xfs而言,针对文件的档名长度限制为:

单一文件或目录的最大容许文件名为 255bytes,以一个 ASCII 英文占用一个 bytes 来说,则大约可达255个字符长度。若是以每个中文字占用 2bytes 来说, 最大档名就是大约在 128 个中文字之间。

Linux 文件名的限制

由于 Linux 在文字接口下的一些指令操作关系,一般来说,在设定 Linux 底下的文件名时,最好可以避免一些特殊字符比较好。例如底下这些

bash 复制代码
* ? > < ; & ! [ ] | \ ' " `  ( ) { }

Linux 目录配置

Linux 目录配置的依据--FHS

(FHS): Filesystem Hierarchy Standard

FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据。

FHS 依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态:

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

事实上,FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
/(root,根目录): 与开机系统有关:
/usr (unix software resource): 与软件安装/执行有关
/var (variable): 与系统运作过程有关。

根目录

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

1./bin : 放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般账号所使用。主要有:cat, chmod, chown, date, my, mkdir, cp, bash 等等常用的指令。

2./boot: 主要在放置开机会使用到的文件,包括 Linux 核心文件以及开机选单与开机所需配置文件等等。Linux kernel 常用的档名为: vmlinuz

3./dev:任何装置与接口设备都是以文件的型态存在于这个目录当中。比要重要的文件有/dev/null, /dev/zero, /dev/tty,/dev/loop*,/dev/sd*等等

4./etc:系统主要的配置文件几乎都放置在这个目录内。这个目录下的各文件属性是可以让一般使用者查阅的, 但是只有 root 有权力修改 。FHS建议不要放置可执行文件(binary)在这个目录中 。比较重要的文件有: /etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue 等等。

另外 FHS 还规范几个重要的目录最好要存在 /etc/ 目录下:

a./etc/opt(必要): 这个目录在放置第三方协力软件 /opt 的相关配置文件

b./etc/X11/(建议): 与 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这 X Server的配置文件。

c./etc/sgml/(建议): 与 SGML 格式有关的各项配置文件;

d./etc/xml/(建议): 与 XML 格式有关的各项配置文件。

5./lib:放置的是在开机时会用到的函式库, 以及在/bin 或/sbin 底下的指令会呼叫的函式库。

某些指令必须要有这些函式库才能够顺利完成程序的执行之意。 另外 FSH 还要求 /lib/modules/必须要存在: 这个目录主要放置可抽换式的核心相关模块(驱动程序)。

6./media:放置的是可移除的装置。 包括软盘、光盘DVD 等等装置都暂时挂载于此。常见的档名有: /media/floppy, /media/cdrom 等等

7./mnt:暂时挂载某些设备。

8./opt:给第三方协力软件放置的目录。以前的 Linux 系统中,习惯放置在/usr/local 目录下。

9./run:早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 var/run 目录下,新版的 FHS 则规范到 /run 底下。 由于 /run 可以使用内存来仿真,因此效能上会好很多。

10./sbin:开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括: fdisk, fsckifconfig, mkfs 等等。

11./srv:srv 可以视为 [service] 的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如 www,FTP 等等。举例来说,www 服务器需要的网页资料就可以放置在/srv/www/里面。不过,系统的服务数据如果尚未要提供给因特网任何人浏览的话,预设还是建议放置到 /var/lib 底下即可。

第二部份: FHS 建议可以存在的目录
\home:这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时,默认的用户家目录都会规范到这里来。比较重要的是,家目录有两种代号:
~:代表目前这个用户的家目录
~feng: 则代表 feng 的家目录!
/lib<qual>:用来存放与 /lib 不同的格式的二进制函式库,例如支持 64 位的 /lib64 函式库等。
/root :系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,送目录就能够拥有 root 的家目录,所以会希望 root 的家目录与根目录放置在同一个分区槽中。

几个在 Linux 当中也是非常重要的目录:

1./lost+found:这个目录是使用标准的 ext2/ext3/ext4 文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。如果使用的是 xfs 文件系统的话,就不会存在这个目录了。

2./proc:这个目录本身是一个[虚拟文件系统(virtualfilesystem)]。他放置的数据都是在内存当中 , 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间 。比较重要的文件例如: /proc/cpuinfo,/proc/dma,/proc/interrupts./proc/ioports,/proc/net/* 等等。

3./sys :这个目录其实跟/proc 非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量

依据FHS 的基本定义,/usr 里面放置的数据属于可分享的与不可变动的 (shareable,static), usr 是 Unix Software Resource 的缩写, 也就是 Unix 操作系统软件资源所放置的目录,而不是用户的数据。应该将数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。

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

目录树

在 Linux 底下,所有的文件与目录都是由根目录开始的!那是所有目录与文件的源头~ 然后再一个一个的分支下来。因此,也称这种目录配置方式为:目录树(directorytree)

1.目录树的启始点为根目录 (/,root);

2.每一个目录不止能使用本地端的 patition 的文件系统,也可以使用网络上的 filesystem 。举例来说,以利用 Network File System(NFS) 服务器挂载某特定目录等。

3.每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。

绝对路径与相对路径

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

bash 复制代码
cd ./

. :代表当前的目录,也可以使用 ./ 来表示;
..:代表上一层目录,也可以 ../ 来代表。

《鸟哥的Linux私房菜-基础篇》学习笔记

相关推荐
zzzhpzhpzzz8 分钟前
Ubuntu如何查看硬件型号
linux·运维·ubuntu
蜜獾云10 分钟前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
陌北v112 分钟前
Docker Compose 配置指南
运维·docker·容器·docker-compose
只会copy的搬运工33 分钟前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
唐宋元明清218836 分钟前
Windows 记录开机后应用启动慢的问题
windows·系统异常
o(╥﹏╥)44 分钟前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全
娶不到胡一菲的汪大东1 小时前
Ubuntu概述
linux·运维·ubuntu
阿里嘎多学长1 小时前
docker怎么部署高斯数据库
运维·数据库·docker·容器
Yuan_o_1 小时前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
那就举个栗子!1 小时前
Ubuntu 20.04下Kinect2驱动环境配置与测试【稳定无坑版】
linux·ubuntu