1. 程式人生 > >Linux 的命令機制

Linux 的命令機制

Linux之路

命令格式

COMMAND [OPTIONS...] [ARGUMENTS...]
選項:用於啟用或關閉命令的某個或某些功能
短選項:-c 例如:-l, -h
長選項:--word 例如:--all, --human-readable
參數:命令的作用對象: 比如文件名和作用名

註意

1.  *多個選項以及多參數和命令之間使用空白字符串分隔*

2. *取消和執行命令執行:Ctrl+c,Ctrl+d*

3. *多個命令可以用 ; 符號分開*

4. *一個命令可以用 \ 分成多行*

命令的提示符與用戶的uid

Linux中的用戶跟windows 一樣也分為管理員和普通用戶。
在Linux中,系統是根據你的uid來判斷你是否是管理員,而不是通過你的用戶名來判斷

Linux用戶

系統是通過uid來判斷用戶是否是Root用戶,Root用戶的uid為0

Root用戶(超級用戶)? ? ?
root用戶 在命令提示符表示為# uid為0
技術分享圖片

普通用戶命令提示符表示為 $
普通用戶uid:?
centos6:從500開始
技術分享圖片

centos7:從1000開始
技術分享圖片

上面提示符的顏色是根據PS1的環境變量而義
>PS1=[\e[1;32m][\u@\h \W]\$[\e[0m]


bash Shell

交互式接口

交互式接口:啟動終端後,在終端設備附加一個交互式應用程序
GUI:Graphic User Interface
X protocol, window manager, desktop
Desktop:
GNOME (C, 圖形庫gtk),
KDE (C++,圖形庫qt)
XFCE (輕量級桌面

CLI:Command Line Interface
shell程序:sh(bourn 史蒂夫·伯恩)cshtcshksh(korn)bash (bourn again shell)GPL zsh

Shell 是Linux系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行。

由於歷史原因,有許多的shell。shell也被稱為LINUX的命令解釋器(command interpreter)shell負責把不同的語言翻譯成對應的二進制。
就好像不同的不同的國家有不同的語言
shell是用戶和內核、操作系統打交道的一個接口
應用程序通過系統調用和庫來訪問系統硬件和內核,也因此Linux開機運行就被加載到時內存中。讀取的速度快於外部命令。
shell把你的命令解析成系統能識別的二進制來執行。

bash shel
GNU Bourne-Again Shell(bash)是GNU計劃中重要的工具軟件之一

目前也是Linux標準的shell,與sh兼容
CentOS默認使用

顯示當前使用的shell
echo ${SHELL}
顯示當前系統使用的所有shell
cat /etc/shells

內部命令

內部命令是集成在shell程序的一部分,這些命令由shell程序識別並在shell程序內部完成運行,通常在linux系統加載運行時shell就被加載並駐留在系統內存中.

內部命令幫助用法 help cmd

內部命令的查看命令
enable : 內部命令的禁用與啟用
help: 查看內部命令是否被禁用,命令前面帶 * 的是被禁用的命令

外部命令

外部命令簡單的說系統之上運行的程序,當系統讀取外部命令時,要到磁盤上讀取,這樣會顯的速度比較慢。由於linux的特性,當系統查找外部命令時,系統會按PATH環境變量的路徑從左往右 一個一個的來查找,當前面的路徑找到了,後面的路徑就不找了。

~]# echo $PATH

外部命令的幫助

幫助用法 cmd --help

查看命令
which : 查看外部命令在PATH放的路徑,不會查看緩存(按*PATH*中的優先順序顯示)
加上-a會查看看外部命令在PATH中的所有路徑和命令別名
> whereis : 查出命令所在的路徑以及man幫助相關文檔的路徑

判斷命令是否是外部命令

type : type cmd
type cmd=========區分是外部命令還是內部命令。會按命令的優先級來顯示
外部命令是在PATH的路徑(如果有別名的存在,會按搜索命令的優先級來顯示。但也會按hash緩存來找)

技術分享圖片

hash

系統初始hash表為空,當外部命令執行時,默認會從PATH路徑下尋找該命令,找到後會將這條命令的路徑記錄到時hash表中,當再次使用該命令時,shell解釋器首先會查看hash表,存在將執行之,如果不存在,將會去PATH路徑下尋找。利用hash緩存表可大大提高命令的調用速率。

註意: 當我們執行一個外部命令時,hash表會記錄外部命令的緩存。但不會記錄內部命令(內部命令是集成在bash shell裏)。
如果此時將這個命令移動到PATH變量中的另一個路徑或其它路徑。再來執行這個命令,此時命令會報錯,因為在hash表中記錄了這個路徑。系統只要找到了這個路徑,就不會往後面去找了。

技術分享圖片

Linux查找命令時,是否看命令的名字

技術分享圖片

Linux在查找命令時,是按命令的名字來查找,不是按命令的本質來查找。


命令別名

命令別名的常用命令: unalias alias

當系統開始運行時,會把磁盤上的別名配置文件(~/.bashrc或/etc/.bashrc)加載到內存中,系統運行的是內存中的別名。即使用unalias把別名給刪了,也只是在當前終端無法執行別名,等系統退出重新登錄,又可以使用這個別名了。因為並沒有改別名的配置文件啊!

技術分享圖片

命令別名如何使用原始命令

  • 在命令前面加 \

  • 寫上全路徑,(內部命令不適用)

  • 用單引號把命令引起來

在linux中命令的搜索路徑

當你在命令提示符下敲一個字符串時,後臺做了一件事中,先用/bin/bash這個程序,來判斷一下你輸入的內容是何種程序,是不是能找到這個程序。先判斷是否是命令別名,再判斷是否是內鍵命令,然後再看是否有外部命令緩存hash,最後判斷是否是外鍵命令PASH。然後報錯。

Linux 的命令機制