1. 程式人生 > 實用技巧 >linux——檔案管理

linux——檔案管理

1.檔案管理概述

1.Bash Shell對檔案進行管理

談到Linux檔案管理,首先我們需要了解的就是,我們要對檔案做些什麼事情?
其實無非就是對一個檔案進行、建立、複製、移動、檢視、編輯、壓縮、查詢、刪除、等等
例如 : 當我們想修改系統的主機名稱,是否應該知道檔案在哪,才能去做對應的修改?

2.內容摘要

系統目錄結構
檔案路徑定位
檔案管理命令
檔案型別file
連結檔案ln
檔案編輯vim

2.系統目錄結構

幾乎所有的計算機作業系統都是使用目錄結構組織檔案。具體來說就是在一個目錄中存放子目錄和檔案, 而在子目錄中又會進一步存放子目錄和檔案,以此類推形成一個樹狀的檔案結構,由於其結構很像一棵樹的分支, 所以該結構又被稱為“目錄樹”。
Windows: 以多根的方式組織檔案 C: D:
Linux:以單根的方式組織檔案 /

如下圖為Centos7的目錄結構

1.存放命令相關的目錄

/bin, 普通使用者使用的命令 /bin/ls, /bin/date
/sbin,管理員使用的命令 /sbin/service,poweroff,useradd…

只要看到bin路徑,就應該意識到放的是可執行檔案

2.存放使用者相關資料的家目錄,比如:windows不同的使用者登陸系統顯示的桌面背景不一樣

/home,普通使用者的家目錄, 預設為/home/username

環境變數的東西不要刪,刪掉試一下

/root,超級管理員root的家目錄, 普通使用者無權操作

3.系統檔案目錄

/usr,相當於C:Windows
/usr/local,軟體安裝的目錄,相當於C:Program
/usr/bin/,普通使用者使用的應用程式(重要)
/usr/sbin,管理員使用的應用程式(重要)
/usr/lib,庫檔案Glibc 32bit
/usr/lib64,庫檔案Glibc 64bit

# 1 
df -h #df -h檢視系統中檔案的使用情況
Size 分割區總容量
Used 已使用的大小
Avail 剩下的大小
Use% 使用的百分比
Mounted on 路徑地址
# 2
du -sh * 檢視當前目錄下各個檔案及目錄佔用空間大小
du -sh /usr/
# 3 標準是實現自動化的基礎
不通主機的相同的軟體,都放在相同路徑下,便於管理,實現自動化
現在一般安裝的軟體,不放在/usr/local下了

# 4 總共有一千來個命令
ls /usr/bin/ | wc -l
ls /usr/sbin/ | wc -l

# 5 檢視命令依賴那些庫檔案
ldd /bin/ls

4.啟動目錄

/boot 存放的系統啟動相關的檔案,例如:kernel,grub(引導裝載程式)

ls /boot
# linux核心
# 啟動機器時可以選擇的啟動模式

5.配置檔案目錄

/etc,極其重要,後續所有服務的配置都在這個目錄中
/etc/sysconfig/network-script/ifcfg-,網路配置檔案
/etc/hostname,系統主機名配置檔案,主機名很重要,有些特殊服務要依賴主機名,沒有主機名會報錯起不來;修改了要重啟:reboot
/etc/resolv.conf,dns客戶端配置檔案,域名解析伺服器,一般我們不配置,因為網絡卡的配置好了,會覆蓋掉它,網絡卡的優先順序高
/etc/hosts,本地域名解析配置檔案,域名解析,先找自己的hosts,再去域名解析

# 1 
/etc/hosts 對應windows C:windows/system32/drivers/etc/hosts,黑客釣魚網站
# 2 測試修改
yum install httpd -y
systemctl stop firewalld
echo "lqz NB" >/var/www/html/index.html
systemctl start httpd

6.可變的目錄與臨時目錄

/var,存放一些變化檔案,比如/var/log/下的日誌檔案,登陸日誌
/var/tmp,程序產生的臨時檔案
/tmp,系統臨時目錄(類似於公共廁所),誰都可以使用

# 1 檢視登陸日誌
cat /var/log/secure #檢視登陸時間
# 2 程序產生的臨時檔案(360清理垃圾,就是會清理)

7.裝置目錄檔案

