解析Linux特殊文件

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”指明了该目录被设置了粘着位。
    1、设备文件

  Linux下的/dev 目录中有大量的设备文件。主要是块设备文件和字符设备文件。
  块设备文件
  在过去,在添加新磁盘后,每每须要手动增长块设备文件。如今一般咱们不须要手动增长块设备文件,运行一下service kudzu start ,系统就会自动为您配置相应的设备。块设备的主要特色是能够随机读写,而最多见的块设备就是磁盘,如/dev/hda1 、/dev/sda二、/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
  硬连接文件有两个限制
  一、不容许给目录建立硬连接;
  二、只有在同一文件系统中的文件之间才能建立连接。
  对硬连接文件进行读写和删除操做时候,结果和软连接相同。但若是咱们删除硬连接文件的源文件,硬连接文件仍然存在,并且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬连接文件。而把他当成一个普通文件。
    3、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 目录中也存在。能够用相同的方式处理。

    4、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的时候产生的。
  5、疑难杂症--删除不掉的文件
  “为何有些文件以讨厌的减号("-")开头作文件名,不管如何都删除不掉,这到底为何?",您可能听过您临桌的新手这样的叫喊过,但愿一样的事情不会发生在您的身上,这个很是容易解决,您只要用带路径的方法就能够把他们删除了,假定一个文件名为"-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没有捷径,必需经过大量的实践和努力学习。
相关文章
相关标签/搜索