Linux(2)|入门的开始:Linux基本指令(2)

发布于:2025-09-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、基本指令介绍

回顾上篇博客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
        └── d3

3 directories, 0 files
[xzx@instance-157t533k test]$ touch data.txt
[xzx@instance-157t533k test]$ tree
.
├── d1
│   └── d2
│       └── d3
└── data.txt

3 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.c

d1:
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)

NAME
       man - an interface to the on-line reference manuals

SYNOPSIS
       man  [-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)

NAME
       printf - format and print data

SYNOPSIS
       printf FORMAT [ARGUMENT]...
       printf OPTION

DESCRIPTION
       Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:

       --help display this help and exit

       --version
              output version information and exit

       FORMAT 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)

NAME
       printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output
       conversion

SYNOPSIS
       #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.txt

4 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
└── test2

9 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 问题的能力,我们下一篇博客再见!


网站公告

今日签到

点亮在社区的每一天
去签到