Linux 文件系統(tǒng)基礎(chǔ)

1、Linux發(fā)行版系統(tǒng)目錄名稱命名規(guī)則以及用途

http://www.pathname.com/fhs/

目錄 描述
/bin 所有用戶可用的基本命令程序文件;
/sbin 供系統(tǒng)管理使用的工具程序;
/boot 引導(dǎo)加載器必須用到的各靜態(tài)文件:kernel, initramfs(initrd), grub等;
/dev 存儲(chǔ)特殊文件或設(shè)備文件; 設(shè)備有兩種類型:字符設(shè)備(線性設(shè)備)、塊設(shè)備(隨機(jī)設(shè)備);
/etc: 系統(tǒng)程序的配置文件,只能為靜態(tài);
/home 普通的家目錄的集中位置;一般每個(gè)普通用戶的家目錄默認(rèn)為此目錄下與用戶名同名的子目錄,/home/USERNAME;
/root 管理員的家目錄;可選;
/lib 為系統(tǒng)啟動(dòng)或根文件系統(tǒng)上的應(yīng)用程序(/bin, /sbin等)提供共享庫,以及為內(nèi)核提供內(nèi)核模塊;
/lib64 64位系統(tǒng)特有的存放64位共享庫的路徑;
/media 便攜式設(shè)備掛載點(diǎn),cdrom, floppy等;
/mnt 其它文件系統(tǒng)的臨時(shí)掛載點(diǎn);
/opt 附加應(yīng)用程序的安裝位置;可選路徑;
/srv 當(dāng)前主機(jī)為服務(wù)提供的數(shù)據(jù);
/tmp 為那些會(huì)產(chǎn)生臨時(shí)文件的程序提供的用于存儲(chǔ)臨時(shí)文件的目錄;可供所用戶執(zhí)行寫入操作;有特殊權(quán)限;
/usr 全局共享的只讀數(shù)據(jù)路徑;
/usr/local 讓系統(tǒng)管理員安裝本地應(yīng)用程序;也通常用于安裝第三方程序;
/var 存儲(chǔ)常發(fā)生變化的數(shù)據(jù)的目錄;
/proc 基于內(nèi)存的虛擬文件系統(tǒng),用于為內(nèi)核及進(jìn)程存儲(chǔ)其相關(guān)信息;它們多為內(nèi)核參數(shù),例如net.ipv4.ip_forward, 虛擬為net/ipv4/ip_forward, 存儲(chǔ)于/proc/sys/, 因此其完整路徑為/proc/sys/net/ipv4/ip_forward;
/sys sysfs虛擬文件系統(tǒng)提供了一種比proc更為理想的訪問內(nèi)核數(shù)據(jù)的途徑;其主要作用在于為管理Linux設(shè)備提供一種統(tǒng)一模型的的接口;

2、stat 命令查看文件的元數(shù)據(jù)信息

$ stat test.txt          
  File: test.txt
  Size: 5               Blocks: 8          IO Block: 4096   regular file  
Device: fd00h/64768d    Inode: 917656      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/      hx)   Gid: ( 1000/      hx)
Access: 2019-12-03 17:58:12.144463726 +0800
Modify: 2019-12-03 17:58:40.491315603 +0800
Change: 2019-12-03 17:58:40.491315603 +0800
 Birth: -

簡(jiǎn)單的介紹一下stat命令顯示出來的文件其他信息:

  • File:顯示文件名
  • Size:顯示文件大小
  • Blocks:文件使用的數(shù)據(jù)塊總數(shù)
  • IO Block:IO塊大小
  • regular file:文件類型(常規(guī)文件)
  • Device:設(shè)備編號(hào)
  • Inode:Inode號(hào)
  • Links:鏈接數(shù)
  • Access:文件的權(quán)限
  • Gid、Uid:文件所有權(quán)的Gid和Uid。

