购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 文件操作命令

文件是用于存储数据的,数据信息都是写入文件中的。在Linux系统中有各种各样的文件类型,相对目录而言,文件名一般有后缀名。本节将会介绍一些常用的文件操作命令,如文件的增、删、改、查等命令。当然,Linux系统关于文件的命令不止本节所介绍的这些,本节介绍的是一些使用率较高的命令。

2.3.1 stat命令

stat命令用于显示文件或目录的详细属性信息,包括文件系统状态,其比ls命令显示的信息更加详细。这里需要重点看3个时间,其中,Access表示最近访问的时间,Modify表示最近修改的时间,包括修改文件内容和修改文件权限,Change表示最近修改文件权限的时间。命令格式如下:


stat   文件或目录

下面的示例演示查看/root目录下的文件信息。


#查看/root目录下anaconda-ks.cfg文件的相关属性信息
[root@localhost ~]# stat /root/anaconda-ks.cfg
  File: ‘anaconda-ks.cfg’
  Size: 1763            Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 33574978    Links: 1
Access: (0600/-rw-------)  Uid: (    0/   root)   Gid: (    0/   root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-11-29 17:25:18.484346323 +0800
Modify: 2020-11-29 17:22:53.157303040 +0800
Change: 2020-11-29 17:22:53.157303040 +0800
 Birth: -

2.3.2 touch命令

touch命令用于新建空白文件或更新文件的时间标记。当文件不存在时表示创建空文件,当文件存在时则表示更新文件的时间标记。使用touch命令也可以同时创建多个空文件。命令格式如下:


touch   选项      文件名

touch命令在使用时一般不需要选项,但这里仍然罗列出几个选项供读者参考,具体说明如下:

·-a:只更改访问时间。

·-c:不创建任何文件。

·-d:使用指定字符串表示时间而非当前时间。

·-m:只更改修改时间。

下面的示例是对以上选项用法的详细演示,注意查看显示结果。


#在/opt目录下同时新建1.txt和2.txt两个文件
[root@localhost opt]# touch 1.txt 2.txt
[root@localhost opt]# ls
1.txt  2.txt  rh

#批量新建多个文件,使用{a..z}或{1..10}连续集合的方式表示,也可以使用{文件名1,
 文件名2,……}取值列表的方式表示
[root@localhost opt]# touch {a.txt,b.txt}
[root@localhost opt]# ls
1.txt  2.txt  a.txt  b.txt  rh

[root@localhost opt]# touch {x..z}.txt
[root@localhost opt]# ls
1.txt  2.txt  a.txt  b.txt  rh  x.txt  y.txt  z.txt

#当文件存在时表示对文件的时间标记进行更新,先使用ls命令查看1.txt文件的详细信息(主
 要看时间),然后使用touch命令,再通过ls命令查看时间是否发生了变化
[root@localhost opt]# ls -lh 1.txt
-rw-r--r--. 1 root root 0 12月  2 22:06 1.txt
[root@localhost opt]# touch 1.txt
[root@localhost opt]# ls -lh 1.txt
-rw-r--r--. 1 root root 0 12月  2 22:16 1.txt

这里补充一个知识点,引入两个通配符号的概念。符号“*”表示匹配0个或多个字符,符号“?”表示匹配1个字符。如果忘记文件或目录名称的全称,只能记住大概的名称,就可以使用通配符进行模糊查询操作。示例如下:


#在/opt目录下同时新建1.txt、12.txt、123.txt 3个文件,其他txt文件已删除
[root@localhost opt]# touch {1,12,123}.txt
[root@localhost opt]# ls
123.txt  12.txt  1.txt  a  test1  test2  test3
#使用符号“*”模糊查询所有的txt文件,这里“*”分别匹配了0个、1个和2个字符
[root@localhost opt]# ls 1*.txt
123.txt  12.txt  1.txt
#使用符号“?”查询txt文件中以1开头并且后面只有一个字符的文件
[root@localhost opt]# ls 1?.txt
12.txt

2.3.3 cp命令

cp是Copy的简写,cp命令用于复制文件或目录。命令格式如下:


cp  选项  源文件或目录  目标文件或目录

下面列出几个cp命令中使用频率较高的选项进行说明,同样,短选项也可以多个一起使用。

·-r:递归复制整个目录树,复制目录时必须使用该选项。

·-p:保持源文件的属性不变。

·-f:强制覆盖与目标文件或目录同名的文件或目录,即覆盖时不提示。

·-i:如果存在与目标文件或目录同名的文件或目录,覆盖时提示。

