bash(1)
要使bash 符合個人的口味,有几個文檔需要修改:
/etc/bashrc 存有整個系統的別名和功能;
/etc/profile 存有整個系統的環境參數和啟動程式;
$HOME/.bashrc 存有用戶的的別名和功能;
$HOME/.bash_profile 存有用戶的環境參數和啟動程式;
$HOME/.bash_logout 存有退出系統時的結束方式;
$HOME/.inputrc 存有主要綁定數值和其他位元數值;
下文將例舉對這些文檔的修改。首先,最重要的文檔是:/etc/profile。如以下几節中可以看到,一向以修改這個文檔的方式來設定Linux的各種功能。
# /etc/profile
# System wide environment and startup programs
# --整個系統環境和啟動程式
#
# Functions and aliases go in /etc/bashrc
# --/etc/bashhrc中的功能和別名
#
# This file sets the following features:
# --這個文檔設定下列功能:
#
# o path --路徑
# o prompts --提示符
# o a few environment variables --几個環境變數
# o colour ls --ls 的顏色
# o less behaviour --設定less的功能
# o keyboard settings --鍵盤設置
#
# Users can override these settings and/or add others in their
# $HOME/.bash_profile
# 用戶可在$HOME/.bash_profile中取消這些設定和(或)增加其他設定
# set a decent path
# 設定可行的路徑
echo $PATH | grep X11R6 > /dev/null
if [ $? = 1 ] ; then # add entries to the path
PATH="$PATH:/usr/X11R6/bin:$HOME/bin:."
fi
# notify the user: login or non-login shell. If login, the prompt is
# coloured in blue; otherwise in magenta. Root's prompt is red.
# 通知用戶:登錄(login)或不登錄(non-login)的外圍程序(shell)。
# 如果登錄,則提示符為藍色,否則為紫紅色。Root的提示符為紅色。
USER=`whoami`
if [ $LOGNAME = $USER ] ; then
COLOUR=44
else
COLOUR=45
fi
if [ $USER = 'root' ] ; then
COLOUR=41
fi
# put a real escape character instead of ^[
# 用真正的換碼字符代替^[
PS1='^[[$COLOUR;37;1m$HOSTNAME:^[[37;40;1m\w\$ '
PS2="Continue> "
# no core dumps, please
# 請勿轉儲內存信息
ulimit -c 0
# set umask
# 設定umask
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
umask 002
else
umask 022
fi
# a few variables
# 几項變數
USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
EDITOR=jed
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
HISTFILESIZE=1000
export PATH PS1 PS2 USER LOGNAME MAIL EDITOR HOSTNAME HISTSIZE HISTFILESIZE
# enable colour ls
# 設定ls的顏色
eval `dircolors /etc/DIR_COLORS -b`
export LS_OPTIONS='-F -s -T 0 --color=tty'
# customize less
# 設定less
LESS='-M-Q'
LESSEDIT="%E ?lt+%lt. %f"
LESSOPEN="| lesspipe.sh %s"
VISUAL=jed
LESSCHARSET=latin1
export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET
# customise the keyboard
# 設定鍵盤
/sbin/kbdrate -s -r 16 -d 500
for i in /etc/profile.d/*.sh ; do
if [ -x $i ]; then
. $i
fi
done
此處為 /etc/bashrc:
# /etc/bashrc # System wide functions and aliases # 整個系統的功能和別名 # # Environment stuff goes in /etc/profile # /etc/profile中的環境參數 # alias which="type -path" alias d="ls" alias dir="d"
此處為 .bashrc:
# $HOME/.bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# this is needed to notify the user that they are in non-login shell
# 需要以下設定,以便通知處於不登錄(non-login)外圍程序(shell)中的用戶
COLOUR=45
# put a real escape character instead of ^[
# 用真正的換碼字符代替^[
PS1='^[[$COLOUR;37m$USER:^[[37;40m\w\$ '
# aliases
# 別名
alias cp='cp -i'
alias l=less
alias lyx='lyx -width 900 -height 700'
alias mv='mv -i'
alias rm='rm -i'
alias x=startx
# A few useful functions
# 几個有用的功能
inst() # Install a .tar.gz archive in the current directory.
{ gzip -dc $1 | tar xvf - }
cz() # List the contents of a .zip archive.
{ unzip -l $* }
ctgz() # List the contents of a .tar.gz archive.
{
for file in $* ; do
gzip -dc ${file} | tar tf -
done
}
tgz() # Create a .tgz archive a la zip.
{
name=$1 ; tar -cvf $1 ; shift
tar -rf ${name} $*
gzip -S .tgz ${name}
}
此處為.bash_profile:
# $HOME/.bash_profile
# User specific environment and startup programs
# 用戶特定的環境參數和啟動程式
#
# This file contains user-defined settings that override
# those in /etc/profile
# 這個文檔中存有用戶自訂的設置,可取代/etc/profile 中的數值
#
# Get aliases and functions
# 設定別名和功能
#
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# re-get PS1 settings
# 重新設定PS1數值
if [ $USER = 'root' ] ; then
COLOUR=41
else
COLOUR=44
fi
# put a real escape character instead of ^[
# 用真正的換碼字符代替^[
PS1='^[[$COLOUR;37;1m$HOSTNAME:^[[37;40;1m\w\$ '
export PS1
此處為 .bash_logout:
# $HOME/.bash_logout clear
此處為 .inputrc:
# $HOME/.inputrc
# key bindings
# 主要綁定
"\e[1~": beginning-of-line
"\e[3~": delete-char
"\e[4~": end-of-line
# (F1 .. F5) are "\e[[A" ... "\e[[E"
# (F1 .. F5) 分別為 "\e[[A" ... "\e[[E"
"\e[[A": "info \C-m"
set bell-style visible # please don't beep
# --喇叭不發聲
set meta-flag On # allow 8-bit input (i.e, accented letters)
# --允許8-位元輸入(例如重音字符)譯註:用于歐洲
# 文字或GB碼及Big5碼)
set convert-meta Off # don't strip 8-bit characters
# 不取消8-位元字符
set output-meta On # display 8-bit characters correctly
# 正確顯示8-位元字符
set horizontal-scroll-mode On
set show-all-if-ambiguous On
設定下列參數使 backspace 和 delete 兩鍵在xterm 和其他X11應用中運作正常:
.xinitrc中添加:
usermodmap=$HOME/.Xmodmap
xmodmap $usermodmap
.Xmodmap中添加:
keycode 22 = BackSpace
keycode 107 = Delete
以上就設定了主控台的參數。
要修改xterm,則更改如下:
.Xdefaults中增添:
xterm*VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\
<Key>Delete: string(0x1b) string("[3~")\n\
<Key>Home: string(0x1b) string("[1~")\n\
<Key>End: string(0x1b) string("[4~")\n\
Ctrl<Key>Prior: string(0x1b) string("[40~")\n\
Ctrl<Key>Next: string(0x1b) string("[41~")
nxterm*VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\
<Key>Delete: string(0x1b) string("[3~")\n\
<Key>Home: string(0x1b) string("[1~")\n\
<Key>End: string(0x1b) string("[4~")\n\
Ctrl<Key>Prior: string(0x1b) string("[40~")\n\
Ctrl<Key>Next: string(0x1b) string("[41~")
在bash(1) 和 readline(3) 的man說明中有更多這方面的資料。
不要以為這些設定在每種應用中都可正常運作。例如,在xterm中運行joe,有些鍵位就不起作用;運行rxvt也有相同的問題。有人說,這是termcap的問題。
ls(1)
ls可顯示目錄,并用顏色提示不同種類的文檔。要使用這項功能,則在/etc/profile中增添以下內容:
eval `dircolors /etc/DIR_COLORS -b`
export LS_OPTIONS='-F -T 0 --color=tty'
這樣就設定了LS_COLORS的環境參數,其中存有/etc/DIR_COLORS中的顏色變數表。注意:這項設置對rxvt的有些版本無效,原因不明。不妨改用xterm中的一些其他特性。可能rxvt中仍有程序錯誤,以致有時不能運用設定的環境參數。
less(1)
利用這個優越的頁面調度程序不僅能瀏覽一般文字文檔,也能觀看壓縮的gzip文檔和以tar和zip格式儲存的檔案文檔,其設置如下:
.lesskey 置于home目錄內:
^[[A back-line
^[[B forw-line
^[[C right-scroll
^[[D left-scroll
^[OA back-line
^[OB forw-line
^[OC right-scroll
^[OD left-scroll
^[[6~ forw-scroll
^[[5~ back-scroll
^[[1~ goto-line
^[[4~ goto-end
^[[7~ goto-line
^[[8~ goto-end
然後運行指令lesskey。這會生成綁定鍵位的二進制文檔.less。
/usr/bin/lesspipe.sh的文檔:
#!/bin/sh
# This is a preprocessor for 'less'. It is used when this environment
# variable is set: LESSOPEN="|lesspipe.sh %s"
# 此為‘less’的預處理器。當環境參數定為LESSOPEN="|lesspipe.sh %s"
# 時,便起用這個預處理器。
#
#
lesspipe() {
case "$1" in
*.tar) tar tf $1 2>/dev/null ;; # View contents of .tar and .tgz files
# 閱讀.tar和.tgz檔的內容
*.tgz|*.tar.gz|*.tar.Z|*.tar.z) tar ztf $1 2>/dev/null ;;
*.Z|*.z|*.gz) gzip -dc $1 2>/dev/null ;; # View compressed files correctly
# 正確閱讀壓縮文檔
*.zip) unzip -l $1 2>/dev/null ;; # View archives
# 閱讀檔案文檔
*.arj) unarj -l $1 2>/dev/null ;;
*.rpm) rpm -q -p -i -l $1 2>/dev/null ;;
*.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1`
FILE=`echo $FILE | cut -d ' ' -f 2`
if [ "$FILE" = "troff" ]; then
groff -s -p -t -e -Tascii -mandoc $1
fi ;;
*) FILE=`file -L $1` ; # Check to see if binary
# 檢查是否為二進制文檔
FILE1=`echo $FILE | cut -d ' ' -f 2`
FILE2=`echo $FILE | cut -d ' ' -f 3`
if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \
-o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then
strings $1
fi ;;
esac
}
lesspipe $1
chmod 755 lesspipe.sh.
切記將其作為chmod 755 lesspipe.sh下的可執行檔。
/etc/profile中添加:
LESS="-M-Q" # long prompt, silent --長提示符、無聲
LESSEDIT="%E ?lt+%lt. %f" # edit top line --編輯首行
LESSOPEN="| lesspipe.sh %s" # filter --過濾器
VISUAL=jed # default editor---insert your favourite
# 默認編輯器---放入最喜歡的編輯器
LESSCHARSET=latin1 # display accented letters if needed
# 在需要時,顯示重音字符
export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET
此處設定變數LESSCHARSET是因為作者居住在義大利,想要使用ISO 8859/1字符集的緣故,因此美國人、日本人、俄羅斯人等其他各國人士最好不要作此設定。
emacs(1)
有些emacs 版本沒有預先設置顏色和語法標示。可在.emacs中增添:
(global-font-lock-mode t)
(setq font-lock-maximum-decoration t)
這只對X11有用。各位不妨從emacs文獻中探索符合各種需要的設定 -- 有時可能要耗費几個月的時間測試....
joe(1)
檢查/usr/bin/中的jmacs、 jstar、和jpico
是否symlink到joe,或是獨立的二進制程式;如果仍為後者,則不妨將其作出symlink,以節省硬盤空間。
~# cd /usr/bin
/usr/bin# ln -sf joe jmacs ; ln -sf joe jstar ; ln -sf joe jpico
然後只要把/usr/lib/joe/joerc作為.joerc抄到home目錄,再作出符合需要的修改。
jed
這是個頗為好用的編輯器:比emacs短小精悍,宜於設置,並且IMHO模擬其他編輯器也相當不錯。在作者工作的大學中有許多使用者都用jed模擬VMS系統的編輯器EDT。
設置文檔為.jedrc 和 /usr/lib/jed/lib/*;前者可從後者目錄中的jed.rc修改而得。
jed 正確使用一些鍵位,則編寫一個/usr/lib/jed/lib/defaults.sl 檔,內容只有一行:
() = evalfile("linux");
/usr/lib/jed/lib/linux.sl; 去除Info_Directory = "/usr/info";行前的注釋符號并在UCB_Mailer =; 後添加/bin/mail
jed 的參數使其模擬EDT (或其他編輯器)的工作不難:只須編輯.jedrc中的几行內容。
如果要用小鍵盤中的‘+’鍵刪字,而不只刪一個字母,則在.jedrc中() = evalfile("edt");行之後增添下列內容:
unsetkey("\eOl");
unsetkey("\eOP\eOl");
setkey("edt_wdel", "\eOl");
setkey("edt_uwdel", "\eOP\eOl");
EDT模擬中,要使xjed使用數字小鍵盤,則須在.Xmodmap中添加下列內容:
keycode 77 = KP_F1
keycode 112 = KP_F2
keycode 63 = KP_F3
keycode 82 = KP_F4
keycode 86 = KP_Separator
同時確定/etc/X11/XF86Config中有下列內容:
# ServerNumLock # must be commented out --必須取消前面的注釋符號
XkbDisable
這項設置適用于XFree3.2。除非使用標準的美國鍵位鍵盤,“XkbDisable“可能會有一些小問題。不妨自己找找有什麼問題。
.Xdefaults中增加以下內容可以更改xjed的顏色:
xjed*Geometry: 80x32+150+50
xjed*font: 10x20
xjed*background: midnight blue
在xjed.doc文檔中有更多這方面的資料。
如果電腦中裝有TeTeX,可作下列几項設定:
/usr/lib/texmf/texmf/tex/generic/config/language.dat,然後運行:
~# texconfig init ; texconfig hyphen
/usr/lib/texmf/texmf/tex/latex/下輸入文檔後才安裝LaTeX軟件,則應運行 texhash使TeTeX 認識新軟件。
dvips, 則須編輯/usr/lib/texmf/texmf/dvips/config/config.ps。注意:有關默認分辨率的參數也影響 xdvi的運行;如果每次運行時發現都要創造字體,則可改動 .Xdefault的內容如下:
XDvi*mfmode:
這應有所幫助。
目前Linux的內核幾乎都已編入了PPP + TCP/IP功能,設定了回送地址(loopback)和正確安裝了pppd軟件。那麼有兩種方式可使PPP正常運作:(a)手動設定;和(b)利用一個程式自動設定。首先,試試手動設定。
假定ISP的資料如下:
手動設置PPP聯網的方式為:
/usr/local/bin/ppp-on檔,將用于與ISP連接:
#!/bin/sh
# ppp-on: script to connect to an ISP --連接ISP的程式
INIT=ATX3 # or whatever your modem wants --或符合特定數據機啟動的設置
PHONE=1234567
/usr/sbin/pppd connect "/usr/sbin/chat '' $INIT OK ATDP$PHONE \
CONNECT '' " user John
然後運行chmod 755 /usr/local/bin/ppp-on使其成為可執行檔。如果ISP不使用PAP協議,則可用下列程式:
#!/bin/sh
# ppp-on: script to connect to an ISP ----連接ISP的程式
INIT=atx3 # or whatever your modem wants ----或符合特定數據機啟動的設置
PHONE=1234567
/usr/sbin/pppd connect "/usr/sbin/chat '' $INIT OK ATDT$PHONE \
CONNECT '' 'ogin' John 'word' _Loo%ny ''" /dev/modem 38400 \
modem defaultroute
/usr/local/bin/ppp-off用于結束PPP連接:
#!/bin/sh
# ppp-off --文檔名稱
DEVICE=ppp0
if [ -r /var/run/$DEVICE.pid ]; then
kill -INT `cat /var/run/$DEVICE.pid`
if [ ! "$?" = "0" ]; then
echo "removing stale $DEVICE pid file."
rm -f /var/run/$DEVICE.pid ; exit 1
fi
echo "$DEVICE link terminated" ; exit 0
fi
# link not active
echo "$DEVICE link is not active" ; exit 1
運行chmod 755 /usr/local/bin/ppp-off,使其成為可執行檔。
/etc/ppp/options:
# /etc/ppp/options --文檔名稱
/dev/modem
38400
lock
crtscts
modem
asyncmap 0
remotename www.supernet.edu
defaultroute
/etc/ppp/pap-secrets:
# /etc/ppp/pap-secrets --文檔名稱
# username remotehost secret
# 用戶姓名 遠程主機名稱 用戶密碼
John www.supernet.edu _Loo%ny
/etc/resolv.conf:
# /etc/resolv.conf --文檔名稱
search supernet.edu
nameserver 123.231.112.111
/etc/sendmail.cf。尋找以DS開始的一行,並更改如下:
DSmbox.supernet.edu
花了這麼大的力氣,如果運氣好,有這樣的設定就夠了。否則,那就準備開始翻看PPP-HOWTO吧。
以上就是手動設置。不過,現在有一套不錯的軟件,可免除這項苦差事:這套軟件稱為ezppp,可在下列網址找到:
http://www.serv.net/~cameron/ezppp/index.html 。
要從POP伺服器收取郵件,可使用POP用戶端程序,如fetchpop或 fetchmail等。如果ISP的PPP伺服器不支持LAST指令,則後者可能是唯一可用的方法。
設置這些用戶端程序的方法如下:
fetchpop:首次運行這個軟件時會要求提供一些資料。回答所有問題後,就設定了這個軟件。
fetchmail:參照以下範例 .fetchmailrc:
# $HOME/.fetchmailrc --文檔名稱
poll mbox.supernet.edu with protocol pop3;
user john there with password _Loo%ny is john here
mda "/usr/bin/procmail -f fetchmail"
最後一行並非必需。必須運行chmod 600 .fetchmailrc 設定此檔的使用權限,否則fetchmail會完全拒絕運行。
一旦X 視窗可以運行後(正確地設定了顯示卡等細緻工作),就可作出其他各色各樣的設置,完全取決于使用何種視窗管理程序。不過,歸根結底,只是編輯home目錄內的一個或几個ASCII文檔。至於視窗管理程序:
/etc/X11/fvwm/system.fvwmrc作為.fvwmrc拷貝到home目錄,看看內容并開始試驗。這個system.fvwmrc 實在簡單,對fvwm至不公平。
/etc/X11/fvwm95-2/fvwm2rc95作為.fvwm2rc95拷貝到home目錄,然後進行編輯。這個實例相當好用。
/etc/X11/TheNextLevel/.*拷貝到home目錄,仔細閱讀并試改內容。首先試試 .fvwm2rc.defines。
此外,一定要有適當的.xinitrc,例如:
#!/bin/sh
# $HOME/.xinitrc --文檔名稱
# set a few keys correctly --將几個鍵位設定正確
usermodmap=$HOME/.Xmodmap
xmodmap $usermodmap
xset s noblank # turn off the screen saver --停止屏幕保護程序
xset s 300 2 # screen saver start after 5 min --5分鐘後開始屏幕保護程序
xsetroot -solid "medium blue" &
# rxvt 節省內存,但有几個錯誤程序:
# - 不認home和end兩鍵;
# - backspace和delete兩鍵和在主控台時的作用不同;
# - 顏色不依照環境參數設定;
# - 與環境參數時有衝突;
# 因此,多數情況下,xterm比較好用。但rxvt在麥金塔機的一些顏色應用上顯示較好。
xterm -ls -bg black -fg white -sb -sl 500 -j -ls -fn 10x20 -fb 10x20bold \
-title "Color xterm" -geometry 80x25+150+0 &
fvwm95-2
依據經驗,代用g77的最好Fortran-to-C翻譯器是f2c和前端軟件yaf77。
yaf77可從
ftp://sunsite.unc.edu/pub/Linux/devel/languages/fortran/yaf77-1.4.tgz及其鏡象網址取得。
新用戶在首次登錄時,最好已有几個設置文檔可用。可將下列設置檔放在/etc/skel中:bashrc、bash_profile、bash_logout、inputrc、less、 xinitrc、fvwmrc、fvwm2rc95、Xmodmap、Xdefaults、jedrc、joerc、emacs。
(注意:由于排版的緣故,上面每個文檔前均未放置‘.’符號)
對.pinerc 無法進行充分設定;但至少要設定user-domain、smtp-server和nntp-server 的參數。