【Linux】Linux 文件与目录管理命令

来自《鸟哥的 Linux 私房菜》。

本篇结构:

  • 文件与目录管理
  • 文件内容查阅
  • 文件与目录的默认权限与隐藏权限
  • 指令与文件的搜寻

一、文件与目录管理

1.1、文件与目录的检视: ls

ls [-aAdfFhilnrRSt] 文件名或目录名称..

选项与参数:

  • -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
  • -A :全部的文件,连同隐藏文件,但不包括 . 与 … 这两个目录
  • -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
  • -f :直接列出结果,而不进行排序 (ls 默认会以文件名排序!)
  • -F :根据文件、目录等信息,给予附加数据结构,例如:
    *:代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
  • -h :将文件大小以人类较易读的方式(例如 GB, KB 等等)列出来;
  • -i :列出 inode 号码,inode 的意义下一章将会介绍;
  • -l :长数据串行出,包含文件的属性与权限等等数据;(常用)
  • -n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)
  • -r :将排序结果反向输出,例如:原本文件名由小到大,反向则为由大到小;
  • -R :连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来;
  • -S :以文件大小大小排序,而不是用文件名排序;
  • -t :依时间排序,而不是用文件名。
  • –color=never :不要依据文件特性给予颜色显示;
  • –color=always :显示颜色
  • –color=auto :让系统自行依据设置来判断是否给予颜色
  • –full-time :以完整时间模式 (包含年、月、日、时、分) 输出
  • –time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime)
    而非内容变更时间 (modification time)

1.2、复制、删除与移动: cp, rm, mv

1.2.1、cp (复制文件或目录)

cp [-adfilprsu] 来源文件(source) 目标文件(destination)

cp [options] source1 source2 source3 .... directory

选项与参数:

  • -a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
  • -d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
  • -f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
  • -i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
  • -l :进行硬式链接(hard link)的链接文件创建,而非复制文件本身;
  • -p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
  • -r :递回持续复制,用于目录的复制行为;(常用)
  • -s :复制成为符号链接文件 (symbolic link),亦即“捷径”文件;
  • -u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
  • –preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
    最后需要注意的,如果来源文件有两个以上,则最后一个目的文件一定要是“目录”才行!

1.2.2、rm (移除文件或目录)

rm [-fir] 文件或目录

选项与参数:

  • -f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
  • -i :互动模式,在删除前会询问使用者是否动作
  • -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!

1.2.3、mv (移动文件与目录,或更名)

mv [-fiu] source destination

mv [options] source1 source2 source3 .... directory

选项与参数:

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
  • -u :若目标文件已经存在,且 source 比较新,才会更新 (update)

1.3、取得路径的文件名称与目录名称 basename,dirname

basename /etc/sysconfig/network
network <== 很简单!就取得最后的文件名~
dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!

二、文件内容查阅

  • cat 由第一行开始显示文件内容
  • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
  • nl 显示的时候,顺道输出行号!
  • more 一页一页的显示文件内容
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
  • head 只看头几行
  • tail 只看尾巴几行
  • od 以二进制的方式读取文件内容!

2.1、直接检视文件内容

2.1.1、cat (concatenate)

选项与参数:

  • -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
  • -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
  • -E :将结尾的断行字符 $ 显示出来;
  • -n :打印出行号,连同空白行也会有行号,与 -b 的选项不同;
  • -T :将 [tab] 按键以 ^I 显示出来;
  • -v :列出一些看不出来的特殊字符

2.1.2、tac (反向列示)

tac 刚好是将 cat 反写过来,所以他的功能就跟 cat 相反, cat 是由“第一行到最后一行连续显示在屏幕上”,而 tac 则是“ 由最后一行到第一行反向在屏幕上显示出来 ”。

2.1.3、nl (添加行号打印)

  • -b :指定行号指定的方式,主要有两种:

    • -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    • -b t :如果有空行,空的那一行不要列出行号(默认值);
  • -n :列出行号表示的方法,主要有三种:

    • -n ln :行号在屏幕的最左方显示;
    • -n rn :行号在自己字段的最右方显示,且不加 0 ;
    • -n rz :行号在自己字段的最右方显示,且加 0 ;
  • -w :行号字段的占用的字符数。

2.2、可翻页检视

2.2.1、more (一页一页翻动)

在 more 这个程序的运行过程中,有几个按键可以按:

  • 空白键 (space):代表向下翻一页;
  • Enter :代表向下翻“一行”;
  • /字串 :代表在这个显示的内容当中,向下搜寻“字串”这个关键字;
  • :f :立刻显示出文件名以及目前显示的行数;
  • q :代表立刻离开 more ,不再显示该文件内容。
  • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

