Linux shell 內部命令與外部命令有什麼區別以及怎麼辨別

来源:https://www.cnblogs.com/gavinpan/archive/2019/07/27/11248279.html
-Advertisement-
Play Games

內部命令實際上是shell程式的一部分,其中包含的是一些比較簡單的linux系統命令,這些命令由shell程式識別併在shell程式內部完成運行,通常在linux系統載入運行時shell就被載入並駐留在系統記憶體中。內部命令是寫在bashy源碼裡面的,其執行速度比外部命令快,因為解析內部命令shell ...


內部命令實際上是shell程式的一部分,其中包含的是一些比較簡單的linux系統命令,這些命令由shell程式識別併在shell程式內部完成運行,通常在linux系統載入運行時shell就被載入並駐留在系統記憶體中。內部命令是寫在bashy源碼裡面的,其執行速度比外部命令快,因為解析內部命令shell不需要創建子進程。比如:exit,history,cd,echo等。

外部命令是linux系統中的實用程式部分,因為實用程式的功能通常都比較強大,所以其包含的程式量也會很大,在系統載入時並不隨系統一起被載入到記憶體中,而是在需要時才將其調用記憶體。通常外部命令的實體並不包含在shell中,但是其命令執行過程是由shell程式控制的。shell程式管理外部命令執行的路徑查找、載入存放,並控制命令的執行。外部命令是在bash之外額外安裝的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通過“echo $PATH”命令查看外部命令的存儲路徑,比如:ls、vi等。

內部命令和外部命令最大的區別之處就是性能。內部命令由於構建在shell中而不必創建多餘的進程,要比外部命令執行快得多。因此和執行更大的腳本道理一樣,執行包含很多外部命令的腳本會損害腳本的性能。

1.內部命令在系統啟動時就調入記憶體,是常駐記憶體的,所以執行效率高。

2.外部命令是系統的軟體功能,用戶需要時才從硬碟中讀入記憶體。

type可以用來判斷一個命令是否為內置命令


type: usage: type [-afptP] name [name ...]
[root@linuxeye ~]# type type
type is a shell builtin
[root@linuxeye ~]# type -p type
[root@linuxeye ~]# type -t type
builtin
[root@linuxeye ~]# type type
type is a shell builtin
[root@linuxeye ~]# type -t type
builtin
[root@linuxeye ~]# type pwd
pwd is a shell builtin
[root@linuxeye ~]# type whiptail
whiptail is /usr/bin/whiptail
[root@linuxeye ~]# type -t whiptail
file

enable既可以查看內部命令,同時也可以判斷是否為內部命令

[root@linuxeye ~]# enable -a #查看內部命令
[root@linuxeye ~]# enable whiptail #非內部命令
-bash: enable: whiptail: not a shell builtin
[root@linuxeye ~]# enable pwd #是內部命令

內部命令用戶輸入時系統調用的速率快,不是內置命令,系統將會讀取環境變數文件.bash_profile、/etc/profile去找PATH路徑。

然後在提一下命令的調用,有些歷史命令使用過後,會存在在hash表中,當你再次輸入該命令它的調用會是這樣一個過程。

hash——>內置命令——>PATH   命令的調用其實應該是這樣一個過程。

[root@linuxeye ~]# type pwd
pwd is a shell builtin
[root@linuxeye ~]# type cat
cat is /usr/bin/cat
[root@linuxeye ~]# pwd
/root
[root@linuxeye ~]# ls linuxeye*
linuxeye.pem linuxeye.txt
[root@linuxeye ~]# cat linuxeye.txt
linuxeye
[root@linuxeye ~]# hash -l #顯示hash表
builtin hash -p /usr/bin/cat cat
builtin hash -p /usr/bin/ls ls
[root@linuxeye ~]# type cat
cat is hashed (/usr/bin/cat)
[root@linuxeye ~]# hash -r #清除hash表
[root@linuxeye ~]# type cat
cat is /usr/bin/cat

從上面操作可以看出。hash表不存放系統內置命令。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 近期看了楊波老師講的《微服務》課程,深有感觸,準備做下記錄和學習筆記,希望能尋找到更多的一些方法論和思想進行微服務架構上的指引。 談到微服務,有必要談到兩個人,這兩個人對微服務架構的定義產生非常深遠的影響,一個是馬丁福勒,一個是netflix架構總監Adrian Cockcroft,netflix公 ...
  • 重置開發環境 菜單欄中選擇“工具”/“導入和導出設置”/“重置所有設置” 設置行號 菜單欄中選擇“工具”/“選項”/“文本編輯器”/“行號” 全屏顯示 菜單欄中選擇“試圖”/“全屏顯示” 為程式設置版本和幫助信息 項目/properties /AssemblyInfo.cs 文件 1 // Gene ...
  • 資源不好找,找到了就和大家分享一下! 鏈接:https://share.weiyun.com/51kBB0y 密碼:2hcxcu ...
  • 一、環境 1、 VMware虛擬機 2、 Linux系統(centos7) 安裝步驟: 1、 先安裝VMtools 2、 查看是否有openjdk,若有先將系統內的openJDK刪除(採用 rpm –e): 3、 配置下列環境變數(/etc/profile): export JAVA_HOME=jd ...
  • mac系統常用的軟體安裝工具就是homebrew 個人認為通過brew安裝比較簡單,下麵介紹下如何安裝 安裝和卸載homebrew 安裝 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install ...
  • 下麵介紹查看Linux伺服器CPU總核數的方法。 通過/proc/cpuinfo可查看CPU個數及總核數。 ...
  • 要設置許可權,就需要知道文件的一些基本屬性和許可權的分配規則。 在Linux中,ls命令常用來查看文件的屬性,用於顯示文件的文件名和相關屬性。 #ls -l 路徑 【ls -l 等價於 ll】 標紅的部分就是Linux的文檔許可權屬性信息。 Linux中存在用戶、用戶組和其他人概念,各自有不同的許可權,對於 ...
  • 對操作系統在電腦中的作用做了簡單介紹,介紹了Linux、GNU和Linux發佈版的關係,給出了在VirtualBox上安裝Ubuntu虛擬機的詳細步驟。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...