当前位置:K88软件开发文章中心网站服务器框架Shell → 文章内容

Shell 文件操作

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 14:39:36

可以用八进制来表示它,比如 rwxr-xr-x 就可表示成二进制 111101101,对应的八进制则为 755 。正因为如此,要修改文件的操作权限,也可以有多种方式来实现,它们都可通过 chmod 命令来修改。范例:给文件添加读、写、可执行权限比如,把 regular_file 的文件权限修改为所有用户都可读、可写、可执行,即 rwxrwxrwx,也可表示为 111111111,翻译成八进制,则为 777 。这样就可以通过两种方式修改这个权限。$ chmod a+rwx regular_file或$ chmod 777 regular_file说明: a 指所用用户,如果只想给用户本身可读可写可执行权限,那么可以把 a 换成 u ;而 + 就是添加权限,相反的,如果想去掉某个权限,用 -,而 rwx 则对应可读、可写、可执行。更多用法见 chmod 命令的帮助。实际上除了这些权限外,还有两个涉及到安全方面的权限,即 setuid/setgid 和只读控制等。如果设置了文件(程序或者命令)的 setuid/setgid 权限,那么用户将可用 root 身份去执行该文件,因此,这将可能带来安全隐患;如果设置了文件的只读权限,那么用户将仅仅对该文件将有可读权限,这为避免诸如 rm -rf 的“可恶”操作带来一定的庇佑。范例:授权普通用户执行root所属命令默认情况下,系统是不允许普通用户执行 passwd 命令的,通过 setuid/setgid,可以授权普通用户执行它。$ ls -l /usr/bin/passwd-rwx--x--x 1 root root 36092 2007-06-19 14:59 /usr/bin/passwd$ su #切换到root用户,给程序或者命令添加“粘着位”$ chmod +s /usr/bin/passwd$ ls -l /usr/bin/passwd-rws--s--x 1 root root 36092 2007-06-19 14:59 /usr/bin/passwd$ exit$ passwd #普通用户通过执行该命令,修改自己的密码说明:setuid 和 setgid 位是让普通用户可以以 root 用户的角色运行只有 root 帐号才能运行的程序或命令。虽然这在一定程度上为管理提供了方便,比如上面的操作让普通用户可以修改自己的帐号,而不是要 root 帐号去为每个用户做这些工作。关于 setuid/setgid 的更多详细解释,请参考最后推荐的资料。范例:给重要文件加锁只读权限示例:给重要文件加锁(添加不可修改位 [immutable])),以避免各种误操作带来的灾难性后果(例如 :``rm -rf)$ chattr +i regular_file$ lsattr regular_file----i-------- regular_file$ rm regular_file #加immutable位后就无法对文件进行任何“破坏性”的活动啦rm: remove write-protected regular file `regular_file'? yrm: cannot remove `regular_file': Operation not permitted$ chattr -i regular_file #如果想对它进行常规操作,那么可以把这个位去掉$ rm regular_file说明: chattr 可以用于设置文件的特殊权限,更多用法请参考 chattr 的帮助。文件大小文件大小对于普通文件而言就是文件内容的大小,而目录作为一个特殊的文件,它存放的内容是以目录结构体组织的各类文件信息,所以目录的大小一般都是固定的,它存放的文件个数自然也就有上限,即它的大小除以文件名的长度。设备文件的“文件大小”则对应设备的主、次设备号,而有名管道文件因为特殊的读写性质,所以大小常是 0 。硬链接(目录文件不能创建硬链接)实质上是原文件的一个完整的拷贝,因此,它的大小就是原文件的大小。而软链接只是一个 inode,存放了一个指向原文件的指针,因此它的大小仅仅是原文件名的字节数。下面我们通过演示增加记忆。范例:查看普通文件和链接文件原文件,链接文件文件大小的示例:$ echo -n "abcde" > regular_file #往regular_file写入5字节$ ls -l regular_file*-rw-r--r-- 2 root root 5 2007-12-08 15:28 regular_file-rw-r--r-- 2 root root 5 2007-12-08 15:28 regular_file_hard_filelrwxrwxrwx 1 root root 12 2007-12-07 20:15 regular_file_soft_link -> regular_filelrwxrwxrwx 1 root root 22 2007-12-08 15:21 regular_file_soft_link_link -> regular_file_soft_link$ i="regular_file"$ j="regular_file_soft_link"$ echo ${#i} ${#j} #软链接存放的刚好是它们指向的原文件的文件名的字节数12 22范例:查看设备文件设备号对应的文件大小:主、次设备号$ ls -l hda1_block_dev_filebrw-r--r-- 1 root root 3, 1 2007-12-07 21:44 hda1_block_dev_file$ ls -l null_char_dev_filecrw-r--r-- 1 root root 1, 3 2007-12-07 21:43 null_char_dev_file补充:主 (major)、次(minor)设备号的作用有不同。当一个设备文件被打开时,内核会根据主设备号(major number)去查找在内核中已经以主设备号注册的驱动(可以 cat /proc/devices 查看已经注册的驱动号和主设备号的对应情况),而次设备号(minor number)则是通过内核传递给了驱动本身(参考《The Linux Primer》第十章)。因此,对于内核而言,通过主设备号就可以找到对应的驱动去识别某个设备,而对于驱动而言,为了能够更复杂地访问设备,比如访问设备的不同部分(如硬件通过分区分成不同部分,而出现 hda1,hda2,hda3 等),比如产生不同要求的随机数(如 /dev/random 和 /dev/urandom 等)。范例:查看目录目录文件的大小,为什么是这样呢?看看下面的目录结构体的大小,目录文件的 Block 中存放了该目录下所有文件名的入口。$ ls -ld directory_file/drwxr-xr-x 2 root root 4096 2007-12-07 23:14 directory_file/目录的结构体如下:struct dirent { long d_ino; off_t d_off; unsigned short d_reclen; char d_name[NAME_MAX+1]; /* 文件名称 */}文件访问、更新、修改时间文件的时间属性可以记录用户对文件的操作信息,在系统管理、判断文件版本信息等情况下将为管理员提供参考。因此,在阅读文件时,建议用 cat 等阅读工具,不要用编辑工具 vim 去阅读,因为即使没有做任何修改操作,一旦执行了保存命令,将修改文件的时间戳信息。文件名文件名并没有存放在文件结构体内,而是存放在它所在的目录结构体中。所以,在目录的同一级别中,文件名必须是唯一的。文件的基本操作对于文件,常见的操作包括创建、删除、修改、读、写等。关于各种操作对应的“背后动作”将在下一章《Shell编程范例之文件系统操作》详细分析。范例:创建文件socket 文件是一类特殊的文件,可以通过 C 语言创建,这里

上一页  [1] [2] [3] [4] [5]  下一页


Shell 文件操作