文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux一些非常有用命令

linux一些非常有用命令

时间:2009-04-01  来源:fzud

有关文件的详细说明

ls 命令及其许多参数提供了一些非常有用的文件信息。另一个不太为人所熟知的命令 stat 提供了一些更为有用的信息。

下面演示了如何对可执行文件“oracle”(位于 $ORACLE_HOME/bin 目录下)使用此命令。

# cd $ORACLE_HOME/bin # stat oracle File: `oracle' Size: 93300148 Blocks:182424 IO Block:4096 Regular File Device: 343h/835d Inode: 12009652 Links: 1 Access: (6751/-rwsr-s--x) Uid:( 500/ oracle) Gid:( 500/ dba) Access: 2006-08-04 04:30:52.000000000 -0400 Modify: 2005-11-02 11:49:47.000000000 -0500 Change: 2005-11-02 11:55:24.000000000 -0500 

注意使用该命令获得的信息:除了通常的文件大小(也可以使用 ls -l 命令获得)以外,您还获得了该文件占用的块数。通常的 Linux 块大小为 512 字节,因此一个大小为 93,300,148 字节的文件将占用 (93300148/512=) 182226.85 个块。由于块都是完整占用,因此该文件使用了一些整数个数的块。无需猜测就可以获得确切的块数。

您还可以从以上输出中获得文件所有权的 GID 和 UID,以及权限的八进制表示形式 (6751)。如果要将文件恢复到它现在具有的相同权限,可以使用 chmod 6751 oracle,而不是显式拼写这些权限。

以上输出最有用的部分是文件访问时间戳信息。该输出显示,该文件被访问的时间是 2006-08-04 04:30:52(显示在“Access:”的旁边),即 2006 年 8 月 4 日上午 4:30:52。这是某个人开始使用数据库的时间。该文件的修改时间是 2005-11-02 11:49:47(显示在“Modify:”的旁边)。最后,“Change:”旁边的时间戳显示文件状态更改的时间。

stat 命令的修改符 -f 显示了有关文件系统(而非文件)的信息:

# stat -f oracle File: "oracle" ID: 0 Namelen:255 Type:ext2/ext3 Blocks: Total: 24033242 Free: 15419301 Available: 14198462 Size: 4096 Inodes: Total: 12222464 Free: 12093976 

另一个选项 -t 显示了完全相同的信息,只不过是在一行中显示的:

# stat -t oracle oracle 93300148 182424 8de9 500 500 343 12009652 1 0 0 1154682061 1130950187 1130950524 4096 

这对 shell 脚本非常有用,在 shell 脚本中可以使用一个简单的 cut 命令获得值以进行进一步处理。

 

文件类型

查看文件时,如何知道它的文件类型?命令 file 可以显示文件类型。例如:

# file alert_DBA102.log alert_DBA102.log:ASCII text 

文件 alert_DBA102.log 是一个 ASCII 文本文件。来看看更多示例:

# file initTESTAUX.ora.Z initTESTAUX.ora.Z:compress'd data 16 bits 

该示例指示文件是压缩文件,但如何知道文件的压缩类型?方法之一是将该文件解压缩并再次运行它;但这实际上是几乎不可能的。一种更简便的方法是使用参数 -z:

# file -z initTESTAUX.ora.Z initTESTAUX.ora.Z:ASCII text (compress'd data 16 bits) 

另一种方法是显示符号链接:

# file spfile+ASM.ora.ORIGINAL spfile+ASM.ora.ORIGINAL:symbolic link to /u02/app/oracle/admin/DBA102/pfile/spfile+ASM.ora.ORIGINAL 

尽管该方法很有用,但所指向的文件的类型是什么?可以使用选项 -l,而不必再次运行文件:

# file -L spfile+ASM.ora.ORIGINAL spfile+ASM.ora.ORIGINAL:data 

该示例清楚地表明该文件是数据文件。注意,与 init.ora 不同的是,spfile 文件是一个二进制文件;因此文件显示为数据文件。

 

比较文件

如何判断两个文件(file1 和 file2)是否相同?方法有多种,每种方法都有其自身的优点。

diff。最简单的命令是 diff,用于显示两个文件之间的差别。以下是这两个文件的内容:

# cat file1 In file1 only In file1 and file2 # cat file2 In file1 and file2 In file2 only 

使用 diff 命令能够了解这两个文件之间的差别,如下所示:

# diff file1 file2 1d0 < In file1 only 2a2 > In file2 only # 

在以上输出中,第一列中的“<”表示该行位于上面最先提到的文件(即 file1)中。第一列中的“>”表示该行位于第二个文件 (file2) 中。输出第一行中的字符 1d0 显示为了作用于文件 file1(以使其与 file2 相同)而在 sed 中必须执行的操作。

