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命令,而了解此特性之后,你只需:
[[email protected] ~]# 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命令可查询文件的元数据
举例:
[[email protected] ~]# 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:秒
举例:
[[email protected] ~]# date +%F
2018-08-04
[[email protected] ~]# date +%T
02:20:23
[[email protected] ~]# date +%Y
2018
[[email protected] ~]# date +%m
08
[[email protected] ~]# date +%d
04
[[email protected] ~]# date +%H
02
[[email protected] ~]# date +%M
20
[[email protected] ~]# date +%S
48
[[email protected] ~]# date+%Y-%m-%d--%H:%M:%S
2018-08-04--02:21:53
[[email protected] ~]#
设定日期时间:date [MMDDhhmm[[CC]YY][.ss]]
其中MDhmCYs表示月、日、小时、分钟、世纪、年份、秒数(参考之前列出的FORMAT),出现两次表示连个占位符。(外国人的时间表述顺序和大天朝真是不一样)
注意:在集群/分布式环境中,许多应用对时间非常敏感,若要修改时间需要确认是否对业务产生影响。
举例:
将系统时间设置为2018年8月4日14点32分:
[[email protected] ~]# date
Sat Aug 4 02:30:22 EDT 2018
[[email protected] ~]# date 080414322018
Sat Aug 4 14:32:00 EDT 2018
[[email protected] ~]# date
Sat Aug 4 14:32:12 EDT 2018
[[email protected] ~]#
8、硬件时钟:hwclock、clock
显示或设定硬件时钟可以使用hwclock或clock
-s,--hctosys:以硬件为准,把系统调整为与硬件时间相同;
-w,--systohc:以系统为准,把硬件时间调整为与系统时钟相同;(重启生效)
如果hwclock –w重启后没有生效,则需要确认你的时区,如发现原本的时区在美国,把他调回中国,可以使用以下方式确认和更改。
[[email protected] ~]# ll /etc/localtime
lrwxrwxrwx. 1 root root 36 Aug 4 03:14 /etc/localtime ->/usr/share/zoneinfo/America/New_York
[[email protected] ~]# ln -sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[[email protected] ~]# ll /etc/localtime
lrwxrwxrwx. 1 root root 33 Aug 4 15:14 /etc/localtime ->/usr/share/zoneinfo/Asia/Shanghai
[[email protected] ~]#
8改变文件的时间戳:touch
默认情况下,touch后加文件会将文件的atime、mtime和ctime改变为现在的时间。若文件不存在,则会创建新文件。
touch[OPTION]... FILE...
-c:指定的文件路径不存在时不予创建;
-a:仅修改access time(为当前时间);
-m:仅修改modifytime(为当前时间);
-t:修改为指定时间,格式:[[CC]YY]MMDDhhmm[.ss](看不懂格式的翻翻上面的date命令)
说了那么久的文件管理,你可能还不知道如何去编辑文本文件呢。下一节向你介绍各大发行版几乎都会默认支持的vi编辑器。
关注本公众号获取每日更新