2.2.2、less (一页一页翻动)

在 more 的时候,并没有办法向前面翻, 只能往后面看,less 的用法比起 more 又更加的有弹性,支持回翻。

基本上,可以输入的指令有:

  • 空白键 :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup] :向上翻动一页;
  • /字串 :向下搜寻“字串”的功能;
  • ?字串 :向上搜寻“字串”的功能;
  • n :重复前一个搜寻 (与 / 或 ? 有关!)
  • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • g :前进到这个数据的第一行去;
  • G :前进到这个数据的最后一行去 (注意大小写);
  • q :离开 less 这个程序;

2.2.3、数据撷取 head,tail

可以将输出的数据作一个最简单的撷取,那就是取出文件前面几行 (head) 或取出后面几行 (tail) 文字的功能。 不过,要注意的是, head 与 tail 都是以“行”为单位来进行数据撷取。

head (取出前面几行):

选项与参数:

  • -n :后面接数字,代表显示几行的意思

不加上 -n ,默认只显示十行。

tail (取出后面几行):

tail 的用法跟 head 的用法差不多类似,只是显示的是后面几行。

选项与参数:

  • -n :后面接数字,代表显示几行的意思
  • -f :表示持续侦测后面所接的文件名,要等到按下[ctrl]-c才会结束tail的侦测

显示 /etc/man_db.conf 的第 11 到第 20 行:

head -n 20 /etc/man_db.conf | tail -n 10

这两个指令中间有个管线 (|) 的符号存在,这个管线的意思是:“前面的指令所输出的讯息,请通过管线交由后续的指令继续使用”的意思。

2.2.4、非纯文本文件: od

上面提到的,都是在查阅纯文本文件的内容。查阅非文本文件,例如 /usr/bin/passwd 这个可执行文件的内容时,由于可执行文件通常是 binary file ,使用上头提到的指令来读取他的内容时,会产生类似乱码的数据,这时可以利用 od 这个指令来读取。

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 ;

2.2.5、修改文件时间或创建新文件: touch

每个文件在 linux 下面都会记录许多的时间参数, 其实是有三个主要的变动时间:

  • modification time (mtime): 当该文件的“内容数据”变更时,就会更新这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔!
  • status time (ctime): 当该文件的“状态 (status)”改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间啊。
  • access time (atime): 当“该文件的内容被取用”时,就会更新这个读取时间(access)。举例来说,我们使用 cat 去读取 /etc/man_db.conf , 就会更新该文件的 atime 了。
touch [-acdmt] 文件

touch -d "2 days ago" bashrc
touch -t 201406150202 bashrc

选项与参数:

  • -a :仅修订 access time;
  • -c :仅修改文件的时间,若该文件不存在则不创建新文件;
  • -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date=“日期或时间”
  • -m :仅修改 mtime ;
  • -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]

通过 touch 这个指令,可以修订文件的日期与时间。并且也可以创建个空的文
件! 不过,要注意的是,即使复制一个文件时,复制所有的属性,但也没有办法复制 ctime 这个属性的。

touch 这个指令最常被使用的情况是:

  • 创建一个空的文件
  • 将某个文件日期修订为目前 (mtime 与 atime)

三、文件与目录的默认权限与隐藏权限

3.1、文件默认权限:umask

umask 指定 “目前使用者在创建文件或目录时候的权限默认值”。

查阅的方式有两种:

  • 一种可以直接输入 umask ,就可以看到数字体态的权限设置分数
  • 一种则是加入 -S (Symbolic) 这个选项,就会以符号类型的方式来显示出权限
root@master:~# umask
0022
root@master:~# umask -S
u=rwx,g=rx,o=rx
root@master:~# 

在默认权限的属性上,目录与文件是不一样的。x 权限对于目录是非常重要的! 但是一般文件的创建则不应该有执行的权限,因为一般文件通常是用在于数据的记录。

默认的情况如下:

  • 若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下: -rw-rw-rw-
  • 若使用者创建为“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下: drwxrwxrwx

umask 的分数指的是“该默认值需要减掉的权限!

3.2、文件隐藏属性

3.2.1、chattr (设置文件隐藏属性)

chattr [+-=][ASacdistu] 文件或目录名称

选项与参数:

  • +:增加某一个特殊参数,其他原本存在参数则不动
  • -:移除某一个特殊参数,其他原本存在参数则不动
  • = :设置一定,且仅有后面接的参数
  • A :当设置了 A 这个属性时,若有存取此文件(或目录)时,存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
  • S :一般文件是非同步写入磁盘的,如果加上 S 这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中
  • a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
  • c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存
  • d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
  • i :让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”
    对于系统安全性有相当大的助益!只有 root 能设置此属性
  • s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了!
  • u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件!
  • 注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置
  • 注意2:xfs 文件系统仅支持 AadiS 而已

