首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >专治手忙脚乱!Linux 新手扫雷:7个常见坑位保姆级精讲 + 重定向从懵懂到精通

专治手忙脚乱!Linux 新手扫雷:7个常见坑位保姆级精讲 + 重定向从懵懂到精通

作者头像
用户11831438
发布2025-12-30 14:27:23
发布2025-12-30 14:27:23
1530
举报

前情提示

一、指令本质的探索

ok,在学习这块内容之前我们先来了解一个命令:

  • which——查看指令在什么路径下
代码语言:javascript
复制
[root@VM-0-16-centos 118]# which pwd
/usr/bin/pwd

ok,通过which指令,我们查看了pwd这个指令所在的路径

哦,不知道有没有uu发现了什么?我们所使用的这个pwd指令竟然是在一个路径下面

那为什么这个pwd指令是在一个路径下面,难道其他指令也有相应的路径吗?

  • 其实一个命令的本质是一个文件

为什么这么说呢?

我们先来看一下windows:

  • 在windows中所谓的可执行程序(应用),本质就是特定路径下的一个可执行程序。

就比如我们下载的谷歌浏览器:

我们复制上面的路径在我们的c盘中进行查找——

我们看到我们下载的谷歌其实就是特定路径下的一个可执行程序。

那这里有个问题:下载和安装最朴素的理解是什么?

  • 所谓的下载就是下载一个可执行程序(也就是一个.exe文件),安装就是把一个可执行程序拷贝到windows的特定路径下面

在C/C++编译形成可执行程序(.exe),这个是文件吗?

也是文件,是一个可执行文件执行一个文件,我们需要:路径和文件名

那我们再通过which指令来查看几个指令——

pwd、touch、mkdir……这些命令的本质是Linux中特定路径下的一个文件,一个可执行文件,仅此而已(所以命令没有什么可怕的,就一个文件而已)

  • 所以指令的本质是Linux特定路径下的可执行文件

并且这些指令就是用C/C++写的,我们称之为二进制文件

Linux指令就是二进制文件被安装到(拷贝到)系统路径下,这样就可以直接被使用了,并且在Linux中所谓的软件安装,其实就是把可执行文件拷贝到系统路径下

1.1 幕后追踪:which如何找到命令的真实位置
  • which命令:查找系统中,指定命令所在的路径

一般which命令是在/uer/bin/路径下查找指定的可执行文件(或者是指令)所对应的路径

代码语言:javascript
复制
[root@VM-0-16-centos 118]# which pwd
/usr/bin/pwd
[root@VM-0-16-centos 118]# which mkdir
/usr/bin/mkdir
[root@VM-0-16-centos 118]# which touch
/usr/bin/touch

在Linux中所谓的命令、指令、可执行文件、可执行程序、二进制文件……是一回事运行一条指令无非就是在Linux特定路径下把一个二进制文件加载到内存中,然后让他跑起来

在前面的学习中,也许会有uu看到博主在使用ls、ls -l 以及 ll ,这些指令有什么区别呢?(这个也是一个面试题哦)

1.2 终端进阶操作:别名、色彩与列表区别

要看这个区别,那我们就要使用which命令来查看一下他们——

代码语言:javascript
复制
[root@VM-0-16-centos 118]# which ls -l
/usr/bin/which: invalid option -- 'l'
alias ls='ls --color=auto'
	/usr/bin/ls
[root@VM-0-16-centos 118]# which ll
alias ll='ls -l --color=auto'
	/usr/bin/ls
[root@VM-0-16-centos 118]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls

等我们使用which命令分别查看这三个指令,我们发现这里的输出结果好像看不懂:

ok,那我们就要先来介绍一下alias——

1.2.1 alias-命令别名
  • alias——给这个命令取个别名,取个别称(就相当于typename)
代码语言:javascript
复制
[root@VM-0-16-centos 118]# alias zs='ls -a -l'
[root@VM-0-16-centos 118]# zs
total 8
drwxr-xr-x  2 root root 4096 Dec 16 22:12 .
dr-xr-x---. 9 root root 4096 Dec 16 22:08 ..
[root@VM-0-16-centos 118]# ls -a -l
total 8
drwxr-xr-x  2 root root 4096 Dec 16 22:12 .
dr-xr-x---. 9 root root 4096 Dec 16 22:08 ..
[root@VM-0-16-centos 118]# 

所以当这个指令比较长的时候,或者我们不想使用这个指令,我们就可以使用alias给这个指令搞一个别称,这是一种技巧—