下面的示例是对以上选项用法的详细演示,注意查看显示结果。


#将/opt目录下所有的txt文件复制到/opt/test1目录下,test1目录是空目录
[root@localhost opt]# cp /opt/*.txt /opt/test1
[root@localhost opt]# ls /opt/test1
1.txt  2.txt  a.txt  b.txt  x.txt  y.txt  z.txt

#使用选项“-i”,即目标文件存在,覆盖时给出提示
[root@localhost opt]# cp -I /opt/*.txt /opt/test1
cp:是否覆盖"/opt/test1/1.txt"?
……

#使用选项“-f”,即目标文件存在,覆盖时不提示。执行时发现还是会提示,这是因为默认有个
 别名记录,应先使用unalias命令取消别名记录后再执行
#查看别名记录
[root@localhost opt]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias |/usr/bin/which --tty-only --read-alias --show-dot 
--show-tilde'
#使用unalias命令取消cp的别名记录,发现cp命令默认就是使用“cp -i”
[root@localhost opt]# unalias cp
#再次使用“cp -f”时就不会有提示了
[root@localhost opt]# cp -f /opt/*.txt /opt/test1

#使用“-r”选项将整个/opt/test1目录复制到/opt/test2目录下,注意格式,即test2后
 面一定记得接上“/”才是复制到test2目录下,如果后面不接“/”,则表示复制test1后重
 命名为test2 
[root@localhost opt]# cp -rf /opt/test1 /opt/test2/
[root@localhost opt]# ls /opt/test2/
test1

#复制时接上选项“-p”,可以保持源文件属性不变。先使用ls命令查看文件的时间标记,复制
 后再查看时间标记时会发现没有发生变化,表示复制时源文件的属性保持不变
#ls查看源文件的时间标记
[root@localhost opt]# ls -lh /opt/2.txt
-rw-r--r--. 1 root root 0 12月  2 22:06 /opt/2.txt
#不使用选项“-p”复制后发现时间发生了改变
[root@localhost opt]# cp        /opt/2.txt      /opt/test3/
[root@localhost opt]# ls -lh /opt/test3/2.txt
-rw-r--r--. 1 root root 0 12月  4 21:27 /opt/test3/2.txt
#使用选项“-p”复制后发现时间和原来的时间保持一致
[root@localhost opt]# cp -p /opt/2.txt  /opt/test2
[root@localhost opt]# ls -lh /opt/test2/2.txt
-rw-r--r--. 1 root root 0 12月  2 22:06 /opt/test2/2.txt

2.3.4 rm命令

rm是Remove的简写,rm命令用于删除文件或目录。命令格式如下:


rm    选项  文件或目录

rm命令常用的选项如下:

·-f:强行删除文件或目录并且不提醒。

·-i:删除文件或目录时提醒用户确认。

·-r:递归删除整个目录树,删除目录时必须使用该选项。

rm命令的选项和cp命令的选项作用相同,这里就不一一演示了。

注意:在使用管理员账户root时不建议使用rm -rf命令删除文件或目录,以防止出现误删除。

2.3.5 mv命令

mv是Move的简写,mv命令用于剪切或重命名文件或目录。当源路径和目标路径不一致时实现的是剪切功能,也可以在剪切后直接重命名;当源路径和目标路径一致时实现的是重命名功能。命令格式如下:


mv  源文件或目录  目标文件或目录

mv命令常用的选项如下:

·-f:若目标文件存在,则覆盖前不提示。

·-i:若目标文件存在,则覆盖前给出提示。

·-n:不覆盖已存在的文件。

下面的示例是对以上选项用法的详细演示,注意查看显示结果。


#将/opt目录下的1.txt文件剪切到/opt/test4目录下,因为源路径和目标路径不一致,因此
 实现的是剪切功能
[root@localhost opt]# mv /opt/1.txt /opt/test4/

#将/opt目录下的test2重命名为66.txt,因为源路径和目标路径一致,因此实现的是重命名
 功能,此处使用的是相对路径
[root@localhost opt]# ls
2.txt  rh  test4
[root@localhost opt]# mv 2.txt 66.txt
[root@localhost opt]# ls
66.txt  rh  test4

2.3.6 查找命令

1.which命令

which命令用于在PATH环境变量中指定路径,定位与指定名字匹配的可执行命令的所在路径,同时也可以判断该命令是否存在。其中,选项“-a”表示返回匹配名字的可执行命令的所有路径。命令格式如下:


which   命令字

下面的示例是对which命令的演示,注意查看显示结果。


