一、基本指令介绍
回顾上篇博客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 问题的能力,我们下一篇博客再见!