1. fd (file descriptor)

文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符

程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码

2. /proc

PROC(5) Linux Programmer's Manual

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态. 这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关

2.1. 常用文件介绍

file descript
version Linux内核版本和gcc版本
cmdline 启动时传递给kernel的参数信息
cpuinfo cpu的信息
filesystems 内核当前支持的文件系统类型
sched_debug 提供cpu上正在运行的进程信息,获得进程的pid号,配合后面pid的利用
mounts 挂载的文件系统列表

/proc/sched_debug
/proc/

/proc#cat /version
Linux version 4.8.0-kali2-amd64 (devel@kali.org) (gcc version 5.4.1 20161019 (Debian 5.4.1-3) ) #1 SMP Debian 4.8.11-1kali1 (2016-12-08)

2.2. 目录

  • /proc/N -- N 为数字,表示进程PID
#ls /proc/1/
attr        coredump_filter  gid_map    mountinfo   oom_score      schedstat  status
autogroup   cpuset           io         mounts      oom_score_adj  sessionid  syscall
auxv        cwd              limits     mountstats  pagemap        setgroups  task
cgroup      environ          loginuid   net         personality    smaps      timers
clear_refs  exe              map_files  ns          projid_map     stack      timerslack_ns
cmdline     fd               maps       numa_maps   root           stat       uid_map
comm        fdinfo           mem        oom_adj     sched          statm      wchan
items description
cmdline 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
cwd 指向当前进程运行目录的一个符号链接
environ 进程环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
exe 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝
fd 目录,包含当前进程打开的每一个文件的文件描述符,这些文件描述符是指向实际文件的一个符号链接
maps 与进程相关的内存映射信息
mem 指代进程持有的内存,不可读
root 指向当前进程运行根目录的符号链接
stat 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
statm 进程使用的内存的状态
status 进程状态信息,比stat/statm更具可读性
mountinfo 文件系统挂载的信息,例如读docker文件映射
/proc# cat 1/cmdline
/sbin/init

/proc# ls -ald 1/cwd
lrwxrwxrwx 1 root root 0 12月 19 13:44 1/cwd -> /

/proc# cat 1/environ
CRYPTSETUP=yesSHLVL=1HOME=/init=/sbin/initTERM=linuxdrop_caps=BOOT_IMAGE=/boot/vmlinuz-4.8.0-kali2-amd64PATH=/sbin:/usr/sbin:/bin:/usr/bininitrd=/install/gtk/initrd.gzPWD=/rootmnt=/root

/proc# ls -al 1/exe
lrwxrwxrwx 1 root root 0 12月 19 13:35 1/exe -> /lib/systemd/systemd

/proc# ls 1/fd
0    101  108  111  14  18  21  25  29  32  36  41  46  5   55  6   64  71  75  92
1    102  109  112  15  19  22  26  3   33  39  42  47  50  56  60  65  72  8   99
10   103  11   12   16  2   23  27  30  34  4   43  48  52  58  62  66  73  9
100  107  110  13   17  20  24  28  31  35  40  45  49  54  59  63  7   74  90
  • /proc/self 链接到当前正在运行的进程

  • /proc/sys 系统信息和内核参数

/proc# ls sys
abi  debug  dev  fs  kernel  net  vm
  • /proc/net 网卡设备信息
items description
arp arp表,可以获得内网其他机器的地址
route 路由表信息
tcp tcp 连接信息
udp udp 连接信息
fib_trie 路由缓存

results matching ""

    No results matching ""