目的:了解Linux文件系統
Linux系統常用的命令
# uname (Unix Name)系統相關的命令
# 查看Linux系統的內核版本
uname -r
系統環境變量PATH
# 顯示系統變量的環境,一般配置可執行文件的路徑,這樣在執行可執行文件的時候不需要輸入全路徑了
echo $PATH
文件與目錄管理
目錄相關的操作
# cd(change directory) 切換目錄
cd /etc
# pwd(print working directory) 顯示當前的工作路徑
pwd -P // 顯示文件的物理物理,即使是快捷鍵
# mkdir 創建新的文件夾
# -m 設置創建文件夾的權限,不需要看預設權限umask
mkdir -m 777 hello
# -p 創建多個文件夾
mkdir -p hello/world
# rmdir 刪除空的文件夾
# -p 連同父文件夾如果是空的也刪除
rmdir -p hello/world # 如果hello也是空文件夾,hello文件夾也會被刪除
文件的相關操作
# ls list 顯示文件夾下的文件詳細內容
ls -a // 全部文檔,連同隱藏文件
ls -A // 全部文檔,連同隱藏文件(除了.和..)
ls -d // 僅列出目錄本身,而不是列出目錄內的文件
ls -f // 直接列出結果,而不進行排序(ls默認按照文件名排序)
ls -F // 根據文件、目錄等信息,給予附加數據結構表示文件類型
ls -h // 將文件大小較易人類閱讀的方式顯示(KB,MB,GB)
ls -i // 列出inode號
ls -l // 長數據串行,包含文件的屬性與權限等數據
ls -n // 列出uid和gid而非使用者與群組的名稱
ls -r // 將排序結果反向輸出
ls -R // 連同字目錄內容一起列出,相當於該目錄下的所有文件都會列出
ls -S // 以文件大小排序,而非文件名進行排序
ls -t // 以時間排序,而非文件名進行排序
ls --color=never // 不要按照文件的特性給於顏色顯示
ls --color=always // 顯示顏色
ls --color=auto // 讓系統根據設定來判斷是否顯示顏色
ls --full-time // 以完整的時間格式輸出
ls --time={atime,ctime} // 輸出access時間或改變權限屬性時間(ctime)而非內容變更時間(modification time) 已被-c和-u替換
# cp 復制 注意如果src有多個來源,則目標文件必須是個文件夾 cp -a src1 src2 des
cp -a src des // 相當於-pdr的意思
cp -d src des // 如果復制的src是鏈接文件的屬性(link file), 則復制鏈接文件屬性而非文件本身
cp -f src des // force,如果des目標文件已經存在且無法打開,則移除后在嘗試一次cp
cp -i src des // 如果目標文件des已經存在時,在覆蓋時會先詢問動作的進行
cp -l src des // 進行硬連接(hard link)的連接文件建立,而非文件本身
cp -p src des // 連同文件的屬性一起復制過去,而非默認屬性(備份常用)
cp -r src des // 遞歸持續復制,用於目錄的復制行為
cp -s src des // 復制成為符號鏈接文件(symbolic link),即快捷鍵
cp -u src des // 如果des比src舊,則更新des目標文件
# rm 刪除
rm -f src // 強制刪除,不管文件是否存在
rm -i src // 詢問方式刪除
rm -r src // 遞歸刪除
# mv 移動目錄或者更改文件名
mv -f src des // 如果目標文件存在,直接覆蓋
mv -i src des // 如果目標文件存在,就會詢問覆蓋
mv -u src des // 如果目標文件已存在,且source文件新,才會更新(update)
# basename 查看文件名
# dirname 查看文件所在目錄
文件查看
# cat 由第一行開始顯示文件內容
# tac 從最后一行開始顯示,可以看出tac是cat倒着寫
# nl 顯示的時候,順道輸出行號
# more 一頁一頁的顯示文件內容
# less 和 more類似,但是比more更好的是,他可以往前翻頁
# less 中常用的快捷方式
# # 空格鍵 向下翻頁
# # pagedown 向下翻頁
# # pageup 向上翻頁
# # /字符串 向下搜索[字符串]功能
# # ?字符串 向上搜索[字符串]功能
# # n 重復前一個搜尋(與/或?有關)
# # N 反向的重復前一個搜尋(與/或?有關)
# # q 離開less程序
# head 只看頭幾行
# tail 只看尾幾行
# od 以二進制的方式讀取文件內容
補充說明
# Linux系統下有很多的時間參數,主要介紹下面三個參數:
# modification time(mtime):當文件的內容更改時會更新這個時間,內容指的是文件的內容,而不是文件的屬性和權限
# status time(ctime):當文件的狀態改變時會更新這個時間,如文件的權限和屬性被更改的時候會更新這個時間
# access time(atime):當文件被訪問的時候會更新這個時間
# 使用touch命令可以修改文件的上述時間
# touch -a file // 僅修改access time
# touch -c file // 僅修改文件的時間,如果文件不存在則不建立新文件
# touch -d file // 后面跟可以接欲修訂的日期而不用目前的日期,也可以使用--date='日期或時間'
# touch -m file // 僅修訂mtime
# touch -t file // 后面跟可以接欲修訂的日期而不用目前的日期,格式為[YYMMDDhhmm]
文件隱藏屬性
# chattr (change attribute)設置文件隱藏的屬性
# + 增加一個特殊的參數,其他原本存在的參數不變
# - 移除一個特殊的參數,其他原本存在的參數不變
# = 設定一定,且僅有后面接的參數
chattr + A // 當設定A的屬性,如果你存取此文件(或目錄)時,他的訪問時間atime將不會被修改,可以避免I/O較慢的機器過度的存取磁盤
chattr + S // 文件一般是異步的寫入磁盤,當設置這個屬性的時候,文件有任何的修改會同步的寫入磁盤
chattr + a // 當設定a的屬性,這個文件將只能增加數據,而不能刪除或者修改數據,只有root用戶才可以設定該屬性
chattr + c // 這個屬性讀取時會自動解壓,存儲時會先壓縮在寫入磁盤
chattr + d // 設置這個屬性的文件(或目錄)在dump時,不會被備份
chattr + i // 可以讓文件不能被刪除/改名/設置連接點也無法寫入/新增資料
chattr + s // 設置這個屬性的文件如果被刪除了,將會完全的移除硬盤,無法找回
chattr + u // 和s屬性相反,如果文件被刪除了,其實數據內容還在磁盤上,可以用來找回數據
# lsattr 顯示文件的隱藏屬性
lsattr -a file // 將隱藏文件的屬性也顯示出來
lsattr -d dir // 如果接的是目錄,僅列出目錄本身的屬性而非目錄內的文件名
lsattr -R dir // 連同子目錄的數據也一並列出來
SUID SGID等相關權限需補充
磁盤與文件系統管理
分區和文件系統
一般磁盤分區完要進行格式化,這是因為不同的操作系統設定的文件屬性/權限不同,為了存放這些文件需要的數據,因此需要將分割槽進行格式化,使得操作系統可以使用格式化后的文件系統.傳統磁盤與文件系統之應用中,一個分割槽就只能被格式化成為一個文件系統,所以一般可以說一個文件系統就是一個分區.但是可以利用LVM與軟件磁盤陣列,這些技術可以將一個分割槽格式化為多個文件系統.
Linux中的block塊
superblock
# 記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統的格式與相關信息等
# dumpe2fs dump ext2/ext3/ext4.. file system
dumpe2fs -h /dev/sda5 // 查看文件系統的信息
inode
記錄文件的屬性,一個文件占用一個inode,同時記錄這文件的數據所在的block號碼
block
實際記錄文件的內容,如果文件太大時,會占用多個block塊.