CentOS學習筆記--基本命令--檔案與目錄管理

來源:互聯網
上載者:User

標籤:des   style   blog   http   ar   io   color   os   使用   

Linux基本命令--檔案與目錄管理

本節節選自鳥哥的 Linux 私房菜 -- 基礎學習篇目錄  第七章、Linux 檔案與目錄管理 

ls(檔案與目錄的檢視)

ls命令就是list的縮寫,ls可以說是最常用命令,因為我們隨時都要知道檔案或者是目錄的相關屬性。

[[email protected] ~]# ls [-aAdfFhilnrRSt] 目錄名稱[[email protected] ~]# ls [--color={never,auto,always}] 目錄名稱[[email protected] ~]# ls [--full-time] 目錄名稱選項與參數:-a  :全部的檔案,連同隱藏檔( 開頭為 . 的檔案) 一起列出來(常用)-A  :全部的檔案,連同隱藏檔,但不包括 . 與 .. 這兩個目錄-d  :僅列出目錄本身,而不是列出目錄內的檔案資料(常用)-f  :直接列出結果,而不進行排序 (ls 預設會以檔名排序!)-F  :根據檔案、目錄等資訊,給予附加資料結構,例如:      *:代表可運行檔; /:代表目錄; =:代表 socket 檔案; |:代表 FIFO 檔案;-h  :將檔案容量以人類較易讀的方式(例如 GB, KB 等等)列出來;-i  :列出 inode 號碼,inode 的意義下一章將會介紹;-l  :長資料串列出,包含檔案的屬性與許可權等等資料;(常用)-n  :列出 UID 與 GID 而非使用者與群組的名稱 (UID與GID會在帳號管理提到!)-r  :將排序結果反向輸出,例如:原本檔名由小到大,反向則為由大到小;-R  :連同子目錄內容一起列出來,等於該目錄下的所有檔案都會顯示出來;-S  :以檔案容量大小排序,而不是用檔名排序;-t  :依時間排序,而不是用檔名。--color=never  :不要依據檔案特性給予顏色顯示;--color=always :顯示顏色--color=auto   :讓系統自行依據配置來判斷是否給予顏色--full-time    :以完整時間模式 (包含年、月、日、時、分) 輸出--time={atime,ctime} :輸出 access 時間或改變許可權屬性時間 (ctime)                        而非內容變更時間 (modification time)

最常用的是ls –l,很多 linux的版本在預設的情況中, 已經將 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.syslog
cp (複製檔案或目錄)

要複製檔案,請使用 cp (copy) 這個命令即可~不過, cp 這個命令的用途可多了~ 除了單純的複製之外,還可以建立連結檔 (就是捷徑羅),比對兩檔案的新舊而予以升級, 以及複製整個目錄等等的功能呢!

[[email protected] ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)[[email protected] ~]# cp [options] source1 source2 source3 .... directory選項與參數:-a  :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)-d  :若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;-f  :為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;-i  :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)-l  :進行硬式連結(hard link)的連結檔建立,而非複製檔案本身;-p  :連同檔案的屬性一起複製過去,而非使用預設屬性(備份常用);-r  :遞迴持續複製,用於目錄的複製行為;(常用)-s  :複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案;-u  :若 destination 比 source 舊才升級 destination !最後需要注意的,如果來源檔有兩個以上,則最後一個目的檔一定要是『目錄』才行!

複製(cp)這個命令是非常重要的,不同身份者運行這個命令會有不同的結果產生,尤其是那個-a, -p的選項, 對於不同身份來說,差異則非常的大!

範例一:用root身份,將家目錄下的 .bashrc 複製到 /tmp 下,並更名為 bashrc[root@www ~]# cp ~/.bashrc /tmp/bashrc[[email protected] ~]# cp -i ~/.bashrc /tmp/bashrccp: overwrite `/tmp/bashrc‘? n  <==n不覆蓋,y為覆蓋# 重複作兩次動作,由於 /tmp 底下已經存在 bashrc 了,加上 -i 選項後,# 則在覆蓋前會詢問使用者是否確定!可以按下 n 或者 y 來二次確認呢!範例二:變換目錄到/tmp,並將/var/log/wtmp複製到/tmp且觀察屬性:[root@www ~]# cd /tmp[[email protected] tmp]# cp /var/log/wtmp . <==想要複製到目前的目錄,最後的 . 不要忘[[email protected] 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# 注意上面的特殊字型,在不加任何選項的情況下,檔案的某些屬性/許可權會改變;# 這是個很重要的特性!要注意喔!還有,連檔案建立的時間也不一樣了!# 那如果你想要將檔案的所有特性都一起複製過來該怎辦?可以加上 -a 喔!如下所示:[root@www tmp]# cp -a /var/log/wtmp wtmp_2[[email protected] 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# 了了吧!整個資料特性完全一模一樣ㄟ!真是不賴~這就是 -a 的特性!

