文件的权限方面已经有皮毛般的理解,最让人兴奋的是,之前一直搞不懂的suid和guid也读出来点眉目。
1、对文件的权限设置suid/guid之后,执行文件时,普通用户就具有来文件拥有者或者文件归属组的权限。这样可以防止权限的滥用。
2、查找命令中一些设置了suid/guid的命令。
进入/bin或者/sbin目录下
CODE:
$ ls -l | grep '^...s'
上面的命令是用来查找s u i d文件的;
$ ls -l | grep '^...s..s'
上面的命令是用来查找s u i d和g u i d的。
3、设置UID
设置s u i d:将相应的权限位之前的那一位设置为4;
设置g u i d:将相应的权限位之前的那一位设置为2;
两者都置位:将相应的权限位之前的那一位设置为4+2=6。
例子:chmod 4755
还可以用符号的方法来设置
chmod u+s
;
于是该文件的权限将变为: rws r-x r-x
下面是关于符号链接的一些理解:
软链接文件:
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象",链接文件甚至可以循环链接自己。类似于编程语言中的递归。
ln [-s] source_path target_path
硬链接文件:
硬链接是已存在文件的另一个名字,命令如下:
ln -d exitfile newfile
硬链接有两个限制:
1、不能为目录创建硬链接;
2、只有在同一个文件系统的才能创建硬链接;
对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改
硬链接相当于copy了一份??
举例 说明:
$umask 022
$ cp /etc/httpd/conf/httpd.conf /usr/sam
原来前面做的试验,改变了系统默认的umask值,现在改回来为022,
举个httpd.conf文件做例 子
$ ln httpd.conf httpd1.conf
$ ln -s httpd.conf httpd2.conf
第一条为硬链接,第二条为软链接
总用量 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硬链接和源文件是一样的,而软链接不一样,
对http1.conf进行编辑,可以发现httpd.conf也发生了一样的变化
现在删除链接的源文件,来比较不同之处
$ ls -l
总用量 44
drw-r--r-- 2 sam adm 4096 10月 30 20:14 file6
-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变也了普通文件
下面是一个更本质一点的理解:
索引节点、硬连接和连接计数
索引节点inode:
linux为每一个文件分配一个文件号码inode,可以简单理解为指向文件的一个指针,系统通过索引节点而不是文件名来定位每一个文件。
文件拷贝命令与硬链接的区别:
cp命令会开辟出一块新的磁盘空间,分配一个不同于源文件的inode
而硬链接可以几个不同名字的文件,但对应着相同的inode
有几个目录项具有相同的inode号,我们就说这个文件有几个硬连接(hardlink),
对于普通文件,ls -l命令的连接计数count域的数值就是本文件拥有的硬连接数。硬连接可以通过ln命令建立,
连接计数count:
count显示在文件权限的后面。
那么对于目录,其count域的含义是什么呢?目录的count同样表示共有多少个目录项指向此目录,不过要详细说明必须进一步解释VFS文件系统的结
构,为简单起见,只要这样理解就行了:(count-2)等于本目录包含的直接子目录数(就是只包括儿子,不包括孙子啦!)。
进一步说明:
硬连接文件实际上并不是一种新的文件类型,两个文件互为对方的硬连接。它们应该都是普通文件(谁能告诉我:其它类型的文件可以硬连接吗?)。两个文件除了
名称或/和文件目录不同外,其它部分完全相同,更改了一个文件,另一个的文件长度、内容、更改时间等都将相应发生变化,更改了一个文件的权限位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文件系统,可以认为我们上面讨论的关于硬连接的概念是完全正确的。
阅读(785) | 评论(0) | 转发(0) |