文件管理及相關命令

1、文件相關的命令

1.rz和sz命令

rz 將文件從Windows複製至Linux中
sz 將文件從Linux複製至Windows中
安裝這個工具:
①lsblk 查看光盤掛載的路徑
②rpm -ivh /media/CentOS_6.9_Final/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm
注意:無需輸入完整路徑文件名,多利用tab鍵html

2.stat Display file or file system status.展現文件或文件系統的狀態屬性

stat [OPTION]... FILE...node

==access time:訪問時間,atime,讀取文件內容
modify time:修改時間,mtime,改變文件內容(數據)
change time:改變時間, ctime,元數據發生改變==
linux

3.touch 建立文件

-a 僅改變atime和ctime
-m 僅改變mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的時間戳
-c 若是文件不存在,則不予建立shell

4.cp 複製文件

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...express

cp -a    same as -dR --preserve=all     所有複製,可用於備份文件
cp -d    same as --no-dereference --preserve=links    不復制源文件,只複製連接
cp -i    複製如有覆蓋別的文件,會在覆蓋前提示(注意:$普通用戶默認不帶-i)
cp -n   do not overwrite an existing file
cp -p    等同--preserv=mode,ownership,timestamp  保留權限、全部者、時間戳
cp -f   --force,if an existing destination file cannot be opened, remove it and try again (this option is ignored when the -n option is also used)
cp -v  顯示覆制過程
cp -u   copy only when the SOURCE file is newer than the destination file or when the destination file is missing
cp -r (-R) --recursive,copy directories recursively

在這裏插入圖片描述

==注意:==windows

cp /etc/hosts  /data/test/      表示將hosts文件複製至/data/test/目錄下,前提是test目錄存在,若是不存在將會報錯!
cp /etc/hosts  /data/test       表示將hosts文件複製至/data目錄下,並重命名爲test(因此cp命令也帶更名功能),若是test文件存在則直接覆蓋
  • 練習:
  1. 定義別名命令baketc,天天將/etc/目錄下全部文件,備份到/testdir獨立的子目錄下,並要求子目錄格式爲backupYYYY-mm-dd,備份過程可見
alias backup='cp -av /etc  /data/testdir/backup`date +%F`'
要想永久生效保存至 .bashrc文件
  1. 建立/testdir/rootdir目錄,並複製/root下全部文件到該目錄內,要求保留原有權限
cp -a  /root  /data/rootdir

5. mv 移動、重命名文件(move (rename) files)

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

6.rm 刪除文件(remove files or directories)

==小技巧:
將rm 別名爲mv至 /data目錄,即再執行rm命令時,自動將要刪除的文件mv至/data文件下
==
alias rm='mv -t /data' 更保險的操做
rm -rf 強制遞歸刪除目錄樹bash

7.tree 顯示目錄樹

tree -d  只顯示目錄
tree -L level :只顯示指定的層級數目
tree -P pattern:只顯示由指定patter匹配到的路徑

8.mkdir 建立目錄

mkdir -p: 存在於不報錯,且可自動建立所需的各目錄
mkdir -v: 顯示詳細信息
mkdir -m MODE: 建立目錄時直接指定權限

9.rename 批量更名

rename [options] expression replacement file...架構

rename   "conf"   "conf.bak"   file*       表示對全部file開都的文件,其文件名中的conf所有從新命名爲conf.bak

10.file 肯定文件類型

file -b 列出文件辨識結果時,不顯示文件名稱
file -f filelist列出文件filelist中文件名的文件類型
file -F 使用指定分隔符號替換輸出文件名後默認的」:」分隔符
file -L 查看對應軟連接對應文件的文件類型

11.神奇的小技巧

普通用戶掛載光盤:一、cd /msic/cd 二、pwd
光盤已掛載socket

2、文件系統

文件系統結構圖

1.文件系統的一些特色

  1. 文件和目錄造成一個倒掛的樹樁結構
  2. 文件從跟「/」下開始
  3. 文件名稱區分大小寫
    (注意:區分大小寫非Linux系統的緣由,而是文件系統採用ext4和xfs格式的緣由。從Windows複製一個fat32的文件就不區分大小寫)
  4. 以「.」開頭的文件時隱藏文件,用通配符能夠表示爲.*
  5. Linux一切皆文件,皆以文件的形式體現
  6. 文件有兩類數據:
  • 元數據(metadata):爲描述數據的數據,主要描述數據的屬性信息,如大小、文件名、文件權限、建立時間、修改時間等信息。
  • 數據(data):
  1. Linux目錄配置的依據:FHS(Filesystem Hierarchy Standard)
    有時間可詳看:http://www.pathname.com/fhs/
  2. 文件名最長255個字節
  3. 通常,藍色——目錄、綠色——可執行文件,紅色——壓縮文件、淺藍色——連接文件,等等

