Linux认证 百分网手机站

Linux用户/文件系统管理详解(3)

时间:2017-06-02 15:13:53 Linux认证 我要投稿

Linux用户/文件系统管理详解

  chmod u+s;

  于是该文件的权限将变为: rws r-x r-x

  在查找设置了s u i d的文件时,没准会看到具有这样权限的文件:rwS r-x r- x,其中S为大写。

  它表示相应的执行权限位并未被设置,这是一种没有什么用处的s u i d设置,可以忽略它的存在。

  注意,c h m o d命令不进行必要的完整性检查,可以给某一个没用的文件赋予任何权限,但chmod 命令并不会对所设置的权限组合做什么检查。因此,不要看到一个文件具有执行权限,就认为它一定是一个程序或脚本。

  8、chown和chgrp

  当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所有权,把它的所有权交给另外一个/ e t c / p a s s w d文件中存在的合法用户。可以使用用户名或用户I D号来完成这一操作。

  在改变一个文件的所有权时,相应的s u i d也将被清除,这是出于安全性的考虑。只有文件的属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另外一个用户,就无法再重新收回它的所有权。如果真的需要这样做,那么就只有求助于系统管理员了。

  (1)、chown 选项文件名

  - R选项意味着对所有子目录下的文件也都进行同样的操作。

  - h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。

  如:

  # ls -l

  drwxrwxr-x 2 sam sam 4096 10月 26 19:48 sam

  # chowngem sam

  # ls -l

  drwxrwxr-x 2 gem sam 4096 10月 26 19:48 sam

  c h g r p命令和c h o w n命令的格式差不多,下面给出一个例子。

  # ls -l

  drwxrwxr-x 2 gem sam 4096 10月 26 19:48 sam

  # chgrpgroup sam

  # ls -l

  drwxrwxr-x 2 gem group 4096 10月 26 19:48 sam

  (2)、找出你所属于的用户组

  如果你希望知道自己属于哪些用户组,可以用ID这个命令:

  # id

  uid=0(root)gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

  查看当前用户所属组

  # id gem

  uid=507(gem)gid=507(group) groups=507(group),0(root),4(adm)

  查看其它用户所用组:#id 用户名

  9、umask

  当最初登录到系统中时, u m a s k命令确定了你创建文件的缺省模式。这一命令实际上和c h m o d命令正好相反。你的系统管理员必须要为你设置一个合理的u m a s k值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。

  在已经登录之后,可以按照个人的偏好使用u m a s k命令来改变文件创建的缺省权限。相应的改变直到退出该s h e l l或使用另外的u m a s k命令之前一直有效。

  一般来说,u m a s k命令是在/ e t c / p r o f i l e文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的u m a s k,可以在该文件中加入相应的条目。如果希望永久性地设置自己的u m a s k值,那么就把它放在自己$ H O M E目录下的. p r o f i l e或. b a s h _ p r o f i l e文件中。

  (1)、如何计算umask值

  u m a s k命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、属组、其他用户)存在一个相应的u m a s k值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用c h m o d命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, u m a s k中各个数字最大可以到7。

  该命令的一般形式为:

  umask nnn

  u m a s k是从权限中“拿走”相应的位即可。文件的全部权限是666,目录的全部权限是777,然后减去响应的umask值就默认的文件和目录权限。

  例如,对于u m a s k值0 0 2,相应的文件和目录缺省创建权限是什么呢?

  1)、文件的最大权限rwx rwx rwx (777)

  2)、umask值为0 0 2 - - - - - - -w-

  3)、目录权限rwx rwx r-x (775) 这就是目录创建缺省权限

  4)、文件权限rw- rw- r-- (664) 这就是文件创建缺省权限

  (2)、如果想知道当前的umask 值,可以使用u m a s k命令:

  #su sam /*切换到sam用户玩境下

  #umask /*查看sam的umask

  0022

  前面多了个0,是suid/guid的,但在unask中此位只能为0或是省略。

  (3)、当新增文件或目录时,预设的使用权限,由 umask 这个内设值所规定的。

  一般情况下,umask 会被设定在 shell 的启始档案中。

  对 bash 的使用者来说,个人的启始档案是 $HOME/.bashrc,使用者可以将 umask 设定在其中。像 RedHat 9 是放 /etc 之下,档名为 bashrc。

  当使用者没有自行设定,umask 设定值便来自于此系统的默认设定。

  10、符号链接

  存在两种不同类型的链接,软链接和硬链接。修改其中一个,硬连接指向的是节点(inode),而软连接指向的是路径(path)

  (1)、软链接文件

  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题,链接文件甚至可以循环链接自己。类似于编程语言中的递归。

  命令格式:ln -s source_path target_path

  (2)、硬链接文件

  info ln 命令告诉您,硬链接是已存在文件的另一个名字。

  命令格式:ln -d existfile newfile

  硬链接文件有两个限制

  1、不允许给目录创建硬链接;

  2、只有在同一文件系统中的文件之间才能创建链接。

  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了原有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改。

  例如:

  第一条为硬链接,第二条为软链接

  $ lnhttpd.conf httpd1.conf

  $ ln -shttpd.conf httpd2.conf

  $ ls –li

  总用量 80

  1077669 -rw-r--r-- 2 sam adm 34890 10月 31 00:57 httpd1.conf

  1077668 lrwxrwxrwx 1 sam adm 10 10月 31 00:58 httpd2.conf ->; httpd.conf

  1077669 -rw-r--r-- 2 sam adm 34890 10月 31 00:57 httpd.conf

  可以看到,使用ls -li,软连接只产生了10字节的快捷而已,硬连接却实实在在的的拷贝。最前面的inode硬链接和源文件是一样的,而软链接不一样。

  $ rm httpd.conf

  在删除链接的源文件,来比较不同之处

  $ ls –l

  总用量 44

  -rw-r--r-- 1 sam adm 34890 10月 31 00:57 httpd1.conf

  lrwxrwxrwx 1 sam adm 10 10月 31 00:58 httpd2.conf ->;httpd.conf

  发现,httpd2.conf实际已经不存在了,是断链,而httpd1.conf变也了普通文件。

  (3)、索引节点、硬连接和连接计数

  1)、索引节点inode:

  Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。

  例如:

  假设我们在硬盘当前目录下建立了一个名为mytext文本文件,其内容只有一行:

  This ismy file.

  1、当然这行文字一定是存储在磁盘数据区某个具体位置里(物理上要通过磁头号、柱面号和扇区号来描述,在本例中假设分别是1、20、30)。

  2、假设其inode是262457,那么系统通过一段标准程序,就能将这个inode转换成存放此文件的具体物理地址(1磁头、20柱面、30扇区),最终读出文件的内容:“This is my file.”

  3、所以inode是指向一个文件数据区的指针号码,一个inode对应着系统中唯一的一片物理数据区,而位于两个不同物理数据区的文件必定分别对应着两个不同的inode号码。

  2)、文件拷贝命令与硬链接的区别:

  # cp/home/zyd/mytext newfile

  在当前工作目录建立了一个新文件newfile,其实际操作主要包括如下三步:

  a、在当前目录中增加一个目录项,其文件名域填入newfile,并分配了一个新的inode,假设是262456。

  b、将原文件(在1磁头、20柱面、30扇区)的内容复制了一份到新的空闲物理块(假设是1磁头、20柱面、31扇区)。

  c、填写一些其他关键信息,使系统通过这些信息及inode号码可以完成物理地址的转换。

  所以文件复制要分配新的inode和新的数据区,虽然两个文件的内容是一样的。

  3)、硬连接hardlink:

  我们实际使用文件时一般是通过文件名来引用的。通过上面的讨论,我们知道:

  1个inode号码肯定和一片完全属于一个文件的数据区一一对应。那么一个文件系统中两个或更多个不同的文件名能否对应同一个文件呢?答案是肯定的。

  我们知道inode号码是记录在文件名对应的目录项中的,我们可以使两个或多个文件的目录项具有相同的inode值,实际上就使它们对应着同一个文件。

  有几个目录项具有相同的inode号,我们就说这个文件有几个硬连接(hardlink),

  对于普通文件,ls -l命令的连接计数count域的数值就是本文件拥有的硬连接数。硬连接可以通过ln命令建立。

  # ln/home/zyd/mytext hardlink_mytext

  就建立了一个新的文件hardlink_mytext,这个文件的inode同样是262457。建立硬连接实际上只是增加了一个目录项,但并复制文件数据区,原文件的数据区由两个文件共享。这一方面能够节约大量磁盘空间,同时可以保证两个文件能同步更新。

  'ls -il'可以显示文件的inode(在下面最左边):

  262456-rw-rw-r-- 1 zyd zyd 17 Nov 3 14:52 newfile

  262457-rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext

  262457-rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 mytext

  4)、连接计数count:

  前面我们介绍了,文件的连接计数域表明本系统中共有几个文件目录项的inode和本文件相同,也就是本文件共有几个硬连接。如上面的例子中hardlink_mytext和mytext文件的count值都是2。

  那么对于目录,其count域的含义是什么呢?目录的count同样表示共有多少个目录项指向此目录,不过要详细说明必须进一步解释VFS文件系统的结构,为简单起见,只要这样理解就行了:(count-2)等于本目录包含的直接子目录数(就是只包括儿子,不包括孙子啦!)。

  例如:如果一个目录/abc的count域为5,那么/abc目录一定包含3个子目录。

  进一步说明:

  硬连接文件实际上并不是一种新的文件类型,两个文件互为对方的硬连接。它们应该都是普通文件(谁能告诉我:其它类型的文件可以硬连接吗?。两个文件除了名称或/和文件目录不同外,其它部分完全相同,更改了一个文件,另一个的文件长度、内容、更改时间等都将相应发生变化,更改了一个文件的权限位mode,另一个也会发生同样的变化。

  注意连接计数字段count,互为硬连接的两个文件的count值都是2,表明有两个inode指向同一文件的inode。

  当我们删除其中一个文件时,系统首先将(count-1)->;count,如果结果是零,就将其目录项和数据区都删除,否则只将本目录项删除,数据区仍然保留,仍然可以通过另外的文件名访问。根据这个特性,可以通过为重要的文件建立硬连接的方法来防止其被误删除。

  一个文件系统允许的inode节点数是有限的,如果文件数量太多,即使每个文件都是0字节的空文件,系统最终也会因为节点空间耗尽而不能再创建文件。所以当发现不能建立文件时首先要考虑硬盘数据区是否还有空间(可通过du命令),其次还得检查节点空间。

  互为硬连接的多个文件必须位于同一个文件系统上。根设备及任何一个需要mount才能挂接进来的分区、软盘、NFS、光驱等都是一个独立的文件系统,每个文件系统有一个相应的设备号,不同文件系统中具有相同inode节点的文件间没有任何联系。系统则通过设备号和inode号的组合唯一确定一个文件。

  Linux之所以能支持多种文件系统,其实是由于Linux提供了一个虚拟文件系统VFS,VFS作为实际文件系统的上层软件,掩盖了实际文件系统底层的具体结构差异,为系统访问位于不同文件系统的文件提供了一个统一的接口。

  实际上许多文件系统并不具备inode结构,其目录结构也和以上的讨论不同,但通过VFS,系统均为其提供了虚拟一致的inode和目录项结构。

  所以,'ls -il'命令实际显示的inode应该是VFS inode,也就是说,inode是存在于内存中的数据结构,而不一定是实际的硬盘结构。

  但为Linux量身定做的ext2文件系统具备实际的inode和连接型目录项结构,所以,对于ext2文件系统,可以认为我们上面讨论的关于硬连接的概念是完全正确的。

【Linux用户/文件系统管理详解】相关文章:

1.Linux文件权限详解

2.解析Linux磁盘和文件系统管理

3.Linux文件查找命令find和xargs详解

4.Linux系统管理:linux修改键盘按键

5.Linux认证系统管理:linux下搭建ftp

6.Linux cpuinfo系统详解

7.Linux文件系统简介

8.Linux用户与“最小权限”原则