代码语言:javascript
复制
[root@VM-0-16-centos 118]# alias rm='rm -i'

但是,不要这么做!!!因为时间久了有可能会忘掉!!!

那我们怎么取消这个别名呢?

  • 方法一——别名直接置为空
代码语言:javascript
复制
[root@VM-0-16-centos 118]# alias zs=' '
  • 方法二——直接关闭xshell,然后重新登录

ok,学完了alias指令之后,我们接着看——

1.2.1 终端色彩革命:--color=auto的智能着色哲学

当我们使用which查看ls时,会有意想不到的事情发生——

代码语言:javascript
复制
[root@VM-0-16-centos 118]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls

那我们就来看一下分别执行ls和/usr/bin/ls,看看有啥区别——

  • 直接运行ls,运行结果是带颜色的;
  • 直接运行系统指定路径下的ls——/usr/bin/ls,运行结果是不带颜色的

这是因为ls指令默认是不带颜色的之所以直接运行ls输出结果是带颜色的,是因为你默认执行的ls(直接运行ls)其实是ls(这个二进制文件本身的——/uer/bin/ls)的别名也是ls,只不过是给自己的别名默认吧color选项带上了

要是我们也想运行系统指定路径下的ls——/usr/bin/ls,并且运行结果是带颜色,我们可以带上这个 --color=auto

1.3 ls vs ls -l vs ll

ok,现在是不是就很轻松的就可以看出来他们之间的区别——

ls -l 和 ll 是等价的,ll是ls -l的别名;ls是/usr/bin/ls的别名,加上了--color=auto的选项(颜色)

1.3 查询命令手册:man

功能:查阅命令、函数、配置文件的详细说明(用法、选项、示例等) 语法:man [选项] 命令

常用选项:

  • -k 根据关键字搜索联机帮助
  • num 只在第num章节查找
  • -a 将所有章节的都显示出来,比如 man printf 它会从第一章节开始搜索,搜到了就停止,用a选项的话,当按下q结束后,它还会继续往后面搜索,直到所有章节都搜索完毕。

解释一下:man手册分为9个章节,其中前3个比较常用

  1. 是普通的命令
  2. 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
  3. 是库函数,如printf,fread是特殊文件,也就是/dev下的各种设备文件
代码语言:javascript
复制
[root@VM-4-4-centos ~]$ man printf # 查看printf指令(没错,printf也是⼀个指 1
令)
[root@VM-4-4-centos ~]$ man fork # 查看系统调⽤,默认没有这个指令,man就⾃动
去2号⼿册查找
[root@VM-4-4-centos ~]$ man 2 frok # 查看系统调⽤
[root@VM-4-4-centos ~]$ man 3 printf # 查看C库函数
[root@VM-4-4-centos ~]$ man 7 signal # 查看变量
[root@VM-4-4-centos ~]$ man 7 environ
[root@VM-4-4-centos ~]$ man man # 查看man⼿册⾃⼰

man的查找原则是就近原则,默认是从1号手册开始查找,匹配到就结束,匹配不到就继续往后查找

  • 若直接 man 指令 (前提是确定这个指令是指令)
代码语言:javascript
复制
[root@VM-0-16-centos 118]# man 指令

从1号手册开始查找,若1号手册中有,找到就结束;若1号手册中没有找到,就到2号手册中找,找到就结束;若2号手册中没有,就到3号手册中找,找到就结束

  • 若能确定这个指令在哪号手册里面,我们可以直接到对应的手册中查找——
代码语言:javascript
复制
[root@VM-0-16-centos 118]# man 1 pwd
  • 若man 1 指令 直接在1号手册中找
  • 若man 2 指令 直接到2号手册中找
  • 若man 3 指令 直接到3号手册中找

但是,也有可能指令属于多个手册,比如:printf

printf既是一个c中的库函数,也是一个指令!!!

  • printf作为指令,我们可以这样使用,使用空格作为分隔符——
代码语言:javascript
复制
[root@VM-0-16-centos 118]# printf "%d,%s.%f\n" 12345 "hello world" 3.14
12345,hello world.3.140000

printf的作用是可以格式化向当前的终端输出指定格式的内容

man的下载方式:

  • centos:yum install -y man-pages
  • ubuntu:apt install -y man-pages

二、Linux下一切皆文件

ok,暂时不说为什么,我们先直接使用这个结论!!!

