Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

针对Oracle用户的Linux高级命令详解之文件操作篇

$
0
0
       ⑴ 轻松更改所有者,组和权限
          
          下面Think将分别介绍chmod chown chgrp之如何轻松更改所有者,组和权限
          

          假设有如下几个文件:

[root@bogon Desktop]# ls -l
总计 4
-rw-r--r-- 1 root root   0 02-07 10:21 a
-r-x-w--w- 1 root root   0 02-07 10:22 b
-rw-rw-rw- 1 root root   0 02-07 10:22 c
-rwxrwxrwx 1 root root 638 2012-07-18 login.sql

          现在您需要更改所有权限,以便与login.sql的权限相匹配
          当然了,前提是您事先并不知道a b c的权限或者不止a b c而是有成千上万个文件要更改
          那该怎么办?
          
          --reference选项帮您排忧解惑
          
          以下命令使login.sql的权限和a相同:

[root@bogon Desktop]# chmod --reference a login.sql
[root@bogon Desktop]# ls -l
总计 4
-rw-r--r-- 1 root root   0 02-07 10:21 a
-r-x-w--w- 1 root root   0 02-07 10:22 b
-rw-rw-rw- 1 root root   0 02-07 10:22 c
-rw-r--r-- 1 root root 638 2012-07-18 login.sql

          login.sql的权限完全按照a进行更改。您不必先获取a的权限
          
          您还可以将这个技巧用于文件中的组成员关系
          要使think的所属组同oracle的相同,可执行如下命令:

[root@bogon home]# ls -l
总计 24
drwx------ 7 oracle oinstall 4096 02-06 21:34 oracle
drwx------ 3 oradev oinstall 4096 2012-07-15 oradev
drwx------ 4 think  think    4096 2012-07-23 think
[root@bogon home]# chgrp --reference oracle think
[root@bogon home]# ls -l
总计 24
drwx------ 7 oracle oinstall 4096 02-06 21:34 oracle
drwx------ 3 oradev oinstall 4096 2012-07-15 oradev
drwx------ 4 think  oinstall 4096 2012-07-23 think

          适用于更改组的方法也同样适用于所有者

[root@bogon home]# ls -l
总计 24
drwx------ 7 oracle oinstall 4096 02-06 21:34 oracle
drwx------ 3 oradev oinstall 4096 2012-07-15 oradev
drwx------ 4 think  oinstall 4096 2012-07-23 think
[root@bogon home]# chown --reference oracle think
[root@bogon home]# ls -l
总计 24
drwx------ 7 oracle oinstall 4096 02-06 21:34 oracle
drwx------ 3 oradev oinstall 4096 2012-07-15 oradev

          适用于Oracle用户的技巧
          
          该技巧对于移植非常有用,在移植期间您可以(并且可能应该)以不同的用户身份安装文件
          并在以后将这些文件转移至常规的Oracle软件所有者
          
          
       ⑵ 有关文件的详细说明
       
          ls命令及其许多参数提供了一些非常有用的文件信息
          另一个不太为人所熟知的命令stat则提供了一些更为有用的信息

[oracle@Think ~]$ cd $ORACLE_HOME/bin
[oracle@Think bin]$ stat oracle
  File: `oracle'
  Size: 93362427        Blocks: 182552     IO Block: 4096   regular file
Device: 802h/2050d      Inode: 1557452     Links: 1
Access: (6751/-rwsr-s--x)  Uid: (  501/  oracle)   Gid: (  502/oinstall)
Access: 2013-02-07 10:55:28.000000000 +0800
Modify: 2012-07-15 16:33:49.000000000 +0800
Change: 2012-07-15 16:36:54.000000000 +0800

          注意使用该命令获得的信息:除了通常的文件大小(也可以使用ls -l命令获得)以外
          您还获得了该文件占用的块数
          通常的Linux块大小为512字节,因此一个大小为93362427字节的文件将占用(93362427/512=)182348.49个块
          由于块都是完整占用,因此该文件使用了一些整数个数的块,无需猜测就可以获得确切的块数
          
          您还可以从以上输出中获得文件所有权的GID和UID,以及权限的八进制表示(6751)
          如果要将文件恢复到它现在具有的相同权限,可以使用chmod 6751 oracle,而不是显示拼写这些权限
          
          以上输出最有用的部分是文件访问时间戳信息
          该输出显示,该文件被访问的时间是2013-02-07 10:55:28(显示在"Access"的旁边)
          这是某个人开始使用数据库的时间,该文件的修改时间是2012-07-15 16:33:49(显示在"Modify"的旁边)
          
          stat命令的修改符-f显示了有关文件系统(而非文件)的信息:

          

[oracle@Think bin]$ stat -f oracle
  File: "oracle"
    ID: 0        Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 2480156    Free: 769982     Available: 641965
Inodes: Total: 2560864    Free: 2394828

          适用于Oracle用户的技巧
          
          重新链接Oracle(通常在安装补丁过程中执行)时,将在创建新的可执行文件之前将现有可执行文件的名称更改为其他名称
          例如,可以使用以下命令重新链接所有实用程序
          
          relink utilities
          
          该命令对sqlplus可执行文件进行重新编译,此外还执行其他操作
          它将现有的可执行文件命名为sqlplusO,如果重新编译由于某种原因失败
          则relink进程会将sqlplusO重命名为sqlplus,并撤销更改
          同样,如果在应用补丁后发现功能问题,则可以通过手动重命名文件来快速撤销补丁

[oracle@Think bin]$ stat sqlplus*
  File: `sqlplus'
  Size: 8868            Blocks: 32         IO Block: 4096   regular file
Device: 802h/2050d      Inode: 1565800     Links: 1
Access: (0751/-rwxr-x--x)  Uid: (  501/  oracle)   Gid: (  502/oinstall)
Access: 2013-02-07 10:14:38.000000000 +0800
Modify: 2012-07-15 16:34:00.000000000 +0800
Change: 2012-07-15 16:36:54.000000000 +0800
  File: `sqlplusO'
  Size: 0               Blocks: 8          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 1560598     Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (  501/  oracle)   Gid: (  502/oinstall)
Access: 2012-07-15 16:27:10.000000000 +0800
Modify: 2005-06-30 19:23:56.000000000 +0800
Change: 2012-07-15 16:36:54.000000000 +0800

          输出显示sqlplusO的修改时间是2005-06-30,而sqlplus的修改时间 2012-07-15
          该时间也是sqlplusO状态更改的时间
          该输出表明,sqlplus的原始版本从2005-06-30到2013-02-07这段时间一直正常运行
          如果要诊断某些功能问题,则该信息将是一个非常不错的起点
          除了文件更改以外,如果您知道权限的更改时间,则可以将它与发觉的任何功能问题联系起来
          
          另一重要的输出是文件大小,不同的文件存在不同的大小
          
           
       ⑶ 文件类型篇
       
          查看文件时,如何知道它的文件类型?命令file可以显示文件类型。例如:

[oracle@Think bdump]$ file alert_orcl.log
alert_orcl.log: ASCII English text

     文件alert_orcl.log是一个ASCII文本文件,来看看更多的示例:
     
[oracle@Think dbs]$ file spfileorcl.ora.z
spfileorcl.ora.z: bzip2 compressed data, block size = 900k

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

[oracle@Think dbs]$ file -z spfileorcl.ora.z
spfileorcl.ora.z: POSIX tar archive (bzip2 compressed data, block size = 900k)

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

[root@Think Desktop]# file a_softlink 
a_softlink: symbolic link to `a'

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

[root@Think Desktop]# file -L a_softlink 
a_softlink: ASCII text

          该示例清楚表明该文件的类型是文本类型
          
          
          适用于Oracle用户的技巧
              
          假设您要在用户转储目标目录中搜索某个跟踪文件,但不知道该文件是否位于其他目录并只以一个符号链接形式存在
          或某个人是否压缩了该文件(甚至对该文件进行了重命名),反正有一点您是知道的:
          该文件肯定是一个ascii文件,下面演示了如何执行操作:
          file -Lz * | grep ASCII | cut -d":"-f1 | xargs ls -ltr
          该命令将检查ascii文件(即使他们经过了压缩)并按时间顺序将其列出
          
          
       ⑷ 比较文件之diff
       
          如何判断两个文件是否相同?方法有多种,每种方法都有其自身的优点
          
          diff 最简单的命令是diff,用于显示两个文件之间的差别。以下是两个文件的内容:

[root@Think Desktop]# cat b
My name is Think
hello world
[root@Think Desktop]# cat c
Your name is Think
hello world

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

[root@Think Desktop]# diff b c
1c1
< My name is Think
---
> Your name is Think

          在以上的输出中,第一列中的"<"表示改行位于上面最先提到的文件(即b)中
          第一列中的">"表示该行位于第二个文件(即c)中
          输出第一行中的字符1c1显示为了让b来和c相同,b中的第一行要修改,修改的行号参考c中第一行
          
          另一个选项-y显示了相同的输出,只不过输出是并排显示:

[root@Think Desktop]# diff -y b c -W 120
My name is Think                                           |    Your name is Think
hello world                                                     hello world

          -W是可选的;它仅指示该命令使用宽度为120个字符的屏幕输出,这对于包含长行的文件很有用
          如果只希望了解文件是否不同,而不必知道如何不同,则可以使用-q选项

[root@Think Desktop]# diff -q b c
Files b and c differ

[root@Think Desktop]# diff b d
[root@Think Desktop]# 

          由于文件b d相同,因此没有输出
          
          如果要编写shell脚本,则采用以下方式生成可以分析的输出可能比较有用。-u选项可以执行该操作:

[root@Think Desktop]# diff -u b c
--- b   2013-02-07 17:23:54.000000000 +0800
+++ c   2013-02-07 17:24:32.000000000 +0800
@@ -1,2 +1,2 @@
-My name is Think
+Your name is Think
 hello world

          以上的输出显示了2个文件的内容,但并未显示重复内容,第一列中的+和-指示文件中的行
          第一列中的任何字符均未指示这两个文件中同时存在的内容
          该命令可以识别空格,如果要忽略空格,请使用-b选项,使用-B选项忽略空白行。最后使用-i忽略大小写
          
          diff还可以应用于目录:diff dir1 dir2
          
          选项-r将采用递归方式进入每个子目录,以比较文件并报告同名文件之间的差别
          
          
          适用于Oracle用户的技巧
          
          diff的一种常见用法是区分不同的init.ora文件。最为一种最佳实践,我在更改前通常对文件进行复制并重命名
          例如将initorcl.ora复制并重命名为initorcl.ora.bak,文件所有版本之间的一个简单的diff就可以快速
          指出哪些内容发生更改以及更改的时间
          
          这是一个非常强大的用于管理Oracle根目录的命令。最为最佳实践,我在应用补丁时,从不更新Oracle根目录
          例如,假设当前的Oracle版本为10.2.0.1。ORACLE_HOME可能为/u01/app/oracle/product/10.2/db_1
          当需要将它更新为10.2.0.2时,我不会对此Oracle根目录打补丁。相反,我将在/u01/app/oracle/product/10.2/db_2
          在这个目录上启动一个全新的安装,然后对该根目录打补丁。
          准备就绪后,我使用以下命令:

# sqlplus / as sysdba
SQL> shutdown immediate
SQL> exit
# export ORACLE_HOME=/u01/app/oracle/product/10.2/db2
# export PATH=$ORACLE_HOME/bin:$PATH
# sqlplus / as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/catalog