Linux下的三個(gè)時(shí)間:

  1. Access Time:簡(jiǎn)寫為atime,表示文件的訪問時(shí)間。當(dāng)文件內(nèi)容被訪問時(shí),更新這個(gè)時(shí)間
  2. Modify Time:簡(jiǎn)寫為mtime,表示文件內(nèi)容的修改時(shí)間,當(dāng)文件的數(shù)據(jù)內(nèi)容被修改時(shí),更新這個(gè)時(shí)間。
  3. Change Time:簡(jiǎn)寫為ctime,表示文件的狀態(tài)時(shí)間,當(dāng)文件的狀態(tài)被修改時(shí),更新這個(gè)時(shí)間,例如文件的鏈接數(shù),大小,權(quán)限,Blocks數(shù)。

3、軟鏈接和硬鏈接區(qū)別

  • 硬鏈接: 與普通文件沒什么不同,inode 都指向同一個(gè)文件在硬盤中的區(qū)塊;
  • 軟鏈接: 軟鏈接又叫符號(hào)鏈接,它實(shí)際上是一個(gè)特殊的文件,有點(diǎn)類似于 Windows 的快捷方式。這個(gè)文件包含了另一個(gè)文件的路徑名??梢允侨我馕募蚰夸?可以鏈接不同文件系統(tǒng)的文件。
# 創(chuàng)建硬鏈接: ln TARGET LINK_NAME
$ ln test.txt hlink_test.txt

# 創(chuàng)建軟鏈接: ln -s TARGET LINK_NAME
$ ln -s test.txt slink_test.txt

$ ll
total 8
-rw-rw-r-- 2 hx hx 7 Dec  3 18:12 hlink_test.txt
lrwxrwxrwx 1 hx hx 8 Dec  3 18:15 slink_test.txt -> test.txt
-rw-rw-r-- 2 hx hx 7 Dec  3 18:12 test.txt

軟鏈接的特點(diǎn):

  1. 要建立鏈接時(shí),LINK_NAME必須是存在的;而當(dāng)TARGET不存在時(shí)建立的連接是一個(gè)空鏈接,相當(dāng)于空指針??真溄游募部梢圆僮?,而且如果對(duì)空鏈接進(jìn)行操作,比如 emptyFile是空鏈接,進(jìn)行vi emptyFile輸入一些字符后保存,那么系統(tǒng)會(huì)自動(dòng)生成一個(gè)對(duì)應(yīng)emptyFileTARGET空鏈接會(huì)變成一個(gè)軟鏈接;

  2. LINK_NAME指向TARGET,當(dāng)TARGET的內(nèi)容改變時(shí),LINK_NAME的內(nèi)容也會(huì)改變,反過來也是一樣,當(dāng)LINK_NAME改變也會(huì)導(dǎo)致TARGET改變;

  3. 當(dāng)刪除LINK_NAME 時(shí),不會(huì)對(duì)TARGET產(chǎn)生影響。而刪除TARGET時(shí),LINK_NAME會(huì)變成一個(gè)空鏈接,見第1條后半段。如果此時(shí)再創(chuàng)建一個(gè)與之前TARGET同名的文件,就會(huì)重新建立鏈接。但此時(shí)TARGETLINK_NAME的內(nèi)容都為空。

硬鏈接的特點(diǎn):

  1. TARGET 文件必須存在;
  2. TARGETLINK_NAME相互影響,同步執(zhí)行,創(chuàng)建了硬鏈接相當(dāng)于文件實(shí)體多了入口;
  3. 建立硬鏈接后,TARGETLINK_NAME的鏈接數(shù)都為2,當(dāng)刪除TARGET后,LINK_NAME的內(nèi)容不受影響,但其鏈接數(shù)減少一,從鏈接文件變成一個(gè)普通文件。

對(duì)文件鏈接:

  1. 文件可以創(chuàng)建硬鏈接,增加了文件的入口,但是創(chuàng)建硬鏈接不能跨分區(qū)
  2. 其實(shí)文件名本身就是個(gè)硬鏈接,也是文件入口

對(duì)于目錄鏈接

  1. 目錄不能創(chuàng)建硬鏈接,目錄可以創(chuàng)建軟鏈接
  2. 每個(gè)目錄下都會(huì)有兩個(gè)硬鏈接, . 當(dāng)前目錄, .. 上級(jí)目錄

4、Linux上的常用文件管理類命令

cp 命令:復(fù)制文件

$ man cp
NAME
       cp - copy files and directories
