首页 > 系统相关 >Linux基础04-Linux中目录和文件都能操作的命令

Linux基础04-Linux中目录和文件都能操作的命令

时间:2024-05-08 09:59:57浏览次数:21  
标签:tmp 文件 node01 04 root cxykk Linux com 目录

前面两节我们分别学习了目录操作命令和文件操作命令,那么有没有一些既可以操作目录,又可以操作文件的命令呢?
这样我们就不需要记住两套命令了。
其实还真有,今天这一章就带大家学习Linux中目录和文件都能操作的命令

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

4.1 rm命令

  • 命令名称:rm
  • 英文原意:remove files or directories
  • 所在路径:/bin/rm
  • 执行权限:所有用户
  • 功能描述:删除文件或目录

1、命令格式

    [root@node01 ~]# rm [选项] 文件或目录
    选项:
        -f:    强制删除(force)
        -i:    交互删除,在删除之前会询问用户
        -r:    递归删除,可以删除目录(recursive)

2、常见用法

例子1:基本用法

rm命令如果任何选项都不加,则默认执行的是“rm -i文件名”。
也就是在删除一个文件之前会先询问是否删除。
例如:

[root@node01 ~]# touch cxykk.com
[root@node01 ~]# ll
total 40
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 Apr 29 22:47 cxykk.com
...省略
[root@node01 ~]# rm cxykk.com
rm: remove regular empty file ‘cxykk.com’? y
[root@node01 ~]# 

例子2:删除目录

如果需要删除目录,则需要使用“-r”选项。例如:

#递归建立测试目录
[root@node01 ~]#  mkdir -p /test/cxykk.com/movie/
#默认不加“-r”选项删除
[root@node01 test]# rm /test/
#无法删除
rm: cannot remove ‘/test/’: Is a directory
[root@node01 test]# rm -r /test/
rm: descend into directory ‘/test/’? y
rm: descend into directory ‘/test/cxykk.com’? y
rm: remove directory ‘/test/cxykk.com/movie’? y
rm: remove directory ‘/test/cxykk.com’? y
rm: remove directory ‘/test/’? y
[root@node01 test]# 

大家会发现,如果每级目录和每个文件都需要确认,那么在实际使用中简直是灾难!
那有没有命令可以不用确认直接删除呢?

那当然有了,不然linux运维人员不是苦逼死了

例子3:强制删除

如果要删除的目录中有1万个子目录或子文件,那么普通的rm删除最少需要确认1万次。
所以,在真正删除文件的时候,我们会选择强制删除。例如:

[root@node01 test]# mkdir -p /test/cxykk.com/movie
[root@node01 test]# rm -rf /test/
[root@node01 test]# cd /test
-bash: cd: /test: No such file or directory
[root@node01 test]# 

加入了强制功能之后,删除就会变得很简单,但是需要注意:
1、数据强制删除之后无法恢复,除非依赖第三方的数据恢复工具,如extundelete等。

但要注意,数据恢复很难恢复完整的数据,一般能恢复70%~80%就很难得了。
所以,与其把宝压在数据恢复上,不如养成良好的操作习惯。

2、虽然“-rf”选项是用来删除目录的,但是删除文件也不会报错。

所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用“-rf”选项。

4.2 cp命令

在windows中,我们如果想要复制文件,直接Ctrl+C就可以了,非常简单快捷。
但是在Linux这种非图形化界面中,想要复制文件就没有那么方便了。
这时候就要借助我们的“cp”命令了,“cp”可以理解为copy的缩写。
cp的基本信息如下:

  • 命令名称:cp
  • 英文原意:copy files and directories
  • 所在路径:/bin/cp
  • 执行权限:所有用户
  • 功能描述:复制文件和目录

1、命令格式

    [root@node01 ~]# cp [选项] 源文件 目标文件
    选项:
        -a:    相当于-dpr选项的集合,这几个选项我们一一介绍
        -d:    如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
        -i:    询问,如果目标文件已经存在,则会询问是否覆盖
        -l:    把目标文件建立为源文件的硬链接文件,而不是复制源文件
        -s:    把目标文件建立为源文件的软链接文件,而不是复制源文件
        -p:    复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
        -r:    递归复制,用于复制目录

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

2、常见用法

例子1:基本用法