另一个选项 -y 显示了相同的输出,只不过输出是并排显示的:

# diff -y file1 file2 -W 120 In file1 only < In file1 and file2 In file1 and file2 > In file2 only 

-W 选项是可选的;它仅指示该命令使用宽度为 120 个字符的屏幕输出,这对于包含长行的文件很有用。

如果只希望了解文件是否不同,而不必知道如何不同,则可以使用 -q 选项。

# diff -q file3 file4 # diff -q file3 file2 Files file3 and file2 differ 

由于文件 file3 和 file4 相同,因此没有输出;在另一个示例中,将报告文件存在差别。

如果要编写 shell 脚本,则采用以下方式生成可以分析的输出可能比较有用。-u 选项可以执行该操作:

# diff -u file1 file2 --- file1 2006-08-04 08:29:37.000000000 -0400 +++ file2 2006-08-04 08:29:42.000000000 -0400 @@ -1,2 +1,2 @@ -In file1 only In file1 and file2 +In file2 only 

以上输出显示了这两个文件的内容,但并未显示重复内容,第一列中的 + 号和 - 号指示文件中的行。第一列中的任何字符均未指示这两个文件中同时存在的内容。

该命令可以识别空格。如果要忽略空格,请使用 -b 选项。使用 -B 选项忽略空白行。最后,使用 -i 忽略大小写。

diff 命令还可以应用于目录。命令

diff dir1 dir2

显示文件文件存在于任一目录中;无论文件是存在于这两个目录中的一个,还是同时存在于这两个目录中。如果它找到同名的子目录,则不会继续查看任何单个文件是否存在差别。示例如下:

# diff DBA102 PROPRD Common subdirectories:DBA102/adump and PROPRD/adump Only in DBA102:afiedt.buf Only in PROPRD:archive Only in PROPRD:BACKUP Only in PROPRD:BACKUP1 Only in PROPRD:BACKUP2 Only in PROPRD:BACKUP3 Only in PROPRD:BACKUP4 Only in PROPRD:BACKUP5 Only in PROPRD:BACKUP6 Only in PROPRD:BACKUP7 Only in PROPRD:BACKUP8 Only in PROPRD:BACKUP9 Common subdirectories:DBA102/bdump and PROPRD/bdump Common subdirectories:DBA102/cdump and PROPRD/cdump Only in PROPRD:CreateDBCatalog.log Only in PROPRD:CreateDBCatalog.sql Only in PROPRD:CreateDBFiles.log Only in PROPRD:CreateDBFiles.sql Only in PROPRD:CreateDB.log Only in PROPRD:CreateDB.sql Only in DBA102:dpdump Only in PROPRD:emRepository.sql Only in PROPRD:init.ora Only in PROPRD:JServer.sql Only in PROPRD:日志 Only in DBA102:oradata Only in DBA102:pfile Only in PROPRD:postDBCreation.sql Only in PROPRD:RMANTEST.sh Only in PROPRD:RMANTEST.sql Common subdirectories:DBA102/scripts and PROPRD/scripts Only in PROPRD:sqlPlusHelp.log Common subdirectories:DBA102/udump and PROPRD/udump 

注意,普通的子目录只按这种方式报告,而不进行比较。如果要进一步深究,并比较这些子目录中的文件,则应使用以下命令:

diff -r dir1 dir2

该命令将采用递归方式进入每个子目录,以比较文件并报告同名文件之间的差别。

 

cmp.命令 cmp 类似于 diff:

# cmp file1 file2 file1 file2 differ:byte 10, line 1 

只要遇到差别就会返回输出。可以使用此输出标识文件在何处可能存在差别。与 diff 一样,cmp 有很多选项,其中最重要的选项是 -s 选项,它只返回一个代码:

  • 如果文件相同,则返回 0
  • 如果文件不同,则返回 1
  • 如果无法进行比较,则返回某个非零数字

示例如下:

# cmp -s file3 file4 # echo $? 0 

特殊变量 $? 指示返回代码来自上次执行的命令。在本示例中,该变量为 0,表示文件 file1 和 file2 相同。

# cmp -s file1 file2 # echo $? 1 

表示 file1 和 file2 不同。

cmp 的这个属性对于 shell 脚本非常有用,因为在 shell 脚本中您只希望检查两个文件是否存在差别,而不必检查差别是什么。该命令的另一个重要用途是比较二进制文件,而 diff 对于比较二进制文件可能并不可靠

 

 

 

相关阅读 更多 +
排行榜 更多 +
binance(某B开头大所

binance(某B开头大所

金融理财 下载
b-i-n-a-n-c-e.幣娘BNB

b-i-n-a-n-c-e.幣娘BNB

金融理财 下载
b.i.n.a.n.c.e(币安

b.i.n.a.n.c.e(币安

金融理财 下载