2.一些主要文件夾說明

  1. /boot : 引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader, grub)都存放於此目錄
  2. /bin :供全部用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序
  3. /sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序,root權限下才可使用
  4. /lib,/lib64:庫文件,啓動時程序依賴的基本共享庫文件以及內核模塊文件
  5. /etc:配置文件
  6. /root:管理員的家目錄
  7. /home:普通用戶的家目錄
  8. /media:便攜式移動設備掛載點
  9. /dev:設備文件及特殊文件

    • b,block device:隨機訪問
    • c, character device:線性訪問
  10. /tmp:臨時存儲文件
  11. /usr:擁有第二層的FHS文件設置,universal shared, read-only data

    • /usr/bin:全部通常用戶可以使用的指令都放在這裏!CentOS 7 已經將所有的使用者指令放置於此,而使用連接文件的方式將 /bin 連接至此!也就是說, /usr/bin 與 /bin 是如出一轍了!
    • /usr/share:主要放置只讀架構的數據文件,固然也包括共享文件。在這個目錄下放置的數據幾乎是不分硬件架構都可讀取的數據。在此目錄下常見的還有這些:/usr/share/man;線上說明文檔 /usr/share/doc:軟件雜項的文件/usr/share/zoneinfo;與時區有關的時區文件
    • /usr/local:第三方應用程序的安裝位置,其下也有bin、lib、etc、share等文件
  12. /var:variable data files,擁有第二層FHS目錄結構

    • cache: 應用程序緩存數據目錄
    • lib: 應用程序狀態信息數據
    • local:專用於爲/usr/local下的應用程序存儲可變數據;
    • lock: 鎖文件
    • log: 日誌目錄及文件
    • opt: 專用於爲/opt下的應用程序存儲可變數據;
    • run: 運行中的進程相關數據,一般用於存儲進程pid文件
    • spool: 應用程序數據池
    • tmp: 保存系統兩次重啓之間產生的臨時數據
  13. /proc: 用於輸出內核與進程信息相關的虛擬文件系統

3.Linux下的文件類型:

-:普通文件
d: 目錄文件
b: 塊設備
c: 字符設備. 如 ll /dev/zero. 該類文件能夠迅速在磁盤中填充一個指定容量的文件或建立大文件.

==dd if=/dev/zero of=/data/bigfile bs=1M count=1024== 表示在data目錄中建立一個bigfile的1G大的文件
其中,dd爲命令,if爲input file,of爲output file,bs爲 block size
因爲此文件問二進制文件,cat命令沒法看,須要用hexdump命令查看二進制文件
hexdump -c /data/bigfile

l: 符號連接文件
p: 管道文件pipe
s: 套接字文件socket

3、iNode(index node)索引節點

如下內容轉自阮一峯理解iNode

1.iNode是什麼

文件儲存在硬盤上,硬盤的最小存儲單位叫作"扇區"(Sector)。每一個扇區儲存512字節(至關於0.5KB)。

操做系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率過低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最多見的是4KB,即連續八個 sector組成一個 block。

文件數據都儲存在"塊"中,那麼很顯然,咱們還必須找到一個地方儲存文件的元信息,好比文件的建立者、文件的建立日期、文件的大小等等。這種儲存文件元信息的區域就叫作inode,中文譯名爲"索引節點"。

每個文件都有對應的inode,裏面包含了與該文件有關的一些信息。

2.iNode的內容

node包含文件的元信息,具體來講有如下內容:

  • 文件的字節數
  • 文件擁有者的User ID
  • 文件的Group ID

  • 文件的讀、寫、執行權限

  • 文件的時間戳,共有三個:

    • ctime指inode上一次變更的時間,
    • mtime指文件內容上一次變更的時間,
    • atime指文件上一次打開的時間。
  • 連接數,即有多少文件名指向這個inode

  • 文件數據block的位置

能夠用stat命令,查看某個文件的inode信息:
在這裏插入圖片描述

3.iNode大小

inode也會消耗硬盤空間,因此硬盤格式化的時候,操做系統自動將硬盤分紅兩個區域。一個是數據區,存放文件數據;另外一個是inode區(inode table),存放inode所包含的信息。

每一個inode節點的大小,通常是128字節或256字節。inode節點的總數,在格式化時就給定,通常是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每一個inode節點的大小爲128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,佔整塊硬盤的12.8%。
(128M是這麼來的,1k/1G=128B/128M)

df -i   查看硬盤分區可用的iNode總數和已經使用的數量
sudo dumpe2fs -h /dev/hda | grep "Inode size"    查看每個節點的大小

==注意:因爲每一個文件都必須有一個inode,所以有可能發生inode已經用光,可是硬盤還未存滿的狀況。這時,就沒法在硬盤上建立新文件。實驗以下:==

