在 Linux 中實現 Shell 檔案保護
概述
本文將向您展示如何使用 Linux 檔案系統許可權保護您的檔案免受未經授權的訪問,以及如何使用 chmod 命令為特定使用者或使用者組設定許可權。
除了幫助我們保護檔案免受誤用的 Linux 檔案許可權機制之外,大多數 Linux shell 都有內建的安全措施來防止意外覆蓋檔案。我們將在本文中介紹其中的一些。
使用 noclobber 保護檔案
所有 POSIX shell 實現都支援 noclobber 選項。如果您使用的是 shell 指令碼,這意味著如果您嘗試覆蓋現有目錄,shell 將會報錯。
預設情況下,由於傳統原因,noclobber 選項預設處於停用狀態。要為 bash 或 ksh 啟用它,請執行以下命令:
set -o noclobber
要在執行指令碼時使用 csh 或 tcsh,我們首先需要設定一個名為“csh”的環境變數
set noclobber
如果我們設定了 noclobber 選項,那麼當我們嘗試覆蓋檔案時,Bash 將會報錯:“檔案已存在”。
set -o noclobber touch temp.txt # Create temp.txt file echo "Hello" > temp.txt # Try to overwrite file contents -bash: temp.txt: cannot overwrite existing file
使用 cshell(或 tcsh)時,錯誤訊息會稍微複雜一些:
set noclobber touch temp.txt # Create temp.txt file echo "Hello" > temp.txt # Try to overwrite file contents temp.txt: File exists
我們應該注意,我們沒有透過重定向來防止檔案覆蓋。如果您使用命令列工具 rm 刪除檔案,使用 shell 運算子“>>”將其輸出重定向到另一個檔案,或從應用程式內部寫入檔案,那麼一切都會正常。
覆蓋保護
我們可以透過停用 shell 選項或臨時覆蓋 shell 選項來停用 noclobber 限制,從而恢復到預設行為。例如,如果我們想為當前會話停用 noclobber 限制,我們可以執行以下命令:
set +o noclobber
“在 tcsh/csh 中”,這意味著:
unset noclobber
要臨時覆蓋 noclobber 行為,我們的 shell 程序提供了特殊的重定向運算子:“>!” 和“>|”。讓我們使用 bash 展示我們最初的示例:
set -o noclobber touch temp.txt # Create temp.txt file echo "Hello" > temp.txt # Try to overwrite file contents -bash: temp.txt: cannot overwrite existing file echo "Hello" >| temp.txt # Overwrite file contents using override operator
使用 tcsh 時,我們只需將“>|”替換為“>!”:
set noclobber touch temp.txt # Create temp.txt file echo "Hello" > temp.txt # Try to overwrite file contents temp.txt: File exists echo "Hello" >! temp.txt # Overwrite file contents using override operator
示例:截斷日誌檔案
我們可能希望使用此功能的一個示例是截斷日誌檔案。因此,日誌往往會被保持其內容的服務開啟。因此,我們通常無法刪除它們,因為作業系統會跟蹤開啟的檔案控制代碼。要截斷日誌,我們將 /dev/* 重定向到檔案:
/dev/null >| my_logfile.log
此解決方案還有一個額外的好處:當內容保持不變時,它不會更新修改日期。因此,如果您在 cron 中執行重定向並且內容保持為空,則修改日期將顯示指令碼最後一次更改。
如果您想使用命令列重定向方法,但不想使用 -s 標誌,另一個選擇是使用 truncate。下一個示例將與前一個示例具有相同的結果,它將檔案大小調整為零。
truncate -s 0 my_logfile.log
truncate (truncate) 函式還有一個優勢,因為它允許我們將日誌檔案調整到任何大小。下一個示例將我們的日誌檔案縮小到 50 MB:
truncate -s 50M my_logfile.log
結論
在這裡,我們討論了 noclobber 命令以及如何實現 shell 檔案保護。我們還介紹了使用 truncate 作為檔案大小調整的可選工具。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP