Linux文件与目录管理:文件与查找
Linux文件与目录管理:文件与查找
处理特殊字符:
假设系统中有一个文件叫“-abc” ,如果我们想对它进行操作,例如现在要删除它,方法分 别如下: 我们可以命令行中输入rm – -abc命令来删除文件。(若直接在命令行中输入rm -abc命令,则 无效,由于文件名的第一个字符为 - ,Linux把文件名当作选项了,所以我们要使用“–”符 号来解决这个问题),其它的特殊字符也一样
文件权限
若有一个文件的类型与权限数据为“-rwxr-xr–”
先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示;
1 | [-][rwx][r-x][r--] |
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 命令–动作表达式
– 在标准输出上列出查找结果(每行一个文件)
• -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 {} \;