/dev,存放裝置檔案,比如硬碟,硬碟分割槽,光碟機,等等
/dev/sd 硬碟裝置
/dev/null,黑洞裝置,只進不出。類似於垃圾回收站
/dev/random,生成隨機數的裝置
/dev/zero,能遠遠不斷的產生資料,類似於取款機,隨時隨地取錢

# 1 sda sdb sdc sda1 sdb4
linux中磁碟檔案叫sd,第一個硬碟叫a,第二個叫b,sda1表示第一個磁碟的第一個分割槽,sdb4:第二個硬碟的第四個分割槽(服務可以插很多硬碟)
# 2 /dev/null 
ls >/dev/null
# 3 /dev/random 生成隨機數
echo $RANDOM
echo lqz_$RANDOM
批量建立隨機使用者,批量設定密碼
# 4 源源不斷取資料
dd if=/dev/zero of=/opt/test.txt bs=1M count=1024
'''
dd:用指定大小的塊拷貝一個檔案,並在拷貝的同時進行指定的轉換。
if=檔名:輸入檔名,預設為標準輸入。即指定原始檔。< if=input file >
of=檔名:輸出檔名,預設為標準輸出。即指定目的檔案。< of=output file >
 bs=bytes:同時設定讀入/輸出的塊大小為bytes個位元組。
 count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的位元組數。
'''

ll /opt/test.txt
ll -h /opt/test.txt

8.虛擬的檔案系統(如對應的程序停止則/proc下對應目錄則會被刪除)

/proc,反映系統當前程序的實時狀態 :process
PS:類似於小汽車的儀表板,能夠看到汽車是否有故障,或者是否缺油了。

ls /proc # 可以看到很多id號,pid號,程序號,唯一
ls 程序id號的資料夾
如果程序被關閉,id號的資料夾就沒了
id號每次啟動都不唯一,只有一個程序唯一,systemd 是程序號1的程序,所有程序都是基於它派生出來的

9 其他

#1 media:提供裝置的掛載點,媒體檔案
# linux 新增了碟符,需要手動掛載
# 把光盤裡的資料,掛載到media目錄
mount  /dev/cdrom /media/

# 2 mnt:提供裝置的掛載點(同上)

# 3 opt:第三方工具,第三方軟體預設安裝的(mysql...)

# run :下有pid,log結尾的檔案
ls /run
cat sshd.pid  # 程序執行的pid號,放在檔案中
ps aux |grep sshd

# .lock檔案的作用,鎖機制
# 假設現在執行
yum install tree
# 再開一個視窗執行相同命令
yum install tree
'''
Another app is currently holding the yum lock; waiting for it to exit...
  The other application is: yum
    Memory :  71 M RSS (470 MB VSZ)
    Started: Tue Aug 18 00:26:31 2020 - 00:24 ago
    State  : Sleeping, pid: 6191
'''
cat /run/yum.pid

10.PS: 在Linux7系統中,

/bin, /sbin, /lib, /lib64都以軟連結的形式連結到/usr/目錄下

/bin –> /usr/bin
/sbin –> /usr/sbin
lib -> usr/lib
lib64 -> usr/lib64

3.檔案路徑定位

在我們開始操作檔案前,首先需要對檔案進行定位,比如:
你要在哪建立什麼檔案? 你要將檔案複製到什麼地方? 或者你要刪除的檔案在什麼地方?
那什麼是定位: 比如/etc/hostname,整個檔案中包含檔名稱以及檔案所在的位置,我們將這個叫做路徑,那麼路徑就是對檔案進行定位的一種方式。例:如下圖的message所在的路徑是?

提問FQ: /home/oldboy/file 和/home/oldgirl/file是否是同一個檔案?

1.每個目錄下都有一個.和..的目錄是幹啥的?

一個點代表當的是當前目錄, 兩個點代表的是當前目錄的上層目錄。
假設當前目錄在/usr/下, 那麼它的上層(/)目錄用../表示, 而/usr/的下層(local)目錄則用./local表示。

2.那什麼是絕對路徑,什麼又是相對路徑呢?

絕對路徑: 只要從/開始的路徑,比如/home/alice/file
相對路徑: 相對於當前目錄來說,比如 a.txt ./a.txt ../bob/a.mp3 [加入: 此時在目錄/home/alice]
小結: 所謂的(.)和(..)目錄實際上屬於相對路徑的一種表示形式。

