什麼是在Linux中創建「虛擬」文件的最直接的方式,它允許對其進行讀取操作,並始終返回某個特定命令的輸出(每次讀取文件時都運行)?因此,每個讀取操作都會導致執行一條命令,捕獲其輸出並將其作爲文件的「內容」傳遞。如何在Linux中創建虛擬命令支持的文件?
回答
沒有辦法創建這種所謂的「虛擬文件」。另一方面,通過FUSE在用戶空間中實現簡單的synthetic filesystem,您將成爲 能夠實現此行爲。此外,您不必使用c,即使對於諸如python的腳本語言, 也是綁定的。
編輯:而且有可能是這樣的東西已經存在:例如scriptfs。
恐怕這是不容易的。當一個進程讀取文件時,它使用系統調用,如open
,fstat
,read
。您需要攔截這些調用並輸出與返回內容不同的內容。這將需要編寫某種內核模塊,即使這樣它可能會變得不可能。
但是,如果你只需要在每次某個文件被訪問觸發的東西,你可以用inotifywait
玩:
#!/bin/bash
while inotifywait -qq -e access /path/to/file; do
echo "$(date +%s)" >> /tmp/access.txt
done
運行此作爲後臺進程,你會得到在每一次/tmp/access.txt
一個條目正在讀取您的文件。
沒有人提到過,但如果您可以選擇文件的路徑,則可以使用標準輸入/dev/stdin
。
每次的cat
程序運行時,它結束了讀取程序寫入的輸出這簡直是echo my input
這裏的管:
for i in 1 2 3; do
echo my input | cat /dev/stdin
done
輸出:
my input
my input
my input
這是一個great answer我下面複製。
基本上,named pipes可以讓你在腳本中做到這一點,並且Fuse讓我們在Python中輕鬆做到這一點。
您可能正在尋找一個named pipe。
mkfifo f
{
echo 'V cebqhpr bhgchg.'
sleep 2
echo 'Urer vf zber bhgchg.'
} >f
rot13 < f
寫入管道不會啓動偵聽程序。如果你想在一個循環中處理輸入,你需要保持一個監聽程序的運行。
while true; do rot13 <f >decoded-output-$(date +%s.%N); done
請注意,寫入管道的所有數據都會合並,即使有多個進程正在寫入。如果多個進程正在讀取,則只有一個獲取數據。所以管道可能不適合併發情況。
一個已命名的套接字可以處理併發連接,但這超出了基本shell腳本的功能。
在比例尺最複雜的一端是custom filesystems,它允許您設計和安裝文件系統,其中每個文件系統都會在程序中觸發一個函數。最小投資是幾十行非平凡編碼,例如Python。如果您只想在讀取文件時執行命令,則可以使用scriptfs或fuseflt。
- 1. 如何創建虛假/「虛擬」文件?
- 2. 使用Linux的Azure命令行工具創建虛擬機
- 3. 如何使用命令行在ubuntu中創建虛擬機
- 4. 誰在Linux中創建虛擬內存?
- 5. 如何創建虛擬可變文件?
- 6. 如何創建虛擬文件?
- 7. 如何在java中創建grep命令作爲linux grep命令
- 8. Linux:創建mmap()虛擬文件(例如SPI存儲器)
- 9. SQL:命令創建虛擬行如果不存在
- 10. Linux在x86-64中如何支持超過512GB的虛擬地址範圍?
- 11. 創建虛擬接口的Linux
- 12. 如何創建UNIX/Linux命令?
- 13. 如何在Java中創建虛擬文件列表?
- 14. 如何在clang中爲代碼完成創建虛擬文件
- 15. pyvmomi python:如何在特定文件夾中創建虛擬機
- 16. 如何在Linux虛擬橋
- 17. 如何使用bash命令在Windows 10中創建和激活虛擬環境
- 18. Linux中的「虛擬文件夾」
- 19. 創建一個大的虛擬文件
- 20. 如何從IIS 8.5中的文件創建虛擬目錄
- 21. 如何在linux上創建虛擬CAN端口? (C++)
- 22. 程序如何創建虛擬硬件?
- 23. 虛擬化支持x86 debugctl
- 24. Android支持虛擬內存
- 25. 如何在linux中創建我自己的命令
- 26. GCC是否支持命令文件
- 27. 「virsh list」命令沒有顯示由「qemu-system-x86_64」命令創建的虛擬機
- 28. 創建Eclipse SVN「虛擬分支」?
- 29. 在EJB中創建臨時文件或虛擬文件
- 30. 如何創建虛擬設備,如bitname和交鑰匙linux
謝謝,scriptfs看起來正是我要找的:-) – 2014-09-01 07:04:32
然後,什麼是'cat/proc/cpuinfo'? – 2015-04-24 04:34:02
@MichaelCole:cpuinfo不是一個孤立的文件,它是proc文件系統的一部分。另一個區別是procfs在內核中實現,而這個問題需要用戶空間的一個解決方案。 – marbu 2015-04-24 07:10:33