`

解析Linux特殊文件

 
阅读更多

您有Dos和Windows经验,就大概知道系统存在若干类型的文件,如系统文件、只读文件、隐含文件等。在Linux/Unix下,文件类型远比Dos/Windows系统多样和复杂。本文以RedHat Linux为例,旨在使读者对Linux下的文件类型有更多的了解。文中的多数内容,对其他发行版的Linux以及Aix、Solaris、Freebsd等操作系统也同样正确。Linux下可以用ls –l 命令来判断文件类型,如上 图所示。可以依据第一列中的10个字符来判断。  ? -rw-r—r—指明了1.txt文件是一个普通文件,1.txt和myprog04文件都是普通文件。以”-“开头的都是普通文件,而以”d”开头的是目录文件。
  ? brw-rw---- 指明了/dev/sda1是一个块设备(Block Device)文件。以”b”开头的文件都是块设备文件。?
  ? crw-rw----指明了/dev/lp0是一个字符设备(Chartacter Device)文件,以”c”开头的文件都是字符设备文件。
  ? srwxrwxrwx 指明了/var/lib/mysql/mysql.sock是一个socket文件。以””开头的文件都是socket文件。
  ? prwxr—r--指明了了mypipe 是一个管道文件。管道文件的一个属性是”p”。
  ? lrwxrwxrwx 指明了softlinkof1.txt 是一个软链接文件(或称符号链接文件),该文件指向了1.txt。以”l”开头的文件是软链接文件。
  ? -rw-r—r—开头的hard_link_of_1.txt看上去是个普通文件,但它实际上是一个硬链接文件。
  ? -rwsr-xr-x指明了myprog01是一个setUid的可执行文件,这是根据第四个字符”s”判断的。
  ? -rwxr-sr-x指明了myprog03是一个setGid的可执行文件,这是根据第七个字符中的”s”判断的。
  ? -rwsr-sr-x指明了myprog02是一个setUid加setGid的可执行文件,这是根据第四个和第七个字符中的”s”判断的。
  ? drwxrwxrwt 中的第一个”d”字指明了tmp文件是一个目录,最后一个字符”t”指明了该目录被设置了粘着位。一、设备文件
  Linux下的/dev 目录中有大量的设备文件。主要是块设备文件和字符设备文件。  块设备文件
  在过去,在添加新磁盘后,往往需要手动增加块设备文件。现在通常我们不需要手动增加块设备文件,运行一下service kudzu start ,系统就会自动为您配置相应的设备。块设备的主要特点是可以随机读写,而最常见的块设备就是磁盘,如/dev/hda1 、/dev/sda2、/dev/fd0等。  字符设备文件
  同块设备一样,我们一般都可以用service kudzu start命令来自动增加、删除或修改字符设备。最常见的字符设备是打印机和终端,他们可以接受字符流。  /dev/null是一个非常有用的字符设备文件,送入这个设备的所有东西都被忽略。如果将任何程序的输出结果重定向到/dev/null,则看不到任何输出信息。甚至于,您可以将某一用户的shell指向/dev/null 以禁止其登陆。  管道设备文件
  管道设备文件有时候也被叫做FIFO文件(FIFO是先进先出的意思),从字面上理解,管道设备文件就是从一头流入,从另一头流出。通常我们会在其中做一些工作,以达到我们“吃的是草,挤出来的是奶”的目的,管道文件也有其妙用。  以前,Unix系统对文件的最大用量用2GB的限制,虽然现在新版本的Linux、Solaris、FreeBSD等不再有此限制,但处理大文件的需求仍然存在,假设您想用镜像(dd命令)的方式来备份一个容量为20GB分区的分区,就会产生一个20GB的文件,根据您磁盘实际的使用状况,这个文件在压缩后可能只有数MB到数GB,我们可以建立一个管道文件来自动实现这个压缩过程。  [root@linux236 root]# mknod mypipe p
  [root@linux236 root]# ls -l mypipe
  prw-r--r-- 1 root root 0 Aug 5 23:27 mypipe
  [root@linux236 root]#  在这里,我们建立了一个叫mypipe的管道文件,用ls -l 命令可以看到它的属性是prw-r--r--,用下面的组合命令实现镜像和压缩:  [root@linux236 root]# compress < mypipe >; sda6.img.Z &
  [root@linux236 root]# dd if=/dev/sda6 of=mypipe
  [root@linux236 root]# ls sda6.img.Z
  sda6.img.Z  第一个命令使得从mypipe管道中流出的文件被压缩为sda.img.Z文件,注意这个命令的结尾必须使用"&"符号。第二个命令将/dev/sda6分区中的资料道入管道文件mypipe,换句话说,/dev/sda6分区中的数据进入管道,而压缩文件sda6.img.Z文件从管道中流出。  在导出Oracle、DB2等大型数据库时等经常会生成很大的文件,熟练的数据库管理员往往会选择通过管道进行压缩的方式,对于Oracle数据库,我们可以使用下边的组合命令:这样,就会将Oracle导出的内容直接压缩成为expdat.dmp.Z文件。  compress < mypipe >; expdat.dmp.Z &
  exp userid=system file=mypipe owner=scott

  第二章 链接文件  链接文件有点类似于Windows 的所谓快捷方式,但并不完全一样。链接有两种方式,软链接和硬链接。  软链接文件
  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象",链接文件甚至可以循环链接自己。类似于编程语言中的递归。  [yaoyao@linux236 yaoyao]$ ls -l
  total 0
  lrwxrwxrwx 1 yaoyao yaoyao  5 Aug 6 17:39 1.txt ->; 3.txt
  lrwxrwxrwx 1 yaoyao yaoyao  5 Aug 6 17:38 2.txt ->; 1.txt
  lrwxrwxrwx 1 yaoyao yaoyao  5 Aug 6 17:39 3.txt ->; 2.txt  上面的三个文件形成了一个递归,实质上没有任何作用。系统管理员应该避免系统出现断链或循环链接。  用ln -s 命令可以生成一个软连接,如下:  [root@linux236 test]# ln -s source_file softlink_file  在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。  硬链接文件
  info ln 命令告诉您,硬链接是已存在文件的另一个名字(A "hard link" is another name for an existing file),这多少有些令人困惑。硬连接的命令是  ln -d existfile newfile  硬链接文件有两个限制  1、不允许给目录创建硬链接;
  2、只有在同一文件系统中的文件之间才能创建链接。  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。三、setUid、setGid文件和带粘着位的目录文件  在Linux/Unix下,有一种可执行文件被setUid,这使得任意使用者在执行该文件时,都绑定了文件拥有者的权限。就好像文件带了一把尚方宝剑一样,setUid文件通常用来提升使用者的权限.最有代表性的su命令.普通用户可以可以执行该命令,使自己升级为root。setUid命令的用法是:  chmod 4755 your_program  setGid 文件和setUid文件非常类似,它使得这使得任意使用者在执行该文件时,都绑定了文件所有组的权限.单独setGid的文件非常少用,通常都是即setUid又setGid。不过和您猜想的可能有点不同。setUid+setGid通常并不是用来提升权限的,而是为了绑定某个特殊用户及其组的特殊权限,例如qmail 的外围软件vpopmail,就使用了一个setUid+setGid的程序vchkpw来校验用户名和密码。这个道理和Apache常常以nobody用户运行一样。其目的是为了更加安全。  setGid 命令的用法为
  chmod 2755 your_program  通常使用命令
  chmod 6755 yourprogram  来使得某可执行程序同时setUid和setGid  全能的root用户当然可以任意setUid和setGid。但尚方宝剑不能用来假传圣旨,普通用户只能给属于自己的文件配置setUid或setGid。由于setUid或setGid文件会使普通用户提升权限,谨慎的系统管理员通常会留意系统中有setUid或setGid文件的变化。减少安全隐患。  在Linux下,/tmp是一个存放临时文件的目录,要求是对所有用户可写。但每个用户都只能删除自己拥有的文件。这种情况下,就可以把目录加一个粘着位。  [root@yaoyao /]# ls -l |grep tmp
  drwsrwsrwt 9 root root 4096 8月7 10:50 tmp  注意第是个字符"t",它代表了这个目录被设置了粘着位。  我们自行建立一个abc的目录,使之具有和/tmp相同的特点  chmod 777 abc
  chmod +t abc  上述的个两个命令组合等同于下边的一个命令:  chmod 1777 abc  用ls –l 看abc 目录的属性如下:  [root@yaoyao test]# ls -l  总用量 4  drwsrwsrwt 2 root root 4096 8月 7 11:32 abc  和/tmp目录相同的需求往往在ftp服务器的upload 目录中也存在。可以用相同的方式处理。四、socket 文件  socket文件类似于管道,但它是在网络上面工作的。您到计算机就是靠它来做网络处理的。您可能听说过“Winsock”,那是 Windows 的套接口。我们在这里不深入谈有关套接口,因为如果您不写程序,您不会用到它,但如果您看到您系统里有个文件类型是s,您知道它是什么就行了。  比如说mysql 运行的时候通常会产生一个socket文件。  [root@yaoyao tmp]# ls -l /tmp/mysql.sock  srwxrwxrwx 1 mysql mysql 08月 7 10:03 mysql.sock  /tmp目录下还有一些socket文件,多半是运行Xwindows的时候产生的。  五、疑难杂症--删除不掉的文件  “为什么有些文件以讨厌的减号("-"开头做文件名,无论如何都删除不掉,这到底为什么?",您可能听过您临桌的新手这样的叫喊过,希望同样的事情不会发生在您的身上,这个非常容易解决,您只要用带路径的方法就可以把他们删除了,假定一个文件名为"-abc",您可以用:  rm ./-abc 或者
  rm /home/yaoyao/-abc  命令将其轻松删除,另外您也可以用相同的方式用vi或者其他工具对他们进行修改。  另一些文件看上去可能一切正常,但当您尝试删除的时候,居然也会报错,就象下边一样:  [root@linux236 root]# ls -l 1.txt
  -rw-r--r-- 1 root root 0 Aug 5 23:00 1.txt
  [root@linux236 root]# rm -rf 1.txt
  rm: cannot unlink `1.txt': Operation not permitted您是全能root用户,居然系统告诉您操作不允许,是Linux疯了么?当然不是,如果您会用lsattr命令,问题就有了答案。  [root@linux236 root]# lsattr
  ---i---------- ./1.txt
  -------------- ./weiqi.ldif
  -------------- ./qi.schema  秘密终于暴露了,在lsattr命令下,这个1.txt文件带有一个"i"的属性,所以才不可以删除。您现在可以用下边的一系列命令:  [root@linux236 root]# lsattr 1.txt
  ---i---------- 1.txt
  [root@linux236 root]# chattr -i 1.txt
  [root@linux236 root]# rm -rf 1.txt
  [root@linux236 root]#  成功了,这个属性专门用来保护重要的文件不被删除,通常的情况下,懂得用这几个命令的通常系统管理员有能力判断这个文件是否可以被删除。 如果您想给一个文件多加点保护,可以使用下边的命令:  chattr +i filename  命令,这样一来,想要删除这个文件就要多一个步骤。同时,这样的文件也是不可以编辑和修改的。只有root用户才能使用chattr命令。此命令可以在Linux ext2或ext3系统上使用。  类似于Dos和Windows文件系统,不能随意删除的文件多半都有其道理,即使您知道如何删除,都应该三思而后行。  总结
  Linux/Unix系统管理是个复杂的工作,掌握和理解Linux/Unix文件类型是必备的基础之一。学习Linux/Unix没有捷径,必需通过大量的实践和努力学习。