3.2.2、lsattr (显示文件隐藏属性)

lsattr [-adR] 文件或目录

选项与参数:

  • -a :将隐藏文件的属性也秀出来
  • -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名
  • -R :连同子目录的数据也一并列出来

3.3、文件特殊权限: SUID, SGID, SBIT

3.3.1、Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,就被称为 Set UID,简称为 SUID 的特殊权限。

基本上 SUID 有这样的限制与功能:

  • SUID 权限仅对二进制程序(binary program)有效
  • 执行者对于该程序需要具有 x 的可执行权限
  • 本权限仅在执行该程序的过程中有效 (run-time)
  • 执行者将具有该程序拥有者 (owner) 的权限

SUID 仅可用在 binary program 上, 不能够用在 shell script 上面。shell
script 只是将很多的 binary 可执行文件叫进来执行而已!所以 SUID 的权限部分,还是得要看 shell script 调用进来的程序的设置, 而不是 shell script 本身。

3.3.2、Set GID

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID,与 SUID 不同的是,SGID 可以针对文件或目录来设置!

如果是对文件来说, SGID 有如下的功能:

  • SGID 对二进制程序有用
  • 程序执行者对于该程序来说,需具备 x 的权限
  • 执行者在执行的过程中将会获得该程序群组的支持

当一个目录设置了 SGID 的权限后,他将具有如下的功能:

  • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录
  • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组

用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

3.3.3、Sticky Bit

这个 Sticky Bit,SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:

  • 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件

3.3.4、SUID/SGID/SBIT 权限设置

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT

假设要将一个文件权限改为“-rwsr-xr-x”时,由于 s 在使用者权限中,所以是 SUID ,因此,在原先的 755 之前还要加上 4 ,也就是:“ chmod 4755 filename ”来设置。

除了数字法之外,也可以通过符号法来处理喔!其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t 。

chmod u=rwxs,go=x test

chmod g+s,o+t test

3.4、观察文件类型:file

想要知道某个文件的基本数据,例如是属于 ASCII 或者是 data 文件,或者是 binary, 且其中有没有使用到动态函数库 (share library) 等等的信息,就可以利用 file 这个指令来检阅。

选项与参数:

  • -b:列出文件辨识结果时,不显示文件名称
  • -c :详细显示指令执行过程,便于排错或分析程序执行的情形
  • -f :列出文件中文件名的文件类型
  • -F:使用指定分隔符号替换输出文件名后的默认的":"分隔符
  • -i:输出mime类型的字符串
  • -L:查看对应软链接对应文件的文件类型
  • -z:尝试去解读压缩文件的内容
  • -version:显示命令版本信息

四、指令与文件的搜寻

4.1、指令文件名的搜寻

4.1.1、which (寻找“可执行文件”)

which [-a] command

选项或参数:

  • -a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

which 指令是根据“PATH”这个环境变量所规范的路径,去搜寻“可执行文件”的文件名。若加上 -a 选项,则可以列出所有的可以找到的同名可执行文件,而非仅显示第一个而已。

which 默认是找 PATH 内所规范的目录,对于 bash 内置的命令则无能无力,可以用 type 查看。

4.2、文件文件名的搜寻

通常 find 不很常用的!因为速度慢之外, 也很操硬盘!一般都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻!

为什么呢?因为 whereis 只找系统中某些特定目录下面的文件而已,locate 则是利用数据库来搜寻文件名,当然两者就相当的快速, 并且没有实际的搜寻硬盘内的文件系统状态,比较省时间!

4.2.1、whereis (由一些特定的目录中寻找文件文件名)

whereis [-bmsu] 文件或目录名

选项与参数:

  • -l :可以列出 whereis 会去查询的几个主要目录而已
  • -b :只找 binary 格式的文件
  • -m :只找在说明文档 manual 路径下的文件
  • -s :只找 source 来源文件
  • -u :搜寻不在上述三个项目当中的其他特殊文件

whereis 为何搜寻的速度会比 find 快?因为 whereis 只找几个特定的目录而已,并没有全系统去查询之故。

whereis 主要是针对 /bin /sbin 下面的可执行文件, 以及 /usr/share/man 下面的 man page 文件,跟几个比较特定的目录来处理而已。

4.2.2、locate / updatedb

locate [-ir] keyword

选项与参数:

  • -i :忽略大小写的差异
  • -c :不输出文件名,仅计算找到的文件数量
  • -l :仅输出几行的意思,例如输出五行则是 -l 5
  • -S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
  • -r :后面可接正则表达式的显示方式

