1. 程式人生 > >Linux-文件管理

Linux-文件管理

Linux 文件管理

文件系統分層結構標準

http://www.pathname.com/fhs

http://www.pathname.com/fhs/pub/fhs-2.3.pdf

包括

boot bin sbin etc lib64 tmp usr mnt media dev var home net misc srv proc sys root opt selinux

技術分享圖片


ldd /bin/ls 查看ls命令需要的依賴庫,一般在/lib64

/misc目錄,CentOS 6自動有,cd /misc然後cd cd/可自動掛載光盤,不用登管理員帳戶

/proc 目錄裏的東西根本不在硬盤中,而是在內存中,所以ll查看文件大小為0

是個虛擬目錄,映射到內存

echo '- - -' > /sys/class/scsi_host/host2/scan 不重啟電腦的情況下識別新硬盤

ext4文件系統大小寫敏感,U盤的FAT32等文件系統大小寫不敏感

.開頭的是隱藏文件

文件有兩類數據:

元數據:metadatall看到的信息)

數據:data

各種文件的類型, vim /etc/DIR_COLORS可定制顏色

-:普通文件 白色

d: 目錄文件

深藍色

b: 塊設備 ×××

c: 字符設備 ×××

l: 符號鏈接文件 淺藍色

p: 管道文件pipe 深×××

s: 套接字文件socket 紫色

可執行文件 綠色

壓縮包 紅色

某些文件名帶空格、橫杠等字符,要刪的話帶上路徑

rm /root/-a

b塊設備,如/dev/sda

c字符設備,如/dev/zero

dd if=/dev/zero of=/data/bigfile bs=1M count=1024

ll -d /bin/ /usr/bin

ll -d /lib64 /usr/lib64

pwd -P 若進入鏈接目錄時顯示真實路徑

帶根/的是絕對路徑,不帶根/的是相對路徑

basename 文件本身的名稱,不帶目錄


cd ~ 進入當前用戶的家目錄

cd 進入當前用戶的家目錄

cd ~qjy 進某個人的家目錄

cd - 進入上一次目錄路徑,內在機制:echo $OLDPWDOLDPWD變量存儲了上一個目錄

echo $PWD pwd,查看當前目錄

環境變量 PS1PATHPWDOLDPWDHISTSIZESHELL

ls

ls -ld 等於ll -d,顯示文件夾本身的信息

目錄後邊有沒有/有區別麽?大部分時候沒區別,除了目錄是軟連接的情況。

例如:ll /binll /bin/,不加/顯示的是軟鏈接本身,加/顯示的是/bin/下的文件。

技術分享圖片

技術分享圖片

ls -a 包含隱藏文件

ls -l 顯示額外的信息

ls -R 目錄遞歸通過

ls -ld 目錄和符號鏈接信息

ls -1 文件分行顯示

ls -S 按從大到小排序

ls -t mtime排序

ls -u 配合-t選項,顯示並按atime從新到舊排序

ls -U 按目錄存放順序顯示

ls -X 按文件後綴排序

ll --time=atime /data/A 訪問時間

ll --time=ctime /data/A 元數據發生變化的時間

ll --time=mtime /data/A 修改時間(默認)

stat /data/A 可以看到3個時間

元數據存放在文件系統中,不是具體文件

有時可以不讓更新讀時間atime,減少硬盤負擔

文件通配符

*匹配零個或多個字符

?匹配任何單個字符

~ 當前用戶家目錄

~mage 用戶mage家目錄

~+ 當前工作目錄

~-前一個工作目錄

[0-9]匹配數字範圍

[a-z]:字母

[A-Z]:字母

[qjy]匹配列表中的任何的一個字符

[^qjy]匹配列表中的所有字符以外的字符

預定義的字符類:man 7 glob

[:digit:]:任意數字,相當於0-9

[:lower:]:任意小寫字母

[:upper:]: 任意大寫字母

[:alpha:]: 任意大小寫字母

[:alnum:]:任意數字或字母

[:blank:]:水平空白字符

[:space:]:水平或垂直空白字符

[:punct:]:標點符號

[:print:]:可打印字符

[:cntrl:]:控制(非打印)字符

[:graph:]:圖形字符

[:xdigit:]:十六進制字符

通配符只通配文件名稱,不管內容

[root@centos7 data]#touch f{A..Z}

[root@centos7 data]#touch f{a..z}

[root@centos7 data]#ls f[A-D]

fA fb fB fc fC fd fD

[root@centos7 data]#ls f[[:upper:]]

fA fC fE fG fI fK fM fO fQ fS fU fW fY

fB fD fF fH fJ fL fN fP fR fT fV fX fZ

