目录
(3)mkdir (make directory,建立新目录 )
[(3)截取文件内容 head/tail](#(3)截取文件内容 head/tail)
[(4)非纯文本文件的读取:od 命令](#(4)非纯文本文件的读取:od 命令)
在 Linux 中操作与管理文件及目录,需要在不同的目录间进行切换、还要能够建立与删除目录、建立与删除文件,同时还能够寻找文件、查看文件内容等等,这篇文章将介绍以上这些操作的基本命令。
1、目录的切换、新增和删除
在 Linux 中是有一些特殊的目录的,下面这些就是比较特殊的目录,这个得要用力地记下来才行:
. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表目前使用者身份所在的家目录
~account 代表account这个使用者的家目录(account是个账号名称)~account
需要注意的是:在所有目录下面都会存在 "." 和 ".." 这两个目录,不信?你在任意一个目录下输入命令:"ll -a" 就知道了。
下面是几个常见的处理目录的命令:
cd: 切换目录
pwd: 显示当前目录
mkdir: 建立一个新目录
rmdir: 删除一个空目录
++(1)cd (change directory,切换目录)++
cd 是 Change Directory 的缩写,用来切换工作目录的命令,比如:"cd ~"、"cd -"、"cd .." 等等,比较简单,基本都会。
++(2)pwd (显示目前所在的目录)++
pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的命令。
[root@swadian ~]# pwd [-P]
选项与参数:-P:显示出真正的路径,而非使用链接(link)路径
这里特别说一下 -P 这个参数,链接路径和真实路径有什么区别呢?在 CentOS 7.x 中,/var/mail 是 /var/spool/mail 的链接文件,我们进入 /var/mail 这个目录执行以下命令即可看出路径上的区别:
[root@localhost mail]# pwd
/var/mail
[root@localhost mail]# pwd -P
/var/spool/mail
++(3)mkdir (make directory,建立新目录 )++
创建新目录命令,命令语法如下:
[root@swadian ~]# mkdir [-mp] 目录名称
选项与参数:
-m : 设置文件的权限。直接设置,不使用默认权限(umask)。
-p : 帮助你直接将所需要的目录(包含上层目录)递归创建
++(4)rmdir (删除"空"的目录)++
使用 rmdir 删除空目录,目录需要一层一层的删除才行,而且被删除的目录里面不能存在其他的目录或文件,这也是所谓的空目录(empty directory)的意思。一般情况下,使用 rm 命令会比较方便。
2、文件与目录查看:ls
ls 命令算是 Linux 系统当中用得最多的命令,默认显示非隐藏文件的文件名、然后按文件名进行排序 。以下是 ls 命令的使用语法://一般情况下,常使用 ll
[root@swadian ~]# ls [-选项] 文件名或目录名称
选项与参数:
-a :全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用);
-d :仅列出目录本身,而不是列出目录内的文件数据(常用);
-l :详细信息显示,包含文件的属性与权限等数据(常用);
3、复制、删除与移动:cp/rm/mv
我们都知道,复制文件可以使用 cp(copy) 命令,不过 cp 命令除了单纯的复制外,还具有建立链接文件(就是快捷方式),比对两文件的新旧而予以更新,以及复制整个目录等的功能。下边就来介绍一下:
++(1)cp (复制文件或目录)++
[root@swadian ~]# cp [-选项] 源文件(source) 目标文件 (destination)
[root@swadian ~]# cp [-选项] sourcel source2 source3... directory #一次性复制多个文件
选项与参数:
-a : 相当于all的意思,将文件的所有特性都一起复制(常用);
-i : 若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用);
-p : 连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r : 递归复制,用于目录的复制操作(常用);
-l : 进行硬链接(hard link)的链接文件建立,而非复制文件本身;
-s : 复制成为符号链接文件(symbolic link),亦即"快捷方式"文件;
如下,使用 cp 命令在test001 目录下一次性复制 3 个文件到test002目录中:
[root@localhost test001]# cp demo1.txt demo2.txt demo3.txt ../test002
[root@localhost test001]# ll ../test002
total 0
-rw-r--r--. 1 root root 0 Jan 26 00:46 demo1.txt
-rw-r--r--. 1 root root 0 Jan 26 00:46 demo2.txt
-rw-r--r--. 1 root root 0 Jan 26 00:46 demo3.txt
这里要特别说明下 -a 参数,默认情况下,cp 命令复制文件时会修改文件的某些属性,比如权限和创建时间 ,在使用 -a 参数后,将复制这些文件的所有属性(整个文件完全一模一样),示例如下,将 test001 目录的文件复制到当前目录中(test002):
[root@localhost test002]# cp -a ../test001/root.txt . #使用-a复制
[root@localhost test002]# cp ../test001/test1.txt . #默认复制
[root@localhost test002]# ll ../test001 #001目录(源目录)
total 4
-rw-r--r--. 1 root swadian 20 Jan 23 01:33 root.txt
-rw-rw-r--. 1 swadian swadian 0 Jan 26 00:55 test1.txt
[root@localhost test002]# ll #002目录(当前目录)
total 4
-rw-r--r--. 1 root swadian 20 Jan 23 01:33 root.txt #文件与test001的文件一模一样
-rw-r--r--. 1 root root 0 Jan 26 01:05 test1.txt #变动了权限和创建时间
上边谈到, cp 命令还可以创建链接文件,使用 -l 及 -s 都会建立链接文件(link file),不过这两种链接文件却有不一样的情况。 -l 是创建硬链接(hard link),-s 则是符号链接(symbolic link)。如下所示,使用 cp 命令将 test001 目录的 root.txt 文件复制到当前目录中(test002):
[root@localhost test002]# cp -l ../test001/root.txt ./root_hlink.txt #创建硬链接
[root@localhost test002]# cp -s ../test001/root.txt ./root_slink.txt #创建符号连接
[root@localhost test002]# ll #当前目录(test002)
total 4
-rw-r--r--. 2 root swadian 20 Jan 23 01:33 root_hlink.txt #硬链接
lrwxrwxrwx. 1 root root 19 Jan 26 01:37 root_slink.txt -> ../test001/root.txt #符号连接
[root@localhost test002]# ll ../test001 #源目录
total 4
-rw-r--r--. 2 root swadian 20 Jan 23 01:33 root.txt
所谓的符号链接,就是一个快捷方式 ,这个快捷方式会链接到 ../test001/root.txt 文件。所以你会看到文件名右侧会有个指向*(->)* 的符号。至于 root_hlink.txt 文件则与 root.txt文件的属性与权限完全一模一样,与尚未进行链接前的差异则是第二栏的 link 数由 1 变成了 2,因为硬链接涉及到 inode 的相关知识,我们将在后续详细介绍。
++(2)rm (删除文件或目录)++
rm 为删除的命令(remove),通常在 Linux 系统下,为了怕文件被误删,默认加入了 -i 这个选项,以下是 rm 命令的使用方式:
[root@swadian~]# rm [-fir] 文件或目录
选项与参数:
-f : 就是 force 的意思,忽略不存在的文件,不会出现警告信息
-i : 交互模式,在删除前会询问使用者是否操作。
-r : 递归删除,最常用于目录的删除。(非常危险的选项,谨慎使用)
++(3)mv (移动文件与目录,或重命名)++
mv 为移动的命令(move),以下是 mv 命令的使用方式:
[root@swadian ~]# mv [-fiu] source destination
[root@swadian ~]# mv [options] sourcel source2 source3... directory #如果有多个源文件或目录,则最后一个目标文件一定是[目录]
选项与参数:
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i : 若目标文件(destination)已经存在时,就会询问是否覆盖。
-u : 若目标文件已经存在,且source比较新,才会更新(update)。
虽然可以使用 mv 来修改一个文件的文件名。不过,在 Linux 中有个 rename 命令,可以用来更改大量文件的文件名,你也可以利用 man rename 来查看一下这个命令的用法。
4、文件内容查看
如果我们要查看一个文件的内容时,该怎么办呢?在 Linux 中针对文件的不同查看需求提供了不同的命令,以下是 linux 中查看文件的一些指令:
- cat 由第一行开始显示文件内容。
- tac 从最后一行开始显示,可以看出tac 是 cat 的倒着写。
- nl 显示的时候,同时输出行号。
- more 一页一页地显示文件内容。
- less 与 more 类似,但是比 more 更好的是,它可以往前翻页。
- head 只看前面几行。//头部
- tail 只看后面几行。//尾巴
- od 以二进制的方式读取文件内容。
++(1)直接查看文件内容:cat/tac/nl++
当一个文件内容不是很多,文件内容可以一次性显示到屏幕上面时,可直接使用 cat/tac/nl 命令来查看文件内容:
++cat 命令:++
你可能会疑惑,Linux 里面有"猫"命令?不是的,cat 是*Concatenate(串联)*的简写,主要的功能是将一个文件的内容连续打印在屏幕上面。cat 命令使用的语法如下:
[root@swadian ~]# cat [-bn] 文件
选项与参数:
-b 列出行号,仅针对非空白行做行号显示,空白行不标行号;
-n 打印出行号,连同空白行也会有行号,与-b 的选项不同;
++nl 命令:++
nl 可以将输出的文件内容自动地加上行号,其默认的结果与 cat -n 有点不太一样,nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等的功能。
++(2)翻页查看文件内容:more/less++
不过,文件内容较多,不能一次性将数据显示到屏幕上面时,我们又该怎么办呢?Linux 提供了 more 与 less 命令,通过这两个命令,我们可以一页一页的查看文件内容,不用担心前面的数据看不到。
++more 命令:++
使用 more 命令可以一页一页翻动文件内容:
[swadian@localhost ~]$ more swadian.txt
Spring makes it easy to create Java enterprise applications. It provides everything you need to embrace the Java language in an enterprise environment, with s
upport for Groovy and Kotlin as alternative languages on the JVM, and with the flexibility to create many kinds of architectures depending on an application's
needs. As of Spring Framework 6.0, Spring requires Java 17+.
//省略内容...
A note about modules: Spring's framework jars allow for deployment to JDK 9's module path ("Jigsaw"). For use in Jigsaw-enabled applications, the Spring Frame
work 5 jars come with "Automatic-Module-Name" manifest entries which define stable language-level module names ("spring.core", "spring.context", etc.) indepen
dent from jar artifact names (the jars follow the same naming pattern with "-" instead of ".", e.g. "spring-core" and "spring-context"). Of course, Spring's f
ramework jars keep working fine on the classpath on both JDK 8 and 9+.
--More--(27%)
当 more 后面接的文件内容行数大于屏幕输出的行数时,在最后一行会显示出目前显示的百分比,此时,可以使用如下命令进行你想要的下一步操作:
- 空格键 (space):代表向下翻一页;
- Enter:代表向下翻一行;
- / 字符串:代表在这个显示的内容当中,向下查找字符串这个关键词
- :f:立刻显示出文件名以及目前显示的行数;
- q:代表立刻离开 more,不再显示该文件内容
- b 或 [ctrl]-b:代表往回翻页,不过这操作只对文件有用,对管道无用
++less 命令:++
less 的用法比起 more 命令更加丰富,使用 less 命令时,可以很方边的使用 [pageup]、[pagedown] 等按键来往前往后翻看文件。在使用 less 命令查看文件内容时,可以使用如下命令进行操作:
- 空格键:向下翻动一页
- [pagedown]:向下翻动一页
- [pageup]:向上翻动一页
- /字符串:向下查找字符串的功能
- ?字符串:向上查找字符串的功能
- n:重复前一个查找 (与 / 或 ? 有关)
- N:反向的重复前一个查找 (与 / 或 ? 有关)
- g:前进到这个数据的第一行
- G:前进到这个数据的最后一行去 (注意大小写)
- q:离开 less 这个程序。
如下,是使用 less 命令查看文件内容后,使用 "/字符串" 查找 "Spring" 字符串的示例:
++(3)截取文件内容 head/tail++
当一个文件内容太多,但我们又只需要获取文件中的几行时,就可以使用 head 或者 tail 命令来完成此操作。head 用来取出文件前面几行,tail 用来取出后面几行。需要注意的是,head 与 tail 都是以"行"为单位来进行数据截取的。
++head 命令:++
head 的英文意思就是"头",用来显示出一个文件的前几行,-n 选项用来指定需要显示的行数,若无 -n 选项时,head 命令默认只显示十行。
这里需要注意的是,-n 选项的数字如果为负数时,例如:-n -100,代表列出前面所有行数,但不包括后面 100 行。示例如下所示:
[swadian@localhost ~]$ head -n 5 swadian.txt //显示前5行
this is my file !
Spring Framework Overview
Spring makes it easy to create Java enterprise applications.
It provides everything you need to embrace the Java language in an enterprise environment
with support for Groovy and Kotlin as alternative languages on the JVM
[swadian@localhost ~]$ head -n -94 swadian.txt //不显示后边94行(测试文件内容共95行)
this is my file !
++tail 命令:++
tail 命令用来取出一个文件内容的后面几行,其使用语法如下:
[root@swadian~]# tail [-n number] 文件
选项与参数:
-n: 后面接数字,代表显示几行的意思
-f: 表示持续刷新显示后面所接文件中的内容,要等到按下[ctrl]-c才会结束
++(4)非纯文本文件的读取:od 命令++
如果我们需要查看的是非纯文本文件的内容,那么使用上边纯文本查看的命令就会产生乱码,所以我们又该如何去读取这些信息呢?比如,需要读取 /usr/bin/passwd 这个执行文件中的内容时,又该怎么办呢?
Linux 系统提供了 od 命令来支持非纯文本文件的内容读取,使用语法如下:
[root@swadian ~]# od [-t TYPE] 文件
选项或参数:
-t: 后面可以接各种【类型(TYPE)】的输出,例如:
a: 利用默认的字符来输出;
c: 使用ASCII字符来输出;
d[size]: 利用十进制(decimal)来输出数据,每个整数占用size Bytes;
f[size]: 利用浮点数值(floating)来输出数据,每个数占用size Bytes;
o[size]: 利用八进制(octal)来输出数据,每个整数占用size Bytes;
x[size]: 利用十六进制( hexadecimal)来输出数据,每个整数占用size Bytes;
使用示例如下:
[swadian@localhost ~]$ od -t c /usr/bin/passwd
#省略...
0044700 v e \0 s t a t u s \0 s t d i n \0
0044720 H e l p o p t i o n s : \0 [ O
0044740 P T I O N . . . ] < a c c o u
0044760 n t N a m e > \0 % s : b a d
#省略...
++(5)修改文件时间或创建新文件:touch++
Linux 中的文件一般具有三个主要的变动时间,分别是以下三个时间:
++修改时间(modification time,mtime):++
当该文件的【内容数据】变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限。
++状态时间(status time,ctime):++
当该文件的【状态(status)】改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。
++读取时间(access time,atime):++
当【该文件的内容被读取】时,就会更新这个读取时间 (access),举例来说,我们使用 cat 去读取 /etc/man_db.conf,此时就会更新该文件的 atime。
在默认的情况下,Is 显示出来的是该文件的 mtime,也就是这个文件的内容上次被修改的时间。那么,如何查看这三个时间呢?如下所示,依次执行如下四条命令:
[swadian@localhost ~]$ date;ls -l /etc/man_db.conf;ls -l --time=atime /etc/man_db.conf;ls -l --time=ctime /etc/man_db.conf
Mon Jan 29 22:28:01 PST 2024 #当前时间
-rw-r--r--. 1 root root 5171 Oct 30 2018 /etc/man_db.conf #修改时间 mtime
-rw-r--r--. 1 root root 5171 Jan 29 19:24 /etc/man_db.conf #读取过内容时间 atmin
-rw-r--r--. 1 root root 5171 Jan 18 23:51 /etc/man_db.conf #更新过状态时间 ctime
注:以上将四个命令同时依序执行,命令中间用分号【;】隔开。Linux 中【;】代表连续命令的执行。
Linux 中文件的时间是很重要的,因为,如果文件的时间错误的话,可能会造成某些程序无法顺利的运行。++那么万一我发现了一个文件的时间有问题,又该如何把该文件的时间修改正确呢?++
此时,就需要用到【touch】这个命令了。【touch】命令的使用语法如下:
[root@swadian ~]# touch [-acdmt] 文件
选项与参数:
-a: 仅自定义access time;
-c: 仅修改文件的时间,若该文件不存在则不建立新文件;
-d: 后面可以接欲自定义的日期而不用目前的日期,也可以使用--date="日期或时间";
-m: 仅修改mtime;
-t: 后面可以接欲自定义的时间而不用目前的时间,格式为[YYYYMMDDhhmm];
使用示例如下:
[swadian@localhost test001]$ touch -m test001.txt #修改mtime
[swadian@localhost test001]$ ll
total 4
-rw-rw-r--. 1 swadian swadian 0 Jan 29 23:03 test001.txt
通过 touch 这个命令,我们可以轻易地自定义文件的日期与时间,并且也可以建立一个空文件。一般情况下,在文件的属性中,我们看重的还是 mtime。最后,总结下 touch 这个命令最常被使用的情况:
- 建立一个空文件
- 将某个文件日期自定义为目前时间(mtime与atime)
5、命令与文件的查找
++(1)脚本文件(命令文件)的查找:which++
在 Linux 中有许多的命令,每一个命令都对应一个脚本文件(Linux 中一切皆文件),那么这些命令对应的文件放在哪里呢?举例来说,Is 这个常用的命令放在哪里?可以通过 which 命令来查找。示例如下:
[swadian@localhost /]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
which 命令的使用语法如下:
[root@swadian~]# which [-a] command
选项或参数:
-a: 将所有由PATH目录中可以找到的命令均列出,而不止第一个被找到的命令名称。
which 命令是根据【PATH】这个环境变量所规范的路径,去查找执行文件的文件名。若加上 -a 选项,则可以列出所有的可以找到的同名执行文件。
注意:如果命令文件不在 PATH 目录中,那么 which 是找不到的,比如查找:history 命令。
++(2)文件查找:find/whereis/locate++
Linux中提供了一些文件查找的命令,比如:find、whereis、locate命令。通常 find 命令不很常用,因为速度慢还影响硬盘性能。一般在 whereis 或是 locate 查找不到的情况下,才会使用 find 来查找。
++whereis 命令:++
whereis 命令只会从一些特定的目录中去查找文件,这也是 whereis 命令比 find 快的原因,whereis 的使用语法如下:
[root@swadian~]# whereis [-bmsu] 文件或目录名
选项与参数:
-l: 可以列出whereis会去查询的几个主要目录;
-b: 只找binary(二进制)格式的文件;
-m: 只找在说明文件manual路径下的文件;
-S: 只找 source源文件;
-u: 查找不在上述三个项目当中的其他特殊文件;
使用示例如下:
[swadian@localhost /]$ whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
whereis 查找主要是针对 /bin/sbin下面的执行文件,以及 /usr/share/man下面的 man page文件,还有几个比较特定的目录而已,所以查找速度会比较快。想要知道 whereis 到底查了哪些目录?可以使用 whereis -l 命令进行查看。
++locate 命令:++
locate 命令的使用语法如下:
[root@swadian ~]# locate [-ir] keyword
选项与参数:
-i: 忽略大小写的差异;
-c: 不输出文件名,仅计算找到的文件数量;
-l: 仅输出几行的意思,例如输出五行则是-l 5;
-S: 输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等;
-r: 后面可接正则表达式的显示方式;
使用locate 来寻找数据也特别快,这是因为locate 寻找的数据是由已建立的数据库 */var/lib/mlocate/*里面的数据所查找到的,因此不用直接再去硬盘当中读取数据。
++使用 locate 命令的限制:++ 数据库的建立默认是在每天执行一次(每个 Linux 发行版都不同,CentOS 7.x 是每天更新数据库一次),所以当你新建立起来的文件,却还在数据库更新之前查找该文件,那么 locate 会告诉你【找不到】。//使用限制
所以,有时候需要手动去更新 locate 数据库,方法非常简单,直接输入【updatedb】
就可以了。updatedb 命令会去读取 /etc/updatedb.conf 这个配置文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就更新整个数据库文件。因为 updatedb 会去查找硬盘,所以当你执行 updatedb 时,可能会等待数分钟的时间。
- updatedb:根据 /etc/updatedb.conf 的设置去查找系统硬盘内的文件,并更新 /var/lib/mlocate 内的数据库文件。
- locate:依据 /var/lib/mlocate 内的数据库记录,找出用户所输入关键词的文件名。
++find 命令:++
find 命令的使用语法如下:
[root@swadian~]# find [PATH] [option] [action]
(1)与时间有关的选项与参数
选项与参数:与时间有关的选项,共有-atime、-ctime与-mtime,以-mtime说明。
-mtime n:n为数字,意义为在n天之前的【一天之内】被修改过内容的文件;
-mtime +n:列出在n天之前(不含n天本身)被修改过内容的文件;
-mtime -n:列出在n天之内(含n天本身)被修改过内容的文件;
-newer file: file为一个存在的文件,列出比file还要新的文件;
范例一:将过去系统上面24小时内有修改过内容(mtime)的文件列出。
[root@swadian~]# find / -mtime 0
#那个0是重点。0代表目前的时间,所以,从现在开始到24小时前,
#有变动过内容的文件都会被显示。那如果是三天前那一天的24小时内?
#find/ -mtime 3有变动过的文件都被显示的意思。
范例二:寻找/etc下面的文件,如果文件日期比/etc/passwd新就列出。
[root@swadian~]# find /etc -newer /etc/passwd
#-newer用在辨别两个文件之间的新旧关系是很有用的。
(2)与使用者或用户组名称有关的参数
选项与参数:
-uid n:n为数字,这个数字是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd里面与账号名称对应的数字
-gid n:n为数字,这个数字是用户组名称的ID,亦即GID,这个GID记录在/etc/group
-user name: name为使用者账号名称。例如swadian;
-group name: name为用户组名称,例如root;
-nouser:查找文件的拥有者不在/etc/passwd中;
-nogroup:查找文件的拥有用户组不存在于/etc/group的文件.
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的。在这个时候,就可以使用-nouser与-nogroup查找。
范例一:查找/home下面属于swadian的文件。
[root@swadian ~]# find /home -user swadian
#这个东西也很有用的,当我们要找出任何一个用户在系统当中的所有文件时,
#就可以利用这个命令将属于某个用户的所有文件都找出来。
范例二:查找系统中不属于任何人的文件。
[root@swadian~]# find / -nouser
#通过这个命令,可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何用户的文件时,
#不要太紧张,那有时候是正常的,尤其是你曾经以源代码自行编译软件时。
除了由网络上面下载文件时会发生无属主之外,如果将系统里面某个账号删除了,但是该账号已经在系统内放了很多文件时,也可能会产生无属主的文件。此时就得使用这个 -nouser 来找出该类型的文件。//无属主文件
(3)与文件权限及名称有关的参数
选项与参数:
-name filename:查找文件名称为filename的文件;
-size [+-]SIZE:查找比SIZE还要大(+)或小(-)的文件。这个SIZE的规格有:
c:代表Bytes,k:代表1024Bytes。所以,要找比50KB还要大的文件,就是【-size+50k】
-type TYPE:查找文件的类型为TYPE的,类型主要有:
一般正规文件(f),设备文件(b,c),日录(d),链接文件(l),socket(s),及FIFO(p)等属性。
-perm mode:查找文件权限【刚好等于】mode的文件,
这个mode为类似chmod的属性值,举例来说,-rwxr-xr-x的属性为0755.
范例一:找出文件名为passwd这个文件。
[root@swadian ~]# find / -name passwd
范例二:找出文件名包含了passwd这个关键字的文件。
[root@swadian~]# find / -name "*passwd*"
#利用这个-name可以查找文件名。默认是完整文件名,如果想要找关键字,
#可以使用类似*的任意字符来处理。
范例三:找出/run目录下,文件类型为socket的文件名有哪些?
[root@swadian ~]# find /run -type s
#这个-type的属性也很有帮助。尤其是要找出那些怪异的文件。
#例如socket与FIFO文件,可以用find /run -type p 或 -type s来找
(4)额外可进行的操作
选项与参数:
-exec command: command为其他命令,-exec后面可再接额外的命令来处理查找到的结果。
-print: 将结果打印到屏幕上,这个操作是默认操作。
范例一:将找到的文件使用ls -l列出来。
[root@swadian ~]# find / -name passwd -exec ls -l {} \;
#注意,那个-exec后面的[ls -l]就是额外的命令,命令不支持命令别名,所以仅能使用ls -l,不可以使用ll
范例二:找出系统中,大于1MB的文件。
[root@swadian ~]# find / -size +1M
find 的特殊功能就是能够进行额外的操作(action)。
在【将找到的文件使用 ls -l 列出来】范例中有 {} 以及 \; 还有 -exec 关键词,这些特殊东西的意义为:
- {} 代表的是由 find 找到的内容,在上例中,find 的结果会被放置到 {} 位置中。
- -exec 一直到 \; 是关键词,代表 find 额外操作的开始(-exec)到结束(\;),在这中间的就是 find 命令内的额外操作。在本例中就是[ Is -l ]
- 因为【;】在bash 环境下是有特殊意义的,因此利用反斜杠来转义
find 命令不但可以指定查找的目录,还可以利用额外的选项与参数来找到最正确的文件名。不过由于 find 在查找数据的时候相当消耗硬盘资源,所以没事不要使用 find。在进行文件查找时,优先使用上面提到的 whereis 与 locate。
至此,全文结束。