Linux文件管理之一

2023-04-06 18:28:45 浏览数 (1)

01

显示文件(ls、stat和file)

ls

ls 命令用于显示指定工作目录中所包含的文件,该命令的使用方法如下:ls [选项] [文件目录列表]

ls 命令中的常用选项:

选项

说明

-a

列出目录下的所有文件,包括以“.”开头的隐含文件。

-d

将目录像文件一样显示,而不是显示其下的文件

-h

以人类可识别的方式输出文件大小

-k

以 k 字节的形式表示文件的大小

-l

列出文件的详细信息

-m

横向输出文件名,并以“,”作为分隔符,便于定向到shell命令进行处理

-n

用数字的 UID,GID 代替名称

-r

录反向排序

-t

以时间排序

-R

递归的列出所有子目录下的文件

-S

以文件大小排序

常用ll代替alias ll='ls -l --color=auto'

查询最新的10个文件 $ ls -lrt|tail

查询最大的10个文件 $ ls -lS|head

查询目录,不显示下面的文件$ ls -ld pictures/

文件类型的字符表示文件的权限,权限由三个字符串组成,这三个字符串分别表示:该文件所有者的权限、组中其他人的权限和系统中其他人的权限;每个字符串又由三个字符组成,依次表示对文件的读(用字符r表示)、写(用字符W表示)和执行权限(用字符x表示)。当用户没有相应的权限时,该权限的对应位置用短线“-”来表示。

例如drwxr-x---表示的含义是:

  • d 表示该文件是目录;
  • 目录拥有者的权限是rwx(表示有读、写和执行权限);
  • 组中其他人对该目录的权限是r-x(表示有读和执行权限,没有写权限);
  • 系统中其他人对该目录的权限是-(表示读、写和执行权限都没有)。
stat

在 Linux 中,文件有访问时间、数据修改时间、状态修改时间这三个时间,而没有创建时间。stat 是査看文件详细信息的命令,而且可以看到文件的这三个时间。

代码语言:javascript复制
oracle@yaoyuan ~$ touch a
oracle@yaoyuan ~$ stat a
  File: ‘a’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fc02h/64514d  Inode: 17253       Links: 1
Access: (0644/-rw-r--r--)  Uid: (54321/  oracle)   Gid: (54321/oinstall)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-07-28 15:29:33.893889798  0800
Modify: 2022-07-28 15:29:33.893889798  0800
Change: 2022-07-28 15:29:33.893889798  0800
 Birth: -
oracle@yaoyuan ~$ cat a
oracle@yaoyuan ~$ stat a
  File: ‘a’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fc02h/64514d  Inode: 17253       Links: 1
Access: (0644/-rw-r--r--)  Uid: (54321/  oracle)   Gid: (54321/oinstall)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-07-28 15:29:45.396888989  0800
Modify: 2022-07-28 15:29:33.893889798  0800
Change: 2022-07-28 15:29:33.893889798  0800
 Birth: -

可以看到access的时间变了,其它的时间都没有变。

file

file查看文件的类型

代码语言:javascript复制
oracle@yaoyuan ~$ file /var/log/mysqld.log 
/var/log/mysqld.log: regular file, no read permission
oracle@yaoyuan ~$ file a
a: empty
oracle@yaoyuan ~$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped

02

查找文件(find)

find 命令的基本结构如下:find [paths] [expression] [actions]

find 命令中的 -name 选项可以根据文件名称进行检索(区分大小写)。如需要忽略文件名中的大小写,可以使用 -iname 选项,i应该是ignore的意思。

  • ? 可以表示任意一个单一的符号
  • * 可以表示任意数量(包括 0)的未知符号 删除/tmp目录下的以 .txt 结尾的文件
代码语言:javascript复制
$ mkdir -p /tmp/dir1/dir2
$ touch /tmp/dir1/dir2/aa.txt
$ find /tmp -name '*.txt'
$ find /tmp -name '*.txt' -delete

使用 -type 选项指定文件类型。-type 选项最常用的参数如下:

  • f: 文件
  • d: 目录
  • l: 符号链接

find /usr -type d -name 'python*' 检索 /usr 下所有文件名以 python 开头的目录

根据时间日期进行检索

有些时候,需要根据文件创建或修改的时间进行检索。Linux 系统中,与文件相关联的时间参数有以下三种:

  • 修改时间(Modification time):最后一次文件内容有过更改的时间点
  • 访问时间(Access time):最后一次文件有被读取过的时间点
  • 变更时间(Change time):最后一次文件有被变更过的时间点(如内容被修改,或权限等 metadata 被修改)

与此对应的是 find 命令中的 -mtime-atime-ctime 三个选项。

这三个选项的使用遵循以下示例中的规则:

  • -mtime 2:该文件 2 天前被修改过
  • -mtime -2:该文件 2 天以内被修改过
  • -mtime 2:该文件距离上次修改已经超过 2 天时间

find /u01 -type f -mtime 2 检索 /u01 下两天前被修改过的文件

如果觉得 -mtime 等选项以天为单位时间有点长,还可以使用 -mmin,-amin,-cmin 三个选项:find /usr -type f -mtime 50 -mtime -100 检索 /usr 下 50 到 100 天之间修改过的文件 find /usr -type f -mtime 2 -amin 5 检索 /usr 下两天前被修改过且 5 分钟前又读取过的文件

find /u01/app/oracle/diag/rdbms -mmin -10 -type f 10分钟内被修改过的Oracle跟踪文件。

find /u01/app/oracle/diag/rdbms -mmin -10 -type f -delete 删除这些文件

find . -atime 30 -exec rm -rf {} ; 删除30天没有访问的文件

根据文件大小检索

-size 选项允许用户通过文件大小进行搜索(只适用于文件,目录没有大小……)。

表示文件大小的单位由以下字符组成:

  • c:字节
  • k:Kb
  • M:Mb
  • G:Gb

另外,还可以使用 - 符号表示大于小于当前条件。find /u01 -size 1G 检索文件大小高于 1 GB 的文件。加上-delete可以删除大文件,常用与硬盘空间满时候。

0 人点赞