cp命令不仅可以复制文件,还可以复制目录。我们先来看看如何复制文件,例如:

[root@node01 ~]# touch cxykk.com
[root@node01 ~]# ll
total 40
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 Apr 29 23:03 cxykk.com
...省略
[root@node01 ~]# cp cxykk.com /tmp/
#我的/tmp/因为已经存在了cxykk.com文件,所以询问我是否覆盖
cp: overwrite ‘/tmp/cxykk.com’? y
[root@node01 ~]# 

有的同学说,如果我复制文件的时候,想要给他改个名字,可以改吗?

当然可以

如果需要改名复制,则命令如下:

#复制cxykk.com文件到/tmp/目录下,且重命名为www.cxykk.com
[root@node01 ~]# cp cxykk.com /tmp/www.cxykk.com
[root@node01 ~]# cd /tmp/
[root@node01 tmp]# ll
total 4
-rw-r--r-- 1 nobody root  0 Apr 29 23:03 cxykk.com
lrwxrwxrwx 1 root   root 15 Apr 21 11:18 soft-link-new -> /root/soft-link
lrwxrwxrwx 1 root   root 15 Apr 21 11:11 soft_link_test -> /root/soft_link
-rw-r--r-- 1 root   root 15 Apr 21 10:17 test_hard
drwx------ 2 root   root  6 Apr 29 22:42 vmware-root_6388-994818425
-rw-r--r-- 1 root   root  0 Apr 29 23:09 www.cxykk.com
#可以看到/tmp/目录下已经有我们复制的www.cxykk.com文件了
[root@node01 tmp]# 

接下来我们看看如何复制目录,其实复制目录非常简单,我们只需在复制文件的命令后加上“-r”选项即可,例如:

[root@node01 ~]# mkdir -p cxykk.com
[root@node01 ~]# ll
total 40
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
drwxr-xr-x  2 root root     6 Apr 29 23:18 cxykk.com
省略...
[root@node01 ~]# cp -r /root/cxykk.com/ /tmp/
cp: cannot overwrite non-directory ‘/tmp/cxykk.com’ with directory ‘/root/cxykk.com/’
#因为我已经存在一个相同目录,所以先删除
[root@node01 ~]# rm -r /tmp/cxykk.com 
rm: remove regular empty file ‘/tmp/cxykk.com’? y
[root@node01 ~]# cp -r /root/cxykk.com/ /tmp/
[root@node01 ~]# cd /tmp/
[root@node01 tmp]# ll
total 4
#可以看到已经复制成功
drwxr-xr-x 2 root root  6 Apr 29 23:20 cxykk.com
lrwxrwxrwx 1 root root 15 Apr 21 11:18 soft-link-new -> /root/soft-link
省略...
[root@node01 tmp]# 

例子2:复制软链接

如果源文件不是一个普通文件,而是一个软链接文件,那么是否可以复制软链接的属性呢?
下面带大家一起来试试:

实践是检验真理的唯一标准

#建立一个测试软链接文件,如果已存在,请先使用rm -rf xxx删除
[root@node01 ~]# touch /root/cxykk.com
[root@node01 ~]# ln -s /root/cxykk.com /tmp/cxykk.com_slink
[root@node01 ~]# ll /tmp/cxykk.com_slink 
lrwxrwxrwx 1 root root 15 May  6 22:37 /tmp/cxykk.com_slink -> /root/cxykk.com
#复制软链接文件,但是不加“-d”选项参数
[root@node01 ~]# cp /tmp/cxykk.com_slink /tmp/cxykk.com_slink2
[root@node01 ~]# ll /tmp/cxykk.com_slink2
-rw-r--r-- 1 root root 0 May  6 22:40 /tmp/cxykk.com_slink2
#复制软链接文件,加“-d”选项参数
[root@node01 ~]# cp -d /tmp/cxykk.com_slink /tmp/cxykk.com_slink3
[root@node01 ~]# ll /tmp/cxykk.com_slink3
lrwxrwxrwx 1 root root 15 May  6 22:41 /tmp/cxykk.com_slink3 -> /root/cxykk.com
[root@node01 ~]# 

这个例子说明
如果在复制软链接文件时不使用“-d”选项,则cp命令复制的是源文件,而不是软链接文件;
只有加入了“-d”选项,才会复制软链接文件。请大家注意,“-d”选项对硬链接是无效的。:

