文件管理

文件系統(tǒng)結(jié)構(gòu)

Linux中,所有的文件與目錄都由根目錄/ 開始。那是所有目錄與文件的源頭。然后再一個(gè)一個(gè)分支下來,有點(diǎn)像樹狀。因此,我們也稱這種目錄配置方式為:“目錄樹(directory tree)”。這個(gè)目錄樹主要特性有:
根目錄是整個(gè)系統(tǒng)最重要的一個(gè)目錄,因?yàn)樗械哪夸浂际怯伤苌鰜恚腋夸浺才c開機(jī),還原,系統(tǒng)修復(fù)等操作有關(guān)。
由于系統(tǒng)開機(jī)需要特定的開機(jī)軟件、內(nèi)核文件、開機(jī)所需要的程序、函數(shù)庫等文件數(shù)據(jù),若系統(tǒng)出現(xiàn)異常時(shí),根目錄也要有能夠修復(fù)文件系統(tǒng)的程序。由此可見根目錄的重要性,所以FHS建議,根目錄不要放在非常大的分區(qū)內(nèi),因?yàn)樵酱蠓乐沟奈募蕉?,出錯(cuò)的幾率也越大,性能也越不好,所以,根目錄應(yīng)該越小越好,且應(yīng)用程序所安裝的軟件最好不要與根目錄放在一個(gè)分區(qū)內(nèi)。
由此我們來說說下面的文件都是什么,又怎么放置才好。


/bin

/bin 基礎(chǔ)系統(tǒng)所需要的那些命令位于此目錄,也是最小系統(tǒng)所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin類似,這個(gè)目錄中的文件都是可執(zhí)行的,普通用戶都可以使用的命令。做為基礎(chǔ)系統(tǒng)所需要的最基礎(chǔ)的命令就是放在這里。

/boot

/boot Linux的內(nèi)核及引導(dǎo)系統(tǒng)程序所需要的文件。

/dev

/dev 設(shè)備文件存儲目錄,比如聲卡、磁盤... ...

/etc

/etc 系統(tǒng)配置文件的所在地,一些服務(wù)器的配置文件也在這里;比如用戶帳號及密碼配置文件;

/home

/home 普通用戶家目錄默認(rèn)存放目錄;

/lib

/lib 庫文件存放目錄

/lost+found

/lost+found 在ext2或ext3文件系統(tǒng)中,當(dāng)系統(tǒng)意外崩潰或機(jī)器意外關(guān)機(jī),而產(chǎn)生一些文件碎片放在這里。當(dāng)系統(tǒng)啟動(dòng)的過程中fsck工具會(huì)檢查這里,并修復(fù)已經(jīng)損壞的文件系統(tǒng)。 有時(shí)系統(tǒng)發(fā)生問題,有很多的文件被移到這個(gè)目錄中,可能會(huì)用手工的方式來修復(fù),或移到文件到原來的位置上。

/media

/media 即插即用型存儲設(shè)備的掛載點(diǎn)自動(dòng)在這個(gè)目錄下創(chuàng)建,比如USB盤系統(tǒng)自動(dòng)掛載后,會(huì)在這個(gè)目錄下產(chǎn)生一個(gè)目錄 ;CDROM/DVD自動(dòng)掛載后,也會(huì)在這個(gè)目錄中創(chuàng)建一個(gè)目錄,類似cdrom 的目錄。這個(gè)只有在最新的發(fā)行套件上才有,比如Fedora Core 4.0 5.0 等??梢詤⒖?etc/fstab的定義;

/mnt

/mnt 這個(gè)目錄一般是用于存放掛載儲存設(shè)備的掛載目錄的,比如有cdrom 等目錄??梢詤⒖?etc/fstab的定義。有時(shí)我們可以把讓系統(tǒng)開機(jī)自動(dòng)掛載文件系統(tǒng),把掛載點(diǎn)放在這里也是可以的。主要看/etc/fstab中怎么定義了;比如光驅(qū)可以掛載到/mnt/cdrom 。

