两台局域网服务器cp命令
在Linux上可用的点击式图形用户界面是一件很棒的事情……但是,如果您最喜欢的交互式开发环境由终端窗口,Bash,Vim和您喜欢的语言编译器组成,那么像我一样,您可以使用码头很多 。
但是,即使通常避开航站楼的人也可以通过更加了解其环境所提供的财富而受益。 一个典型的例子– cp命令。 根据Wikipedia所说 , cp (或复制)命令是Unix版本1的一部分。 cp和其他一些命令(包括ls , mv , cd , pwd , mkdir , vi , sh , sed和awk)一起出现在我的脑海中- cp是1984年我在System V Unix中的头几步。 cp的使用是制作文件的副本,如下所示:
cp sourcefile destfile
在终端会话的命令提示符处发出。 上面的命令将名为sourcefile的文件复制到名为destfile的文件。 如果在发出命令之前不存在destfile ,则会创建它;否则,将创建它。 如果确实存在,则将其覆盖。
我不知道我使用了多少次该命令(也许我不想知道),但是我确实知道我在编写和测试代码时经常使用它,并且我拥有某个版本的工作版本我想在继续前进之前保持原样。 因此,我可能输入了以下内容:
cp test1.py test1.bak
在过去30多年的时间里,在命令提示符下至少出现了数十亿次。 或者,我可能决定继续测试程序的第2版,在这种情况下,我可能输入了:
cp test1.py test2.py
完成这一举措的第一步。
这是一件普通而简单的事情,我很少看过cp的参考文档。 但是,当备份我的Pictures文件夹(在GUI环境中使用Files应用程序)时,我开始思考:“我想知道是否可以选择仅在新文件或已更改的文件上进行cp复制吗?” 果然有!
最佳用途1:更新文件夹的第二个副本
假设我的计算机上有一个包含文件集合的文件夹。 此外,可以说我不时将一个新文件放入该集合中。 最后,让我们说我可能会不时地以某种方式编辑这些文件之一。 这样的收藏的一个例子可能是我从手机下载的照片或音乐文件。
假设该文件集合对我具有持久的价值,我有时可能会想要对其进行复制(一种“快照”)以将其保存在其他介质上。 当然,存在许多用于执行备份的实用程序,但是也许我想在通常可脱机存储甚至连接到另一台计算机的可移动设备上复制此精确结构。
cp命令提供了一种非常简单的方法。 这是一个例子。
在我的图片文件夹中,有一个名为Misc的子文件夹。 出于说明目的,我将在USB记忆棒上制作一个副本。 开始了!
me
@ desktop:~
/ Pictures$
cp
-r Misc
/ media
/ clh
/
4388 -D5FE
me
@ desktop:~
/ Pictures$
以上几行是从我的终端窗口按原样复制的。 对于那些可能不太适应该环境的用户,值得注意的是, @ mydesktop:〜/ Pictures $是终端在输入和执行每个命令之前提供的命令提示符。 它标识用户( me ),计算机( mydesktop )和当前工作目录,在本例中为〜/ Pictures ,它是/ home / me / Pictures的简写,即,我的主目录中的Pictures文件夹。
我输入并执行的命令cp -r Misc / media / clh / 4388-D5FE ,复制了文件夹Misc及其所有内容( -r或“递归”选项表明了内容以及文件夹或文件本身)放入/ media / clh / 4388-D5FE文件夹中,该文件夹就是安装我的USB记忆棒的位置。
执行命令使我回到原始提示。 与从Unix继承的大多数命令一样,如果命令执行时未检测到任何异常结果,则在终止之前不会打印出“执行成功”之类的消息。 想要更多反馈的人可以使用-v选项使执行“冗长”。
下面是我在USB驱动器上的其他杂项副本的图像。 目录中有九个JPEG文件。
假设我将一些新文件添加到目录〜/ Pictures / Misc的主副本中,因此现在看起来像这样:
现在,我只想将新文件复制到记忆棒中。 为此,我将对cp使用“ update”和“ verbose”选项:
me
@ desktop:~
/ Pictures$
cp
-r
-u
-v Misc
/ media
/ clh
/
4388 -D5FE
'Misc/asunder.png' -
>
'/media/clh/4388-D5FE/Misc/asunder.png'
'Misc/editing tags guayadeque.png' -
>
'/media/clh/4388-D5FE/Misc/editing tags guayadeque.png'
'Misc/misc on usb.png' -
>
'/media/clh/4388-D5FE/Misc/misc on usb.png'
me
@ desktop:~
/ Pictures$
上面的第一行显示了cp命令及其选项( -r表示“递归”, -u表示“更新”, -v表示“详细”)。 接下来的三行显示了复制的文件。 最后一行再次显示命令提示符。
一般来说,还可以以更冗长的方式给出诸如-r之类的选项,诸如--recursive 。 简而言之,也可以将它们组合在一起,例如-ruv 。
大用途2 –进行版本备份
回到我对开发中的代码的工作版本进行定期备份的初始示例,在学习更新时发现的另一个非常有用的cp选项是备份。
假设我要开始编写一个非常有用的Python程序。 作为迭代开发的爱好者,我可以通过首先运行一个简单的程序版本,然后依次为其添加更多功能直到它起作用来做到这一点。 假设我的第一个版本只是使用Python打印命令打印字符串“ hello world”。 这是一个单行程序,如下所示:
print 'hello world'
并将该字符串放入文件test1.py中 。 我可以从命令行运行它,如下所示:
me
@ desktop:~
/ Test$ python test1.py
hello world
me
@ desktop:~
/ Test$
现在程序正在运行,我想在添加下一个组件之前对其进行备份。 我决定对编号使用备份选项,如下所示:
clh
@ vancouver:~
/ Test$
cp
--force
--backup =numbered test1.py test1.py
clh
@ vancouver:~
/ Test$
ls
test1.py test1.py.~
1 ~
clh
@ vancouver:~
/ Test$
那么,这意味着什么?
首先,--backup = numbered选项说:“我要进行备份,并且要对连续的备份进行编号。” 因此,第一个备份将是1号,第二个将是2,依此类推。
其次,请注意源文件和目标文件是相同的。 通常,如果我们尝试使用cp命令将文件复制到自身上,则会收到类似以下消息:
cp: 'test1.py' and 'test1.py' are the same file
在特殊情况下,我们正在执行备份,并且希望使用相同的源和目标,请使用--force选项。
第三,我使用ls (或“列表”)命令来显示,我们现在有一个名为test1.py的文件,它是原始文件,另一个名为test1.py。〜1〜的文件,它是备份文件。
现在假设我要添加到程序的第二个功能是另一个打印语句,该语句打印字符串“ Kilroy在这里”。 现在文件test1.py中的程序如下所示:
print
'hello world'
print
'Kilroy was here'
看看Python编程有多简单? 无论如何,如果我再次执行备份步骤,将会发生以下情况:
clh
@ vancouver:~
/ Test$
cp
--force
--backup =numbered test1.py test1.py
clh
@ vancouver:~
/ Test$
ls
test1.py test1.py.~
1 ~ test1.py.~
2 ~
clh
@ vancouver:~
/ Test$
现在我们有两个备份文件: test1.py。〜1〜(包含原始的单行程序)和test1.py。〜2〜(包含两行程序),我可以继续进行添加和测试一些更多的功能。
对我来说,这是一件有用的事情,我正在考虑使shell函数简化它。
总结三点
首先,默认情况下在大多数台式机和服务器发行版中安装的Linux手册页提供了详细信息,并提供了一些有用的示例命令,例如cp 。 在终端上,输入命令:
man cp
只是试图首先学习如何使用命令的用户,这样的解释可能是密集而晦涩的。 对于那些仍然坚持不懈的人,我建议创建一个测试目录和文件,并在那里尝试命令和选项。
其次,如果您对某个教程更感兴趣,则在您喜欢的搜索引擎中键入搜索字符串“ linux shell教程”,它将带来许多有趣且有用的资源。
第三,如果您想知道“为什么GUI通常只需单击即可轻松提供相同的功能?” 我有两个回应。 首先是“点击”并不总是那么容易,尤其是当它打乱另一个工作流程并需要很多点和很多点击才能使其正常工作时。 第二点是,通过使用Shell脚本,Shell函数和Shell别名,经常可以轻松地简化重复任务。
您是否以新颖或有趣的方式使用cp命令? 让我们在评论中了解它们。
翻译自: https://opensource.com/article/17/7/two-great-uses-cp-command
两台局域网服务器cp命令