...
等等。
     

          该方法的目的是不破坏原始的Oracle根目录,因此我可以在出现问题时轻松进行恢复
          这还意味着数据库关闭并再次启动,而且瞬间即可完成
          如果我将补丁直接安装到Oracle根目录上,则必须长时间(补丁应用的整个持续时间)关闭数据库
          此外,如果补丁应用由于某种原因出现故障,则不必清理Oracle根目录
          
          那么既然多了个Oracle根目录,那如何查看内容发生了更改?方法其实很简单,我可以如下命令:
          
          diff -r /u01/app/oracle/product/10.2/db_1 /u01/app/oracle/product/10.2/db_2 | grep -v Common
          
          该命令显示了两个Oracle根目录之间的差别,以及同名文件之间的差别
          某些重要的文件(如tnsnames.ora,listener.ora以及sqlnet.ora)不会有太大的差别
          但如果差别很大,那么我就需要知道差别的原因
          
          
       ⑸ 比较文件之cmp
          
          cmp类似于diff:

[root@Think Desktop]# cmp b c
b c differ: byte 1, line 1

          只要遇到差别就会返回输出。可以使用此输出标识文件在何处可能存在差别
          与diff一样,cmp有很多选项,其中最重要的一项是-s,它只返回一个代码:
          ● 如果文件相同则返回0
          ● 如果文件不同则返回1
          ● 如果无法进行比较,则返回某个非0数字
          例如:

[root@Think Desktop]# cmp -s b c
[root@Think Desktop]# echo $?
1

          特殊变量$?指示返回代码来自上次执行的命令
          
          cmp的这个属性对于shell脚本非常有用
          因为在shell脚本中您只希望检查2个文件是否存在差别,而不必检查差别是什么
          该命令的另一重要的用途是比较二进制文件,而diff对于比较二进制文件可能并不可靠
          
          
          适用于Oracle用户的技巧
          
          回顾一下上面所提到,当您重新链接Oracle可执行文件时,旧版本在被覆盖之前将一直保留
          因此,在重新链接时,可执行文件sqlplus重命名为sqlplus0,并且新编译的sqlplus置于$ORACLE_HOME/bin中
          那么如何确定刚刚创建的sqlplus存在差别?只需使用以下命令:

# cmp sqlplus sqlplusO
sqlplus sqlplusO differ:byte 657, line 7

          如果检查大小:

# ls -l sqlplus*
-rwxr-x--x    1 oracle   dba          8851 Aug  4 05:15 sqlplus
-rwxr-x--x    1 oracle   dba          8851 Nov  2  2005 sqlplusO

          即使这两个示例中的大小完全相同,cmp也可以证明这两个程序存在差别
          
          
       ⑹ 文件校验 
       
          md5sum 该命令将生成文件的32位MD5 hash值

[root@Think Desktop]# md5sum b
2f96b2388e690eaa463d2610954a9e05  b

          可以将两个具有相同校验和的文件视为相同
          而该命令的用途并不仅限于比较文件,它还可以提供一种机制来确保文件的完整性
          
          假设您有两个需要保护的重要文件,file1和file2.可以使用--check选项检查并确保文件未更改
          首先,为这些重要文件创建校验和文件,然后对其进行安全保存:
          
          md5sum file1 file2 > f1f2
          
          以后,当您要校验这些文件是否仍保持不变时,可执行如下操作:
          
          md5sum --check f1f2
          
          
          适用于Oracle用户的技巧
          
          md5sum是一个非常有用强大的用于安全性实施的命令
          您所管理的某些配置文件(如listener.ora)对于成功的Oracle基础架构非常重要,任何修改都可能导致停机
          不要相信别人所说的这些文件并未更改,使用md5校验和执行该命令
          创建一个校验和文件,并在每次执行计划的更改时重新创建该文件
          作为合规性的一部分,使用md5sum命令检查该文件
          如果某个人无意中更新了这些重要文件中的一个,您就可以立即捕获更改
          
          同样,您还可以为$ORACLE_HOME/bin中的所有可执行文件创建MD5校验和,并不断比较它们以捕获未授权的修改

作者:linwaterbin 发表于2013-2-7 23:28:21 原文链接
阅读:49 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>