#使用echo命令查看PATH环境变量
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#使用which命令定位ls命令的路径,后面跟不跟选项“-a”结果都一样
[root@localhost ~]# which ls
alias ls='ls --color=auto'
       /usr/bin/ls
[root@localhost ~]# which -a ls
alias ls='ls --color=auto'
       /usr/bin/ls
#使用cp命令将ls命令复制到/usr/sbin目录下,再使用which命令进行测试
[root@localhost ~]# cp /usr/bin/ls /usr/sbin/
[root@localhost ~]# which ls
alias ls='ls --color=auto'
       /usr/sbin/ls
[root@localhost ~]# which -a ls
alias ls='ls --color=auto'
       /usr/sbin/ls
       /usr/bin/ls

2.whereis命令

whereis命令用于对程序名的搜索。如果后面不跟任何选项,则默认搜索二进制文件、帮助文件和源代码文件中的所有信息。命令格式如下:


whereis   选项   文件名

whereis命令常用的选项如下:

·-b:只搜索二进制文件。

·-m:只搜索帮助文件。

·-s:只搜索源代码文件。

下面是对whereis命令的演示。


#使用whereis命令查找ls命令的所有相关文件
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#使用whereis命令只查找ls命令的二进制文件
[root@localhost ~]# whereis -b ls
ls:/usr/bin/ls/usr/sbin/ls
#使用whereis命令只查找ls命令的帮助文件
[root@localhost ~]# whereis -m ls
ls:/usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

3.find命令

find命令用于在整个磁盘中搜索文件,查找速度较慢。命令格式如下:


find  路径名  选项  查询结果处理动作

find命令根据选项不同实现的功能也不同,常用的选项如下:

·-name:通过文件名进行搜索。

·-type:通过文件类型进行搜索。其中:b表示块设备文件;c表示字符设备文件;d表示目录;f表示普通文件;l表示符号链接文件;p表示管道文件;s表示套接字文件。

·-size:通过文件大小进行搜索。其中:b表示字节;k表示KB;M表示MB;G表示GB。

·-user:通过文件所属者进行搜索。

·-group:通过文件所属组进行搜索。

·-perm:按照文件权限进行搜索。符号“-”表示每个对象必须同时匹配指定的权限,可以多但是不能少;符号“+”(CentOS 6以下版本,CentOS 7以上的版本中是“/”符号)表示每个对象只要匹配指定权限中的一个即可;不使用符号表示每个对象必须完全匹配指定的权限。

·-ctime:通过最近修改时间(这里指的是修改文件权限的时间)进行搜索,“+n”表示修改时间与当前时间差大于n×24小时,“-n”表示修改时间与当前时间差小于n×24小时,n表示修改时间与当前时间差大于(n-1)×24小时且小于等于n×24小时。

·-mtime:通过最近修改时间(这里指的是修改文件内容和权限的时间)进行搜索,后面的数字n和选项-ctime的用法一致。

·-atime:通过最近访问时间进行搜索,后面的数字n也和ctime中的用法一致。

下面的示例是对以上选项的详细演示,注意查看显示结果。


#查找/opt目录下所有的txt文件。可以先在/opt目录下批量新建txt文件,包括二级子目录
[root@localhost opt]# find /opt -name "*.txt" -type f
/opt/test4/1.txt
/opt/test4/123.txt
/opt/66.txt
/opt/a.txt
/opt/b.txt
/opt/c.txt
/opt/d.txt
/opt/e.txt
/opt/f.txt

#查找/etc目录下大于80KB且小于100KB的文件,选项“-a”或“-and”表示逻辑与(同时满
 足多个条件),选项“-o”或“-or”表示逻辑或(只需要满足一个条件)
[root@localhost ~]# find /etc -size +80k -and -size -100k -type f
/etc/ld.so.cache
/etc/lvm/lvm.conf
/etc/vmware-tools/vgauth/schemas/XMLSchema.xsd
[root@localhost ~]# ls -lh /etc/ld.so.cache
-rw-r--r--. 1 root root 84K 12月  2 22:34 /etc/ld.so.cache

#查找/home目录下3天前修改的所有的txt文件,并将它们全部复制到/opt/a目录下
#方法一:“| xargs”表示将前面的结果交给后面的命令进行处理,“-i”表示逐行处理,“{}”
 表示前面查找的结果的集合
[root@localhost /]# find /home -name "*.txt" -type f -mtime +3 | xargs -i 
cp {} /opt/a
#方法二:“-exec”也是将前面的结果交由后面的命令进行处理,“{}”表示前面查找的结果
 的集合,“\;”是“-exec”结尾的格式,不能缺少
