在工作中, 我們經常會連接Linux伺服器. 理想情況下, 每位員工在Linux伺服器上都有一個獨立的Linux賬戶, 並且擁有不同的許可權, 但此場景對運維要求較高; 工作中實際情況更可能是一個小組, 甚至是一個項目組共用一個Linux帳戶. 我們暫且不討論這兩種方案孰優孰劣, 但多人共用一個Lin... ...
本文中提到的 賬戶, 用戶 均表示同一概念. 例如 ssh [email protected], 賬戶, 用戶 指的均是 wbourne.
背景
在工作中, 我們經常會連接Linux伺服器. 理想情況下, 每位員工在Linux伺服器上都有一個獨立的Linux賬戶, 並且擁有不同的許可權, 但此場景對運維要求較高; 工作中實際情況更可能是一個小組, 甚至是一個項目組共用一個Linux帳戶. 我們暫且不討論這兩種方案孰優孰劣, 但多人共用一個Linux賬戶的話, 必然會導致一個問題: 配置文件不獨立.
Linux應用的配置文件大概可分為兩種: 系統級配置文件, 以及用戶級配置文件. 用戶已經是最小單位了, 多位員工共用一個Linux用戶, 配置文件必然不會獨立. 比如shell的配置文件, A員工修改了shell配置文件, 不僅會對A生效, 同時也會對B其他員工也生效, 因為員工用的都是同一個用戶; A員工喜歡用ll
表示ls -l
, B員工喜歡用ll
表示ls -lrtF --color
...
本文就來介紹, 多人共用一個Linux用戶的情況下, 如何實現Bash配置文件的獨立.
Bash初始化文件
Bash在初始化時, 預設會載入一系列配置文件, 不瞭解的讀者可以參考本人文章bash初始化文件詳解. 既然是預設的, 那我們就可以自定義初始化文件, 通過bash --rcfile <FILE>
就可以指定初始化文件.
比如現在有三個員工A B C公用一個Linux賬戶wbourne, 預設的初始化文件為/home/wbourne/.bashrc. A員工可以新建一個自己的配置文件/home/wbourne/.bashrc_A, 通過執行bash --rcfile /home/wbourne/.bashrc_A
來載入自己的配置文件, 其他員工載入的還是/home/wbourne/.bashrc, A員工的配置不會影響到其他人.
如果預設的配置文件中有一些必要的配置, 而A員工啟用了自己的配置文件, 載入不到預設配置文件中的必要配置, 可以在.bashrc_A文件第一行加上source /home/wbourne/.bashrc
, 這樣既可以載入預設配置文件中的必要配置, 也可以載入自己的配置, 同時也不會影響其他人.
Tips: source /home/wbourne/.bashrc
一定要放在第一行, 因為shell腳本是順序執行的, 有相同配置的話後面的會覆蓋前面的.
自動載入個人配置文件
細心的讀者可能會問, --rcfile
選項並沒有什麼用, 登錄伺服器之後, 再手動執行source /home/wbourne/.bashrc_A
, 能達到上述一樣的效果, 何必多次一舉?
是的, 執行bash --rcfile <FILE>
與執行source <FILE>
是可以達到一樣的效果; 但是都需要手動執行, 而--rcfile
選項配合ssh可以實現登錄時自動執行配置文件. ssh不僅可以用來登錄, 還可以用來遠程執行命令, 那為什麼不讓ssh來執行bash --rcfile <FILE>
呢?
- 例如平時登錄伺服器的命令為
ssh [email protected]
- 將其修改為
ssh -t [email protected] bash --rcfile /home/wbourne/.bashrc_A
. 註意: 這裡要加上一個-t
選項, 表示分配一個tty. - 再在本地電腦配置一個alias, 就能很方便的自動載入個人配置文件
alias s101='ssh -t [email protected] bash --rcfile /home/wbourne/.bashrc_A'
- 之後在本地電腦執行
s101
就可以登錄伺服器並自動載入個人配置文件了
Tips: 上述ssh登錄伺服器, 配置alias, 執行s101是在本地電腦(即員工個人電腦, 有別與伺服器)執行的操作; 其他的操作與文件, 均指的是伺服器上的操作或伺服器上的路徑, 請讀者註意.
本文講述的是以命令行的方式通過ssh命令登錄伺服器實現Bash配置文件獨立; 如果讀者使用的是xshell, putty等工具登錄伺服器, 請自行摸索, 底層用的都是ssh協議, 原理都是一樣的.