鸟哥的linux私房菜阅读笔记--Linux 的文件权限与目录配置(2)

Linux 的文件权限与目录配置

目录

Linux 的文件权限与目录配置

1.Linux 用户身份与群组记录的文件

2.Linux的文件属性

3.root的权限

4.如何改变文件属性与权限

5.目录与文件之权限意义

6.Linux目录配置

7.绝对路径与相对路径

8.目录的相关操作

9.执行文件路径的变量: $PATH

10.执行哪个链接档的命令

11.ls相关的命令

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

13.系统档名

14.取得路径的文件名与目录名称

15.文件内容的阅读

16.修改文件时间或建置新档: touch

17.文件的属性

18.chattr,lsattr(设置和查阅文件的隐藏属性)

19.文件的特殊权限SUID, SGID, SBIT

20.file观察文件的类型

21.脚本文件名的搜寻

 22.文件档名的搜寻(whereis,locate,find)


1.Linux 用户身份与群组记录的文件

     添加用户到组中。usermode -G zzyh zyh

      所有的系统上的账号与一般身份使用者,还有那个root 的相关信息,都是记录在/etc/passwd 这个文件内的。个人的密码则是记录在/etc/shadow 这个文件下。此外,Linux 所有的组名都纪录在/etc/group 内!这三个文件可以说是Linux 系统里面账号、密码、群组信息的集中地啰! 不要随便删除这三个文件啊!

2.Linux的文件属性

第一个字符代表这个文件是『目录、文件或链接文件等等』:
o 当为[ d ]则是目录,例如上表档名为『.config』的那一行;
o 当为[ - ]则是文件,例如上表档名为『initial-setup-ks.cfg』那一行;
o 若是[ l ]则表示为连结档(link file);
o 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
o 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

       连结数的概念:每个文件都会将他的权限与属性记录到文件系统的i-node 中,不过,我们使用的目录树却是使用文件名来记录, 因此每个档名就会连结到一个 i-node 啰!这个属性记录的,就是有多少不同的档名连结到相同的一个i-node 号码去就是了。

      显示完整的时间格式,可以利用ls 的选项,亦即:『ls -l --full-time』就能够显示出完整的时间格式了!包括年、月、日、时。

3.root的权限

     root 基本上是不受系统的权限所限制的, 所以无论文件权限为何,预设root 都可以存取喔!

4.如何改变文件属性与权限

  1. chgrp :改变文件所属群组      要被改变的组名必须要在/etc/group 文件内存在才行,否则就会显示错误!
  2. chown :改变文件拥有者        用户必须是已经存在系统中的账号,在/etc/passwd 这个文件中有纪录的用户名称才能变。
  3. chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性  

chown 还可以顺便直接修改群组的名称!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者,直接加上-R 的选项即可。

其中的【:】可以替换为【.】,此外chown可以只替换群组,示例:『chown .sshd initial-setup-ks.cfg』

chmod文件权限的改变方法:

     (1)数字类型改变文件权限r:4 w:2 x:1

     (2)符号类型改变文件权限

5.目录与文件之权限意义

    对于文件:在Linux 底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的!

    对于目录:r 可以使用 ls 显示目录内容,w建立删除和更改文件,x进入目录。其中w的权限比较重要。

6.Linux目录配置

FHS(Filesystem Hierarchy Standard)主要目的是希望让使用者可以了解到已安装软件通常放置于哪个目录下。将目录定义成为四种交互作用的形态

  1. 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
  2. 不可分享的:自己机器上面运作的装置文件或者是与程序有关的socket 文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  3. 不变的:有些数据是不会经常变动的,跟随着distribution 而不变动。例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  4.  可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。

FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

  1.  / (root, 根目录):与开机系统有关;FHS 标准建议:根目录(/)所在分区槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。
  2. /usr (unix software resource):与软件安装/执行有关;
  3. /var (variable):与系统运作过程有关。

