一、Linux文件系統(tǒng)結(jié)構(gòu)
???????文件和目錄被組織成一個(gè)單根倒置樹(shù)結(jié)構(gòu),從根目錄下開(kāi)始,用“/”表示,根文件系統(tǒng)(rootfs):root filesystem路徑為分隔的 /。

- /boot:引導(dǎo)文件存放目錄,內(nèi)核文件(vmlinuz)、引導(dǎo)加載器(bootloader, grub)都存放于此目錄
- /bin:所有用戶使用的基本命令;不能關(guān)聯(lián)至獨(dú)立分區(qū),OS啟動(dòng)即會(huì)用到的程序
- /sbin:管理類的基本命令;不能關(guān)聯(lián)至獨(dú)立分區(qū),OS啟動(dòng)即會(huì)用到的程序
- /lib:?jiǎn)?dòng)時(shí)程序依賴的基本共享庫(kù)文件以及內(nèi)核模塊文件(/lib/modules)
- /lib64:專用于x86_64系統(tǒng)上的輔助共享庫(kù)文件存放位置
- /etc:配置文件目錄
- /home/USERNAME:普通用戶家目錄
- /root:管理員的家目錄
- /usr:存放所有命令、庫(kù)、手冊(cè)頁(yè)
- /dev:存放設(shè)備文件
- /var:包含經(jīng)常發(fā)生變動(dòng)的文件,如郵件、日志文件、計(jì)劃任務(wù)等
- /tmp:存放臨時(shí)文件
- /run:存放自系統(tǒng)啟動(dòng)以來(lái)描述系統(tǒng)信息的文件。
二、文件元數(shù)據(jù)
文件有兩類數(shù)據(jù):
元數(shù)據(jù):metadata
數(shù)據(jù):data
???????元數(shù)據(jù)包含屬性(Mode)、所有者信息(owner info)、大?。⊿ize)、時(shí)間戳(Timestamps)。
命令名稱:stat
命令所在路徑:/bin/stat
執(zhí)行權(quán)限:所有用戶
功能描述:顯示文件的元數(shù)據(jù)信息
語(yǔ)法:stat [-c] 文件名
選項(xiàng):
-c 自定義輸出格式
%a 以八進(jìn)制格式顯示文件訪問(wèn)權(quán)限
%A 以可讀形式顯示訪問(wèn)權(quán)限
范例1:
顯示文件的元數(shù)據(jù)信息
命令:stat anaconda-ks.cfg
執(zhí)行結(jié)果:
File: ‘a(chǎn)naconda-ks.cfg’
Size: 1419 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574992 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-06 12:10:57.881048189 +0800
Modify: 2020-04-06 12:10:57.885048189 +0800
Change: 2020-04-06 12:10:57.885048189 +0800
Birth: -
輸出解釋:
File:文件名
Size:文件大?。▎挝唬築)
Blocks:文件所占扇區(qū)個(gè)數(shù),為8的倍數(shù)(通常的 Linux 的扇區(qū)大小為 512 B,連續(xù)八個(gè)扇區(qū)組成一個(gè)block)
IO Block:每個(gè)數(shù)據(jù)塊的大小(單位:B)
regular file:普通文件(此處顯示文件的類型)
Inode:文件的Inode號(hào)
Links:硬鏈接次數(shù)
Access:權(quán)限
Uid:(屬主id/屬主名)
Gid:(屬組id/屬組名)
Access:最近一次訪問(wèn)時(shí)間
Modify:內(nèi)容/數(shù)據(jù)改動(dòng)時(shí)間
Change:屬性改動(dòng)時(shí)間
命令名稱:touch
命令所在路徑:/bin/touch
執(zhí)行權(quán)限:所有用戶
功能描述:創(chuàng)建空文件,刷新時(shí)間戳
語(yǔ)法:touch [-a] 文件名
選項(xiàng):
-a 僅改變 atime和ctime
-m 僅改變mtime和ctime
范例1:
創(chuàng)建一個(gè)空文件
命令:touch newfile;stat newfile
執(zhí)行結(jié)果:
File: ‘newfile’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 33638660 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-10 14:06:46.891046046 +0800
Modify: 2020-04-10 14:06:46.891046046 +0800
Change: 2020-04-10 14:06:46.891046046 +0800
Birth: -
范例2:
更新文件的時(shí)間戳信息
命令:touch newfile;stat newfile
執(zhí)行結(jié)果:
File: ‘newfile’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 33638660 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-10 14:06:59.701046720 +0800
Modify: 2020-04-10 14:06:59.701046720 +0800
Change: 2020-04-10 14:06:59.701046720 +0800
Birth: -
對(duì)比范例1的執(zhí)行結(jié)果發(fā)現(xiàn)時(shí)間戳信息已被刷新
三、文件鏈接
硬鏈接,并列關(guān)系,不同名稱且獨(dú)立,不能跨設(shè)備(分區(qū))
軟鏈接,類似Windows的快捷方式,刪除對(duì)原文件不會(huì)產(chǎn)生影響
命令名稱:ln
命令所在路徑:/bin/ln
執(zhí)行權(quán)限:所有用戶
功能描述:創(chuàng)建文件鏈接
語(yǔ)法:ln [-sf] 原始文件名 鏈接文件名
選項(xiàng):
-s 創(chuàng)建一個(gè)符號(hào)鏈接
-f 強(qiáng)制,創(chuàng)建鏈接文件時(shí)如已存在則覆蓋
范例1:
創(chuàng)建一個(gè)硬鏈接
命令:cd /etc;ln hosts hosts.hard
ls -l hosts
執(zhí)行結(jié)果:
-rw-r--r--. 2 root root 158 6月 7 2013 hosts
從執(zhí)行結(jié)果可以看到創(chuàng)建時(shí)原始文件的鏈接數(shù)遞增+1
嘗試刪除原始文件,查看鏈接文件內(nèi)容是否依舊存在。
命令:rm -f hosts(刪除前通過(guò)cp命令進(jìn)行文件備份)
cat hosts.hard
執(zhí)行結(jié)果:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
從上述執(zhí)行結(jié)果可以看到原始文件即使被刪除,硬鏈接文件不會(huì)受到影響。
范例2:
創(chuàng)建一個(gè)軟鏈接
命令:cd /root;ln -s newfile newfile.link
ls -l newfile.link;ls -l newfile
執(zhí)行結(jié)果:
lrwxrwxrwx. 1 root root 7 4月 10 14:27 newfile.link -> newfile
-rw-r--r--. 1 root root 0 4月 10 14:30 newfile
從執(zhí)行結(jié)果可以看到為newfile創(chuàng)建軟鏈接文件newfile.link,鏈接數(shù)不會(huì)遞增。
嘗試刪除原始文件,查看鏈接文件內(nèi)容是否依舊存在。
命令:rm -f newfile
cat newfile.link
執(zhí)行結(jié)果:
cat: newfile.link: 沒(méi)有那個(gè)文件或目錄
從上述執(zhí)行結(jié)果可以看到原始文件被刪除,軟鏈接文件將會(huì)受到影響。
通過(guò)實(shí)驗(yàn)操作,得出硬鏈接和軟鏈接區(qū)別如下:
1.本質(zhì):硬鏈接同一個(gè)多個(gè)名字,軟鏈接不同文件
2.跨分區(qū),硬鏈接不支持跨設(shè)備
3.目錄,硬鏈接不支持對(duì)目錄創(chuàng)建
4.相互關(guān)系,硬鏈接為平等關(guān)系,軟鏈接有依賴關(guān)系
5.inode號(hào)
6.鏈接數(shù),軟鏈接不會(huì)增長(zhǎng)鏈接數(shù)
7.路徑,軟鏈接原始文件路徑相當(dāng)于鏈接文件,硬鏈接相對(duì)于當(dāng)前目錄
8.文件類型,軟鏈接為l,硬鏈接同原始文件
四、文件管理常見(jiàn)命令
1.pwd
命令所在路徑:/bin/pwd
執(zhí)行權(quán)限:所有用戶
功能描述:顯示當(dāng)前的工作目錄
范例1:
顯示當(dāng)前所在的工作目錄
命令:pwd
執(zhí)行結(jié)果:
/root
2.cd
命令所在路徑:/bin/cd
執(zhí)行權(quán)限:所有用戶
功能描述:切換目錄
范例1:
切換到指定的目錄
命令:cd /etc
范例2:
切換到上一次目錄
命令:cd -
范例3:
切換到上級(jí)目錄
命令:cd ..
3.mkdir
命令所在路徑:/bin/mkdir
執(zhí)行權(quán)限:所有用戶
功能描述:創(chuàng)建文件夾
語(yǔ)法:mkdir [-pv] 文件夾名
選項(xiàng):
-p 多級(jí)文件夾
-v 顯示詳細(xì)的輸出
范例1:
創(chuàng)建一個(gè)指定名稱的文件夾
命令:mkdir newdir
范例2:
創(chuàng)建多級(jí)目錄
命令:mkdir -p dir1/dir2
范例3:
創(chuàng)建目錄并顯示詳細(xì)的過(guò)程
命令:mkdir -pv dir3/dir4/dir5
執(zhí)行結(jié)果:
mkdir: created directory ‘dir3’
mkdir: created directory ‘dir3/dir4’
4.rm
命令所在路徑:/bin/rm
執(zhí)行權(quán)限:所有用戶
功能描述:刪除文件/文件夾
語(yǔ)法:rm [-rf] 文件/文件夾
選項(xiàng):
-r 刪除文件夾
-f 強(qiáng)制執(zhí)行
范例1:
刪除一個(gè)指定名稱的文件
命令:rm newfile
rm: remove regular empty file ‘newfile’? y
范例2:
刪除一個(gè)指定名稱的文件夾
命令:rm -r dir3
rm: descend into directory ‘dir3’? y
rm: remove directory ‘dir3/dir4’? y
范例3:
強(qiáng)制刪除一個(gè)指定名稱的文件
命令:rm -f newfile.link
5.rmdir
命令所在路徑:/bin/rmdir
執(zhí)行權(quán)限:所有用戶
功能描述:刪除空文件夾
語(yǔ)法:rmdir 文件夾
選項(xiàng):
-p 遞歸刪除文件夾
范例1:
刪除一個(gè)空文件夾
命令:rmdir dir1
6.ls
命令所在路徑:/bin/ls
執(zhí)行權(quán)限:所有用戶
功能描述:列出文件的信息
語(yǔ)法:ls [-alh] [-Rt] 文件/文件夾
選項(xiàng):
-a 顯示所有文件,包含隱藏文件
-l 以長(zhǎng)格式顯示文件詳細(xì)信息
-h 以方便查看的形式顯示文件大小
-R 遞歸顯示
-t 以最新的內(nèi)容修改時(shí)間作為條件倒序顯示
范例1:
查看指定文件的詳細(xì)信息
命令:ls -l anaconda-ks.cfg
執(zhí)行結(jié)果:
-(文件類型,普通文件)rw-------(權(quán)限). 1(引用次數(shù)) root(所有者) root(所屬組) 1419(文件大小,單位Bytes) Apr 6 12:10(默認(rèn)日期時(shí)間) anaconda-ks.cfg(文件名)
范例2:
遞歸顯示/etc目錄下的文件/文件夾
命令:ls -R /etc
執(zhí)行結(jié)果:
/etc:
adjtime
aliases
aliases.db
alternatives
anacrontab
asound.conf
audisp
audit
bash_completion.d
bashrc
……
7.file
命令所在路徑:/bin/file
執(zhí)行權(quán)限:所有用戶
功能描述:顯示文件的類型
語(yǔ)法:file [-bL] 文件名稱
選項(xiàng):
-b 列出文件辨識(shí)結(jié)果時(shí),不顯示文件名稱
-L 查看指定軟鏈接對(duì)應(yīng)文件的文件類型
范例1:
查看指定文件的類型
命令:file anaconda-ks.cfg
執(zhí)行結(jié)果:
anaconda-ks.cfg: ASCII text
8.cp
命令所在路徑:/bin/cp
執(zhí)行權(quán)限:所有用戶
功能描述:拷貝文件/文件夾
語(yǔ)法:cp [-rpa] 源文件/文件夾 目標(biāo)文件/文件夾
選項(xiàng):
-r 拷貝目錄
-a 歸檔,相當(dāng)于-dR --preserv=all
-p 等同于 --preserve=mode,ownership,timestamps
范例1:
將一個(gè)文件拷貝到指定目錄下
命令:cp /etc/profile /tmp
范例2:
將一個(gè)文件夾拷貝到指定目錄下
命令:cp -r /etc/ /tmp
9.mv
命令所在路徑:/bin/mv
執(zhí)行權(quán)限:所有用戶
功能描述:移動(dòng)文件/文件夾位置或重命名
語(yǔ)法:mv [-b] 源文件/文件夾 目標(biāo)位置或新名稱
選項(xiàng):
-b 目標(biāo)存在,覆蓋前先備份,形式為filename ~
范例1:
將一個(gè)文件移動(dòng)到指定目錄下
命令:mv newfile /opt
范例2:
重命名一個(gè)文件
命令:mv newfile1 newfile2
五、vi/vim文本編輯器
三種工作模式:
- 命令(Normal)模式:默認(rèn)模式,移動(dòng)光標(biāo),剪切/粘貼文本
- 插入(Insert)或編輯模式:修改文本
- 擴(kuò)展命令(extended command )模式:保存,退出等
命令名稱:vi
命令所在路徑:/bin/vi
執(zhí)行權(quán)限:所有用戶
功能描述:編輯文件內(nèi)容
語(yǔ)法:vi [-br] 文件名
選項(xiàng):
-b 二進(jìn)制方式打開(kāi)文件
-r 恢復(fù)之前記錄的會(huì)話
查找并替換功能
格式:s/要查找的內(nèi)容/替換為的內(nèi)容/修飾符
修飾符:
i 忽略大小寫(xiě)
g 全局替換,默認(rèn)情況下,每一行只替換第一次出現(xiàn)
gc 全局替換,每次替換前詢問(wèn)
范例1:
查找替換刪除/tmp/profile文件中行首的空白字符
命令:vi /tmp/profile
%s/^[[:space:]]\+//
33 substitutions on 33 lines
輸入:wq 保存退出
范例2:
vim中設(shè)置TAB縮進(jìn)4個(gè)字符
命令:vi .vimrc
set ts=4
輸入:wq 保存退出