Linux文件权限与目录配置

Linux的文件权限与目录配置

我们现在知道文件权限对于一个系统的安全重要性,也知道文件的权限对于使用者与群组的相关性,那么如何修改一个文件的属性与权限呢?又有多少文件的权限我们可以修改呢? 其实一个文件的属性与权限有很多! 我们先介绍几个常用于群组、拥有者、 各种身份的权限之修改的指令,如下所示:

chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性

改变一个文件的群组真是很简单的,直接以 chgrp 来改变即可,这个指令就是 change group 的缩写!不过,请记得,要被改变的组名必须在/etc/group 文件内存在才行,否则就会显示错误!
chgrp [-R] 组名 文件或目录

改变拥有者就是change owner!那就是 chown 这个指令的用途,要注意的是, 用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变。此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可!
chown [-R] 账号名称 文件或目录
还可以顺便直接修改群组的名称
chown [-R] 账号名称:组名 文件或目录

文件权限的改变使用的是 chmod 这个指令,但是,权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。
(1)数字类型改变文件权限
Linux 文件的基本权限就有九个, 分别是 owner/group/others 三种身份各有自己的 read/write/execute 权限, 文件的权限字符为:-rwxrwxrwx,这九个权限是三个三个一组的! 其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
chmod [-R] 777 文件或目录
(2)符号类型改变文件权限
从之前的介绍中我们可以发现,基本上就九个权限分别是(1)user (2)group (3)others 三种身份!那么我们就可以由 u, g, o 来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成 r, w, x,假如我们要设定一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
o user (u):具有可读、可写、可执行的权限;
o group 与 others (g/o):具有可读与执行的权限。
chmod u=rwx,go=rx 文件名
如果我不知道原先的文件属性,而我只想要增加这个文件的每个人均可写入的权限,那么我就可以使用:
chmod [-R] a+w 文件名
而如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
chmod a-x 文件名
**要注意的是,在Linux下如果你在某目录下不具有 x 的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的 r 或 w 的权限。

Linux文件种类

Linux下一切皆文件,连数据沟通的接口也有专属的文件在负责~
我们使用 “ ls -l ” 观察到第一栏那十个字符中,第一个字符为文件的类型。 除了常见的一般文件(-)与目录文件(d)之外,还有哪些种类的文件类型呢?
正规文件(regular file )
就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 - ,例如 -rwxrwxrwx 。
目录(directory)
就是目录,第一个属性为 d ,例如 drwxrwxrwx。
连结档(link):
就是类似 Windows 系统底下的快捷方式啦! 第一个属性为 l (英文 L 的小写),例如 lrwxrwxrwx;
设备与装置文件(device):
与系统周边及储存等相关的一些文件, 通常都集中在/dev 这个目录之下!通常又分为两种:
o 区块(block)设备档 :就是一些储存数据,以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是啦!你可以随机的在硬盘的不同区块读写,这种装置就是成组设备!你可以自行查一下/dev/sda 看看, 会发现第一个属性为 b 喔!
o 字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是一次性读取的,不能够截断输出。 举例来说,你不可能让鼠标跳到另一个画面,而是连续性滑动到另一个地方啊!第一个属性为 c 。
资料接口文件(sockets):
这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求,而客户端就可以透过这个 socket 来进行数据的沟通了。第一个属性为 s , 最常在/run 或/tmp 这些个目录中看到这种文件类型了。
数据输送文件(FIFO, pipe)
FIFO 也是一种特殊的文件类型, 他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是 first-in-first-out 的缩写。第一个属性为p。

Linux 文件扩展名

