最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解bash中的初始化機(jī)制

 更新時間:2020年03月27日 09:09:41   作者:1996scarlet  
這篇文章主要介紹了詳解bash中的初始化機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Bash初始化文件

交互式login shell

在下列情況下,我們可以獲得一個login shell:

  • 登錄系統(tǒng)時獲得的頂層shell,無論是通過本地終端登錄,還是通過網(wǎng)絡(luò)ssh登錄。這種情況下獲得的login shell是一個交互式shell。
  • 在終端下使用--login選項調(diào)用bash,可以獲得一個交互式login shell。
  • 在腳本中使用--login選項調(diào)用bash(例如:#!/bin/bash --login)可以得到一個非交互式的login shell。
  • 使用su -切換到指定用戶時,獲得此用戶的login shell。如果不使用-,則獲得non-login shell。

login shell啟動時首先讀取/etc/profile系統(tǒng)全局配置,然后依次查找~/.bash_profile、~/.bash_login、~/.profile三個配置文件,并且讀取首個找到的并且可讀的文件。

login shell退出時讀取并執(zhí)行~/.bash_logout中的命令。 如果配置文件存在但不可讀,則會顯示錯誤消息;如果文件不存在,bash將自動搜索下一個文件。

默認(rèn)在/etc/profile文件中會定義PATH、USER、MAIL、HOSTNAME、HISTSIZE等全局環(huán)境變量,還會自動導(dǎo)入/etc/bash.bashrc文件(包含系統(tǒng)級shell函數(shù)和別名),以及/etc/profile.d路徑下被用于針對特定程序進(jìn)行初始化的所有*.sh文件。

交互式non-login shell

非登錄shell意味著在啟動時不必通過系統(tǒng)身份驗證。 GUI中用戶打開的終端默認(rèn)為非登錄shell,可以通過logout命令判斷:

# 在Ubuntu GUI桌面打開一個終端
> logout
bash: logout: not login shell: use `exit'
> bash --login
> logout # 正常登出 什么也不會輸出

非登錄shell在初始化時僅讀取~/.bashrc資源文件, 而~/.bashrc文件會自動被~/.bash_profile或~/.profile加載,因此為了保證login shell和交互式non-login shell得到相同的配置,一般將環(huán)境變量定義在~/.bashrc文件中。

> echo "export sflag=\"login shell will see this message\"" >> ~/.profile  
> bash 
> echo $sflag 
          # 找不到這個變量 會打印一個空行
> exit 
> bash --login 
> echo $sflag 
login shell will see this message 
> logout

非交互式shell

通過bash命令執(zhí)行腳本時會以非交互(non-interactively)的方式啟動shell,這保證了在腳本執(zhí)行過程中不會被用戶干擾。在非交互式腳本啟動時,僅會加載BASH_ENV變量指向的文件。但要注意, 由于PATH變量默認(rèn)不會被非交互式shell加載,因此變量BASH_ENV的值應(yīng)該為絕對路徑。

通過特殊變量-可以查看當(dāng)前shell的模式:

> echo $-
himBHs # 帶有'i‘就是交互式shell

另一個簡單的方式是檢查當(dāng)前shell中是否存在提示符環(huán)境變量PS1.

if [ -z "$PS1" ]; then echo "非交互式";else echo "交互式";fi

特殊情況

兼容模式

如果使用命令sh調(diào)用bash,則為了保證兼容性會按照sh的方式對bash進(jìn)行初始化。作為login shell啟動時,bash依次讀取/etc/profile和~/.profile配置文件。作為non-login shell啟動時,bash僅會讀取環(huán)境變量ENV指向的文件。

POSIX模式

當(dāng)通過以下方式啟動bash時:

  1. 設(shè)置set -o posix export POSIXLY_CORRECT=1
  2. bash --posix

bash會盡可能按照POSIX標(biāo)準(zhǔn)進(jìn)行初始化,僅會讀取環(huán)境變量ENV指向的文件。

遠(yuǎn)程啟動腳本

使用rshd遠(yuǎn)程啟動腳本時僅會加載 ~/.bashrc文件,但要注意的是盡量不要使用rlogin, telnet, rsh, rcp等遠(yuǎn)程命令,因為這些命令會傳輸未加密的明文信息。如果有遠(yuǎn)程訪問需求盡量使用SSH。

UID與EUID不匹配

在創(chuàng)建進(jìn)程時會在task_struct中記錄進(jìn)程運行時所需要的信息。其中UID(真實用戶ID)用于記錄創(chuàng)建進(jìn)程的用戶的ID,EUID(有效用戶ID)用于判斷當(dāng)前進(jìn)程對文件的訪問級別,一般情況下UID = EUID。如果可執(zhí)行文件的set-user-ID: SUID位有效(例如:-rwsr-xr-x,用戶的x被替換為s),表示當(dāng)該文件被執(zhí)行時,進(jìn)程具有文件所有者的權(quán)限而不是執(zhí)行者的權(quán)限(EUID的值為文件所有者的ID)。

如果我們給bash可執(zhí)行文件設(shè)置了set-user-id標(biāo)志,那么由于其默認(rèn)所有者為root,當(dāng)其他非root用戶運行bash時,該進(jìn)程的UID將不等于EUID,這種情況下為了保證安全性,bash在初始化階段不會加載任何文件。

受限制的shell

通過rbash或bash --restricted或bash -r啟動時會生成功能受限制的shell,具體表現(xiàn)為:

  • 不能使用cd命令并且命令中不能包含/
  • 不能更改SHELL、PATH、ENV和BASH_ENV環(huán)境變量
  • source命令的參數(shù)也不能包含帶有/的文件
  • hash –p <path> <name>用于給路徑起別名的命令的參數(shù)中也不能包含/
  • 初始化時不會導(dǎo)入文件中的函數(shù)并且會忽略SHELLOPTS
  • 不能使用重定向
  • 不能使用exec命令
  • 不能使用enable -f/-d增加刪除命令
  • 不能使用command -p指定運行命令需要的路徑
  • 不能主動關(guān)閉限制模式

這個功能理論上可以讓用戶在指定的文件夾內(nèi)執(zhí)行指定的文件來完成有限的功能,但是如果環(huán)境變量設(shè)置不當(dāng)會導(dǎo)致用戶很輕松地就能解除限制:

> rbash
> cd /etc
rbash: cd: restricted
> bash
> cd /etc # 可以成功執(zhí)行,因為這個時候我們在bash環(huán)境中,沒有任何限制

一種有效的做法是給新建的用戶的能執(zhí)行的命令作出限制,例如我們可以新建一個只能執(zhí)行ftp命令的ruser:

> useradd -s /bin/rbash ruser # 設(shè)置用戶登錄時提供的shell
> chown -R root:ruser /home/ruser/.bashrc /home/ruser/.bash_profile
# 設(shè)置root為擁有者,ruser組為組擁有者(新建的ruser默認(rèn)輸入ruser組)
> chmod 640 /home/ruser/.bashrc /home/ruser/.bash_profile
# root可以讀寫,ruser組里的用戶只讀,其他用戶什么也不能干
> mkdir /home/ruser/bin # 存儲用戶的可執(zhí)行文件或鏈接
> echo "export PATH=/home/ruser/bin" >> /home/ruser/.bash_profile
> ln -s /user/bin/ftp /home/ruser/bin/ftp

到此這篇關(guān)于詳解bash中的初始化機(jī)制的文章就介紹到這了,更多相關(guān)bash 初始化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Linux中搭建常用服務(wù)器

    詳解Linux中搭建常用服務(wù)器

    本篇文章主要介紹了Linux中搭建常用服務(wù)器,主要包括telnet、DHCP、DNS、sendmail、FTP、web、samba有興趣的可以了解一下。
    2016-12-12
  • eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置數(shù)據(jù)庫連接池

    eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置數(shù)據(jù)庫連接池

    首先有一點要明確, 我是個新手, 而我所知道的只是一個表面, 根源我并不了解, 目前也不打算去深究. 所以我的方法, 可能只適用于eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 的數(shù)據(jù)庫連接池的配置, 其他版本我無法保證.至少Tomcat 6的admin包還沒出, 所以我的方法肯定不適用于Tomcat 6.
    2008-10-10
  • Linux下connect超時處理(總結(jié))

    Linux下connect超時處理(總結(jié))

    這篇文章主要介紹了Linux下connect超時處理(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Linux 的cp命令及示例詳解

    Linux 的cp命令及示例詳解

    本篇文章主要介紹了Linux 的cp命令詳解, cp指令用于復(fù)制文件或目錄,有興趣的可以了解一下。
    2016-11-11
  • Linux中Curl參數(shù)詳解實踐應(yīng)用

    Linux中Curl參數(shù)詳解實踐應(yīng)用

    在現(xiàn)代網(wǎng)絡(luò)開發(fā)和運維工作中,curl 命令是一個不可或缺的工具,它是一個利用 URL 語法在命令行下工作的文件傳輸工具,支持多種協(xié)議,如 HTTP、HTTPS、FTP 等,本文給大家介紹了Linux中Curl參數(shù)詳解實踐應(yīng)用,需要的朋友可以參考下
    2025-01-01
  • 虛擬機(jī)中CentOS7設(shè)置固定IP地址的方法

    虛擬機(jī)中CentOS7設(shè)置固定IP地址的方法

    這篇文章主要介紹了虛擬機(jī)中CentOS7設(shè)置固定IP地址的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解Linux安裝教程

    詳解Linux安裝教程

    這篇文章主要介紹了Linux安裝教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • centos配置mutt和msmtp實現(xiàn)郵件發(fā)送

    centos配置mutt和msmtp實現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了centos配置mutt和msmtp實現(xiàn)郵件發(fā)送,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • jar包在linux服務(wù)器已經(jīng)運行好但是訪問不到地址的問題及解決方法

    jar包在linux服務(wù)器已經(jīng)運行好但是訪問不到地址的問題及解決方法

    這篇文章主要介紹了jar包在linux服務(wù)器已經(jīng)運行好但是訪問不到地址的問題,解決方案是需要修改防火墻開放的端口,查看防火墻開放的端口,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • CentOS7開啟MySQL8主從備份、每日定時全量備份(推薦)

    CentOS7開啟MySQL8主從備份、每日定時全量備份(推薦)

    這篇文章主要介紹了CentOS7開啟MySQL8主從備份、每日定時全量備份,解決了鏈接mysql數(shù)據(jù)庫很慢的問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11

最新評論

松桃| 华池县| 溧水县| 赫章县| 海口市| 定日县| 梅河口市| 黔南| 通许县| 沧州市| 稷山县| 景德镇市| 普宁市| 乐昌市| 铜梁县| 金阳县| 佳木斯市| 和田县| 铅山县| 西贡区| 青浦区| 郧西县| 临澧县| 屏东市| 蚌埠市| 成武县| 观塘区| 乐至县| 彭泽县| 天津市| 保山市| 安宁市| 石景山区| 方正县| 盈江县| 柳江县| 邵武市| 八宿县| 河间市| 公主岭市| 黄平县|