7.绝对路径与相对路径

  1. 绝对路径:由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc;
  2.  相对路径:相对于目前路径的文件名写法。例如 ./home/dmtsai 或../../home/dmtsai/ 。反正开头不是/就属于相对路径的写法

. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前用户身份』所在的家目录
~account 代表 account 这个用户的家目录(account 是个账号名称)

8.目录的相关操作

  1. cd:变换目录
  2. pwd:显示当前目录
  3. mkdir:建立一个新的目录
  4. rmdir:删除一个空的目录

# pwd [-P]
-P :显示出确实的路径,而非使用链接 (link) 路径。

# mkdir [-mp] 目录名称
选项与参数:
-m :配置文件案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上层目录)递归建立起来!

# mkdir -p test1/test2/test3/test4        # mkdir -m 711 test2

# rmdir [-p] 目录名称
选项与参数:
-p :连同『上层』『空的』目录也一起删除

# rmdir -p test1/test2/test3/test4     # 不过要注意的是,这个 rmdir 仅能『删除空的目录』!所有目录下的东西都杀『rm -r test 』

9.执行文件路径的变量: $PATH

[root@study ~]# echo $PATH       echo 有『显示、印出』的意思,而PATH 前面加的$ 表示后面接的是变量,所以会显示出目前的PATH

添加新的路径到PATH: # PATH="${PATH}:/root"

  1.  不同身份使用者预设的PATH 不同,默认能够随意执行的指令也不同(如root 与dmtsai);
  2.  PATH 是可以修改的;
  3. 使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻PATH 来的正确;
  4. 指令应该要放置到正确的目录下,执行才会比较方便;
  5. 本目录(.)最好不要放到PATH 当中。

10.执行哪个链接档的命令

找出 ${PATH} 里面哪个目录先被查询,则那个目录下的指令就会被先执行

11.ls相关的命令

[root@study ~]# ls [-aAdfFhilnrRSt] 文件名或目录名称..
[root@study ~]# ls [--color={never,auto,always}] 文件名或目录名称..
[root@study ~]# ls [--full-time] 文件名或目录名称..

选项与参数:
-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)

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

cp这个指令的用途可多了~ 除了单纯的复制之外,还可以建立连结档(就是快捷方式),比对两文件的新旧而予以更新, 以及复制整个目录
mv (move)移动目录与文件, 这个指令也可以直接拿来作更名(rename)
rm (remove)移除

[root@study ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@study ~]# 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 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行

某些需要特别注意的特殊权限文件, 密码文件(/etc/shadow) 以及一些配置文件,就不能直接以cp 来复制,而必须要加上-a 或者是-p .

[root@study tmp]# ls -l bashrc
-rw-r--r--. 1 root root 176 Jun 11 19:01 bashrc <==先观察一下文件情况
[root@study tmp]# cp -s bashrc bashrc_slink
[root@study tmp]# cp -l bashrc bashrc_hlink
[root@study tmp]# ls -l bashrc*
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc <==与源文件不太一样了!
-rw-r--r--. 2 root root 176 Jun 11 19:01 bashrc_hlink
lrwxrwxrwx. 1 root root 6 Jun 11 19:06 bashrc_slink -> bashrc

-l是实体链接,-s是符号链接(快捷方式)。 

 [root@study tmp]# cp ~/.bashrc ~/.bash_history /tmp
# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!

在复制时,你必须要清楚的了解到:

  1. 是否需要完整的保留来源文件的信息?
  2. 来源文件是否为连结档(symbolic link file)?
  3. 来源档是否为特殊的文件,例如FIFO, socket 等?
  4. 来源文件是否为目录?

rm 

 [root@study ~]# rm [-fir] 文件或目录
选项与参数:
-f :就是 force 的意思,忽略不存在的文件,不会出现警告讯息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!! 

