一、Linux发行版的系统目录名称命名规则及用途(以CentOS7为例);
Linux最重要的哲学思想是“一切皆文件”。Linux将一切资源都归结为文件,那么也必然将一切资源都纳到一个完整的目录树的文件系统结构中。
1、文件系统结构;
通过tree命令查看 / 目录下的子目录结构(data和apps目录是新建目录)。
[root@localhost ~]# tree -L 1 /
/
├── apps
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
21 directories, 0 files
2、命名规则;
Linux的目录结构是有一定的规范的,即特定的目录应该存放特定的文件。此规范由文件系统层次结构标准(Filesystem Hierarchy Standard)实现。文件系统标准旨在分发开发人员,程序包开发人员和系统实现使用者。但是它主要用于参考,而不是如何管理Linux文件系统或目录层次结构的强制标准。关于此标准文档,可参考:https://www.pathname.com/fhs/
1)文件名不同且最长255个字节;
2)包括路径在内文件名称最长4095个字节;
3)蓝色-->目录 浅蓝色-->链接文件 灰色-->其他文件
——颜色设置 /etc/DIR_COLORS
4)除了斜杠和NUL,ASCII中的0,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们;
5)标准Linux文件系统(如ext4),文件名称大小写敏感,例如:HOME, Home,home, hoMe,不能使用特殊的目录命名;
3、目录结构介绍及用途;
Linux文件系统中默认会创建很多文件,以支持整个系统的正常运行,以下介绍各个目录都有什么作用,放置什么类型的文件。
/:文件系统的最顶层是由根目录开始的,类似于Windows的C盘、D盘等系统盘;
/boot:系统启动引导文件存放目录。内核文件(vmlinuxz)以及应道加载器(boot loader)都存放在此目录(参考链接:https://blog.csdn.net/cymm_liu/article/details/9265503);
/bin:存放所有用户使用的基本命令,该目录不能独立分区,OS在启动时会用到该目录下的文件;
/sbin:存放管理类的基本命令,该目录不能独立分区,OS在启动时会用到该目录下的 文件;
/lib:存放系统启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules),还有个目录叫/lib64,是专门用于x86_64系统上的辅助共享库文件存放的位置;
/etc:配置文件目录;
/home:普通用户的家目录;
/root:管理员用户的家目录;
/media:可卸载便携式移动设备挂载点;
/mnt:临时文件系统挂载点;
/dev:设备文件及特殊文件存储位置;
/opt:第三方引用程序的安装位置;
/srv:系统上运行的服务用到的数据;
/tmp:临时文件存储位置;
/proc:这是一个虚拟的目录,它是系统内存的映射目录,提供内核与进程信息(参考链接:https://blog.csdn.net/hackstoic/article/details/49966491);
/var:存放邮件、系统日志等变化文件(参考链接:https://www.cnblogs.com/zhouhbing/p/4516522.html);
/usr:存放用户应用程序。其中包含以下子目录(参考链接:https://yijiebuyi.com/blog/c3f2a606f1f0bc098f02621dfcc8405b.html);
/run:系统运行时所需文件;
/sys:可访问 Linux 内核,sysfs 虚拟文件系统提供了一种比 proc 更为理想的访问内核数据的途径(参考链接:https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/index.html)
二、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息?
1、文件的元数据信息及其分别的含义;
对一个文件的信息,在Linux上被分成两个部分:用户数据(user data)与元数据(meta data)。
用户数据:指文件的数据内容是存放在文件对应的数据块(data block)中。数据块是记录文件真实内容的地方;
元数据:是文件的附加属性,如:文件大小、创建时间、所有者、inode(index number,即索引节点号)等信息。元数据中的inode是个整数,它才是用来区分每一个不同文件的唯一标识,而非文件名,类似我们的身份证号。每个文件都有一个唯一的inode。文件名仅仅是为了方便我们记忆和使用,系统或程序通过inode号寻找正确的文件数据块。如图,展示了程序通过文件名获取文件内容的过程。
了解inode详情参考链接:
2、查看;
在Linux系统中查看inode号可使用命令ls -i或stat,查看inode使用情况使用命令df -i。
[root@localhost ~]# cd /home
####查看文件或目录inode
[root@localhost home]# ls -i
33574997 gaolu 33642634 nginx
##显示33574997,33642634即为inode号
####查看文件或目录详细信息
[root@localhost ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1419 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574978 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-06-09 20:37:08.412975088 +0800
Modify: 2020-06-09 20:37:08.415975088 +0800
Change: 2020-06-09 20:37:08.415975088 +0800
Birth: -
################stat命令显示的各元数据信息含义################
File:文件名
Size:文件大小(单位:byte)
Blocks:文件占用的数据块个数
IO Block:文件所占用数据块的块容量(单位:byte)
regular file:普通文件(文件类型<参考链接:https://www.jianshu.com/p/eda80af7a185>)
Device:设备号(十六进制/十进制)
Inode:索引节点
Links:硬连接数(1代表没有其它的硬连接)
Access:第一个Access,权限(八进制/rwx格式)
Uid:所属主(ID号/名称)
Gid:所属组(ID号/名称)
Access:第二个Access,最近访问时间
Modify:最近数据修改时间
Change:最近元数据修改时间
Birth:创建时间
####查看inode使用情况
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 31021 8879827 1% /
devtmpfs 121445 383 121062 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 740 123747 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 524288 326 523962 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
3、文件时间戳信息;
在磁盘上存放的每一个文件可分为两部分:一部分为文件的内容,即文件的数据(data),此部分内容是存放在磁盘中专门的数据空间(data block)中的。另一部分费文件的属性信息,即文件的元数据(meta data),比如:文件的类型、大小、节点号(inode number)、权限、所有者、所属组、时间等。这部分内容存放在磁盘中专门的节点空间(inode block)中的。
1)文件时间属性;
每一个文件的时间属性有三种:atime、ctime、mtime
atime——access time:记录最后一次的访问时间(比如系统的进程或通过一些文件编辑查看命令cat、vim、more、less等直接亦或脚本间接使用,就会改变文件atime)
mtime——modify time:记录最后一次文件数据部分的修改时间(只有修改文件内容才会改变mtime时间。修改文件内容的同时,也会改变ctime)
ctime——change time:记录最后一次文件元数据的修改时间(只要修改文件的内容,文件名,文件的属性<属主、属组、权限等>都会改变ctime)
I、mtime只有修改文件内容才会改变,更准确的说是修改了它的data block部分;
II、ctime是修改文件属性时改变的,确切的说是修改了它的元数据(inode block)部分,例如重命名文件、修改文件所有者、移动文件(如果在同一分区中移动文件时,则没有改变data block,只是改变了inode指针,或文件名)等;
III、对目录这种特殊文件而言,其目录文件的数据部分(data block)存放的就是目中的文件名等信息。所以在目录中创建、删除文件等都会改变目录的ctime;
2)查看文件时间属性;
##查看文件的三个时间
ls -l filename 显示文件的修改时间mtime
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1419 Jun 9 20:37 anaconda-ks.cfg
ls -lc filename 显示文件的ctime
[root@localhost ~]# ls -lc anaconda-ks.cfg
-rw-------. 1 root root 1419 Jun 9 20:37 anaconda-ks.cfg
ls -la filename 显示文件atime
[root@localhost ~]# ls -la anaconda-ks.cfg
-rw-------. 1 root root 1419 Jun 9 20:37 anaconda-ks.cfg
stat filename 同时显示文件的三个时间atime/mtime/ctime(参考上面)
3)文件时间戳属性变化;
#新建一个test.txt,可以观察到文件的三个时间戳是一样的;
#查看文件,可以观察到文件的atime发生了变化;
#再查看一下文件,观察atime的变化;
发现atime没有变化,是什么原因导致的呢?
这是基于性能优化考虑的,因为每次读取文件都会即时更新atime,会导致对磁盘额外的写操作,从而影响性能。一般情况下每次访问文件都记录文件的atime是没有实际意义的。所以从CentOS6开始默认开启了一个“relatime”的挂载选项,此选项要求文件的atime只有满足两个条件之一才会更新。
条件一:文件的atime时间超过一天以上;
条件二:文件的mtime比atime更晚;此选项可以有效地避免atime的频繁修改,优化服务器性能。比如:用户经常访问的网页上面的网页文件。
#修改文件,观察文件的mtime,ctime发生了变化;
#修改文件权限,观察文件ctime发生了变化,而mtime并没有发生变化;
4)常用文件管理命令对文件时间属性影响;
5)修改文件时间戳信息;
#使用touch刷新文件的三个时间戳:
#修改文件的atime为2020年12月12日11点11分:
或者使用:touch --time=atime 1.txt -t 修改的时间
#修改文件的mtime为2011年11月11日12点12分:
或者使用:touch --time=mtime 1.txt -t 时间
#修改文件的mtime和ctime为1993年4月29日12点11分13秒:
三、软链接和硬链接的区别,并用实例操作说明;
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
创建软硬链接语法
ln 语法: ln [-s] [来源文件] [目的文件]
常用选项就一个-s ,如果不加就是建立硬连接,加上就建立软连接。
!!hard link 有两个限制:一是不能跨文件系统,因为不同的文件系统有不同的inode table; 二是不能连接目录
1、硬链接;
当系统要读取一个文件时,就会先去读inode table,然后再去根据inode中的信息到块区域去将数据取出来。而硬链接是直接再建立一个inode连接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增加了一个指到这个文件的inode,不过这样一来就会有个问题,因为增加的inode会连接到块区域,而目录本身仅仅消耗inode而已,那么hard link就不能连接目录了。
硬链接特性及特性实例展示:
1)文件有相同的 inode 及 data block(每增加一个硬链接,链接数加1);
2)只能对已存在的文件进行创建;
3)不能交叉文件系统进行硬链接的创建;
#可能存在inode号相同的文件
inode 号仅在各文件系统下是唯一的,当 Linux 挂载多个文件系统后将出现 inode 号重复的现象,如上图所示,inode就一样,但是两个文件并无关联。因此硬链接创建时不可跨文件系统。设备文件目录 /dev 使用的文件系统是 devtmpfs,而 /root(与根目录 / 一致)使用的是磁盘文件系统 ext4
4)不能对目录进行创建,只可对文件创建;
5)删除一个硬链接文件并不影响其他有相同 inode 号的文件。
硬链接不能对目录创建是受限于文件系统的设计。现 Linux 文件系统中的目录均隐藏了两个个特殊的目录:当前目录(.)与父目录(..)。查看这两个特殊目录的 inode 号可知其实这两目录就是两个硬链接,因此若系统允许对目录创建硬链接,则会产生目录环。
2、软链接;
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。可理解为软链接是建立一个独立的文件,而这个文件的作用是当读取这个连接文件时,它会把读取的行为转发到该文件所link的文件上。
软链接特性及特性实例展示:
1)软链接inode不同且有自己的文件属性及权限等;
2)可对不存在的文件或目录创建软链接;
3)软链接可交叉文件系统;
4)软链接可对文件或目录创建;
5)创建软链接时,链接计数 i_nlink 不会增加;
6)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
软链接的用户数据也可以是另一个软链接的路径,其解析过程是递归的。
但需注意:软链接创建时原文件的路径指向使用绝对路径较好。使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接(如下所示的软链接 a 使用了相对路径,因此不宜被移动),因为链接数据块中记录的亦是相对路径指向。
3、总结;
硬链接与软连接的区别:
1)本质不同:硬链接是指向同一个文件,软链接指向的不是同一个文件;
2)创建链接时:每创建一个硬链接则链接数加1,创建软链接时链接数不变;
3)是否可以跨分区:硬链接不可以跨分区,软链接可以跨分区;
4)目录是否可以创建链接:硬链接不可以对目录创建,软链接可以对目录创建;
5)inode号:硬链接的inode号相同,软链接inode号不同;
6)源文件删除时:硬链接不受影响,软链接失效;
四、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例;
1、管理目录类文件相关命令;
1)查看目录;
tree命令:树状图列出目录的内容。
语法
tree (选项) (参数)
选项
-a:显示所有文件和目录;
-A:使用ASNI绘图字符显示树状图而非以ASCII字符组合;
-C:在文件和目录清单加上色彩,便于区分各种类型;
-d:先是目录名称而非内容;
-D:列出文件或目录的更改时间;
-f:在每个文件或目录之前,显示完整的相对路径名称;
-F:在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","@","|"号;
-g:列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码;
-i:不以阶梯状列出文件和目录名称;
-l:<范本样式> 不显示符号范本样式的文件或目录名称;
-l:如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录;
-n:不在文件和目录清单加上色彩;
-N:直接列出文件和目录名称,包括控制字符;
-p:列出权限标示;
-P:<范本样式> 只显示符合范本样式的文件和目录名称;
-q:用“?”号取代控制字符,列出文件和目录名称;
-s:列出文件和目录大小;
-t:用文件和目录的更改时间排序;
-u:列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码;
-x:将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该目录予以排除在寻找范围外。
参数
目录:执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。
示例
tree -L 2 #-L n 只显示 n 层目录 (n 为数字)<先执行 yum install tree -y>
tree -t #用文件和目录的更改时间排序
tree -r #以相反次序排列
tree -f #在每个文件或目录之前,显示完整的相对路径名称
tree -d #只显示目录
tree -a #显示所有文件和目录
2)创建目录;
mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
语法
mkdir (选项) (参数)
选项
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。
参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
示例
mkdir aaa #创建目录
mkdir -m a=rw bbb #创建指定属性的目录
mkdir -p 111/abc #创建目录,父目录不存在,则创建
mkdir -v test1 #创建目录,并显示详细信息
mkdir -p /haha/{1,2,3} #创建一个名为/haha的目录,其中有1,2,3的子目录
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
3)删除目录;
rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限。
语法
rmdir (选项) (参数)
选项
-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
--ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
-v或-verboes:显示命令的详细执行过程;
--help:显示命令的帮助信息;
--version:显示命令的版本信息。
参数
目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
示例
rmdir test #删除test目录,注意必须是空目录
rmdir -pv a/b/c #删除指定目录及其上级文件夹并显示详细信息
注意:子目录被删除之前应该是空目录。就是说,该目录中的所有文件必须用rm命令全部,另外,当前工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。
虽然还可以用带有-r选项的rm命令递归删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
2、管理文件的相关命令;
1)查看文件列表;
ls命令用来显示目标列表,在Linux中是使用率较高的命令。
语法
ls (选项)(参数)
选项
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
参数
目录:指定要显示列表的目录,也可以是具体的文件。
示例
ls -d */ #列出当前所有目录
ls -l命令 #显示当前目录内容的长列表等价 ll 命令
ls -a #显示隐藏文件(带.开头的文件)
ls -li #打印每个文件的索引号
ls -lr #按时间倒排序
ls -lt #按修改时间倒排序
2)文件的时间属性;
##查看文件的三个时间
ls -l filename 显示文件的修改时间mtime
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1419 Jun 9 20:37 anaconda-ks.cfg
ls -lc filename 显示文件的ctime
[root@localhost ~]# ls -lc anaconda-ks.cfg
-rw-------. 1 root root 1419 Jun 9 20:37 anaconda-ks.cfg
ls -la filename 显示文件atime
[root@localhost ~]# ls -la anaconda-ks.cfg
-rw-------. 1 root root 1419 Jun 9 20:37 anaconda-ks.cfg
3)查看文件属性信息;
stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细
语法
stat (选项) (参数)
选项
-L:支持符号连接;
-f:显示文件系统状态而非文件状态;
-t:以简洁方式输出信息;
--help:显示指令的帮助信息;
--version:显示指令的版本信息。
参数
文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。
示例
查看文件详细信息,比ll更详细:
4)创建文件;
touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建新的空文件。
语法
touch (选项) (参数)
选项
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
参数
文件:指定要设置时间属性的文件列表。
示例
touch test.php #将test.php的档案时间改为,当前时间,文件不存在建之
touch -c -t 05061803 test.php #将档案时间改为,5月6日18点3分
touch -r abc.php test.php #将test.php档案改成跟abc.php一样
5)复制文件;
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
语法
cp (选项) (参数)
选项
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
参数
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
示例
cp file1 file2#将文件file1复制成文件file2
cp -R file1 file2 dir1 dir2#同时将文件file1、file2与目录dir1复制到dir2
cp -p 1.txt dir2 #将1.txt到dir2目录,并且保留原文件的属性
cp -r dir2/ dir3 #将dir2目录copy到dir3目录下
cp -fr dir2/* dir4 #将dir2下面的所有文件强制copy到dir4目录下
6)移动及重命名文件;
mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
语法
mv (选项) (参数)
选项
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
参数
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
示例
mv abc abc.php #将abc移动成abc.php
mv aaa.php bbb #将目录或者文件重命名,如果存在bbb目录,则是将aaa移到bbb目录下
7)删除文件;
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
语法
rm (选项) (参数)
选项
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
参数
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。
示例
rm aaa.php#删除文件需要确认
rm -f aaa.txt#强制删除文件不确认
rm -rfv bbb#强制删除当前的测试目录,并显示删除的详细过程
注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
五、复制/etc/profile 至/tmp 目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符;
[root@localhost ~]# cp /etc/profile /tmp
[root@localhost ~]# cd /tmp
[root@localhost tmp]# ll profile
-rw-r--r-- 1 root root 1819 Jun 18 19:55 profile
1、vim命令行模式设置;
[root@localhost tmp]# vim /tmp/profile
viim编辑文件,进入之后一次输入 [esc] --> :%s#^ *## 或者 :%s/^[[:space:]]\+// 然后回车
2、使用cat加tr命令实现;
[root@localhost tmp]# cat /tmp/profile |tr -d ' '
六、在vim中设置tab缩进为4个字符;
vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。——维基百科(https://zh.wikipedia.org/wiki/Vim)
1、查看tab缩进多少字符;
vim编辑一个文件,进入之后一次输入 [esc] -->:set all 然后回车
可以看到默认是8个字符
2、设置tab缩进为4个字符;
1)vim中设置;
vim编辑一个文件,进入之后一次输入 [esc] -->:set all--> [ set ts=4或者set tabstop=4 ]-->回车-->按“i”键
2)环境变量设置;
[root@localhost tmp]# vim ~/.vimrc
然后保存退出即可。