linux终端文件描述符,linux下文件描述符的手动操作

今天看到了一个视频,讲的是如何通过linux原生的命令,获取百度首页的html文件。下面开始进行操作讲解。

一 相关命令

1. exec

exec命令用于调用并执行指令的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令,则当指定的命令执行完毕后会立即退出终端。

2 $$

$$ is the process ID (PID) of the script itself.

$$代表着进程的自身PID。

e6ab9de2d1fa

exec命令实例

二 实际操作

先介绍一下prod目录:

在GUN/Linux操作系统中,/proc是一个位于内存中的伪文件系统(in-memory pseudo-file system)。该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,如系统内存、磁盘io、设备挂载信息和硬件配置信息等。proc目录是一个控制中心,用户可以通过更改其中某些文件来改变内核的运行状态。proc目录也是内核提供给我们的查询中心,我们可以通过这些文件查看有关系统硬件及当前正在运行进程的信息。在Linux系统中,许多工具的数据来源正是proc目录中的内容。例如,lsmod命令就是cat /proc/modules命令的别名,lspci命令是cat /proc/pci命令的别名。

输入:cd /proc/$$/fd

使用ll命令得到:

总用量 0

lrwxrwxrwx 1 zilch None 0 7月 21 01:06 0 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:06 1 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:06 2 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:06 31 -> /dev/pty1

可以看到当前shell打开的文件描述符 0 1 2 31 其中0 1 2 分别为标准输入,标准输出,标准错误。

之后通过exec命令打开文件描述符:

exec 3<> /dev/tcp/www.baidu.com/80

<>代表可读可写,>代表可写,

/dev/tcp是一个特殊的文件,打开这个文件就类似于发出了一个socket调用,建立一个socket连接

所以上述操作相当于在/dev/tcp文件中建立与www.baidu.com的80端口的连接。

之后进行echo操作

echo -e "GET / HTTP/1.0\n" 1>& 3

将这个get请求进行标准输出到文件描述符3,echo -e将\n转义为换行符。

cat 0

从文件描述符3中得到标准输入。

最后个关闭文件描述符:

先查看一下当前有哪些文件描述符占用:

总用量 0

lrwxrwxrwx 1 zilch None 0 7月 21 01:19 0 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:19 1 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:19 2 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:19 3 -> socket:[3]

lrwxrwxrwx 1 zilch None 0 7月 21 01:19 31 -> /dev/pty1

最后关闭文件描述符:

exec 3

再次查看:已经关闭

总用量 0

lrwxrwxrwx 1 zilch None 0 7月 21 01:20 0 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:20 1 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:20 2 -> /dev/pty1

lrwxrwxrwx 1 zilch None 0 7月 21 01:20 31 -> /dev/pty1

额外的说明:echo -e

man echo:

DESCRIPTION

Echo the STRING(s) to standard output.

-n do not output the trailing newline

-e enable interpretation of backslash escapes(启用反斜杠转义)

-E disable interpretation of backslash escapes (default)

--help display this help and exit

--version

output version information and exit

If -e is in effect, the following sequences are recognized:

\\ backslash

\a alert (BEL)

\b backspace

\c produce no further output

\e escape

\f form feed

\n new line

\r carriage return

\t horizontal tab

\v vertical tab

\0NNN byte with octal value NNN (1 to 3 digits)

\xHH byte with hexadecimal value HH (1 to 2 digits)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值