Linux文件与目录管理:文件与查找

处理特殊字符:

假设系统中有一个文件叫“-abc” ,如果我们想对它进行操作,例如现在要删除它,方法分 别如下: 我们可以命令行中输入rm – -abc命令来删除文件。(若直接在命令行中输入rm -abc命令,则 无效,由于文件名的第一个字符为 - ,Linux把文件名当作选项了,所以我们要使用“–”符 号来解决这个问题),其它的特殊字符也一样

文件权限

若有一个文件的类型与权限数据为“-rwxr-xr–”

先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示;

1
2
[-][rwx][r-x][r--]
1 234 567 890

1为:代表这个文件名为目录(d)或文件,本例中为文件(-) ﹔

234为:拥有者的权限,本例中为可读、可写、可执行(rwx) ;

567为:同群组使用者权限,本例中为可读可执行(rx) ;
890为:其他使用者权限,本例中为可读(r),就是只读之意.

同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字

chown用法:

用来更改某个目录或文件的用户名和用户组。

chown 用户名:组名 文件路径(可以是绝对路径也可以是相对路径)

例1:chown root:root /tmp/tmp1

就是把tmp下的tmp1的用户名和用户组改成root和root(只修改了tmp1的属组)。

例2:chown -R root:root /tmp/tmp1

就是把tmp下的tmp1下的所有文件的属组都改成root和root。

chmod用法:

用来修改某个目录或文件的访问权限。

语法:chmod [-cfvR] [--help] [--version] [who] [+ | - | =] [mode] 文件名

例子:chmod -R 777 /home/linux

find查找

#find 时间,类型,名字,大小,用户,组,权限

#locate updatedb手动更新数据库

• 功能:在文件系统中查找匹配的文件

• 格式 find [<起始目录> …] [<选项表达式>] [<条件匹配表达式>] [<动作表达式>]

• 说明 – <起始目录>:对每个指定的 <起始目录> 递归搜索目录树

• 省略<起始目录>时表示当前目录

– <选项表达式>:控制 find 命令的行为

– <条件匹配表达式>:根据匹配条件查找文件

– <动作表达式>:指定对查找结果的操作,默认为显示在标准输出(-print)

– 不带任何参数的 find 命令将在屏幕上递归显示当前目录下的文件列表。

文件的时间戳

• GNU/Linux 文件的3种类型的时间戳:

– mtime: 最后修改时间 (ls -lt)

– ctime: 状态改变时间 (ls -lc)

– atime: 最后访问时间 (ls -lu)

• 说明

– ctime并非文件创建时间。

– 覆盖一个文件会改变mtime、ctime和atime三类时间。

– 改变文件的访问权限或拥有者会改变文件的ctime和atime。

– 读文件会改变文件的atime。

选项 说明
-L 如果遇到符号链接文件,就跟踪链接所指的文件
-regextype TYPE 指定 -regex 和 -iregex 使用的正则表达式类型,默 认为 emacs
-depth/-d 查找目录自身之前先处理目录中的文件(即深度 优先)
-mount/-xdev 查找文件时不跨越文件系统
-maxdepth LEVELS 设置最大的查找深度
–help 显示 find 命令帮助信息
–version 显示 find 的版本

例:

• 递归显示当前目录的文件列表

$ find

• 递归显示 / 目录的文件列表

$ find /

• 递归显示 / 目录的文件列表(仅限于3层目录)

$ find / -maxdepth 3

• 递归显示 / 目录的文件列表(仅限于 / 文件系统)

$ find / -xdev

• 递归显示 /home、/www、/srv 目录的文件列表

$ find /home /www /srv

条件表达式–文件名

条件 说明
-name PATTERN 匹配文件名
-iname PATTERN 匹配文件名(忽略大小写)
-lname PATTERN 匹配符号链接文件名
-ilname PATTERN 匹配符号链接文件名(忽略大小写)
-wholename PATTERN 匹配文件的完整路径(不把 ‘/’ 和 ‘.’ 作为特殊字符)
-iwholename PATTERN 匹配文件的完整路径(忽略大小写)

PATTERN 使用 Shell 的匹配模式 • 可以使用 Shell 的通配符(*、?[]) • 要用“”或‘’括起来

条件表达式–时间属性

条件 说明
-amin N 查找 N 分钟以前被访问过的所有文件
-atime N 查找 N 天以前被访问过的所有文件
-cmin N 查找 N 分钟以前文件状态被修改过的所有文件(比如权限修改)
-ctime N 查找 N 天以前文件状态被修改过的所有文件 (比如权限修改)
-mmin N 查找 N 分钟以前文件内容被修改过的所有文件
-mtime N 查找 N 天以前文件内容被修改过的所有文件
-used N 查找被改动过之后,在N天内被存取过的所有文件

