小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Linux
  5. 正文

《鸟哥的Linux私房菜》(基础篇)笔记整理(第5章)

2018年11月26日 1096点热度 0人点赞 0条评论

第五章 Linux的文件权限与目录配置

  1. 默认的情况下,所有的系统上的账号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的组名都纪录在/etc/group内!

2.以su切换为root身份后,输入 ls -al后,得到下面的结果:

图5.1 ls结果

(1)第一列:权限类型。共有10个字符,分别为以下内容:

①第一个字符:文件类型(目录/文件/链接文件等)。

若为d则是目录,若为-则是文件,若为l则是连接文件,若为b则是设备文件里面的可供存储的接口设备,若为c则表示设备文件里面的串行端口设备。

②第二至四个字符:文件所有者的权限,为rwx三个参数的组合,r为可读,w为可写,x为可执行,若为-则表示无权限。

③第五至七个字符:同用户组的用户的权限。同上。

④第八至十个字符:其它非本用户组的用户的权限。同上。

(2)第二列:多少文件名连接到此节点(i-node)

每个文档都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个档名就会连结到一个i-node。这个属性记录的,就是有多少不同的档名连结到相同的一个i-node号码去就是了。

(3)第三列:这个文件(或目录)的『拥有者账号』

(4)第四列:表示这个文件的所属群组

(5)第五列:文件的容量大小,默认单位为bytes;

(6)第六列:文件的建档日期或者是最近的修改日期:

(7)第七列:文件名。注意:如果文件名之前多一个『.』,则代表这个文件为『隐藏文件』。

2.Linux文件权限的重要性

(1)系统的保护功能;

(2)团队开发软件或数据共享的功能;

(3)未将权限设置妥当的危害:如果你的目录权限没有作好的话,可能造成其他人都可以在你的系统上面乱搞。

在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变的。

3.改变文件属性和权限

(1)chgrp:改变文件所属群组(群组名必须在/etc/group中有记录)

格式如下:

[root@study ~]# chgrp [-R] dirname/filename ...

选项与参数:

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

(2)chown:改变文件拥有者(用户名必须在/etc/passwd中有记录)

[root@study ~]# chown [-R] 账号名称 文件或目录

[root@study ~]# chown [-R] 账号名称:组名 文件或目录

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

(3)chmod:改变文件的权限,SUID、SGID、SBIT等等的特性。

权限设定的方法有两种,第一种是使用数字(自己在以前管理服务器的时候常用),第二种是采用符号来变更。

①采用数字来变更。读/写/执行采用的是三位二进制码(xxx)依序来表示,但是一般直接表示为一位十进制数。例如-rwxrwxrwx表示为777,这也是在服务器设置很多时候用到的数字。格式如下:

[root@study ~]# chmod [-R] xyz 文件或目录

选项与参数:xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。

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

②采用符号改变文件权限。格式如下:

chmod u
g
o
a
+(加入)
-(去除)
=(设定)
r
w
x
文件或目录

这里面,u表示user,g表示group,o表示others,a表示all。

使用举例:

[root@study ~]# chmod  u=rwx,go=rx  .bashrc

[root@study ~]# chmod  a+w  .bashrc

[root@study ~]# chmod  a-x  .bashrc

# 注意!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格符!

3.目录与文件的权限意义

(1)权限对于文件的重要性

①r (Read):可读取此文件的实际内容,如读取文本文件的文字内容等;

②w (Write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);

③x (eXecute):该文件具有可以被系统执行的权限。

注意:在Windows下,一个文件是否能够执行是由扩展名决定,而Linux下文件是否能被执行是由是否具有『x』这个权限来决定的,跟文件名是没有绝对的关系的。

当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限,但并不具备有删除该文件本身的权限。

(2)权限对于目录的重要性

目录主要的内容在记录文件名列表,文件名与目录有强烈的关联。

①r (read contents in directory):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。所以你就可以利用ls这个指令将该目录的内容列表显示出来!

②w (modify contents of directory):具有更改该目录结构列表的权限,也就是底下这些权限:

建立新的文件与目录;

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

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

移动该目录内的文件、目录位置。

③x (access directory):目录的x代表的是用户能否进入该目录成为工作目录的用途。

总的来说,如下表所示:

类型 内容 迭代类型 r w x
文件 详细资料 文件(夹) 读到内容 修改内容 执行文件内容
目录 文件名 可分类抽屉 读到档名 修改档名 进入该目录的权限

4.Linux文件种类与扩展名

(1)文件种类(regular file)

①普通文件:就是一般我们在进行存取的类型的文件,在由ls -al所显示出来的属性方面,第一个字符为[-],例如[-rwxrwxrwx]。另外,依照文件的内容,又大略可以分为:

  • 纯文本文档(ASCII)
  • 二进制文件(binary)
  • 数据格式文件(data)

(2)目录(directory):第一个属性为d的。

(3)连接文件(link):类似于windows下面的快捷方式,第一个属性为l。

(4)设备与设备文件(device):与系统周边及储存等相关的一些文件,通常都集中在/dev这个目录之下!通常又分为两种:

  • 块设备文件:就是一些存储数据,以提供系统随机访问的借口设备,例如硬盘灯。第一个属性为b。
  • 字符设备文件:也即是一些串行端口的接口设备,如键盘、鼠标。第一个属性为c。

(5)套接字(sockets):通常被用在网络上的数据连接。我们可以启动一个程序来监听客户端的请求,而客户端就可以通过这个socket来进行数据的通信,其第一个属性为s,通常在/var/run目录中可以看到这种文件类型。

(6)管道(FIFO, pipe):一种特殊的文件类型,主要目的是为了解决多个程序同时存取一个文件所造成的错误问题,第一个属性为p。

