目录
- 重定向
- 管道|
- 文件查找
重定向
文件描述符
文件描述符:内核(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