范例一:找出系统中所有与 passwd 相关的文件名,且只列出 5 个:

root@master:~# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/cron.daily/passwd
/etc/init/passwd.conf
/etc/pam.d/chpasswd

范例二:列出 locate 查询所使用的数据库文件之文件名与各数据数量:

root@master:~# locate -S
Database /var/lib/mlocate/mlocate.db:
	50,241 directories
	414,644 files
	32,970,915 bytes in file names
	11,519,786 bytes used to store database

使用 locate 来寻找数据的时候特别的快, 这是因为 locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据所
搜寻到的,所以不用直接在去硬盘当中存取数据。

这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次。因此,在用 whereis 和 locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

当然可以手动更新数据库,更新 locate 数据库的方法非常简单,直接输入“
updatedb ”就可以了! updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设置,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库文件!因为 updatedb 会去搜寻硬盘,所以当你执行 updatedb 时,可能会等待数分钟的时间。

  • updatedb:根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;
  • locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名。

4.2.3、find

find [PATH] [option] [action]

选项与参数1:

  • 1. 与时间有关的选项:共有 -atime,-ctime 与 -mtime ,以 -mtime 说明
    • -mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
    • -mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
    • -mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
    • -newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出:

find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前,
# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?
find / -mtime 3 

范例二:寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出:

find /etc -newer /etc/passwd
  • +4 代表大于等于 5 天前的文件名:ex> find /var -mtime +4
  • -4 代表小于等于 4 天内的文件文件名:ex> find /var -mtime -4
  • 4 则是代表 4-5 那一天的文件文件名:ex> find /var -mtime 4

选项与参数2:

  • 2. 与使用者或群组名称有关的参数:
    • -uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd 里面与帐号名称对应的数字
    • -gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在 /etc/group
    • -user name :name 为使用者帐号名称喔!例如 dmtsai
    • -group name:name 为群组名称喔,例如 users
    • -nouser :寻找文件的拥有者不存在 /etc/passwd 的人
    • -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!
      当自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。

范例三:搜寻 /home 下面属于 dmtsai 的文件:

find /home -user dmtsai

范例四:搜寻系统中不属于任何人的文件:

find / -nouser

如果想要找出某个使用者在系统下面创建了啥咚咚,使用上述的选项与参数,就能够找出来! 至于那个 -nouser 或 -nogroup 的选项功能中,除了你自行由网络上面下载文件时会发生之外, 如果将系统里面某个帐号删除了,但是该帐号已经在系统内创建很多文件时,就可能会发生无主孤魂的文件存在! 此时你就得使用这个 -nouser 来找出该类型的文件!

选项与参数3:

  • 3. 与文件权限及名称有关的参数:
    • -name filename:搜寻文件名称为 filename 的文件;
    • -size [±]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有:c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB还要大的文件,就是“ -size +50k ”;
    • -type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c),目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性;
    • -perm mode :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod 的属性值,举例来说, -rwsr-xr-x 的属性为 4755 ;
    • -perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件,举例来说,要搜寻 -rwxr–r-- ,亦即 0744 的文件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r-- 的属性了;
    • -perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,搜寻 -rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw… 的属性存在!

范例五:找出文件名为 passwd 这个文件:

find / -name passwd

范例五-1:找出文件名包含了 passwd 这个关键字的文件:

find / -name "*passwd*"

范例六:找出 /run 目录下,文件类型为 Socket 的文件名有哪些:

find /run -type s

范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性:

find / -perm /7000

选项与参数4:

  • 4. 额外可进行的动作:
    • -exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果;
    • -print :将结果打印到屏幕上,这个动作是默认动作!

范例八:将上个范例找到的文件使用 ls -l 列出来:

find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,
# 所以仅能使用 ls -l 不可以使用 ll !注意注意!

该范例中特殊的地方有 {} 以及 ; 还有 -exec 这个关键字,这些东西的意义为:

  • {} 代表的是“由 find 找到的内容”,如上图所示,find 的结果会被放置到 {} 位置中;
  • -exec 一直到 ; 是关键字,代表 find 额外动作的开始 (-exec) 到结束 (;) ,在这中间的就是 find 指令内的额外动作。 在本例中就是“ ls -l {} ”啰!
  • 因为“ ; ”在 bash 环境下是有特殊意义的,因此利用反斜线来跳脱。

find 不但可以指定搜寻的目录(连同次目录),并且可以利用额外的选项与参数来找到最正确的文件名! 不过由于 find 在寻找数据的时后相当的操硬盘!所以没事情不要使用 find!有更棒的指令可以取代,那就是上面提到的 whereis 与 locate 。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页