[root@localhost ~]# find /home -name "*.txt" -type f -mtime +3 -exec cp {} 
/opt/a \;

4.locate命令

locate命令相当于“find 路径 -name”的用法,相对于find命令,该命令的查询速度更快,它是在后台对系统数据库(/var/lib/locatedb)进行搜索,它的缺点是刚创建的文件无法立即查询到,原因是将文件写入系统数据库中需要时间,这个时间是一天,即系统数据库每天会自动更新一次。如果需要避免此情况,可以在使用locate命令之前,先使用updatedb命令手动更新系统数据库。命令格式如下:


locate  文件或目录

下面是locate命令的演示。


#查找带有“1.txt”名称的所有文件和目录,模糊匹配
[root@localhost ~]# locate 1.txt
/etc/brltty/brl-ts-pb65_pb81.txt
/etc/pki/nssdb/pkcs11.txt
/home/1.txt
/home/zhangsan/.cache/tracker/parser-sha1.txt
/opt/test4/1.txt
……

5.type命令

type命令其实不属于搜索命令,它用于区分一个命令是内部命令还是外部命令,查询的结果中若带有builtin,则查询命令为内部命令,否则为外部命令。外部命令可以继续细分,带有alias的是别名,带有keyword的是关键字,带有file的是外部命令。如果一个命令是外部命令,那么使用“-P”参数会显示该命令的路径,相当于which命令。命令格式如下:


type  命令字

下面是type命令的演示说明。


#cd属于内部命令
[root@localhost home]# type cd
cd is a shell builtin

#ls属于外部命令,使用选项“-P”查看命令的绝对路径
[root@localhost home]# type ls
ls is aliased to `ls --color=auto'
[root@localhost home]# type -P ls
/usr/bin/ls

#if属于shell脚本中的关键字
[root@localhost home]# type if
if is a shell keyword

2.3.7 ln命令

ln是Link的简写,ln命令用于为文件或目录创建链接文件,方便提高查找文件的效率。链接文件分为软链接文件和硬链接文件,下面分别进行介绍。

1.软链接文件

软链接又称为符号链接,相当于在Windows环境下创建快捷方式,无论修改哪个文件,另外一个文件都会跟着发生改变。删除软链接文件对原始文件无影响,反之则有影响。可以使用“ls -lhi”查看详细信息,如果为软链接文件,则在显示结果中可以看到第二列中的第一个字符为“l”,最后一列显示“->”并且显示的颜色为青色(浅蓝色)。软链接文件和源文件的索引节点号是不一样的,其命令格式如下:


ln  -s   源文件或目录   链接文件或目录

下面是创建软链接文件的演示。


#将/etc/hosts文件软链接到/opt/hosts的文件中
[root@localhost ~]# ln -s /etc/hosts /opt/hosts

#使用ls命令查看详细信息
[root@localhost ~]# ls -lhi /opt/hosts
34942400 lrwxrwxrwx. 1 root root 10 12月  6 11:05 /opt/hosts ->/etc/hosts

2.硬链接文件

硬链接文件可以理解为Windows环境下的复制文件,不同的是在使用Linux的硬链接文件时,无论修改哪个文件,另外一个文件都会发生变化,删除一个文件对另外一个文件都无影响且无法硬链接目录。区分硬链接文件也可以使用“ls -lhi”查看详细信息,第一列的索引节点号和源文件是一致的,第三列的文件数量正常情况下为1,而硬链接文件的数量是大于1的。命令格式如下:


ln  源文件  链接文件

下面创建硬链接文件的演示说明。


#将/etc/hosts文件硬链接到/opt/hardhosts文件中
[root@localhost ~]# ln /etc/hosts /opt/hardhosts

#使用ls命令查看两个文件的详细信息,注意看第一列的索引节点号和第三列的文件数量
[root@localhost ~]# ls -lhi /etc/hosts
16778618 -rw-r--r--. 2 root root 158 6月   7 2013 /etc/hosts
[root@localhost ~]# ls -lhi /opt/hardhosts
16778618 -rw-r--r--. 2 root root 158 6月   7 2013 /opt/hardhosts

注意:创建链接文件时必须在同一分区下,且必须采用绝对路径。 txC1fhQB08h01ziGaOPVb8ce96BEsEUgoNHUp2onNUaOUE83VyxLW3E4nnNz31Gc

点击中间区域
呼出菜单
上一章
目录
下一章
×