/opt

/opt 表示的是可選擇的意思,有些軟件包也會(huì)被安裝在這里,也就是自定義軟件包,比如在Fedora Core 5.0中,OpenOffice就是安裝在這里。有些我們自己編譯的軟件包,就可以安裝在這個(gè)目錄中;通過源碼包安裝的軟件,可以通過 ./configure --prefix=/opt/目錄 。

/proc

/proc 操作系統(tǒng)運(yùn)行時(shí),進(jìn)程(正在運(yùn)行中的程序)信息及內(nèi)核信息(比如cpu、硬盤分區(qū)、內(nèi)存信息等)存放在這里。/proc目錄偽裝的文件系統(tǒng)proc的掛載目錄,proc并不是真正的文件系統(tǒng),它的定義可以參見 /etc/fstab 。

/root

/root Linux超級權(quán)限用戶root的家目錄;

/sbin

/sbin 大多是涉及系統(tǒng)管理的命令的存放,是超級權(quán)限用戶root的可執(zhí)行命令存放地,普通用戶無權(quán)限執(zhí)行這個(gè)目錄下的命令,這個(gè)目錄和/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin目錄是相似的; 我們記住就行了,凡是目錄sbin中包含的都是root權(quán)限才能執(zhí)行的。

/tmp

/tmp 臨時(shí)文件目錄,有時(shí)用戶運(yùn)行程序的時(shí)候,會(huì)產(chǎn)生臨時(shí)文件。/tmp就用來存放臨時(shí)文件的。/var/tmp目錄和這個(gè)目錄相似。

/usr

/usr 這個(gè)是系統(tǒng)存放程序的目錄,比如命令、幫助文件等。這個(gè)目錄下有很多的文件和目錄。當(dāng)我們安裝一個(gè)Linux發(fā)行版官方提供的軟件包時(shí),大多安裝在這里。如果有涉及服務(wù)器配置文件的,會(huì)把配置文件安裝在/etc目錄中。/usr目錄下包括涉及字體目錄/usr/share/fonts ,幫助目錄 /usr/share/man或/usr/share/doc,普通用戶可執(zhí)行文件目錄/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,超級權(quán)限用戶root的可執(zhí)行命令存放目錄,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;還有程序的頭文件存放目錄/usr/include。

/var

/var 這個(gè)目錄的內(nèi)容是經(jīng)常變動(dòng)的,看名字就知道,我們可以理解為vary的縮寫,/var下有/var/log 這是用來存放系統(tǒng)日志的目錄。/var/www目錄是定義Apache服務(wù)器站點(diǎn)存放目錄;/var/lib 用來存放一些庫文件,比如MySQL的,以及MySQL數(shù)據(jù)庫的的存放地;

/usr/bin

/usr/bin 這個(gè)目錄是可執(zhí)行程序的目錄,普通用戶就有權(quán)限執(zhí)行; 當(dāng)我們從系統(tǒng)自帶的軟件包安裝一個(gè)程序時(shí),他的可執(zhí)行文件大多會(huì)放在這個(gè)目錄。比如安裝gaim軟件包時(shí)。相似的目錄是/usr/local/bin; 有時(shí)/usr/bin中的文件是/usr/local/bin的鏈接文件;

/usr/sbin

/usr/sbin 這個(gè)目錄也是可執(zhí)行程序的目錄,但大多存放涉及系統(tǒng)管理的命令。只有root權(quán)限才能執(zhí)行;相似目錄是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;

/usr/local

/usr/local 這個(gè)目錄一般是用來存放用戶自編譯安裝軟件的存放目錄;一般是通過源碼包安裝的軟件,如果沒有特別指定安裝目錄的話,一般是安裝在這個(gè)目錄中。這個(gè)目錄下面有子目錄。自己看看吧。

/usr/lib

