Bash 的若幹基本問題

来源:http://www.cnblogs.com/zhangzl419/archive/2017/05/06/6818714.html
-Advertisement-
Play Games

Bash 的若幹基本問題 這裡介紹一些bash啟動前、後的問題,以及一些使用bash需要註意的基本問題。 1、Bash的介紹 Bash是一種Shell程式,它是一般的Linux系統中的預設的Shell程式,一般情況下Bash指的是/bin/bash這個軟體。 一個Linux系統中有多少個可用的She ...


Bash 的若幹基本問題
  這裡介紹一些bash啟動前、後的問題,以及一些使用bash需要註意的基本問題。     1、Bash的介紹   Bash是一種Shell程式,它是一般的Linux系統中的預設的Shell程式,一般情況下Bash指的是/bin/bash這個軟體。 一個Linux系統中有多少個可用的Shell程式,可以從/etc/shells文件中查出來。 當前登錄用戶的預設Shell是哪一個,可以從/etc/passwd文件中與此用戶對應的那一行最後一個欄位看出來。或者也可以通過echo $SHELL來查看。   2、內部命令與外部命令   Bash中可用的命令分為兩類,分別是:內部命令和外部命令。內部命令是Bash的一部分,而外部命令都是一個一個獨立於Bash的軟體。   在bash的用戶提示符下,可以輸入內部命令和外部命令,然後bash會分析命令,之後執行命令。bash執行內部命令不會產生新的進程,而在執行外部命令的時候,bash會用fork函數生成一個新的進程,然後用exec函數來載入這個外部命令的程式來執行這個外部命令。   怎麼來區分一個命令是內部命令還是外部命令呢?用type命令來區分。type本身是一個內部命令,type commandName可以知道commandName這條命令的是內部命令還是外部命令。   3、環境變數與用戶自定義變數   環境變數是對所有的進程(包括bash的進程和非bash的進程)都可見的變數,一般用大寫字母的組合作為變數名,所以也稱為全局變數。   名詞解析:臨時環境變數和永久環境變數。其實全局變數都是通過export導出的變數。 臨時全局變數是在bash的命令提示符下或者bash scripts下用export導出的變數,這些變數在機器重啟之後會消失,除非再次執行export命令或者再次執行相應的scripts。 永久環境變數是寫在配置文件中的,這些配置文件在每次重啟機器甚至重開一個bash的時候都會被再執行一次,所以這些文件中的全局變數一直存在,不會因為重啟機器而消失,看上去好像是永久的,其實是每次都重新export了。   用戶自定義變數是對單個Bash可見的變數,其他任何從擁有這個變數的Bash生成的子進程(包括子bash進程和其他的子進程)都看不到這個變數,所以也稱為局部變數。   環境變數和用戶自定義變數的主要區別是:環境變數會被bash啟動的子進程繼承,而自定義變數不會被bash的子進程繼承。   系統中的環境變數,可以用env命令和export命令來查看。在bash的命令提示符下直接輸入env或者export都將列出系統的所有環境變數。 在bash下輸入set命令既可以看到系統的環境變數,也可以看到此bash所擁有的用戶自定義變數,另外列出的變數中還有一些是與bash的操作介面有關的變數。   4、shell scripts的執行方式   bash腳本程式的執行方式,一種是由本bash來分析scripts,然後執行,第二種是另外啟動一個新的bash進程,由新bash進程來分析和執行scripts。 在本bash中分析和執行scripts的做法,用source命令或者點命令來執行: [zzl@myhost Scripts]$ source test.sh [zzl@myhost Scripts]$ . test.sh   另起一個bash進程執行,有兩種方式: [zzl@myhost Scripts]$ bash test.sh   [zzl@myhost Scripts]$ chmod a+x test.sh (這裡需要在test.sh的開頭要用shebang註明將要使用的shell) [zzl@myhost Scripts]$ ./test.sh   5、Bash下的單個命令的交互執行過程   用戶在bash的命令提示符下輸入一條命令,bash就解釋執行一條,這種方式成為互動式。 互動式的情況下內部命令的執行:用戶輸入了一條內部命令之後,bash分析命令,直接執行。執行內部命令相當於執行bash的一個函數。 互動式的情況下外部命令的執行:用戶在命令行輸入一條命令後,bash會分析這條命令的合法性,之後會fork出一個新進程,併在新進程中exec這條命令的程式。   6、shell scripts的執行過程   bash中scripts的執行過程與執行方式有關係。當用source或者點命令時是由本bash來執行此scripts的,如果是由bash命令或者直接執行腳本,則是另起一個子bash進程來執行scripts的。   那麼一個bash進程或者bash的子進程又是怎麼執行scripts的呢? [zzl@myhost Scripts]$ source test.sh 這條命令執行後,當前bash會把test.sh當成一個命令行參數讀入,之後從test.sh中讀取一條、分析一條、執行一條,直至全部執行完畢。   [zzl@myhost Scripts]$ bash test.sh 這條命令執行後,當前bash會另外啟動一個子bash進程,子bash把test.sh當成自己的命令行參數讀入。 之後,子bash會從test.sh中讀取一條,分析一條,執行一條。在這個過程中,如果讀取的是內部命令,直接調用自己的對應函數;如果讀取的是一個外部命令,那麼它會fork一個子進程,然後在子進程中exec這個外部命令的程式,執行它。 直到test.sh中所有的命令都執行完了,子bash會結束,返回到當前bash中。   7、Bash的操作環境   登錄系統前的歡迎信息放在/etc/issue中、登錄後想要顯示的信息放在/etc/motd中。   login shell:在進入bash的時候,經過了完整的輸入用戶名和密碼的登錄過程,之後才進入bash,那麼這個bash叫做login shell。   non login shell:在進入bash的時候,不需要經過登錄過程,那麼這個bash就是non login bash。比如,在X Window下,打開一個terminal終端,之後進入的bash,就是non login shell;又不如,在命令提示符下輸入bash,之後進入的bash也是non login shell。   login shell在進入之前要讀取/etc/profile、~/.bash_profile或~/.bash_login或~/.profile等配置文件,而在~/.bash_profile中又會執行~/.bashrc文件。 non login shell在進入之前只會讀取~/.bashrc文件。   login shell在註銷退出的時候會讀取~/.bash_logout配置文件的內容,而non login shell則不會讀取。   ~/.bash_history文件記錄了上次及以前的會話中login shell使用過的命令。     以上基本問題搞清楚了,bash的使用過程中很多問題就清楚了。餘下的問題是Bash內的問題,就是怎麼學習bash腳本編程的問題和各個命令的用法問題了。        
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景 今天舉辦的 Data Amp 大會上,微軟向開發者們強調了 數據如何影響他們的應用和服務 ,順道還宣佈了幾個小新聞。這個免費的線上研討會不僅展示了未來的機器學習遠景,還發佈了 SQL Server 2017、推出了 面部認知服務 API 和 Azure 分析服務。顯然,SQL Server 2 ...
  • 之前從mysql 5.6的時候,mysql 還沒有密碼策略這個東東,所以我們每個用戶的密碼都可以隨心所欲地設置,什麼123 ,abc 這些,甚至你搞個空格,那也是OK的。 而mysql.user 表裡面也保存有password 的欄位進行標識這個是密碼的位置。 但是當升級到了MySQL 5.7 的時 ...
  • 註冊ocx時出現ole初始化錯誤或OCX載入錯誤 問題原因:安裝文件不能放在包含空格的文件夾名字中 解決辦法:oracle安裝的時候最好安裝在盤符的根目錄下,不要使用中文 ora-00922(缺少或無效選項) 問題原因:配置管理員密碼時,採用了數字開頭的密碼 解決辦法:將密碼改為英文開頭(配置密碼時 ...
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重覆值時,會觸發此異常。 ORA-00017: 請求會話以設置跟蹤事件 ORA-00018: 超出最大會話數 ORA-00019: 超出最大會話許可數 ORA-00020: 超出最大進程數 () ORA-00021... ...
  • 主要是看《SQL必知必會》第四版的書,而寫的一些SQL筆記,紅色的是方便以後查詢的sql語句,工作中主要是使用mysql資料庫,所以筆記也是圍繞mysql而寫的。 下文調試的數據表sql語句,如果要嘗試的調試的話可以複製過去運行即可 1 # Host: localhost (Version: 5.5 ...
  • 一、首先創建兩張表stu,sc --說明: 外鍵必須建立索引; FOREIGN key(sid) 設置外鍵,把sid設為外鍵 REFERENCES stu(sid) 引用作用。引用stu表中的sid ON DELETE CASCADE 級聯刪除ON UPDATE CASCADE 級聯更新 二、向兩張 ...
  • Linux Unix 免費 收費 開源 不開源 硬體無要求 有要求 IBM Sun Hp 主流的Linux的髮型版本: RedHat Fedora Mandriva Ubuntu CentOS Debian Getoo ...
  • Fedora是一個Linux發行,基於Redhat,算是Redhat的測試版本。而Fedora workstation預設使用的桌面環境是Gnome,使用Xfce作為桌面環境的Fedora較之稍顯輕量,不過呢,沒有經過配置的Xfce Fedora是很朴素的。 得益於Fedora中文源的出現能讓一些w ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...