亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux教學(xué)中進(jìn)程之間通過特殊文件通信的解析*

        2022-10-14 06:55:06龐偉業(yè)袁繼泉陳星宇
        計(jì)算機(jī)時(shí)代 2022年10期
        關(guān)鍵詞:進(jìn)程用戶

        趙 宏,龐偉業(yè),袁繼泉,陳星宇

        (蘭州理工大學(xué)計(jì)算機(jī)與通信學(xué)院,甘肅 蘭州 730050)

        0 引言

        Linux 符 合POSIX(Portable Operating System Interface)標(biāo)準(zhǔn),功能強(qiáng)大,效率高,配置靈活且安全性高,具有豐富的工具軟件和應(yīng)用軟件,廣泛應(yīng)用在各行各業(yè),運(yùn)行在包括大型機(jī)、中型機(jī)、小型機(jī)、工作站、微機(jī)、嵌入式設(shè)備、可穿戴設(shè)備等各種機(jī)型和硬件平臺(tái)上,是開放源代碼和自由軟件中的杰出代表,是我國(guó)開發(fā)國(guó)產(chǎn)操作系統(tǒng)的主要依托。

        許多高校將Linux 相關(guān)內(nèi)容納入教學(xué),在信息類專業(yè)中開設(shè)Linux 操作系統(tǒng)、Linux 系統(tǒng)內(nèi)核分析、Linux系統(tǒng)程序設(shè)計(jì)、Linux網(wǎng)絡(luò)編程等課程。

        在Linux 相關(guān)教學(xué)中,Linux 系統(tǒng)中的文件管理是核心內(nèi)容。大多數(shù)教科書列舉了Linux 中的文件類型,包括普通文件(-)、目錄文件(d)、字符設(shè)備文件(c)、塊設(shè)備文件(b)、符號(hào)鏈接文件(l)、命名管道文件(p)和套接字文件(s)等七種文件類型。對(duì)于前五種文件,一般都有詳細(xì)講解,有實(shí)例,對(duì)于后兩種文件均一帶而過。文獻(xiàn)[6]和文獻(xiàn)[7]對(duì)命名管道和套接字文件有較為詳細(xì)的介紹,用實(shí)例演示了這兩種文件的用法,但對(duì)于這兩種文件為什么會(huì)用于進(jìn)程之間的通信,未給出進(jìn)一步的說(shuō)明。

        本文從Linux 系統(tǒng)文件授權(quán)機(jī)制和安全保障機(jī)制出發(fā),結(jié)合用戶進(jìn)程之間通信時(shí)的權(quán)限需求,介紹命名管道文件和套接字文件的使用,加深學(xué)生對(duì)Linux系統(tǒng)中進(jìn)程之間通信中借用文件授權(quán)機(jī)制的認(rèn)識(shí),引導(dǎo)學(xué)生在實(shí)際中使用命名管道文件和套接字文件。

        1 進(jìn)程和進(jìn)程通信

        進(jìn)程是程序在數(shù)據(jù)集上運(yùn)行的過程,程序運(yùn)行中所需的系統(tǒng)資源,例如內(nèi)存、CPU 等,需要以進(jìn)程的身份進(jìn)行申請(qǐng),因此,進(jìn)程是獲得系統(tǒng)資源的基本單位。一個(gè)進(jìn)程的執(zhí)行過程可以看作是一個(gè)任務(wù)的執(zhí)行過程,多個(gè)進(jìn)程的同時(shí)執(zhí)行,可以看作是多個(gè)任務(wù)的同時(shí)執(zhí)行?,F(xiàn)代計(jì)算機(jī)操作系統(tǒng)都支持多進(jìn)程的同時(shí)執(zhí)行。多進(jìn)程的同時(shí)執(zhí)行分為并行、并發(fā)以和并行與并發(fā)的混合。并行就是不同的進(jìn)程同時(shí)執(zhí)行在不同CPU 或者不同核上。并發(fā)就是多個(gè)進(jìn)程以一定規(guī)則輪流在同一個(gè)CPU或者核上執(zhí)行,由于CPU執(zhí)行速度很快,盡管微觀上來(lái)看是多個(gè)進(jìn)程輪流執(zhí)行,但宏觀上卻表現(xiàn)出多個(gè)進(jìn)程的同時(shí)執(zhí)行。并行與并發(fā)的混合指多個(gè)進(jìn)程執(zhí)行時(shí)既有并行也有并發(fā),是現(xiàn)代多CPU或者多核計(jì)算機(jī)運(yùn)行的常見形式。

        多個(gè)同時(shí)運(yùn)行的進(jìn)程之間經(jīng)常需要進(jìn)行通信,常用的通信方式有鎖、信號(hào)量、消息隊(duì)列、共享內(nèi)存、無(wú)名管道、命名管道、套接字等多種形式。進(jìn)程之間通信時(shí),如果不需要對(duì)參與通信的進(jìn)程權(quán)限進(jìn)行驗(yàn)證,則根據(jù)實(shí)際需要選用鎖、信號(hào)量、消息隊(duì)列、共享內(nèi)存、無(wú)名管道等通信方式中的一種通信方式即可;但是,如果需要對(duì)參與通信的進(jìn)程進(jìn)行權(quán)限驗(yàn)證,則需要使用命名管道或套接字通信方式進(jìn)行,這是因?yàn)槊艿阑蛱捉幼滞ㄐ欧绞娇梢允褂梦募到y(tǒng)完善的鑒權(quán)機(jī)制,實(shí)現(xiàn)不同用戶的進(jìn)程之間通信時(shí)不同進(jìn)程具有不同操作權(quán)限的功能。

        2 文件系統(tǒng)鑒權(quán)機(jī)制

        Linux 主要使用Ext 系列文件系統(tǒng),Ext 系列文件系統(tǒng)具有完善的鑒權(quán)機(jī)制,分為基本權(quán)限、擴(kuò)展權(quán)限、文件屬性設(shè)置、操作控制列表等多級(jí)權(quán)限。進(jìn)程之間利用命名管道或者套接字通信時(shí),由于生成了相應(yīng)的管道文件和套接字文件,因此,可以使用文件系統(tǒng)的鑒權(quán)機(jī)制。

        2.1 文件基本權(quán)限

        讀權(quán)限和寫權(quán)限是文件基本權(quán)限。用單詞read的第一個(gè)字母r 表示文件“可讀”;用單詞write 的第一個(gè)字母w 表示文件“可修改/刪除”。還有文件的可執(zhí)行權(quán)限,用單詞execute的第二個(gè)字母x表示。

        文件的三種操作:文件主,表示擁有文件的用戶,用單詞user的第一個(gè)字母u 表示;同組用戶,表示與擁有文件的用戶屬于同一個(gè)組,用單詞group 的第一個(gè)字母g表示;其他用戶,表示與擁有文件的用戶不屬于同一個(gè)組,用單詞other的第一個(gè)字母o表示。

        對(duì)文件操作的三類用戶和文件的三種操作權(quán)限進(jìn)行組合,形成文件的基本操作屬性,分三組,每組三位。第一組表示文件主對(duì)文件的操作權(quán)限,第二組表示同組用戶對(duì)文件的操作權(quán)限,第三組表示其他用戶對(duì)文件的操作權(quán)限。每一個(gè)位置需要標(biāo)上操作權(quán)限,若沒有操作權(quán)限,用符號(hào)“-”表示。例如:rwxr-xr--,表示文件主對(duì)文件具有讀、寫和執(zhí)行權(quán)限;同組用戶對(duì)文件具有讀和執(zhí)行權(quán)限;其他用戶對(duì)文件僅有讀權(quán)限。

        文件的授權(quán)屬性經(jīng)常用9 位二進(jìn)制數(shù)記錄,有權(quán)限的位設(shè)為1,無(wú)權(quán)限的位設(shè)為0,轉(zhuǎn)換為三位八進(jìn)制數(shù)表示。例如:二進(jìn)制數(shù)111101100,轉(zhuǎn)換為八進(jìn)制為754,表示文件主對(duì)文件具有讀、寫和執(zhí)行權(quán)限;同組用戶對(duì)文件具有讀和執(zhí)行權(quán)限;其他用戶對(duì)文件僅有讀權(quán)限。

        文件的基本權(quán)限是不同用戶進(jìn)程之間利用命名管道或者套接字通信時(shí)主要使用的權(quán)限。

        1、品種選擇:應(yīng)根據(jù)本地區(qū)的生態(tài)環(huán)境條件,選用高產(chǎn)、優(yōu)質(zhì)、適應(yīng)性及抗病性強(qiáng)、生育期所需積溫比動(dòng)地常年活動(dòng)積溫少150℃的優(yōu)良品種。

        2.2 文件擴(kuò)展權(quán)限

        在文件基本權(quán)限的基礎(chǔ)上擴(kuò)展了SUID、SGID 和粘附位等,形成文件擴(kuò)展權(quán)限。其中,SUID 表示當(dāng)文件執(zhí)行時(shí),執(zhí)行該文件的用戶能夠在文件執(zhí)行期間獲得文件主的權(quán)限;SGID 表示當(dāng)文件執(zhí)行時(shí),執(zhí)行該文件的用戶在文件執(zhí)行期間擁有文件主所在主組用戶的權(quán)限;粘附位表示只有文件主和root 用戶才能刪除帶有該標(biāo)識(shí)的文件,其他用戶雖然有“w”權(quán)限,但仍然不能刪除帶有該標(biāo)識(shí)的文件。

        由于進(jìn)程之間利用命名管道或者套接字通信時(shí)主要在內(nèi)存中進(jìn)行數(shù)據(jù)交換,而文件擴(kuò)展權(quán)限主要用于文件執(zhí)行和刪除,因此,進(jìn)程之間利用命名管道或者套接字通信時(shí)一般不使用文件擴(kuò)展權(quán)限。

        2.3 文件屬性設(shè)置

        文件屬性在文件基本權(quán)限基礎(chǔ)上,對(duì)文件自身和內(nèi)容進(jìn)行更近一步的保護(hù),使用命令chattr 設(shè)置文件屬性,命令lsattr查看文件的屬性。

        文件屬性對(duì)命名管道文件和套接字文件無(wú)效,因此,進(jìn)程之間利用命名管道或者套接字通信時(shí)不能使用文件屬性的設(shè)置。

        2.4 操作控制列表設(shè)置

        操作控制列表在文件基本權(quán)限基礎(chǔ)上,對(duì)文件的操作權(quán)限作更細(xì)致的設(shè)置,用命令setfacl 設(shè)置文件的操作控制列表,用命令getfacl 查看文件操作控制列表的設(shè)置。例如命令:setfacl -m user1:rw a1.txt,設(shè)置用戶user1擁有對(duì)文件a1.txt的讀寫權(quán)限。

        不同用戶進(jìn)程之間利用命名管道或者套接字通信時(shí),可以使用文件的操作控制列表設(shè)置。

        3 不同用戶進(jìn)程之間通過命名管道通信實(shí)例

        3.1 命名管道文件的創(chuàng)建

        用戶user1 運(yùn)行以下Python 程序,創(chuàng)建屬于自己的命名管道文件pipe1。

        上述代碼調(diào)用模塊os 中的mkfifo()函數(shù),創(chuàng)建命名管道文件pipe1,如果pipe1文件已經(jīng)存在,則輸出捕獲到的“File exists”的異常。

        默認(rèn)情況下,命名管道文件pipe1 的操作權(quán)限為:rw-r--r--,即文件主對(duì)文件可讀可寫,同組用戶和其他用戶對(duì)文件可讀。

        3.2 命名管道文件的使用

        user1 通過命名管道發(fā)送消息,user2 通過命名管道接收消息。

        user1運(yùn)行下面的代碼,向命名管道文件寫入消息。

        user2運(yùn)行下面的代碼,從命名管道文件讀取消息。

        上述user1和user2通過命名管道通信成功。

        user1 運(yùn)行命令:chmod 600 pipe1,使得管道文件pipe1 的操作權(quán)限變?yōu)椋簉w----,即同組用戶和其他用戶對(duì)管道文件pipe1不再擁有任何操作權(quán)限。

        再次讓user1和user2通過命名管道通信,user2運(yùn)行接收消息的程序時(shí),會(huì)收到“PermissionError:[Errno 13]Permission denied: '/home/user1/pipe1'”錯(cuò)誤提示,這表示用戶對(duì)pipe1文件沒有相應(yīng)的操作權(quán)限。

        user1運(yùn)行命令chmod或者setfacl,使得user2擁有對(duì)文件pipe1 的讀權(quán)限,此時(shí),user1 和user2 通過命名管道的通信會(huì)再次成功。

        4 不同用戶進(jìn)程之間通過套接字通信實(shí)例

        進(jìn)程之以套接字方式通信時(shí),套接字文件需要服務(wù)端新建,因此,同一用戶的進(jìn)程之間通過套接字通信時(shí),不存在文件權(quán)限的問題。而不同用戶的進(jìn)程之間通信時(shí),會(huì)因?yàn)榭蛻舳藢?duì)新建的套接字文件無(wú)寫權(quán)限而導(dǎo)致通信失敗,因此,不同進(jìn)程之間通過套接字通信時(shí),在套接字文件建立后,需要使用chmod 或者setfacl 命令,給客戶端進(jìn)程的用戶授權(quán)套接字文件的寫權(quán)限。

        假設(shè)用戶user1 的進(jìn)程為服務(wù)端,用戶user2 的進(jìn)程為客戶端,兩者之間通過套接字通信,服務(wù)端Python代碼如下:

        該段程序第四行引入os 模塊,是因?yàn)樾枰薷奶捉幼治募牟僮鳈?quán)限;第五行設(shè)定進(jìn)程之間使用套接字文件通信;第六行會(huì)自動(dòng)創(chuàng)建套接字文件a.socket,若a.socket 已經(jīng)存在,則會(huì)出錯(cuò);第七行調(diào)用os 模塊的system 函數(shù),使用命令setfacl 給user2 賦予套接字文件a.socket 的讀寫權(quán)限;第23 行調(diào)用os 模塊的system 函數(shù),使用命令rm刪除使用完畢的套接字文件a.socket??蛻舳薖ython代碼如下。

        用戶user1 運(yùn)行服務(wù)端代碼,用戶user2 運(yùn)行客戶端代碼,可以實(shí)現(xiàn)user2 將字符串通過套接字發(fā)送給user1,user1 將收到的字符串中的字母轉(zhuǎn)換為大寫后,返回給user2,user2接收轉(zhuǎn)換后的字符串并輸出。

        User1 和user2 通過套接字方式通信時(shí),若用戶user1 或user2 對(duì)套接字文件a.socket 無(wú)讀寫權(quán)限時(shí),程序執(zhí)行將會(huì)出錯(cuò)。

        5 結(jié)束語(yǔ)

        命名管道和套接字文件是Linux 系統(tǒng)中的重要文件類型,利用命名管道和套接字可以實(shí)現(xiàn)不同用戶進(jìn)程之間的通信,并且可以使用Linux 系統(tǒng)文件的鑒權(quán)。本文通過命名管道和套接字文件,分析不同用戶的進(jìn)程通信時(shí),借用文件系統(tǒng)鑒權(quán)機(jī)制的實(shí)例,幫助學(xué)生深入理解Linux系統(tǒng)。

        猜你喜歡
        進(jìn)程用戶
        債券市場(chǎng)對(duì)外開放的進(jìn)程與展望
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        Camera360:拍出5億用戶
        100萬(wàn)用戶
        如何獲取一億海外用戶
        我國(guó)高等教育改革進(jìn)程與反思
        Linux僵死進(jìn)程的產(chǎn)生與避免
        男女平等進(jìn)程中出現(xiàn)的新矛盾和新問題
        一区二区在线亚洲av蜜桃| 亚洲欧美国产精品久久| 精品亚洲一区二区三洲| 国产一区白浆在线观看| 99久久精品费精品国产一区二| 亚洲av成人片色在线观看| 最近免费mv在线观看动漫| 国产亚洲欧美日韩综合一区在线观看 | 久久国产精品二区99| 亚洲福利av一区二区| 蜜桃激情视频一区二区| 久久精品国产免费一区二区三区 | 午夜精品男人天堂av| 人人妻人人澡人人爽超污| 丰满少妇被猛男猛烈进入久久| 久久99精品久久久66| 在线小黄片视频免费播放| 久久婷婷五月综合97色直播| 一本色道久久88精品综合| 无码手机线免费观看| 免费国产黄片视频在线观看| 亚洲精品中文字幕91| 国产亚洲精品a片久久久| 97久久超碰国产精品2021 | 熟妇人妻AV中文字幕老熟妇| 国产一区二区三区视频大全| 国产av一级片在线观看| 国产成人a人亚洲精品无码| 久久亚洲中文字幕无码| 国产不卡视频一区二区在线观看 | 久久亚洲精品成人AV无码网址| 丰满少妇被啪啪到高潮迷轩| 亚洲av无码久久精品狠狠爱浪潮| 成人动漫久久| 熟女少妇av免费观看| 国产一品二品精品在线| 97se亚洲国产综合自在线观看| 美丽人妻被按摩中出中文字幕| 日本一区二区视频免费观看| 日本一区二区三区人妻| 俄罗斯老熟妇色xxxx|