登錄與非登錄shell的:
區分:是否需要輸入用戶名密碼。
轉換:
非登錄可以轉換成登錄 使用--login
考慮轉換情況,相對科學的區分:既不使用密碼,也不使用--login轉換的是非登錄,其他都是登錄。
登錄與非登錄運行shell的區別:
對於Bash來說,登錄shell會首先讀取和執行/etc/profile全局配置文件中的命令,然後依次查找~/.bash_profile、~/.bash_login 和 ~/.profile這三個配置文件,讀取和執行這三個中的第一個存在且可讀的文件中命令。除非被“–noprofile”選項禁止了。
在非登錄shell裏,只讀取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )文件,不同的發行版裏面可能有所不同。
交互式與非交互式shell:
區分:是否與用戶進行交互(在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。)
交互式與非交互式shell運行時的區別:
交互式shell下打開進程時,會啓用工作控制job control(會影響到其子進程進程組的編號,作業控制模式下被shell打開的進程,進程組號爲進程號),否則不會啓用(其打開的進程組號繼承父進程的進程組,既運行腳本的非交互式shell進程)。這是linux在作業控制中的設計,我準備另起文章探討。在shell腳本中,使用set -m可以改變腳本的運行模式開啓工作控制。
是否登錄與是否交互是兩個維度的概念,兩兩組合的四種情況均會出現:
1、登錄交互式 最常見的登錄系統後進行操作使用的shell。
2、非登錄非交互式 常見的shell腳本的運行方式。
3、非登錄交互式 在shell中使用bash調出shell、在系統中打開命令行工具等。
4、登錄非交互式 強制使用登錄方式打開的shell腳本。可以改變腳本訪問的全局文件,在不少情況下也需要使用(遠程使用非登錄shell調用腳本但需要登錄的全局環境時適用)。