`

解析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特殊文件.pdf

    Linux操作系统的声音设备编程实例解析

    Linux下常用的声音设备是内部扬声器和声卡,它们都对应/dev目录下的一个或多个设备文件,我们象打开普通文件一样打开它们,用ioctl()函数设置一些参数,然后对这些打开的特殊文件进写操作。由于这些文件不是普通的...

    linux pcap 报文 解析 报头剥离

    剥离特殊包头后的帧格式:ETH格式 --》ipv4 --&gt; tcp --&gt;http *************************************************** @@@@@@@@@@@@@@@@@@@@@@@@@使用说明@@@@@@@@@@@@@@@@@ 将pcapedit 和 配置文件放到用一路径下,...

    windows上可编译Linux内核

    1)写一个程序Trans.cpp将system.exe里的代码和数据从PE文件里解析出来,生成一个system.bin文件,这个文件是能被setup模块直接加载的.我已经将这个程序放在了Linux-0.11的tools目录下,要微软的编译器编译. 2)自己写一...

    Linux编程--Linux内核

    7.5 特殊设备文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 ...

    基于Linux的模拟文件系统的设计与实现

    考虑特殊情况如:各个命令对全路径和相对路径的支持、目录不存在时,给出错误信息、不能用cd进入文件、命令之中不能有空格(如 ex it,给出错误提示)、相对路径的解析、路径中的空格剔除、新建目录或文件时的问题...

    Linux系统环境下的Socket编程详细解析

    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返 回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的...

    LINUX系统管理白皮书

    本书同时收录了Linux领域两位领导人物的作品—相当于“Linux 文档项目”的一个印刷版本,展示了Linux 核心概念及其基本结构。对于面向所有主流Linux子系统的支持与管理任务,本书都进行了恰到好处的讲解。涵盖的主题...

    RED HAT LINUX 6大全

    14.9.1 特殊约定 254 14.9.2 read Only=Versus writeable=Versus writable=Versus write ok=(S) 254 14.9.3 valid users=(S) 254 14.9.4 invalid users=(S) 254 14.9.5 read list=(S) 255 14.9.6 write list=(S) ...

    Linux C程序设计大全

    第20章 特殊文件 第21章 基于流的I/O 第5篇 Linux网络编程 第22章 TCP和UDP协议 第23章 网络编程基础 第24章 网络编程进阶 第25章 网络编程实例——实现文件传输程序 第26章 网络编程实例——简单的Web服务器 第6篇 ...

    Linux内核 内容很全

    的大小 82 7.2 虚拟文件系统 83 7.2.1 VFS文件系统的超级块 84 7.2.2 VFS文件系统的inode节点 84 7.2.3 注册文件系统 85 7.2.4...update进程 90 7.4 /proc文件系统 91 7.5 特殊设备文件 91 第8章...

    Linux编程从入门到精通

    7.5 特殊设备文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 ...

    LINUX编程白皮书 (全集)

    7.5 特殊设备文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 ...

    linux编程白皮书

    7.5 特殊设备文件 91 第8章 网络 92 8.1 TCP/IP网络概述 92 8.2 Linux中的TCP/IP网络层次结构 95 8.3 BSD套接字接口 96 8.4 INET的套接字层 97 8.4.1 创建BSD套接字 98 8.4.2 为INET BSD Socket绑定地址 99 8.4.3 ...

    Linux使用教程(教程)

    十三、关于 Linux系统中关机命令详细解析 125 1.shutdown 125 2.halt----最简单的关机命令 126 3.reboot 126 4.init 126 十四、软件安装 127 十五、Linux操作系统中备份恢复技术的详解 129 十六、GRUB使用说明 131

    Linux管理员指南

    Internet网络服务 第12章 DNS域名解析服务 155 12.1 DNS前身:/etc/hosts文件 156 12.2 DNS的组成部分 157 12.2.1 域和主机 157 12.2.2 子域 158 12.2.3 in-addr.arpa域 159 12.2.4 服务器类型...

Global site tag (gtag.js) - Google Analytics