man 7 glob

touch 創建空文件或刷新時間

touch [OPTION]... FILE...

-a僅改變atimectime

-m 僅改變mtimectime

-t [[CC]YY]MMDDhhmm[.ss]

指定atimemtime的時間戳

-c如果文件不存在,則不予創建

cp

cp -a 可以作為備份手段,把數據的所有信息都復制

cp -av 備份同時顯示過程,使用-v要小心,文件太大的話終端容易死

cp -u 更新,只復制源比目標更新文件或不存在文件

cp --backup=numbered 可定義到別名裏

[root@centos7 data]#ls

file1.conf file2.conf file3.conf file4.conf file5.conf

[root@centos7 data]#rename "conf" "conf.bak" file*

[root@centos7 data]#ls

file1.conf.bak file3.conf.bak file5.conf.bak

file2.conf.bak file4.conf.bak

練習

1、定義別名命令baketc,每天將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式為backupYYYY-mm-dd,備份過程可見

[root@centos7 data]alias baketc="cp -av /etc /data/backup`date +%F`"

2、創建/data/rootdir目錄,並復制/root下所有文件到該目錄內,要求保留原有權限

[root@centos7 ~]cp -a /root/ /data/rootdir/

rm

rm -rf /被禁,但rm -rf /*或者 rm -rf /data /*能執行!

強烈建議把rm改名或者定義成別名mv

alias rm='mv -t /data/'

有別人正在使用某文件時釋放不了空間,用lsof | grep deleted可查看被刪除但未釋放空間的文件,方法一是kill掉進程,但不建議,因為有些進程不能kill,方法二是> file先清空,釋放空間,再rm刪掉。

> bigfile

rm -f bigfile

目錄操作

tree

tree /boot

tree -L 1 /boot 只顯示當前目錄下的第一層

tree -d /boot 只顯示文件夾

tree -P 可跟正則表達式

mkdir 創建空目錄

mkdir -p /data/dir1/dir2/dir3/dir4 能創建比較深的空目錄

mkdir -v /data/dir1/dir2/dir3/dir4 顯示詳細信息

rmdir [-p] 刪除空文件夾

練習:

(1) 如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

[root@centos7 ~]#mkdir -p /testdir/dir1/{x,y}/{a,b}

(2) 如何創建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

[root@centos7 ~]# mkdir -p /testdir/dir2/{x/{a,b},y}

(3) 如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

[root@centos7 ~]# mkdir -p /testdir/dir{3,4,5/{6,7}}

備份小技巧

cp /etc/hosts{,.bak}

索引節點

inode

inode table 節點表

inode在每個分區中唯一

直接指針有12個,每個block4K,最多直接指向48K的數據

間接指針 4M

二重間接指針 4G

三重間接指針 4T

df -i dfinode形式

shred -zvu -n 6 /data/hosts 擦除文件,-z最後以0覆蓋,-v顯示過程,-u刪除文件,-n 6覆寫6(默認3)

硬鏈接

創建硬鏈接會增加額外的記錄項以引用文件

對應於同一文件系統上一個物理文件

每個目錄引用相同的inode

創建時鏈接數遞增

刪除文件時:

?rm命令遞減計數的鏈接

?文件要存在,至少有一個鏈接數

?當鏈接數為零時,該文件被刪除

不能跨越驅動器或分區

語法:

ln filename [linkname]

任何文件夾最少有2個鏈接數,本身和. ,如果還有子文件夾的話,子文件夾的.. 也是他的名字,就有3個以上的鏈接數

軟連接(符號鏈接)

一個符號鏈接指向另一個文件

ls -l的顯示鏈接的名稱和引用的文件

一個符號鏈接的內容是它引用文件的名稱

可以對目錄進行

可以跨分區

指向的是另一個文件的路徑;其大小為指向的路徑字符串的長度;不增加或減少目標文件inode的引用計數;

語法:

ln -s filename [linkname]

軟連接的文件大小是源文件的文件名大小

軟連接ln -s f1 f1_link,如果f1f1_link在不同目錄,要用相對目錄的話是相對於f1_link的目錄,不是相對於f1的目錄

readlink /etc/grub2.cfg可直接讀到源文件的路徑

軟,硬鏈接區別:

本質

硬鏈接:同一個文件多個名字

軟鏈接:一個文件對應快捷方式,不同文件

1、鏈接數

2、跨分區

3、目錄

4、原始和鏈接文件關系

5、刪除

確定文件內容

file file1

檢查文件的類型,然後確定適當的打開命令或應用程序使用

文件的頭部,又稱魔數magic number

hexdump -C file -n 100 顯示一個文件的前100個字節


Linux-文件管理