注:以上选项中的 N 可以有三种输入方式:N,+N,-N  +20 表示大于 20 (21,22,23 等)  -20 表示小于 20 (19,18,17 等) 20 表示等于 20

例:

• 在/home下查找最近2天之内改动过的文件

$ find /home -mtime -2

• 在/home下查找最近2天之内被访问过的文件

$ find /home -atime -2

• 在/home下查找60分钟之前改动过的文件

$ find /home -mmin +60

条件 说明
-newer FILE 查找所有比 FILE 的内容修改时间新的文件
-cnewer FILE 查找所有比 FILE 的状态修改时间新的文件(比如权限修改)
-anewer FILE 查找所有比 FILE 的访问时间新的文件

FILE 为要比对的样板文件或目录

例:

• 在/home下查找更新时间比tmp.txt新的文件或目录

$ find /home -newer tmp.txt

• 在/home下查找存取时间比tmp.txt新的文件或目录

$ find /home -anewer tmp.txt

条件表达式–用户和组

条件 说明
-uid N 用户ID为N的所有文件
-gid N 组ID为N的所有文件
-user USERNAME 用户名为 USERNAME 的所有文件
-group GROUPNAME 组名为 GROUPNAME 的所有文件
-nouser 文件属于不在 /etc/passwd 文件中的用户
-nogroup 文件属于不在 /etc/group 文件中的组

N 可以使用 N,+N,-N

例:

• 查找在系统中已作废用户(在/etc/passwd中无记录)的文件

$ find / -nouser

• 查找属于 osmond 用户的文件

$ find / -user osmond

• 查找属于 students 组的文件

$ find / -group students

• 查找UID为502的所有文件

$ find / -uid 502

• 查找UID大于600的所有文件

$ find / -uid +600

• 查找GID小于60的所有文件

$ find / -gid -60

条件表达式–文件权限

条件 说明
-perm MODE 精确匹配权限模式为 MODE 的文件
-perm MODE 匹配权限模式至少为 MODE 的文件 (用户、组和其他人这三种权限必须都匹配)
-perm /MODE 或 -perm +MODE 匹配权限模式至少为 MODE 的文件 (用户、组和其他人这三种权限中有一种匹配即 可)

MODE 与 chown 命令的书写方式一致,既可以使用字符模式也可以 使用八进制的数值模式,通常使用八进制的数值模式

例:

• 在/home目录下查找权限为700的所有文件或目录

$ find /home -perm 700

• 在/home目录下查找权限至少为740的所有文件或目录

$ find /home -perm -740

条件表达式–类型和大小

条件 说明
-type TYPE 查找类型为 TYPE 的文件,可用的类型: b-块设备文件; c-字符设备文件; d-目录文件; p-命名管道; f-普通文件; l-符号链接; s-socket 文件
-links N 查找有N个链接的文件
-inum N 查找文件inode为N的文件
-samefile NAME 查找与NAME文件具有相同inode的文件
-size N[bcwkMG] 查找文件大小为N的文件,单位可以为: b-512 字节的块(省略单位的默认值); c-字节; w-双字节; k-Kilobytes; M-Megabytes; G-Gigabytes
-empty 查找空文件(大小为0)

例:

• 在/home目录下查找硬连接数大于2的文件

$find /home -links +2

• 在当前目录下查找长度大于10kB的文件

$find . -size +10k

• 在/tmp目录下查找长度等于1GB的文件

$find /tmp -size 1G

• 在当前目录下查找长度小于10MB的文件

$find . -size -10M

find 命令–动作表达式

• -print

​ – 在标准输出上列出查找结果(每行一个文件)

• -ls

​ – 使用 ‘ls -dils’ 在标准输出上列出查找结果

• -prune

​ – 忽略对某个目录的查找

• -exec COMMAND {} ;

​ – 对符合查找条件的文件执行 Linux 命令

• -ok COMMAND {} ;

 – 对符合查找条件的文件执行 Linux 命令;与 -exec 不同 的是,它会询问用户是否需要执行

• {} 两个大括号之间不能有空格,表示查找到的对象 • ; 表示命令结束,反斜杠与前面的大括号之间必须要留空格

例:

• 查找并列出当前目录下不安全的文件(世界可读写执行)

$ find . -perm -007 -ls

• 查找 logs 目录下的所有的 .log 文件并查看它的详细信息

$ find logs -name "*.log" -type f -exec ls -l {} \;

• 查找当天修改过的普通文件并显示出来

$ find . -type f -mtime -1 -exec ls -l {} \;

• 在/data/目录下查找以.sh结尾的权限模式为644的文件,并且把他们增 加为可以执行的。

$find /data –type f –perm 644 –name *.sh –ok chmod 755 {} \;