/usr/lib 和/lib 目錄相似,是庫文件的存儲目錄;

/usr/share

/usr/share 系統(tǒng)共用的東西存放地,比如 /usr/share/fonts 是字體目錄,是用戶都共用的吧。

/usr/share/doc

/usr/share/doc和/usr/share/man幫助文件,也是共用的吧;

usr/src

usr/src 是內(nèi)核源碼存放的目錄,比如下面有內(nèi)核源碼目錄,比如 linux 、linux-2.xxx.xx 目錄等。有的系統(tǒng)也會(huì)把源碼軟件包安裝在這里。比如Fedora/Redhat,當(dāng)我們安裝file.src.rpm的時(shí)候,這些軟件包會(huì)安裝在/usr/src/redhat相應(yīng)的目錄中。另外Fedhat 4.0 5.0,他的內(nèi)核源碼包的目錄位于/usr/src/kernels目錄下的某個(gè)目錄中(只有安裝后才會(huì)生成相應(yīng)目錄);

/var/adm

/var/adm 比如軟件包安裝信息、日志、管理信息等,在Slackware操作系統(tǒng)中是有這個(gè)目錄的。在Fedora中好象沒有;自己看看吧。

/var/log

/var/log 系統(tǒng)日志存放,分析日志要看這個(gè)目錄的東西;

/var/spool

/var/spool 打印機(jī)、郵件、代理服務(wù)器等假脫機(jī)目錄;

Linux文件類型

Linux文件類型和Linux文件的文件名所代表的意義是兩個(gè)不同的概念。我們通過一般應(yīng)用程序而創(chuàng)建的比如file.txt、file.tar.gz ,這些文件雖然要用不同的程序來打開,但放在Linux文件類型中衡量的話,大多是常規(guī)文件(也被稱為普通文件)。
Linux文件類型常見的有:普通文件、目錄、字符設(shè)備文件、塊設(shè)備文件、符號鏈接文件等;現(xiàn)在我們進(jìn)行一個(gè)簡要的說明;
linux下ll命令列出的文件類型:

Linux下可以用ls –l 命令來判斷文件類型,可以根據(jù)ll命令列出的前十個(gè)字母判斷第一列中的10個(gè)字符來判斷。
-rw-r—r—   "-"開頭的都是普通文件;
[root@centos7 /app]#ll a
-rw-r--r--. 1 root root 0 Aug  6 11:07 a
drw-r—r—   "d"開頭的是目錄文件;
drwxr-xr-x.   2 root root        6 Aug  6 11:08 2
brw-r—r—   "b"開頭的文件都是塊設(shè)備文件;
[root@centos7 ~]#ll /dev/sda
brw-rw----. 1 root disk 8, 0 Aug  5 09:57 /dev/sda
crw-r—r—   "c"開頭的文件都是字符設(shè)備文件;
[root@centos7 ~]#ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Aug  5 09:57 /dev/zero
srw-r—r—   "s"開頭的文件都是socket文件;
[root@centos7 ~]#ll /dev/log
srw-rw-rw-. 1 root root 0 Aug  5 09:57 /dev/log
prw-r—r—   "p"開頭的文件都是管道文件;
[root@centos7 /app]#ll /run/dmeventd-client
prw-------. 1 root root 0 Aug  5 09:57 /run/dmeventd-client
lrw-r—r—   "l"開頭的文件都是軟鏈接文件;
[root@centos7 ~]#ls /bin -dl
lrwxrwxrwx. 1 root root 7 Jul 15 09:42 /bin -> usr/bin
顯示當(dāng)前工作目錄
當(dāng)前路徑
[root@centos7 /app]#pwd
/app
絕對路徑   在app目錄下進(jìn)入dir2
[root@centos7 /app]#cd /app/dir1/dir2
[root@centos7 /app/dir1/dir2]#

相對路徑  返回app目錄下    
[root@centos7 /app]#cd /app/dir1/dir2
[root@centos7 /app/dir1/dir2]#cd ../../
[root@centos7 /app]#

