linux-重定向和文件的查找
1、文件描述符(0,1,2)
2、重定向的含义-相关管道的使用(tee命令)
3、常用查找相关命令(which-whereis-locate-grep-find)
4、相关命令的判断
linux下面我们听的最多的是一切皆文件(普通文件、目录文件、设备文件、链接文件等)
1.1 文件描述符的定义
内核为了高效管理已被打开的文件所创建的索引 ,用于指向被 打开的文件,所有执行I/O操作的系统调用都通过文件描述符;它是非负整数,从0开始,其实是一个文件的身体ID。
输入输出说明:
stdin 0 标准输入设备 常见键盘是键盘
stdout 1 标准输出设备 常见显示器
stderr 2 标准错误 常见显示器
查看一个进程打开那些文件
ll /proc/ 进程ID/fd
ulimit -n 可以设置一个进程可以打开文件的文件数
2.1 输出重定项
输出重定项指:将命令正常输出的结果保存到文件,也不是直接在显示器上
> 覆盖原文件
>> 追加到原文件里
例:cat /etc/passwd >passwdbak.txt
2.2 输入重定项
输入重定项:将原来命令等待从键盘中输入的内容,改成以一个文件。
例:grep kkk </etc/passwd
我们常见mysql 导入数据 mysql -uroot -p123456<abc.sql
2.3 EOF 的使用
EOF通常与<< 结合使用:这表示EOF输入的内容作为子命令或者shell的输入,直到再次输入EOF才结束。
这其中EOF可以换ccc 任意内容。
例:cat >q.txt<<EOF
>abc
>cde
EOF
例:cat b.txt <<ddd
>EDN
>ddd
例:在 shell 中的应用
cat <<efo
++++++
ASP
C++
++++++
efo
2.4 错误重定向
将命令执行过程中出现的错误信息保存到指定的文件,而不是直接显示到显示器
作用:错误信息保存到文件
操作符:错误重定向符号:2>;标准输入:0<或者<;标准输出:1>或者>
2指的是标准错误输出的文件描述符
ls /tmp ddd >a.txt 2> err1.txt
2>>也是追加的意思。
2.5 null 黑洞与zero空文件
/dev/null 是把内容写入这里,永远也丢失了。
zero使用
dd if=/dev/zero of=cc.txt bs=1M count 50
if:表示输入文件
of:表示输出文件
bs:表示块单位的大小
count表示块个数
2.6 &>与>&符号
&表示等同于
例:把正确和错误的消息输入到相同的位置
1>&2 把标准输出重定向到标准错误
2>&1 把标准错误重定向到标准输出。
cat /etc/passwd bbb >1.txt 2>&1
ls /etc/passwd ccc 2>2.txt 1>&2
在shell 中应用
cat /etc/passwd >/dev/null 2>&1
2.7 管道符的应用 |
(1)、管道命令处理前一个命令正确输出,不处理错误输出
(2)、管道右边,必须能够接收标准输入的数据流命令才行
(3)、管理符可以把多条命令连接起来
例:ps -aux |grep vim
cat /etc/passwd|awk -F: \'{print $1}\'|grep root
2.8 tree 命令
将读取的标准输入的数据,并将其内容输出成文件。
tree -a 内容追加。
例:cat /etc/passwd |tree log.txt
3、常用查找相关命令
which 查看可执行文件的命令的位置
whereis 查看可执行文件的位置及相磁文件
locate 配合数据缓存,快速查看文件位置
grep 过滤匹配,是一个文件搜索工具
find 查找相关文件
lcate 命令
local命令与find -name 功能相似,local 查询要快一些,有搜索的数据库/var/lib/mlocate/mlocate.db 每天会进行自动更新
/etc/updatedb.conf
查定时任务信息 /etc/cron.daily/mlocate
grep查找使用
作用:过滤,它能够使用正则表达式来搜索文本,并把结果打印出来
参数:
-v 取反
-i 忽略大小写
^# 以#开头
#$ 以#结尾
^$ 空行
-n 对过滤的内容加上行号
| 或者的意思
egrep 是grep 的增强版
3.2 find命令使用(必会,参数比较多)
格式:find pathname -options [-print]
命令字 路径名称 选项 输出
参数:
pathname: find命令所查找的目录路径,不输入代表当前目录例如用 . 来表示当前目录,用 / 来表示系统根目录。
find命令选项:
-name 按照文件名查找文件。 “名称”
-perm 按照文件权限来查找文件。666 777 等
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n / +n 按照文件的更改时间来查找文件,
- n 表示文件更改时间距现在n天以内
+ n 表示文件更改时间距现在n天以前
-type 查找某一类型的文件
b - 块设备文件
d - 目录
c - 字符设备文件
p - 管道文件
l- 符号链接文件
f - 普通文件
-size n 查找符合指定的文件大小的文件
-exec 对匹配的文件执行该参数所给出的其他linux命令, 相应命令的形式为\' 命令 {} \;,注意{ }和 \;之间的空格,{}代表查到的内容
find /root/ -mtime -1
比较符的使用:
-a and 并且
-o or 或者
+ 超过
- 低于
find /etc -size +20k -a -size -50k | wc -l
find /bin/ -perm 755
find /bin/ -perm -644
find /root -type f -perm -777
-maxdepth 1 #只查找目录第一层的文件和目录
find /bin/ -maxdepth 1 -perm 755
find / -user mk -exec cp -a {} /root/findresults/ \;
#参数: -a #复制时,保留原来文件的所有属性
4 命令判断
4.1 用到的三个特殊符号: ; && ||
&&逻辑与====》它是只有在前面的命令执行成功后,后面的命令才会去执行
cd /opt/ && touch /opt/a.txt && ls
./configure && make -j 4 && make install
|| 逻辑或===》如果前面的命令执行成功,后面的命令就不去执行了;或者如果前面的执行不成功,才会去执行后面的命令
ls aaa || cd /mnt
id kill || useradd kill && echo "123456" |passwd --stdin kill && id kil