一般來說,我們如果去複製別人的資料 (當然,該檔案你必須要有 read 的許可權才行啊! ^_^) 時, 總是希望複製到的資料最後是我們自己的,所以,在預設的條件中, cp 的來源檔與目的檔的許可權是不同的,目的檔的擁有者通常會是命令操作者本身。舉例來說, 上面的範例二中,由於我是 root 的身份,因此複製過來的檔案擁有者與群組就改變成為 root 所有了!

由於具有這個特性,因此當我們在進行備份的時候,某些需要特別注意的特殊許可權檔案, 例如密碼檔 (/etc/shadow) 以及一些配置檔,就不能直接以 cp 來複製,而必須要加上 -a 或者是 -p 等等可以完整複製檔案許可權的選項才行!另外,如果你想要複製檔案給其他的使用者, 也必須要注意到檔案的許可權(包含讀、寫、運行以及檔案擁有者等等), 否則,其他人還是無法針對你給予的檔案進行修訂的動作喔!注意注意!

範例三:複製 /etc/ 這個目錄下的所有內容到 /tmp 底下[root@www tmp]# cp /etc/ /tmpcp: omitting directory `/etc‘   <== 如果是目錄則不能直接複製,要加上 -r 的選項[root@www tmp]# cp -r /etc/ /tmp# 還是要再次的強調喔! -r 是可以複製目錄,但是,檔案與目錄的許可權可能會被改變# 所以,也可以利用『 cp -a /etc /tmp 』來下達命令喔!尤其是在備份的情況下!範例四:將範例一複製的 bashrc 建立一個連結檔 (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[[email protected] tmp]# cp -l bashrc bashrc_hlink[[email protected] 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 都會建立所謂的連結檔(link file),但是這兩種連結檔卻有不一樣的情況。這是怎麼一回事啊? 那個 -l 就是所謂的實體連結(hard link),至於 -s 則是符號連結(symbolic link), 簡單來說,bashrc_slink 是一個『捷徑』,這個捷徑會連結到bashrc去!所以你會看到檔名右側會有個指向(->)的符號!

至於bashrc_hlink檔案與bashrc的屬性與許可權完全一模一樣,與尚未進行連結前的差異則是第二欄的link數由1變成2了!

