Shell系统学习之文件操作

 系列文章目录

Shell系统学习之什么是Shell

Shell系统学习之创建一个Shell程序

Shell系统学习之向Shell脚本传递参数

Shell系统学习之如何执行Shell程序

Shell系统学习之Shell变量和引用

 Shell系统学习之Shell条件测试,判断语句和运算符

 Shell系统学习之循环结构

 Shell系统学习之函数

Shell系统学习之数组

系统学习Shell之正则表达式

Shell系统学习之文件操作

Shell系统学习之子Shell与进程处理


目录

列出文件

文件类型

查找文件

使用!运算符求反

处理权限错误信息

比较文件

文件的重定向

输出重定向(覆盖)

输出重定向(追加)

输入重定向

当前文档

将一个文件描述符重定向到另外一个文件描述符

小结


列出文件

 使用ls命令

ls [options] [file]...

一般使用的选项有:

-l 按照列表展示

-t 按照时间顺序展示

-r 逆顺序展示

-a 全显示

文件类型

除了普通文件,链接文件和目录外,还有一个 伪文件 概念,伪文件不是用来存储数据的,正因为如此,此种文件并不占用磁盘空间,尽管这些文件确实存在于目录树中,并且也按照目录的方式来组织。伪文件是一种服务,系统可以像操作普通文件一样来访问这些伪文件所代表的对象。

最重要的伪文件是设备文件,设备文件是物理设备在系统中的内部表示,比如键盘、鼠标、打印机等。除了设备文件外,还有命名管道,用户可以将一个命令的输出连接到另外一个命令的输入。还有proc文件,它允许访问内核中的信息。

查找文件

Linux查找文件使用find命令

find path test action

path表示要搜索的路径, test表示搜索的测试条件,来过滤我们希望找到的文件, action参数则表示对于搜索结果要执行的操作。

最常用的find 测试条件有 指定文件名,指定文件类型,通过文件的最后一次访问时间,状态改变时间,修改时间与调用命令时时间的前后分钟或者天数来过滤,通过文件大小,通过文件权限。

常用的find测试条件
条件
-name/-iname按照文件名查找,不支持通配符,iname表示忽略大小写查找
-type按照文件类型查找,可以取f和d两个值,f:普通文件;d:目录
-mmin [-+]n/-mtime [-+n]距离现在,文件内容最后一次被修改的时间;+n表示n时间内,-n表示n时间之外 min表示分钟,time表示天
-cmin [-+]n/-ctime [-+n]距离现在,文件内容最后一次状态改变的时间;+n表示n时间内,-n表示n时间之外 min表示分钟,time表示天
-amin [-+]n/-atime [-+n]距离现在,文件内容最后一次被访问的时间;+n表示n时间内,-n表示n时间之外 min表示分钟,time表示天
-empty     匹配空文件
-size size       匹配大小
-perm mode匹配其权限被设置为mode的文件(读,写,可访问)
-user userid匹配其所有者的ID的文件
-group groupid匹配其所有者主组ID的文件

find后面还可以跟action,对查出的文件进行处理,主要记住

-delete :将删除的文件删除

-ls :以列表格式显示搜索结果

-exec command {} \ :执行command命令,{}表示查找到的文件名

-ok command {} \ :执行command 命令,但是需要用户确认。

使用!运算符求反

使用\!或者'!',加在任何测试条件的前面,表示对条件取反,举例

find . \! -mmin +3

处理权限错误信息

在进行根目录查找时,我们会查到/proc目录中去,然后会报类似错误:

find: ‘/proc/672/task/672/fd’: Permission denied
find: ‘/proc/672/task/672/ns’: Permission denied

我们可以使用重定向 2>/dev/null,将错误信息丢弃掉不显示到屏幕上。

比较文件

使用comm命令或者diff命令

文件的重定向

认识输出重定向前我们要了解文件描述符,文件描述符是一个非负整数。它是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表。

特殊的文件描述符:

0:表示标准输入

1:表示标准输出

2:表示标准错误

输出重定向(覆盖)

cmd [n]>file

如果file不存在会创建file,如果n=1,可以忽略

输出重定向(追加)

cmd [n]>>file

将输出追加到文件已有内容的后面

输入重定向

cmd < file

file文件内容将作为cmd命令的输入

当前文档

cmd << delimiter
document
delimiter

当前文档主要用于需要输入多行的情况,delimiter表示分隔符。举个例子:

eden_ubuntu@edenubuntu:~/Documents/Shell/15$ cat << eof
> This is a test file.
> There are two line.
> eof
This is a test file.
There are two line.

将一个文件描述符重定向到另外一个文件描述符

n>&m, n<&m

 比如 1>&2 表示将标准输出的内容重定向到标准错误里去。1<&2表示将标准错误的输入输出到标准输出中去。

还有一种特殊的写法,请看下面例子:

#!/bin/bash
exec 100< <(ls -l)

num=1
while read line
do
 echo "LINE $num: $line"
 ((num+=1))
#done 后面加的<&100 表示将100描述符的内容重定向输入
done <&100
exec 100>&-

会打印当前目录下的文件内容。我的机子上结果如下:

eden_ubuntu@edenubuntu:~/Documents/Shell/12$ ./12-12.sh 
LINE 1: total 12
LINE 2: -rwxrwxr-x 1 eden_ubuntu eden_ubuntu  35 Aug  5 17:15 12-11.sh
LINE 3: -rwxrwxr-x 1 eden_ubuntu eden_ubuntu 117 Aug  6 02:19 12-12.sh
LINE 4: -rw-rw-r-- 1 eden_ubuntu eden_ubuntu  77 Aug  5 17:22 errlog

小结

本篇文章主要讲了与文件相关的操作,列出文件,查找文件,文件描述符,文件重定向的知识

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值