3.絕對路徑與相對路徑示例

#絕對路徑
[root@bgx /]# useradd alice
[root@bgx /]# touch /home/alice/file1
[root@bgx /]# touch ~/file2
[root@bgx /]# touch ~alice/file3

#相對路徑
[root@bgx /]# mkdir abc
[root@bgx /]# touch ../file3
[root@bgx /]# touch file4
[root@bgx /]# touch abc/file5

cd改變目錄,常見的使用方法

# cd 絕對路徑 cd /etc/hostname
# cd 相對路徑 cd test/abc cd . cd ..


# cd      #切換目錄,例: cd /etc
# cd -    #切換回上一次所在的目錄
# cd ~    #切換回當前使用者的家目錄,注意:root和普通使用者是否有所不同嗎?
# cd .    #代表當前目錄,一般在拷貝、移動等情況下使用 cp /etc/hostname ./
# cd ..   #切換回當前目錄的上級目錄

4.系統檔案管理

1.檔案管理之: 建立/複製/移動/刪除

建立

1.檔案建立命令touch

# touch file                    #無則建立,有則修改時間
# touch file2 file3
# touch /home/od/file4 file5
# touch file{a,b,c}             #{}集合,等價 touch a b c
# touch file{1..10}
# touch file{a..z}

2.目錄建立命令mkdir

# 選項:-v 顯示詳細資訊  -p 遞迴建立目錄
# mkdir dir1
# mkdir /home/od/dir1 /home/od/dir2
# mkdir -v /home/od/{dir3,dir4} 
# mkdir -pv /home/od/dir5/dir6
# mkdir -pv /home/{od/{diu,but},boy}

3.以樹狀顯示目錄結構命令tree

# 選項: -L: 顯示目錄樹的層級
# tree /home/od/    #顯示當前目錄下的結構
/home/od/
├── but
├── dir1
├── dir2
├── dir3
├── dir4
├── dir5
│   └── dir6
└── diu

cp複製

#選項: -v:詳細顯示命令執行的操作 -r: 遞迴處理目錄與子目錄 -p: 保留原始檔或目錄的屬性

# cp file /tmp/file_copy
# cp name /tmp/name         #不修改名稱
# cp file /tmp/             #不修改名稱
# cp -p file /tmp/file_p    #-p保持原檔案或目錄的屬性
# cp -r  /etc/ /tmp/        #複製目錄需要使用-r引數, 遞迴複製
# cp -rv /etc/hosts /etc/hostname /tmp  #拷貝多個檔案至一個目錄
# cp -rv /etc/{hosts,hosts.bak}
# cp -rv /etc/hosts{,-org}

mv移動

# mv file file1             #原地移動算改名
# mv file1 /tmp/            #移動檔案至tmp目錄
# mv /tmp/file1 ./          #移動tmp目錄的檔案至當前目錄
# mv dir/ /tmp/             #移動目錄至/tmp目錄下

# touch file{1..3}
# mv file1 file2 file3 /opt/    #移動多個檔案或至同一個目錄

# mkdir dir{1..3}
# mv dir1/ dir2/ dir3/ /opt     #移動多個目錄至同一個目錄

rm刪除

#選項:-r: 遞迴 -f: 強制刪除 -v: 詳細過程
# rm  file.txt      #刪除檔案, 預設rm存在alias別名,rm -i所以會提醒是否刪除檔案
# rm -f file.txt    #刪除檔案, 不提醒


# rm -r dir/        #遞迴刪除目錄,會提示
# rm -rf dir/       #強制刪除目錄,不提醒(慎用)


#1.rm刪除示例
# mkdir /home/dir10
# touch /home/dir10/{file2,file3,.file4}
# rm -f /home/dir10/  //不包括隱藏檔案 
# ls /home/dir10/ -a
. .. .file4


#2.rm刪除示例2
# touch file{1..10}
# touch {1..10}.pdf
# rm -rf file 
# rm -rf .pdf

2.檔案管理之:檢視檔案內容(cat tac less more head tail tailf grep …)

#------cat
# cp /etc/passwd ./pass
# cat pass      #正常檢視檔案方式
# cat -n pass   #-n顯示檔案有多少行
# cat -A pass   #檢視檔案的特殊符號,比如檔案中存在tab鍵
# tac pass      #倒序檢視檔案
cat >> test2.txt <<EOF
ads
adf
EOF