[root@study tmp]# \rm -r /tmp/etc
# 在指令前加上反斜杠,可以忽略掉 alias 的指定选项喔(不然一直会询问y/n)!至于 alias 我们在bash 再谈!
# 拜托!这个范例很可怕!你不要删错了!删除 /etc 系统是会挂掉的!

 

[root@study ~]# mv [-fiu] source destination
[root@study ~]# mv [options] source1 source2 source3 .... directory
选项与参数:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比较新,才会更新 (update)

13.系统档名

档名最好不要使用"-" 号开头, 因为 "-" 后面接的是选项,因此,单纯的使用『rm -aaa- 』系统的指令就会误判啦! 那如果使用后面会谈到的正规表示法时,还是会出问题的!所以,只能用避过首位字符是"-" 的方法啦!就是加上本目录『./ 』即可!如果man rm 的话,其实还有一种方法,那就是『rm -- -aaa- 』也可以啊! 

14.取得路径的文件名与目录名称

[root@study ~]# basename /etc/sysconfig/network
network <== 很简单!就取得最后的档名~
[root@study ~]# dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!

15.文件内容的阅读

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

cat

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

比较少用 cat 啦!文件内容的行数超过40 行以上,来不及在屏幕上看到结果! 所以,配合等一下要介绍的more 或者是less 来执行比较好

nl

[root@study ~]# nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ;
-n rz :行号在自己字段的最右方显示,且加 0 ;
-w :行号字段的占用的字符数。 

more

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

 less

  1.  空格键 :向下翻动一页;
  2.  [pagedown]:向下翻动一页;
  3.  [pageup] :向上翻动一页;
  4.  /字符串 :向下搜寻『字符串』的功能;
  5. ?字符串 :向上搜寻『字符串』的功能;
  6. n :重复前一个搜寻 (与 / 或 ? 有关!)
  7. N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  8.  g :前进到这个资料的第一行去;
  9. G :前进到这个数据的最后一行去 (注意大小写);
  10. q :离开 less 这个程序;

 head

[root@study ~]# head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思 

『head -n -100 /etc/man_db.conf』就会列出前面31 行,后面100 行不会打印出来了。

tail

[root@study ~]# tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c 才会结束tail 的侦测 

       『tail -n +100 /etc/man_db.conf』代表该文件从100 行以后都会被列出来,同样的,在man_db.conf 共有131 行,因此第100~131 行就会被列出来啦! 前面的 99 行都不会被显示出来喔!

       -f 这个选项,他可以一直侦测/var/log/messages 这个文件,新加入的数据都会被显示到屏幕上。直到你按下[crtl]-c 才会离开tail 的侦测喔!

 取中间行:使用管线操作 :    『 head -n 20    /etc/man_db.conf | tail -n 10 』

可以透过 cat -n 来带出行号,然后再透过 head/tail 来撷取数据!变成如下的模样了:cat -n /etc/man_db.conf | head -n 20 | tail -n 10

16.修改文件时间或建置新档: touch

文件有三种时间属性

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

ls -l --time=atime /etc/passwd 输出文件的读取时间。 ls默认输出的是mtime。

[root@study ~]# touch [-acdmt] 文件
选项与参数:
-a :仅修订 access time;
-c :仅修改文件的时间,若该文件不存在则不建立新文件;
-d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m :仅修改 mtime ;
-t :后面可以接欲修订的时间而不用目前的时间,格式为[YYYYMMDDhhmm]

透过touch 这个指令,我们可以轻易的修订文件的日期与时间。并且也可以建立一个空的文件喔! 不过,要注意的是,即使我们复制一个文件时,复制所有的属性,但也没有办法复制ctime 这个属性的。ctime 可以记录这个文件最近的状态(status) 被改变的时间。无论如何,还是要告知大家, 我们平时看的文件属性中,比较重要的还是属于那个mtime 啊!

17.文件的属性

umask 就是指定『目前用户在建立文件或目录时候的权限默认值』。

