天天看點

linux終端檔案描述符,linux下檔案描述符的手動操作

今天看到了一個視訊,講的是如何通過linux原生的指令,擷取百度首頁的html檔案。下面開始進行操作講解。

一 相關指令

1. exec

exec指令用于調用并執行指令的指令。exec指令通常用在shell腳本程式中,可以調用其他的指令。如果在目前終端中使用指令,則當指定的指令執行完畢後會立即退出終端。

2 $$

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

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

linux終端檔案描述符,linux下檔案描述符的手動操作

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)