擁有數百臺服務器來來往往頻率很高,編輯/etc/fstab
來添加新的文件系統肯定是一個令人討厭的約束。
如果你正在做的是在服務器上列出文件和修改時間,那麼smbclient(1)
命令是一個很好的起點。 smbclient(1)
很像SMB和CIFS共享的FTP接口。命令行選項-c
可讓您運行特定命令;是這樣的:
smbclient //$servername/$sharename -c "dir path/to/directory/"
如果你將要與文件比剛剛上市的修改時間做更多,然後安裝共享作爲文件系統會降低連接和身份驗證請求的數目,也許會讓解析stat(2)
輸出比解析數據的純文本表示要容易得多。
如果您想遵循安裝文件系統的路線,請首先拆分腳本。
一小塊應該帶一個servername,共享路徑和一個可選的安裝路徑;它將(服務器,共享,路徑)添加到/etc/fstab
。
這部分可能是setuid root。 (這是危險的,但拍運行整個PHP腳本作爲根。)
或者,你可以用acl(5)
支持掛載文件系統並添加新的訪問控制項:
mount/-oremount,acl
setfacl -m www::rw /etc/fstab
現在www
用戶修改/etc/fstab
文件的權限。 (請注意,我並沒有實際測試addmntent(3)
時的ACL已被用來給/etc/fstab
用戶的寫權限。)一定要修改/etc/fstab
總是安裝/
與acl
支持,所以此工程在重新啓動。
可以使用addmntent(3)
C庫函數中添加新條目/etc/fstab
。如果你打算使用setuid root可執行文件,我會選擇C語言,我可能會選擇C語言,因爲addmntent(3)
已經知道如何正確地將格式化的裝入條目寫入/etc/fstab
。
包含user
和noauto
選項,以便您的腳本可以運行unprivileged,並仍然需要它們時裝載共享。
爲什麼不使用'/ etc/fstab'來啓動文件系統? – sarnold
我可以,但我仍然會被困在安裝一切手動,這將是一個問題,當我突然有100多個不同的窗口服務器,我需要處理。理想情況下,我希望我的php腳本從我們的服務器庫存數據庫中讀取windows服務器的名稱,檢查所需文件是否位於該服務器上的正確文件夾中(如果需要,可以通過掛載然後卸載該文件夾,或直接訪問該文件夾在服務器上如果可能的話),然後繼續下一個。 – Lobo