基名:basename
目錄名:dirname

dir2是基名,cd /app/dir1/是目錄名
[root@centos7 /app]#cd /app/dir1/dir2
列出目錄內(nèi)容

列出當(dāng)前目錄的內(nèi)容或指定目錄
用法: ls [options] [files_or_dirs]
示例:
ls -a 包含隱藏文件 前面帶 "." 都是隱藏文件

[root@centos7 ~]#ls -a
.                .bash_profile.swn  Desktop               .local          .tcshrc
..               .bash_profile.swo  Documents             Music           Templates

ls -l 顯示額外的信息

ls -R 目錄遞歸通過 顯示目錄下所有文件
[root@centos7 ~]#ls -R /app/dir1
/app/dir1:
dir2
/app/dir1/dir2:
12345

ls -ld 目錄和符號鏈接信息
ls -1 文件分行顯示
ls –S 按從大到小排序
ls –t 按mtime排序
ls –u 配合-t選項(xiàng),顯示并按atime從新到舊排序
ls –U 按目錄存放順序顯示
ls –X 按文件后綴排序

文件通配符

  • 匹配零個(gè)或多個(gè)字符
[root@centos7 /app]#cat 22.txt
nihao
[root@centos7 /app]#cat *2.txt
nihao

? 匹配任何單個(gè)字符
~ 當(dāng)前用戶家目錄
~mage 用戶mage家目錄
~+ 當(dāng)前工作目錄
~- 前一個(gè)工作目錄

[0-9] 匹配數(shù)字范圍
[root@centos7 /app]#ls
2             bin      erdong.sh  f3            nihaoliu.sh  somefile2.tar      z1
a1            |cut     f1         hello.sh      Rescue.asd   somefile3.tar.xz2
bianliang.sh  dir1     f2         liuerdong.sh  scp70.sh     tmp
[root@centos7 /app]#ls f[0-9]
f1  f2  f3

[a-z]:字母
[A-Z]:字母
[wang] 匹配列表中的任何的一個(gè)字符

[^wang] 匹配列表中的所有字符以外的字符
[root@centos7 /app/2]#ls
fa.txt  fb.txt  fc.txt  fd.txt  fe.txt  ff.txt  fg.txt
fA.txt  fB.txt  fC.txt  fD.txt  fE.txt  fF.txt  fG.txt
[root@centos7 /app/2]#ls f[^A].txt
fa.txt  fB.txt  fC.txt  fD.txt  fE.txt  fF.txt  fG.txt
fb.txt  fc.txt  fd.txt  fe.txt  ff.txt  fg.txt

文件通配符

預(yù)定義的字符類: #man 7 glob
[:digit:]:任意數(shù)字,相當(dāng)于0-9
[:lower:]:任意小寫字母

[:upper:]: 任意大寫字母
[root@centos7 /app/2]#ls f[[:upper:]].txt
fA.txt  fB.txt  fC.txt  fD.txt  fE.txt  fF.txt  fG.txt