[root@study ~]# umask
0022 <==与一般权限有关的是后面三个数字!umask 的分数指的是『该默认值需要减掉的权限!』r、w、x 分别是4、2、1 分,
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

目录与文件是不一样的,对于文件,三者全部没有执行的权限

设置umask的方式   [root@study ~]# umask 002

 

18.chattr,lsattr(设置和查阅文件的隐藏属性)

chattr 指令只能在Ext2/Ext3/Ext4 的Linux 传统文件系统上面完整生效。

19.文件的特殊权限SUID, SGID, SBIT

s 与t这两个权限的意义与系统的账号(第十三章)及系统的程序(process, 第十六章)较为相关。

SUID的权限

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

普通用户使用passwd命令写/etc/shadow(权限为000,root可以强制读写)的方式:

/bin/usr/passwd 的权限是 -rwsr-xr-x,普通用户在执行该命令时可以获得文件所有者(root)的权限,即可以修改密码。

SGID权限

 当s所在的位置为群组的x所在的位置的时候,成为SGID。

与SUID 不同的是,SGID 可以针对文件或目录来设定!如果是对文件来说, SGID 有如下的功能:

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

对于目录来说:

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

SBIT权限 

仅对于目录有效

     如果将A 目录加上了SBIT 的权限项目时, 则甲只能够针对自己建立的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。举例来说,我们的/tmp 本身的权限是『drwxrwxrwt』, 在这样的权限内容下,任何人都可以在/tmp内新增、修改文件,但仅有该文件/目录建立者与root 能够删除自己的目录或文件。这个特性也是挺重要的啊!

SUID/SGID/SBIT 权限设定

  1. 4 为SUID     chmod 4755 filename
  2. 2 为SGID
  3. 1 为SBIT       而除了数字法之外,妳也可以透过符号法来处理喔!其中SUID 为u+s ,而SGID 为g+s ,SBIT则是o+t 啰

 出现大写 -rwSrwSrwT的原因,文件或目录原本没有x权限。

20.file观察文件的类型

[root@study ~]# file ~/.bashrc
/root/.bashrc: ASCII text <==告诉我们是 ASCII 的纯文本档啊!

21.脚本文件名的搜寻

[root@study ~]# which [-a] command

这个指令是根据『PATH』这个环境变量所规范的路径,去搜寻『执行档』的档名。
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

 22.文件档名的搜寻(whereis,locate,find)

     通常find 不很常用的!因为速度慢之外, 也很操硬盘!一般我们都是先使用whereis 或者是locate 来检查,如果真的找不到了,才以find 来搜寻呦!因为whereis 只找几个特定的目录而已~并没有全系统去查询之故。所以说,whereis 主要是针对/bin /sbin 底下的执行档, 以及 /usr/share/man 底下的man page 文件,跟几个比较特定的目录来处理而已。所以速度当然快的多!

[root@study ~]# whereis [-bmsu] 文件或目录名
选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件

locate

       因为 locate 寻找的数据是由『已建立的数据库/var/lib/mlocate/』里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,数据库每天更新一次,需要寻找刚刚建立的文件的时候,需要使用 updatedb进行数据库的更新。

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

[root@study ~]# locate [-ir] keyword
选项与参数:
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正规表示法的显示方式

find

[root@study ~]# 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 还要新的文件档名 

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

选项与参数:
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 搜寻。或者是被删除了的用户,文件没有拥有者。

 

选项与参数:
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.... 的属性存在! 

[root@study ~]# find / -perm /7000
# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,所以当然要使用 /7000,
# 使用 -7000 表示要同时含有 ---s--s--t 的所有三个权限。而只需要任意一个,就是 /7000 ~

# 使用 -7000 表示要同时含有 ---s--s--t 的所有三个权限。

 选项与参数:
4. 额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果打印到屏幕上,这个动作是预设动作!

[root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;              {}用来放find的结果。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值