分享到:
评论

相关推荐

    解析Linux特殊文件.pdf

    本文主要解析了Linux中的特殊文件类型,包括设备文件、链接文件、setUid、setGid文件和带粘着位的目录、socket文件,以及一些难以处理的文件问题。 首先,设备文件是Linux系统中的重要组成部分,分为块设备文件和...

    LInux fstab文件解析

    Linux fstab 文件解析 Linux 系统中的 `/etc/fstab` 文件是一个非常重要的配置文件,它定义了静态文件系统信息,描述了存储设备和分区如何整合到整个系统中。该文件由 mount 命令读取,以确定设备和分区的挂载选项...

    Linux初,中级学习者教程-Linux操作系统技术合集

    #### 二、解析Linux特殊文件 - **设备文件**:分为字符设备和块设备,用于访问硬件资源,如键盘、硬盘等。 - **链接文件**:分为硬链接和软链接(符号链接),用于创建文件或目录的引用。 - **setUid、setGid文件和...

    Linux系统文件系统的工作原理

    ### Linux系统文件系统的工作原理 #### 一、文件系统概述 在Linux系统中,文件系统是组织和管理数据的一种方式,它将数据存储为文件,并通过目录结构来组织这些文件。Linux支持多种文件系统类型,如ext2、ext3、...

    Linux文件特殊权限SGID-UID详解

    ### Linux 文件特殊权限 SGID/SUID/Sticky Bit 详析 #### 一、引言 在 Linux 操作系统中,为了实现更为灵活和安全的权限管理机制,除了基本的读(r)、写(w)、执行(x)权限外,还引入了一些特殊的权限控制方式,包括 ...

    Linux gcc C语言解析XML文件,纯原生源代码, 无需安装三方库!

    在Linux环境下,使用gcc编译器进行C语言编程时,解析XML文件是一项常见的任务,尤其在处理配置文件或数据交换时。本项目提供了一种纯原生的解决方案,无需依赖额外的XML解析库,如libxml2等。下面将详细阐述如何在...

    Linux进程init主配置文件etcinittab的解析IT知识

    ### Linux 进程init主配置文件/etc/inittab解析 #### 概述 在Linux系统中,`init` 是所有进程的祖先,它的PID始终为1。`init`进程负责初始化整个系统,并根据系统运行级别(runlevel)来启动相应的服务。`init`...

    文件系统模拟LINUX

    8. **设备文件**:Linux中的设备通常被当作特殊文件处理,如/dev目录下的设备文件。模拟时需要考虑如何处理这些特殊文件。 9. **缓冲和缓存**:为了提高效率,Linux文件系统使用缓冲和缓存策略。你需要设计类似机制...

    Linux ini 文件读写

    本节将深入探讨如何在Linux环境下进行`.ini`文件的读写操作,并通过提供的源代码`inirw.c`和`inirw.h`来解析和理解其工作原理。 首先,`.ini`文件的基本结构由节(section)、键(key)和值(value)组成。每个节以...

    linux下的shell解析器

    "Linux下的shell解析器"这个主题涉及到的是如何理解和使用这种工具,尤其是如何实现其基本功能,如输入、解析和运行命令。本文将深入探讨Linux Shell的工作原理、常见种类以及`minishell`这个简化版Shell的实现。 ...

    lrc.rar_Linux 歌词秀_c语言歌词解析_lrc linux_site:www.pudn.com

    解析过程可能包括读取文件、处理LRC格式的特殊标记、解析时间戳以及与音频播放进行同步。 5. **C语言编程实践**: 在C语言中,实现歌词解析可能涉及到文件I/O操作(如`fopen`, `fgets`, `fclose`等函数)、字符串...

    C语言解析ini文件

    C语言中解析ini文件并不像高级语言那样有内置的库支持,因此通常需要自定义函数来实现。本项目提供了一个在Linux环境下运行的C语言程序,用于读取和处理ini文件。 1. ini文件结构: ini文件的基本结构由节...

    顺藤摸瓜之Linux文件系统

    VFS通过抽象出一套通用的接口和数据结构,使得内核可以支持多种不同的文件系统类型,包括但不限于基于磁盘的文件系统(如EXT2、FAT、NTFS)、网络文件系统(如NFS)以及特殊文件系统(如procfs)等。 ##### VFS基本...

    实例解析linux的IO编程

    ### 实例解析Linux的IO编程 #### Linux标准IO与文件IO概述 在深入探讨Linux的IO编程之前,我们需要先理解Linux中的两种基本IO概念:标准IO(Standard I/O)和文件IO(File I/O)。这两种IO机制在Linux系统中扮演着...

    嵌入式 Linux 根文件系统的实现

    ### 嵌入式Linux根文件系统的实现及关键技术解析 #### 摘要 本文深入探讨了嵌入式Linux根文件系统(Root File System, RootFS)的设计与实现原理,重点介绍了选择根文件系统的方法以及如何构建适用于嵌入式系统的根...

    linux文件系统学习

    - **深入解析Linux目录与文件的权限配置** #### Linux 文件系统简介 Linux中的文件系统是一种高效且灵活的数据组织方式。它不仅管理着文件与目录,还将硬件设备视为特殊类型的文件来处理。这样的设计理念简化了...

Global site tag (gtag.js) - Google Analytics