Linux下一切皆文件,那就说明:显示器、键盘、磁盘、网卡、普通文件……都是文件

  • 我们从键盘中获取数据,可以把键盘看作是文件,那就是从键盘文件中读取数据;
  • 我们向显示器中打印数据,可以把显示器看作是文件,那就是向显示器文件中写入数据
  • ……

从上面的学习中,我们知道printf的作用可以格式化向当前的终端输出指定格式的内容,但是到了这里——Linux下一切皆文件中就有了一些变化

代码语言:javascript
复制
[root@VM-0-16-centos ~]# printf "hello world\n"
hello world

就不是向显示器中打印hello world,printf的作用是向显示器文件中写入一个字符串,这个字符串叫做:hello world

不知道有没有uu听说过这样一句话——C/C++当中任何一个程序都有三种标准输入输出被默认打开

由于Linux下一切皆文件,所以显示器,显示器,键盘这些都是文件,只要是文件,我就可以使用C语言的方式打开这个文件,我需要知道这个文件的路径,然后使用fopen打开它,打开之后,我就会得到一个FILE*的指针——

所谓的标准输入、标准输出、标准错误,在C/C++当中的任何一个程序中默认是打开的

为什么这么说呢?是因为我C/C++程序默认用fopen把指定路径下的(键盘文件,显示器文件)打开,然后得到stdin、stdout、stderr这样的文件指针。

所以我们想要向显示器文件中写入,我们可以直接使用fprintf——

我们也可以使用fwrite——

这里有个疑问:为什么Linux下一切皆文件呢? 这是因为未来要简化在系统层面对设备的访问

那为什么要打开这三个呢?(标准输入、标准输出、标准错误)

因为程序需要通过标准输入获取数据,通过标准输出打印结果,所以一般程序都是默认打开标准输入和标准输出,方便程序员通过printf输出结果,scanf输入数据

那此时我想向标准输出(显示器)写入数据,可以直接使用printf——

代码语言:javascript
复制
[root@VM-0-16-centos 118]# printf "hello world\n"
hello world

注意:printf默认是不带\n的!!!

除了使用printf可以向显示器写入数据,还可以使用echo——

2.1 与终端对话:使用echo输出信息
  • echo——向显示器写入一个字符串
代码语言:javascript
复制
[root@VM-0-16-centos 118]# echo "hello world"
hello world

echo默认是带 \n 的!!!

echo 命令默认是向显示器中写入一个字符串,echo后面跟什么字符串,就写什么字符串到显示器上

echo 只能向显示器中写入字符串吗?

当然不是~~~,那接下来,我们就要来看一下——输出重定向

2.1.1 输出重定向

什么是输出重定向呢?

输出重定向就是将命令默认输出到屏幕(终端)的内容,改变其流向,让它输出到其他地方(主要是文件)。

当我们在echo的后面加上重定向标准输出 >,这样我们就可以改变其流向,将本来写入显示器的字符串写入到相应的文件中。

我们通过代码来演示一下:

代码语言:javascript
复制
[root@VM-0-16-centos 118]# echo "hello world" > message.txt

通过上面的这种写法,我们就可以改变写入方向,写入到指定的文件中将本来写入显示器的字符串写入到message.txt文件中。

重定向标准输出 >,>的做法是这样的——

首先检查当前目录下该文件是否存在——

  • 如果不存在就新建这个文件,同时把本来应该写入到显示器文件的东西写入到message.txt这个文件中;
  • 如果文件存在,就先清空文件中的内容,然后把本来应该写入到显示器文件的东西写入到message.txt这个文件中
代码语言:javascript
复制
[root@VM-0-16-centos 118]# echo "hello world" > message.txt

[root@VM-0-16-centos 118]# echo "hello world" > ./message.txt

以上两种写法都可以——

当前目录中无message.txt——

向message.txt文件中写入"hello bit"——

此时message.txt存在,我们再向其中写入:"hello world":

如果此时我想把message.txt清空,该怎么办?

是这样吗?——

ok,显然不是这样写的,因为echo中默认是有\n的,所以这个message.txt中看似是空的,其实里面还有一个\n。

那是这样写的吗?

代码语言:javascript
复制
[root@VM-0-16-centos 118]# printf "" >message.txt

这样写是可以的,但是有点子搓——

2.1.1.1 >+文件名 —— 清空文件以及创建一个空文件
  • 清空文件——重定向标准输出 >+文件名
代码语言:javascript
复制
[root@VM-0-16-centos 118]# >message.txt

