溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Shell 的相關(guān)概念和配置方法是什么

發(fā)布時間:2021-11-09 16:49:23 來源:億速云 閱讀:146 作者:柒染 欄目:建站服務(wù)器

這篇文章將為大家詳細講解有關(guān)Shell 的相關(guān)概念和配置方法是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

使用Linux的過程中少不了使用各種各樣的Shell, 而根據(jù)啟動環(huán)境的不同,Shell會讀取不同的配置文件。 本文便來詳細介紹這些不同名字的配置文件在何時會被Shell讀取。

Shell 的相關(guān)概念和配置方法是什么

什么是 Shell

Shell(Unix Shell)是一種命令行解釋器,是Unix操作系統(tǒng)下最傳統(tǒng)的人機接口。 在Shell中,用戶可以通過輸入程序名稱來執(zhí)行某個程序, 最初計算機用戶就是通過Shell來讓計算機執(zhí)行任務(wù)的。 今天在Linux和Mac中大量使用的Shell包括CSH,Bash,ZSH等。

第一個Unix Shell是貝爾實驗室的Ken Thompson 寫的sh,從1971年便開始使用了。 Ubuntu、RedHat等Linux發(fā)行版中默認的Shell是Bash(Bourne Shell), 作者是貝爾實驗室的Stephen Bourne,因此得名。 Harttle在使用的是Z shell,這是一個非?,F(xiàn)代的Shell,兼容于Bash。

什么是 Shell 命令

Shell命令就是我們常說的Linux命令,這些命令可以分為兩類:

一類是Shell Builtin,這和Shell類型有關(guān)。例如Bash中有echo, pwd等。
一類是PATH下的軟件,比如/usr/bin下的ls, mkdir等。
Shell編程是一系列Shell(通常指Bash)命令寫在一個文件中,以批量地去執(zhí)行。 這個文件便是Shell腳本,其中包含了要被順序執(zhí)行的Shell命令。

這些Shell腳本一般命名為*.sh來表示通過Shell來執(zhí)行。 Shell腳本第一行通常會包含當前腳本文件的解釋器,比如#!/usr/bin/bash 是指用戶執(zhí)行該腳本時,用Bash來解釋執(zhí)行。

什么是 Terminal

Terminal(終端)是指計算機的一臺設(shè)備或一個軟件, 它可以接受鍵盤輸入傳送給計算機, 并通過屏幕或打印機來顯示計算機傳送來的字符輸出。 早期的終端就是一臺打字機(teletypewritter,TTY), 因此TTY和Terminal是同義詞。 至今Linux操作系統(tǒng)都會提供若干個TTY終端(按下Ctrl+Alt+F1即可進入)。

終端一詞最初是指電纜末端的那臺設(shè)備,是從電子學(xué)的角度上進行命名的。 在Linux術(shù)語中,TTY其實是一個擴展的流設(shè)備。

除了系統(tǒng)內(nèi)核外,Terminal Emulators(終端模擬器)也可以提供Terminal, 這些由終端模擬器提供的Terminal通常稱為Pseudo-TTY。 使用終端模擬器來提供Terminal主要是為了方便使用,通常一個終端模擬器可以打開多個終端。 比如X Windows系統(tǒng)中常用的Xterm,GNU Screen,SSH, GNome中的Terminal,KDE中的Konsole,Mac下常用的iTerm2等。這些軟件都屬于Terminal Emulator。

什么是 Console

Console(控制臺)通常是指一臺設(shè)備、一個軟件或一個操作系統(tǒng)的Primary Terminal。 Console的叫法是從物理意義上來的,直接連在設(shè)備上的那個終端就叫Console。 比如Linux的TTY,Chrome的控制臺,交換機的管理終端。

什么是交互式 Shell

Interactive Shell(交互式 Shell)與登錄 Shell 都是指 Shell 所處的運行狀態(tài), 每個操作系統(tǒng)中可能會運行多個 Shell,這些 Shell 可能會處于下面的任何一種運行狀態(tài)。

