- 系里給的服務(wù)器雖然配置很好器罐,但是因為沒有root權(quán)限導(dǎo)致很多工具都要手動安裝魏颓。像Java褂傀、Python之類的常用編譯環(huán)境我可以理直氣壯地發(fā)郵件讓管理員幫忙裝榄鉴,但是zsh這種純屬自己瞎折騰的環(huán)境就不得不靠自己了... 這里記錄一下安裝zsh過程中的各種坑。
1. 安裝ZSH
- 參考攻略
不使用root權(quán)限安裝zsh和oh-my-zsh
源碼安裝ncurses-devel
Building zsh without admin priv: No terminal handling library found
zsh與scp的沖突問題
-
安裝思路
- 沒有sudo權(quán)限意味著無法在/usr/下各個文件夾中創(chuàng)建文件瘤缩,所以只能安裝到自己的home目錄下喇完。
- 由于沒有apt-get、yum等各種管理工具剥啤,碰到依賴問題我們都必須一個個手動解決锦溪。環(huán)境變量也得自己添加。
- 同時因為權(quán)限不足府怯,無法修改/etc/passwd文件刻诊,也就無法修改自己登錄的默認shell了。我們采取登錄后自動跳轉(zhuǎn)zsh的方法來解決這個問題牺丙。
-
注意事項
- zsh與scp不兼容则涯。因此需要想辦法繞開這個問題(后文有解決辦法)
- zsh會強行解釋命令中的通配符(如*等字符)复局,且解釋失敗會報錯并拒絕執(zhí)行命令。這在一些場合非常令人惱火粟判,比如執(zhí)行命令
hdfs dfs -cat output/*
時亿昏,字符*
應(yīng)該交給hdfs
系統(tǒng)來處理,用來匹配hdfs
文件系統(tǒng)中的文件档礁,而不是由zsh進行解析角钩。解決方法為在命令的兩端加上雙引號,即變?yōu)?code>"hdfs dfs -cat output/*"; 或者一勞永逸呻澜,往~/.zshrc
中加入setopt no_nomatch
递礼,這會使得zsh在解釋失敗后不報告錯誤,繼續(xù)執(zhí)行命令羹幸。
開始安裝
# 創(chuàng)建zsh的安裝位置脊髓。這個位置是自定義的,只要是在自己的home目錄下即可栅受。版本號最好跟下載下來的zsh版本對應(yīng)将硝,不然會產(chǎn)生混淆。
cd ~
mkdir Applications
mkdir Applications/zsh-5.7.1
# 下載源碼并把壓縮包命名為zsh.tar.xz
wget -O zsh.tar.xz https://sourceforge.net/projects/zsh/files/latest/download
# 解壓屏镊,這里下載下來的是xz格式袋哼,要先用xz解壓一遍,再用tar解壓闸衫。
xz -d zsh.tar.xz
tar -xf zsh.tar
cd zsh-5.7.1 # 注意這個版本號要根據(jù)自己的實際情況來
# 配置與編譯。--prefix選項指定安裝目錄
./configure --prefix=$HOME/Applications/zsh-5.7.1
make
make install
配置zsh環(huán)境
vim ~/.bashrc
# 在.bashrc文件中加入以下命令
export PATH=$HOME/Applications/zsh-5.7.1/bin:$PATH
# 保存并退出vim后诽嘉,導(dǎo)入.bashrc配置
source ~/.bashrc
- 配置好zsh的環(huán)境變量后蔚出,就可以使用
exec zsh
命令來切換到zsh了。接下來安裝oh-my-zsh, 只需要以下命令即可:
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
將zsh設(shè)置為默認shell
- 前面提到虫腋,沒有sudo權(quán)限便無法更改
/etc/passwd
文件骄酗,也就無法更改默認的登錄shell了。同樣chsh
命令也無法使用悦冀。這里我們通過修改.bash_profile
來自動切換到zsh
. 將以下命令加到~/.bash_profile
中:
[ -f $HOME/Applications/zsh-5.7.1/bin/zsh ] && exec $HOME/Applications/zsh-5.7.1/bin/zsh -l
- 注意zsh與scp不兼容趋翻,所以不要把該命令寫到
.bashrc
中。因為當我們使用scp命令從本地連接該Linux服務(wù)器時盒蟆,系統(tǒng)會自動執(zhí)行.bashrc
(而不會執(zhí)行.bash_profile
)踏烙,如果.bashrc
中有切換到zsh的命令,則系統(tǒng)的shell會被切換到zsh, 從而與scp產(chǎn)生兼容的問題历等。
.bash_profile
只有當交互式登錄shell時(如系統(tǒng)啟動讨惩、遠程登錄)才會被讀取并執(zhí)行,而.bashrc
在交互式登錄與非交互登錄(如使用scp從本地連接到該Linux服務(wù)器)時都會被讀取且執(zhí)行寒屯。
遇到的問題
- 運行
./configure
命令時可能會遇到無法找到ncurses-devel
的問題荐捻。如下:
ncurses-devel - 這時我們需要手動安裝ncurses-devel.
- 下載地址為http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
- 需要注意的是在編譯ncurses-devel之前需要設(shè)置一些編譯選項
# 打開.bashrc
vim ~/.bashrc
# 在.bashrc中加入以下內(nèi)容
export CXXFLAGS=" -fPIC"
export CFLAGS=" -fPIC"
# 保存退出后黍少,用source命令使剛才的改動生效
source ~/.bashrc
- 安裝ncurses-devel
# 下載
cd ~
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz
tar -xf ncurses-6.1.tar.gz
cd ncurses-6.1
mkdir Applications/ncurses-6.1
./configure --prefix=$HOME/Applications/ncurses-6.1 --with-shared
make
make install
- 安裝好了之后,還需要配置一些環(huán)境變量
vim ~/.bashrc
# 在.bashrc中加入以下命令.
# 其中環(huán)境變量$NCURSES_HOME的設(shè)置不是必需的处面,這里只是為了引用方便而加入
export NCURSES_HOME=$HOME/Applications/ncurses-6.1
export PATH=$NCURSES_HOME/bin:$PATH
export LD_LIBRARY_PATH=$NCURSES_HOME/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I$NCURSES_HOME/include" LDFLAGS="-L$NCURSES_HOME/lib"
# 保存并退出vim厂置,然后加載.bashrc
source ~/.bashrc
- 這時,再繼續(xù)運行以下命令來安裝zsh
cd ~/zsh-5.7.1
./configure --prefix=$HOME/Applications/zsh-5.7.1
make
make install