#------less、more
# less /etc/services    #使用游標上下翻動,空格進行翻頁,q退出
# more /etc/services    #使用回車上下翻動,空格進行翻頁,q退出(有百分比)

#------head
# head pass     #檢視頭部內容,預設前十行
# head -n5 pass #檢視頭部5行,使用-n指定
# ps aux | head -5 # 只看頭部5個程序

#------tail
# tail pass  # 檢視檔案尾部,預設10行
# tail -20 /var/log/secure  # 檢視檔案尾部20行
# tail -f /var/log/messages #-f動態檢視檔案尾部的變化
# tailf /var/log/messages   #檢視檔案尾部的變化
# ps aux | tail -2

#------grep過濾檔案內容
# grep "^root" pass     #匹配以root開頭的行
# grep "bash$" pass     #匹配以bash結尾的行
# grep -i "ftp" pass    #忽略大小寫匹配
# grep  -Ei "sync$|ftp" pass    #匹配檔案中包含sync結尾或ftp字串
# grep -n -A 2 "Failed" /var/log/secure #匹配/var/log/secure檔案中Failed字串,並列印它的下2行
# grep -n -B 2 "Failed" /var/log/secure #匹配/var/log/secure檔案中Failed字串,並列印它的上2行
# grep -n -C 2 "Failed" /var/log/secure #匹配/var/log/secure檔案中Failed字串,並列印它的上下2行

3.檔案管理之:聯網下載檔案(wget、curl)、檔案上傳與下載(rz、sz)

wget、curl聯網下載檔案

#選項: -O: 指定下載地址
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#選項: -o: 指定下載地址
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

rzsz上傳下載檔案

# yum install lrzsz -y  #不安裝軟體則無法執行該命令

# rz            #只能上傳檔案檔案上傳
# sz /path/file #只能下載檔案

4.檔案管理之:檔案或命令查詢(locate、which、whereis、find)

檔案查詢

# locate /etc/sh       #搜尋etc目錄下所有以sh開頭的檔案
# locate -i /etc/sh    #搜尋etc目錄下,所有以sh開頭的檔案,忽略大小寫

命令查詢

# which ls  #查詢ls命令的絕對路徑

# whereis ls       //查詢命令的路徑、幫助手冊、等
# whereis -b ls    //僅顯示命令所在的路徑

# type -a ls        #檢視命令的絕對路徑(包括別名)

5.檔案管理之:字元處理命令(sort、uniq、cut、sed、awk、wc、)

sort排序

在有些情況下,需要對應一個無序的文字檔案進行資料的排序,這時就需要使用sort進行排序了。

sort [OPTION]... [FILE]...
# -r:倒序 -n:按數字排序 -t:指定分隔符(預設空格) -k:指定第幾列, 指定幾列幾字符(指定1,1  3.1,3.3)

#1.首先建立一個檔案,寫入一寫無序的內容
[root@lqz ~]# cat >> file.txt <<EOF
b:3
c:2
a:4
e:5
d:1
f:11
EOF

#2.使用sort下面對輸出的內容進行排序
[root@lqz ~]# sort file.txt
a:4
b:3
c:2
d:1
e:5
f:11

#結果並不是按照數字排序,而是按字母排序。
#可以使用-t指定分隔符, 使用-k指定需要排序的列。
[root@lqz ~]# sort -t ":" -k2 sort.txt
d:1
f:11 #第二行為什麼是11?不應該按照順序排列?
c:2
b:3
a:4
e:5

#按照排序的方式, 只會看到第一個字元,11的第一個字元是1, 按照字元來排序確實比2小。 
#如果想要按照數字的方式進行排序, 需要使用 -n引數。
[root@lqz ~]# sort -t ":" -n -k2 p.txt
d:1
c:2
b:3
a:4
e:5
f:11


#測試案例,下載檔案http://fj.xuliangwei.com/public/ip.txt,對該檔案進行排序
[root@lqz ~]# sort -t. -k3.1,3.1nr -k4.1,4.3nr ip.txt

uniq去重
如果檔案中有多行完全相同的內容,當前是希望能刪除重複的行,同時還可以統計出完全相同的行出現的總次數, 那麼就可以使用uniq命令解決這個問題(但是必須配合sort使用)。

