Linux的cp命令主要用于复制文件或目录。以下是cp命令的语法:
cp [options] source destination
其中,source是要复制的文件或目录,destination是目标位置。
options是一系列的代号,表示各种复制的方式
首先假如一句命令没有明确写出[options]是什么,或者说直接省略了[options]的话,比如下面这样
cp /root/test1/tt1/1.txt /root/test1/tt2
默认[options]是取 -i 。
这个-i 是什么意思?
-i是 -interactive(交互的)的缩写。在cp命令中表示在复制文件时进行交互式确认。当目标文件已经存在时,-i选项会提示用户是否覆盖目标文件。回答y时,目标文件将被覆盖;回答n时,复制将不会进行。这是一种安全措施,可以防止意外地覆盖重要文件。
当然前面那句命令,复制之前并不存在1.txt这个文件,自然也就不存在和你交互,问你是否覆盖的问题了。直接把文件复制到你指定的路径下了。
给你来个复制后存在覆盖问题的,让你见识一下,啥是交互
先修改tt1下面的1.txt文件的内容为“6666666666s”
我们现在先来看一下tt2下面的1.txt(和tt1下面的1.txt名字相同,一会cp拷贝的时候会有覆盖问题)当下的内容,是“bhnjhbjsdbjabdjbs”
现在,见证奇迹的时刻。1.txt 的内容,从原来的“bhnjhbjsdbjabdjbs”替换为 被复制过来覆盖的“6666666666s”
但是呢不知道为啥,涉及了覆盖但是没有交互式界面让我输入YES或者NO
但是你注意哦,这种省去[options],默认取-i的写法,被复制的必须是一个文件而不能是一个文件夹。否则就会报错
报错信息告诉你的是,你要是想用cp复制文件夹 ,你的[options]必须加-r,否则就运行不了
cp -r /root/test1/tt1 /root/test1/tt2
这样搞完以后tt2这个本来是空的文件夹下面就多了一个叫tt1的文件夹,和tt1一样里面有一个叫1.txt的文件,1.txt里面写着“bhnjhbjsdbjabdjbs”的内容
文件夹以及文件夹下面所有的文件以及整个文件夹的结构全部复制过去了
OK,刚我们尝试了文件的 覆盖性 拷贝。现在试一下文件夹覆盖式拷贝。
现在我们先展示下文件夹覆盖式拷贝之前 被覆盖的那个文件里面的内容。里面1.txt里面的内容是“bhnjhbjsdbjabdjbs”。
现在 同名文件夹 覆盖式拷贝 后变成“6666666666s”,也是没有交互式界面
mv 被移动的文件 移动过去的位置
mv /root/test1/tt2 /root/test1/tt3
首先解释什么是 xxx.sh文件
你在linux bash shell中,写一行命令,按回车就执行这一条。但是假设你想一次性执行200条bash命令,这个时候你就需要用到 xxx.sh 代码文件。你可以在一个xxx.sh文件里面写无线多行shell命令。然后只需要 通过 sh xxx.sh,一次回车就能把这几十条命令执行完毕。省去了你按多个Enter的功夫。
1. 在不创建一个 xxx.sh 文件的前提下,运行一段 本应该写在 xxx.sh文件里面的 代码。
在linux命令行中直接输入
sh
你写啥shell命令都会接着出结果
这将进入sh命令行界面,你可以输入任何有效的shell命令并按下回车键执行。
此时你进入的叫shell命令行解释器
但是你要问了,那你如何退出这种模式呢?
方式一:输入exit命令并按回车。
可以这样用,是因为:任何xxx.sh文件,你如果想脚本的最后一行应该是exit
命令
2. 执行一个脚本文件:
假设你有一个名为script.sh的脚本文件,其中包含了一些shell命令。你可以使用以下命令来执行该脚本:
sh script.sh
只需要一键,里面所有的shell命令就都执行了。
3. 你在不想创建一个xxx.shell文件的前提下,执行带有参数的命令:
假设你有一个名为my_program的程序,它接受两个参数。你可以使用以下命令来执行该程序并传递参数:
sh -c "my_program arg1 arg2"
4.你在不想创建一个xxx.shell文件的前提下,又想一次性执行多条命令
你可以在一行中编写多个命令,使用分号将它们分隔开
sh -c "command1; command2; command3"