例子3:保留源文件属性复制

在上面的例子中,细心的同学可能会发现,在执行复制命令后,目标文件的时间会变成复制命令的执行时间,而不是源文件的时间。
例如:

#复制软链接文件,加“-d”选项参数
[root@node01 ~]# cp -d /tmp/cxykk.com_slink /tmp/cxykk.com_slink3
[root@node01 ~]# ll /tmp/cxykk.com_slink3
#注意源文件的所属组和时间
#由于复制命令由root执行,所以目标文件的所属组也变成了root,而且时间变成了复制命令的时间
lrwxrwxrwx 1 root root 15 May  6 22:41 /tmp/cxykk.com_slink3 -> /root/cxykk.com

但是,当我们在执行一些特殊复制场景时,文件的时间可能是一个重要的参数,我们希望在复制的时候,能够保留源文件的属性复制,那么该怎么办呢?
办法当然也是有的, 这就需要“-p”选项参数上场了。
这个选项会保留源文件的属性,包括所有者、所属组和时间。
例如:

[root@node01 ~]# cp -p /root/cxykk.com /tmp/cxykk.com_p
[root@node01 ~]# ll /tmp/cxykk.com_p
#复制出来的文件所属组和执行时间都保留了源文件的属性
-rw-r--r-- 1 root root 0 May  6 22:35 /tmp/cxykk.com_p
[root@node01 ~]# 

我们之前讲过,“-a”选项相当于“-dpr”选项,这几个选项我们已经分别讲过了。
所以,当我们使用“-a”选项时,目标文件和源文件的所有属性都一致,包括源文件的所有者、所属组、时间和软链接属性。

所以,使用“-a”选项来取代“-dpr”选项更加方便

例子4:“-l”和“-s”选项

  • -l: 把目标文件建立为源文件的硬链接文件,而不是复制源文件
  • -s: 把目标文件建立为源文件的软链接文件,而不是复制源文件

这两个选项和“-d”选项是不同的,“-d”选项要求源文件必须是软链接,目标文件才会复制为软链接;
而“-l”和“-s”选项的源文件只需是普通文件,目标文件就可以直接复制为硬链接和软链接。
例如:

#查看cxykk.com文件,测试文件
[root@node01 ~]# ll /root/cxykk.com 
#使用“-l”选项,将目标文件复制为硬链接
[root@node01 ~]# cp /root/cxykk.com /tmp/cxykk.com_ll
#查看复制后的文件,为硬链接文件
[root@node01 ~]# ll /tmp/cxykk.com_ll
-rw-r--r-- 1 root root 0 May  6 22:58 /tmp/cxykk.com_ll
#使用“-s”选项,将目标文件复制为软链接文件
[root@node01 ~]# cp -s /root/cxykk.com /tmp/cxykk.com_ss
#查看复制后的文件,为软链接文件
[root@node01 ~]# ll /tmp/cxykk.com_ss
lrwxrwxrwx 1 root root 15 May  6 22:59 /tmp/cxykk.com_ss -> /root/cxykk.com
[root@node01 ~]# 

4.3 mv命令

1、基本信息

mv是用来剪切的命令,其基本信息如下:

  • 命令名称:mv
  • 英文原意:move (rename) files
  • 所在路径:/bin/mv
  • 执行权限:所有用户
  • 功能描述:移动文件或改名

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

2、命令格式

[root@node01 ~]# mv [选项] 源文件 目标文件
选项:
    -f:    强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
    -i:    交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
    -n:    如果目标文件已经存在,则不会覆盖移动,而且不询问用户
    -v:    显示详细信息

3、常见用法

例子1:移动文件或目录

#创建mv命令测试文件
[root@node01 ~]# touch cxykk.com_mv
[root@node01 ~]# ll
------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 May  6 22:35 cxykk.com
-rw-r--r--  1 root root     0 May  6 23:07 cxykk.com_mv
......省略
#移动/root/cxykk.com_mv到/tmp/目录下,且源文件会删除,类似于剪切
[root@node01 ~]# mv cxykk.com_mv /tmp
[root@node01 ~]# ll /tmp/
total 0
-rw-r--r-- 1 root root  0 May  6 22:58 cxykk.com_ll
-rw-r--r-- 1 root root  0 May  6 23:07 cxykk.com_mv
......省略
#查看源文件~当前目录下,已经没有cxykk.com_mv文件了
[root@node01 ~]# ll
total 40
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 May  6 22:35 cxykk.com
drwxr-xr-x  2 root root     6 Oct 25  2023 etc
......省略
You have new mail in /var/spool/mail/root
[root@node01 ~]# 