uniq [OPTION]... [INPUT [OUTPUT]]
#選項:-c  計算重複的行

#1.建立一個file.txt檔案:
[root@lqz ~]# cat file.txt
abc
123
abc
123
#2.uniq需要和sort一起使用, 先使用sort排序, 讓重複內容連續在一起
[root@lqz ~]# cat file.txt |sort
123
123
abc
abc
#3.使用uniq去除相鄰重複的行
[root@lqz ~]# cat file.txt |sort|uniq
123
abc
#4.-c引數能統計出檔案中每行內容重複的次數
[root@lqz ~]# cat file.txt |sort|uniq -c
      2 123
      2 abc

cut擷取欄位

cut OPTION... [FILE]...
#選項:-d 指定分隔符 -f 數字,取第幾列 –f3,6三列和6列 -c 按字元取(空格也算)
#echo "Im xlw, is QQ 552408925" >file.txt   #過濾出檔案裡 xlw以及552408925

#實現上述題目幾種思路
# cut -d " " -f2,5 file.txt
# cut -d " " -f2,5 file.txt |sed 's#,##g'
# sed 's#,# #g' file.txt | awk -F " " '{print $2 " " $5}'
# awk  '{print $2,$5}' file.txt |awk -F ',' '{print $1,$2}'
# awk -F  "[, ]" '{print $2,$6}' file.txt
# awk -F '[, ]+' '{print $2,$5}' file.txt

wc統計行號

wc [OPTION]... [FILE]...
#選項:-l顯示檔案行數 -c顯示檔案位元組 -w顯示檔案單詞

# wc -l /etc/fstab      #統計/etc/fstab檔案有多少行
# wc -l /etc/services   #統計/etc/services 檔案行號


#擴充套件方法
# grep -n "." /etc/services  | tail -1
# awk '{print NR $0}' /etc/services | tail -1
# cat -n /etc/services  | tail -1

習題: 分析如下日誌,統計每個域名被訪問的次數。

[root@student tmp]# cat web.log 
http://www.lqz.com/index.html
http://www.lqz.com/1.html
http://post.lqz.com/index.html
http://mp3.lqz.com/index.html
http://www.lqz.com/3.html
http://post.lqz.com/2.html

# awk -F '/' '{print $3}' web.log|sort -rn|uniq –c
# cut -d / -f3 web.log|sort -rn|uniq –c

習題: 使用awk取出系統的IP地址圖解

5.系統檔案屬性

當我們使用ls -l列目錄下所有檔案時,通常會以長格式的方式顯示,其實長格式顯示就是我們Windows下看到的檔案詳細資訊,我們也將其稱為檔案屬性,那整個檔案的屬性分為十列。

[root@lqz ~]# ls -l ks.cfg
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg

#
-rw-------. ①:第一個字元是檔案型別,其他則是許可權
1           ②:硬連結次數
root        ③:檔案屬於哪個使用者
root        ④:檔案屬於哪個組
4434        ⑤:檔案大小
May30 13:58 ⑥⑦⑧:最新修改的時間與日期
ks.cfg      ⑨:檔案或目錄名稱

6.系統檔案型別

1.通常我們使用顏色或者字尾名稱來區分檔案型別,但很多時候不是很準確,所以我們可以通過ls -l以長格式顯示一個檔案的屬性,通過第一列的第一個字元來近一步的判斷檔案具體的型別。

[root@lqz ~]# ll -d /etc/hosts /tmp /bin/ls  /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
-rwxr-xr-x.  1 root root 117656 Jun 30  2016 /bin/ls
srw-rw-rw-.  1 root root      0 Jan 20 10:35 /dev/log
brw-rw----.  1 root disk   8, 0 Jan 20 10:36 /dev/sda
crw--w----.  1 root tty    4, 1 Jan 20 10:36 /dev/tty1
lrwxrwxrwx.  1 root root     22 Jan 13 11:31 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--.  1 root root    199 Jan 20 11:03 /etc/hosts
prw-------.  1 root root      0 Jan 20 10:36 /run/dmeventd-client
drwxrwxrwt. 61 root root   8192 Jan 21 13:01 /tmp

