开发者学堂课程【Linux企业运维实战-入门及常用命令:Linux文件键值进阶及cp命令解读】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:
Linux文件键值进阶及cp命令解读
内容介绍:
一、上节回顾
二、练习
三、创建空文件和刷新时间
四、复制文件和目录cp
五、cp常用选项
六、练习
一、上节回顾
上节内容述说了转义,思索怎么在当前目录里只显示隐藏文件?
输入ls-d.*,显示如图
输入l.后也一样,l.是某些名,aliasl.=‘ls-d.*--color=auto’
输入touchDesktop/.test
ls-d.*
假如想要显示当前目录下所有的隐藏文件包括每位文件夹下的隐藏文件,输入ls-R.*
发觉下边文件..开头,步入到根目录中,由于.*包括..,而..是父目录。应当写为ls-R.[^.]*
想要显示所有隐藏文件,也可以输入ls-a,a显示所有隐藏文件以及不隐藏文件,再输入ls-a.[^.]*默认步入到子目录里,如图再加入d,输入ls-ad.[^.]*
二、练习
1、显示/var目录下所有以l开头,以一个大写字母结尾,且中间出现起码一位数字的文件或目录
先创建文件,输入touch/data/la9ab
再输入ls/var/l*[[:digit]]*[[:lower:]]
显示/data/la9ab
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
先创建文件,输入touch/data/9abctouch/data/9abc8
输入ls/etc/[0-9]*[^[:digit:]]
显示/data/9abc
3、显示/etc/目录下以非字母开头,前面跟了一个字母及其它任意宽度任意字符的文件或目录
先创建文件,输入touch/data/3bxx
非字母开头:[^[a-zA-Z]]也可以写为[^[:alpha:]]
跟一个字母:[[:alpha:]]
输入ls/data/[^[:alpha:]][[:alpha:]]*
显示/data/3bxx/data/9abc/data/9abc8
4、显示/etc/目录下所有以rc开头,并前面是0-6之间的数字,其它为任意字符的文件或目录
输入ls/etc/rc[0-6]*
加上-d不会步入目录中,输入ls-d/etc/rc[0-6]*
显示如图
5、显示/etc目录下,所有以.d结尾的文件或目录
输入ls-d/etc/*.d
显示如图
6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
输入ls-d/etc/[mnrp]*.conf
显示如图
7、只显示/root下的隐藏文件和目录
输入ls-d/root/.*
显示如图
8、只显示/etc下的非隐藏目录
只显示目录:*/-d
输入ls/etc/[^.]*/-d
显示如图
三、创建空文件和刷新时间
touch命令:
touch[OPTION]...FILE...
-a仅改变atime和ctime
-m仅改变mtime和ctime
-t[[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳
-c假如文件不存在,则不予创建
例如说输入touchf1都会创建出f1空文件。
例如一个文件早已存在,touch不会覆盖linux 文件通配符,并且会刷新文件的时间,三个时间全刷新。输入ll/etc/hosts
touch/etc/hosts
ll/etc/hosts
输入touch-t2.50/etc/hosts
stat/etc/hosts
显示如图更改了两个时间
-c意味着只拿来刷新文件,输入touch-cf2,f2是不存在的,输入ls不会创建都会显示f1,假如文件早已存在linux操作系统界面,例如touch-cf1,都会把时间做一次刷新,输入
touch-cf1
statf1
显示如图
四、复制文件和目录cp
cp是copy缩写,是外部命令,默认是一某些名,格式有以下三种句型:
cp[OPTION]...[-T]SOURCEDEST
cp[OPTION]...SOURCE...DIRECTORY
cp[OPTION]...-tDIRECTORYSOURCE...
cpSRCDEST
SRC是文件︰
假如目标不存在∶新建DEST,并将SRC中内容填充至DEST中
假如目标存在∶
假如DEST是文件∶将SRC中的内容覆盖至DEST中
基于安全,建议为cp命令使用-i选项
假如DEST是目录∶在DEST下新建与原文件同名的文件,并将SRC中内容填
充至新文件中
具体讲解:
第一种句型是cp加选项,选项可以多个,源source写在前,只能是一个,目标dest写在后,只能是一个,-[T]选项可有可无linux 文件通配符,只是复制单个目录或文件
第二种句型源可以是多个,是把多个文件复制到文件夹里
第三种句型是-t选项,文件夹在前,源在后,是把源的数据复制到目录中,通常不常用。
另外在cp命令复制时可能会碰到各类场景,如下
目标
源
不存在
存在且为文件
存在且为目录
一个文件
新建DEST,并将SRC中内容填充至DEST中
将SRC中的内容覆盖至DEST中
注意数据遗失风险!建议用-i选项
在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
多个文件
提示错误
提示错误
在DEST下新建与原文件同名的文件,并将原文件内容复制进新文件中
目录
须使用-r选项
创建指定DEST同名目录,复制SRC目录中所有文件至DEST下
提示错误
在DEST下新建与原目录同名的目录,并将SRC中内容复制至新目录中
例如
(1)第一种情况源是一个文件,目标不存在下用第一种句型,输入
cp/etc/hostshosts.bak
疗效是将etc/hosts复制,并更名为hosts.bak
再比较二者属性
ll/etc/hostshosts.bak
发觉大小完全一样,而且有些属性遗失
(2)目标存在且为文件时再来复制,输入
cp/etc/hostshosts.bak
会显示是否覆盖cp:overwrite‘hosts.bak’?覆盖输入y,回车默认不覆盖
据悉须注意:
假如登陆时是一个普通用户wang,如今把该文件复制到wang的家目录里,输入
cp/etc/hosts~wang/
复制后wang的文件夹是存在的,而且没有写旁边的文件名,意味着保留原先的名子hosts,复制完后查看属性,输入ll,是root用户所拥有
再来复制motd文件到当前家目录中,当前家目录用.表示,文件名为hosts,输入cp/etc/motd./hosts,应当显示是否覆盖,并且结果显示没有权限,由于该文件是root用户所拥有
再来直接复制到家目录中而且不更名,输入cp/etc/motd.,再复制文件motd,输入cp/etc/hostsmotd可以覆盖吗?
结果不显示,可以输入ll!*查看,显示覆盖,由于motd文件最初是0字节,而如今是158字节
注意到在root用户下覆盖会寻问是否覆盖,而wang下则没有,是由于默认root用户下的cp不是真cp,是一某些名aliascp=‘cp-i’。而默认的cp命令是直接覆盖的,加-i会寻问。
为了避免wang下的文件也被误覆盖,可以在wang的家目录下加别称nano.bashrc,步入后在.bashrc下加入aliascp=‘cp-i’,最后镜象,输入.bashrc
alias
别称生效
这时再想覆盖都会寻问,输入cp/etc/issuemotd
显示cp:overwrite‘motd’?
(3)目标早已存在且为目录时,输入
cp/etc/hosts/data,意味着把该文件复制到data目录中,但是保留该名称
(4)源是多个文件时用第二种句型,当目标不存在时,输入
cp/etc/issue/etc/hosts/data/f1f1不存在,所以报错,结果显示
cp:target‘/data/f1’isnotadirectory
(5)当目标存在且为文件时,输入
cp/etc/issue/etc/hosts/data/fff
显示报错
cp:target‘/data/fff’isnotadirectory
(6)当目标存在且为目录时能够复制多个文件,输入
cp/etc/issue/etc/hosts/data/,两个文件复制并保留原名称
输入ls/data,显示data中早已有这两个新文件形成
2018-03-29.logf1hostshosts.bakissue
(7)复制目录时假如目标是文件,如下输入
cp/etc/sysconfig//data/issue
结果显示报错:cp:omittingdirectory‘/etc/sysconfig/’
也可以写入一个新名子,如下dir不存在,输入
cp/etc/sysconfig//data/dir,意味着把文件夹sysconfig复制到data下,命名成dir,相当于复制并更名,并且直接这样写会报错
cp:omittingdirectory‘/etc/sysconfig/’提示忽视目录
由于cp命令默认不能复制文件夹,只是复制文件,要复制文件,必须跟-r属性,-r、在此是递归行为,复制该文件夹下的子文件或则目录等
输入
cp-r/etc/sysconfig//data/dir
再输入
ls/data
结果显示data下出现dir一个子目录
若果再度执行cp-r/etc/sysconfig//data/dir不会覆盖,会放在dir目录下作为子目录
输入ls/data/dir查看
但是当第三次执行时会显示是否覆盖,假如想覆盖文件,我们难以输入仍然输入y来确定覆盖,可以使用原始命令
cp-r/etc/sysconfig//data/dir
据悉-f属性不能覆盖,实际上是将原先文件删掉再创建文件,而覆盖是文件内容发生变化并且文件属性不变
五、cp常用选项
-i:覆盖前提示-n:不覆盖,注意二者次序
-r,-R:递归复制目录及内部的所有内容
-a:归档,相当于-dR--preserv=all
-d:--no-dereference--preserv=links不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode:权限
ownership:属主属组
timestamp:
links
xattr
context
all
-p:等同--preserv=mode,ownership,timestamp
-v:--verbose
-f:--force
-u:--update只复制源比目标更新文件或目标不存在的文件--backup=numbered目标存在,覆盖前先备份加数字后缀
具体讲解:
-a是一个综合选项,输入cp--help查看
-a可以用长格式的archive,作用等价于-dR--preserv=all功能的组合,r是递归,d是保留链接
哪些是保留链接呢?
比如输入ll/etc/grub.conf
结果中显示快捷方法(软链接)/etc/grub.conf
如今拷贝该软链接复制到data目录下,这么复制后是软链接/etc/grub.conf还是软链接所指向的原始文件
../boot/grub/grub.conf呢?,
输入
cp/etc/grub.conf/data/
ll/data/
显示如图
显而易见,复制的是原始文件grub.conf,软链接应当始终是浅黄色
如今消除掉data目录数据,
输入
rm-rf/data/*
cp-d/etc/grub.conf/data/
ll/data/
显示结果中仍为浅黄色grub.conf
所以-d保留链接实际上就是复制快捷方法,并不复制原始文件
preserv是保留的意思,可以保留一些特定属性,
比如mode,ownership,timestamps
mode是权限,ownership是所有者linux 下载,timestamps是时间戳
在lrwxrwxrwx.1rootroot22Mar3011:34grub.conf->../boot/grub/grub.conf中lrwxrwxrwx.是权限,rootroot是所有者,Mar3011:34是时间戳
默认保留三个属性,假如保留以上三个属性,可以直接使用cp-p,-p选项相当于默认保留这三个
也可以保留其他属性,比如context上下文,links链接,xattr扩充属性等
-a选项全都保留,-p选项保留一部份,因而-a可以作为备份手段来实现,例如想备份etc,输入
cp-a/etc//data/etcbackup
ll/data
显示复制成功
另外在复制一些大的目录例如usr时,可以在复制时降低显示过程,添加v,输入
cp-av/usr/data/
-p属性只复制更新的文件,比如现今有一个文件f1,再复制到data下,输入
cpf1/data/
假如更改了data下的f1内容,再度复制f1,输入
cpf1/data/
都会将旧的内容复制到新内容上,而-u防止了复制旧内容
-backup选项在复制的目标早已存在时,会将旧的文件做备份,防止误覆盖,先来比较旧的f1和新的f1,输入
llf1/data/f1
显示data下的f1有17个字节,f1是0个字节,假如再输入
cpf1/data/f1
会造成data下的f1成为0个字节,所以添加-u,输入
cp-uf1/data/f1
llf1/data/f1
显示结果不会误覆盖,不会造成data下的f1被清零
再加上-backup选项会做备份,输入
cp--backup=numberedf1/data/f1
显示结果寻问是否覆盖,输入y覆盖后再来输入查看
ls/data
显示结果为f1f1.~1~有备份
再输入ll/data
结果显示存在17个字节的旧文件f1.~1~
可以将--backup=numbered命令加入到别称中,省略复杂操作,输入
nano.bashrc
步入后在cp中添加
--backup=numbered
再输入..bashrc生成
再输入
cpanaconda-ks.cfg/data/
cpanaconda-ks.cfg/data/
确定覆盖后输入ll/data
查看有备份anaconda-ks.cfg.~1~
六、练习
1、定义别称命令baketc,每晚将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为backupYYYY-mm-dd,备份过程可见
2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
(1)、要备份输入-a,过程可见输入v,注意假如写*则则不包括etc中的隐藏文件
cp-av/etc//data/backup`data+%F`
复制成功,接出来定义成别称
aliasbacketc=‘cp-av/etc//data/backup`data+%F`’
假如要读档则须要放置到bashrc中
再来执行下疗效,输入
rm-rf/data/*
backetc
可以实现别称
(2)保留原先属性用-a,输入
cp-a/root/data/rootdir
ll/data
查看data下存在rootdir
cp在复制特殊文件时存在问题,比如输入
ll/dev/zero
ll/dev/sda
在复制这种文件时不能直接复制,须要降低-a只保留属性信息,而不是复制硬碟里的内容,输入
cp-a/dev/sda/data
ll/data
进行复制,再例如复制zero文件,输入
cp-a/dev/zero/data/
ll/data/
笔试题:
创建如下文件
touchfile{1..100}.conf
要求把以上文件做备份,而且每位文件名后加bak后缀,cp命令未能完成,用到一个批量处理文件的命令rename,可以批量实现文件更名
再来创建一些不是以conf结尾的文件,输入
toucha.txt
Touchb.txt
现今只备份conf结尾的文件,输入
rename“conf”“conf.bak”file*
“conf”“conf.bak”相当于要把conf字符串替换为conf.bak,对file开头的文件进行处理
若要删掉,将.bak替换为空,输入
rename‘.bak’‘’file*
文章评论