目录
使用ls命令
ls [options] [file]...
一般使用的选项有:
-l 按照列表展示
-t 按照时间顺序展示
-r 逆顺序展示
-a 全显示
除了普通文件,链接文件和目录外,还有一个 伪文件 概念,伪文件不是用来存储数据的,正因为如此,此种文件并不占用磁盘空间,尽管这些文件确实存在于目录树中,并且也按照目录的方式来组织。伪文件是一种服务,系统可以像操作普通文件一样来访问这些伪文件所代表的对象。
最重要的伪文件是设备文件,设备文件是物理设备在系统中的内部表示,比如键盘、鼠标、打印机等。除了设备文件外,还有命名管道,用户可以将一个命令的输出连接到另外一个命令的输入。还有proc文件,它允许访问内核中的信息。
Linux查找文件使用find命令
find path test action
path表示要搜索的路径, test表示搜索的测试条件,来过滤我们希望找到的文件, action参数则表示对于搜索结果要执行的操作。
最常用的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
本篇文章主要讲了与文件相关的操作,列出文件,查找文件,文件描述符,文件重定向的知识