和許多剛從 Linux 轉到 BSD 的人不一樣,我並無裝完 BSD 就順手安裝 bash,
由於以前除了打命令,我沒有用到額外的功能,bash 也好,csh 也罷,在我眼裏都是當作 shell 來用。
可是漸漸地,我發現 csh 真的挺好用,它小巧、簡單、開放,不須要額外依賴。 python
可能有人要拿腳本能力來做對比,好比bash腳本支持函數,csh不支持等。
對我來講,其實我從未像模像樣地寫過一個腳本,個人工做是 C++ 程序員。
從個人角度來看,
論腳本能力,其實bash、csh、zsh都比不上Python,
論兼容性,bash、csh、zsh都比不上sh,
論強大,bash、csh、zsh都比不上C/C++,甚至asm。
再看易學程度,bash、csh、zsh可能仍是要輸給Python。
綜上,腳本能力忽略不計。 程序員
好了,說了這麼多大不敬的話,咱們開始切入正題。 shell
全局配置文件 /etc/csh.cshrc
我的配置文件 ~/.cshrc或~/.tcshrc 數據庫
爲了方便,建議修改全局性的配置文件,這樣每一個帳號均可以享受便利。 vim
一般,咱們不設置按鍵綁定也能很好地工做,
可是對於遠程登陸,可能須要一些額外的配置。
好比,爲了不putty登陸後,Home、End、Delete等變成~,你須要以下配置: bash
bindkey '\e[1~' beginning-of-line # Home bindkey '\e[3~' delete-char # Delete bindkey '\e[4~' end-of-line # End bindkey "^W" backward-delete-word # Delete bindkey -k up history-search-backward # PageUp bindkey -k down history-search-forward # PageDown
設置一個漂亮使用的的提示符可讓工做變得更愉快高效。
如下是一個合理的配置方案: 網絡
if ( $?prompt ) then #若是$prompt變量還沒有設置,則作以下設置 if ( "$uid" == "0" ) then #判斷用戶的uid set prompt = "%U%n%u@%m [%l] %B%~%b # " #對於root,咱們顯示「#」號 else set prompt = "%U%n%u@%m [%l] %B%~%b % " #對於普通用戶,顯示「%」號。 endif endif
一種彩色的配置方案以下: app
set cr = "%{\e[31m%}" #開始紅色 set cg = "%{\e[32m%}" #開始綠色 set c0 = "%{\e[0m%}" #恢復爲默認色彩 # Set some variables for interactive shells if ( $?prompt ) then if ( "$uid" == "0" ) then set prompt = "%B%U%n%u@%m.$cr%l$c0%b %c2 %B%#%b " else set prompt = "%B%U%n%u@%m.$cg%l$c0%b %c2 %B%%%b " endif endif
顏色代碼:
1 for brighter colors
4 for underlined text
5 for flashing text
30 for black foreground
31 for red foreground
32 for green foreground
33 for yellow (or brown) foreground
34 for blue foreground
35 for purple foreground
36 for cyan foreground
37 for white (or gray) foreground
40 for black background
41 for red background
42 for green background
43 for yellow (or brown) background
44 for blue background
45 for purple background
46 for cyan background
47 for white (or gray) background
查看更多參數,及其做用:
man tcsh #查看man手冊 /%/ #搜索到「%/」開始的地方
你在抱怨 FreeBSD下的 ls 沒有顯示顏色, grep 出來的東西沒有高亮嗎? 那麼你須要以下的配置:
#讓 ls 鮮豔些 setenv LSCOLORS ExGxFxdxCxegedabagExEx setenv CLICOLOR yes #讓 grep 匹配到的字符高亮 setenv GREP_OPTIONS --color=auto
對於在KDE下使用fcitx的人,須要以下三行設置,
其實就是fcitx安裝完後所提示的內容,若是你夠細心的話。
setenv XMODIFIERS @im=fcitx setenv QT_IM_MODULE xim setenv GTK_IM_MODULE xim
嗯, ls 有顏色了,可是等等,爲什麼 tab 不能補全?
你須要以下配置:
set autolist
若要在補全時也將歷史記錄(即命令history的輸出)歸入參考範圍,能夠添加以下配置:
set autoexpand
而對與命令history自己,則提供瞭如下兩項配置:
set history = 100 set savehist = 10
第一項設置了歷史記錄暫存條數,默認爲100;第二項設置了退出當前Shell時會將多少條最新的暫存條數寫入~/.history,其取值顯然不能大於set history。
須要說明的是,在savehist的設置中,還可使用相似set savehist = (10 merge)的寫法;這裏merge表示保存時合併歷史記錄中的相同命令,合併後的序列號、時間則與其中最新者相同。
若是命令輸錯了,讓csh/tcsh 爲你糾正:
set correct = cmd
爲了在命令行啓動某個遊戲,或者kde程序,例如dolphin、kcalc,
你須要加兩個路徑到$path中去:
/usr/games /usr/local/kde4/bin/
set path = (/sbin /bin /usr/sbin /usr/local/bin /usr/games /usr/local/sbin /usr/bin $HOME/bin /usr/local/kde4/bin/)
重定向很強大,咱們有時候會運行諸如「date » b.txt」,「ls -l > files.txt」等命令。
然而若是一不當心,把「»」輸成「>」會形成什麼後果呢?
爲此,tcsh提供了noclobber這個選項:
set noclobber
有了它,悲劇就不會發生。若是「>」的目標文件已存在,tcsh會拒絕重定向。
是否遇到過「mv a b」,從而把有用的b文件覆蓋掉了?
爲此,咱們要讓mv和cp的行爲更謹慎:
alias mv 'mv -i' alias cp 'cp -i'
若是目標文件已存在,mv和cp會拒絕操做,除非使用參數「-f」。
rm這個命令自從誕生起,就一直是個危險的操做。
咱們可讓rm更溫和:
alias rm 'rm -i'
這樣rm以前,會要求再次確認。
前面,咱們在黑魔法防護術中已經初步見識了alias。
alias不只能夠避免危險操做,還能夠簡化命令,自創命令。
除非極短,不然良好的alias命名,應當以某個統一的單詞或字母開頭,
例以下面即將展現的reload/edit系列、update系列、show系列等。
先展現最基本的alias,並逐條解釋。
alias .. 'cd ..' #兩點便可回到上級目錄 alias - 'cd -' #一槓返回上次的目錄 alias q 'exit' #退出登陸 alias rm 'rm -i' #誤刪防護 alias del 'rm -r' #刪除整個目錄 alias mv 'mv -i' #覆蓋防護 alias cp 'cp -i' #覆蓋防護 alias ls 'ls -I' #root狀態下,默認不顯示隱藏文件(.*)。BSD的ls很特殊,root默認顯示全部文件。 alias la 'ls -a' #顯示全部文件 alias ll 'ls -h -l' #顯示文件權限和大小(以合理的單位) alias lr 'ls -R' #遞歸顯示目錄 alias dh 'df -h -a -T' #以合適的單位顯示全部磁盤的剩餘空間,以及文件系統類型(如ufs、devfs、procfs)。 alias ds 'du -sh' #以合適的單位顯示查看每一個文件/文件夾的大小
find/wc系列。快速查找當前目錄下的全部c/cxx/python源碼文件。結合wc能夠統計行數。
alias find-c 'find . -name "*.h" -o -name "*.c"' alias find-x 'find . -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.cxx"' alias find-py 'find . -name ".py"' alias wc-c 'find . -name "*.h" -o -name "*.c" | xargs wc | sort -k 4' alias wc-x 'find . -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.cxx" | xargs wc | sort -k 4' alias wc-py 'find . -name ".py" | xargs wc | sort -k 4'
reload/edit系列。實現快速修改,載入配置文件。
alias reload-rc.conf 'sh /etc/rc' alias reload-cshrc 'unalias * && source /etc/csh.cshrc' alias edit-xorg.conf 'vim /etc/xorg.conf' alias edit-csh.cshrc 'vim /etc/csh.cshrc' alias edit-make.conf 'vim /etc/make.conf' alias edit-kern.conf 'vim /etc/kernconf/thinkpad' alias edit-rc.conf 'vim /etc/rc.conf' alias edit-vimrc 'vim /usr/local/share/vim/vimrc'
set系列。快速設置locale。
alias setlocale-zhcn 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8' alias setlocale-c 'setenv LC_ALL C'
startx專用。
保持命令行下爲英文locale(避免date等命令出現亂碼),而讓x環境爲中文,適合手動startx而不是kdm的人。
alias sx 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8 && startx && setenv LC_ALL C'
make系列。快速編譯kernel/world。
alias make-world 'cd /usr/src && make buildworld && cd -' alias make-kernel 'cd /usr/src && make kernel KERNCONF=thinkpad && cd -' alias make-installworld 'cd /usr/src && make installworld && make delete-old && cd -'
show系列。查看狀態或某些信息。
alias show-ifstat 'systat -ifstat' #查看網絡接口的數據流量 alias show-geom 'gstat' #查看I/O狀態 alias show-thermal 'sysctl dev.acpi_ibm.0.thermal' #查看ThinkPad筆記本的各部分溫度 alias show-cpufreq 'sysctl dev.cpu.0.freq' #查看當前cpu頻率 alias show-cpulevels 'sysctl dev.cpu.0.freq_levels' #查看可用的cpu頻率 alias show-battery 'sysctl hw.acpi.battery.life && sysctl hw.acpi.battery.time' #查看電力 alias show-smartctl 'smartctl -a /dev/ad4' #須要安裝smartmontools,查看磁盤smart參數 alias show-alldep 'make all-depends-list' #須要在ports的安裝目錄下執行,顯示全部依賴 alias show-dep 'portmaster --show-work ./ | sort' #同上,且須要安裝portmaster,只顯示還沒有安裝的依賴 alias show-ver 'pkg_version -v' #查看是否有軟件可更新
update系列。顧名思義,更新嘛。
alias update-locatedb '/usr/libexec/locate.updatedb' #更新locate數據庫 alias update-kernsrc 'csup -L 2 /etc/supfiles/stable-supfile' #同步kernel tree alias update-ports 'portsnap fetch update' #同步ports tree alias update-apps 'portmaster -a --force-config' #須要安裝portmaster,更新全部軟件,提示配置選項
雜項,均須要安裝第三方軟件才能用。
alias lt 'tree -N -C' #須要安裝tree。樹狀顯示目錄,-N能夠保證中文顯示,-C使用彩色 alias l3 'tree -N -C -L 3' #目錄最多遞歸三級 alias l4 'tree -N -C -L 4' #四級 alias l5 'tree -N -C -L 5' #五級 alias l6 'tree -N -C -L 6' #六級 alias v 'vim' #不用說,我懶 alias m 'mocp' #控制檯下的cs架構播放器 alias getdir 'wget -c -r -np -k' #遞歸下載目錄 alias ssh-home 'ssh raphael.vicp.cc -l root' #用root帳號登陸,結合key能夠免輸密碼 alias ftp-home 'ftp ftp://syh:syh@raphael.vicp.cc' #BSD自帶的ftp,免輸帳號密碼。主機已被電信和工信部和諧,勿再試 alias lft-phome 'lftp raphael.vicp.cc -u syh,syh' #lftp的免輸帳號密碼。 alias scons 'scons -Q -j 4' #構建工具,默認4個線程進行 alias valgrind-checkmem 'valgrind --tool=memcheck --leak-check=full' #檢查內存泄漏
最好的教材莫過於man手冊,真的什麼都有了。
man tcsh