这样就可以自动清空文件!!!

重定向标准输出 > ,这个 > 的作用远不止于此——

我们看到,当这个文件存在并且里面有内容的时候,>+文件名 可以清空文件,那如果这个文件不存在呢?

代码语言:javascript
复制
[root@VM-0-16-centos 118]# >test.txt

ok,如果>+文件名 ,这个文件不存在,则新建一个空的文件

下一个问题是:有些命令是向显示器写入,但是未来学的有些命令有可能是从键盘(标准输入)做读取,比如:cat

2.2 快速窥探文件内容:cat命令
  • cat + 文件名 从该文件中读取内容,然后回显到显示器上
代码语言:javascript
复制
[root@VM-0-16-centos 118]# cat message.txt
hello world

从message.txt文件中读取内容,然后将读取到的内容回显到显示器上

那如果cat后面没有跟文件名呢?

代码语言:javascript
复制
[root@VM-0-16-centos 118]# cat

那就是我们从键盘中输入,然后回显到显示器上,按ctrl c结束输入——

  • cat 默认是从键盘文件(标准输入)读取数据,然后回显到显示器上(cat 后面不跟文件名)

那cat可不可以从其他的文件中读取内容,然后回显到显示器上呢?是可以的

2.2.1 输入重定向

输入重定向是指改变命令的标准输入(stdin,文件描述符 0) 的来源,使其从默认的键盘输入改为从文件或其他来源读取数据。

  • 基本语法:<
代码语言:javascript
复制
command < input_file

将文件 input_file 的内容作为命令的标准输入。

那这个就可以配合 cat 使用了!!!

代码语言:javascript
复制
cat < 文件名

cat不要从键盘(标准输入)中读取数据,转换成从指定文件中读内容,把读到的内容写入显示器(标准输出),在显示器上显示出来

代码语言:javascript
复制
[root@VM-0-16-centos 118]# cat < message.txt
hello world

从message.txt文件中读,然后将读到的内容写入到显示器文件中,在显示器上显示出来

2.2.1.1 通过重定向实现文件拷贝:cat与重定向的组合应用
  • 输入重定向是从指定的文件中读取数据,然后将读到的内容回显到显示器上;
  • 输出重定向是将指定内容写入到指定的文件中;

那我是不是就可以将从指定的文件中读取数据,然后将读到的内容不回显到显示器上,而是通过输出重定向改变其流的转向,从本来应该写入到显示器上,转向写入到指定文件中。

代码语言:javascript
复制
[root@VM-0-16-centos 118]# cat < message.txt > test.txt
[root@VM-0-16-centos 118]# cat < test.txt
hello world
[root@VM-0-16-centos 118]# cat < message.txt
hello world

这样就将message.txt中的内容拷贝到test.txt中了!!!

注意:只能是文本文件

ok,通过上面的学习,我们知道使用echo 向文件中写入,如果该文件存在会先清空该文件,然后写入:

但是此时,我不想每次都清空原来的内容,我现在就想每次内容增多,不想每次向文件中echo都清空原来的内容,那我们就要需要学习下面的内容了——

2.3 向文件末尾追加内容:>> 操作符

基本语法与作用:

代码语言:javascript
复制
command >> filename

作用:将命令的输出追加到文件的末尾,不会覆盖原有内容。

代码语言:javascript
复制
[root@VM-0-16-centos 118]# echo "aaaaaaaa" >> message.txt

这样我们就可以在原来的基础上叠加,不清空原来的内容!!!


ok,既然我们今天可以向指定的文件中写入,那么以后也可以向指定的硬件中写入(或者向网络中写入),因为Linux下一切皆文件!!!

2.4 “一切皆文件”的实践:用重定向操作硬件设备的原理揭秘

Linux 中所有对象抽象为文件,包括硬件设备(存于 /dev 目录)。 终端窗口对应 /dev/pts/N 设备文件(N 为编号),每当我们登入Linux系统,Linux系统都会在/dev/pts/文件中新增一个文件——/dev/pts/0(最开始为0,后面每增加一个,就为1、2、3……)

echo 默认是向0这个文件里面写入的(也就是向/dev/pts/0)

新增一个终端,就会在/dev/pts/文件中新写一个文件1(/dev/pts/1)

那我可以在0(/dev/pts/0)这个终端下面向1(/dev/pts/1)这个终端中写入——

这样我就可以在一个终端向另一个终端中做写入了!!!

