鍍金池/ 教程/ Linux/ shell
Linux 學習記錄--開機掛載錯誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構建
文件系統(tǒng)簡介
Linux 學習記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學習記錄--文件權限
Linux 命令縮寫
命令與文件的查詢
文件|目錄的默認權限與隱藏權限
shell script
服務
Linux 學習記錄--程序編譯與函數(shù)庫
正則表達式與其應用
關機相關指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進程控制
文件系統(tǒng)簡單操作
磁盤掛載與卸載
有名管道通訊
磁盤分區(qū),格式化與檢驗
工作管理與進程管理
匿名管道通訊
Linux 學習記錄--啟動流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學習記錄--ACL 權限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關系統(tǒng)編程

shell

命令類型查詢:type

讀入配置文件:source

操作系統(tǒng)內(nèi)核(kernel)負責管理整個計算機硬件,但是這個內(nèi)核是需要保護的,用戶不能直接操作內(nèi)核,因此就需要一個可以幫助我們操作內(nèi)核的工具。Shell 功能就在于此,他可以將我們輸入的命令與內(nèi)核通信,好讓內(nèi)核可以控制硬件來正確無誤地工作

我們使用的是 linux 默認 shell 即 bash shell,其主要功能是:
命令記憶功能:
命令與文件不全功能
命名別名設置功能
作業(yè)控制,前臺,后臺控制
程序腳本
通配符

命令類型查詢(type)

對于 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 的環(huán)境配置文件

當我們進如 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)境配置文件(source)

環(huán)境配置文件只有 bash 在啟動時讀入,如果啟動以后再修改就需要重新登錄,才能讓配置文件再一次被讀入,source 命令就是避免重新登錄,使修改后的配置文件重新讀入后立即生效
語法:source 配置文件名

終端機環(huán)境設置

終端機中有的按鍵代表特殊的意義,如[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]*