針對Oracle使用者的Linux進階命令詳解之檔案操作篇

來源:互聯網
上載者:User
        ⑴ 輕鬆更改所有者,組和許可權
          
          下面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總計 24drwx------ 7 oracle oinstall 4096 02-06 21:34 oracledrwx------ 3 oradev oinstall 4096 2012-07-15 oradevdrwx------ 4 think  think    4096 2012-07-23 think[root@bogon home]# chgrp --reference oracle think[root@bogon home]# ls -l總計 24drwx------ 7 oracle oinstall 4096 02-06 21:34 oracledrwx------ 3 oradev oinstall 4096 2012-07-15 oradevdrwx------ 4 think  oinstall 4096 2012-07-23 think

          適用於更改組的方法也同樣適用於所有者

[root@bogon home]# ls -l總計 24drwx------ 7 oracle oinstall 4096 02-06 21:34 oracledrwx------ 3 oradev oinstall 4096 2012-07-15 oradevdrwx------ 4 think  oinstall 4096 2012-07-23 think[root@bogon home]# chown --reference oracle think[root@bogon home]# ls -l總計 24drwx------ 7 oracle oinstall 4096 02-06 21:34 oracledrwx------ 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 fileDevice: 802h/2050d      Inode: 1557452     Links: 1Access: (6751/-rwsr-s--x)  Uid: (  501/  oracle)   Gid: (  502/oinstall)Access: 2013-02-07 10:55:28.000000000 +0800Modify: 2012-07-15 16:33:49.000000000 +0800Change: 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/ext3Block size: 4096       Fundamental block size: 4096Blocks: Total: 2480156    Free: 769982     Available: 641965Inodes: 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 fileDevice: 802h/2050d      Inode: 1565800     Links: 1Access: (0751/-rwxr-x--x)  Uid: (  501/  oracle)   Gid: (  502/oinstall)Access: 2013-02-07 10:14:38.000000000 +0800Modify: 2012-07-15 16:34:00.000000000 +0800Change: 2012-07-15 16:36:54.000000000 +0800  File: `sqlplusO'  Size: 0               Blocks: 8          IO Block: 4096   regular empty fileDevice: 802h/2050d      Inode: 1560598     Links: 1Access: (0755/-rwxr-xr-x)  Uid: (  501/  oracle)   Gid: (  502/oinstall)Access: 2012-07-15 16:27:10.000000000 +0800Modify: 2005-06-30 19:23:56.000000000 +0800Change: 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.logalert_orcl.log: ASCII English text     檔案alert_orcl.log是一個ASCII文字檔,來看看更多的樣本:     [oracle@Think dbs]$ file spfileorcl.ora.zspfileorcl.ora.z: bzip2 compressed data, block size = 900k


          該樣本指示檔案是壓縮檔,但如何知道檔案的壓縮類型?方法之一是將該檔案解壓縮並再次運行它
          但這實際上是幾乎不可能的,一種簡便的方法是使用參數-z:

[oracle@Think dbs]$ file -z spfileorcl.ora.zspfileorcl.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 bMy name is Thinkhello world[root@Think Desktop]# cat cYour name is Thinkhello world

          使用diff命令能夠瞭解這兩個檔案之間的差別,如下所示:

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

          在以上的輸出中,第一列中的"<"表示改行位於上面最先提到的檔案(即b)中
          第一列中的">"表示該行位於第二個檔案(即c)中
          輸出第一行中的字元1c1顯示為了讓b來和c相同,b中的第一行要修改,修改的行號參考c中第一行
          
          另一個選項-y顯示了相同的輸出,只不過輸出是並排顯示:

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

          -W是可選的;它僅指示該命令使用寬度為120個字元的螢幕輸出,這對於包含長行的檔案很有用
          如果只希望瞭解檔案是否不同,而不必知道如何不同,則可以使用-q選項

[root@Think Desktop]# diff -q b cFiles 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 sysdbaSQL> shutdown immediateSQL> exit# export ORACLE_HOME=/u01/app/oracle/product/10.2/db2# export PATH=$ORACLE_HOME/bin:$PATH# sqlplus / as sysdbaSQL> @$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 cb 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 sqlplusOsqlplus 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 b2f96b2388e690eaa463d2610954a9e05  b

          可以將兩個具有相同校正和的檔案視為相同
          而該命令的用途並不僅限於比較檔案,它還可以提供一種機制來確保檔案的完整性
          
          假設您有兩個需要保護的重要檔案,file1和file2.可以使用--check選項檢查並確保檔案未更改
          首先,為這些重要檔案建立校正和檔案,然後對其進行安全儲存:
          
          md5sum file1 file2 > f1f2
          
          以後,當您要校正這些檔案是否仍保持不變時,可執行如下操作:
          
          md5sum --check f1f2
          
          
          適用於Oracle使用者的技巧
          
          md5sum是一個非常有用強大的用於安全性實施的命令
          您所管理的某些設定檔(如listener.ora)對於成功的Oracle基礎架構非常重要,任何修改都可能導致停機
          不要相信別人所說的這些檔案並未更改,使用md5校正和執行該命令
          建立一個校正和檔案,並在每次執行計畫的更改時重新建立該檔案
          作為合規性的一部分,使用md5sum命令檢查該檔案
          如果某個人無意中更新了這些重要檔案中的一個,您就可以立即捕獲更改
          
          同樣,您還可以為$ORACLE_HOME/bin中的所有可執行檔建立MD5校正和,並不斷比較它們以捕獲未授權的修改

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.