【Shell】【Tips】Linux的.bash_profile和.bashrc與子Shell的關係
毫無疑問,.bash_profile檔案是Linux預設Bash Shell的配置檔案。
1.為了提高DBA維護資料庫的效率,在這個檔案中新增一些個性化的配置是一個非常好的習慣,舉幾個我常用的例子。
1)為了快速動態連續的到alert警告檔案的最後200行內容,可以在.bash_profile檔案中新增如下的同名,這樣就可以簡單的在Shell裡輸入“alert”得到及時的alert資訊了。
alias alert='tail -200f $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log'
2)為了快速使用vi編輯器編輯網路配置檔案tnsnames.ora,可以在.bash_profile檔案中新增如下的同名,使用方法同上。
alias tnsnames='vi $ORACLE_HOME/network/admin/tnsnames.ora'
3)使用vi編輯習慣使用曾經使用過的命令。
set -o vi
這個配置檔案可以根據自己的操作習慣個性化定製,因人而異,不過宜少不宜多,在設定之後一定要進行測試,防止出現不該有的副作用,這一點我是吃過虧的。
吃虧經歷在此,請勿效尤:《【故障處理】因GREP“花哨”功能導致ORA-12157錯誤的排查過程》http://space.itpub.net/519536/viewspace-613043
2.對於配置檔案的修改是在下一次登陸時生效的,如果想要修改的配置檔案立即生效,有如下幾種方法(效果相同)
ora10g@Tdb /home/oracle$ source .bash_profile
ora10g@Tdb /home/oracle$ . ./.bash_profile
ora10g@Tdb /home/oracle$ . .bash_profile
ora10g@Tdb /home/oracle$ . ~/.bash_profile
3.這個.bashrc檔案是做什麼用的呢?
功能:在啟用子Shell的時候系統讀取配置檔案時.bashrc這個檔案,而不是.bash_profile。
關於子Shell這個概念我舉一個很有趣的例子,這個例子也包含一個我遇到的在運維中操作習慣上一個小問題。
我習慣在.bash_profile檔案中新增“set -o vi”一行,啟用vi編輯習慣編輯並重用曾經使用過的命令。
當我在Oracle的sqlplus命令列介面裡想要暫時退出sqlplus執行一個Shell命令時,我習慣使用“!”或“host”臨時退出到 Shell介面,注意,這是我們進入到的不是登入sqlplus之前的Shell環境,而是一個新的子Shell環境,透過下面的操作過程您就知道確實是不同的Shell環境。
1)先使用“w”命令確定一下只有我一個人登陸在系統上
ora10g@Tdb /home/oracle$ w
17:20:37 up 11 days, 19:16, 1 user, load average: 0.02, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
oracle pts/1 10.142.8.207 16:49 0.00s 0.20s 0.00s w
2)使用“$$”這個特殊變數得到當前的shell程式號,這時可以使用“ps”命令確認目前的bash程式資訊,這兩個方法得到的資訊是一致的,這裡都會得到當前的Shell程式號是25431
ora10g@Tdb /home/oracle$ echo $$
25431
ora10g@Tdb /home/oracle$ ps -ef | grep bash | grep -v grep
oracle 25431 25430 0 16:49 pts/1 00:00:00 -bash
3)進入到sqlplus命令列介面
ora10g@Tdb /home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Sep 2 17:18:53 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sys@ora10g>
4)在sqlplus裡使用“!”或“host”臨時進入到Shell介面,再檢視一下這時的Shell程式號資訊,可以得到不同於上面25431的shell程式號26646
sys@ora10g> !
ora10g@Tdb /home/oracle$ echo $$
26646
5)因為只有我一個人登陸到這系統中,所以可以透過下面的方法同時得到兩個shell的程式資訊,一個是25431,另外一個是26646
ora10g@Tdb /home/oracle$ ps -ef | grep bash | grep -v grep
oracle 25431 25430 0 16:49 pts/1 00:00:00 -bash
oracle 26646 26643 0 17:18 pts/1 00:00:00 /bin/bash
其實關於模擬子Shell還有一個更簡單的方法,就是在Shell介面裡直接鍵入“sh”,就會啟用一個全新的子Shell。我這裡舉得是一個和Oracle資料庫有關的一個真例項子,因人而異吧。
關於子Shell的概念就談這些,下面我以遇到的一個操作習慣類的小問題為例,談一下子Shell不會繼承.bash_profile配置檔案的事實。
4.【解決一個小問題】
我遇到的小問題是:在進入到sqlplus之前我可以使用vi編輯習慣(按Esc然後使用k,j,h,l等鍵來操作歷史命令)來檢索和修改曾經使用過的命令,然而在我以“!”或“host”方式退出到Shell介面後這種習慣不復存在了,不爽哉。原因就在於當進入到子shell後,系統會自動重新讀取.bashrc配置檔案,而不是我們曾經新增了“set -o vi”的.bash_profile配置檔案,因為.bashrc檔案不曾設定過這個操作習慣,所以無法使用這個功能。
到此,解決這個小問題的方法就很簡單了:
方法一:如果想要臨時解決,當然就是在子Shell中直接鍵入“set -o vi”啟用vi編輯習慣,如果再進入另外一個子Shell,還得重新進行設定
方法二:在.bashrc檔案中新增一行“set -o vi”,使之在每次進入到子Shell後都永久生效
-- The End --
1.為了提高DBA維護資料庫的效率,在這個檔案中新增一些個性化的配置是一個非常好的習慣,舉幾個我常用的例子。
1)為了快速動態連續的到alert警告檔案的最後200行內容,可以在.bash_profile檔案中新增如下的同名,這樣就可以簡單的在Shell裡輸入“alert”得到及時的alert資訊了。
alias alert='tail -200f $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log'
2)為了快速使用vi編輯器編輯網路配置檔案tnsnames.ora,可以在.bash_profile檔案中新增如下的同名,使用方法同上。
alias tnsnames='vi $ORACLE_HOME/network/admin/tnsnames.ora'
3)使用vi編輯習慣使用曾經使用過的命令。
set -o vi
這個配置檔案可以根據自己的操作習慣個性化定製,因人而異,不過宜少不宜多,在設定之後一定要進行測試,防止出現不該有的副作用,這一點我是吃過虧的。
吃虧經歷在此,請勿效尤:《【故障處理】因GREP“花哨”功能導致ORA-12157錯誤的排查過程》http://space.itpub.net/519536/viewspace-613043
2.對於配置檔案的修改是在下一次登陸時生效的,如果想要修改的配置檔案立即生效,有如下幾種方法(效果相同)
ora10g@Tdb /home/oracle$ source .bash_profile
ora10g@Tdb /home/oracle$ . ./.bash_profile
ora10g@Tdb /home/oracle$ . .bash_profile
ora10g@Tdb /home/oracle$ . ~/.bash_profile
3.這個.bashrc檔案是做什麼用的呢?
功能:在啟用子Shell的時候系統讀取配置檔案時.bashrc這個檔案,而不是.bash_profile。
關於子Shell這個概念我舉一個很有趣的例子,這個例子也包含一個我遇到的在運維中操作習慣上一個小問題。
我習慣在.bash_profile檔案中新增“set -o vi”一行,啟用vi編輯習慣編輯並重用曾經使用過的命令。
當我在Oracle的sqlplus命令列介面裡想要暫時退出sqlplus執行一個Shell命令時,我習慣使用“!”或“host”臨時退出到 Shell介面,注意,這是我們進入到的不是登入sqlplus之前的Shell環境,而是一個新的子Shell環境,透過下面的操作過程您就知道確實是不同的Shell環境。
1)先使用“w”命令確定一下只有我一個人登陸在系統上
ora10g@Tdb /home/oracle$ w
17:20:37 up 11 days, 19:16, 1 user, load average: 0.02, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
oracle pts/1 10.142.8.207 16:49 0.00s 0.20s 0.00s w
2)使用“$$”這個特殊變數得到當前的shell程式號,這時可以使用“ps”命令確認目前的bash程式資訊,這兩個方法得到的資訊是一致的,這裡都會得到當前的Shell程式號是25431
ora10g@Tdb /home/oracle$ echo $$
25431
ora10g@Tdb /home/oracle$ ps -ef | grep bash | grep -v grep
oracle 25431 25430 0 16:49 pts/1 00:00:00 -bash
3)進入到sqlplus命令列介面
ora10g@Tdb /home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Sep 2 17:18:53 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sys@ora10g>
4)在sqlplus裡使用“!”或“host”臨時進入到Shell介面,再檢視一下這時的Shell程式號資訊,可以得到不同於上面25431的shell程式號26646
sys@ora10g> !
ora10g@Tdb /home/oracle$ echo $$
26646
5)因為只有我一個人登陸到這系統中,所以可以透過下面的方法同時得到兩個shell的程式資訊,一個是25431,另外一個是26646
ora10g@Tdb /home/oracle$ ps -ef | grep bash | grep -v grep
oracle 25431 25430 0 16:49 pts/1 00:00:00 -bash
oracle 26646 26643 0 17:18 pts/1 00:00:00 /bin/bash
其實關於模擬子Shell還有一個更簡單的方法,就是在Shell介面裡直接鍵入“sh”,就會啟用一個全新的子Shell。我這裡舉得是一個和Oracle資料庫有關的一個真例項子,因人而異吧。
關於子Shell的概念就談這些,下面我以遇到的一個操作習慣類的小問題為例,談一下子Shell不會繼承.bash_profile配置檔案的事實。
4.【解決一個小問題】
我遇到的小問題是:在進入到sqlplus之前我可以使用vi編輯習慣(按Esc然後使用k,j,h,l等鍵來操作歷史命令)來檢索和修改曾經使用過的命令,然而在我以“!”或“host”方式退出到Shell介面後這種習慣不復存在了,不爽哉。原因就在於當進入到子shell後,系統會自動重新讀取.bashrc配置檔案,而不是我們曾經新增了“set -o vi”的.bash_profile配置檔案,因為.bashrc檔案不曾設定過這個操作習慣,所以無法使用這個功能。
到此,解決這個小問題的方法就很簡單了:
方法一:如果想要臨時解決,當然就是在子Shell中直接鍵入“set -o vi”啟用vi編輯習慣,如果再進入另外一個子Shell,還得重新進行設定
方法二:在.bashrc檔案中新增一行“set -o vi”,使之在每次進入到子Shell後都永久生效
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-613812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux的.bash_profile和.bashrc與子Shell的關係Linux
- .bash_profile和.bashrc等等的區別
- Linux Shell檔案之間的包含關係Linux
- .bash_profile和.bashrc的什麼區別(轉)
- bash shell tips
- Linux Shell程式設計(27)——子shellLinux程式設計
- Shell程式設計-11-子Shell和Shell巢狀程式設計巢狀
- Linux下環境變數配置方法梳理(.bash_profile和.bashrc的區別)Linux變數
- 透過shell分析表依賴的層級關係
- 通過shell分析表依賴的層級關係
- linux系統環境變數.bash_profile/bashrc檔案Linux變數
- 理解Linux Shell和基本Shell指令碼語言的小貼士Linux指令碼
- IF 的使用 for Linux ShellLinux
- 關於aix, linux下的shell環境AILinux
- 使用shell指令碼快速得到主備關係指令碼
- 什麼是shell?Linux常用的shell有哪些?Linux
- Linux Shell 之 我的第一個Shell程式Linux
- 理解Linux Shell和基本Shell指令碼語言的小貼士(一)Linux指令碼
- Linux中vim和shellLinux
- Linux shell 用法和技巧Linux
- Linux shell用法和技巧Linux
- linux shell 中 printf 與 echo的區別Linux
- GNU與Linux 的關係Linux
- [shell問答錄]:命令、程式、子shell...(轉)
- Linux的shell環境Linux
- linux shell的切換Linux
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 電子商務和CRM的關係
- Linux shell用法和技巧(轉)Linux
- Linux的bash shell與man檢視手冊Linux
- Linux ShellLinux
- Shell入門:掌握Linux,OS X,Unix的Shell環境Linux
- SCO、Linux下的shell五子棋小遊戲(轉)Linux遊戲
- Linux下Shell日期的格式Linux
- Linux下Shell的計時Linux
- Linux的Bash Shell詳解Linux
- Linux下的Shell簡介Linux
- linux常用的shell指令碼Linux指令碼