Bashgit
一、bash的基礎特性
shell
(1) 命令歷史apache
bash會記錄此前用戶在shell會話中執行的命令於緩衝區中;正常退出時,會被記錄於當前用戶家目錄下隱藏文件.bash_history中;緩存
環境變量:bash
HISTSIZE:命令歷史記錄的條數;ide
HISTFILE:命令歷史文件路徑;函數
HISTFILESIZE:spa
history命令:
命令行
-c:清空命令歷史;orm
-d #: 刪除歷史中指定的命令;
-a: 當緩衝區中的歷史手動追加文件;
history #: 顯示最近的多少條命令;
調用過去執行過的命令:
!#:調用歷史中的第#條命令;
!!: 重複執行上一條命令
!string:調用歷史中最近一個以string開頭的命令;
調用過去執行過的命令的最後一個參數:
!$:
ESC, .
Alt+.
(2) 命令補全
bash內建命令
外部命令
命令搜索機制:
PATH環境變量:由冒號分隔的路徑
hash:把此前搜索到路徑緩存到內存中;
kv: key-value
ls --> /bin/ls
(3) 路徑補全
把用戶給出的路徑字符串當前路徑起始,並在其指定的上級目錄下搜索以指定的字符串開頭的文件名;
若是唯一:直接補全;
不然:兩次Tab,可列出;
(4) 命令行展開的功能
~: 展開爲當前用戶的主目錄;
~USERNAME:展開爲指定用戶的家目錄;
{}:可承載一個以逗號分隔的列表,並其展開爲多個路徑;
/var/{log,cache,run} = /var/log /var/cache /var/run
(5) 命令的執行結果狀態,由bash追蹤和保存
成功:0
失敗:1-255
bash使用特殊變量$?保存最近一條命令的狀態結果;
程序的執行結果有兩種:
程序的返回值;
程序的狀態結果;
(6) 命令別名
命令的另外一個引用符號,由bash程序維護;
alias/unalias
alias: 查看全部已經定義別名;
alias NAME=COMMAND:定義別名;
若是別名同原命令名,想直接執行原命令,則需使用\COMMAND
unalias NAME: 撤消別名;
二、bash的基礎特性
(1) glob
文本名「通配」
*:匹配任意長度的任意字符;
?:匹配任意單個字符;
a*b: aab, ab, a123b;
a?b:
[]: 匹配指定範圍內的任意單個字符;
[0-9]
[^]:匹配範圍外的任意單個字符;
[^a-b]
字符集合:
[:lower:]
[:upper:]
[:alnum:]
[:digit:]
[:space:]
[:punct:]
[:alnum:]
Ctrl+l:清屏
Ctrl+a: 切換至命令行首
Ctrl+e:切換至命令行尾
Ctrl+c:取消命令執行
Ctrl+u:刪除光標所在處至行首的內容;
Ctrl+k: 刪除光標所在處至行尾的內容;
三、bash環境配置
(1)配置文件,生效範圍劃分,存在兩類:
全局配置:
/etc/profile, /etc/profile.d/*.sh
/etc/bashrc
我的配置:
~/.bash_profile
~/.bashrc
(2)按功能劃分,存在兩類:
profile類:爲交互式登陸的shell提供配置
/etc/profile, /etc/profile.d/*.sh
~/.bash_profile
作用:
定義環境變量,例如PATH、PS1
運行命令或腳本
(3)bashrc類:爲非交互式登陸shell提供配置
/etc/bashrc
~/.bashrc
作用:
(1) 定義命令別名;
(2) 定義本地變量;
(4)變量:內存空間,變量名
類型:
環境變量:做用範圍當前shell進程及其子進程
本地變量:做用範圍當前shell進程
局部變量:做用範圍僅爲當前shell進程中某代碼片段(一般爲函數上下文)
位置變量:$1, $2
特殊變量:$?
(5)變量定義方式:
bash內置變量:可直接調用,內置了許多環境變量,例如PATH等
自定義變量:name=value
變量賦值:變量名=值
(6)bash弱類型:
變量存儲數據時,默認均採用字符形式;任何變量能夠不經聲明,直接引用;
120:24bits
120: 8bits
(7)定義環境變量:
export name=value
declare -x name=value
查看:env, printenv, export,set
(8)撤消變量:
unset name
(9)引用變量:
${name}, $name
例子:
[root@localhost /]# animal='dog' [root@localhost /]# echo "There are some $animals." There are some . [root@localhost /]# echo "There are some ${animal}s." There are some dogs.
(10)bash中的引用符號:
'': 強引用,變量替換不會發生
"":弱引用
``: 命令引用
例子:
[root@localhost /]# ls -l `which cat` -rwsr-xr-x. 1 root root 48568 10月 15 2014 /bin/cat [root@localhost /]# echo "$animal" dog [root@localhost /]# echo '$animal' $animal
(11)經常使用的環境變量
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當前用戶主目錄
HISTSIZE 歷史記錄數
LOGNAME 當前用戶的登陸名
HOSTNAME 指主機的名稱
SHELL 當前用戶Shell類型
LANGUGE 語言相關的環境變量,多語言能夠修改此環境變量
MAIL 當前用戶的郵件存放目錄
PS1 基本提示符,對於root用戶是#,對於普通用戶是$
(12)Linux的變量種類
按變量的生存週期來劃分,Linux變量可分爲兩類:
1. 永久的:須要修改配置文件,變量永久生效。
2. 臨時的:使用export命令聲明便可,變量在關閉shell時失效。
(13)shell登陸類型:
交互式登陸:
直接經過終端進行的登陸;
經過su -l Username命令實現的用戶切換;
(14)非交互式登陸:
圖形界面下打開的命令行窗口;
執行腳本;
su Username;
(15)配置文件做用次序:
交互式登陸:
etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
(16)非交互式登陸:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
(17)編輯配置文件定義的新配置如何生效?
從新登陸;
讓當前shell進程去從新讀取指定的配置文件;
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
注意:反作用
問題:
一、定義對全部用都生效的別名?
答:echo "alias cdnet='cd /etc/sysconfig'" >> /etc/bashrc
二、若是僅須要PATH環境變量的修改僅對root用戶生效,該如何操做?
答:sed -i '10s/$/:\/usr\/local\/apache2\/bin/' ./.bash_profile