Linux通常将文件可存取的身分分为三个类别,分别是owner/group/others,且三种身分各有read/write/execute等权限
Linux使用者身分与群组记录的文件
系统上的账号与通常身分使用者,还有那种root的相关信息,都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。据悉,Linux所有的群组名称都纪录在/etc/group内
Linux文件权限概念
ls-al命令
ls是“list”的意思,重点在显示文件的文件名与相关属性。而选项“-al”则表示列举所有的文件详尽的权限与属性(包含隐藏文件,就是文件名第一个字符为“.”的文件)
一、其中文件类型权限有10个字符:
第一个字符代表这个文件是“目录、文件或链接文件等等”:
接出来的字符中,以三个为一组,且均为“rwx”的三个参数的组合。其中,[r]代表可读(read)、[w]代表可写(write)、[x]代表可执行(execute)。要注意的是,这三个权限的位置不会改变,假如没有权限,还会出现加号[-]而已。
目录与文件的权限意义并不相同,这是由于目录与文件所记录的数据内容不相同所致
二、第二栏表示有多少文件名链接到此节点
每位文件就会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因而每位文件名都会链接到一个i-node啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码
三、第五栏为这个文件的容量大小,默认单位为Bytes;
四、第六栏为这个文件的创建日期或则是近来的更改日期
假如想要显示完整的时间格式,可以借助ls的选项,亦称:“ls-l--full-time”就才能显示出完整的时间格式了!
五、第七栏为这个文件的文件名
假如文件名之前多一个“.”,则代表这个文件为“隐藏文件”
怎样改变文件属性与权限
chgrp [-R] dirname/filename
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录 都更新成为这个群组之意。
常常用在变更某一目录内所有的文件之情况。
chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:群组名称 文件或目录 # 顺便直接修改群组的名称
选项与参数: -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更
可以使用数字或符号两种方法来进行权限的变更:
数字形式:
r:4w:2x:1
每种身分(owner/group/others)各自的三个权限(r/w/x)分数是须要累加的,比如当权限为[-rwxrwx---]分数则是:
下我们设置权限的变更时,该文件的权限数字就是770。变更权限的指令chmod的句型是这样的:
chmod [-R] xyz 文件或目录
选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
经常我们以vim编辑一个shell的文字批处理文件后,他的权限一般是-rw-rw-r--也就是664,倘若要将该文件弄成可可执行文件,而且不要让其他人修改此一文件的话,这么就须要-rwxr-xr-x这样的权限,此时就得要下达:“chmod755test.sh”的指令
假如有些文件不希望被其他人听到,这么应当将文件的权限设置为诸如:“-rwxr-----”,那就下达“chmod740filename”
符号形式:
(1)user(2)group(3)others三种身分借由u,g,o来代表三种身分的权限,a则代表all亦称全部的身分;读写的权限写成r,w,x
| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录 |
如果要“设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:
所以就是:
chmod u=rwx,go=rx .bashrc
如果是“-rwxr-xr--”这样的权限呢?可以使用
chmod u=rwx,g=rx,o=r filename
倘若不晓得原来的文件属性,而只想要降低.bashrc这个文件的每个人均可写入的权限,这么就可以使用:
chmod a+w .bashrc
假如是要将权限去除而不更动其他已存在的权限呢?比如要拆掉全部人的可执行权限,则:
chmod a-x .bashrc
目录与文件之权限意义
权限对文件的重要性
在Linux下边,文件是否能被执行,由是否具有“x”这个权限来决定的!跟文件名没有关系
对一个文件具有w权限时,具有写入/编辑/新增/更改文件的内容的权限,但并不具备有删掉该文件本身的权限!对于文件的rwx来说,主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系!由于文件记录的是实际的数据
权限对目录的重要性
文件是储存实际数据的所在,目录主要的内容是记录文件名清单,文件名与目录有强烈的关连。针对目录时,那种r,w,x对目录的意义是:
Linux文件种类与扩充名
文件种类:
Linux文件扩充名:
基本上linux伊甸园,Linux的文件是没有所谓的“扩展名”的,一个Linux文件能不能被执行,与他的第一栏的十个属性有关,与文件名根本一点关系也没有。
Linux目录配置的根据--FHS(FilesystemHierarchyStandard)
FHS的重点在于规范每位特定的目录下应当要放置哪些样子的数据而已,FHS是按照过去的经验仍然再持续的改版的,FHS根据文件系统使用的频繁与否与是否容许使用者随便更动,而将目录定义成为四种交互作用的形态:
可分享的(shareable)不可分享的(unshareable)
不变的(static)
/usr(软件放置处)
/opt(第三方软件)
/etc(配置文件)
/boot(开机与内核文件)
可变的(variable)
/var/mail(用户邮箱)
/var/spool/news(新闻组)
/var/run(程序相关)
/var/lock(程序相关)
事实上,FHS针对目录树构架仅定义出三层目录下边应当放置哪些数据而已,分别是下边这三个目录的定义:
根目录(/)的意义与内容:
根目录是整个系统最重要的一个目录,由于不但所有的目录都是由根目录衍生下来的,同时根目录也与开机/还原/系统修补等动作有关。因为系统开机时须要特定的开机软件、核心文件、开机所需程序、函数库等等文件数据,若系统出现错误时,根目录也必需要包含有才能修补文件系统的程序才行。由于根目录是如此的重要,所以在FHS的要求方面,他希望根目录不要置于特别大的分区内linux服务器配置与管理,由于越大的分区你会倒入越多的数据,这么一来根目录所在分区就可能会有较多发生错误的机会。
因而FHS标准建议:根目录(/)所在分区应当越小越好,且应用程序所安装的软件最好不要与根目录置于同一个分区内,保持根目录越小越好。这么不但性能较佳,根目录所在的文件系统也较不容易发生问题。
有鉴于上述的说明,因而FHS定义出根目录(/)下边应当要有下边那些次目录的存在才好,虽然没有实体目录,FHS也希望起码有链接文件存在才好:
目录应放置文件内容
第一部分:FHS要求必须要存在的目录
/bin
系统有好多放置可执行文件的目录,但/bin比较特殊。由于/bin放置的是在双人维护模式下还能否被操作的指令。在/bin下边的指令可以被root与通常账号所使用,主要有:cat,chmod,chown,date,mv,mkdir,cp,bash等等常用的指令。
/boot
这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机菜单与开机所需配置文件等等。Linuxkernel常用的文件名为: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/(建议):与XWindow有关的各类配置文件都在这儿,尤其是xorg.conf这个XServer的配置文件。/etc/sgml/(建议):与SGML格式有关的各项配置文件/etc/xml/(建议):与XML格式有关的各项配置文件
/lib
系统的函数库特别的多,而/lib放置的则是在开机时会用到的函数库,以及在/bin或/sbin下边的指令会调用的函数库而已。哪些是函数库呢?你可以将他想成是“外挂”,个别指令必需要有这种“外挂”才才能顺利完成程序的执行之意。另外FSH还要求下边的目录必需要存在:/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可以使用显存来仿真linux 文件授权给用户,因此性能上会好好多!
/sbin
Linux有特别多指令是拿来设置系统环境的,这种指令只有root才才能借助来“设置”系统,其他使用者最多只能拿来“查询”而已。置于/sbin下边的为开机过程中所须要的,上面包括了开机、修复、还原系统所须要的指令。至于个别服务器软件程序,通常则放置到/usr/sbin/当中。至于本机自行安装的软件所形成的系统可执行文件(systembinary),则放置到/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
这是系统默认的使用者主文件夹(homedirectory)。在你新增一个通常使用者账号时,默认的使用者主文件夹就会规范到这儿来。比较重要的是,主文件夹有两种代号喔:~:代表目前这个使用者的主文件夹~dmtsai:则代表dmtsai的主文件夹!
/lib
拿来储存与/lib不同的格式的二补码函数库,比如支持64位的/lib64函数库等
/root
系统管理员(root)的主文件夹。之所以置于这儿,是由于假如步入双人维护模式而仅挂载根目录时,该目录就才能拥有root的主文件夹,所以我们会希望root的主文件夹与根目录放置在同一个分区中。
下边是几个在Linux当中也是十分重要的目录:
目录应放置的内容
/lost+found
这个目录是使用标准的ext2/ext3/ext4文件系统格式才能形成的一个目录,目的在于当文件系统发生错误时,将一些丢失的片断放置到这个目录下。不过若果使用的是xfs文件系统的话,就不会存在这个目录了
/proc
这个目录本身是一个“虚拟文件系统(virtualfilesystem)”喔!他放置的数据都是在显存当中,比如系统核心、行程信息(process)、周边设备的状态及网路状态等等。由于这个目录下的数据都是在显存当中,所以本身不占任何硬碟空间啊!比较重要的文件比如:/proc/cpuinfo,/proc/dma,/proc/interrupts,/proc/ioports,/proc/net/*等等
/sys
这个目录也许跟/proc十分类似,也是一个虚拟的文件系统,主要也是记录核心与系统硬件信息较相关的信息。包括目前已载入的核心模块与核心侦测到的硬件设备信息等等。这个目录同样不占硬碟容量
初期Linux在设计的时侯,若发生问题时,搜救模式一般仅挂载根目录而已,因而有五个重要的目录被要求一定要与根目录放置在一起,那就是/etc,/bin,/dev,/lib,/sbin这五个重要目录。现今许多的Linuxdistributions因为早已将许多非必要的文件移出/usr之外了,所以/usr也是越来越精简,同时由于/usr被建议为“即使挂载成为只读,系统还是可以正常运行”的模样,所以搜救模式也能同时挂载/usr
/usr的意义与内容:
根据FHS的基本定义,/usr上面放置的数据属于可分享的与不可变动的(shareable,static),假如你晓得怎样通过网路进行分区的挂载(比如在服务器篇会提到的NFS服务器),这么/usr确实可以分享给区域网路内的其他主机来使用
好多读者就会误解/usr为user的简写,虽然usr是UnixSoftwareResource的简写,也就是“Unix操作系统软件资源”所放置的目录,而不是使用者的数据。FHS建议所有软件开发者,应当将她们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件自己独立的目录。
由于是所有系统默认的软件(distribution发布者提供的软件)就会放置到/usr下边,因而这个目录有点类似Windows系统的“C:Windows(当中的一部分)+C:Programfiles”这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬碟容量。通常来说,/usr的次目录建议有下边这种:
目录应放置文件内容
第一部分:FHS要求必需要存在的目录
/usr/bin/
所有通常用户才能使用的指令都置于这儿!目前新的CentOS7早已将全部的使用者指令放置于此,而使用链接文件的形式将/bin链接至此!也就是说,/usr/bin与/bin是一模一样了!另外,FHS要求在此目录下不应当有子目录!
/usr/lib/
基本上,与/lib功能相同,所以/lib就是链接到此目录中的!
/usr/local/
系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录,这样会比较易于管理。举例来说,你的distribution提供的软件较旧linux 文件授权给用户,你想安装较新的软件但又不想移除旧版,此时你可以将新版软件安装于/usr/local/目录下,可与先前的旧版软件有分别啦!你可以自行到/usr/local去瞧瞧,该目录下也是具有bin,etc,include,lib...的次目录
/usr/sbin/
非系统正常运行所须要的系统指令。最常见的就是个别网路服务器软件的服务指令(daemon)啰!不过基本功能与/sbin也差不多,因而目前/sbin就是链接到此目录中的。
/usr/share/
主要放置只读构架的数据文件,其实也包括共享文件。在这个目录下放置的数据几乎是不分硬件构架均可读取的数据,由于几乎都是文字文件嘛!在此目录下常见的还有那些次目录:/usr/share/man:线上说明文档/usr/share/doc:软件杂项的文件说明/usr/share/zoneinfo:与时区有关的时区文件
第二部分:FHS建议可以存在的目录
/usr/games/
与游戏比较相关的数据放置处
/usr/include/
c/c++等程序语言的文件开始(header)与包含档(include)放置处,当我们以tarball形式(*.tar.gz的形式安装软件)安装个别数据时,会使用到里头的许多包含档喔!
/usr/libexec/
个别不被通常使用者惯用的可执行文件或脚本(script)等等,就会放置在此目录中。诸如大部份的X窗口下边的操作指令,好多都是置于此目录下的。
/usr/lib//
与/lib/功能相同,因而目前/lib就是链接到此目录中
/usr/src/
通常源代码建议放置到这儿,src有source的意思。至于核心源代码则建议放置到/usr/src/linux/目录下
/var的意义与内容
假如/usr是安装时会占用较大硬碟容量的目录,这么/var就是在系统运行后才能逐渐占用硬碟容量的目录。由于/var目录主要针对常态性变动的文件,包括高速缓存(cache)、登录文件(logfile)以及个别软件运行所形成的文件,包括程序文件(lockfile,runfile),或则诸如MySQL数据库的文件等等。常见的次目录有:
目录应放置文件内容
第一部份:FHS要求必须要存在的目录
/var/cache/
应用程序本身运行过程中会形成的一些暂读档;
/var/lib/
程序本身执行的过程中,须要使用到的数据文件放置的目录。在此目录下各自的软件应当要有各自的目录。举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放在/var/lib/rpm去!
/var/lock/
个别设备或则是文件资源一次只能被一个应用程序所使用,假如同时有两个程序使用该设备时,就可能形成一些错误的状况,因而就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用。举例来说,烧写机正在烧写一块光碟,你想一下,会不会有两个人同时在使用一个烧写机烧片?假如两个人同时烧写,那片子写入的是谁的数据?所以当第一个人在烧写时该烧写机都会被上锁,第二个人就得要该设备被解除锁定(就是前一个人用完了)才才能继续使用啰。目前此目录也早已放在/run/lock中!
/var/log/
重要到不行!这是登陆文件放置的目录!上面比较重要的文件如/var/log/messages,/var/log/wtmp(记录登录者的信息)等。
/var/mail/
放置个人电子电邮信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中!一般这两个目录是互为链接文件啦!
/var/run/
个别程序或则是服务启动后,会将她们的PID放置在这个目录下喔!至于PID的意义我们会在后续章节提及的。与/run相同,这个目录链接到/run去了!
/var/spool/
这个目录一般放置一些伫列数据,所谓的“伫列”就是排队等待其他程序使用的数据啦!那些数据被使用后一般还会被删掉。举例来说,系统收到新信会放置到/var/spool/mail/中,但使用者收下该信函后该封信原则上都会被删掉。信函假如暂时寄不出去会被放在/var/spool/mqueue/中,等到被送出后就被删掉。假如是工作调度数据(crontab),都会被放置到/var/spool/cron/目录中!
CentOS7在目录的编排上与过去的版本不同喔!本节稍早之前早已有介绍过,这儿做个汇整。比较大的差别在于将许多原先应当要在根目录(/)上面的目录,将他内部数据全部转到/usr上面去,之后进行链接设置!包括下边这种: