了解 AIX 上的文件

使用 IBM AIX 命令了解文件的内容和上下文

本文是由两部分组成的关于系统性能管理的系列文章的第二部分,主要介绍如何防止性能问题。通过不断调优您的系统,您可以避免很多压力。您还可以采取一些措施,以便在系统开始阻塞时,您已经准备好快速识别瓶颈,并知道在何处寻求帮助。

Anthony English, 高级 AIX 专家, Levitar Pty Ltd

http://www.ibm.com/developerworks/i/p-aenglish.jpgAnthony English 是来自澳大利亚悉尼市的一名独立承包人。他从 1991 年开始就一直在 AIX 系统上工作,他还撰写 IBM developerWorks 博客 AIX Down Under。Anthony 还被评为 IBM Champion for Power Systems



2013 年 2 月 04 日

什么是文件?

您可以在 IBM® AIX® 上了解大量有关文件的信息,但先来了解这里的重点,到底什么是文件?

文件是一个可以读取或写入的数据的集合。文件可以是您创建的一个程序、您编写的文本、您获取的数据,或者您使用的设备。该定义来自 AIX 7.1 信息中心(参阅 参考资料)。文件可以是任何内容,从目录到 shell 脚本,可以是一个已编译的程序、一个操作系统可执行程序、一个设备或者一个数据库索引文件(这里仅例举了一少部分)。

本文将介绍一些命令,它们能告诉您文件的内容,以及同样重要的文件上下文


使用 ls 命令列出文件

对于文件,您首先要了解的通常是它的名称。ls 命令按名称列出了当前目录中的文件。清单 1 给出了对 /home/ibmdw 目录执行 ls 命令后的输出。

清单 1. ls 命令示例
 # ls backup.data image.info readme sample.txt bin myscript.sh reports

列出的所有文件都对 AIX 文件名称使用了允许使用的字符。(有关文件命名约定的信息,请参阅 参考资料。)了解文件的名称只是一个开始,大多数人更喜欢列出更多的细节。您可以使用 ls -l 命令得到一个较长的清单。这为您提供了更多信息,包括:

  • 最后更改文件内容的时间
  • 文件权限,显示它的拥有者,它所属的组和允许谁读取它、更新它或运行它
  • 文件的大小

您可以使用 清单 2 中的 ls -l 命令查看一个长清单示例。我为此示例添加了一个标题行,但它不会出现在正常的命令中。

清单 2. ls -l 命令
$ ls -l 
total 608 mode links owner group size modified file name 
-rw-r--r-- 1 root system 187972 Nov 24 05:34 backup.data 
drwxr-xr-x 2 ibmdw staff 256 Nov 24 05:29 bin 
-rw-r--r-- 1 root system 11 Nov 24 05:34 image.info 
-r-xr--r-- 1 ibmdw staff 109499 Nov 24 05:29 myscript.sh 
-rw-r--r-- 1ibmdw staff 49 Nov 24 05:32 readme 
drwxr-xr-x 2 ibmdw staff 256 Nov 24 05:30 reports 
-rw-r--r-- 1 root system 2550 Nov 24 05:33 sample.txt

在此清单中,每个文件都有一行。左列的第一个字符显示了文件的类型。最常见的文件类型是 d(表示一个目录)和 -(显示一个普通文件)。然后看到的是文件模式(文件权限的一个必要部分)、链接数量以及该文件所属的所有者和组。在这之后,可以看到文件大小(以字节为单位),随后是最后修改文件的日期和时间。最后是文件名称。

文件权限信息不属于本文的介绍范围,但 参考资料 一节指明了您可在何处获得更好的解释。

运行 ls 命令时有许多选项可用。表 1 描述了一些常见选项。

表 1. 可用于 ls 命令的常见标志
标志描述
‑a 或 ‑A允许您查看以一个点开头的隐藏文件。这包括 .profile 等文件,该文件在登录时会设置一些用户变量。
注意:如果以 root 用户登录时运行了 ls 命令,也可以看到此信息。
-t按修改日期对文件进行排序。
-r反向排序。

ls 命令对提供基本信息有所帮助,但您可以了解的文件信息要比 ls 命令报告的信息多得多。


文件名

文件的名称可能会表明文件的类型。例如,shell 脚本常常以 .sh 结尾,配置文件可能以 .cfg 或 .ini 结尾。您通常可以通过查看文件的名称和扩展名(如果它拥有扩展名)来了解它的用途。表 2 给出了一些示例。

表 2. 文件名与文件类型的关系示例
文件名描述
startnode.sh启动 WebSphere 节点的 shell 脚本
/etc/filesystems文件系统的列表
Java14.sdk.tar.gzJava™ 1.4.2 软件开发人员工具包 tar 文件(压缩为 gzip)

可以看到,文件的名称有时 表明了文件的可能用途,但这不是一条永远有效的规则。因为 AIX 为您可使用的文件名提供了灵活的类型,所以无法保证您可以从文件的名称了解文件类型。

其他一些线索也表明了文件的用途,比如文件所属的目录名称或文件系统。如果有一个名为 /db_dat 的文件系统和另一个名为 /db_idx 的文件系统,它们很可能分别用于数据库数据文件和索引文件。


文件类型

一些命令可帮助您查看您处理的文件类型。file 命令尝试将文件归类为以下类别:

  • ar 压缩文件目录
  • 块特殊文件
  • C 语言源文件
  • 特殊字符
  • cpio 压缩文件
  • 目录
  • 空文件
  • FORTRAN 源文件
  • 先进先出 (FIFO)
  • shell 脚本(命令文本)
  • 套接字
  • 符号链接
  • tar 压缩文件

如果计划查看或编辑一个文件,那么 file 命令特别重要。知道文件的类型后,就可以确定需要使用哪些工具来查看它的内容。


文件系统、目录和文件集

知道文件的名称和类型很有用,但文件并不是单独存在的,它与其他文件存在着关联。文件位于文件系统中,属于一个目录树中的某个位置。一些文件还属于 AIX 文件集。本节提供一些有助于查看某个文件相对于其他文件的位置的命令。

哪个文件系统?

如果您希望确定文件属于哪个文件系统,那么查看 df 命令所生成的文件系统列表有时可能会产生误导。您可能认为 /usr/tmp/hostmibd.log 文件位于 /usr 中,但事实上它位于 /var 中。事实证明,/usr/tmp 父目录是 /var/tmp 的一个符号链接,如 清单 3 所示。

清单 4. 列出目录和符号链接
 # ls -ld tmp lrwxrwxrwx 1 bin bin 8 Sep 13 2010 tmp -> /var/tmp

所以,如果该文件开始增长,它会使用 /var 中的空闲空间,而不是 /usr。幸运的是,您可以让 AIX 确定这一点,可以使用 df 命令并添加该文件名作为参数,如 清单 4 所示。

清单 5. 使用文件名作为 df 命令的参数
 # cd /usr/tmp # df aixmibd.log Filesystem 512-blocks Free %Used I
used %Iused Mounted on /dev/hd9var 2097152 1237000 42% 17545 11% /var

如果您拥有符号链接或一些嵌套的文件系统,这特别有用。如果您在使用脚本并需要确定某个文件所属的文件系统,这也有所帮助。

哪个目录?

文件属于一个目录路径,您可从该目录路径追溯到 root 目录 (/)。例如,文件 myfile 可能属于 /a/very/long/directory/path。

有时能够显示不含完整路径的文件名也会有所帮助。为此,您可以使用 清单 5 中所示的 basename 命令。

清单 6. basename 命令示例
 # basename /a/very/long/directory/path/myfile myfile

如果希望删除 basename,仅保留直到最后的斜杠 (/) 的剩余部分,那么可以使用 dirname 命令,如 清单 6 所示。

清单 7. 一个 dirname 命令示例
 # dirname /a/very/long/directory/path/myfile /a/very/long/directory/path

一般而言,当您希望拆分一个字符串时,这些命令在脚本中会更有用。您可以将结果存储在一个变量中,然后在该字符串上运行 dirnamebasename

哪个文件集?

一个 AIX 文件集包含许多文件。要确定文件属于哪个文件集,可以使用 lslpp -Jw 命令,后跟具有完整路径的文件名。清单 7 表明 mksysb 命令(/usr/bin/mksysb 文件)属于 bos.sysmgt.sysbr 文件集。

清单 8. 显示一个文件所属的文件集
File Fileset                
  Type
-----------------------------------------------------------------
/usr/sbin/installp                 bos.rte.install          File
/usr/clvm/sbin/linstallpv          prpq.clvm                File
/usr/lpp/bos.sysmgt/nim/methods/c_installp
                                   bos.sysmgt.nim.client    File

也可使用文件集作为起点,列出属于它的文件。为此,可以使用 lslpp -f,后跟文件集名称。清单 8 给出了一个示例。

清单 9. 列出一个文件集中包含的文件
 lslpp -f bos.sysmgt.sysbr Fileset File
Path: /usr/lib/objrepos bos.sysmgt.sysbr 7.1.0.0
  /usr/lpp/bosinst/iscsi
/objrepos/sm_name_hdr 
/usr/lib/bootpkg/5.3.7.0-spotpkg.tar 
/usr/lpp/bosinst/iscsi 
/usr/lib/bootpkg/6.0.0.0-spotpkg.tar /usr/lib/bootpkg/5.2.0.10-spotpkg.tar
 /usr/lpp/bosinst/iscsi/objrepos/sm_cmd_hdr
 /usr/lpp/bos.sysmgt/mkcd.README.txt 
/usr/sbin/bootpkg /usr/samples/oem_cdwriters/burn_cd_jodian
 /usr/lpp/bosinst/cdfs.optional.list /usr/sbin/mkinsttape
 /usr/bin/mkszfile /usr/lib/bootpkg/5.1.0.50-spotpkg.tar
 /usr/lpp/bosinst/tape /usr/lpp/bosinst/image.template
 /usr/lpp/bosinst/CheckSize /usr/lpp/bosinst/BosMenus
 /usr/lpp/bosinst/bi_main /usr/lpp/bosinst/bosinst.template.README 
/usr/lpp/bosinst/bosinst.template /usr/lpp/bosinst/Get_RVG_Disks 
/usr/lpp/bos.sysmgt/mkcd.README.html /usr/lpp/bosinst/iscsi/iscsi_cfg
 /usr/lib/bootpkg/5.2.0.30-spotpkg.tar /usr/lib/bootpkg/5.3.0.0-spotpkg.tar
 /usr/lib/bootpkg/bootpkg_list 
/usr/lpp/bosinst/iscsi/objrepos/sm_menu_opt
 /usr/lpp/bosinst/post_vgsync /usr/samples/oem_cdwriters /
usr/sbin/mkdvd -> /usr/sbin/mkcd /usr/lpp/bosinst/cdeject
 /usr/lpp/bosinst/iscsi/objrepos
 /usr/lpp/bosinst/iscsi/objrepos/sm_cmd_hdr.vc 
/usr/lib/bootpkg 
/usr/sbin/mkrr_fs -> /usr/samples/oem_cdwriters/mkrr_fs_gnu 
/usr/bin/restwparfiles -> /usr/bin/listvgbackup 
/usr/bin/restvg 
/usr/bin/listvgbackup /usr/lib/bootpkg/6.1.1.0-spotpkg.tar
 /usr/samples/oem_cdwriters/burn_cd_gnu_dvdram
/usr/samples/oem_cdwriters/burn_cd_youngminds 
/usr/lpp/bos.sysmgt/README.oem_cdwriters -> 
/usr/lpp/bos.sysmgt/mkcd.README.txt
 /usr/lpp/bosinst/iscsi/objrepos/sm_cmd_opt
 /usr/lpp/bosinst/iscsi/iscsi_smit /usr/bin/lsmksysb ->
 /usr/bin/listvgbackup /usr/lib/bootpkg/5.2.0.75-spotpkg.tar
 /usr/bin/lssavevg -> /usr/bin/listvgbackup
 /usr/lib/bootpkg/4.3.3.75-spotpkg.tar 
/usr/samples/oem_cdwriters/mkrr_fs_gnu 
/usr/lpp/bosinst/cdfs.required.list
 /usr/bin/savewpar -> 
/usr/bin/mksysb
 /usr/bin/mksysb 
/usr/lpp/bos.sysmgt/README
 /usr/sbin/burn_cd -> 
/usr/samples/oem_cdwriters/burn_cd_gnu
 /usr/bin/mkvgdata -> /usr/bin/mkszfile 
/usr/bin/savevg -> /usr/bin/mksysb
 /usr/samples/oem_cdwriters/burn_cd_gnu
 /usr/lpp/bosinst/cmdbsys_lib 
/usr/lpp/bosinst/iscsi/objrepos/sm_name_hdr.vc 
/usr/lpp/bosinst/adjfs
 /usr/lib/bootpkg/5.2.0.40-spotpkg.tar 
/usr/lpp/bosinst/iscsi/objrepos/sm_cmd_opt.vc 
/usr/samples/oem_cdwriters/mkrr_fs_youngminds 
/usr/lpp/bosinst/tape/tapefiles1 
/usr/bin/mkwpardata -> 
/usr/bin/mkszfile
 /usr/lpp/bosinst/iscsi/objrepos/sm_menu_opt.vc 
/usr/bin/restorevgfiles ->
 /usr/bin/listvgbackup
 /usr/lpp/bosinst/cdboot
 /usr/lpp/bosinst/bicheck
 /usr/bin/lssavewpar ->
 /usr/bin/listvgbackup 
/usr/sbin/restwpar 
/usr/lib/bootpkg/5.2.0.0-spotpkg.tar
 /usr/sbin/mkcd
 /usr/samples/oem_cdwriters/mkrr_fs_jodian 
/usr/lpp/bosinst/bicfgsup
 /usr/lpp/bosinst/cdfs.optional.B.list 
/usr/lib/bootpkg/5.1.0.35-spotpkg.tar 
Path: /etc/objrepos bos.sysmgt.sysbr 7.1.0.0 /etc/preserve.list

文件指纹

您系统上的每个文件都是惟一的。即使您复制一个文件,该副本与原始文件也是有所不同的。内容可能是相同的,但该文件仍然是惟一的。为什么会这样呢?

一个文件所包含的不仅仅是它的内容。甚至文件名也不能使它惟一,因为您可有两个具有相同名称的文件,只要它们位于不同的目录中。那么是什么使一个文件不同于另一个文件呢?要回答这个问题,您可以查看文件的 inode。inode 是一种目录。每个文件都有一个 inode 编号,在文件系统中,该编号是这个文件所独有的。

您可以使用 istat 命令检查文件的 inode 信息,该命令显示了文件的 inode 编号和文件所在的设备。inode 还显示了文件的最后访问时间、权限和扩展权限。有关扩展权限和访问控制列表(或 ACL)的更多信息,请参阅 参考资料清单 9 显示了 istat 命令的输出示例。

清单 10. 一个 istat 命令示例
 # istat lspartition 
Inode 321985 on device 10/9 
File Protection: rwxr-xr-x Owner: 2(bin) Group: 2(bin) Link count: 1 Length 19884 bytes 
Last updated: Thu Nov 17 10:19:59 EST 2011 
Last modified: Wed Jul 20 01:06:07 EST 2011 
Last accessed: Wed Jul 20 06:02:35 EST 2011

您可以在 istat 命令的输出中看到 3 个日期和时间戳字段。表 3 列出并描述了这些字段。

表 3. istat 命令输出中的日期和时间戳字段
字段描述
Last updated显示最后一次 inode 更新的日期和时间。在重命名文件、更改它的权限或对文件目录执行其他更改时,此字段会更新。
Last modified显示最后一次更改文件本身(而不只是 inode)的日期和时间。
Last accessed显示最后一次打开文件的日期和时间,即使未对文件执行任何更新。

您可以借助 find 命令,使用任何上述时间戳来搜索文件。find 命令通过使用标志,允许您将搜索范围缩小到在某个时间段内被访问、被修改或其 inode 被更新的文件。例如,通过调用带有 -mtime(修改时间)的 find,您可以找到在特定天数内发生更改的文件。清单 10 显示了如何列出在前 3 天内更改的所有文件,从当前目录开始。

清单 11. 按一定天数的修改时间查找文件
 find . -mtime -3

类似地,您可以搜索在特定分钟数内修改、更新或访问的文件。清单 11 显示了如何查找最后 10 分钟内访问的文件。

清单 12. 按一定分钟数内的修改时间查找文件
 find . -amin -10

find 命令的 AIX 命令文档更详细地解释了这些选项(参阅 参考资料)。


文件大小

要显示文件的大小,可以使用 du 命令。这比转换 ls -l 命令的输出更容易。有关如何显示文件大小的更多细节,请参阅 参考资料


文件内容

如果文件是文本文件,您可以查看它的内容(前提是您拥有该文件的读取权限)。许多命令都可以帮助您查看美国信息交换标准码 (ASCII) 文件的部分或所有内容。表 4 列出并描述了其中一些命令。

表 4. 查看 ASCII 文件内容的命令
命令描述
morepg一次显示文件的一页
head显示文件的前几行
tail显示文件最后几行。如果文件仍在更新,可使用 tail -f 查看一个连续视图
view在 vi 编辑器会话中以只读模式显示文件内容

即使文件不是 ASCII 格式,您也可以使用 strings 命令查看文件中的可打印字符串。


文件用户

要查看一个文件是否正在被某个进程使用,可以使用 fuser 命令。您可以使用 fuser -u 命令列出拥有该进程的用户名称。如果确信该进程可终止,那么可以使用 fuser -k 命令停止它。


更多文件信息

其他许多命令也可以告知文件信息,帮助您管理它们。一些命令可删除、复制、移动或重命名文件。您还可以使用命令显示文件内容或查找文件中的文本字符串。可以统计一个文件中的字符数、行数和字数,并且可以对比文件并显示区别。表 5 列出了一些管理文件的最有用命令。有关所有这些命令的文档,可在 AIX 信息中心中找到(参见 参考资料)。

表 5. 其他管理文件的命令
命令描述
cat串联或显示文件
cmp对比两个文件
colrm提取一个文件中的列
cp复制文件
cut写出一个文件的每一行中选定的字节、字符或字段
devnm显示一个文件所在的设备
diff、bdiff对比文本文件
diff3对比三个文件
dircmp对比两个目录
ff列出一个文件系统中所有文件的路径
grep在文件中搜索某种模式
mv移动文件
nl对文件中的行进行编号
rm删除(取消链接)文件或目录
paste将多个文件的行或后续行合并到一个文件中
sdiff提供文件的并排对比
sort排序文件,合并已排序的文件,并检查文件,确定它们是否已排序
sum获取一个文件的校验和以及块数
uniq报告或删除某个文件中的重复行
wc统计文件中的行数、字数和字节数
which找到某个程序文件,包括别名和路径

结束语

本文介绍了一些 AIX 命令,您可以使用它们处理文件,但这样的命令还有许多。事实上,每个 命令都以某种方式来处理文件。您可以看到,不时地查阅命令文档很有用,因为可能有新的标志或命令出现。如果很好地利用可用的命令,您的系统管理工作将会变得更轻松。

参考资料

学习

获得产品和技术

  • 以最适合您的方式 评估 IBM 产品:下载产品试用版,在线试用产品,在云环境中使用产品,或者在 SOA 沙盒 中花几小时学习如何高效地实现面向服务的体系结构。

讨论

  • 加入 developerWorks 社区。浏览由开发人员推动的博客、论坛、群组和维基,并与其他 developerWorks 用户进行交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=857236
ArticleTitle=了解 AIX 上的文件
publish-date=02042013