Linux 用户身份与群组记录的档案
在Linux系统当中,默认的情况下,所有的系统上的账号与一般身份使用者,还有root的相关信息,都是记录在/etc/passwd的档案内的。至于个人的密码则是记录在/etc/shadow的档案下。此外,Linux所有的组名都记录在/etc/group内。这3个档案可以说Linux系统里面账号、密码、群组信息的集中地。
ls :List的意思,重点在显示档案的文件名与相关属性。而选项-al表示列出所有档案的详细的权限与属性(包含隐藏文件,就是文件名第一个字符为.的档案)
第一栏代表这个档案的类型与权限(permission)
1.第一个字符代表这个档案是:目录、档案或链接文件等等
当为d则是目录
当为-则是档案
若是l则是连结档
若是b则表示为装置文件里面可供存储的接口设备(可随机存取装置);
若是c则表示为装置文件里面的串行端口设备
2.接下来的字符中,以3个为一组,且均为rwx的3个参数的组合。其中r代表可读(read)、w代表可写write、x代表可执行execute。这3个权限的位置会改变,如果没有权限,就会出现减号 - 而已。
第一组为档案拥有者的权限
第二组为同群组的权限
第三组为其它非本群组的权限
2.第二栏表示有多少档名连接到此节点(i-node)
每个档案都会将它的权限与属性记录到文件系统的i-node中,不过,使用目录树却是使用文件名来记录,因此每个档名就会连结到一个i-node这个属性记录的,就是有多少个不同的档名连结到相同的一个i-node号码去就是了。
3.第三栏表示这个档案(或目录)的拥有者账号
4.第四栏表示这个档案的所属群组
在Linux系统下,账号会附属于一个或多个群组中
5.第五栏为这个档案的容量的大小,默认单位为bytes;
6.第六栏为这个档案的建档日期或者是最近的修改日期
如果想要显示完整的时间格式,可以利用ls的选项:ls -l --full-time就是能够显示完整的时间格式了,包括年、月、日、时间。
7.第七栏为这个档案的档名
如何改变文件属性与权限
chgrp : 改变档案所属群组
chown : 改变档案拥有者
chmod : 改变档案的权限,SUID,SGID,SBIT等的特性
改变所属群组 chgrp
改变一个档案的群组,要被改变的组名必须要在/etc/group档案内存在才行,否则会显示错误。
chgrp [-R ] -R:进行递归(recursive)的持续变更,亦即连同次目录下的所有档案、目录都更新成为这个群组之意。常常用在变更某一目录内所有的档案之情况。
改变档案拥有者 chown
用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个档案中有记录的用户名称才能改变。如果要连目录下的所有次目录或档案同时更改档案拥有者的话,直接加上 -R 选项即可。
语法
chown [-R] 账号名称 档案或目录
chown [-R] 账号名称:组名 档案或目录
选项与参数
-R:进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都变更
事实上,chown也可以chown u file ,亦即在拥有者与群组间加上小数点.也行
复制档案给之外的其他人 cp 指令
cp 来源档案 目标文件
改变权限 chmod 权限的设定方法分别可以使用数字或者符号进行权限变更
数字类型改变档案的权限
Linux档案的基本权限有9个,分别owner/group/other三种身份各有的read/write/execute权限,其中数字代表各个权限对照表:
r:4
w :2
x: 1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的
chmod [-R] xyz 档案或目录
选项与参数:
xyz:就是数字类型的权限属性,为rwx属性数值的相加
-R: 进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更
符号类型改变档案权限
基本上就9个权限分别是1.user 2.group 3.others 3种身份。由u,g,o来代表3种身份的权限。此外a代表all亦即全部的身份,那么读写的权限就可以写成r,w,x
u
+(加入) r
g
chmod -(除去) w 档案或目录
o
=(设定) x
a
目录与档案之权限意义:
权限对档案的重要性
档案是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。因此,权限对于档案来说,他的意义是这样的:
r(read) : 可读取此一档案的实际内容
w(write): 可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
x(execute):该档案具有可以被系统执行的权限
x在windows底下一个档案是否具有执行的能力是由扩展名来判断的,但在Linux底下,档案是否能被执行,则是由是否具有x这个权限来决定。
w权限具有写入/编辑/新增/修改档案的内容的权限,但并不具备有删除该档案本事的权限。对于档案的rwx来说,主要针对档案的内容而言,与档案档名的存在与否没有关系。因为档案记录的是实际的数据
权限对目录的重要性
档案是存放实际数据的所在,目录主要的内容在记录文件名列表,文件名与目录有强烈的关联。
如果针对目录时:
r(read contents in directory)
表示具有读取目录结构列表的权限,所以具有读取r一个目录的权限,表示可以查询该目录下的文件名数据。所以利用ls这个指令将该目录的内容列表显示出来
w(modify contents of directory)
这个可写入的权限目录来说表示具有异动该目录结构列表的权限。也就是这些权限
建立新的档案与目录;
删除已经存在的档案与目录(不论该档案的权限为何)
将已存在的档案或目录进行更名;
搬移该目录内的档案、目录位置
总之,目录的w权限就与该目录底下的文件名异动有关
x(access directory)
目录只是记录文件名,不可以被执行,目录的x代表的是用户能否进入该目录成为工作目录的用途。就是你目前所在的目录。
Linux 档案种类与扩展名
任何装置在Linux底下都是档案,数据沟通的专属的档案在负责。
档案种类:
1.正规档案(regular file);一般在进行存取的类型的档案。依照档案的内容,大略可以分为
2.纯文本档(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本档是因为内容为人类可以直接读到的数据。几乎只要用来做为设定的档案都属于这一种文件类型。
3.二进制文件(binary):Linux当中的可执行文件(script,文字兴批处理文件不算)这种格式。
4.数据格式文件(data):有些程序在运作的过程中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件(data file)
目录(directory): 第一个属性为d
连结档(link):就是类似Windows系统底下的快捷方式。第一个属性为l(英文L的小写)
设备与装置文件(device)
与系统周边及存储等相关的一些档案,通常都集中在/dev这个目录之下。通常又分为两种:
1.区块(block)设备档:就是一些存储数据,以提供系统随机存取的接口设备。
2.字符(character)设备文件:亦即是一些串行端口的接口设备,这些设备的特色就是一次性读取的,不能够截断输出。
3.资料接口文件(sockets):
被称为数据接口文件,这种类型的档案通常被用在网络上的数据承接。可以启动一个程序来监听客户端的要求,而客户端可以透过这个socket来进行数据的沟通。第一个属性为s,最常在/var/run这个目录中看到这种文件类型
4.数据输送文件(FIFO,pipe)
FIFO是一种特殊的文件类型,主要的目的是在解决多个程序同时存取一个档案所造成的错误问题。FIFO是first-in-first-out的缩写。第一个属性为p
Linux档案扩展名:
基本上,Linux的档案没有所谓的扩展名,这个观念跟windows的情况不相同。在Windows底下,能被执行的档案扩展名通常是.com .exe .bat等等,而在Linux底下,只要具有x权限
这个x代表这个档案具有可执行的能力,但是能不能执行成功,就的看该档案的内容了
通常以适当的扩展名来表示该档案是什么种类的。常用的扩展名:
1.*.sh :脚本或批处理文件(scripts),因为批处理文件为使用shell写成的,所以扩展名就编成.sh
2.*Z,*.tar, *,*zip,*tgz:经过打包的压缩文件。因为压缩软件分别为gunzip,tar等等的,由于不同的压缩软件,而取其相关的扩展名
3.*html,*.php:网页相关档案,分别代表HTML语法与PHP语法新的网页档案。.html的档案可使用网页浏览器来直接开启,至于.php的档案,则可以透过client端的浏览器来server端浏览,以得到运算后的网页结果
Linux档案长度限制:
在Linux底下,使用预设的Ext2/Ext3文件系统时,针对档案的档名长度 限制为:
1.单一档案或目录的最大容许文件名为255个字符;
2.包含完整路径名称及目录/之完整档名为4096个字符。
Linux目录配置的依据--FHS(Filesystem Hierarchy Standard)
根据FHS的官方文件指出,主要目的是希望让使用者可以了解已安装软件通常放置于那个目录下,所以他们希望独立的软件开发商、操作系统制作者、以及要维护系统的用户都能够遵循FHS的标准。也就是说,FHS的重点在于规范每个特定的目录下应该要放置什么样的数据而已。
事实上,FHS依据文件系统使用的频繁与否是否允许使用者随意更动,而将目录定义称为四种交互作用的形态。
可分享的(shareable) 不可分享的(unshareable)
不变的 /usr(软件放置处) /etc(配置文件)
(static) /opt(第三方协力软件) /boot(开机与核心档)
可变动的 /var/mail(使用者邮件信箱) /var/run(程序相关)
(variable) /var/spool/new(新闻组) /var/lock(程序相关)
1.可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其它主机挂载用的目录;
2.不可分享的:自己机器上面运作的装置档案或者是与程序相关的socket档案等,由于仅与自身机器有关,所以当然就不适合分享给其它主机了。
3.不变的:有些数据时不会经常变动的,跟随着distribution而不变动。
4.可变动的:经常改变的数据
事实上,FHS针对目录架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
/(root,根目录):与开机系统有关;
/usr(unix software resource):与软件安装/执行有关;
/var(variable):与系统运作过程有关。
每层目录底下所应该要放置的目录也都又特定的规定
如果以账号的角度来看,所谓root指的是系统管理员的身份,如果以目录的角度来看,root指的是根目录,就是/
根目录(/)的意义与内容:
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。所以在FHS的要求方面,希望根目录不要放在非常大的分割槽内,因为越大的分割槽会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。
因此FHS标准建议:根目录(/)所在分割槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。
FHS定义出根目录(/)底下应该有底下这些次目录的存在
目录 应放置档案内容
系统有很多放置执行文件的目录,但/bin比较特殊。因 为/bin放置的是单人维护模式下能够被操作的指令。 /bin 在/bin底下指令可以被root与一般账号所使用,主要有 :cat,chmod,chown,date,mv,mkdir,cp,bash等 等常用的指令
这个目录主要在放置开机会使用到的档案,包括Linux核/boot 心档案以及开机选单与开机所需配置文件等等。Linux kernel 常用的档名为:vmlinuz,如果使用的是grub这 个开机管理程序,则还会存在/boot/grub/这个目录
在Linux系统上,任何装置与接口设备都是以档案的形 /dev 态存在于这个目录当中。只要透过存取这个目录底下的 某个档案,就等于存取某个装置。比较重要的档 有/dev/null,/dev/zero,/dev/tty,/dev/lp*,/dev/hd*,/dev/sd*等等
系统主要的配置文件几乎都放置在这个目录。一般来说, 这个目录下的各个文件属性是可以让一般使用者查阅的 ,但是只有root有权力修改。FHS建议不要放置可执行文 件(binary)在这个目录中。比较主要的档案有:/etc/inittab;/etc,
/etc/fstab,/etc/sysconfig/等等。另外,其下重要的目录有:
1./etc:所有服务的预设启动script都是放在这里 的。
/etc 2./etc:这就是所谓的super daemon管理的各 服务的配置文件目录。
3./etc/X11/:与X window有关的各种配置文件都在这里,尤 其是xorg.conf这个X server的配置文件。
这是系统默认的用户家目录(home directory)。在新增一 个一般使用者账号时,默认的用户家目录都会规范到这里/home 。比较重要的是,家目录有个代号:~:代表目前这个用 户的家目录,~dmtsai:则代表dmtsai的家目录
系统的函式库,而/lib放置的则是在开机时会用到的函式 库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 /lib 。可以将它想成是外挂,某些指令必须要有外挂才能够顺 利完成程序的执行之意。尤其重要的是/lib/modules/这 个目录,因为该目录会放置核心相关的模块(驱动程序)
media是媒体,这个/media底下放置的就是可移除的装置
/media 。包括软盘、光盘、DVD等等装置都暂时挂载于此。常见 的档名有:/media/floppy ,/media/cdrom等等。
如果想要暂时挂载某些额外的装置,一般建议可以放置在/mmt 这个目录中。
这个是给第三方协力软件放置的目录。如果想要自行安装 额外的软件(非distribution提供的),那么也能够将你的/opt 软件安装到这里来。不过,以前的Linux系统中,习惯放置 在/usr/local目录下。
系统管理员(root)的家目录。如果进入单人维护模式而仅挂/root 载根目录时,该目录就能够拥有root的家目录,root的家目 录与根目录放置在同一个分割槽中。
Linux用来设定系统环境的,这些指令只有root才能够利用 来设定系统,其它用户最多用来查询而已。放在/sbin底下 的开机过程中所需要的,里面包括了开机、修复、还原系/sbin 统所需的指令。至于某些服务器软件程序,一般放置 到/usr/sbin当中。至于本机自行安装的软件所产生的系统 系统执行文件(system binary),则放置到/usr/local/sbin 当中。常见的指令包括:fdisk,fsck,ifconfig,init, mkfs等等
srv可以视为service的缩写,是一些网络服务启动之后,这/srv 些服务所需要取用的数据目录。常见的服务例如:www,FTP 等等
这是一般用户或者正在执行的程序暂时放置档案的地方。这 个目录任何人都能够存取的,所以需要定期的清理下。重要/tmp 数据不可放置在此目录,因为FHS设置建议在开机时,应该 要将/tmp下的数据都删除
这个目录时使用标准的ext2/ext3文件系统格式才会产生 /lost+found一个目录,目的在于当文件系统发生错误时,将一些遗 失的片段放置到这个目录下、这个目录通常会在分割槽 的最顶层存在
这个目录本身是一个虚拟文件系统(virtual filesystem). 放置的数据都是在内存当中。因为这个目录下的数在
/proc 内存当中,所以本身不占任何硬盘空间。比较重要案 如:/proc/cpuinfo,/proc/dma,/proc/interrupts,/proc/ioports, /proc/net/*等等。
这目录其实和/proc类似,也是一个虚拟文件系统,主要是/sys 记录与核心相关的信息。包括目前已加载的核心模块与核心 侦测到的硬件装置信息等等。这个目录同样不占硬盘容量。
因为根目录与开机有关,开机过程中仅有根目录会被挂载,其他分割槽则是在开机完成之后才会持续的进行挂载行为。因此根目录下与开机过程有关的目录,就不能与根目录放到不同的分割槽 。主要有底下这些目录:
1. /etc :配置文件
2. /bin :重要执行档
3. /dev : 所需要的装置档案
4. /lib :执行档所需的函式库与核心所需的模块
5. /sbin : 重要的系统执行文件
这五个目录千万不可与根目录分开在不同的分割槽
/usr的意义与内容:
依据FHS的定义,/usr里面放置的数据属于可分享的与不可变动的(shareable ,static)。如果知道如何透过网络进行分割槽的挂载,那么/usr确实可以分享给局域网络内的其他主机来使用。
很多读者会误会/usr为user的缩写,其实usr是UNIX Software Resource 的缩写,也就是UnIx操作系统软件资源,所放置的目录,而不是用户的数据。FHS建议所有软件开发者,应该将他们的数据合理分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录
因为是所有系统所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录类似Windows系统的C:\Windows\ + C:\Program file\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。一般来说,/usr的次目录有底下这些:
目录 应放置档案内容
/usr/X11R6/ 为X Window System 重要数据所放置的目录,之 所以取名为X11R6是因为最后的X版本为第11版, 且该版的第6次释出之意。
/usr/bin/ 绝大部分的用户可使用指令都放置在这里。
/usr/include/ C/C++等程序语言的档头(header)与包含档 (include)放置处,当以tarball方式(*. 的方式安装软件)安装某些数据时,会使用到里 头的许多包含档。
包含各应用软件的函式库、目标档案(object file),以及不被一般使用者惯用的执行档或脚/usr/lib/ 本(script)。某些软件会提供一些特殊的指令 来进行服务器设定,这些指令不会经常被系统 管理员操作,那就会被摆放在这个目录下,要 注意的是如果使用的是X86_64的Linux系统,那 可能会有/usr/lib64/目录产生。
系统管理员在本机自行安装自己下载的软件(非/usr/local/ distribution默认提供者),建议安装到此目录。 这样比较便于管理。
非系统正常运作所需要的系统指令。最常见的就是
/usr/sbin 某些网络服务器软件的服务指令(daemon)
放置共享文件的地方,在这个目录下放置的数据几/usr/share/ 乎是不分硬件架构均可读取的数据,因为都是文本 文件。在此目录下常见的有这些目录
/usr/share/man:联机帮助文件
/usr/share/doc:软件杂项的文件说明
/usr/share/zoneinfo:与时区有关的时区档案
一般原始码建议放置到这里,src有source的意思/usr/src/ 。至于核心原始码则建议放置到/usr/src/linux/目 录下。
/var的意义与内容:
如果/usr是安装时会占用较大硬盘容量,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的档案,包括快取(cache)、登录档(log file)以及某些软件的运作所产生的档案,包括程序档案(lock file ,run file)或者例如MySQL数据库的档案等等。常见的次目录有:
目录 应放置档案内容
/var/cache 应用程序本身运作过程中会产生的一些暂存档
程序本身执行的过程中,需要使用到的数据文件放/var/lib/ 置的目录。在此目录下各自的软件应该要有各自的 目录
某些装置或者是档案资源一次只能被一个应用程序/var/log/ 所使用,如果同时有两个程序使用该装置时,就可 能产生一些错误的状况,因此就得要将该装置上锁 (lock),以确保该装置只会给单一软件所使用
重要文件。这是登录文件放置的目录,里面比较重/var/log/ 要的档案如:/var/log/messages,/var/log/wtmp( 记录登入者的信息)等
/var/mail/放置个人电子邮件信箱的目录,不过这/var/mail/ 个目录也被放置到/var/spool/mail/目录中。通常 这两个目录是互为链接文件。
/var/run/ 某些程序或者服务启动后,会将他们的PID放置在 这个目录下。
这个目录通常放置一些队列数据,所谓队列就是排/var/spool 队等待其他程序使用的数据。这些数据被使用后通 常都会被删除。如果是工作排程数据(crontab), 就会被放置到/var/spool/cron目录中。
针对FHS,各家distributions的异同
由于FHS仅是定义出最上层/及次层(/usr,/var)的目录内容应该要放置的档案或目录数据,因此,在其他次目录层级内,就可以随开发者自行来配置。
目录树(directory tree)
在Linux底下,所有的档案都是由根目录开始的。那是所有目录与档案的源头,然后一个一个分支下来,有点像树枝状的。因此称这种目录配置方式为:(目录树(directory tree)) 主要特性:
目录树的起始点为根目录(/,root);
每一个目录不止能使用本地端的partition的文件系统,也可以使用网络上的filesystem。
每一个档案在此目录树中的文件名(包含完整路径)都是独一无二的
/SELinux这个目录的内容数据也是在内存中的信息,同样不会占用任何硬盘容量。这个/selinux是Secure Enhance Linux(SELinux)的执行目录,而SELinux是Linux是Linux核心的重要外挂功能之一,可以用来作为西部权限的控管,主要针对程序(尤其是网络程序)的访问控制来限制
根据FHS的定义,最好能够将/var独立出来这样对于系统的数据有一些安全性保护。因为至少根目录还会活着,还能够进入救援模式
绝对路径和相对路径
这两种文件名/路径的写法依据:
绝对路径:由根目录(/)开始写起的文件名或目录名称。
相对路径:相对于目前路径的文件名写法。反正开头不是/就属于相对路径的写法。相对路径是以当前所在路径的相对位置来表示。
这两个特殊的目录:
. :代表当前的目录,也可以使用./来表示;
.. :代表上一层,也可以../来表示。
CentOS的观察
uname -r 可以查看实际的核心版本