趣解Cent OS6.5常用命令(二)

這是一篇適合於沒有任何基礎的初學者學習Cent OS常用命令的博客,努力看看能不能寫成一個系列博客。有時,我們需要的只是一道小小的縫隙,讓我們有個支點去打開一扇厚重的門。

四、裝修房子

如果把Linux的文件夾看成是一間房子的話,那麼修改這個房子裏房間的結構給房間添加傢俱就是Linux裏對文件夾與文件的創建、移動、刪除等操作。

1)給房子隔幾間房間(創建目錄)

Linux創建目錄使用的命令是mkdirmake directory的縮寫),例如,要在/home/Bob下創建一個名爲test的目錄,可以使用:

[Bob@firstlinux ~]$ mkdir/home/Bob/test

如果要一次性創建多個目錄,則可以在後面給出這些目錄的路徑加目錄名,例如,要在/home/Bob下創建ab兩個目錄,命令如下:

[Bob@firstlinux ~]$ mkdir/home/Bob/a /home/Bob/b

注意:兩個目錄之間要用空格隔開。

如果要在/home/Bob下面創建一個pp目錄,同時在pp目錄下再創建一個subpp目錄,可以添加參數-p,命令如下:

[Bob@firstlinux ~]$ mkdir/home/Bob/pp/subpp -p

上面一條命令的意思就是:當要創建的目錄subpp的上一級目錄pp不存在時,在命令上添加-p參數,可以在創建subpp的同時創建上一級目錄pp

2)給房間添加些傢俱(文件創建)

要在目錄中創建文件可以使用touch命令,touch這個很有意思,是輕觸的意思,好像與創建文件有點不搭邊:)

如果要在/home/Bob目錄下創建一個名爲doca.txt的文本文件,可以使用命令:

[Bob@firstlinux ~]$ touch/home/Bob/doca.txt

如果想要同時創建多個文件,則在後面羅列多個文件的路徑加文件名,用空格隔開。例如:要在/home/Bob/a目錄創建一個mydoc的文件,在/home/Bob/pp目錄創建創建一個hello.txt文件,可以使用命令,

[Bob@firstlinux ~]$ touch/home/Bob/a/mydoc /home/Bob/pp/hello.txt

3)拆房間(刪除目錄)

有建設就有拆除,如果要拆房間(刪除目錄)就要小心了,要區分房間裏有沒有傢俱傢俱,兩者的拆法是不一樣的。

刪除目錄可以使用兩種命令:rmdirrm

命令rmdir

a)如果不加參數,只能刪除空的目錄(不包含子目錄或文件),例如:

[Bob@firstlinux ~]$ mkdirone/two/three -p

[Bob@firstlinux ~]$ rmdirone/two/three

第一行,在當前工作目錄下創建一個one目錄,one目錄下創建一處two目錄,two目錄下創建一個three目錄;第二行,則刪除three目錄。

b)如果不加參數,且要刪除的目錄包含子目錄或文件,則不能刪除。例如:

[Bob@firstlinux ~]$ mkdirone/two/three -p

[Bob@firstlinux ~]$ touchone/two/three/file1

[Bob@firstlinux ~]$ rmdirone/two/three

rmdir: 刪除 "one/two/three/" 失敗: 目錄非空

c)如果帶參數-p,可以刪除空目錄,順帶刪除上一級的空目錄,再上一級的空目錄......依次刪除到不爲空的目錄。例如:

[Bob@firstlinux ~]$ mkdira/b/c/d/e -p

[Bob@firstlinux ~]$ toucha/b/in.txt

[Bob@firstlinux ~]$ rmdira/b/c/d/e -p

rmdir: 刪除目錄 "a/b" 失敗: 目錄非空

e一直刪除到其上一級d、上上一級c,到b刪除不了,因爲b不爲空包含了一個文件。

 從上面的分析來看,使用rmdir進行拆房間效率實在是低,而且rmdir命令也就只能針對目錄,如果目錄中包含文件就無能爲力了。

命令rm:

rm命令不但可以拆房間還能拆傢俱,或者兩者一起打包拆。如果要刪除文件可以不要參數,如果要刪除目錄要添加參數-r-R例如:

[Bob@firstlinux ~]$ mkdir d1d2/subd -p

[Bob@firstlinux ~]$ touchd1/f1 d2/subd/f2

[Bob@firstlinux ~]$ rm d1/f1

[Bob@firstlinux ~]$ rm d1 d2-r

第一行在工作目錄下創建d1d2目錄,且同時在d2目錄下再創建subd目錄;

第二行在d1目錄下創建文件f1,在d2/subd目錄下創建文件f2

第三行刪除d1f1文件;

第四行刪除d1d2目錄;

從上面命令可以看出,刪除目錄比刪除文件要多加一個-r-R的參數,同時刪除目錄時,可以把目錄下面的子目錄連文件一起刪除。

這也是rm命令比rmdir在刪除目錄上強大的、效率高的地方。

(4)乾坤大挪移(移動)

如果要把目錄或文件挪個窩,在Linux中要使用移動命令mv(move的簡寫)。例如:

[Bob@firstlinux~]$ mkdir m1/subm1 m2/subm2 -p

[Bob@firstlinux~]$ touch mf.txt

[Bob@firstlinux~]$ mv mf.txt m1/subm1

[Bob@firstlinux~]$ mv m1/subm1/mf.txt m2/subm2/newmf.txt

第三條命令將mf.txt移動到m1/subm1目錄中;

第四條命令將m1/subm1目錄中的mf.txt移動到m2/subm2/目錄中並重新命令newmf.txt

再例如:

[Bob@firstlinux ~]$ mkdir temp

[Bob@firstlinux ~]$ mv m2 temp

[Bob@firstlinux ~]$ mv temp/m2newdir

第二條命令將m2目錄含目錄中的內容移動到temp目錄下。

第三條命令將temp下的m2目錄含目錄中的內容移動到newdir(在這條命令中同時創建newdir目錄)

五、複製――1變多

Linux提供的複製命令是cp(copy)的簡寫。

例如:

[Bob@firstlinux~]$ mkdir dest/one sou/two -p

[Bob@firstlinux~]$ touch dest/one/dest.txt

[Bob@firstlinux~]$ cp dest/one/dest.txt sou/two

[Bob@firstlinux~]$ cp dest/one new -R

[Bob@firstlinux~]$ cp dest othernew/test -R

cp:無法創建目錄"othernew/test": 沒有那個文件或目錄

[Bob@firstlinux~]$ cp dest/one/dest.txt sou/two/sou.txt

[Bob@firstlinux~]$ cp dest newdest -R

第一條命令在工作目錄下創建兩個目錄dest和sou,同時在dest下創建one目錄,在sou下創建two目錄;

第二條命令在one目錄下創建dest.txt文件;

第三條命令將one目錄下的文件dest.txt複製two目錄中;

第四條命令將dest/one目錄下的所有文件複製到當前工作目錄下的一個新目錄new下面(new目錄在這條命令中自動創建),其中參數-R遞歸處理複製(即將目錄下的所有子目錄或文件一併複製);

第五條命令要將dest目錄下的內容複製到一個不存在的目錄下的目錄不成功(即不能通過cp自動創建兩層沒有的目錄,只能是像第四條命令那樣只能創建一個目錄,無法嵌套);

第六條命令將dest/one/目錄下的dest.txt複製到sou/two/目錄下並更改名稱爲sou.txt ;

第七條命令將dest目錄包括目錄下所有內容複製一份在相同位置並改名爲newdest;

通過上面命令的學習,可知-R這個參數在rm與cp命令中都可以使用,其作用是遞歸處理,除了在rm與cp中使用外,還可在ls命令中使用,也是一樣的功能。例如:

[Bob@firstlinux~]$ ls dest -R

dest:

one

dest/one:

dest.txt

注意:ls中使用R是大寫的(如果小寫表示排序時保留順序),rm與cp中使用可以不區分大小寫。

六、神奇的鏈接

Linux的鏈接分爲硬鏈接與符號鏈接。對於文件而言,兩種鏈接都可以創建,而目錄只能創建符號鏈接。創建鏈接使用的命令是lnlink)的簡寫。

1)符號鏈接

符號鏈接要多加一個參數-s,但是相對來說比較好理解,它和windows裏的快捷方式類似。例如:

[Bob@firstlinux ~]$ mkdirsoudir lndir

[Bob@firstlinux ~]$ touchsoufile

[Bob@firstlinux ~]$ ln -s/home/Bob/soudir lndir/lnsoudir

[Bob@firstlinux ~]$ ln -s/home/Bob/soufile lndir/lnsoufile

第一行命令創建兩個目錄,一個soudir,另一個是lndirlndir用於存放符號鏈接;

第二行命令創建一個文件soufile

第三行命令爲soudir目錄創建一個符號鏈接,並將符號鏈接存放在lndir目錄中命名爲lnsoudir

第四行命令爲soufile文件創建一個符號鏈接,並將符號鏈接存放在lndir目錄中命名爲lnsoufile

注意:上面的soudirsoufile都給出了絕對路徑,如果只給出相對路徑,創建出來的符號鏈接可能會產生一些異常的結果。

如果創建符號鏈接時,不給符號鏈接名稱,則默認使用目錄或文件的名稱。例如:

[Bob@firstlinux ~]$ ln -s/home/Bob/soufile lndir

[Bob@firstlinux ~]$ ln -s/home/Bob/soudir lndir

上面兩條命令就在lndir目錄中創建兩個符號鏈接,符號鏈接名稱與目錄和文件名相同。

2)硬鏈接

硬鏈接就比較神奇了,它只對文件有效,神奇的地方在於,它類似於複製又不像複製那樣前後兩個文件無關,而是存在一定的關聯,一個文件改變了另一個文件也會跟着改變。但是,要求硬鏈接的兩個文件必須在同一文件系統中。(軟鏈接可以跨文件系統)

例如:

[Bob@firstlinux ~]$ mkdirhl/subhl -p

[Bob@firstlinux ~]$ touch y1y2.txt

[Bob@firstlinux ~]$ ln y1hl/subhl/hly1

[Bob@firstlinux ~]$ ln y2.txthl/subhl/

第一條命令創建目錄hl/subhl,第二條命令創建兩個文件y1y2.txt

第三條命令爲y1創建硬鏈接並存放在hl/subhl,且命名爲hly1

第四條命令爲y2.txt創建硬鏈接並存放在hl/subh1,硬鏈接的名稱就是文件名。

這時如果修改當前工作目錄下的y1y2.txt文件,則hl/subhl與之硬鏈接的文件也一樣變化,反之也一樣。

如果刪除硬鏈接中的一個文件,與之鏈接的文件並不會刪除。

硬鏈接與符號鏈接的差別就一個參數-s

七、文件或目錄的查找

人的記憶是容易忘記的,有些不常用的文件到要用時卻找不到...

經常會爲了在一大堆目錄與文件中爲了查找一個文件而抓狂...

Linux強大的find查找命令,可以解決上面的問題,就看怎麼使用。

1)簡單、小白的查找:給出指定目錄,指定文件名的查找。例如:

[Bob@firstlinux ~]$ find /bin-name "cat"

查找/bin目錄下的文件名爲cat的文件。

這種查找在現實應用極少,如果知道目錄、知道文件名,都不用查找了。之所以介紹,是因爲可以讓初學者對find命令有一個初步瞭解。

find命令要查找先要給出查找的位置,也就路徑(可以是絕對的也可以是相對),後面通常再跟上匹配表達式。上面的命令要查找的目錄是/bin,匹配表達式是-name “cat”(表示文件名像cat的文件)。

