Linux入门真经-013目录、文件、时间管理类命令

本节介绍两个目录管理类命令:mkdir、rmdir,五个文件管理类命令:cp、mv、rm、state、touch。两个时间相关的命令:date、hwclock。都是常用的常识级命令。

1、mkdir

我们在windows上存放文件的时候,会把他放在一个文件夹里,也会经常用到新建文件夹这一功能。在linux中,文件是存放在目录中的(目录也是一种特殊的文件),我们可以通过mkdir这一命令来新建目录。以下为mkdir常用语法及常用选项。

mkdir [OPTION]... DIRECTORY...

         -p:自动按需创建父目录;

         -v:verbose,显示详细过程;

         -mMODE:直接给定权限;

举例:我在/tmp下新建一个test目录,test目录下再新建一个sub_test目录,并显示创建过程:

mkdir -pv /tmp/test/sub_test

创建之前,sub_test还有一个母目录test没有创建,如果我们不用-p选项则会报错,-v则可以显示出显示出创建过程。

-m则可以指定目录权限,我们还没有讲到权限,后面讲解文件权限时大家就会明白他的作用。

2、rmdir

移除目录我们可以使用rmdir(rmdir只能移除空目录)

 rmdir[OPTION]... DIRECTORY...

         -p:删除某目录后,如果其父目录为空,则一并删除之;

         -v:显示过程;

我们可以使用-pv把/tmp/test和/tmp/test/sub_test一起删除,当然我们也可以分两步,先删除子目录,再删除母目录(再次强调rmdir只能删除空目录,若目录下有文件则会报错)

此处介绍一个技巧,此技巧也与bash特性有关:

在bash中,{}(一对大括号)可以承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;

如,我需要在/tmp下创建date_a、date_b、date_c三个子目录,在不知道这个特性之前,你可能需要执行三次mkdir命令,而了解此特性之后,你只需:

[root@localhost ~]# mkdir /tmp/date_{a,b,c}

通过ls命令,我们就能发现,目录成功创建:

3、复制文件:cp

复制单个文件:

cp [OPTION]...  SOURCE DEST

其中source表示源文件,dest表示目标文件(目录)

如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中;

如果DEST存在:

      如果DEST是非目录文件:则覆盖目标文件;

      如果DEST是目录文件:则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;

复制多个文件:
cp [OPTION]... SOURCE... DIRECTORY

如果目标目录不存在:错误;

如果目标存在:

         如果DIRECTORY是非目录文件:错误;

         如果DIRECTORY是目录文件:分别复制每个文件至目标目录中,并保持原名;

常用选项:

-i:交互式复制,即覆盖之前提醒用户确认;

-f:强制覆盖目标文件;

-r,-R:递归复制目录;

-d:复制符号链接文件本身,而非其指向的源文件;(什么是链接文件我们会在讲磁盘和文件系统时介绍)

4、移动文件:mv

可以理解为windows中剪切文件的效果。

mv [OPTION]... SOURCE... DIRECTORY

常用选项:

       -i:交互式;移动前向用户确认

       -f:force;非交互式,强制移动

5、删除文件:rm

rm [OPTION]... FILE...

常用选项:

       -i:interactive交互式,删除前确认

       -f:force强制删除

       -r: recursive递归删除(用于目录,较危险)

删除目录:rm -rf /PATH/TO/DIR