範例五:若 ~/.bashrc 比 /tmp/bashrc 新才複製過來[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc# 這個 -u 的特性,是在目標檔案與來源檔案有差異時,才會複製的。# 所以,比較常被用於『備份』的工作當中喔! ^_^範例六:將範例四造成的 bashrc_slink 複製成為 bashrc_slink_1 與bashrc_slink_2[root@www tmp]# cp bashrc_slink bashrc_slink_1[[email protected] tmp]# cp -d bashrc_slink bashrc_slink_2[[email protected] 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 <==是連結檔!# 這個例子也是很有趣喔!原本複製的是連結檔,但是卻將連結檔的實際檔案複製過來了# 也就是說,如果沒有加上任何選項時,cp複製的是原始檔案,而非連結檔的屬性!# 若要複製連結檔的屬性,就得要使用 -d 的選項了!如 bashrc_slink_2 所示。範例七:將家目錄的 .bashrc 及 .bash_history 複製到 /tmp 底下[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp# 可以將多個資料一次複製到同一個目錄去!最後面一定是目錄!

例題:你能否使用vbird的身份,完整的複製/var/log/wtmp檔案到/tmp底下,並更名為vbird_wtmp呢?

答:實際做看看的結果如下:

[[email protected] ~]$ 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的身份並不能隨意修改檔案的擁有者與群組,因此雖然能夠複製wtmp的相關許可權與時間等屬性, 但是與擁有者、群組相關的,原本vbird身份無法進行的動作,即使加上 -a 選項,也是無法達成完整複製許可權的!

總之,由於 cp 有種種的檔案屬性與許可權的特性,所以,在複製時,你必須要清楚的瞭解到:

  • 是否需要完整的保留來源檔案的資訊?
  • 來源檔案是否為連結檔 (symbolic link file)?
  • 來源檔是否為特殊的檔案,例如 FIFO, socket 等?
  • 來源檔是否為目錄?
mv (移動檔案與目錄,或更名)

這是搬移 (move) 的意思!當你要移動檔案或目錄的時後,呵呵!這個命令就很重要啦!

[[email protected] ~]# mv [-fiu] source destination[[email protected] ~]# mv [options] source1 source2 source3 .... directory選項與參數:-f  :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;-i  :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋!-u  :若目標檔案已經存在,且 source 比較新,才會升級 (update)範例一:複製一檔案,建立一目錄,將檔案移動到目錄中[root@www ~]# cd /tmp[[email protected] tmp]# cp ~/.bashrc bashrc[[email protected] tmp]# mkdir mvtest[[email protected] tmp]# mv bashrc mvtest# 將某個檔案移動到某個目錄去,就是這樣做!範例二:將剛剛的目錄名稱更名為 mvtest2[root@www tmp]# mv mvtest mvtest2 <== 這樣就更名了!簡單~# 其實在 Linux 底下還有個有趣的命令,名稱為 rename ,# 該命令專職進行多個檔名的同時更名,並非針對單一檔名變更,與mv不同。請man rename。範例三:再建立兩個檔案,再全部移動到 /tmp/mvtest2 當中[root@www tmp]# cp ~/.bashrc bashrc1[[email protected] tmp]# cp ~/.bashrc bashrc2[[email protected] tmp]# mv bashrc1 bashrc2 mvtest2# 注意到這邊,如果有多個來源檔案或目錄,則最後一個目標檔一定是『目錄!』# 意思是說,將所有的資料移動到該目錄的意思!
rm (移除檔案或目錄)

這是移除的命令(remove),要注意的是,通常在Linux系統下,為了怕檔案被誤殺,所以很多 distributions 都已經預設加入 -i 這個選項了!而如果要連目錄下的東西都一起殺掉的話, 例如子目錄裡面還有子目錄時,那就要使用 -r 這個選項了!不過,使用『 rm -r 』這個命令之前,請千萬注意了,因為該目錄或檔案『肯定』會被 root 殺掉!因為系統不會再次詢問你是否要砍掉呦!所以那是個超級嚴重的命令下達呦! 得特別注意!不過,如果你確定該目錄不要了,那麼使用 rm -r 來迴圈殺掉是不錯的方式!

[[email protected] ~]# rm [-fir] 檔案或目錄選項與參數:-f  :就是 force 的意思,忽略不存在的檔案,不會出現警告資訊;-i  :互動模式,在刪除前會詢問使用者是否動作-r  :遞迴刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!範例一:將剛剛在 cp 的範例中建立的 bashrc 刪除掉![root@www ~]# cd /tmp[[email protected] tmp]# rm -i bashrcrm: remove regular file `bashrc‘? y# 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!範例二:透過萬用位元組*的幫忙,將/tmp底下開頭為bashrc的檔名通通刪除:[root@www tmp]# rm -i bashrc*# 注意那個星號,代表的是 0 到無窮多個任意位元組喔!很好用的東西!範例三:將 cp 範例中所建立的 /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 ,預設已經加入了 -i 的選項,所以你要一直按 y 才會刪除!# 如果不想要繼續按 y ,可以按下『 [ctrl]-c 』來結束 rm 的工作。# 這是一種保護的動作,如果確定要刪除掉此目錄而不要詢問,可以這樣做:[[email protected] tmp]# \rm -r /tmp/etc# 在命令前加上反斜線,可以忽略掉 alias 的指定選項喔!至於 alias 我們在bash再談!範例四:刪除一個帶有 - 開頭的檔案[root@www tmp]# touch ./-aaa-  <==touch這個命令可以建立空檔案![[email protected] 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.  <== 因為 "-" 是選項嘛!所以系統誤判了![root@www tmp]# rm ./-aaa-

另外,範例四也是很有趣的例子,我們在之前就談過,檔名最好不要使用 "-" 號開頭, 因為 "-" 後面接的是選項,因此,單純的使用『 rm -aaa- 』系統的命令就會誤判啦! 那如果使用後面會談到的正規標記法時,還是會出問題的!所以,只能用避過首位位元組是 "-" 的方法啦! 就是加上本目錄『 ./ 』即可!如果 man rm 的話,其實還有一種方法,那就是『 rm -- -aaa- 』也可以啊!

CentOS學習筆記--基本命令--檔案與目錄管理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.