--- tags: linux-shell, bash --- # LinuxShell: Chapt02 Bash shell setup ## 1 Linux install bash ### 1.1 確認目前shell ```shell= echo $SHELL ``` ```shell= ls -sl /bin/sh ``` 檢查版本 ```shell= echo $BASH_VERISON ``` **NOTICE** ***Login Shell*** 是使用者登入時,系統自動指派給使用者的shell環境 這是在建立帳號時,adduser命令就會讀取/etc/adduser.conf的設定 並根據其中的設定選項DSEHLL來指派(通常是設定DSHELL=/bin/bash) 然後把設定值寫在/etc/passwd帳號列的第七個欄位中 比如以下 ```shell= ols3:x:1000:1000:OLS3,,,:/home/ols3:/bin/bash ``` ***System Shell*** 是主機在開機時或者伺服程式以其運作身份在執行時 所使用的shell環境 比如: ```shell= root:x:0:0:root:/root:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh ``` ### 1.2 自行編譯的Bash #### 1.2.1 下載 Source code ```shell= ftp://ftp.gnu.org/gnu/bash/ ftp://ftp.gnu.edu/pub/bash/ ``` 建立bashwork目錄 ```shell= mkdir bashwork cd basework wget ftp://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz ``` #### 1.2.2 下載修正檔 ```shell= wget ftp://ftp.gnu.org/gnu/bash/bash-4.4-patches/* rm -rf *.sig ``` 其中 *.sig為所以修正檔的簽章 #### 1.2.3 解壓縮 套用修正檔 ```shell= cd bashwork tar xvzf bash-4.4.tar.gz cd bash-4.4 ``` ```shell= patch -p0 < ../bash44-001 patch -p0 < ../bash44-002 ... patch -p0 < ../bash44-012 ``` #### 1.2.4 設定 ```shell= cd bashwork cd bash-4.4 ./configure ``` 預設安裝目錄為/usr/local/ 自行指定可以 ```shell= cd bashwork cd bash-4.4 ./configure --prefix=$HOME ``` #### 1.2.5 編譯 ```shell= cd bashwork;cd base-4.4; make ``` #### 1.2.6 測試 ```shell= cd bashwork;cd base-4.4 make tests ``` 確認版本 ```shell= ./bash echo $BASH_VERSION ``` #### 1.2.7 安裝 需要用root身份安裝 ```shell= su - ``` ```shell= cd bashwork;cd base-4.4; make install ``` ### 1.2.8 自動安裝 ```shell= https://shell.ols3.net/DL/shell-2017-v3/p-bash-auto.sh ``` 用法: ```shell= chmod +x p-bash-auto.sh ./p-bash-auto.sh ``` ### 1.3 切換新版的Bash shell 方法1: 切換身份為root,加入 bash執行路徑到/etc/shells ```shell= su - vi /etc/shells #新增 /usr/local/bin/bash ``` 方法2: 用指令echo的方式 ```shell= su - echo '/usr/local/bin/bash' >> /etc/shells ``` 方法3: 把前面兩行使用 su -c 方式 ```shell= su -c "echo '/usr/local/bin/bash' >> /etc/shells" ``` 方法4: ```shell= chsh -s /usr/local/bin/bash $帳號 ``` ## 2 FreeBSD install bash ### 2.1 使用package 安裝bash 新版FreeBSD(10/11): ```shell= pkg install bash ``` 舊版FreeBSD 需要先設定環境變數PACKAGEROOT ```shell= setenv PACKAGEROOT ftp://ftp.tw.freebsd.org ``` 在執行: ```shell= pkg_add -r bash ``` 這樣就可以把bash 安裝在 /usr/local/bin/bash ### 2.2 用ports tree安裝 bash 修改/etc/make.conf ```shell= MASTER_SITE_BACKUP?= \ ftp://ftp.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\ ftp://ftp2.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/\ ftp://ftp3.tw.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/ MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP} ``` 編譯安裝 bash ```shell= cd /usr/ports/shell/bash make install clean ``` 這樣就可以把bash 安裝在 /usr/local/bin/bash ### 2.3 切換使用 bash 執行chsh ```shell= # Changing user database information for ols3. Shell: /bin/ksh Full Name: ols3 Office Location: Office Phone: Home Phone: ``` 把/bin/ksh改為 /usr/local/bin/bash 或者執行以下指令: ```shell= chsh -s /usr/local/bin/bash ``` 重新登入主機後 bash當作login shell設定就會生效 ## 3 OpenBSD install bash ### 3.1 確認預設shell ```shell= $ echo $SHELL /bin/ksh ``` ### 3.2 使用package安裝bash 以下是以OpenBSD6.0 amd64版本為例 ```shell= export PKG_PATH=\ https://ftp.openbsd.org/pub/OpenBSD/6.0/packages/amd64/ ``` ```shell= # pkg_add bash ``` 結果會如下: ```shell= quirks-2.241 signed on 2016-07-26T16:56:10Z bash-4.3.46: ok ``` ### 3.3 使用 ports tree安裝bash ```shell= cd /usr/ports/shell/bash make install clean ``` 執行which ```shell= # which bash /usr/local/bin/bash ``` /etc/shells會自動加入bash ```shell= /bin/sh /bin/csh /bin/ksh /usr/local/bin/bash ``` ### 3.4 切換使用bash 執行chsh ```shell= # Changing user database information for ols3. Shell: /bin/ksh Full Name: ols3 Office Location: Office Phone: Home Phone: ``` 把/bin/ksh改為 /usr/local/bin/bash 或者執行以下指令: ```shell= chsh -s /usr/local/bin/bash ``` 重新登入主機後 bash當作login shell設定就會生效 ## 4 Windows install bash ### 4.1 Cygwin [官網](https://www.cygwin.com/) 1 由Cygnus Solution開發,後來被RedHat公司收購,但仍然可以自由軟體的授權協議發行 2 Cygnwin創建一個Windows平台的Linux-Like環境,可以在這個環境中把Linux平台程式 migrate到Windows平台(但需要在Cygwin環境內重新編譯) 3 Cygwin是以DLL檔案方式,模擬Linux的API函式 ### 4.2 MSYS22 [官網](https://www.mysys2.org/) [SourceForge download link](https://sourceforge.net/projects/msys2/) 1 MSYS是著名的MinGW計畫(在Windows平台提供GCC編譯器的工具包)的一個子計畫 2 MSYS是Minimal SYStem的縮寫,在Windows平台提供GNU的基本工具以及shell環境 3 MSYS除了提供些bash,make, diff,patch, autoconf, automake, gawk, sed,perl開發工具還有vi,openssh,openssl等工具 4 MSYS主要目的是補足MinGW和Windows平台中的缺陷 ## Contact info(聯絡資訊) <a href="mailto:yuanyu90221@gmail.com?subject=contact">yuanyu90221@gmail.com</a>