本節(jié)節(jié)選自鳥哥的 Linux 私房菜 -- 基礎(chǔ)學(xué)習(xí)篇目錄 第七章、Linux 文件與目錄管理
ls(文件與目錄的檢視)ls命令就是list的縮寫,ls可以說是最常用命令,因為我們隨時都要知道文件或者是目錄的相關(guān)屬性。
[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱[root@www ~]# ls [--color={never,auto,always}] 目錄名稱[root@www ~]# ls [--full-time] 目錄名稱選項與參數(shù):-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)-A :全部的文件,連同隱藏檔,但不包括 . 與 .. 這兩個目錄-d :僅列出目錄本身,而不是列出目錄內(nèi)的文件數(shù)據(jù)(常用)-f :直接列出結(jié)果,而不進(jìn)行排序 (ls 默認(rèn)會以檔名排序!)-F :根據(jù)文件、目錄等資訊,給予附加數(shù)據(jù)結(jié)構(gòu),例如: *:代表可運行檔; /:代表目錄; =:代表 socket 文件; |:代表 FIFO 文件;-h :將文件容量以人類較易讀的方式(例如 GB, KB 等等)列出來;-i :列出 inode 號碼,inode 的意義下一章將會介紹;-l :長數(shù)據(jù)串列出,包含文件的屬性與權(quán)限等等數(shù)據(jù);(常用)-n :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳號管理提到!)-r :將排序結(jié)果反向輸出,例如:原本檔名由小到大,反向則為由大到小;-R :連同子目錄內(nèi)容一起列出來,等於該目錄下的所有文件都會顯示出來;-S :以文件容量大小排序,而不是用檔名排序;-t :依時間排序,而不是用檔名。--color=never :不要依據(jù)文件特性給予顏色顯示;--color=always :顯示顏色--color=auto :讓系統(tǒng)自行依據(jù)配置來判斷是否給予顏色--full-time :以完整時間模式 (包含年、月、日、時、分) 輸出--time={atime,ctime} :輸出 access 時間或改變權(quán)限屬性時間 (ctime) 而非內(nèi)容變更時間 (modification time)最常用的是ls –l,很多 linux的版本在默認(rèn)的情況中, 已經(jīng)將 ll (L 的小寫) 配置成為 ls -l 的意思了!其實,那個功能是 Bash shell 的 alias 功能呢~也就是說,我們直接輸入 ll 就等於是輸入 ls -l 是一樣的
例一:-al顯示所有的文件,隱藏的也顯示[root@localhost ~]# ls -altotal 52dr-xr-x---. 2 root root 4096 Nov 3 20:06 .dr-xr-xr-x. 22 root root 4096 Nov 14 16:08 ..-rw-------. 1 root root 1098 Nov 3 19:57 anaconda-ks.cfg-rw-------. 1 root root 1483 Dec 11 12:16 .bash_history-rw-r--r--. 1 root root 18 May 20 2009 .bash_logout-rw-r--r--. 1 root root 176 May 20 2009 .bash_PRofile-rw-r--r--. 1 root root 176 Sep 23 2004 .bashrc-rw-r--r--. 1 root root 100 Sep 23 2004 .cshrc-rw-r--r--. 1 root root 8726 Nov 3 19:57 install.log-rw-r--r--. 1 root root 3190 Nov 3 19:56 install.log.syslog-rw-r--r--. 1 root root 129 Dec 4 2004 .tcshrc 例二:-l 顯示文件,隱藏的不顯示[root@localhost ~]# ls -ltotal 20-rw-------. 1 root root 1098 Nov 3 19:57 anaconda-ks.cfg-rw-r--r--. 1 root root 8726 Nov 3 19:57 install.log-rw-r--r--. 1 root root 3190 Nov 3 19:56 install.log.syslog例三:ll 同ls -l[root@localhost ~]# lltotal 20-rw-------. 1 root root 1098 Nov 3 19:57 anaconda-ks.cfg-rw-r--r--. 1 root root 8726 Nov 3 19:57 install.log-rw-r--r--. 1 root root 3190 Nov 3 19:56 install.log.syslogcp (復(fù)制文件或目錄)
要復(fù)制文件,請使用 cp (copy) 這個命令即可~不過, cp 這個命令的用途可多了~ 除了單純的復(fù)制之外,還可以創(chuàng)建連結(jié)檔 (就是捷徑羅),比對兩文件的新舊而予以升級, 以及復(fù)制整個目錄等等的功能呢!
[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標(biāo)檔(destination)[root@www ~]# cp [options] source1 source2 source3 .... directory選項與參數(shù):-a :相當(dāng)於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)-d :若來源檔為連結(jié)檔的屬性(link file),則復(fù)制連結(jié)檔屬性而非文件本身;-f :為強(qiáng)制(force)的意思,若目標(biāo)文件已經(jīng)存在且無法開啟,則移除后再嘗試一次;-i :若目標(biāo)檔(destination)已經(jīng)存在時,在覆蓋時會先詢問動作的進(jìn)行(常用)-l :進(jìn)行硬式連結(jié)(hard link)的連結(jié)檔創(chuàng)建,而非復(fù)制文件本身;-p :連同文件的屬性一起復(fù)制過去,而非使用默認(rèn)屬性(備份常用);-r :遞回持續(xù)復(fù)制,用於目錄的復(fù)制行為;(常用)-s :復(fù)制成為符號連結(jié)檔 (symbolic link),亦即『捷徑』文件;-u :若 destination 比 source 舊才升級 destination !最后需要注意的,如果來源檔有兩個以上,則最后一個目的檔一定要是『目錄』才行!
復(fù)制(cp)這個命令是非常重要的,不同身份者運行這個命令會有不同的結(jié)果產(chǎn)生,尤其是那個-a, -p的選項, 對於不同身份來說,差異則非常的大!
范例一:用root身份,將家目錄下的 .bashrc 復(fù)制到 /tmp 下,并更名為 bashrc[root@www ~]# cp ~/.bashrc /tmp/bashrc[root@www ~]# cp -i ~/.bashrc /tmp/bashrccp: overwrite `/tmp/bashrc'? n <==n不覆蓋,y為覆蓋# 重復(fù)作兩次動作,由於 /tmp 底下已經(jīng)存在 bashrc 了,加上 -i 選項后,# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y 來二次確認(rèn)呢!范例二:變換目錄到/tmp,并將/var/log/wtmp復(fù)制到/tmp且觀察屬性:[root@www ~]# cd /tmp[root@www tmp]# cp /var/log/wtmp . <==想要復(fù)制到目前的目錄,最后的 . 不要忘[root@www tmp]# ls -l /var/log/wtmp wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp# 注意上面的特殊字體,在不加任何選項的情況下,文件的某些屬性/權(quán)限會改變;# 這是個很重要的特性!要注意喔!還有,連文件創(chuàng)建的時間也不一樣了!# 那如果你想要將文件的所有特性都一起復(fù)制過來該怎辦?可以加上 -a 喔!如下所示:[root@www tmp]# cp -a /var/log/wtmp wtmp_2[root@www tmp]# ls -l /var/log/wtmp wtmp_2-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2# 了了吧!整個數(shù)據(jù)特性完全一模一樣ㄟ!真是不賴~這就是 -a 的特性!
一般來說,我們?nèi)绻?fù)制別人的數(shù)據(jù) (當(dāng)然,該文件你必須要有 read 的權(quán)限才行啊! ^_^) 時, 總是希望復(fù)制到的數(shù)據(jù)最后是我們自己的,所以,在默認(rèn)的條件中, cp 的來源檔與目的檔的權(quán)限是不同的,目的檔的擁有者通常會是命令操作者本身。舉例來說, 上面的范例二中,由於我是 root 的身份,因此復(fù)制過來的文件擁有者與群組就改變成為 root 所有了!
由於具有這個特性,因此當(dāng)我們在進(jìn)行備份的時候,某些需要特別注意的特殊權(quán)限文件, 例如密碼檔 (/etc/shadow) 以及一些配置檔,就不能直接以 cp 來復(fù)制,而必須要加上 -a 或者是 -p 等等可以完整復(fù)制文件權(quán)限的選項才行!另外,如果你想要復(fù)制文件給其他的使用者, 也必須要注意到文件的權(quán)限(包含讀、寫、運行以及文件擁有者等等), 否則,其他人還是無法針對你給予的文件進(jìn)行修訂的動作喔!注意注意!
范例三:復(fù)制 /etc/ 這個目錄下的所有內(nèi)容到 /tmp 底下[root@www tmp]# cp /etc/ /tmpcp: omitting directory `/etc' <== 如果是目錄則不能直接復(fù)制,要加上 -r 的選項[root@www tmp]# cp -r /etc/ /tmp# 還是要再次的強(qiáng)調(diào)喔! -r 是可以復(fù)制目錄,但是,文件與目錄的權(quán)限可能會被改變# 所以,也可以利用『 cp -a /etc /tmp 』來下達(dá)命令喔!尤其是在備份的情況下!范例四:將范例一復(fù)制的 bashrc 創(chuàng)建一個連結(jié)檔 (symbolic link)[root@www tmp]# ls -l bashrc-rw-r--r-- 1 root root 176 Sep 24 14:02 bashrc <==先觀察一下文件情況[root@www tmp]# cp -s bashrc bashrc_slink[root@www tmp]# cp -l bashrc bashrc_hlink[root@www tmp]# ls -l bashrc*-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc <==與原始文件不太一樣了!-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlinklrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc
范例四可有趣了!使用 -l 及 -s 都會創(chuàng)建所謂的連結(jié)檔(link file),但是這兩種連結(jié)檔卻有不一樣的情況。這是怎么一回事啊? 那個 -l 就是所謂的實體連結(jié)(hard link),至於 -s 則是符號連結(jié)(symbolic link), 簡單來說,bashrc_slink 是一個『捷徑』,這個捷徑會連結(jié)到bashrc去!所以你會看到檔名右側(cè)會有個指向(->)的符號!
至於bashrc_hlink文件與bashrc的屬性與權(quán)限完全一模一樣,與尚未進(jìn)行連結(jié)前的差異則是第二欄的link數(shù)由1變成2了!
范例五:若 ~/.bashrc 比 /tmp/bashrc 新才復(fù)制過來[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc# 這個 -u 的特性,是在目標(biāo)文件與來源文件有差異時,才會復(fù)制的。# 所以,比較常被用於『備份』的工作當(dāng)中喔! ^_^范例六:將范例四造成的 bashrc_slink 復(fù)制成為 bashrc_slink_1 與bashrc_slink_2[root@www tmp]# cp bashrc_slink bashrc_slink_1[root@www tmp]# cp -d bashrc_slink bashrc_slink_2[root@www tmp]# ls -l bashrc bashrc_slink*-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrclrwxrwxrwx 1 root root 6 Sep 24 14:20 bashrc_slink -> bashrc-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1 <==與原始文件相同lrwxrwxrwx 1 root root 6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是連結(jié)檔!# 這個例子也是很有趣喔!原本復(fù)制的是連結(jié)檔,但是卻將連結(jié)檔的實際文件復(fù)制過來了# 也就是說,如果沒有加上任何選項時,cp復(fù)制的是原始文件,而非連結(jié)檔的屬性!# 若要復(fù)制連結(jié)檔的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。范例七:將家目錄的 .bashrc 及 .bash_history 復(fù)制到 /tmp 底下[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp# 可以將多個數(shù)據(jù)一次復(fù)制到同一個目錄去!最后面一定是目錄!
例題:你能否使用vbird的身份,完整的復(fù)制/var/log/wtmp文件到/tmp底下,并更名為vbird_wtmp呢?
答:實際做看看的結(jié)果如下:
[vbird@www ~]$ cp -a /var/log/wtmp /tmp/vbird_wtmp[vbird@www ~]$ ls -l /var/log/wtmp /tmp/vbird_wtmp-rw-rw-r-- 1 vbird vbird 96384 9月 24 11:54 /tmp/vbird_wtmp-rw-rw-r-- 1 root utmp 96384 9月 24 11:54 /var/log/wtmp
由於vbird的身份并不能隨意修改文件的擁有者與群組,因此雖然能夠復(fù)制wtmp的相關(guān)權(quán)限與時間等屬性, 但是與擁有者、群組相關(guān)的,原本vbird身份無法進(jìn)行的動作,即使加上 -a 選項,也是無法達(dá)成完整復(fù)制權(quán)限的!
總之,由於 cp 有種種的文件屬性與權(quán)限的特性,所以,在復(fù)制時,你必須要清楚的了解到:
這是搬移 (move) 的意思!當(dāng)你要移動文件或目錄的時后,呵呵!這個命令就很重要啦!
[root@www ~]# mv [-fiu] source destination[root@www ~]# mv [options] source1 source2 source3 .... directory選項與參數(shù):-f :force 強(qiáng)制的意思,如果目標(biāo)文件已經(jīng)存在,不會詢問而直接覆蓋;-i :若目標(biāo)文件 (destination) 已經(jīng)存在時,就會詢問是否覆蓋!-u :若目標(biāo)文件已經(jīng)存在,且 source 比較新,才會升級 (update)范例一:復(fù)制一文件,創(chuàng)建一目錄,將文件移動到目錄中[root@www ~]# cd /tmp[root@www tmp]# cp ~/.bashrc bashrc[root@www tmp]# mkdir mvtest[root@www tmp]# mv bashrc mvtest# 將某個文件移動到某個目錄去,就是這樣做!范例二:將剛剛的目錄名稱更名為 mvtest2[root@www tmp]# mv mvtest mvtest2 <== 這樣就更名了!簡單~# 其實在 Linux 底下還有個有趣的命令,名稱為 rename ,# 該命令專職進(jìn)行多個檔名的同時更名,并非針對單一檔名變更,與mv不同。請man rename。范例三:再創(chuàng)建兩個文件,再全部移動到 /tmp/mvtest2 當(dāng)中[root@www tmp]# cp ~/.bashrc bashrc1[root@www tmp]# cp ~/.bashrc bashrc2[root@www tmp]# mv bashrc1 bashrc2 mvtest2# 注意到這邊,如果有多個來源文件或目錄,則最后一個目標(biāo)檔一定是『目錄!』# 意思是說,將所有的數(shù)據(jù)移動到該目錄的意思!rm (移除文件或目錄)
這是移除的命令(remove),要注意的是,通常在Linux系統(tǒng)下,為了怕文件被誤殺,所以很多 distributions 都已經(jīng)默認(rèn)加入 -i 這個選項了!而如果要連目錄下的東西都一起殺掉的話, 例如子目錄里面還有子目錄時,那就要使用 -r 這個選項了!不過,使用『 rm -r 』這個命令之前,請千萬注意了,因為該目錄或文件『肯定』會被 root 殺掉!因為系統(tǒng)不會再次詢問你是否要砍掉呦!所以那是個超級嚴(yán)重的命令下達(dá)呦! 得特別注意!不過,如果你確定該目錄不要了,那么使用 rm -r 來循環(huán)殺掉是不錯的方式!
[root@www ~]# rm [-fir] 文件或目錄選項與參數(shù):-f :就是 force 的意思,忽略不存在的文件,不會出現(xiàn)警告信息;-i :互動模式,在刪除前會詢問使用者是否動作-r :遞回刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!范例一:將剛剛在 cp 的范例中創(chuàng)建的 bashrc 刪除掉![root@www ~]# cd /tmp[root@www tmp]# rm -i bashrcrm: remove regular file `bashrc'? y# 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!范例二:透過萬用字節(jié)*的幫忙,將/tmp底下開頭為bashrc的檔名通通刪除:[root@www tmp]# rm -i bashrc*# 注意那個星號,代表的是 0 到無窮多個任意字節(jié)喔!很好用的東西!范例三:將 cp 范例中所創(chuàng)建的 /tmp/etc/ 這個目錄刪除掉![root@www tmp]# rmdir /tmp/etcrmdir: etc: Directory not empty <== 刪不掉啊!因為這不是空的目錄![root@www tmp]# rm -r /tmp/etcrm: descend into directory `/tmp/etc'? y....(中間省略)....# 因為身份是 root ,默認(rèn)已經(jīng)加入了 -i 的選項,所以你要一直按 y 才會刪除!# 如果不想要繼續(xù)按 y ,可以按下『 [ctrl]-c 』來結(jié)束 rm 的工作。# 這是一種保護(hù)的動作,如果確定要刪除掉此目錄而不要詢問,可以這樣做:[root@www tmp]# /rm -r /tmp/etc# 在命令前加上反斜線,可以忽略掉 alias 的指定選項喔!至於 alias 我們在bash再談!范例四:刪除一個帶有 - 開頭的文件[root@www tmp]# touch ./-aaa- <==touch這個命令可以創(chuàng)建空文件![root@www tmp]# ls -l -rw-r--r-- 1 root root 0 Sep 24 15:03 -aaa- <==文件大小為0,所以是空文件[root@www tmp]# rm -aaa-Try `rm --help' for more information. <== 因為 "-" 是選項嘛!所以系統(tǒng)誤判了![root@www tmp]# rm ./-aaa-
另外,范例四也是很有趣的例子,我們在之前就談過,檔名最好不要使用 "-" 號開頭, 因為 "-" 后面接的是選項,因此,單純的使用『 rm -aaa- 』系統(tǒng)的命令就會誤判啦! 那如果使用后面會談到的正規(guī)表示法時,還是會出問題的!所以,只能用避過首位字節(jié)是 "-" 的方法啦! 就是加上本目錄『 ./ 』即可!如果 man rm 的話,其實還有一種方法,那就是『 rm -- -aaa- 』也可以啊!
新聞熱點
疑難解答
圖片精選