Linux入門基礎認知2
文件和目錄被組織成一個單根倒置樹結構
目錄:目錄並非文件夾,而是路徑映射
文件系統從根目錄開始,用“/”表示;根文件系統(rootfs):root filesystem
以. 開頭的文件為隱藏文件
文件的數據分兩種:
元數據(metadata):描述數據屬性的數據:文件名,大小,屬性,日期...例如: 人的身高體重
數據(data):文件內實實在在的數據
文件系統分層結構:LSB Linux Standard Base
FHS:Filesystem Hierarchy Standard
(例:磁盤被分為A,B兩個分區,一旦A被定義為根分區,B分區想要被訪問到,必須與根分區上已存在的某個目錄建立聯系,當作B分區的入口,才可以進行訪問)
文件名規則
文件名最多255個字節
包括路勁在內,文件名最長4095個字節。2^10*4=4k
(ANSI Color文件名顏色標準)藍色-->目錄,綠色-->可執行文件,紅色-->壓縮文件,淺藍色-->鏈接文件,紫色--> 套接字(socket)文件,灰色-->其他文件
標準Linux文件系統(主流文件系統如ext4,xfs),文件名稱大小寫敏感
文件系統結構
/boot:引導文件存放目錄,內核文件(vmlinuz),引導加載器(bootloader,grub),initramfs都存放於此目錄
/bin:存放供所有用戶使用的基本命令;OS啟動即使用的程序,不能關聯至獨立分區
/sbin:存放管理類的基本命令;OS啟動即使用的程序,不能關聯至獨立分區
/lib:啟動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄(Linux哲學,用文本文件存儲配置文件)
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點(例如,U盤使用時關聯到media上進行訪問)
/mnt:臨時文件系統掛載點
/dev:devices的簡寫,所有設備文件及特殊文件存儲位置
b:block device(塊設備)隨機訪問,例如磁盤
c:character device(字符設備)線性訪問,例如鍵盤
/opt:optional(可選的)第三方應用程序安裝目錄
/srv:services簡寫,系統上運行的服務用到的數據
/tmp:temporary簡寫,臨時文件位置(超過30天不使用的文件系統會自動刪除)
/usr:universal shared,read-only data 全局共享只讀數據
bin: 保證系統擁有完整功能而提供的應用程序
sbin:
lib:32位使用
lib64:只存在64位系統
include: C程序的頭文件(header files)
share:結構化獨立的數據,例如doc, man等
local:第三方應用程序的安裝位置,3rd party:bin, sbin, lib, lib64, etc, share
/var:variable data files(可變的數據存放)
cache:應用程序緩存數據目錄
lib:應用程序狀態信息數據(是data,不是庫文件)
local:專用於為/usr/local下的應用程序存儲可變數據;
lock: 鎖文件
log: 日誌目錄及文件
opt: 專用於為/opt下的應用程序存儲可變數據;
run: 運行中的進程相關數據,通常用於存儲進程pid文件
spool: 應用程序數據池
tmp: 保存系統兩次重啟之間產生的臨時數據
/proc:用於輸出內核與進程i西給相關的虛擬文件系統
/sys:用於輸出當前系統上硬件設備相關信息虛擬文件系統
/selinux:security enhanced Linux,selinux相關的安全策略等信息的存儲位置
絕大部分情況下,/selinux是關閉狀態,其太過嚴格
Linux上所有應用程序4類主要組成文件
二進制程序(應用程序):/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
庫文件:/lib,/lib64 ...
配置文件:/etc,/etc/DIRECTORY,...
幫助文件:/usr/share/man,/usr/share/doc...
Linux下的文件類型(元數據上的區分)
- :普通文件 file
d:目錄文件 directory
l:符號鏈接文件 symbolic link
b:塊設備 block device(隨機訪問的設備文件)
c:字符設備 character device(線性訪問對應的設備文件)
p:管道文件 pipe,FIFO(First In,First Out)。/先進後出叫棧/
s:套接字文件 socket
顯示當前工作目錄pwd
每個shell和系統進程都有一個當前的工作目錄
pwd:printing working directory 顯示當前的工作目錄
絕對路徑和相對路徑
絕對路徑:
以 / 開始
完整的文件的位置路徑
可用於任何想指定一個文件名的時候
相對路徑:
不以 / 開始
指定相對於當前工作目錄或某目錄的位置
可以作為一個簡短的形式指定一個文件名, 如 ./
基名:basename,一個文件路徑最右側文件名,
目錄名:dirname,除basename以外的全部叫目錄名
更改目錄
cd 改變目錄;(change directory)
使用絕對路經或者相對路徑
切換至父目錄: cd ..
切換至當前用戶主目錄: cd
切換至上一個工作目錄: cd -
命令ls
用法: ls [options] [files_or_dirs]
示例:
ls -a: 列出包含隱藏文件
ls -l :顯示額外的信息(metadate元數據) 、
ls -R: 遞歸顯示所有文件,包括子目錄下的子文件和子目錄...(一般使用tree)
ls -ld: -d 表示顯示路徑自身,通常與 -l 一起使用
例: ls -a ,ls -l
共10位,第一個字母代表文件類型,rwx 3個*3組表示,屬主/屬組/其他用戶 的使用權限
表示文件硬鏈接次數
表示屬主和屬組是誰
表示文件size,特殊文件顯示為2位
表示修改時間戳(modify time/mtime)和文件名
例:ls -ld
查看文件狀態
stat
文件:metadata, data
三個時間戳:
access time:訪問時間,atime,讀取文件內容
modify time: 修改時間, mtime,改變文件內容(數據)
change time: 改變時間, ctime,元數據發生改變
(數據改了元數據一定改變,元數據變了數據未必會變)
文件名通配符,glob,globing,wildcard
* 匹配零個或多個字符
? 匹配任何單個字符
[0-9] 匹配數字範圍
[a-z]:字母(不區分大小寫)
[A-Z]:字母(不區分大小寫)
[abcd] 匹配列表中的任何的一個字符
[^abcd] 匹配列表中的所有字符以外的字符(去反)
預定義的字符類:man 7 glob
[:digit:]:任意數字,相當於0-9
[:lower:]:任意小寫字母
[:upper:]: 任意大寫字母
[:alpha:]: 任意大小寫字母
[:alnum:]:任意數字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:標點符號
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:圖形字符
[:xdigit:]:十六進制字符
創建文件和刷新時間
touch命令:同時改3個時間戳;如果文件不存在,則創建一個空文件
touch [OPTION]... FILE...
-a 僅改變 atime和ctime 至當前時間
-m 僅改變 mtime和ctime 至當前時間
-t 指定atime和mtime的時間戳 [[CC]YY]MMDDhhmm[.ss]
-c 如果文件不存在,則不予創建
復制:cp [OPTION] 源 目標
-i:覆蓋前提示 –n:不覆蓋,註意兩者順序
-r, -R: 遞歸復制目錄及內部的所有內容
-a: 歸檔,相當於-dR --preserv=all
-d:--no-dereference --preserv=links 不復制原文件,只復制鏈接名
--preserv[=ATTR_LIST]
mode: 權限
ownership: 屬主屬組
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp
-v: --verbose,詳細信息
-f: --force
-u:--update 只復制源比目標更新文件或目標不存在的文件
--backup=numbered 目標存在,覆蓋前先備份加數字後綴
移動和重命名文件
mv命令常用option(選項):
-i: 交互式
-f: 強制
-t:源在後,目標位置在前
刪除
rm [OPTION]... FILE...(只刪除文件)
常用選項:
-i: 交互式
-f: 強制刪除
-r: 遞歸(想刪除文件夾時使用)
--no-preserve-root
示例:
rm -rf / (刪除根文件,即刪除全部數據)
目錄操作
tree 顯示目錄樹
-d:只顯示目錄
-L level:指定顯示層級數
-P pattern:只顯示由指定pattern匹配到的路徑
mkdir 創建目錄
-p:存在於不報錯,且可自動創建所需的各目錄(創建已買單傳的空目錄
-v:顯示詳細信息
-m MODE:創建目錄是直接指定權限
rmdir 刪除空目錄(很少用)
-p:遞歸刪除空父目錄(刪除一脈單傳的空目錄)
-v:顯示詳細信息
rm-r 遞歸刪除目錄樹(刪除非空目錄時使用)
PS:生產環境下在不100%明確自己在做什麽的時候不要刪除任何目錄(可以手動建立以回收站,使用mv指令移動到回收站中)
索引節點inode(index node)
inode(index node索引節點)表中包含文件系統所有文件列表
一個節點 (索引節點)是在一個表項,包含有關文件的信息( 元數據 ),包括:
文件類型,權限,UID,GID
鏈接數(指向這個文件名路徑名稱個數)
該文件的大小和不同的時間戳
指向磁盤上文件的數據塊指針
有關文件的其他數據
ls -i 顯示inode號
目錄
文件引用是一個inode號(跨文件系統/分區,inode號不能共享)
人是通過文件名來引用一個文件
一個目錄是目錄下的文件名和文件inode號之間的映射
cp和inode
分配一個空閑的inode號,在inode表中生成新條目
在目錄中創建一個目錄項,將名稱與inode編號關聯
拷貝數據生成新的文件
rm和inode
鏈接數遞減,從而釋放inode號可以被重新使用
把數據塊放在空閑列表中
刪除目錄項
rm的數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋
mv和inode
如果mv命令的目標和源在相同的文件系統,
用新的文件名創建對應的目錄項
刪除舊的目錄條目對的舊的文件名
不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據被移動
如果目標和源在一個不同的文件系統,mv相當於cp和rm 2步
硬鏈接和軟鏈接(符號鏈接)
硬鏈接 :不同的文件路徑指向同一個inode
ln filename [linkname]
創建硬鏈接會增加額外的記錄項來引用文件(增加inode的引用計數)
硬鏈接對應於同一文件系統同一個物理文件
目錄不支持硬鏈接
創建硬鏈接時鏈接數增加
刪除文件時:
rm命令減少硬鏈接的次數
文件要存在,至少有一個鏈接數
當鏈接數為0時,該文件被刪除
硬鏈接不能跨越驅動器或分區
符號鏈接/軟鏈接 :
ln -s filename [linkename]
(原始路徑,鏈接路徑)鏈接路徑不指向inode,而是指向原始路徑
一個符號鏈接指向另一個文件的路徑
ls -Id 顯示鏈接的名稱和引用的文件
軟鏈接可以對目錄進行
可以跨越分區
指向另一個文件的路徑;其大小為指向的了路徑字符串的長度,不增加或減少目標文件inode引用計數
標準輸入和輸出
程序 :指令 + 數據
讀入數據:Input
輸出數據:Output
打開的文件都又一個文件描述符(fd:file descriptor)
linux個程序提供3種I/O設備
input,缺省。標準輸入:(STDIN) - 0 默認接受來自鍵盤的輸入
/dev/stdin,keyboard
output,缺省。標準輸出:(STDOUT)- 1 默認輸出到終端窗口
/dev/stdout,terminal monitor
error,缺省。 標準錯誤:(STDERR)- 2 默認輸出到終端
/dev/stdout,
I/O重定向:改變默認位置
把輸出和錯誤重新向到文件
STDOUT和STDERR可以被重定向到文件
命令 操作符號 文件名
支持的操作符號包括:
> >> 把STDOUT重定向到文件
2> 2>> 把STDERR重定向到文件
&> &>> (COMMAND > /path/to/file.out 2>&1 , COMMAND >> /path/to/file.out 2>&1)把所有輸出重定向到文件
> 覆蓋文件,>>不覆蓋文件,後面追加
標準輸出和錯誤輸出各自定向至不同位置:COMMAND > /path/to/file.out 2> /path/to/error.out
合並多個程序的STDOUT:(cal 2007;cal 2008)> all.txt
文件可以包含多種類型的數據
檢查文件的類型,然後確定適當的打開命令或應用程序使用
file [options] <filename>...
管道(使用符號“|”表示)用來連接命令
命令1 | 命令2 | 命令3 | …
將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN
STDERR默認不能通過管道轉發,可利用2>&1 或 |& 實現
最後一個命令會在當前shell進程的子shell進程中執行用來
組合多種工具的功能
ls | tr 'a-z' 'A-Z'
Linux入門基礎認知2