在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)四十三天----臨時性文件的建立與使用
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號展開與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對上一講的總結(jié)和擴展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號 trap

shell 學(xué)習(xí)四十三天----臨時性文件的建立與使用

臨時性文件的建立與使用

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

因為 /tmp 使用頻繁,有些系統(tǒng)就會將他們放在常駐內(nèi)存型的文件系統(tǒng)里,以便快速訪問。

$df /tmp
Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/sda3        1032088 262608    717052  27% /

將文件系統(tǒng)放在替換空間 (swap) 區(qū)域里,表示它存在與內(nèi)存中,直到內(nèi)存資源被使用得剩很少時,部分信息才會寫入替換空間。

為確保臨時性文件會在任務(wù)完成時刪除,編譯語言的程序員可以先開啟文件,再下達(dá) unlink() 系統(tǒng)調(diào)用。

$$ 變量

使用 $$ 變量可以獲取 shell 本身的 PID。

案例:
$echo $$
1736

使用 $$ 變量構(gòu)建臨時性文件名的一部分。要解決完整臨時性文件名發(fā)生此問題的可能性,可使用環(huán)境變量覆蓋目錄名稱,通常是 TMPDIR。另外,應(yīng)該使用 trap 命令,要求在工作完成時刪除臨時性文件。因此,常見的 shell 腳本起始如下:

umask 077                   #刪除用戶以外其他人的所有訪問權(quán)
TMPFILE=$(TMPDIR-/tmp)/myprog.$$    #產(chǎn)生臨時文件
trap ‘rm -f $TMPFILE’ EXIT #完成刪除臨時性文件

mktemp 程序

因為使用 /tmp/myprog.$$ 這樣的文件名太好猜了,所以就有了 mktemp 命令。 在進(jìn)行 shell 腳本程序設(shè)計時,經(jīng)常需要生成臨時文件,使用 mktemp 命令即可滿足這樣的要求,且保證了文件的安全性。

語法:

mktemp [-qu] [文件名參數(shù)]

有的系統(tǒng)是沒有 mktemp 命令的,這時我們需要給 mktemp 打補丁,以使它包含 tempfile 包:

patch -Np1 -i ../mktemp-1.5-add_tempfile-2.patch

編譯 mktemp

./configure --prefix=/usr --with-libc

配置選項的含義:

--with-libc 這個使得 mktemp 程序從系統(tǒng)的 C 庫中使用 mkstepmkdtemp 的功能。

編譯軟件包:

make

安裝軟件包:

```make install make install-tempfile


**主要參數(shù)**

參數(shù) 作用 -q 執(zhí)行時若發(fā)生錯誤,不會顯示任何信息 -u 暫存文件會在 mktemp 結(jié)束前先行刪除 -V 顯示版本信息


案例:  

$mktemp tmp.XXX tmp.DSH $ mktemp tmp.XXX tmp.hEc $ mktemp tmp.XXX tmp.7yi

分析:點號后面的三個大寫字母 XXX 代表了三個隨機數(shù)。

$ ll -rw------- 1 root root 0 7 月 12 18:43 tmp.7yi -rw------- 1 root root 0 7 月 12 18:43 tmp.DSH -rw------- 1 root root 0 7 月 12 18:43 tmp.hEc

**`/dev/random` 與 `/dev/urandom` 特殊文件**

這兩個文件都是用來產(chǎn)生隨機數(shù)的。他們產(chǎn)生隨機數(shù)的原理是利用當(dāng)前系統(tǒng)的熵池來計算出一定數(shù)量的隨機比特,然后將這些比特作為字節(jié)流返回。熵池就是當(dāng)前系統(tǒng)的環(huán)境噪音,熵指的是一個系統(tǒng)的混亂程度,系統(tǒng)噪音可以通過很多參數(shù)來評估,如內(nèi)存的使用,文件的使用,文件的使用量,不同類型的進(jìn)程數(shù)量等等。如果當(dāng)前環(huán)境噪音變得不是很劇烈或者當(dāng)前環(huán)境噪音很少,日過剛開機的時候,而當(dāng)前需要大量的隨機比特,這時產(chǎn)生的隨機數(shù)的隨機數(shù)效果就不是很好了。

這就是為什么會有 `/dev/urandom` 和 `/dev/random` 這兩種不同的文件,后者在不能產(chǎn)生新的隨機數(shù)時會阻塞程序,而前者不會 (ublock),當(dāng)然產(chǎn)生的隨機數(shù)效果就不太好了,這對加密解密這樣的應(yīng)用來說不是一種很好的選擇。`/dev/random` 會阻塞當(dāng)前的程序,知道根據(jù)熵池產(chǎn)生新的隨機字節(jié)之后才返回,所以使用 `/dev/random` 比使用 `/dev/urandom` 產(chǎn)生大量隨機數(shù)的速度要慢。

案例:

$dd if=/dev/random of=random.dat bs=1024b count=1 記錄了 0+1 的讀入 記錄了 0+1 的寫出 128 字節(jié) (128 B) 已復(fù)制,0.000356299 秒,359 kB/ 秒 $ dd if=/dev/urandom of=random.dat bs=1024b count=1 記錄了 1+0 的讀入 記錄了 1+0 的寫出 524288 字節(jié) (524 kB) 已復(fù)制,0.226209 秒,2.3 MB/ 秒



分析:`/dev/random` 產(chǎn)生隨機數(shù)的速度要慢,而且產(chǎn)生的量有限,但是產(chǎn)生隨機數(shù)的質(zhì)量好。