文件目錄管理命令
在Linux 系統(tǒng)的日常工作中,還需要掌握對(duì)文件的創(chuàng)建,修改,復(fù)制,剪切,更名與刪除等操作。
- touch 命令
touch 命令用于創(chuàng)建空白文件或設(shè)置文件的時(shí)間,格式為 “touch [選項(xiàng)][文件]”。
在創(chuàng)建空白的文本文件方面,這個(gè)touch命令相當(dāng)簡(jiǎn)潔。比如,touch test 命令可以創(chuàng)建出一個(gè)名為test的空白文本文件。對(duì)touch命令來(lái)講,有難度的操作主要是體現(xiàn)在設(shè)置文件內(nèi)容的修改時(shí)間(mtime),文件權(quán)限或?qū)傩缘母臅r(shí)間(ctime)與文件的讀取時(shí)間(atime)上面。
參數(shù) | 作用 |
-a | 修改“讀取時(shí)間” atime |
-m | 修改“修改時(shí)間” mtime |
-d | 同時(shí)修改atime 與 mtime |
接下來(lái),我們先使用ls命令查看一個(gè)文件的修改時(shí)間,然后修改這個(gè)文件, 最后再通過(guò)touch命令把修改后的文件時(shí)間設(shè)置成修改之前的時(shí)間:
root@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r– 1 root root 14 Aug 24 02:23 diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ echo “test touch” >> diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r– 1 root root 25 Aug 24 03:47 diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ touch -d “2020-05-20 05:20” diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r– 1 root root 25 May 20 2020 diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ touch -d “2022-05-20 05:20” diff_a.txtroot@ubuntu-1:~/workroom/c_test/2022$ ls -l diff_a.txt-rw-rw-r– 1 root root 25 May 20 05:20 diff_a.txt
- mkdir 命令
mkdir 命令用于創(chuàng)建空白的目錄,格式為 “mkdir [選項(xiàng)] 目錄”。
在Linux 系統(tǒng)中,文件夾是最常見(jiàn)的文件類型之一,除了能創(chuàng)建單個(gè)空白目錄外,mkdir命令還可以結(jié)合-p參數(shù)來(lái)遞歸創(chuàng)建出具有嵌套疊層關(guān)系的文件目錄。
root@ubuntu-1:~/workroom/c_test/2022$ mkdir testroot@ubuntu-1:~/workroom/c_test/2022$ cd test/root@ubuntu-1:~/workroom/c_test/2022/test$ lsroot@ubuntu-1:~/workroom/c_test/2022/test$ mkdir -p a/b/c/d/eroot@ubuntu-1:~/workroom/c_test/2022/test$ lsaroot@ubuntu-1:~/workroom/c_test/2022/test$ cd aroot@ubuntu-1:~/workroom/c_test/2022/test/a$ lsbroot@ubuntu-1:~/workroom/c_test/2022/test/a$ cd b/root@ubuntu-1:~/workroom/c_test/2022/test/a/b$ lscroot@ubuntu-1:~/workroom/c_test/2022/test/a/b$ cd croot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c$ lsdroot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c$ cd droot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c/d$ lseroot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c/d$ cd eroot@ubuntu-1:~/workroom/c_test/2022/test/a/b/c/d/e$ ls
- cp 命令
cp 命令用于復(fù)制文件或目錄,格式為”cp [選項(xiàng)]源文件 目標(biāo)文件”。在Linux 系統(tǒng)中,復(fù)制操作具體分為3種情況:
如果目標(biāo)文件是目錄,則會(huì)把源文件復(fù)制到該目錄中;如果目標(biāo)文件也是普通文件,則會(huì)詢問(wèn)是否要覆蓋它;如果目標(biāo)文件不存在,則執(zhí)行正常的復(fù)制操作。
cp命令的參數(shù)及其作用
參數(shù) | 作用 |
-p | 保留原始文件的屬性 |
-d | 若對(duì)象為”鏈接文件”,則保留該文件的屬性 |
-r | 遞歸持續(xù)復(fù)制(用于目錄) |
-i | 若文件存在則詢問(wèn)是否覆蓋 |
-a | 相當(dāng)于-pdr (p,d,r為上述參數(shù)) |
接下來(lái),使用touch創(chuàng)建一個(gè)名為test.log的普通空白文件,然后將其復(fù)制為一份名為x.log的備份文件,最后使用ls命令查看目錄中的文件:
root@ubuntu-1:~/workroom/c_test/test_dir$ touch test.logroot@ubuntu-1:~/workroom/c_test/test_dir$ cp test.log x.logroot@ubuntu-1:~/workroom/c_test/test_dir$ lstest.log x.log
- mv 命令
mv命令用于剪切文件或?qū)⑽募孛?,格式?“mv [選項(xiàng)] 源文件 [目標(biāo)路徑|目標(biāo)文件名]”。
剪切操作不同于復(fù)制操作,因?yàn)樗鼤?huì)默認(rèn)把源文件刪除掉,只保留剪切后的文件。如果在同一個(gè)目錄中對(duì)一個(gè)文件進(jìn)行剪切操作,其實(shí)也就是對(duì)其進(jìn)行重命名:
root@ubuntu-1:~/workroom/c_test/test_dir$ mv x.log linux.logroot@ubuntu-1:~/workroom/c_test/test_dir$ lslinux.log test.log
- rm 命令
rm 命令用于刪除文件或目錄,格式為”rm [選項(xiàng)] 文件”。
在Linux系統(tǒng)中刪除文件時(shí),系統(tǒng)會(huì)默認(rèn)向您詢問(wèn)是否要執(zhí)行刪除操作,如果不想總是看到這種反復(fù)的確認(rèn)信息,可在rm 命令后面跟上-f 參數(shù)來(lái)強(qiáng)制刪除。另外,想要?jiǎng)h除一個(gè)目錄,需要在rm命令加一個(gè)-r參數(shù)才可以,否則刪除不掉。我們來(lái)嘗試刪除前面創(chuàng)建的test.log 和 linux.log 文件:
root@ubuntu-1:~/workroom/c_test/test_dir$ rm linux.logrm: remove regular empty file ‘linux.log’? yroot@ubuntu-1:~/workroom/c_test/test_dir$ rm -f test.logroot@ubuntu-1:~/workroom/c_test/test_dir$ lsroot@ubuntu-1:~/workroom/c_test/test_dir$
- dd命令
dd命令用于按照指定大小和個(gè)數(shù)的數(shù)據(jù)塊來(lái)復(fù)制文件或轉(zhuǎn)換文件,格式為 “dd [參數(shù)]”。
dd命令是一個(gè)比較重要的命令,它能夠讓用戶按照指定大小和個(gè)數(shù)的數(shù)據(jù)塊來(lái)復(fù)制文件的內(nèi)容。Linux系統(tǒng)中有一個(gè)名為/dev/zero的設(shè)備文件,這個(gè)文件不會(huì)占用系統(tǒng)存儲(chǔ)空間,但卻可以提供無(wú)窮無(wú)盡的數(shù)據(jù),因此可以使用它作為dd命令的輸入文件,來(lái)生成一個(gè)指定大小的文件。
dd命令的參數(shù)及其作用
參數(shù) | 作用 |
if | 輸入的文件名稱 |
of | 輸出的文件名稱 |
bs | 設(shè)置每個(gè)塊的大小 |
count | 設(shè)置要復(fù)制塊的個(gè)數(shù) |
例如我們可以使用dd命令從/dev/zero設(shè)備文件中取出一個(gè)大小為500M的數(shù)據(jù)塊,然后保存名為500_file的文件:
root@ubuntu-1:~/workroom/c_test/test_dir$ dd if=/dev/zero of=500_file count=1 bs=500M1+0 records in1+0 records out524288000 bytes (524 MB, 500 MiB) copied, 3.51978 s, 149 MB/sroot@ubuntu-1:~/workroom/c_test/test_dir$ ls500_fileroot@ubuntu-1:~/workroom/c_test/test_dir$ ls -l 500_file-rw-rw-r– 1 root root 524288000 Aug 24 04:49 500_fileroot@ubuntu-1:~/workroom/c_test/test_dir$ ls -lh 500_file-rw-rw-r– 1 root root 500M Aug 24 04:49 500_file
dd命令的功能也不僅限于復(fù)制文件這么簡(jiǎn)單,在Linux系統(tǒng)中可以直接使用dd命令來(lái)壓制出光盤鏡像文件,將它變成一個(gè)可立即使用的iso鏡像。
bs 與 count 都是用來(lái)指定容量的大小,只要能滿足需求,可隨意組合搭配方式。
- file 命令
file 命令用于查看文件的類型,格式為 “file 文件名”。
在Linux 系統(tǒng)中,由于文本,目錄,設(shè)備等所有這些一切都統(tǒng)稱為文件,而我們又不能單憑后綴就知道具體的文件類型,這時(shí)就需要使用file命令來(lái)查看文件類型了。
root@ubuntu-1:~/workroom/c_test/test_dir$ file 500_file500_file: data
打包壓縮與搜索命令
- tar命令
tar命令用于文件進(jìn)行打包壓縮或解壓,格式為”tar [選項(xiàng)][文件]”。
在Linux系統(tǒng)中,常見(jiàn)的文件格式比較多,其中主要使用的是.tar或.tar.gz或.tar.bz2格式。
tar命令的參數(shù)及其作用:
參數(shù) | 作用 |
-c | 創(chuàng)建壓縮文件 |
-x | 解開(kāi)壓縮文件 |
-t | 查看壓縮包內(nèi)有哪些文件 |
-z | 用Gzip壓縮或解壓 |
-j | 用bzip2壓縮或解壓 |
-v | 顯示壓縮或解壓的過(guò)程 |
-f | 目標(biāo)文件名 |
-p | 保留原始的權(quán)限與屬性 |
-P | 使用絕對(duì)路徑來(lái)壓縮 |
-C | 指定解壓到的目錄 |
首先,-c 參數(shù)用于創(chuàng)建壓縮文件,-x參數(shù)用于解壓文件,因此這兩個(gè)參數(shù)不能同時(shí)使用。其次,-z參數(shù)指定使用Gzip格式來(lái)壓縮或解壓文件,-j參數(shù)指定使用bzip2格式來(lái)壓縮或解壓文件。用戶使用時(shí)則是根據(jù)文件的后綴來(lái)決定應(yīng)使用何種格式參數(shù)進(jìn)行解壓。在執(zhí)行某些壓縮或解壓操作時(shí),可能需要花費(fèi)數(shù)個(gè)小時(shí),非常推薦使用-v參數(shù)向用戶不斷顯示壓縮或解壓的過(guò)程。-C 參數(shù)用于指定解壓到哪個(gè)指定的目錄。-f 參數(shù)特別重要,它必須放到參數(shù)的最后一位,代表要壓縮或解壓的軟件包名稱。
tar -czvf 壓縮包名稱.tar.gz 要打包的目錄tar -xzvf 壓縮包名稱.tar.gz
使用tar命令將test目錄通過(guò)gzip格式進(jìn)行打包壓縮,并將文件命名為test.tar.gz
root@ubuntu-1:~/workroom/c_test/2022$ tar -czvf test.tar.gz testtest/test/a/test/a/b/test/a/b/c/test/a/b/c/d/test/a/b/c/d/e/
接下來(lái)將打包后的壓縮包文件指定解壓到test_tmp目錄中
//使用mkdir命令在當(dāng)前路徑下創(chuàng)建test_tmp目錄root@ubuntu-1:~/workroom/c_test/2022$ mkdir test_xroot@ubuntu-1:~/workroom/c_test/2022$ tar -xzvf test.tar.gz -C test_xtest/test/a/test/a/b/test/a/b/c/test/a/b/c/d/test/a/b/c/d/e/
- grep命令
grep命令用于在文本文件中執(zhí)行關(guān)鍵詞搜索,并顯示匹配的結(jié)果,格式為”grep [選項(xiàng)][文件]”。grep 命令的參數(shù)及其作用如下表:
參數(shù) | 作用 |
-b | 將可執(zhí)行文件當(dāng)作文本文件來(lái)搜索 |
-c | 僅顯示找到的行數(shù) |
-i | 忽略大小寫 |
-n | 顯示行號(hào) |
-v | 反向選擇 – 僅列出沒(méi)有關(guān)鍵詞的行 |
grep命令是用途最廣泛的文本搜索匹配工具,雖然有很多參數(shù),但是大多數(shù)基本上用不到。
兩個(gè)最常用的參數(shù):-n參數(shù)用來(lái)顯示搜索到信息的行號(hào);-v參數(shù)用于反選信息。
在Linux 系統(tǒng)中,/etc/passwd文件是保存著所有的用戶信息,而一旦用戶的登錄終端被設(shè)置成/sbin/nologin, 則不再允許登錄系統(tǒng),因此可以使用grep命令來(lái)查找出當(dāng)前系統(tǒng)中不允許登錄系統(tǒng)的所有用戶信息:
root@ubuntu-1:~/workroom$ grep /sbin/nologin /etc/passwddaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologingames:x:5:60:games:/usr/games:/usr/sbin/nologinman:x:6:12:man:/var/cache/man:/usr/sbin/nologinlp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologinmail:x:8:8:mail:/var/mail:/usr/sbin/nologinnews:x:9:9:news:/var/spool/news:/usr/sbin/nologin
- find 命令
find 命令用于按照指定條件來(lái)查找文件,格式為 “find [查找路徑] 尋找條件 操作”。
在Linux 系統(tǒng)中,搜索工作一般都是通過(guò)find命令來(lái)完成的,它可以使用不同的文件特性作為尋找條件(如文件名,大小,修改時(shí)間,權(quán)限等信息),一旦匹配成功則默認(rèn)將信息顯示到屏幕上。
參數(shù) | 作用 |
-name | 匹配名稱 |
-perm | 匹配權(quán)限(mode為完全匹配,-mode為包含即可) |
-user | 匹配所有者 |
-group | 匹配所有組 |
-mtime -n +n | 匹配修改內(nèi)容的時(shí)間(-n指n天以內(nèi),+n指n天以前) |
-atime -n +n | 匹配訪問(wèn)文件的時(shí)間(-n指n天以內(nèi),+n指n天以前) |
-ctime -n +n | 匹配修改文件權(quán)限的時(shí)間(-n 指n天以內(nèi),+n指n天以前) |
-nouser | 匹配無(wú)所有者的文件 |
-nogroup | 匹配無(wú)所有組的文件 |
-newer f1 !f2 | 匹配比文件f1新但比f(wàn)2舊的文件 |
–type b/d/c/p/l/f | 匹配文件類型(后面的字幕字母依次表示塊設(shè)備,目錄,字符設(shè)備,管道,鏈接文件,文本文件) |
-size | 匹配文件的大小(+50KB為查找超過(guò)50KB的文件,而-50KB為查找小于50KB的文件) |
-prune | 忽略某個(gè)目錄 |
-exec ……{}: | 后面可跟用于進(jìn)一步處理搜索結(jié)果的命令 |
這里講解一下-exec參數(shù)重要的作用,這個(gè)參數(shù)用于把find命令搜索到的結(jié)果交由緊隨其后的命令作進(jìn)一步處理,由于find命令對(duì)參數(shù)的特殊要求,因此雖然exec是長(zhǎng)格式形式,但是依然只需要一個(gè)減號(hào)(-)。
Linux 系統(tǒng)中的配置文件會(huì)保存到/etc目錄中。如果要想獲取該目錄中所有以host開(kāi)頭的文件列表,可以執(zhí)行以下命令:
root@ubuntu-1:~/workroom$ find /etc -name “host*” -print/etc/hosts.deny/etc/hostname/etc/init/hostname.sh.conf/etc/init/hostname.conf/etc/init.d/hostname.sh/etc/host.conf/etc/hosts/etc/hosts.allow
在整個(gè)文件系統(tǒng)中找出所有歸屬于test用戶的文件并復(fù)制到/root/testresult目錄。
該實(shí)驗(yàn)的重點(diǎn)是”-exec {} ;” 參數(shù),其中的{}表示find 命令搜索出的每一個(gè)文件,并且命令的結(jié)尾必須是”;”,完成該實(shí)驗(yàn)的具體命令如下:
# find / -user test -exec cp -a {} /root/testresult/ ;