一.学习的内容
本次主要学习Linux系统日常运维工作中最常用的命令,实现对文件的创建、复制、剪切、更名、删除等操作。
1、touch
touch命令用于创建普通空白文件或设置文件时间信息。命令格式:touch [参数] 文件名称
touch命令的参数及其作用如下表所示:
参数 | 作用 |
-a | 更新Atime |
-m | 更新Mtime |
-d | 同时修改Atime和Mtime |
如下图所示,分别使用 stat 命令和 ls 命令查看 anaconda-ks.cfg 文件的修改时间(红线),两者输出的结果是一致的。之后,再使用 echo 命令往 anaconda-ks.cfg 文件内写入数据;最后再使用 stat 命令 或者 ls命令 查看文件最后一次修改时间;最终,通过上下对比可以发现,输出的是最新的一次修改时间。此外,还学习到了如何将数据写入文件。
![](https://i-blog.csdnimg.cn/blog_migrate/802c7397b98b1b675c0d47d47544cb67.png)
如图2所示,使用cat 命令查看 anaconda-ks.cfg 文件,输出结果中有我们刚才输入的数据(绿线)。之后再执行 stat 命令,输出结果中的 Atime 也变成了刚刚访问时的时间。由此可见,Atime确实被设置成了 relatime ,只有当 Atime 超前于 Mtime时,再次访问文件,它才会更新。
![](https://i-blog.csdnimg.cn/blog_migrate/846799a01a95b022583e0f116fdc2926.png)
如下图所示,使用 -d 参数,同时修改 anaconda-ks.cfg 文件的Atime和Mtime,结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/fa9d9adc8f3948d72c38e2498b67cbc9.png)
从结果中可以发现,Atime和Mtime都被修改成了指定时间。而Ctime更新为执行 touch -d 命令时的时间(这是因为文件的时间属性被修改了)。
使用 -m 参数更新 Mtime,同时Ctime时间也更新,理由和上述一样。
![](https://i-blog.csdnimg.cn/blog_migrate/a38aed46d89a82c0c773c6f6c3eece3c.png)
使用 -a 参数更新Atime,同时Ctime时间也会更新。
![](https://i-blog.csdnimg.cn/blog_migrate/d4b81ac974b5c7470f313ea3fa253721.png)
下面使用 touch 命令,去创建一个普通文件:
![](https://i-blog.csdnimg.cn/blog_migrate/9cd15ef41917911d49be796c5523046d.png)
如上图所示,使用 touch 命令创建了一个普通文件 touch.test 。
2、mkdir
mkdir命令用于创建空白目录文件。命令格式为:mkdir [参数] 文件名称
除了能创建单个空白目录外,mkdir 命令还可以结合 -p 参数来创建出具有嵌套层叠关系的文件目录。如下图所示,先创建个空白目录文件 mkdir.test ,然后再使用 -p 参数,在刚才的目录内创建 test1/test2目录文件。
![](https://i-blog.csdnimg.cn/blog_migrate/b9456f719c844b20533d006ceca821e6.png)
使用 tree 命令查看刚才创建的目录文件,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/1f8ad32288bfafcdc40e8539b7a4aa5f.png)
3、cp
cp命令用于复制文件或目录。命令格式:cp [参数] 源文件名称 目标文件名称
cp命令的参数及其作用如下表2所示:
参数 | 作用 |
-p | 保留文件原始属性 |
-d | 若对象为链接文件,则保留该链接文件的属性 |
-r | 递归持续复制 |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于 -pdr |
在Linux系统中,复制操作具体分为3种情况:
如果目标文件时目录,则会把源文件复制到该目录中;
如果目标文件也是普通文件,则会询问是否要覆盖它;(源文件也只能是普通文件)
如果目标文件不存在,则执行正常的复制操作(目源文件内部结构和内容都一样,只是最外层文件名不同)
值得注意的是,在复制目录时要加上 -r 参数。
如下图所示,当目标文件是目录(Desktop)时,使用 cp 命令,分别把 touch.test 普通文件和 cp.test 目录文件复制到 Desktop 目录中。
![](https://i-blog.csdnimg.cn/blog_migrate/76811f900bac22ab118bd9c93b7053fe.png)
当目标文件时普通文件时,如下图所示,将 cp.test 目录下的 x.log 普通文件,复制到 touch.test 普通文件中,会询问是否覆盖掉源文件的内容。
![](https://i-blog.csdnimg.cn/blog_migrate/215d4db37cb181c060c1015de65eda49.png)
当目标文件不存在时,如下图所示。首先使用 ls 命令查看,并没有 cp.testA 这个文件;然后使用 cp -r cp.test cp.testA 命令,将源文件复制到 cp.testA 中;最后,通过 cd 命令 不难发现,cp.testA文件 已经被创建了。
![](https://i-blog.csdnimg.cn/blog_migrate/fd87c2df35cc2bfea77db26fb80af86b.png)
比较一下,目标目录文件存在和不存在时,把一个目录复制进去的不同(上面是目录文件不存在,下面是目录文件存在)。不难发现,目标目录不存在时,就相当于把源目录的最外层名字换掉,其他都不变;而目标目录存在时,直接把源目录复制到目标目录下。
![](https://i-blog.csdnimg.cn/blog_migrate/75fc544c38e57f886a93a852d4fb5baf.png)
4、mv
mv命令用于剪切文件或重命名文件。命令格式:mv [参数] 源文件名称 目标文件名称
剪切操作不同于复制操作的地方是,它会默认把源文件删除,只保留剪切后的文件。如果在一个目录中将某个文件剪切后还粘贴到当前目录下,其实也就是对该文件进行了重命名。
mv命令和cp命令有很大的相似度,如下面这些图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/7dfe6fe99bec6aef16abadace298990b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cb06eb81536a312b59f45ed3d77d598c.png)
上面两幅图展现了当目标文件为目录时,执行mv 命令后的输出结果,不难看出它和cp 命令没有太多的区别,只是会删掉源文件且剪切目录时不用 -r 参数。
![](https://i-blog.csdnimg.cn/blog_migrate/f71848c67be56496a0dbfe19959c7264.png)
上图表明了,当目标文件也是普通文件时,执行 mv 命令的输出,也和cp 命令一样,会询问是否覆盖,除此之外源文件被删除了。
![](https://i-blog.csdnimg.cn/blog_migrate/2b2e4d7ec484ebe5e4f06c8821949129.png)
图16表明了,在无目标文件时,执行 mv 命令的输出。可以看到,也是把源文件名字更换了一下,然后放到你想放的路径下。(源文件被删除)
![](https://i-blog.csdnimg.cn/blog_migrate/f4b332f2f9ba1b0ec5010ea0a0372efc.png)
上图展现了对一个文件重命名的操作,这正是借用了 mv 命令会删除源文件这一特性 以及 无目标文件时的剪切操作。
5、rm
rm命令用于删除文件或目录。命令格式:rm [参数] 文件名称
参数 | 作用 |
-r | 删除目录 |
-f | 强制执行 |
-i | 删除前询问 |
-v | 显示过程 |
在Linux系统中删除文件时,系统会默认向您询问是否要执行删除操作,如果不想总是看到这种反复的确认信息,可在 rm 命令后加 -f 参数来强制删除。另外,要想删除一个目录,需要在 rm命令后加一个 -r 参数才可以,否则删除不掉。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/81a3a29938dee17430dd69cf44b7deb9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e52e3147f9f7f8099a68c07a2f5c1133.png)
6、dd
dd命令用于按照指定大小和个数的数据块来复制文件或转换文件。
命令格式:dd if=文件名称 of=文件名称 count=参数值 bs=参数值
dd命令的参数及其作用,如下表所示:
参数 | 作用 |
if | 输入的文件名称 |
of | 输出的文件名称 |
count | 设置要复制“块”的个数 |
bs | 设置每个“块”的大小 |
关于count和bs,举个例子:小明想要盛一碗饭,则勺子大小(bs)和 用勺子盛饭的次数(count)之间会进行平衡 。由此可见 ,只要能满足需求,可随意搭配组合方式。
7、file
file命令用于查看文件的类型。命令格式:file 文件名称
在Linux系统中一切皆文件,但是它们又不像Windows系统那样有后缀,因此很难通过文件名一眼判断出具体的文件类型,这是就需要使用file 命令来查看了。
如下图所示,分别查看 Music、anaconda-ks.cfg和 touch.test 文件。其中,新创建的touch.test 文件显示为空。
![](https://i-blog.csdnimg.cn/blog_migrate/01e58f3c480ee8726bb0d27a049908b4.png)
使用echo 命令向刚才的空文件写入数据,再次查看文件类型,输出为 ASCII text 。
![](https://i-blog.csdnimg.cn/blog_migrate/184130fba75f7ffdead90385ce20d438.png)
8、tar
tar 命令用于压缩或解压文件。命令格式:tar [参数] 文件名称
tar命令的参数及其作用如下表所示:
参数 | 作用 |
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-z | 用gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压过程 |
-f | 目标文件名 |
-C | 指定解压到的目录 |
使用 "tar czvf etc.tar.gz /etc " 命令将 /etc 文件压缩成文件名为 etc.tar.gz的文件,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2cad944f7885dca24095b9fe7d06c46f.png)
如下图所示,使用 ls 命令 查看刚才压缩过的文件,然后再使用 " tar xzvf etc.tar.gz -C ect"命令,该命令的意思是:将当前目录下的 etc.tar.gz 文件,解压到当前目录下的 ect 文件中(先使用 mkdir 命令创建一个 /root/etc 目录):
![](https://i-blog.csdnimg.cn/blog_migrate/9151566aecae2ab9ec04920546e20665.png)
二.本次学习遇到的问题
三、问题的答案及解决办法
补:
1、touch命令的-a和-m参数后面不能直接跟随指定的时间。这两个参数用于更新文件的访问时间(atime)和修改时间(mtime),而不是设置特定的时间。要设置特定的时间戳,你可以使用-d参数,该参数允许你指定一个日期时间来设置文件的访问时间和修改时间。
2、目录是一种特殊类型的文件,它们用于存储其他文件和目录。文件系统中的所有数据都存储在文件中,无论是用户创建的文档、应用程序文件还是系统配置文件,都是文件系统中的文件。目录则是用来组织和管理这些文件的结构化方式。
3、wc命令的 -w 参数 空格是字符的分隔符。