Interactive Shell(交互式Shell)是指可以讓用戶通過鍵盤進行交互的Shell。 我們在使用的CLI都是交互式Shell。

Non-interactive Shell(非交互式Shell)是指被自動執(zhí)行的腳本, 通常不會請求用戶輸入,輸出也一般會存儲在日志文件中。 比如用 Cron 定時任務(wù)更新壁紙一文中被crontab定時執(zhí)行的腳本就運行在非交互式Shell中。

什么是登錄 Shell

Login Shell(登錄Shell)是指該Shell被運行時用于用戶登錄,比如TTY中的Shell就是以登錄Shell的狀態(tài)在運行。

Non-login Shell(非登錄Shell)是指在用戶已登錄情況下啟動的那些Shell。 被自動執(zhí)行的Shell也屬于非登錄Shell,它們的執(zhí)行通常與用戶登錄無關(guān)。

Shell 配置文件

Shell配置文件其實是一種特殊的Shell腳本,只不過沒有用.sh來命名。 在Shell被啟動時會選擇性地執(zhí)行配置文件中的Shell命令, 這些命令一般用于配置當前Shell下的工作環(huán)境, 通常包含一些別名(alias),PATH,編輯器(EDITOR)等配置。

Shell 配置文件可以分為系統(tǒng)級別的配置文件和用戶級別的配置文件。 任何一種 Shell 都有用戶級別的配置文件,以及對應(yīng)的系統(tǒng)級別的配置文件。

系統(tǒng)級別的配置文件位于/etc下,這些配置會應(yīng)用于所有用戶。例如/etc/profile,/etc/bashrc。
用戶級別的配置文件位于用戶目錄~下,通常會加一個.來隱藏。例如~/.profile,~/.bashrc。
在Shell啟動時,會首先執(zhí)行系統(tǒng)級別的配置文件(如果存在的話),再執(zhí)行用戶級別的配置文件。也就是說~/.bashrc中的配置會覆蓋/etc/bashrc中的配置。

登錄 Shell 的配置文件

登錄 Shell 會讀取登錄相關(guān)的配置文件,一般可分為三類:

.profile 配置登錄 Shell 的行為。在作為登錄 Shell 啟動時讀取。
.login 登錄時的讀取。
.logout 登出時讀取。
.profile是/bin/sh的配置文件。Bash兼容于sh,因此Bash作為登錄Shell時也會讀取/etc/profile和~/.profile(其實幾乎所有Shell都會這樣做)。
.login是登錄Shell在用戶登錄后讀取的配置文件,csh、tcsh都會讀取它。
.logout是登錄Shell在用戶退出時讀取的配置文件,csh、tcsh都會讀取它。
每一種Shell在兼容上述配置文件的同時,也會有一些私有的配置文件。比如Bash:
.bash_profile是Bash私有的登錄Shell配置文件。
.bash_login是Bash作為登錄Shell,用戶登錄后讀取的配置文件。
.bash_logout是Bash作為登錄Shell,用戶退出時讀取的配置文件。
比如 Zsh 的 .zprofile, .zlogout, .zlogin 等等,詳見 https://wiki.archlinux.org/index.php/zsh

交互式 Shell 的配置文件

有一些配置文件是只會被交互式Shell讀取的,包括:.zshrc,.bashrc等。

其中.bashrc只會被交互式的、非登錄Bash讀取。 因此往往會在.bash_profile中調(diào)用~/.bashrc來讓Bash作為登錄Shell時也讀取~/.bashrc:

[[ -r ~/.bashrc ]] && . ~/.bashrc

.zshrc會被任何交互式Z Shell讀取,除非設(shè)置了-f參數(shù)。 C Shell, TCShell啟動時卻總是會去讀取 cshrc, .tcshrc,無論當前Shell是否為交互式的、或者登錄Shell。

關(guān)于Shell 的相關(guān)概念和配置方法是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI