一、基本指令介紹
回顧上篇博客Linux(1)|入門的開始:Linux基本指令-CSDN博客,我們已經學習了mkdir目錄的創建,touch普通文件的創建,光有創建肯定是不行的,接下來就介紹我們的刪除指令
1、rmdir指令&&rm指令
rmdir是一個與mkdir相對應的指令。mkdir是建立目錄,rmdir是刪除目錄
語法:rmdir空格[-p]空格[dirName]
適用對象:具有當前目錄操作權限的所有使用者
功能:刪除空目錄
常用選項:-p當子目錄被刪除后,如果父目錄也變成空目錄的話,就連帶父目錄一起刪除
[xzx@instance-157t533k 9_3]$ mkdir test
[xzx@instance-157t533k 9_3]$ ll
total 4
drwxrwxr-x 2 xzx xzx 4096 Sep 3 09:53 test
[xzx@instance-157t533k 9_3]$ cd test
[xzx@instance-157t533k test]$ ll
total 0
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ rmdir -p test
[xzx@instance-157t533k 9_3]$ ll
total 0
mkdir創建test目錄,cd進去后為空,cd ..返回上級目錄,使用rmdir -p test刪除test目錄,ll查看,test已被我們成功刪除
rm指令可以同時刪除文件或目錄
語法:rm空格[選項]空格[dirName/FileName]
適用對象:所有的使用者
功能:刪除文件或目錄
注意:Linux中刪除了無法恢復(恢復極其困難,默認為無法恢復)
常用選項:
1、-r遞歸刪除
2、-f在刪除時,會詢問是否刪除,-f可以跳過詢問,直接刪除
3、-rf遞歸強制刪除
4、-i刪除前逐一詢問確認
[xzx@instance-157t533k test]$ mkdir -p d1/d2/d3
[xzx@instance-157t533k test]$ tree
.
└── d1└── d2└── d33 directories, 0 files
[xzx@instance-157t533k test]$ touch data.txt
[xzx@instance-157t533k test]$ tree
.
├── d1
│?? └── d2
│?? └── d3
└── data.txt3 directories, 1 file
[xzx@instance-157t533k test]$ rm -r d1
[xzx@instance-157t533k test]$ rm data.txt
[xzx@instance-157t533k test]$ tree
.0 directories, 0 files
這里有一條神奇的指令:rm -rf /,意思為從根目錄遞歸刪除所有文件和目錄,不要輕易嘗試哦
2、*通配符(匹配任意名稱的文件或目錄)
1、ls *匹配全部目錄或文件
2、ls *.c匹配所有. c后綴的文件
3、ls test.*匹配所有test.前綴文件
4、rm * -rf刪除所有(當前目錄下)
[xzx@instance-157t533k test]$ mkdir -p d1/d2/d3
[xzx@instance-157t533k test]$ touch test.c
[xzx@instance-157t533k test]$ touch data.txt
[xzx@instance-157t533k test]$ touch test1.c
[xzx@instance-157t533k test]$ ll
total 4
drwxrwxr-x 3 xzx xzx 4096 Sep 3 10:26 d1
-rw-rw-r-- 1 xzx xzx 0 Sep 3 10:27 data.txt
-rw-rw-r-- 1 xzx xzx 0 Sep 3 10:27 test1.c
-rw-rw-r-- 1 xzx xzx 0 Sep 3 10:26 test.c
[xzx@instance-157t533k test]$ ls *
data.txt test1.c test.cd1:
d2
[xzx@instance-157t533k test]$ ls *.c
test1.c test.c
[xzx@instance-157t533k test]$ ls test.*
test.c
[xzx@instance-157t533k test]$ rm * -rf
[xzx@instance-157t533k test]$ ll
total 0
3、man指令
Linux的命令有很多參數,我們不可能全記住,所以我們可以通過查看聯機手冊獲取幫助。
語法:man空格[選項]查找內容
man man:man的用法
MAN(1) Manual pager utils MAN(1)NAMEman - an interface to the on-line reference manualsSYNOPSISman [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-m sys‐tem[,...]] [-M path] [-S list] [-e extension] [-i|-I] [--regex|--wildcard] [--names-only][-a] [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation][--no-justification] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] [[sec‐tion] page ...] ...man -k [apropos options] regexp ...man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ...man -f [whatis options] page ...man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-P pager][-r prompt] [-7] [-E encoding] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z]file ...man -w|-W [-C file] [-d] [-D] page ...man -c [-C file] [-d] [-D] page ...man [-?V]
man 1:查基本指令,man 2:系統調用接口,man 3:查c語言庫函數
對于man手冊的查詢,man+查詢內容,默認先到手冊1中查找,然后依次向后查找
例如我們想要查一查c語言庫函數printf,直接輸入man空格printf回車會發生什么呢?
PRINTF(1) User Commands PRINTF(1)NAMEprintf - format and print dataSYNOPSISprintf FORMAT [ARGUMENT]...printf OPTIONDESCRIPTIONPrint ARGUMENT(s) according to FORMAT, or execute according to OPTION:--help display this help and exit--versionoutput version information and exitFORMAT controls the output as in C printf. Interpreted sequences are:\" double quote\\ backslash
此時我們查到的printf,不是我們想要的那個,也證明了我們上面所說的默認查詢手冊1
通過man空格3空格printf,我們查到正確的內容
PRINTF(3) Linux Programmer's Manual PRINTF(3)NAMEprintf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted outputconversionSYNOPSIS#include <stdio.h>int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int sprintf(char *str, const char *format, ...);int snprintf(char *str, size_t size, const char *format, ...);#include <stdarg.h>int vprintf(const char *format, va_list ap);int vfprintf(FILE *stream, const char *format, va_list ap);int vsprintf(char *str, const char *format, va_list ap);int vsnprintf(char *str, size_t size, const char *format, va_list ap);Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
4、一些補充的內容
為了更好的配合下一條指令cp,這里將補充一些會用上的知識
1、echo+字符串:將字符串內容打印到命令行控制臺上
[xzx@instance-157t533k test]$ echo 'hello world'
hello world
[xzx@instance-157t533k test]$ echo "helo world"
helo world
[xzx@instance-157t533k test]$ echo hello word
hello word
這里的字符串并不是c/c++定義的那樣,支持單引號、雙引號和直接輸入
2、cat+文件:打印文件內容
[xzx@instance-157t533k test]$ cat test.txt
hello world
我們往test.txt中寫入了hello world,通過cat打印到控制臺上
3、輸出重定向
[xzx@instance-157t533k test]$ echo hello world
hello world
[xzx@instance-157t533k test]$ echo hello world > test.txt
[xzx@instance-157t533k test]$ cat test.txt
hello world
我們能觀察到什么?
1、原本的echo將字符串內容打印到控制臺上
2、經過>操作過后,原本在控制臺打印的字符串沒有出現
3、在文件中,我們發現了本該打印在控制臺的字符串,此時被寫入到文件中
最終:在>符號的作用下,本該打印在控制臺的字符串內容,被打印到了文件中,這就叫做輸出重定向
4、cp指令
語法:cp空格[選項]空格源文件/目錄空格目標文件/目錄
功能:復制文件或目錄
說明:cp指令用于復制文件或目錄,如果同時指定兩個以上的文件或目錄,且最后的目的地時一個已經存在的目錄,則它會把前面指定的所有文件或目錄復制到此目錄/文件下。若同時指定多個文件/目錄,而最后的目的地并非一個已存在的目錄/文件,則會出現錯誤信息
[xzx@instance-157t533k test]$ ll
total 4
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cp test.txt data.txt ../test1
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ ll
total 8
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:44 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:44 test1
[xzx@instance-157t533k 9_3]$ cd test1
[xzx@instance-157t533k test1]$ ll
total 4
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
-rw-rw-r-- 1 xzx xzx 12 Sep 3 16:44 test.txt
可以看到test和data文件復制到了test1目錄下
[xzx@instance-157t533k 9_3]$ ll
total 8
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:44 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:44 test1
[xzx@instance-157t533k 9_3]$ cd test
[xzx@instance-157t533k test]$ ll
total 4
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cp data.txt test.txt ../test2
cp: target ‘../test2’ is not a directory
因為上一個目錄下,沒有test2目錄的存在,所以彈出報錯信息
cp 源 目的地:將源的內容拷貝到目的地,如果源和目的地在同一目錄/文件下,則名字不能相同
[xzx@instance-157t533k test]$ ll
total 8
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cp -r test1 .
cp: ‘test1’ and ‘./test1’ are the same file
由于test下已經存在test1的目錄,我們再次復制test1到當前目錄下,提示有相同文件
cp -r 源 目的地:拷貝目錄
[xzx@instance-157t533k 9_3]$ ll
total 8
drwxrwxr-x 3 xzx xzx 4096 Sep 3 16:53 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:57 test1
[xzx@instance-157t533k 9_3]$ cd test
[xzx@instance-157t533k test]$ ll
total 8
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ rm -rf test1
[xzx@instance-157t533k 9_3]$ ll
total 4
drwxrwxr-x 3 xzx xzx 4096 Sep 3 16:53 test
[xzx@instance-157t533k 9_3]$ cd test
[xzx@instance-157t533k test]$ ll
total 8
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cp test1 ..
cp: omitting directory ‘test1’
[xzx@instance-157t533k test]$ cp -r test1 ..
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ ll
total 8
drwxrwxr-x 3 xzx xzx 4096 Sep 3 16:53 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 17:02 test1
通過ll我們知道在我們9_3目錄下有test和test1兩個目錄,在test中有data、test.txt和test1目錄,我們嘗試將test下的test1目錄復制到上級目錄,9_3之下。先rm -rf test1在9_3目錄下,然后cd到test中,我們發先cp test1 ..會報錯,大概意思是復制目錄需要-r遞歸復制,才能保證整個目錄被完整復制
常用選項:
1、-f或-force 強行復制文件/目錄,不論目的地文件/目錄是否已存在
[xzx@instance-157t533k test]$ ll
total 8
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cp -f test.txt ../test2
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ ll
total 12
drwxrwxr-x 3 xzx xzx 4096 Sep 3 16:53 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 17:02 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:13 test2
[xzx@instance-157t533k 9_3]$ cd test2
-bash: cd: test2: Not a directory
[xzx@instance-157t533k 9_3]$ cat test2
hello world
[xzx@instance-157t533k 9_3]$ cd test
[xzx@instance-157t533k test]$ ll
total 8
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ cat test.txt
hello world
將test.txt強行復制到上級目錄下的test2,由于test2未創建,強行復制后再9_3目錄下出現了test2的普通文件,并用cat查看內容,與test.txt的內容相同
2、-i或-inreractive 覆蓋文件之前先詢問用戶
[xzx@instance-157t533k test]$ ll
total 8
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 11:39 test.txt
[xzx@instance-157t533k test]$ echo hello china > test.txt
[xzx@instance-157t533k test]$ cat test.txt
hello china
[xzx@instance-157t533k test]$ cp -i test.txt ../test2
cp: overwrite ‘../test2’? y
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ cat test2
hello china
之前的test.txt和test2中保存的都是hello world,我們通過輸入重定向,將hello china重新寫入test.txt中,將test.txt復制到上級目錄中的test2,可以看到再加-i選項后,會詢問是否覆蓋,我們輸入y也就是yes,可以看到test2的內容被更改成了hello china
3、-r 遞歸處理,將指定目錄下的文件與子目錄一并處理。若源文件或目錄的形態,不屬于目錄或符號鏈接,則一律視為普通文件處理
[xzx@instance-157t533k test]$ mkdir -p d1/d2/d3
[xzx@instance-157t533k test]$ tree
.
├── d1
│?? └── d2
│?? └── d3
├── data.txt
├── test1
└── test.txt4 directories, 2 files
[xzx@instance-157t533k test]$ cp -rf d1 ..
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ tree
.
├── d1
│?? └── d2
│?? └── d3
├── test
│?? ├── d1
│?? │?? └── d2
│?? │?? └── d3
│?? ├── data.txt
│?? ├── test1
│?? └── test.txt
├── test1
└── test29 directories, 3 files
先通過mkdir -p d1/d2/d3,遞歸創造出d1d2d3,然后再將其拷貝到上級目錄下,并通過tree展示出來
4、-R或-recursive 遞歸處理,將指定目錄下的文件和子目錄一并處理
5、mv指令
mv指令是move的縮寫,可以用來移動文件或文件改名是Linux下常用的命令,經常用來備份文件或者目錄
語法:mv空格[選項]空格源文件/目錄空格目的地文件/目錄
功能:所有mv操作可以認為剪切+重命名(沒有重命名,使用默認名);mv操作在語義上相同,不過mv目錄時,目的地目錄存在,源目錄會移動到目的地目錄下
1、重命名
[xzx@instance-157t533k test]$ ll
total 12
drwxrwxr-x 3 xzx xzx 4096 Sep 3 17:24 d1
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:20 test.txt
[xzx@instance-157t533k test]$ mv test.txt test_new.txt
[xzx@instance-157t533k test]$ ll
total 12
drwxrwxr-x 3 xzx xzx 4096 Sep 3 17:24 d1
-rw-rw-r-- 1 xzx xzx 0 Sep 3 16:44 data.txt
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:20 test_new.txt
2、剪切
[xzx@instance-157t533k test]$ cat test_new.txt
hello china
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ cd test
[xzx@instance-157t533k test]$ mv test_new.txt ..
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ ll
total 20
drwxrwxr-x 3 xzx xzx 4096 Sep 3 17:25 d1
drwxrwxr-x 4 xzx xzx 4096 Sep 3 19:44 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 17:02 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:20 test2
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:20 test_new.txt
[xzx@instance-157t533k 9_3]$ cat test_new.txt
hello china
3、重命名+剪切
[xzx@instance-157t533k test]$ echo hello Linux > data.txt
[xzx@instance-157t533k test]$ cat data.txt
hello Linux
[xzx@instance-157t533k test]$ mv data.txt ../test.txt
[xzx@instance-157t533k test]$ ll
total 8
drwxrwxr-x 3 xzx xzx 4096 Sep 3 17:24 d1
drwxrwxr-x 2 xzx xzx 4096 Sep 3 16:53 test1
[xzx@instance-157t533k test]$ cd ..
[xzx@instance-157t533k 9_3]$ ll
total 24
drwxrwxr-x 3 xzx xzx 4096 Sep 3 17:25 d1
drwxrwxr-x 4 xzx xzx 4096 Sep 3 19:48 test
drwxrwxr-x 2 xzx xzx 4096 Sep 3 17:02 test1
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:20 test2
-rw-rw-r-- 1 xzx xzx 12 Sep 3 17:20 test_new.txt
-rw-rw-r-- 1 xzx xzx 12 Sep 3 19:47 test.txt
[xzx@instance-157t533k 9_3]$ cat test.txt
hello Linux
二、結語
到這里,我們已經完整掌握了 Linux 中與 “刪除 - 查詢 - 復制 - 移動” 相關的核心指令:從只能刪除空目錄的rmdir,到功能強大但需謹慎使用的rm(尤其警惕rm -rf /);從能匹配各類文件的*通配符,到幫我們隨時查手冊的man;還有搭配echo、cat和輸出重定向使用的cp,以及兼具重命名與剪切功能的mv。這些指令看似基礎,卻是搭建 Linux 操作體系的關鍵基石,日常文件管理、目錄操作都離不開它們。?
后續我們會繼續深入 Linux 指令世界,探索更多實用功能。大家在實際操作時,建議多動手嘗試指令的不同選項,同時牢記 Linux 刪除操作的不可逆性,避免誤操作帶來的數據損失。如果在練習中遇到問題,不妨用man指令自主查詢,逐步培養獨立解決 Linux 問題的能力,我們下一篇博客再見!