目录
- 重定向
- 管道|
- 文件查找
重定向
文件描述符
文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
linux下一切皆文件。
STDIN 标准输入 文件描述符为:0 如:键盘文件
STDOUT 标准输出 文件描述符为:1 如:屏幕终端
STDERR 错误输出 文件描述符为:2 如:屏幕终端
输出重定向
作用: >
>>
代表输出重定向;
>
内容覆盖。
>>
内容末尾追加,
用法: [文件描述符][>
/ >>
] 目的文件
标准输出
1>
表示stdout标准输出,系统默认值是1, 所以 1>
等价 >
1 | [root@localhost ~]#echo 123456 | passwd --stdin sam > /dev/null #/dev/null 代表空设备文件,就是Linux中的黑洞。放多少东西都填不满。 |
标准错误
2>
表示STDERR 错误输出
1 | [root@localhost ~]# ls/homee 2> b.txt |
混合输出
&>
表示混合输出
1 | [root@localhost ~]# ls/home/ /homee &> a.txt |
还可以 &
来表示, & 表示等同于的意思
1 | [root@localhost ~]# ls/home/ /homee > d.txt 2>&1 #2标准错误输出等同于1标准输出 |
tee
功能说明:读取标准输出的数据,并将其内容输入成文件。 >
屏幕上不会同时输出
1 | [root@localhost ~]# ps -aux | grep vim | tee a.txt |
输入重定向
<
<<
<<
[标志] 代表以[标志]结束
wc
统计
1 | sam:/home/sam # wc < /etc/passwd |
向a.txt 输入, 以 EOF
结束, EOF
可以替换成其他符号
1 | [root@localhost ~]# cat > a.txt <<EOF |
管道|
管道 : 前一个程序的标准输出,交给后一个程序做标准输入。
管道符 |
: |
左边程序的标准输出,交给|
右边程序做标准输入;可以多个 |
链接。
1 | [root@localhost ~]# ps -aux | grep vim |
文件查找
常用查找命令:which
: 查看可执行文件的位置, 比 whereis
更常用whereis
: 查看可执行文件的位置 及相关文件grep
: 过滤locate
: 配合数据库缓存,快速查看文件位置,速度快,不够准确 ; 新文件update
后才能查到find
: 实际搜寻硬盘查询文件名称
which
- 作用: 查看可执行文件的位置
- 用法: which COMMAND
whereis
- 作用: 查看可执行文件的位置 及相关文件
- 用法: whereis COMMAND
locate
- 作用: 配合数据库缓存,快速查看文件位置 , 新文件需要
update
加入 数据库 - 用法:
grep
- 作用: 过滤文件内容
- 用法:grep [选项]… PATTERN [FILE]
常用选项:
-v
: 反转
-i
: 忽略大小写
常用PATTERN:
^#
: 以#开头
#$
: 以#结尾
^$
: 空行 - 例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14#-v取反,查找出文件中不带nologin的行
[root@localhost ~]# grep -v "nologin" passwd
# -i 忽略大小写进行查找
[root@localhost ~]# grep -i "rm" passwd
# ^ 过滤文件中的所有以#号开头的行
[root@localhost ~]#grep "^#" passwd
# `$` 过滤文件中的所有以%结尾的行
[root@localhost ~]#grep "%$" passwd
# ^$ 过滤文件中的空行, -n 对过滤的内容加上行号
[root@localhost ~]#grep "^$" passwd -n
扩展:过滤真实有效的内容
1 | [root@localhost ~]#grep -v "^$" /etc/ssh/sshd_config | grep -v "^#" |
find
- 作用: 实际搜寻硬盘查询文件名称
- 用法: find [路径…] [条件] [动作]
[路径…]
不输入默认是当前目录
可以多个目录
1 | [root@localhost test]# find t1/ tt1/ -type d |
[条件]
用户和组:-user -group
例:查找home目录下所有的属于sam的文件
1 | [root@localhost ~]# find /home/ -user "sam" |
类型:-type
type
: f 文件 , d 目录 , l 连接 , p 管道 ,c 字符文件 ,b 块文件,s socket文件
1 | [root@localhost ~]# find /home/ -type f |
名字:-name
*
通配符
1 | [root@localhost ~]# find /home/ -name '*user*' |
大小:-size
+NM
大于N兆 -NG
小于NGB
1 | [root@localhost ~]# find /boot/ -size +2M |
时间:*time | *min
[-mtime
-atime
-ctime
| -mmin
-amin
-cmin
] n*time
以24小时为单位, *min
以分钟为单位;+n
: 大于n, n
:等于n, -n
:小于n
1 | [root@localhost ~]# date-s 2015-12-11 |
权限:-perm
1 | [root@localhost ~]# find /boot/ -perm 755 #等于0775权限的文件或目录 |
例:
1 | [root@localhost ~]# mkdir ccc |
目录深度:-maxdepth
1 | [root@localhost ~]# find /boot/ -maxdepth 2 #只查找目录第二层的文件和目录 |
多条件组合:
-a
-o
!
或 -and
-or
-not
1 | [root@localhost ~]#find -type f -a -perm -002 |
[动作]
-ls
-ok
-exec
-print
-printf
常用 -exec
1 | [root@localhost ~]#find /root/test2/ -type f -exec rm {} \; |
参数解释:
-exec
: 执行命令
rm
: 要执行的命令
{}
: 表示 find
查找出来了文件内容
\;
: {}
和 \;
之间要有空格。 固定语法,就是以这个结尾
组合使用
1 | find / -name "40*" -a -type f | xargs grep " not found" |
扩展:
linux中ctime,mtime,atime
区别
atime
:“访问时间(accesstime)”ctime
:“改变时间(changetime)”mtime
:“修改时间(modificationtime)”
改变和修改之间的区别在于是改文件的属性还是更改它的内容, *min类似。chmod a-w myfile
这是一个属性改变;改变的ctimeecho aaa > bajie
这是一个内容修改;同时修改mtime和ctime。
例如:
1 | [root@localhost ~]# touch time.txt |
1 | [root@localhost ~]#chmod u+x time.txt |
可以看到,文件的ctime发生了改变
1 | [root@localhost ~]# echo "aaaaaaaaaaa" >> time.txt |
可以看到文件的ctime和mtime发生了改变
结论:无论是文件的属性还是内容发生变化,文件的ctime都会发生改变,只有文件内容发生修改的时候,文件的mtime才会发生变化
1 | [root@localhost ~]# cat time.txt |
可以看到文件的atime发生了改变
结论:只要对文件内容进行了查看,那么atime就会发生改变
显示
ls(1) 命令可用来列出文件的 atime、ctime和 mtime。
ls -lc filename 列出文件的 ctime ll -c
ls -lu filename 列出文件的 atime ll -u
ls -l filename 列出文件的 mtime ll