危险提示:rm -rf /*(这个操作是删根的,系统会直接挂掉且基本无法恢复。这条命令是业界常笑梗)

建议:所有不用的文件建议不要直接删除,而是移动至某个专用目录;(模拟回收站),过去一段时间,确认一定用不到了,再进行删除。

6、显示文件元数据:stat

一般而言,我们的文件有两类数据,分为元数据和数据:

数据:一般指的是文件中包含的二进制信息或者文本信息,如可配置的文件内容、二进制程序代码等等。

元数据:描述数据的数据,可以理解为一本书的前言、索引,它通常记录了文件的名称、大小、时间、权限等等。stat命令可查询文件的元数据

举例:

[root@localhost ~]# stat /bin/cat

 File: ‘/bin/cat’

 Size: 54080              Blocks: 112        IO Block: 4096   regular file

Device: fd00h/64768d     Inode: 50352176    Links:1

Access: (0755/-rwxr-xr-x)  Uid: (   0/    root)   Gid: (   0/    root)

Context: system_u:object_r:bin_t:s0

Access: 2018-08-03 21:59:41.429843508 -0400

Modify: 2018-04-11 00:35:02.000000000 -0400

Change: 2018-07-24 18:34:13.599916128 -0400

 Birth: -

此处需要我们重点关注的,是文件的三个时间:Access、Modify、Change

Access time(atime):文件内容被取用时,此时间戳将会更新。比如文本文件被读取,对应的此时间戳就会改变。

Modify time(mtime):文件内容被修改时(实际内容数据,不是指权限或者属性),此时间戳会改变。我们使用ls -l时,默认使用的是mtime。

Change time(ctime):文件的权限、大小等属性发生改变时(元数据发生改变),触发更新。

知道这几个时间有时候十分有用,比如骇客篡改了你的管理命令程序/文本文件,又忘记去改回这些时间(清理现场),这些信息就会提供一些线索。有时,文件时间不对也会导致某些程序无法顺利执行。

提到时间,此处顺便提一下关于系统时间的命令。

linux系统启动时,会从硬件读取日期和时间,读取完成之后,就不再与硬件时间相关联。

因此,系统中其实有两个时间概念:

一个是启动后的系统时钟,一个是硬件时钟。

7、系统时钟:date

显示日期时间:date[OPTION]... [+FORMAT]

FORMAT:格式符(详见man手册)

      %F:年-月-日格式,同%Y-%m-%d

      %T:时-分-秒

      %Y:年

      %m:月

      %d:日

      %H:时

      %M:分

      %S:秒

举例:

[root@localhost ~]# date +%F

2018-08-04

[root@localhost ~]# date +%T

02:20:23

[root@localhost ~]# date +%Y

2018

[root@localhost ~]# date +%m

08

[root@localhost ~]# date +%d

04

[root@localhost ~]# date +%H

02

[root@localhost ~]# date +%M

20

[root@localhost ~]# date +%S

48

[root@localhost ~]# date+%Y-%m-%d--%H:%M:%S

2018-08-04--02:21:53

[root@localhost ~]#

设定日期时间:date [MMDDhhmm[[CC]YY][.ss]]

其中MDhmCYs表示月、日、小时、分钟、世纪、年份、秒数(参考之前列出的FORMAT),出现两次表示连个占位符。(外国人的时间表述顺序和大天朝真是不一样)

注意:在集群/分布式环境中,许多应用对时间非常敏感,若要修改时间需要确认是否对业务产生影响。

举例:

将系统时间设置为2018年8月4日14点32分:

[root@localhost ~]# date

Sat Aug 4 02:30:22 EDT 2018

[root@localhost ~]# date 080414322018

Sat Aug 4 14:32:00 EDT 2018

[root@localhost ~]# date

Sat Aug 4 14:32:12 EDT 2018

[root@localhost ~]#

8、硬件时钟:hwclock、clock

显示或设定硬件时钟可以使用hwclock或clock

-s,--hctosys:以硬件为准,把系统调整为与硬件时间相同;

-w,--systohc:以系统为准,把硬件时间调整为与系统时钟相同;(重启生效)

如果hwclock –w重启后没有生效,则需要确认你的时区,如发现原本的时区在美国,把他调回中国,可以使用以下方式确认和更改。

[root@localhost ~]# ll /etc/localtime

lrwxrwxrwx. 1 root root 36 Aug  4 03:14 /etc/localtime ->/usr/share/zoneinfo/America/New_York

[root@localhost ~]# ln -sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime

[root@localhost ~]# ll /etc/localtime

lrwxrwxrwx. 1 root root 33 Aug  4 15:14 /etc/localtime ->/usr/share/zoneinfo/Asia/Shanghai

[root@localhost ~]#

8改变文件的时间戳:touch

默认情况下,touch后加文件会将文件的atime、mtime和ctime改变为现在的时间。若文件不存在,则会创建新文件。

 touch[OPTION]... FILE...

          -c:指定的文件路径不存在时不予创建;

          -a:仅修改access time(为当前时间);

          -m:仅修改modifytime(为当前时间);

          -t:修改为指定时间,格式:[[CC]YY]MMDDhhmm[.ss](看不懂格式的翻翻上面的date命令)

说了那么久的文件管理,你可能还不知道如何去编辑文本文件呢。下一节向你介绍各大发行版几乎都会默认支持的vi编辑器。

关注本公众号获取每日更新

猜你喜欢

转载自blog.csdn.net/syaziou/article/details/81737987