Linux的.bash_profile和.bashrc與子Shell的關係
毫無疑問,.bash_profile檔案是Linux預設Bash 的配置檔案。
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檔案是做什麼用的呢?
功能:在啟用的時候系統讀取配置檔案時.bashrc這個檔案,而不是.bash_profile。
關於子Shell這個概念我舉一個很有趣的例子,這個例子也包含一個我遇到的在運維中操作習慣上一個小問題。
我習慣在.bash_profile檔案中新增“set -o vi”一行,啟用vi編輯習慣編輯並重用曾經使用過的命令。
當我在的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 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/21864432/viewspace-623733/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Shell】【Tips】Linux的.bash_profile和.bashrc與子Shell的關係Linux
- .bash_profile和.bashrc等等的區別
- .bash_profile和.bashrc的什麼區別(轉)
- Linux下環境變數配置方法梳理(.bash_profile和.bashrc的區別)Linux變數
- linux系統環境變數.bash_profile/bashrc檔案Linux變數
- GNU與Linux 的關係Linux
- Linux Shell檔案之間的包含關係Linux
- 電子商務和CRM的關係
- ERP與電子商務的關係(轉)
- Linux系統環境變數檔案解析(etc/profile ,/etc/bashrc ,~/.bash_profile)Linux變數
- 與if的關係
- [全程建模]用例的子流和分析類的關係
- Linux socke server程式設計:父程式和子程式關係LinuxServer程式設計
- 什麼是Linux,Linux與UNIX的關係(轉)Linux
- Fedora Core 與 Red Hat Linux 的關係(轉)Linux
- 關聯關係與依賴關係的區別
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- 【Linux小知識】網址、域名和ip的關係與區別!Linux
- 電子支付與安全的關係及其經濟分析三(轉)
- 電子支付與安全的關係及其經濟分析二(轉)
- Scala與Java的關係Java
- Object與Class的關係Object
- sip與openser的關係
- act與zsh的關係
- 程式設計與雞和蛋的關係 (轉)程式設計
- JavaScript和Java的關係JavaScript
- 平等和效率的關係
- Linux Shell程式設計(27)——子shellLinux程式設計
- 行高與字型的關係
- create 與 store中的關係
- oracle datafile 與 object的關係OracleObject
- CQRS與OO思想的關係
- AIX aio與listener 的關係AI
- Socket與TCP/IP的關係TCP
- JRE 與 JVM 的關係JVM
- ERP 與 SAP的關係
- 圖片與向量的關係
- ASP.NET與.NET Framework和C#的關係ASP.NETFrameworkC#