⑴ 輕鬆更改所有者,組和許可權
下面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校正和,並不斷比較它們以捕獲未授權的修改