既然1都有文件名,那我是不是就可以把这个/dev/pts/1,/dev/pts/0打开,打开之后,就可以通过fread、fwirte向0或者1这个终端下去写去读!

Linux下一切皆文件,终端也是文件!!!

为什么要进行上面的操作呢?

因为显示器叫做字符设备,对应的第一列第一个字符为c

三、cp:复制文件 / 目录

功能:复制文件或目录,源文件保留(类似 “复制粘贴”) 语法:cp [选项] 源代码或目录 目标文件或目录 说明:

  • cp指令用于复制文件或目录
  • 如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中

常用选项:

  • -f 强行复制文件或目录,不论文件或者目录是否已经存在
  • i 覆盖文件之前先询问用户
  • -r 递归处理,将指定目录文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律按普通文件处理
3.1 拷贝文件
  • 相同路径
代码语言:javascript
复制
[root@VM-0-16-centos 118]# cp message.txt hello.txt

message.txt和hello.txt在相同的路径下,将message.txt中的内容拷贝到hello.txt中

  • 如果hello.txt文件不存在,则创建hello.txt文件,然后将message.txt中的内容拷贝到hello.txt文件中宏;
  • 如果hello.txt文件存在,则用message.txt中的内容覆盖hello.txt中的内容

  • 不同路径
代码语言:javascript
复制
[root@VM-0-16-centos ~]# cp hello.txt ../

拷贝的文件不存在,并且没有指明文件名,就把同名文件以及内容拷贝过去

拷贝同名文件到上级,将hello.txt文件拷贝到上级目录中,上级目录中有一个hello.txt文件


代码语言:javascript
复制
[root@VM-0-16-centos 118]# cd hello.txt ../118.txt

拷贝文件到上级目录:

  • 如果拷贝的文件存在(118.txt),可以覆盖该文件中的内容;
  • 如果拷贝的文件不存在并且指明了文件名,就创建一个新的文件(文件名为118.txt),然后把hello.txt文件中的内容拷贝到118.txt文件中。
3.2 拷贝目录

拷贝一个目录需要递归拷贝

加上 -r 表示递归拷贝

代码语言:javascript
复制
[root@VM-0-16-centos ~]# cp -r 118 118-backup

但是这样拷贝会有一点问题——

如果118-backup不存在,则创建一个该目录,然后进行拷贝;但是,如果118-backup这个目录存在,则会把118-backup看成一个路径,然后就把118拷贝到118-backup中

3.3 总结
  • 拷贝普通文件
代码语言:javascript
复制
cp src dest
若需要强制拷贝 cp -f src dest
  • 拷贝目录
代码语言:javascript
复制
cp -r src dest
若需要强制拷贝 cp -rf src dest

四、mv:移动 / 重命名文件

功能:移动文件/目录,重命名(同一目录下的移动),源文件删除(类似“剪切粘贴”)

语法:mv [选项] 源文件/源目录 目标文件/目标目录

功能:

  1. 视mv命令中第二个参数类型的不同(是目标文件还是目录),mv指令将文件重命名或将其移至一个新的目录中。
  2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  3. 当第二个参数是已经存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目录中。

常用选项:

  • -f:如果目标文件已存在,不会询问直接覆盖
  • -i:若目标文件已经存在时,就会询问是否覆盖
代码语言:javascript
复制
[root@VM-0-16-centos 118]# mv test.txt ..

将test.txt移动到上级目录,并且不重命名


代码语言:javascript
复制
root@VM-0-16-centos 118]# mv ../test.txt .

将上级目录中的test.txt移动到本级目录,并且不重命名


代码语言:javascript
复制
[root@VM-0-16-centos 118]# mv test.txt ../118.txt

将test.txt移动到上级目录并且重命名为118.txt


代码语言:javascript
复制
[root@VM-0-16-centos 118]# mv hello.txt ../test.txt

如果目标文件存在,则会覆盖目标文件中的内容

  • 更多例子:
代码语言:javascript
复制
# 更改名称
[root@VM-4-4-centos test-mv]# touch myfile.txt
[root@VM-4-4-centos test-mv]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 12 20:58 myfile.txt
[root@VM-4-4-centos test-mv]# mv myfile.txt yourfile.txt
[root@VM-4-4-centos test-mv]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 12 20:58 yourfile.txt