[:alnum:]:任意數(shù)字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:標(biāo)點(diǎn)符號
[:print:]:可打印字符
[:cntrl:]:控制(非打?。┳址?br> [:graph:]:圖形字符
[:xdigit:]:十六進(jìn)制字符

創(chuàng)建空文件和刷新時(shí)間

touch命令:

touch [OPTION]... FILE...

-a 僅改變 atime和ctime
[root@centos7 /app/dir1]#touch f1                 創(chuàng)建f1文件
[root@centos7 /app/dir1]#ll
total 0
drwxr-xr-x. 2 root root 36 Aug  6 11:48 dir2
-rw-r--r--. 1 root root  0 Aug  6 14:50 f1         原始時(shí)間
[root@centos7 /app/dir1]#touch -a f1            -a  修改時(shí)間
[root@centos7 /app/dir1]#ll
total 0
drwxr-xr-x. 2 root root 36 Aug  6 11:48 dir2
-rw-r--r--. 1 root root  0 Aug  6 14:50 f1
[root@centos7 /app/dir1]#stat f1
  File: ‘f1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 100678878   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2017-08-06 14:51:18.781898364 +0800     a時(shí)間改變
Modify: 2017-08-06 14:50:37.535899292 +0800
Change: 2017-08-06 14:51:18.781898364 +0800    c 時(shí)間改變
 Birth: -
-m 僅改變 mtime和ctime

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

[root@centos7 /app/dir1]#touch -t 202012011830.30 f1
[root@centos7 /app/dir1]#stat f1
  File: ‘f1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d  Inode: 100678878   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:default_t:s0
Access: 2020-12-01 18:30:30.000000000 +0800             a時(shí)間改變
Modify: 2020-12-01 18:30:30.000000000 +0800             m時(shí)間改變
Change: 2017-08-06 15:00:49.629885517 +0800
 Birth: -

指定atime和mtime的時(shí)間戳
-c 如果文件不存在,則不予創(chuàng)建

cp常用選項(xiàng)

-i:覆蓋前提示 –n:不覆蓋,注意兩者順序
[root@centos7 /app/dir1]#ll                                              root管理員 cp=cp- i 
total 0
drwxr-xr-x. 2 root root 36 Aug  6 11:48 dir2 -i
-rw-r--r--. 1 root root  0 Dec  1  2020 f1                                源文件f1
[root@centos7 /app/dir1]#cp /app/f2 /app/dir1/f1
cp: overwrite ‘/app/dir1/f1’? y                                           普通用戶不提醒覆蓋
[root@centos7 /app/dir1]#ll
total 4
drwxr-xr-x. 2 root root   36 Aug  6 11:48 dir2
-rw-r--r--. 1 root root 2586 Aug  6 15:13 f1                             文件大小發(fā)生改變
-r, -R: 遞歸復(fù)制目錄及內(nèi)部的所有內(nèi)容

將etc內(nèi)容全部復(fù)制并改名成zzz

[root@centos7 /app/dir1]#cp -r /etc /app/dir1/zzz                  
[root@centos7 /app/dir1]#rm -rf dev
[root@centos7 /app/dir1]#ll
total 16
drwxr-xr-x.   2 root root   36 Aug  6 11:48 dir2
-rw-r--r--.   1 root root 2586 Aug  6 15:13 f1
drwxr-xr-x. 136 root root 8192 Aug  6 15:38 zzz

-a: 歸檔,相當(dāng)于-dR --preserv=all
-d: --no-dereference --preserv=links 不復(fù)制原文件,只復(fù)制鏈接名
--preserv[=ATTR_LIST]
mode: 權(quán)限
ownership: 屬主屬組
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp -v: --verbose

-f: --force

zzz文件中已經(jīng)有issue, 是否覆蓋 -f 效果跟i相反

root@centos7 /app/dir1/zzz]#cp /etc/issue /app/dir1/zzz -f
cp: overwrite ‘/app/dir1/zzz/issue’? y
[root@centos7 /app/dir1/zzz]#ll
drwxr-xr-x.   2 root root     52 Aug  6 15:38 iscsi
-rw-r--r--.   1 root root     23 Aug  6 15:51 issue
-rw-r--r--.   1 root root     22 Aug  6 15:38 issue.net

rm命令

選項(xiàng) -r 遞歸,刪除目錄 ;-f 不提示,直接刪除;-i 提示
rm命令刪除一個(gè)大文件技巧
rm刪除一個(gè)大文件時(shí),如果文件正在使用,即使刪除了這個(gè)大文件,磁盤空間也無法釋放,為了讓磁盤空間盡快釋放,可以先用> 清空這個(gè)文件,再用rm刪除這個(gè)文件,就可以馬上釋放磁盤空間。

如何安全的刪除一個(gè)文件,可以使用如下命令
[root@centos6 app]#shred -zuvn5 f3  #shred相當(dāng)于碎紙機(jī),z清理;v過程可見;n5重復(fù)五次;u最后把文件刪除
shred: f3: pass 1/6 (random)...
shred: f3: pass 2/6 (ffffff)...
shred: f3: pass 3/6 (random)...
shred: f3: pass 4/6 (000000)...
shred: f3: pass 5/6 (random)...
shred: f3: pass 6/6 (000000)...
shred: f3: removing
shred: f3: renamed to 00
shred: 00: renamed to 0
shred: f3: removed
rm刪除點(diǎn)打頭的文件
[root@centos6 app]#touch .a
[root@centos6 app]#ls -a
.  ..  .a  f1  f1.txt.bak  f2  f2.txt.bak  f3.txt.bak  sda1  xxx  zero
[root@centos6 app]#rm -f *   #不能刪除點(diǎn)打頭的文件
[root@centos6 app]#ls -a
.  ..  .a  #點(diǎn)打頭的文件還在
[root@centos6 app]#rm -f .*  #執(zhí)行這條命令才能刪除點(diǎn)打頭的文件
[root@centos6 app]#ls -a
rm刪除目錄
[root@centos6 app]#mkdir f1
[root@centos6 app]#ls
f1
[root@centos6 app]#rm -rf /app #提示要把目錄也刪除,但/app是個(gè)分區(qū)掛載點(diǎn),
無法刪除,只把目錄里的內(nèi)容刪除
rm: cannot remove `/app': Device or resource busy
[root@centos6 app]#ls
[root@centos6 app]#mkdir f1
[root@centos6 app]#ls
f1
[root@centos6 app]#rm -rf /app/* #不提示刪除/app
[root@centos6 app]#ls
總結(jié):分區(qū)掛載點(diǎn)無法刪除,要想刪除一個(gè)目錄下的文件而不刪除目錄
的寫法為rm -rf /D/* ,如果rm-rf /D 則會(huì)連目錄也刪除。

軟連接和硬鏈接、inode

ln 創(chuàng)建硬鏈接 ln-s 創(chuàng)建軟連接
軟連接和硬鏈接的區(qū)別

本質(zhì):硬鏈接本質(zhì)上是同一個(gè)文件,只是一個(gè)文件具有兩個(gè)名字,彼此之間是平等的關(guān)系,節(jié)點(diǎn)號相同;
軟連接本質(zhì)上不是同一個(gè)文件,節(jié)點(diǎn)號不同,相當(dāng)于windows里面的快捷方式。
區(qū)別:

硬鏈接不允許對目錄創(chuàng)建,軟連接可以,如果要想使目錄的鏈接數(shù)增加,可以在當(dāng)前目錄內(nèi)創(chuàng)建多個(gè)子目錄來實(shí)現(xiàn);
硬鏈接不允許跨分區(qū),軟鏈接可以;
創(chuàng)建硬鏈接后連接數(shù)加1,軟鏈接鏈接數(shù)不增長;
刪除硬鏈接后互相不影響,刪除軟連接源文件后,軟連接就失效了;
硬鏈接文件的大小和屬性完全相同,軟鏈接大小、屬性和源文件不同,軟鏈接的大小由源文件的名的字符多少?zèng)Q定;
軟鏈接的相對路徑不是相對于當(dāng)前工作目錄,而是相對于軟連接的當(dāng)前工作目錄,硬鏈接相對于當(dāng)前工作目錄和相對于硬鏈接的工作目錄都可以。

[root@centos6 app]#ln -s f1 f2 #創(chuàng)建f1文件的軟連接
[root@centos6 app]#ll
total 0
-rw-r--r--. 1 root root 0 Jul 19 22:06 f1
lrwxrwxrwx. 1 root root 2 Jul 19 22:06 f2 -> f1   #f2大小為f1的字符數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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