SYNOPSIS
       cp [OPTION]... [-T] SOURCE DEST       # 復(fù)制單個(gè)文件
       cp [OPTION]... SOURCE... DIRECTORY    # 復(fù)制多個(gè)文件
       cp [OPTION]... -t DIRECTORY SOURCE... # 復(fù)制多個(gè)文件
# 常用選項(xiàng):
    -i:交互式復(fù)制,即覆蓋之前提醒用戶確認(rèn);
    -f:強(qiáng)制覆蓋目標(biāo)文件;
    -r, -R:遞歸復(fù)制目錄;
    -d:復(fù)制符號(hào)鏈接文件本身,而非其指向的源文件;
    -a:-dR --preserve=all, archive,用于實(shí)現(xiàn)歸檔;
    --preserv=
        mode:權(quán)限
        ownership:屬主和屬組
        timestamps: 時(shí)間戳
        context:安全標(biāo)簽
        xattr:擴(kuò)展屬性
        links:符號(hào)鏈接
        all:上述所有屬性

$ touch demo-{1..5}.txt
$ ll
total 12
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-1.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-2.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-3.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-4.txt
-rw-rw-r-- 1 hx hx 0 Dec  4 13:49 demo-5.txt

$ cp demo-1.txt /tmp/
$ cp demo-1.txt demo-2.txt demo-3.txt /tmp
$ cp -t /tmp/  demo-4.txt demo-5.txt 
$ ll /tmp/
total 0
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-1.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-2.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-3.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-4.txt
-rw-rw-r-- 1 hx   hx    0 Dec  4 13:51 demo-5.txt

mv 命令:移動(dòng)文件

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..            

常用選項(xiàng):
  -i:交互式;
  -f:force
  
$ mv demo-1.txt /tmp/
$ mv demo-2.txt demo-3.txt /tmp/
$ mv -t /tmp/ demo-4.txt demo-5.txt

# 目標(biāo)文件存在是,交互式確認(rèn)
$ mv -i demo-1.txt /tmp/
mv: overwrite '/tmp/demo-1.txt'? 

# 目標(biāo)文件存在是,強(qiáng)制覆蓋
$ mv -f demo-1.txt /tmp/

rm命令:刪除文件

rm [OPTION]... FILE...

常用選項(xiàng):
  -i:interactive
  -f:force
  -r: recursive
$ rm -i demo-2.txt 
rm: remove regular empty file 'demo-2.txt'?

# 強(qiáng)制遞歸刪除,謹(jǐn)慎使用
$ rm -rf demo-2.txt 

5、vi 文本查找替換

在末行模式下:
語法:     [range]s/s1/s2/ [option]

[range] 表示檢索范圍,省略時(shí)表示當(dāng)前行
         1,10表示從第 1 行到 10 行
         %表示整個(gè)文件,同1,$
         .,$表示從當(dāng)前行到文件尾
         s 為替換命令
         s1 要被替換的串,s2 為替換的串
        
[option] 表示選項(xiàng):
            /g表示在全局文件中進(jìn)行替換。
            /c表示在每次替換之前需要用戶進(jìn)行確認(rèn)。
            省略時(shí)僅對(duì)每行第一個(gè)匹配串進(jìn)行替換。


1. :s/old/new/     把當(dāng)前行第一個(gè)出現(xiàn)的old替換成new,后面加g就是替換當(dāng)前行所有
2. :1,5 s/old/new  把1到5行的第一個(gè)old替換成new,可以加g表示所有
3. :3,$s/old/new/  把從3行開始到最后一行的第一個(gè)出現(xiàn)的old替換成new,后面加g替換當(dāng)前行所有,3用.表示就是當(dāng)前行
4. :%s/old/new/    把所有行的第一個(gè)old替換成new,后面加g表示替換當(dāng)前行所有

用查找替換命令刪除/tmp/profile文件中的 行首的空白字符

$ cp /etc/profile /tmp/
$ vi /tmp/profile
vi-1575440956160.png

6、在vim中設(shè)置tab縮進(jìn)

# 設(shè)置tab縮進(jìn)為4個(gè)字符寬度
set tabstop=4 或 set ts=4

# TAB替換為空格
:set ts=4
:set expandtab
:%retab!

# 空格替換為TAB
:set ts=4
:set noexpandtab
:%retab!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容