2)區分大寫的查找,例如:

[Bob@firstlinux ~]$ mkdirsearch/d1/subd1 search/d2/subd2 -p

[Bob@firstlinux ~]$ touchsearch/d1/subd1/t.txt search/d2/subd2/T.txt

[Bob@firstlinux ~]$ findsearch -name "t*"

search/d1/subd1/t.txt

[Bob@firstlinux ~]$ findsearch -iname "t*"

search/d2/subd2/T.txt

search/d1/subd1/t.txt

比較第三條與第四條命令,之間差了個字母i。即,在查找時,使用表達式-name-iname分別表示區分大小查找文件名與不區分大小查找文件名。

3)只知擴展名的查找,例如:

[Bob@firstlinux ~]$ findsearch -name "*.txt"

search/d2/subd2/T.txt

search/d1/subd1/t.txt

這條命令中的*代表的是任意字符。

4)與或非的運用

或操作,例如:

[Bob@firstlinux ~]$ touchsearch/a.doc search/d2/b.doc

[Bob@firstlinux ~]$ findsearch -name "*.txt" -o -name "*.doc"

search/d2/subd2/T.txt

search/d2/b.doc

search/d1/subd1/t.txt

search/a.doc

兩個表達式之間加上-o表示兩個表示式是或的關係。

與操作,例如:

[Bob@firstlinux ~]$ findsearch -name "T*" -name "*.txt"

search/d2/subd2/T.txt

上面的命令這樣寫有點笨,這裏只是要介紹與操作。如果兩個表達式之間不加參數或加了參數-a,都表示要同時滿足這兩個表達式。

上面語句可以寫成:find search -name “T*” -a -name “*.txt”(這樣寫還是有點笨)

最簡潔的寫法:find search -name “T*.txt”

非操作,例如:

[Bob@firstlinux ~]$ findsearch ! -name "*.txt"

search

search/d2

search/d2/subd2

search/d2/b.doc

search/d1

search/d1/subd1

search/a.doc

非操作就是要在否的條件表達式前加上!。上面的命令,查找出所有最後四個字母不是.txt的文件和目錄。

5)把目錄與文件區分開

上面最後一個例子,查找會把文件和目錄都找出來,如果只要文件,則要添加參數-type,其中-type d表示找目錄,-type f表示找文件,-type l表示找符號鏈接,-type c表示找字符設備,-type b表示找塊設備,-type s表示找套接字,-type p表示找Fifo。初學者只要記住dfl三個就夠用了。

例如:將上面查找的內容改成查找最後四個字母不是.txt的文件,則

[Bob@firstlinux ~]$ findsearch ! -name "*.txt" -type f

search/d2/b.doc

search/a.doc

6)查找多個目錄

[Bob@firstlinux ~]$ findsearch/d1 search/d2 -name "*.txt" -type f

search/d1/subd1/t.txt

search/d2/subd2/T.txt

要查找多個目錄,只要把多個目錄羅列出來就可以了。上面是查找d1d2目錄中文件名最後四個字符爲.txt的文件。

7)限定查找的縱深

find可以以給定目錄爲參照,查找目錄下幾級的子目錄的文件,多了不查找,例如:

[Bob@firstlinux ~]$ find /-maxdepth 1 -name "b*"

/bin

/boot

上面命令查找從根開始下1級的子目錄(即根下的子目錄,不再找子目錄下的子目錄)、包含根本身,第一個字符包含b的文件或目錄。

再例如:

[Bob@firstlinux ~]$ find /usr-mindepth 2 -name "sand*"

find: “/usr/lib64/audit”: 權限不夠

/usr/lib64/libreoffice/share/gallery/www-back/sand.jpg

/usr/lib64/libreoffice/share/gallery/www-back/sand-light.jpg

/usr/lib/python2.6/site-packages/setuptools/sandbox.pyo

/usr/lib/python2.6/site-packages/setuptools/sandbox.py

/usr/lib/python2.6/site-packages/setuptools/sandbox.pyc

