• 运维基础-IO 管道


    什么是文件描述符FD或者文件句柄?

    通过构建一个带有编号标记的通道(文件描述符)的进程结构来管理打开的文件。今晨连接到文件,从而达到这些文件所代表的的数据内容或者设备。通过使用通道0、1、2(称为标准输入,标准输出,标准错误)的默认连接创建进程。进程使用3号及以上标号的通道连接其他文件。

    掌握常见文件描述符的作用

    0 表示stdin(标准输入),默认连接为键盘,仅读取
    
    1 表示stdout(标准输出),默认连接为终端,仅写入
    
    2 表示stderr(标准错误),默认连接为终端,仅写入
    
    3+ 表示filename(其他文件),可以读取/写入

    示例:

    保存时间戳

    [root@localhost ~]# date
    2018年 08月 24日 星期五 09:03:31 CST
    [root@localhost ~]# date > /tmp/saved-timestamp
    [root@localhost ~]# cat /tmp/saved-timestamp 
    2018年 08月 24日 星期五 09:03:46 CST
    [root@localhost ~]# 

    将一个文件的最后100行保存到另一个文件

    [root@localhost ~]# tail -n 100 /var/log/demsg > /tmp/last-100-boot-messages
    [root@localhost ~]# 

    将四个文件合并为一个

    [root@localhost ~]# cat file1 file2 file3 file4 > /tmp/all-four-in-one
    [root@localhost ~]# 

    累出家目录中的隐藏文件名和常规文件名保存到文件中

    [root@localhost ~]# ls -a > /tmp/my-file-names
    [root@localhost ~]# cat /tmp/my-file-names 
    .
    ..
    anaconda-ks.cfg
    .bash_history
    .bash_logout
    .bash_profile
    .bashrc
    .cache
    .config
    .cshrc
    .dbus
    Desktop
    .gitconfig
    initial-setup-ks.cfg
    .mozilla
    .pki
    .ssh
    .tcshrc
    .viminfo
    .xauthKYrxVH
    .Xauthority
    [root@localhost ~]# 

    使用普通用户对系统目录进行访问会被拒绝,将错误从定向到文件

    [root@localhost ~]# find /etc -name passwd 2 > /tmp/errors
    [root@localhost ~]# 

    将命令的输出和错误消息分别保存到单独的文件中

    [root@localhost ~]# find /etc/-name passwd > /tmp/output 2 > /tmp/errors
    [root@localhost ~]#

    忽略并丢弃错误消息

    [root@localhost ~]# find /etc/ -name passwd > /tmp/output 2> /dev/null
    [root@localhost ~]#

    基于输出及输入重定向实现管理

    head /tail/wc/cut/sort/uniq/diff/patch/tr/grep

    进程管道PIping

    示例:

    将ls长葛市输出分页显示

    [root@localhost ~]# ls -l /usr/bin/ | less
    
    
    
    
    
    总用量 173472
    -rwxr-xr-x.   1 root root      41496 11月  6 2016 [
    -rwxr-xr-x.   1 root root     107856 8月   3 2017 a2p
    -rwxr-xr-x.   1 root root      11248 8月  10 2017 abrt-action-analyze-backtrace
    -rwxr-xr-x.   1 root root      15328 8月  10 2017 abrt-action-analyze-c
    -rwxr-xr-x.   1 root root       1345 8月  10 2017 abrt-action-analyze-ccpp-local
    -rwxr-xr-x.   1 root root       6821 8月  10 2017 abrt-action-analyze-core
    -rwxr-xr-x.   1 root root      11224 8月  10 2017 abrt-action-analyze-oops
    -rwxr-xr-x.   1 root root      11232 8月  10 2017 abrt-action-analyze-python

    计算ls输出的行数并且保存到文件

    [root@localhost ~]# ls | wc -l > /tmp/how-many-files
    [root@localhost ~]# cat /tmp/how-many-files 
    3
    [root@localhost ~]# 

    将ls输出的前10行保存到文件

    [root@localhost ~]# ls -t | head -n 10 > /tmp/ten-last-changed-files
    [root@localhost ~]# cat /tmp/ten-last-changed-files 
    Desktop
    initial-setup-ks.cfg
    anaconda-ks.cfg
    [root@localhost ~]# 
    只有三行。。。

    在终端商显示ls列表,同时将文件列表存储到文件中

    [root@localhost ~]# ls -l | tee /tmp/saved-output
    总用量 8
    -rw-------. 1 root root 1635 8月  20 19:18 anaconda-ks.cfg
    drwxr-xr-x. 2 root root    6 8月  23 18:14 Desktop
    -rw-r--r--. 1 root root 1666 8月  20 19:21 initial-setup-ks.cfg
    [root@localhost ~]# cat /tmp/saved-output 
    总用量 8
    -rw-------. 1 root root 1635 8月  20 19:18 anaconda-ks.cfg
    drwxr-xr-x. 2 root root    6 8月  23 18:14 Desktop
    -rw-r--r--. 1 root root 1666 8月  20 19:21 initial-setup-ks.cfg
    [root@localhost ~]# 

     确定当前窗口的终端设备,将ls结果作为邮件发送,并在此窗口查看输出内容

    [root@localhost ~]# ls -l | tee /dev/pts/1 | mail -s subject seven_nighter@163.com
    总用量 8
    -rw-------. 1 root root 1635 8月  20 19:18 anaconda-ks.cfg
    drwxr-xr-x. 2 root root    6 8月  23 18:14 Desktop
    -rw-r--r--. 1 root root 1666 8月  20 19:21 initial-setup-ks.cfg
    您在 /var/spool/mail/root 中有邮件
    [root@localhost ~]# 

    掌握参数传递机制Xargs

    xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具,它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并且将其转换成特定的命令的参数。xargs也可以将单行或者多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令时echo,空格是默认的定界符,这就意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代,xargs是构建单行命令的重要组件之一。

     具体操作百度。。

     wc - print newline, word,and bytes counts for each file

    计算文件的行数,单词数,字节数

    [root@localhost ~]# wc /etc/passwd
      42   82 2146 /etc/passwd
    [root@localhost ~]# 
    [root@localhost ~]# wc -l /etc/passwd
    42 /etc/passwd                 行数
    [root@localhost ~]# 
    [root@localhost ~]# wc -w /etc/passwd
    82 /etc/passwd                 单词数
    [root@localhost ~]# 
    [root@localhost ~]# wc -c /etc/passwd
    2146 /etc/passwd               字节数
    [root@localhost ~]# 

    按列提取文件

    -d 指明列分隔符 默认tab

    -f 选择输出的区域

    -c 指定字符位置

    [root@localhost ~]# cut -d: -f1 /etc/passwd
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator
    [root@localhost ~]# cut -c1-3 /etc/passwd
    roo
    bin
    dae
    adm
    lp:
    syn
    shu

    sort - sort lines of text files

    排序输出,默认按照首字符从头至尾的顺序排序

    -r 逆序(倒叙)

    -n 按数字排序

    -t 指明分隔符 与 -k 连用

    -k 按指定的域排序

    [root@localhost ~]# sort -t: -k3 /etc/passwd | cut -d: -f3 | head -n 5
    0
    1000
    1001
    107
    11
    [root@localhost ~]# 
    [root@localhost ~]# sort -t: -k3 -n /etc/passwd | cut -d: -f3 | head -n 5
    0
    1
    2
    3
    4
    [root@localhost ~]# 
    [root@localhost ~]# sort -t: -k3 -n -r /etc/passwd | cut -d: -f3 | head -n 5
    65534
    1001
    1000
    999
    998
    [root@localhost ~]# 

    。。。。更加纤细的请自行百度。

  • 相关阅读:
    nginx 跨域问题解决
    njs typescript 开发说明
    openrestyluatypes openresty typescript 类型定义
    使用 TypeScriptToLua 开发lua 应用
    如何编写一个简单的TypeScriptToLua lua 模块定义包
    docker sbom方便的软件物料清单扩展
    openresty + njs 提升系统nginx 的扩展性
    contentlayer 工作原理简单说明
    使用openrestyluatypes+TypeScriptToLua+testnginx 开发强类型的nginx lua 模块
    TypeScriptToLua npm 集成玩法
  • 原文地址:https://www.cnblogs.com/52-qq/p/9528100.html
Copyright © 2020-2023  润新知