echo file{1..524288} | xargs touch  表示在當前文件夾下建立file1,file2....file524288個文件,將iNode所有用光
echo file*|xargs rm  刪除當前文件夾內file開頭的文件

在這裏插入圖片描述
可見,當iNode號碼用光後沒法再建立新的文件

4.inode號碼及系統打開文件的過程

每一個inode都有一個號碼,操做系統用inode號碼來識別不一樣的文件。

這裏值得重複一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來講,文件名只是inode號碼便於識別的別稱或者綽號。

表面上,用戶經過文件名,打開文件。實際上,系統內部這個過程分紅三步:首先,系統找到這個文件名對應的inode號碼;其次,經過inode號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。

ls -i     #查看當前文件夾下各個文件的inode號碼
ls -i /data/file1   #查看/data/file1文件的inode號碼

5.目錄文件

Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。

==目錄文件的結構很是簡單,就是一系列目錄項(dirent)的列表。每一個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。==
/etc目錄下各文件的inode號碼
在這裏插入圖片描述
/etc這個目錄文件自己的inode號碼
在這裏插入圖片描述
目錄文件的讀權限(r)和寫權限(w),都是針對目錄文件自己。因爲目錄文件內只有文件名和inode號碼,因此若是隻有讀權限,只能獲取文件名,沒法獲取其餘信息,由於其餘信息都儲存在inode節點中,而讀取inode節點內的信息須要目錄文件的執行權限(x)。

通常狀況下,文件名和inode號碼是"一一對應"關係,每一個inode號碼對應一個文件名。可是,Unix/Linux系統容許,多個文件名指向同一個inode號碼。

這意味着,能夠用不一樣的文件名訪問一樣的內容;對文件內容進行修改,會影響到全部文件名;可是,刪除一個文件名,不影響另外一個文件名的訪問。這種狀況就被稱爲"硬連接"(hard link)。
ln 源文件 目標文件

ln a b    
ln a c   a b c三個文件完成了硬連接

實驗,a,b,c三個文件完成了硬連接,如今修改b文件內容,結果如何?
在這裏插入圖片描述
可見,對硬連接的文件,修改任何一個三個文件的大小均有變更,但inode號碼保持相同且不變

注意:因爲inode號碼在各分區之間互相獨立,多以硬連接不能夠跨分區建立
這裏順便說一下目錄文件的"連接數"。建立目錄時,默認會生成兩個目錄項:"."和".."。前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的"硬連接";後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的"硬連接"。因此,任何一個目錄的"硬連接"總數,老是等於2加上它的子目錄總數(含隱藏目錄)。

7.軟連接(能夠理解成windows的快捷方式)

文件A和文件B的inode號碼雖然不同,可是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。所以,不管打開哪個文件,最終讀取的都是文件B。這時,文件A就稱爲文件B的"軟連接"(soft link)符號連接(symbolic link)

這意味着,文件A依賴於文件B而存在,若是刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟連接與硬連接最大的不一樣:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode"連接數"不會所以發生變化。
ln -s命令能夠建立軟連接。
在這裏插入圖片描述
注意:一、建立軟連接時,注意絕對路徑與相對路徑的區分
二、cp軟連接,複製的還是源文件,生成新的inode;
三、軟連接是一條鏈狀,假設,ln -s a b ln -s b c ,那麼刪除b的話,a就沒法軟連接c

==8.inode的特殊做用==

因爲inode號碼與文件名分離,這種機制致使了一些Unix/Linux系統特有的現象。

  1. 有時,文件名包含特殊字符,沒法正常刪除。這時,直接刪除inode節點,就能起到刪除文件的做用。

  2. 移動文件或重命名文件,只是改變文件名,不影響inode號碼。

  3. 打開一個文件之後,系統就以inode號碼來識別這個文件,再也不考慮文件名。所以,一般來講,系統沒法從inode號碼得知文件名。

第3點使得軟件更新變得簡單,能夠在不關閉軟件的狀況下進行更新,不須要重啓。由於系統經過inode號碼,識別運行中的文件,不經過文件名。更新的時候,新版文件以一樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟件的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。

3、練習

  1. 如何建立/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
mkdir -p /testdir/dir1/{x,y}/{a,b}
tree

└── testdir
    └── dir1
        ├── x
        │   ├── a
        │   └── b
        └── y
            ├── a
            └── b
  1. 如何建立/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b
mkdir -p  /testdir/dir2/{x/{a,b},y}

└── testdir
    └── dir2
        ├── x
        │   ├── a
        │   └── b
        └── y
  1. 如何建立/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
mkdir  -p  /testdir/{dir3,dir4,dir5/{dir6,dir7}}
mkdir -p  /testdir/dir{3,4,5/{6,7}}
相關文章
相關標籤/搜索