基本上,Linux 的文件是没有所谓的扩展名的,一个 Linux 文件能不能被执行,与他的第一栏的十个属性有关,与文件名根本一点关系也没有。这个观念跟 Windows 的情况不相同的,在 Windows 底下,能被执行的文件扩展名通常是 .com .exe .bat 等等,而在 Linux 底下,只要你的权限当中具有 x 的话,例如 -rwxr-xr-x 即代表这个文件具有可以被执行的能力,这个 x 代表这个文件具有可执行的能力,但是能不能执行成功,当然就得要看该文件的内容~
不过我们仍然希望可以藉由扩展名来了解该文件是什么东西,所以, 通常我们还是会以适当的扩展名来表示该文件是什么种类的。底下有数种常用的扩展名
.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用 shell 写成的,所以扩展名就编成 .sh 啰;
Z, .tar, .tar.gz, .zip, .tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
.html, .php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰!

Linux目录配置的依据–FHS

为什么每套 Linux distributions 他们的配置文件啊、执行文件啊、每个目录内放置的内容其实都差不多? 原来是有一套标准依据的哩!如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰。所以,后来就有所谓的Filesystem Hierarchy Standard (FHS)标准的出炉了!
FHS的标准文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下,所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循 FHS 的标准。也就是说,FHS 的重点在于规范每个特定的目录下应该要放置什么样子的数据而已。这样做好处非常多,因为 Linux 操作系统就能够在既有的面貌下(目录架构不变)发展出开发者想要的独特风格。
事实上,FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已, 分别是底下这三个目录的定义:
/ (root, 根目录):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运作过程有关。
FHS 要求必须要存在的目录
/bin——系统有很多放置执行文件的目录,但/bin 比较特殊。因为/bin 放置的是在单人维护模式下还能够被操作的指令。 在/bin底下的指令可以被root与一般账号所使用, 主要有: cat, chmod, chown, date, mv, mkdir, cp, bash 等等常用的指令。

/boot——这个目录主要在放置开机会使用到的文件

/dev——在 Linux 系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中的。 你只要透过存取这个目录底下的某个文件,就等于存取某个装置啰~ 比要重要的文件有/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——系统的函式库非常的多,而/lib 放置的则是在开机时会用到的函式库, 以及在/bin 或/sbin 底下的指令会呼叫的函式库而已。什么是函式库呢?你可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程序的执行之意。

/media—— media 是媒体的英文,顾名思义,这个/media 底下放置的就是可移除的装置啦!包括软盘、光盘、DVD 等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom 等等。

/mnt—— 如果你想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。 在古早时候,这个目录的用途与/media 相同啦!只是有了/media 之后,这个目录就用来暂时挂载用了。

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

/sbin—— Linux 有非常多指令是用来设定系统环境的,这些指令只有 root 才能够利用来设定系统,其他用户最多只能用来查询而已。 放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。 常见的指令包括: fdisk, fsck, ifconfig, mkfs 等等。

/srv——srv 可以视为service的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。

/tmp——这是让一般用户或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录啊! 因为 FHS 甚至建议在开机时,应该要将/tmp 下的数据都删除掉!

事实上 FHS 针对根目录所定义的标准就仅有上面的咚咚,不过我们的 Linux 底下还有许多目录你也需要了解一下的。 底下是几个在 Linux 当中也是非常重要的目录

/proc——这个目录本身是一个『虚拟文件系统(virtual filesystem)』喔!他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间

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

/usr/local/ : 系统管理员在本机自行安装自己下载的软件(非 distribution 默认提供者),建议安装到此目录,这样会比较便于管理。举例来说,你的 distribution 提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦!你可以自行到/usr/local 去看看,该目录下也是具有 bin, etc, include, lib…的次目录

Linux的目录树(directory tree)

在 Linux 底下,所有的文件与目录都是由根目录开始的!那是所有目录与文件的源头,然后再一个一个的分支下来,有点像是树枝状,因此,我们也称这种目录配置方式为:目录树。
. :代表当前的目录,也可以使用 ./ 来表示;
… :代表上一层目录,也可以 …/来代表
uname -r # 查看核心版本
uname -m # 查看操作系统的位版本

(鸟哥的Linux私房菜-第五章 Linux的文件权限与目录配置)
2021年2月24日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值