1. 程式人生 > >Linux入門基礎認知2

Linux入門基礎認知2

入門基礎 lib 多個 local bing 標準輸入 pac 重啟 如果

文件系統:按名存取文件

  • 文件和目錄被組織成一個單根倒置樹結構

    • 目錄:目錄並非文件夾,而是路徑映射

  • 文件系統從根目錄開始,用“/”表示;根文件系統(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

  1. 分配一個空閑的inode號,在inode表中生成新條目

  2. 在目錄中創建一個目錄項,將名稱與inode編號關聯

  3. 拷貝數據生成新的文件

rm和inode

  1. 鏈接數遞減,從而釋放inode號可以被重新使用

  2. 把數據塊放在空閑列表中

  3. 刪除目錄項

rm的數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋

mv和inode

如果mv命令的目標和源在相同的文件系統,

  1. 用新的文件名創建對應的目錄項

  2. 刪除舊的目錄條目對的舊的文件名

不影響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可以被重定向到文件

命令 操作符號 文件名

支持的操作符號包括:

    1. >  >> 把STDOUT重定向到文件

    2. 2> 2>> 把STDERR重定向到文件

    3. &> &>> (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