zoukankan      html  css  js  c++  java
  • Linux之文件重定向与查找

    文件描述符

    作用

    • 是内核为了高效管理已经被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统都是调用文件描述符
    • 文件描述符是一个非负整数,用来标明每一个被打开的文件 例如:第一个文件其描述符为0 第二个为1 依次类推
    • 可以将文件描述符看成文件的ID

    输入输出标准说明

    • STDIN(标准输入):默认的是键盘输入 文件描述符:0
    • STDOUT(标准输出):默认是显示器 也可以重定向到文件 文件描述符:1
    • STDERR(标准错误):默认是显示器 也可以重定向到文件 文件描述符:2

    fd

    用来查看一个进程下打开了哪些文件

    [root@SR ~]# vim /etc/passwd  
    
    [root@SR ~]# ps -aux | grep passwd
    root       3703  0.9  0.1  48716  8616 pts/0    S+   17:02   0:00 vim /etc/passwd
    
    [root@SR ~]# ll /proc/3703/fd
    总用量 0
    lrwx------. 1 root root 64 5月   1 17:03 0 -> /dev/pts/0
    lrwx------. 1 root root 64 5月   1 17:03 1 -> /dev/pts/0
    lrwx------. 1 root root 64 5月   1 17:03 2 -> /dev/pts/0
    lr-x------. 1 root root 64 5月   1 17:03 3 -> /var/lib/sss/mc/passwd
    lrwx------. 1 root root 64 5月   1 17:03 4 -> 'socket:[64492]'
    lrwx------. 1 root root 64 5月   1 17:03 6 -> /etc/.passwd.swp
    
    ps:上述 0 1 2 4即是文件描述符
    

    对文件描述符的操作就是对文件本身的操作。 我可以直接通过操作文件描述来修改文件。
    查看和临时设置一个迚程最多可以打开几个文件,卲:一个迚程可以打开的文件描述符限制
    [root@SR ~]# ulimit -n #查看一个迚程最多可以同时打开的文件数
    1024
    [root@SR ~]# ulimit -n 2048 #修改一个迚程最多可以同时打开的文件数为 2048
    [root@SR ~]# ulimit -n
    2048
    

    重定向

    作用

    将输出的内容通过重定向可以指定到我们想要存储的文件 而不是直接输出到屏幕

    输出重定向

    >

    将输出的内容输出到一个指定的文件 如果该文件有内容会被直接覆盖

    [root@SR ~]# cat /proc/cpuinfo > cpu.txt   文件重定向
    [root@SR ~]#
    [root@SR ~]# head -1 cpu.txt   # 查看文件首行
    [root@SR ~]#
    [root@SR ~]# echo hello world > cpu.txt  # 再次重定向
    [root@SR ~]# head -1 cpu.txt  # 查看文件首行 发现原来的文件内容都被覆盖了
    

    >>

    将输出的内容输出到一个指定的文件 其不会覆盖原文件的内容 而是会在尾部追加

    [root@SR ~]# echo '测试>>尾部追加' > test.txt
    [root@SR ~]#
    [root@SR ~]# cat test.txt
    测试>>尾部追加
    [root@SR ~]#
    [root@SR ~]# echo '追加成功' >> test.txt
    [root@SR ~]#
    [root@SR ~]# cat test.txt
    测试>>尾部追加
    追加成功
    

    输入重定向

    其输入方式不是从键盘进行输入 而是可以从其余方式进行输入 例如:文件

    <

    [root@SR ~]# grep root < /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    

    错误重定向

    将在输入中产生的错误提示信息 重定向到文件中而不是在屏幕显示

    2>

    [root@SR ~]# ll asjkd~ 2> b.txt
    [root@SR ~]#
    [root@SR ~]# cat b.txt
    ls: 无法访问'asjkd~': 没有那个文件或目录
    
    PS 使用 2> 操作符时,会像使用 > 一样覆盖目标文件的内容,若追加而丌覆盖文件的内容卲可使用 2>> 操作符
    

    null

    把null看成黑洞 写入到该null中的所有文件都会消失 同时读取数据也不会有任何显示

    [root@SR ~]# echo '测试null' > /dev/null
    [root@SR ~]#
    [root@SR ~]# cat /dev/null
    

    zero

    当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。 典型用法是用它来产生一个特定大小的空白文件

    [root@SR ~]# dd if=/dev/zero of=b.txt bs=1M count=50
    记录了50+0 的读入
    记录了50+0 的写出
    52428800 bytes (52 MB, 50 MiB) copied, 0.111958 s, 468 MB/s
    [root@SR ~]# ll -h b.txt
    -rw-r--r--. 1 root root 50M 5月   1 18:02 b.txt
    [root@SR ~]# cat b.txt  # 无任何显示
    

    EOF

    作用

    • EOF 本意是 End Of File,表明到了文件末尾。” EOF“通常不” <<“结合使用
    • <<EOF“表示后续的输入作为子命令戒子 shell 的输入,直到遇到” EOF
    • 再次返回到主调 shell,可将其理解为分界符(delimiter)。既然是分界符,那举形式自然丌是固定的
    • 这里可以将” EOF“可以迚行自定丿,但是前后的” EOF“必须成对出现丏丌能和 shell 命令冲突
    [root@SR ~]# cat > a.txt << EOF
    > ajksdhkasjd
    > asjkdhaksd
    > asdkjhaskdj
    > EOF
    

    管道符

    作用

    一个命令输出的结果作为另外一个命令输出的条件

    语法

    command -a | command -b

    管道命令只处理前面正确命令 不处理错误命令
    管道右边的命令必须能够接受正确的数据输入流
    管道符可以连接多个命令
    

    tee

    作用

    会将标准输出的数据流输出到标准输出设备上同时保存到文件

    可选参数

    -a

    尾部追加

    查找命令

    which

    查看可执行文件的位置

    whereis

    查看可执行文件位置以及相关文件

    locate

    配合数据库缓存 快速查看相关文件

     locate 命令和 find -name 功能差不多 是它的另外一种写法 
     相比较find其查找速度更加快速 因为在find中查找文件是根据目录查找 
     而那个locate查找数据是查找一个数据库/var/lib/mlocate/mlocate.db 
     这个数据库保存本地所有文件的信息 并且自动更新相关的配置信息在/etc/updatedb.conf查看定时任务信息在/etc/cron.daily/mlocate
    

    grep

    其能根据正则进行数据匹配 并且把数据打印出来

    可选参数

    -v

    取反

    ^

    匹配以什么开头

    $

    匹配以什么结束

    ^$

    匹配一个空行

    -i

    忽略大小写

    -n

    对过滤的内容加上行号

    find

    根据条件进行文件查找

    可选参数

    -name

    根据文件名称进行查找

    -perm

    根据文件权限进行查找

    -user

    根据文件属主进行查找

    -group

    根据文件属组进行查找

    -mtime

    按照文件修改时间来查找文件

    - n 表示文件更改时间距现在 n 天以内
    + n表示文件更改时间距现在 n 天以前
    

    -type

    根据文件类型进行文件查找

    -size

    根据文件大小进行查找

    -exec

    对匹配的文件执行该参数所给出的其他 linux 命令

    -a

    多个条件并列

    -o

    满足一个条件即可

    -+

    超过

    --

    低于

    命令判断

    ;

    连续执行 不考虑命令的正确性

    &&

    逻辑与
    只有前面的命令执行成功 才会执行后面的命令

    ||

    逻辑或
    前面的命令执行成功 后面的命令则不执行 或者前面的命令执行失败 后面的才会执行

  • 相关阅读:
    数值分析实验之平方根法解线性方程组(MATLAB代码)
    Packet Tracer 下载方法
    注册 Netacad (思科)账户 超详细流程
    数值分析实验之非线性方程求根(Python 现)
    数值分析实验之非线性方程求根(MATLAB实现)
    数值分析实验之矩阵的LU分解及在解线性方程组中的应用(java 代码)
    数值分析实验之矩阵的LU分解及在解线性方程组中的应用(MATLAB 代码)
    数值分析实验之矩阵的LU分解及在解线性方程组中的应用(Python 代码)
    数值分析实验之数值积分法(MATLAB代码)
    在python3中安装mysql扩展,No module named 'ConfigParser'
  • 原文地址:https://www.cnblogs.com/SR-Program/p/12814792.html
Copyright © 2011-2022 走看看