/usr/share/selinux/targeted/sandbox.pp.bz2

/usr/share/selinux/devel/include/apps/sandbox.if

/usr/share/media-player-info/sandisk-7432_7433_7434_7435_74c0_74c1_74c2_74c3.mpi

/usr/share/media-player-info/sandisk-sansa_c250.mpi

/usr/share/media-player-info/sandisk-7301_7302.mpi

/usr/share/media-player-info/sandisk-sansa_clip_plus.mpi

/usr/share/media-player-info/sandisk-7401_7421_7431.mpi

/usr/share/gimp/2.0/patterns/sandytext.pat

/usr/share/oprofile/i386/sandybridge

上面命令查找/usr這個目錄下最少再向下2級的目錄中包含以sand開頭的文件或目錄。

-mindepth-maxdepth也可以合用,把目錄限定在一定層上。例如:

[Bob@firstlinux ~]$ find /usr-mindepth 2 -maxdepth 3 -name "sand*"

find: “/usr/lib64/audit”: 權限不夠

/usr/share/media-player-info/sandisk-7432_7433_7434_7435_74c0_74c1_74c2_74c3.mpi

/usr/share/media-player-info/sandisk-sansa_c250.mpi

/usr/share/media-player-info/sandisk-7301_7302.mpi

/usr/share/media-player-info/sandisk-sansa_clip_plus.mpi

/usr/share/media-player-info/sandisk-7401_7421_7431.mpi

上面命令,就是查找usr下面的第2層目錄和第三層目錄下的以sand開頭的文件或目錄。

8)限定最近一次訪問、修改、變化時間的查找

限定最近一次訪問時間,例如:

[Bob@firstlinux ~]$ find /home-type f -amin -10

/home/Bob/.recently-used.xbel

/home/Bob/.config/libreoffice/4/user/backup/趣解CentOS6.5常用命令.odt_0.odt

/home/Bob/.config/libreoffice/4/user/registrymodifications.xcu

上面的命令對/home目錄下的文件查找最近一次訪問時間少於當前時間10分鐘的文件。如果要多於10分鐘將-10改爲+10,如果要等於10分,將-10改爲10。如果不要以天計算,將參數-amin改爲-atime,同樣多於幾天用+號,少於幾天用-號,等於幾天不加。

如果是限定最近一次修改時間,則將參數改爲mmin(分鐘)或mtime(天數);如果是限定最近一次變化時間,則將參數改爲cmin(分鐘)或ctime(天數)。

9)限定文件大小

[Bob@firstlinux ~]$ find /home-type f -size +10M

/home/Bob/workspace/.metadata/.plugins/org.eclipse.jdt.core/2730797328.index

上面的命令,查找/home目錄下,大小超過10M的文件。如果少於用-10M,等於用10M

10)找到文件並刪除

[Bob@firstlinux ~]$ findsearch -type f -name "*.txt" -delete

上面的命令,查找search目錄下文件名最後四個字符爲.txt的文件並刪除。

上面的命令也可以寫成find search -type f -name "*.txt"-exec rm {} \;

其中{}後面接空格再接\;(不能少)。

11)找到文件並複製

[Bob@firstlinux ~]$ mkdir txt

[Bob@firstlinux ~]$ findsearch -type f -name "*.txt" -exec cp {} txt \;

上面第二條命令,查找search目錄中的所有最後四個字符爲.txt的文件並複製到當前目錄下的txt目錄中。

注意:txt後面加空格再加\;(不能少)。

11)找到文件或目錄並將結果寫到一個文件中

[Bob@firstlinux ~]$ find /bin-type f -name "s*" > s.txt

上面的命令,查找/bin目錄下文件名開頭第一個字母爲s的所有文件,並將查找的結果寫入到當前目錄的文件s.txt(不存在自動創建)。

find命令的功能非常強大,應用非常靈活,初學者掌握上面一些用法基本夠用了。

 

(第二篇  待續...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章