# 如果当前路径存在同名文件,改名即覆盖。这个普通用户用-i 会在覆盖前询问
[root@VM-4-4-centos test-mv]# touch myfile.txt
[root@VM-4-4-centos test-mv]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 12 20:59 myfile.txt
-rw-r--r-- 1 root root 0 Oct 12 20:58 yourfile.txt
[root@VM-4-4-centos test-mv]# mv yourfile.txt myfile.txt
mv: overwrite ‘myfile.txt’? y
[root@VM-4-4-centos test-mv]# ll
total 0
-rw-r--r-- 1 root root 0 Oct 12 20:58 myfile.txt

# mv整个目录
[root@VM-4-4-centos test-mv]# touch myfile.txt
[root@VM-4-4-centos test-mv]# mkdir temp
[root@VM-4-4-centos test-mv]# ll
total 4
-rw-r--r-- 1 root root    0 Oct 12 21:10 myfile.txt
drwxr-xr-x 2 root root 4096 Oct 12 21:10 temp
[root@VM-4-4-centos test-mv]# mv myfile.txt temp
[root@VM-4-4-centos test-mv]# ls
temp
[root@VM-4-4-centos test-mv]# mv temp ../
[root@VM-4-4-centos test-mv]# ls
[root@VM-4-4-centos test-mv]# ls -d ../temp
../temp
  • 总结:

五、指令总结

指令/功能

核心功能

必学选项/用法

典型场景

which

定位命令对应的可执行文件路径

-a:显示所有匹配路径(适合同名多版本程序,如 which -a python)

1. 检查命令是否安装(无结果则未安装) 2. 区分版本(如 python 和 python3)

alias

为长命令设置简短别名

1. 设置:alias 别名='完整命令'(如 alias ll='ls -lah') 2. 查看:直接输入 alias 3. 删除:unalias 别名

简化高频命令: 1. alias ll='ls -lah' 2. alias cdp='cd /home/user/projects'

man

查看命令/系统调用/库函数的手册

1. -k 关键词:搜索相关命令(如 man -k copy) 2. 章节号: - 1:普通命令(man 1 ls) - 2:系统调用(man 2 open) - 3:库函数(man 3 printf)

1. 查命令用法(man ls) 2. 查编程接口(程序员用)

echo

输出文本/变量到终端或文件

1. -e:支持转义符(\n换行,\t制表) 2. -n:输出后不换行 3. 重定向:>覆盖,>>追加

1. 创建文件:echo "内容" > file.txt 2. 调试输出:echo $PATH 3. 设备通信:向终端发送消息

重定向

改变程序输入/输出流向

1. 输出:>覆盖,>>追加 2. 错误:2>重定向错误 3. 输入:<从文件读取 4. 合并:&>输出+错误

1. 日志记录:cmd >> log.txt 2>&1 2. 批量处理:wc -l < file.txt 3. 错误隔离:cmd 2> /dev/null

cp

复制文件/目录

1. -r/-R:递归复制目录 2. -i:覆盖前确认 3. -v:显示详情 4. -f:强制覆盖

1. 备份数据:cp -r docs/ backup/ 2. 同步文件:cp -v *.jpg photos/ 3. 配置备份:cp config.cfg config.bak

mv

移动/重命名文件/目录

1. -i:覆盖前确认 2. -v:显示详情 3. -n:不覆盖已存在文件 4. -u:只移动较新文件

1. 整理文件:mv *.log logs/ 2. 批量重命名:mv old_*.txt new_*.txt 3. 目录操作:mv dir1/ dir2/

结尾

uu们,本文的内容到这里就全部结束了,再次感谢您的阅读!

结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键三连”哦!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前情提示
  • 一、指令本质的探索
    • 1.1 幕后追踪:which如何找到命令的真实位置
    • 1.2 终端进阶操作:别名、色彩与列表区别
      • 1.2.1 alias-命令别名
      • 1.2.1 终端色彩革命:--color=auto的智能着色哲学
      • 1.3 ls vs ls -l vs ll
    • 1.3 查询命令手册:man
  • 二、Linux下一切皆文件
    • 2.1 与终端对话:使用echo输出信息
      • 2.1.1 输出重定向
    • 2.2 快速窥探文件内容:cat命令
      • 2.2.1 输入重定向
    • 2.3 向文件末尾追加内容:>> 操作符
    • 2.4 “一切皆文件”的实践:用重定向操作硬件设备的原理揭秘
  • 三、cp:复制文件 / 目录
    • 3.1 拷贝文件
    • 3.2 拷贝目录
    • 3.3 总结
  • 四、mv:移动 / 重命名文件
  • 五、指令总结
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档