`
liyanhui
  • 浏览: 350698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux学习笔记5(解析Linux特殊文件)

阅读更多
解析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学习笔记

    《马哥的Linux学习笔记》是一份针对初学者和进阶者精心编撰的Linux教程,旨在帮助读者全面掌握Linux操作系统的核心概念、命令行操作以及系统管理技能。这份笔记以清晰明了的语言和实例解析了Linux系统的各个方面,是...

    Linux学习笔记.pdf

    根据提供的信息,《Linux学习笔记.pdf》是一份关于Linux操作系统的基础学习材料,主要涵盖了Linux的基本概念、文件系统特性、权限管理以及一些常用命令的使用方法。接下来,我们将详细解析这份文档中提到的重要知识...

    Debian linux学习笔记

    ### Debian Linux 学习笔记 #### 一、基本命令与目录结构 Debian Linux 是一个广泛使用的 Linux 发行版,其稳定性和安全性受到广大用户的认可。对于初学者来说,掌握 Debian Linux 的基本命令和目录结构至关重要。...

    超详细的linux学习笔记

    这份"超详细的Linux学习笔记"涵盖了Linux运维管理的多个重要方面,包括DNS(Domain Name System)、Samba、Apache、Sendmail以及常用的Linux命令。让我们逐一探讨这些知识点。 首先,DNS是互联网上的名称解析服务,...

    linux学习基础笔记

    这份“Linux学习笔记.doc”文档可能会详细讲解以上各点,对于初学者来说是一份非常实用的学习资料。通过深入学习,你可以掌握Linux操作系统的核心技能,为后续的系统管理、开发或运维工作打下坚实基础。

    linux学习笔记--很经典

    本篇“Linux学习笔记”详细介绍了Linux的基本目录结构及其各自的功能,这对于初学者理解Linux系统的核心概念非常重要。 #### 二、Linux目录结构解析 1. **/(根目录)** - 根目录是Linux文件系统的起点,所有的...

    linux 学习笔记

    本学习笔记将深入讲解Linux的基础知识,包括常用命令、账户管理、vi编辑器的使用、SHELL的运用、应用程序的安装与管理,以及Linux系统管理和网络配置。通过学习这些内容,你将能够更好地理解和操作Linux系统。 第一...

    马哥linux手写笔记

    【马哥Linux手写笔记】是一份由知名IT教育专家马永亮,即"马哥"编撰的Linux学习资料,这份笔记以其详实、深入和实用的特点深受广大Linux爱好者和学习者的推崇。马哥在业界享有盛誉,他的教学风格以通俗易懂和实战性...

    linux嵌入式学习笔记更新中

    Linux 嵌入式学习笔记主要涵盖了Linux操作系统的基础知识以及C语言编程的相关内容。下面将对这些知识点进行详细的解析。 1. Linux基础操作: - 登录:在Linux系统中,用户通过`用户名:密码`的方式登录系统。 - ...

    Linux基础学习笔记.docx

    Linux 基础学习笔记是 Linux 操作系统的基础知识笔记,涵盖了 Linux 命令解析语法、权限管理、SELinux 设置、磁盘设置、用户和组设置、计划任务、归档等基础知识点。 一、破密码 破密码是 Linux 系统中的一种安全...

    linux学习笔记,我自己做的

    Linux学习笔记概述 这是一份由个人制作的Linux学习笔记,旨在帮助初学者或有一定基础的用户深入理解和掌握Linux操作系统。作者坦诚地表示,由于自身能力限制,笔记可能存在不足之处,但他愿意与大家分享自己的学习...

    linux笔记笔记笔记笔记

    本文将深入探讨“Linux工作笔记”中涉及的一些关键知识点,包括select多路复用、Makefile文件、Shell脚本、DDNS(动态域名解析)、文件读写、编译内核、鸟哥私房菜Linux教程、转义字符、版本控制工具SVN以及Makefile...

    初学者Linux学习笔记

    初学者Linux学习笔记,根目录文件结构解析说明,内容不断更新中。。。

    linux驱动学习笔记

    Linux驱动学习笔记主要涵盖的是与Linux操作系统内核交互的程序设计,这在系统开发和设备管理中至关重要。Linux驱动程序是连接硬件设备和操作系统之间的桥梁,使得操作系统能够控制和利用硬件资源。以下是对这些文件...

    Linux学习笔记(强悍总结值得一看),细说linux基础知识,LINUX

    这份"Linux学习笔记(强悍总结值得一看)"涵盖了Linux的基础知识,是初学者和进阶者提升技能的理想资源。以下是一些主要知识点的详细说明: 1. **Linux基础概念**:了解Linux的历史、发行版种类(如Ubuntu、CentOS...

    linux内核解析笔记

    学习Linux内核解析,不仅需要理解基本的计算机科学概念,还需要熟悉C语言,因为Linux内核主要是用C语言编写的。此外,理解汇编语言也有助于更深入地了解内核的底层运作。通过深入研究内核,开发者可以优化系统性能,...

    Linux学习笔记.pdf,linux详解,LINUX源码.zip

    "Linux学习笔记.pdf":这可能是一份详尽的文档,包含了Linux的基础知识、命令行操作、系统管理、网络配置、软件安装、文件系统管理等多个方面。这份笔记可能涵盖了从初学者到高级用户所需的各种知识,帮助读者快速...

    狂神说Linux课堂笔记.rar

    【狂神说Linux课堂笔记】是一份详细的Linux学习资料,主要涵盖了CentOS 7.0这一版本的操作系统。这份笔记PDF版旨在帮助读者深入理解和掌握Linux操作系统的核心概念、常用命令及系统管理技能。 Linux是开源的类UNIX...

Global site tag (gtag.js) - Google Analytics