1. 程式人生 > >與伺服器鬥智鬥勇之檔案目錄1

與伺服器鬥智鬥勇之檔案目錄1

檔案和目錄的管理上,無非就是顯示屬性,複製,刪除,還有移動這幾個,不過看似簡單,其實需要注意的地方很多,難得並不是這個操作有多麼困難,而是這個檔案的存放位置的規劃,最好自己心理很明確,再去操作,畢竟和Windows相比較而言,Linux的人機介面並沒有那麼友好

這篇只討論關於檔案和目錄的基礎管理知識

首先是檢視

檢視,無非就是ls這個命令

格式 ls 引數 目錄名稱

常用的是ls -alh 目錄,引數的意思分別是a:列出全部檔案,包括隱藏檔案,l:列出長資料串,包括許可權屬性這些資訊,h:將檔案容量用易讀的如KB,GB這種單位列出來

[[email protected] ~]# ls -alh ~ 總用量 52K dr-xr-x---. 16 root root 4.0K 9月  26 16:47 . dr-xr-xr-x. 18 root root  236 6月  19 04:34 .. -rw-------.  1 root root 2.2K 6月  17 18:47 anaconda-ks.cfg -rw-------.  1 root root 1.7K 9月  25 23:46 .bash_history -rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout -rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile -rw-r--r--.  1 root root  176 12月 29 2013 .bashrc drwx------. 11 root root  221 6月  17 20:08 .cache ls --color=never/auto/always 目錄,這個是設定是否顯示顏色的,auto是根據系統設定自行判定,可與上面的引數共用

另外有的時候會有需要看具體建立時間的,可以在引數後面再加個--full-time

ls 的引數很多,最常用的就是-l,所以很多時候ll就意味著ls -al,這個比較省心

複製,cp(copy),這個命令還可以建立連線檔案,也就是快捷方式,也可以對比兩個檔案的新舊而予以更相信,以及複製整個目錄

要複製一個檔案,首先就要有read許可權

cp 引數 原始檔 目標檔案   或者  cp 引數 原始檔1 原始檔2 原始檔3 目標目錄,同時複製多個檔案目標一定是個目錄

-a:包括所有者所有組等資訊全部複製

-d:若檔案是連線檔案,則複製連結檔案屬性而非檔案本身

-f:意思是強制,如果目標檔案已經存在且無法開啟,則刪除後嘗試一次

-i:若目標檔案已經存在,則覆蓋時會先進行詢問確認

-l:進行硬連結的連結檔案建立,而非複製檔案本身

-p:連同檔案屬性一起復制過去,而不是使用預設屬性,這個是在備份的時候常用

-r:遞迴持續複製,用於目錄的複製行為

-s:複製為軟連線檔案,也就是常見的快捷方式

-u:目標檔案比原始檔舊才更新目標檔案

不同身份的執行者執行這個命令會有不同的結果產生,下面做幾個演示

[[email protected] ~]# cp ~/.bashrc /tmp/bashrc [[email protected] ~]# cp -i ~/.bashrc /tmp/bashrc cp:是否覆蓋"/tmp/bashrc"? y                       #這裡就可以看到會詢問一下 [

[email protected] ~]# cd /tmp [[email protected] tmp]# cp /var/log/wtmp .                #這個‘.’是複製到當前目錄的意思,前面講過路徑 [[email protected] tmp]# ls -l /var/log/wtmp wtmp -rw-rw-r--. 1 root utmp 11520 9月  26 17:45 /var/log/wtmp -rw-r--r--. 1 root root 11520 9月  26 21:05 wtmp                     #可以看到複製的檔案屬性不夠全面 [[email protected] tmp]# cp -a /var/log/wtmp wtmp_2 [[email protected] tmp]# ls -l /var/log/wtmp wtmp_2 -rw-rw-r--. 1 root utmp 11520 9月  26 17:45 /var/log/wtmp -rw-rw-r--. 1 root utmp 11520 9月  26 17:45 wtmp_2                   #這樣就是全部屬性都複製過來了  

一般我們複製一個檔案的時候自然是希望這個檔案複製成我們自己的,所以在預設的情況下,原始檔和目標檔案的特性是不同的,目標檔案的所有者一般會是命令操作者本身,所以在演示中可以看到複製過來以後檔案特性都變了

由於具有這個特性,當我們在進行備份的時候,有些特殊許可權的檔案比如/etc/shadow,還有一些配置檔案,我們就不希望直接以cp進行復制,而必須加上-a或者-p等許可權,以把所有的檔案特性一起復制,另外要複製檔案給其他使用者,也必須要注意檔案的各個許可權

複製目錄與檔案只有一個-r的差別,目錄是不能直接複製的而-l和-s這兩個比較需要注意下,主要硬連結和軟連線的概念,我們知道檔案都有檔名與資料,這在 Linux 上被分成兩個部分:使用者資料 (user data) 與元資料 (metadata)。使用者資料,即檔案資料塊 (data block),資料塊是記錄檔案真實內容的地方;而元資料則是檔案的附加屬性,如檔案大小、建立時間、所有者等資訊。在 Linux 中,元資料中的 inode 號(inode 是檔案元資料的一部分但其並不包含檔名,inode 號即索引節點號)才是檔案的唯一標識而非檔名。檔名僅是為了方便人們的記憶和使用,系統或程式通過 inode 號尋找正確的檔案資料塊。下圖展示了程式通過檔名獲取檔案內容的過程。

為解決檔案的共享使用,Linux 系統引入了兩種連結:硬連結 (hard link) 與軟連結(又稱符號連結,即 soft link 或 symbolic link)。連結為 Linux 系統解決了檔案的共享使用,還帶來了隱藏檔案路徑、增加許可權安全及節省儲存等好處。若一個 inode 號對應多個檔名,則稱這些檔案為硬連結。換言之,硬連結就是同一個檔案使用了多個別名,軟連線也就是一個快捷方式,所以在ls -al的時候,輸出第二列就是連線數,而如果我們為一個檔案建立一個軟連線,我們會看到一個->符號,如果我們建立一個硬連結,那麼他的檔案屬性會完全相同,而且檔案連結數會加一

刪除檔案:rm

命令簡單的不行,-f,強制執行,-r遞迴刪除,用於目錄,只有-i正常一點,刪除前詢問一下

那麼rm -rf /*呢?

所以檔名不能以-開頭,要不然刪除的時候還以為是引數,而且,rm最好帶上-i,冷靜最好

移動檔案:mv  引數 原始檔 目的檔案   或者 mv 引數 原始檔1 原始檔2····· 目標目錄

-f :強制執行,如果目標檔案已經存在,直接強制覆蓋

-i:若目標檔案已經存在 ,會詢問一下是否覆蓋

-u:目標檔案已經存在,且原始檔更新,才會進行覆蓋(可以用來進行比對更新)

比較常用的還有一個功能

mv 原檔名 新檔名:重新命名操作