(2)Linux文件扩展名

一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与文件名根本一点关系也没有。

不过,可以被执行与可以执行成功是不一样的概念。我们仍然希望可以由扩展名来了解该文件是什么东西,所以通常我们还是会以适当的扩展名来表示该文件是什么种类的。例如:*.sh:脚本或批处理文件(scripts),因为批处理文件为使用shell写成的,所以扩展名就编成.sh。

(3)Linux文件长度限制

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

(3)Linux文件名的限制

应避开* ? > < ; & ! [ ] | \ ' " ` ( ) { },同时,小数点{.}表示隐藏文件。另外,因为常常用到-option之类的选项,应避免文件名第一个字符为-或+。

5.Linux目录配置

(1)FHS(Filesystem Hierarchy Standard)标准

  可分享的(shareable) 不可分享的(unshareable)
不变的(static) /usr (软件放置处) /etc (配置文件)
/opt (第三方软件) /boot (开机与内核文件)
可变动的(variable) /var/mail (用户邮件信箱) /var/run (程序相关)
/var/spool/news (新闻组) /var/lock (程序相关)

类型说明:

①可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;

②不可分享的:自己机器上面运行的设备文件或者是与程序有关的socket文件等,由于仅与自身机器有关,所以当然就不适合分享给其他主机了。

③不变的:有些数据是不会经常变动的,跟随着distribution而不变动。例如函数库、文件的说明文件、系统管理员所管理的主机服务配置文件等等;

④可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。

FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

  1. / (root,根目录):与开机系统有关;

根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。FHS标准建议:根目录(/)所在分割槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

目录 应放置文件内容
第一部份:FHS 要求必须要存在的目录
/bin 系统有很多放置执行文件的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot 这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机选单与开机所需配置文件等等。Linux kernel常用的档名为:vmlinuz,如果使用的是grub2这个开机管理程序, 则还会存在/boot/grub2/这个目录喔!
/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底下的指令会呼叫的函式库而已。 什么是函式库呢?妳可以将他想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程序的执行之意。 另外 FHS 还要求底下的目录必须要存在:

·       /lib/modules/:这个目录主要放置可抽换式的核心相关模块(驱动程序)喔!

/media media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置啦! 包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom等等。
/mnt 如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。 在古早时候,这个目录的用途与/media相同啦!只是有了/media之后,这个目录就用来暂时挂载用了。
/opt 这个是给第三方协力软件放置的目录。什么是第三方协力软件啊? 举例来说,KDE这个桌面管理系统是一个独立的计划,不过他可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下了。 另外,如果妳想要自行安装额外的软件(非原本的distribution提供的),那么也能够将你的软件安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下呢!
/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』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等等。举例来说,WWW服务器需要的网页资料就可以放置在/srv/www/里面。 不过,系统的服务数据如果尚未要提供给因特网任何人浏览的话,预设还是建议放置到 /var/lib 底下即可。
/tmp 这是让一般用户或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录啊! 因为FHS甚至建议在开机时,应该要将/tmp下的数据都删除唷!
/usr 第二层 FHS 设定,后续介绍
/var 第二曾 FHS 设定,主要为放置变动性的数据,后续介绍
第二部份:FHS 建议可以存在的目录
/home 这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时, 默认的用户家目录都会规范到这里来。比较重要的是,家目录有两种代号喔:

·       ~:代表目前这个用户的家目录

·       ~dmtsai :则代表 dmtsai 的家目录!

/lib<qual> 用来存放与 /lib 不同的格式的二进制函式库,例如支持 64 位的 /lib64 函式库等
/root 系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中。

FHS针对根目录的定义就只有以上。不过Linux下面还有很多目录很重要,其中几个如下所示:

目录 应放置档案内容
/lost+found 这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。不过如果使用的是 xfs 文件系统的话,就不会存在这个目录了!
/proc 这个目录本身是一个『虚拟文件系统(virtual filesystem)』喔!他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的档案例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。
/sys 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量喔!
  1. /usr (unix software resource):与软件安装/执行有关;

/usr里面放置的数据属于可分享的与不可变动的。在安装时会占用较大硬盘容量的目录。

  1. /var (variable):与系统运作过程有关。在系统运行后才会占用硬盘容量的目录。这里面主要针对常态性变动文件,包括缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件,包括程序文件,或者如MySQL数据库的文件等。

(2)目录树(directory tree)

在Linux底下,所有的文件与目录都是由根目录开始的,然后再一个一个的分支下来,我们称这种目录配置方式为目录树(directory tree)。它有以下特性:

①目录树的起始点为根目录(/, root);

②每一个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统;

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

(3)绝对路径与相对路径

绝对路径:由根目录(/)开始写起的文件名或目录名称,例如 /home/dmtsai/.bashrc;

相对路径:相对于目前路径的文件名写法。例如./home/dmtsai或../../home/dmtsai/等等。反正开头不是[/]就属于相对路径的写法。

要注意这样两点:

①[.]:代表当前的目录,也可以使用[./]来表示。

②[..]:代表上一层目录,也可以用[../]来表示。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux 鸟哥的linux私房菜
最后更新:2018年11月26日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
《鸟哥的Linux私房菜》(基础篇)笔记整理(第17章)Part.2 2017年1月~6月工作安排 《鸟哥的Linux私房菜》(基础篇)笔记整理(第10章)Part.1 Leetcode题目解析(191119):136&137&139 深夜笔记 《优化阵列信号处理》学习笔记(第二章)
标签聚合
python学习 鸟哥的linux私房菜 算法 Java 高中 leetcode 学习 Python linux 生活
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号