#說明
-   #普通檔案(文字, 二進位制, 壓縮, 圖片, 日誌等) 
d   #目錄檔案
b   #裝置檔案(塊裝置)儲存裝置硬碟 /dev/sda1, /dev/sda2
c   #裝置檔案(字元裝置),終端 /dev/tty1, /dev/zero
s   #套接字檔案, 程序間通訊(socket)
p   #管道檔案
l   #連結檔案

2.但有些情況下,我們無法通過ls -l檔案的型別,比如: 一個檔案,它可能是普通檔案、也可能是壓縮檔案、或者是命令檔案等,那麼此時就需要使用file來更加精準的判斷這個檔案的型別。

[root@lqz ~]# file /etc/hosts
/etc/hosts: ASCII text

[root@lqz ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped

[root@lqz ~]# file /dev/sda
/dev/sda: block special

[root@lqz ~]# file /dev/tty1
/dev/tty1: character special

[root@lqz ~]# file /etc/grub2.cfg
/etc/grub2.cfg: broken symbolic link to `../boot/grub2/grub.cfg'

[root@lqz ~]# file /home
/home: directory

[root@lqz ~]# file /run/dmeventd-client
/run/dmeventd-client: fifo (named pipe)

[root@lqz ~]# ll but
-rw-r--r-- 1 root root 42125 Apr  1 12:26 but
[root@lqz ~]# file but
but: Zip archive data, at least v1.0 to extract

PS: Linux副檔名不代表任何含義,僅為了我們能更好的識別該檔案是什麼型別。

7.系統連結檔案

檔案有檔名與資料,在Linux上被分成兩個部分:使用者資料 (user data) 與元資料 (metadata)。
使用者資料,即檔案資料塊 (data block),資料塊是記錄檔案真實內容的地方,我們將其稱為Block
元資料,即檔案的附加屬性,如檔案大小、建立時間、所有者等資訊。我們稱其為Inode
在Linux中,inode是檔案元資料的一部分但其並不包含檔名,inode號即索引節點號)
檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。圖1.展示了程式通過檔名獲取檔案內容的過程。

Linux 系統引入了兩種連結:硬連結 (hard link) 與軟連結(又稱符號連結,即 soft link 或 symbolic link)

1.什麼是軟連結

軟連結相當於Windows的快捷方式,軟連結檔案會將inode指向原始檔的block,當我們訪問這個軟連結檔案時,其實訪問的是原始檔本身。那麼當我們對一個檔案建立多個軟連結,其實就是多個inode指向同一個block。當我們刪除軟連結檔案時,其實只是刪除了一個inode指向,並不會對原始檔原始檔造成影響,但如果刪除的是原始檔則會造成所有軟連結檔案失效。

2.什麼是硬連結

若一個inode號對應多個檔名,則稱這些檔案為硬連結。換言之,硬連結就是同一個檔案使用了多個別名,如下圖hard link 就是 file 的一個別名,他們有共同的 inode。

3.軟連結實踐

#檔案軟連結示例
touch /root/file
ln -s /root/file /tmp/file_bak
ll /tmp/file_bak  //root下file連結到/tmp下並重命名為file_bak
  

#目錄軟連結示例
mkdir /soft/nginx1.1 -p
ln -s /soft/nginx1.1/ /soft/nginx
ll /soft/nginx   //檢視連結指向

#軟連結使用場景
1.軟體升級
2.企業程式碼釋出 
3.不方便目錄移動

4.硬連結實踐

#檔案硬連結示例
ln  /root/file /tmp/file_hard
ll /tmp/file_hard

#PS:目錄不能建立硬連結,硬連結檔案可以用rm命令刪除

5.硬連結與軟連結區別
1)ln命令建立硬連結,ln -s命令建立軟連結。
2)目錄不能建立硬連結,並且硬連結不可以跨越分割槽系統。
3)目錄軟連結特別常用,並且軟連結支援跨越分割槽系統。
4)硬連結檔案與原始檔的inode相同,軟連結檔案與原始檔inode不同。
5)刪除軟連結檔案,對原始檔及硬連結檔案無任何影響。
6)刪除檔案的硬連結檔案,對原始檔及連結檔案無任何影響。
7)刪除連結檔案的原始檔,對硬連結無影響,會導致軟連結失效。
8)刪除原始檔及其硬連結檔案,整個檔案會被真正的刪除。