国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Shell中建立與使用臨時性文件的方法詳解

2019-10-26 18:53:58
字體:
來源:轉載
供稿:網友

前言

在我們日常開發中經常會需要用到臨時文件,本文就給大家介紹了關于Shell建立與使用臨時性文件的相關內容,分享出來供大家參考學習,話不多說了,來一起看看詳細的介紹:

雖然使用管道可以省去建立臨時性文件的需求,不過有時候臨時性文件還是派的上用場的。UNIX不同于其他操作系統的地方就是:它沒有那種將不再需要的文件設法神奇刪除的想法。反倒提供了兩個特殊目錄:/tmp和/var/tmp(舊系統為:/usr/tmp),這些文件可正常被存儲,當它們未被清理干凈時也不會弄亂一般的目錄。大部分系統上的/tmp都會在系統開機時清空,不過/var/tmp下的重新開機時仍需存在,因為有些文本編輯程序,會將它們的備份文件存放在這里,從而系統毀損后可用來恢復數據。

因為/tmp目錄使用頻繁,有些系統就會將它放在常駐內存型的文件系統里,以便快速訪問,如下面這個例子:

root@localhost:~/training# df /tmp Filesystem     1K-blocks  Used Available Use% Mounted on swap      568048704 10772216 528398256 2% /tmp 

將文件系統放在替換空間區域里,表示它存在于內存中,直到內存資源消耗殆盡時,部分數據才會寫入替換空間。

為確保臨時性文件會在任務完成時刪除,編譯語言的程序員可以先開啟文件,再下達unlink()系統調用。這么做就會馬上刪除文件,但因為它仍在開啟狀態,所以仍可繼續訪問,直到文件關閉或工作結束為止,只要其中一個先發生即可。打開后解除連接的技巧一般來說在非UNIX操作系統下是無法運行的,在加載于UNIX文件系統中目錄上的外部文件系統也是這樣,且在大多數腳本語言中無法使用它。

$$變量

共享的目錄或同一個程序的多個執行實例,都可能造成文件名沖突,在Shell腳本里的傳統做法就是使用進程ID,可以在Shell變量$$中取得,構建成臨時性文件名的一部分。要解決完整臨時性文件名發生問題的可能性,可使用環境變量覆蓋目錄名稱,通常是TMPDIR。另外,你也應該使用trap命令,要求在工作完成時刪除臨時性文件,因此,常見的Shell腳本起始如下:

umask 077       # 刪除用戶以外其他人的所有訪問權 TMPFILE=${TMPDIR-/tmp}/myprog.$$ # 產生臨時性文件名 trap 'rm -f $TMPFILE' EXIT   # 完成時刪除臨時性文件  

mktemp程序

像/tmp/myprog.$$這樣的文件名會有這個問題:太好猜了!攻擊者只需要在目標程序執行時列出目錄幾次,就可以找出它正在使用的是哪些臨時性文件。通過預先建立適當的指定文件,攻擊者可以讓你的程序失敗或讀取偽造的數據,甚至重設文件權限,以便于攻擊者讀取文件。

處理此類安全性議題時,文件名必須是不可預知的。BSD與GUN/Linux系統都提供了mktemp命令,供用戶建立難以猜測的臨時性文件名稱。雖然底層的mktemp()函數庫調用已由POSIX標準化,但mktemp命令卻沒有。如果你的系統沒有mktemp,我們建議你安裝OpenBSD的可移植版本

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 全椒县| 芜湖县| 上思县| 璧山县| 商都县| 揭阳市| 临漳县| 北安市| 鄂托克前旗| 泸州市| 太康县| 大城县| 萨迦县| 盖州市| 塔河县| 德化县| 姜堰市| 浮梁县| 含山县| 尤溪县| 洪湖市| 佛冈县| 蒙城县| 科技| 色达县| 巫溪县| 松阳县| 汉沽区| 从化市| 永和县| 喜德县| 庆城县| 静乐县| 张家港市| 涿鹿县| 五原县| 花莲市| 普兰县| 将乐县| 澄城县| 广饶县|