例子2:强制移动

在windows移动文件时,是不是经常遇到下面这种提示,每次都需要我们手动点击确认才能完成移动
image.png
在Linux系统中,默认移动文件如果存在相同名称的文件,也会提示是否覆盖。
例如:

#在/tmp目录下创建一个与/root目录下同名的文件
[root@node01 ~]# touch /tmp/cxykk.com
[root@node01 ~]# ll /tmp
total 0
-rw-r--r-- 1 root root  0 May  6 23:15 cxykk.com
-rw-r--r-- 1 root root  0 May  6 22:58 cxykk.com_ll
......省略
#移动~目录下的cxykk.com文件到/tmp目录下
[root@node01 ~]# mv cxykk.com /tmp/
#询问是否覆盖,输入y覆盖,输入n不覆盖
mv: overwrite ‘/tmp/cxykk.com’? y
[root@node01 ~]# 

这时如果移动的同名文件较多,则需要一个一个文件进行确认,很不方便。

如果我们确认需要覆盖已经存在的同名文件,不想一个一个确认该怎么办呢?

那就可以使用“-f”选项参数了

-f: 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖

#在家目录下重新创建cxykk.com同名文件
[root@node01 ~]# touch cxykk.com
[root@node01 ~]# ll
total 40
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 May  6 23:20 cxykk.com
......省略
#强制覆盖移动,可以看到没有询问是否覆盖,直接覆盖成功
[root@node01 ~]# mv -f cxykk.com /tmp/
[root@node01 ~]# 

例子3:不覆盖移动

既然可以强制覆盖移动,那也有需要不覆盖的移动场景。
如果需要移动几百个同名文件,但是不想覆盖,这时就需要“-n”选项的帮助了。
例如:

#在家目录下建立测试文件cxykk.com、cxykk.com_nn
[root@node01 ~]# touch cxykk.com_nn
[root@node01 ~]# touch cxykk.com
[root@node01 ~]# ll
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 May  6 23:24 cxykk.com
-rw-r--r--  1 root root     0 May  6 23:24 cxykk.com_nn
......省略
#移动家目录下cxykk.com、cxykk.com_nn到/tmp目录下
[root@node01 ~]# mv -vn cxykk.com cxykk.com_nn /tmp/
#从移动详情中可以看出,只移动了cxykk.com_nn文件,cxykk.com并没有移动
#因为cxykk.com文件在/tmp目录下已经存在了
#“-v”选项输出详细移动信息
‘cxykk.com_nn’ -> ‘/tmp/cxykk.com_nn’
[root@node01 ~]# 

补充知识:
如果想要看到详细移动日志,可以加上“-v”选项参数

例子4:改名

我们上面都是从一个目录移动到另一个目录中,如果将一个文件在同一个目录下移动会怎么样呢?
下面我们来实践一下看看

#查看家目录下cxykk.com文件
[root@node01 ~]# ll
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
-rw-r--r--  1 root root     0 May  6 23:24 cxykk.com
......省略
#在同一个目录下移动
[root@node01 ~]# mv cxykk.com cxykk.com_new
[root@node01 ~]# ll
-rw-------. 1 root root  1230 Apr 18 23:23 anaconda-ks.cfg
#可以看到cxykk.com文件不在了,变成了cxykk.com_new文件了
-rw-r--r--  1 root root     0 May  6 23:24 cxykk.com_new
drwxr-xr-x  2 root root     6 Oct 25  2023 etc
......省略
[root@node01 ~]# 

看到这里明白了吧,如果源文件和目标文件在同一个目录中,那就是改名。
所以以后在linux如果想要把一个文件改名字,知道怎么操作了吧

本文总结

目录和文件都能操作的命令是我们在日常运维中比较常用的,所以是大家重点要掌握的。

毕竟记住一个命令可以干两件事

在这里也给大家提一个小的建议,不要只看,要亲自动手实践操作感受一遍,并且运用一定的记忆技巧来记住这些命令。

比如mv命令,大家可以想到move(移动)这个单词。其他很多命令都有类似的技巧。

切勿眼高手低。我们要做到我要么不学,一旦开始学了,我就学透它,不然时间也浪费了,还没有收获

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。
这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

标签:tmp,文件,node01,04,root,cxykk,Linux,com,目录
From: https://www.cnblogs.com/jiang-xiao-bei/p/18179004

相关文章

  • Linux基础03-Linux文件操作命令
    其实啊,说起计算机操作,大部分情况下就是“增删改查”这四个大字儿,文件操作也是这么回事儿。就是改文件的时候得用点专门的编辑器,比如那个Vim。不过Vim这东西,真心不是一两句话就能给你讲清楚的,咱们在后续的章节再好好说道说道。现在学文件操作命令的时候,如果得改文件内容,咱们就先......
  • 在Linux中,如何使用Puppet进行配置管理?
    Puppet是一个开源的配置管理工具,用于自动化地管理大量服务器的配置。它使用一个集中式的服务器,称为Puppetmaster,以及安装在每个被管理服务器上的代理,称为Puppetagent。以下是在Linux中使用Puppet进行配置管理的基本步骤:1.安装Puppet安装PuppetServer(Master):选择一台服......
  • 在Linux中,如何监控系统性能?
    在Linux中,监控系统性能是确保系统稳定运行和高效利用资源的关键步骤。以下是一些详细的方法来监控系统性能:1.使用系统监控命令top命令:这是一个实时查看系统资源使用情况的命令,包括CPU、内存、磁盘和网络等。通过top命令,你可以快速了解当前系统的负载情况和各个进程的资源占用......
  • 在Linux中,什么是CI/CD,并且如何在Linux中实现它。
    CI/CD代表持续集成(ContinuousIntegration)和持续部署(ContinuousDelivery)/持续部署(ContinuousDeployment),是现代软件开发中的一套最佳实践,旨在加速软件开发流程,提高软件质量和团队生产力。1.什么是CI/CD?CI/CD是持续集成(ContinuousIntegration)和持续部署(ContinuousDeployment)......
  • 在Linux中,如何进行系统性能优化?
    在Linux系统中进行性能优化是一个综合性的过程,涉及多个层面,包括但不限于CPU、内存、磁盘I/O、网络以及应用程序本身的优化。以下是一些基本步骤和策略:1.识别性能瓶颈监控工具:首先使用诸如top、htop、vmstat、iostat、netstat、sar等工具来监视系统的实时状态,识别出CPU、内存、......
  • 在Linux中,如何使用perf和DTrace进行性能分析。
    perf和DTrace是两个强大的工具,它们用于Linux系统的性能分析和故障排除。下面将分别介绍如何在Linux中使用这两个工具。1.使用perf进行性能分析perf是Linux内核的一个性能分析工具,它提供了对系统调用、内核函数和硬件性能计数器的深入洞察。以下是使用perf的一些基本步骤:安装......
  • Linux脚本——打印口算题
    #!/bin/bashfunctionprint_random(){#forkin{1..10};#do#echo-e"$k\t$RANDOM"#donemin=$1max=$(($2-$min+1))num=$(date+%s%N)echo$(($num%$max+$min))#if[$?];then#return0......
  • linux系统内置函数
    一、read-t限制时间,单位秒,到时间后不输入直接中断会话-q提示信息read-t10-p"请输入您的数据"message(接受数据的参数)echo$message二、basename获取文件(文件夹名称),获取路径的尾端名称,相当于file.getName()三、dirname获取文件的文件夹的路径(不要路径的尾端)四、......
  • Linux系统硬链接和软链接具体实例
    Linux系统硬链接和软链接具体实例目录Linux系统硬链接和软链接具体实例创建链接命令目录与链接目录文件在Linux中,元数据中的inode号(inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系......
  • Linux内核的5大作用(转
    Linux内核的五大作用;分别是管理进程,内存,文件系统,设备控制,还有网络管理。管理进程:内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出),不同进程间通讯(通过信号,管道,或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。另外,调度器,控制进程如何共享CPU......