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
stat [OPTION]... FILE...node
==access time:訪問時間,atime,讀取文件內容
modify time:修改時間,mtime,改變文件內容(數據)
change time:改變時間, ctime,元數據發生改變==linux
-a 僅改變atime和ctime
-m 僅改變mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的時間戳
-c 若是文件不存在,則不予建立shell
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文件存在則直接覆蓋
alias backup='cp -av /etc /data/testdir/backup`date +%F`' 要想永久生效保存至 .bashrc文件
cp -a /root /data/rootdir
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...緩存
==小技巧:
將rm 別名爲mv至 /data目錄,即再執行rm命令時,自動將要刪除的文件mv至/data文件下==
alias rm='mv -t /data'
更保險的操做
rm -rf 強制遞歸刪除目錄樹
bash
tree -d 只顯示目錄 tree -L level :只顯示指定的層級數目 tree -P pattern:只顯示由指定patter匹配到的路徑
mkdir -p: 存在於不報錯,且可自動建立所需的各目錄 mkdir -v: 顯示詳細信息 mkdir -m MODE: 建立目錄時直接指定權限
rename [options] expression replacement file...架構
rename "conf" "conf.bak" file* 表示對全部file開都的文件,其文件名中的conf所有從新命名爲conf.bak
file -b 列出文件辨識結果時,不顯示文件名稱 file -f filelist列出文件filelist中文件名的文件類型 file -F 使用指定分隔符號替換輸出文件名後默認的」:」分隔符 file -L 查看對應軟連接對應文件的文件類型
普通用戶掛載光盤:一、cd /msic/cd 二、pwd
光盤已掛載socket
/dev:設備文件及特殊文件
- b,block device:隨機訪問
- c, character device:線性訪問
/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等文件
/var:variable data files,擁有第二層FHS目錄結構
- cache: 應用程序緩存數據目錄
- lib: 應用程序狀態信息數據
- local:專用於爲/usr/local下的應用程序存儲可變數據;
- lock: 鎖文件
- log: 日誌目錄及文件
- opt: 專用於爲/opt下的應用程序存儲可變數據;
- run: 運行中的進程相關數據,一般用於存儲進程pid文件
- spool: 應用程序數據池
- tmp: 保存系統兩次重啓之間產生的臨時數據
/proc: 用於輸出內核與進程信息相關的虛擬文件系統
-:普通文件
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/bigfilel: 符號連接文件
p: 管道文件pipe
s: 套接字文件socket
文件儲存在硬盤上,硬盤的最小存儲單位叫作"扇區"(Sector)。每一個扇區儲存512字節(至關於0.5KB)。
操做系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率過低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最多見的是4KB,即連續八個 sector組成一個 block。
文件數據都儲存在"塊"中,那麼很顯然,咱們還必須找到一個地方儲存文件的元信息,好比文件的建立者、文件的建立日期、文件的大小等等。這種儲存文件元信息的區域就叫作inode,中文譯名爲"索引節點"。
每個文件都有對應的inode,裏面包含了與該文件有關的一些信息。
node包含文件的元信息,具體來講有如下內容:
文件的Group ID
文件的讀、寫、執行權限
文件的時間戳,共有三個:
- ctime指inode上一次變更的時間,
- mtime指文件內容上一次變更的時間,
- atime指文件上一次打開的時間。
連接數,即有多少文件名指向這個inode
文件數據block的位置
能夠用stat命令,查看某個文件的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號碼用光後沒法再建立新的文件
每一個inode都有一個號碼,操做系統用inode號碼來識別不一樣的文件。
這裏值得重複一遍,Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來講,文件名只是inode號碼便於識別的別稱或者綽號。
表面上,用戶經過文件名,打開文件。實際上,系統內部這個過程分紅三步:首先,系統找到這個文件名對應的inode號碼;其次,經過inode號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。
ls -i #查看當前文件夾下各個文件的inode號碼 ls -i /data/file1 #查看/data/file1文件的inode號碼
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加上它的子目錄總數(含隱藏目錄)。
文件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
因爲inode號碼與文件名分離,這種機制致使了一些Unix/Linux系統特有的現象。
1. 有時,文件名包含特殊字符,沒法正常刪除。這時,直接刪除inode節點,就能起到刪除文件的做用。
2. 移動文件或重命名文件,只是改變文件名,不影響inode號碼。
3. 打開一個文件之後,系統就以inode號碼來識別這個文件,再也不考慮文件名。所以,一般來講,系統沒法從inode號碼得知文件名。
第3點使得軟件更新變得簡單,能夠在不關閉軟件的狀況下進行更新,不須要重啓。由於系統經過inode號碼,識別運行中的文件,不經過文件名。更新的時候,新版文件以一樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟件的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。
mkdir -p /testdir/dir1/{x,y}/{a,b} tree └── testdir └── dir1 ├── x │ ├── a │ └── b └── y ├── a └── b
mkdir -p /testdir/dir2/{x/{a,b},y} └── testdir └── dir2 ├── x │ ├── a │ └── b └── y
mkdir -p /testdir/{dir3,dir4,dir5/{dir6,dir7}} mkdir -p /testdir/dir{3,4,5/{6,7}}