文件操作

现在,我们将在自己的工程目录下继续探索。本项目的工程目录为 ~/guide

创建文件

使用 touch 命令创建文件

$ touch helloword.cpp

执行 ls 命令, 可以看到刚才新建的文件

$ ls
touch

复制文件

使用 cp 命令复制文件 (copy),其中第一个参数为已经存在的文件,第二个参数为复制出来的文件的文件名或路径。

$ cp helloworld.cpp hiworld.cpp
# Same to: cp helloworld.cpp ./hiworld.cpp
$ mkdir folder
$ cp helloworld.cpp folder/another_world.cpp

移动和重命名文件

使用 mv 命令移动文件 (move)

$ mv hiworld.cpp tmp
# same to: mv hiworld folder/hiworld.cpp

运行 tree 命令查看结果

tree 结果

可以注意到,hiworld.cpp 被移动到目录 folder 中了。

实际上,mv命令的功能不只是移动,它还可以重命名。按照某些命名规范,helloworld.cpp 这个文件其实是不规范的,因为把单词连起来不利于阅读,我们可以使用mv命令对其重命名

$ mv helloworld.cpp hello_world.cpp

再次运行,会发现helloworld.cpp不见了,取而代之的是hello_world.cpp

那么有小伙伴们可能会问了,Linux 下命令那么多,我哪里知道mv还有这种用法啊(等到大二上的 PA 会告诉你 STFM(Search The Fucking Manual))。其实 linux 下还有个很有用的功能,叫做man(manual)

$ man mv

可以看到如下结果。只要能看到英文,很多时候一些命令的用法就会无师自通,是一个很强的工具。键入q即可退出。

删除文件

实际上,mvcp 以及接下来要提到的 rm 命令,不止可以针对文件,也可以针对目录。

删除之前,我们首先复制一下folder文件夹,然后就会发现系统报错 QAQ(不报点错还真的对不起秃掉的头)

$ cp folder folder_bak
cp: -r not specified; omitting directory 'folder'

这个报错的意思其实是说,要加上 -r 参数(Recursive)。什么意思呢?查阅手册

man cp

可以看到其实就是递归(递归可不止应用在汉诺塔和斐波那契)复制的意思。

mv 手册

于是输入如下命令,即可成功复制,然后就可以愉快地删除了。

cp -r folder folder_bak

使用 rm 命令删除文件, 输入 y 后回车确认删除

rm folder/hiworld.cpp

使用 tree 或者 ls 命令,可以看到rm folder/hiworld.cpp的确已经被删了。接下来我们大胆些,删除fold_bak目录,你可以尝试自己寻找合适的指令。

rm -rf folder
# -f: 不询问直接删除

[!Danger|style:flat|label:"rm -rf"]

  • rm -rf 是个危险的指令!加上 -f 后,获得了省去了确认的便利,但是一旦选错目标,后果不堪设想!rm 命令删除的文件不能在回收站找回,一旦错删文件,后悔莫及!而 rm -rf / 更是传说中的“删库跑路”指令。

  • 这提醒我们

    1. 谨慎使用 rm -f,删除前确认删除文件/文件夹正确
    2. 做好重要文件备份以免丢失
      1. 做好用户权限管理,以免删除重要系统文件
      2. 使用安全的删除操作,比如移动到回收站,或使用 trash-cli 等删除工具
© CC BY-NC 4.0            Last Modified: 2021-09-16 03:35:48

results matching ""

    No results matching ""