操作系統(tǒng)內(nèi)核(kernel)負責管理整個計算機硬件,但是這個內(nèi)核是需要保護的,用戶不能直接操作內(nèi)核,因此就需要一個可以幫助我們操作內(nèi)核的工具。Shell 功能就在于此,他可以將我們輸入的命令與內(nèi)核通信,好讓內(nèi)核可以控制硬件來正確無誤地工作
我們使用的是 linux 默認 shell 即 bash shell,其主要功能是:
命令記憶功能:
命令與文件不全功能
命名別名設置功能
作業(yè)控制,前臺,后臺控制
程序腳本
通配符
對于 shell 能夠識別的變量分為:
內(nèi)部命令:由 bash 內(nèi)置的命令
外部命令:來字外部的命令,非 bash 內(nèi)置
語法:type [-tpa] name
選項與參數(shù):不加任何參數(shù)是,會顯示出是內(nèi)部命令還是外部命令
-t:會已以下關鍵字說明命令的意義
File:外部命令
Alias:通過別名設置的命令
Builtin:內(nèi)置命令
-p:-如果后面接的是外部命令時才會顯示完整文件名
-a:會有 PATH 變量定義的路徑中,所有 name 命令列出來,包括 alias
舉例:
[root@localhost ~]# type ls
ls is aliased to `ls --color=tty'
[root@localhost ~]# type -t ls
alias
[root@localhost ~]# type cd
cd is a shell builtin
[root@localhost ~]# type egrep
egrep is hashed (/bin/egrep)
[root@localhost ~]# type -t egrep
file
[root@localhost ~]# type -p egrep
/bin/egrep
在我們系統(tǒng)中存在多個名字相同的名字,那么 bash shell 究竟使用的是哪個命令呢?其遵循的順序如下:
1.以相對/絕對路徑來執(zhí)行命令
2.由 alias 找到命令來執(zhí)行
3.由 bash 內(nèi)置命令來執(zhí)行
4.通過$PATH 的順序找到的第一個命令來執(zhí)行
舉例
[root@localhost ~]# alias echo='echo -n'
[root@localhost ~]# type -a echo
echo is aliased to `echo -n'
echo is a shell builtin
echo is /bin/echo
=>可以看到先找alias在內(nèi)置命令 最后PATH
當我們進如 bash 之后雖然我們什么也沒有設置,但是系統(tǒng)的一些變量已經(jīng)別名等信息就已經(jīng)設置好了,這些信息就存在環(huán)境配置文件中,bash 啟動時就會讀取這些文件,對配置信息進行加載和設置
環(huán)境配置文件分類:
整體配置文件
個人配置文件
用戶輸入完正確的用戶名密碼獲得的 bash 首先會讀取
1./etc/profile
這個文件設置的只要變量有 PATH,MAIL,USER,HOSTNAME.HISTSIZE,接下來調(diào)用其他文件加載數(shù)據(jù)
2./etc/inputrc
3./etc/profile.d/*.sh
這個目錄下的文件規(guī)定了 bash 的操作借口顏色,語系,公共別名等信息
4./etc/sysconfig/i18n
這個文件由/etc/profile.d/lang.sh 調(diào)用復制設置語系
以上為整體配置文件,設置完成后開始設置個人配置文件
5.~/.bash_profile
~/.bash_profile,~/.bash_login ~/.profile 三個文件只讀取一個,而且順序按照前面的順序
root@localhost ~]# cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
在這個文件中將用戶主目錄添加到 PATH 中,并將 PATH 變?yōu)榄h(huán)境變量。并且還回去讀取~/.bashrc 文件(我通常將我個人的配置信息寫到這里,如別名)
http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/4.gif" alt="" />
其他重要配置文件
/etc/man.config: 這個文件中記錄了幫助信息在哪里
~/.bash_history:記錄操作命令歷史記錄
~./bash_loyout:注銷時系統(tǒng)做的事情記錄在這里
環(huán)境配置文件只有 bash 在啟動時讀入,如果啟動以后再修改就需要重新登錄,才能讓配置文件再一次被讀入,source 命令就是避免重新登錄,使修改后的配置文件重新讀入后立即生效
語法:source 配置文件名
終端機中有的按鍵代表特殊的意義,如[backspace]代表刪除,[ctrl+c]代表終止命令。在不同的Linux distributions 中終端機環(huán)境設置不盡相同。Stty 可以查看并設置這些命令
語法:stty –a
stty name 熱鍵
選項與參數(shù):
-a:查看所有環(huán)境中所有按鍵設置
name:按鍵設置名稱
舉例:查看所有按鍵信息
[root@localhost ~]# stty -a
speed 38400 baud; rows 41; columns 143; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
幾個重要的內(nèi)容:
Eof:代表輸入結束
Erase:刪除字符操作
Intr:終止目前命令
Kill:在提示符下,將正行命令刪除
Quit:送出 quit 給正在運行的程勛
Start:暫停屏幕的輸出
Stop:回復屏幕的輸出
Susp: 暫停目前命令
舉例2:修改按鍵信息
[root@localhost ~]# stty erase ^h
=>將刪除字符按鍵變?yōu)閇ctrl+h],此時[backspace]按鍵變成[ctrl+?]操作,
[root@localhost ~]# stty -a
speed 38400 baud; rows 41; columns 143; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
Bash shell 特點之一就是通配符,可以方便我們查找。
說明:通配符和正則表達式不是一個東西
常用的通配符:
*:代表0~n 個任意字符
?: 代表一定有一個字符
[]:代表一定有一個括號內(nèi)的字符
[-]代表一定是連續(xù)字符中的一個.例如:[0-9]代表一個是0-9中的一個字符。前提字符必須是連續(xù)的
[^]:^表示反向選擇例如[^abc]代表一個非 abc 的字符
舉例:
[root@ localhost ~]# LANG=C <==由于與編碼有關(字符連續(xù)),先配置語系
找出 /etc/ 底下以 cron 為開頭的檔名
[root@ localhost ~]# ll -d /etc/cron* <==加上 -d 是為了僅顯示目錄而已
找出 /etc/ 底下文件名『剛好是五個字母』的文件名
[root@ localhost ~]# ll -d /etc/?????
找出 /etc/ 底下文件名含有數(shù)字的文件名
[root@ localhost ~]# ll -d /etc/*[0-9]*
找出 /etc/ 底下,檔名開頭非為小寫字母的文件名:
[root@ localhost ~]# ll -d /etc/[^a-z]*