tmpfs
是 Linux/Unix 系統上的一種基於內存的文件系統,即 tmpfs 使用內存或 swap 分區來存儲文件。html
Linux 內核中的 VM 子系統負責在後臺管理虛擬內存資源 Virtual Memory,即 RAM 和 swap 資源,透明地將 RAM 頁移動到交換分區或從交換分區到 RAM 頁,tmpfs 文件系統須要 VM 子系統的頁面來存儲文件。tmpfs 本身並不知道這些頁面是在交換分區仍是在 RAM 中;作這種決定是 VM 子系統的工做。tmpfs 文件系統所知道的就是它正在使用某種形式的虛擬內存。node
因爲 tmpfs 是基於內存的,所以速度是至關快的。另外 tmpfs 使用的 VM 資源是動態的,當刪除 tmpfs 中文件,tmpfs 文件系統驅動程序會動態地減少文件系統並釋放 VM 資源,固然在其中建立文件時也會動態的分配VM資源。另外,tmpfs 不具有持久性,重啓後數據不保留。python
/dev/shm
就是一個基於 tmpfs 的設備,在有些 Linux 發行版中 /dev/shm
是 /run/shm/
目錄的一個軟連接。實際上在不少系統上的 /run
是被掛載爲 tmpsf 的。用 df -T
能夠查看系統中的磁盤掛載狀況:linux
文件系統 1K-塊 已用 可用 已用% 掛載點 udev 1859684 4 1859680 1% /dev tmpfs 374096 1524 372572 1% /run /dev/sda8 76561456 36029540 36619724 50% / none 4 0 4 0% /sys/fs/cgroup none 5120 0 5120 0% /run/lock none 1870460 27688 1842772 2% /run/shm none 102400 56 102344 1% /run/user
那麼,咱們就先來講說 /run
目錄。如今咱們知道,該目錄是基於內存的,實際上它的前身是 /var/run
目錄,後來被 /run
替換。這是由於 /var/run
文件系統並非在系統一啓動就是就緒的,而在此以前已經啓動的進程就先將本身的運行信息存放在 /dev
中,/dev
一樣是一種 tmpfs
,並且是在系統一啓動就可用的。可是 /dev
設計的本意是爲了存放設備文件的,而不是爲了保存進程運行時信息的,因此爲了避免引發混淆,/dev
中存放進程信息的文件都以 "." 開始命名,也就是都是隱藏文件夾。可是即使是這樣,隨着文件夾的數量愈來愈多,/dev
裏面也就愈來愈混亂,因而就引入了替代方案,也就是 /run
。實際上在不少系統上 /var/run
目錄仍然存在,但其是 /run
目錄的一個軟連接。數組
/var/run
目錄中主要存放的是自系統啓動以來描述系統信息的文件。比較常見的用途是 daemon 進程將本身的 pid 保存到這個目錄。app
/dev/shm/
是 Linux 下一個很是有用的目錄,它的意思是 Shared memory,也就是共享內存。因爲它在內存上,因此全部系統進程都能共享該目錄。默認狀況下它的大小是內存的一半。若是但願改變它的大小,能夠用 mount 來管理:ui
mount -o size=4000M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm.net
若是但願永久生效,能夠修改 /etc/fstab
文件:設計
tmpfs /dev/shm tmpfs defaults,size=4G 0 0
利用 /dev/shm
能夠作不少事情,這裏說一個 Python 的應用。用 Python 作數據處理時,可能會用到 numpy,一般作數據處理時的數據量都是很大的,若是有多個進程都須要用到一樣的數據,那麼 /dev/shm
就派上了用場,也就是用共享內存技術。Python 有一個第三方庫能夠用來在多個進程間共享 numpy 數組,即 SharedArray。SharedArray 即是基於 /dev/shm
的,而且採用 POSIX 標準,可以兼容多個平臺。code