当前位置: 首页 > news >正文

手机网站建设价格新浪云WordPress 主题

手机网站建设价格,新浪云WordPress 主题,莱阳seo外包,wordpress小工具 样式在 UNIX 环境中#xff0c;文件无处不在#xff0c;这便产生了一句格言#xff1a;“任何事物都是文件”。通过文件不仅仅可以访问常规数据#xff0c;通常还可以访问网络连接和硬件。在有些情况下#xff0c;当您使用 ls 请求目录清单时#xff0c;将出现相应的条目。在… 在 UNIX® 环境中文件无处不在这便产生了一句格言“任何事物都是文件”。通过文件不仅仅可以访问常规数据通常还可以访问网络连接和硬件。在有些情况下当您使用 ls 请求目录清单时将出现相应的条目。在其他情况下如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字不存在相应的目录清单。但是在后台为该应用程序分配了一个文件描述符无论这个文件的本质如何该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。 因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息所以能够查看这个列表将是很有帮助的。完成这项任务的实用程序称为 lsof它对应于“list open files”列出打开的文件。几乎在每个 UNIX 版本中都有这个实用程序但奇怪的是大多数供应商并没有将其包含在操作系统的初始安装中。要获取更多关于 lsof 的信息请参见参考资料部分。 lsof 简介 只需输入 lsof 就可以生成大量的信息如清单 1 所示。因为 lsof 需要访问核心内存和各种文件所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 清单 1. lsof 的示例输出 1 2 3 4 5 6 7 8 bash-3.00# lsof COMMAND    PID   USER   FD   TYPE        DEVICE SIZE/OFF      NODE NAME sched        0   root  cwd   VDIR         136,8     1024         2 / init         1   root  cwd   VDIR         136,8     1024         2 / init         1   root  txt   VREG         136,8    49016      1655 /sbin/init init         1   root  txt   VREG         136,8    51084      3185 /lib/libuutil.so.1 vi        2013   root    3u  VREG         136,8        0      8501 /var/tmp/ExXDaO7d ... 每行显示一个打开的文件除非另外指定否则将显示所有进程打开的所有文件。Command、PID 和 User 列分别表示进程的名称、进程标识符 (PID) 和所有者名称。Device、SIZE/OFF、Node 和 Name 列涉及到文件本身的信息分别表示指定磁盘的名称、文件的大小、索引节点文件在磁盘上的标识和该文件的确切名称。根据 UNIX 版本的不同可能将文件的大小报告为应用程序在文件中进行读取的当前位置偏移量。清单 1 来自一台可以报告该信息的 Sun Solaris 10 计算机而 Linux® 没有这个功能。 FD 和 Type 列的含义最为模糊它们提供了关于文件如何使用的更多信息。FD 列表示文件描述符应用程序通过文件描述符识别该文件。Type 列提供了关于文件格式的更多描述。我们来具体研究一下文件描述符列清单 1 中出现了三种不同的值。cwd值表示应用程序的当前工作目录这是该应用程序启动的目录除非它本身对这个目录进行更改。txt 类型的文件是程序代码如应用程序二进制文件本身或共享库再比如本示例的列表中显示的 init 程序。最后数值表示应用程序的文件描述符这是打开该文件时返回的一个整数。在清单 1 输出的最后一行中您可以看到用户正在使用 vi 编辑 /var/tmp/ExXDaO7d其文件描述符为 3。u 表示该文件被打开并处于读取/写入模式而不是只读 (r) 或只写 (w) 模式。有一点不是很重要但却很有帮助初始打开每个应用程序时都具有三个文件描述符从 0 到 2分别表示标准输入、输出和错误流。正因为如此大多数应用程序所打开的文件的 FD 都是从 3 开始。 与 FD 列相比Type 列则比较直观。根据具体操作系统的不同您会发现将文件和目录称为 REG 和 DIR在 Solaris 中称为 VREG 和 VDIR。其他可能的取值为 CHR 和 BLK分别表示字符和块设备或者 UNIX、FIFO 和 IPv4分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。 转到 /proc 目录 尽管与使用 lsof 没有什么直接的关系但对 /proc 目录进行简要的介绍是有必要的。/proc 是一个目录其中包含了反映内核和进程树的各种文件。这些文件和目录并不存在于磁盘中因此当您对这些文件进行读取和写入时实际上是在从操作系统本身获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中所以 /proc/1234 中包含的是 PID 为 1234 的进程的信息。 在 /proc 目录的每个进程目录中存在着各种文件它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 实用程序使用该信息和其他关于内核内部状态的信息来产生其输出。稍后我将把 lsof 的输出与 /proc 目录中的信息联系起来。 常见用法 前面我向您介绍了如何简单地运行不带任何参数的 lsof以便显示关于每个进程所打开的文件的信息。本文余下的部分将重点关注如何使用 lsof 来显示所需的信息以及如何正确地对其进行解释。 查找应用程序打开的文件 lsof 常见的用法是查找应用程序打开的文件的名称和数目。您可能想尝试找出某个特定应用程序将日志数据记录到何处或者正在跟踪某个问题。例如UNIX 限制了进程能够打开文件的数目。通常这个数值很大所以不会产生问题并且在需要时应用程序可以请求更大的值直到某个上限。如果您怀疑应用程序耗尽了文件描述符那么可以使用 lsof 统计打开的文件数目以进行验证。 要指定单个进程可以使用 -p 参数后面加上该进程的 PID。因为这样做不仅会返回该应用程序所打开的文件还会返回共享库和代码所以通常需要对输出进行筛选。要完成此任务可以使用 -d 标志根据 FD 列进行筛选使用 -a 标志表示两个参数都必须满足 (AND)。如果没有 -a 标志缺省的情况是显示匹配任何一个参数 (OR) 的文件。清单 2 显示了 sendmail 进程打开的文件并使用 txt 对这些文件进行筛选。 清单 2. 带有 PID 筛选器并进行 txt 文件描述符筛选的 lsof 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sh-3.00# lsof -a -p 605 -d ^txt COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF     NODE NAME sendmail 605 root  cwd   VDIR  136,8     1024    23554 /var/spool/mqueue sendmail 605 root    0r  VCHR  13,2            6815752 /devices/pseudo/mm0:null sendmail 605 root    1w  VCHR  13,2            6815752 /devices/pseudo/mm0:null sendmail 605 root    2w  VCHR  13,2            6815752 /devices/pseudo/mm0:null sendmail 605 root    3r  DOOR             0t0       58         /var/run/name_service_door(door to nscd[81]) (FA:-0x30002b156c0) sendmail 605 root    4w  VCHR  21,0           11010052                         /devices/pseudo/log0:conslog-LOG sendmail 605 root    5u  IPv4 0x300010ea640      0t0      TCP *:smtp (LISTEN) sendmail 605 root    6u  IPv6 0x3000431c180      0t0      TCP *:smtp (LISTEN) sendmail 605 root    7u  IPv4 0x300046d39c0      0t0      TCP *:submission (LISTEN) sendmail 605 root    8wW VREG         281,3       32  8778600 /var/run/sendmail.pid 清单 2 为 lsof 指定了三个参数。第一个是 -a它表示当所有的参数都为真时才显示这个文件。第二个参数是 -p 605它限制仅输出 PID 为 605 的进程可以通过 ps 命令获取这个信息。最后一个参数 -d ^txt它表示筛选出其中 txt 类型的记录脱字符号 [^] 表示排除。 清单 2 的输出提供了关于进程行为的信息。如 cwd 行所示该应用程序的工作目录为 /var/spool/mqueue。文件描述符 0、1 和 2 分配给了 /dev/nullSolaris 大量使用符号链接所以这里显示了相应的伪设备。FD 3 是一个 Solaris 门高速远程过程调用 (RPC) 接口以只读模式打开。FD 4 中的内容比较有趣因为它是一个字符设备的只读句柄实质上是 /dev/log。从这个文件中您可以收集该应用程序向 UNIX syslog 守护进程进行的记录所以 /etc/syslog.conf 规定了日志文件的位置。 作为一个网络应用程序sendmail 对网络端口进行监听。文件描述符 5、6 和 7 可以告诉您该应用程序正以 IPv4 和 IPv6 模式监听简单邮件传输协议 (SMTP) 端口并以 IPv4 模式监听提交端口。最后一个文件描述符是只写的并且指向 /var/run/sendmail.pid。FD 列中的大写 W 表示该应用程序具有对整个文件的写锁。该文件用于确保每次只能打开一个应用程序实例。 查找打开某个文件的应用程序 在其他情况下您有一个文件或目录并且需要知道哪个应用程序控制了该文件打开了该文件。清单 2 显示了由 sendmail 进程打开了 /var/run/sendmail.pid。如果您不知道这个信息那么在给定文件名的情况下lsof 可以提供该信息。清单 3 显示了相应的输出。 清单 3. 要求 lsof 显示关于某个文件的信息 1 2 3 bash-3.00# lsof /var/run/sendmail.pid COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME sendmail 605 root    8wW VREG  281,3       32 8778600 /var/run/sendmail.pid 正如输出所示进程 sendmailPID 为 605控制了文件 /var/run/sendmail.pid并且通过排它锁打开该文件以便进行写入。如果出于某种原因您需要删除这个文件那么正确的做法是中止该进程而不是直接删除这个文件。否则这个守护进程下次可能无法正常启动或者可能稍后会启动另一个实例从而导致争用。 有时您只知道在文件系统的某处打开了文件。在卸载文件系统时如果该文件系统中有任何打开的文件那么操作将会失败。通过指定装入点的名称您可以使用 lsof 显示一个文件系统中所有打开的文件。清单 4 显示了如何尝试卸载 /export/home然后使用 lsof 找出谁在使用该文件系统。 清单 4. 使用 lsof 找出谁在使用文件系统 1 2 3 4 5 6 7 8 bash-3.00# umount /export/home umount: /export/home busy bash-3.00# lsof /export/home COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME bash    1943 root  cwd   VDIR  136,7     1024    4 /export/home/sean bash    2970 sean  cwd   VDIR  136,7     1024    4 /export/home/sean ct      3030 sean  cwd   VDIR  136,7     1024    4 /export/home/sean ct      3030 sean    1w  VREG  136,7        0   25 /export/home/sean/output 在这个示例中用户 sean 正在其 home 目录中进行一些操作。有两个 bash一种 Shell实例正在运行并且当前目录设置为 sean 的 home 目录。还有一个名为 ct 的应用程序正运行于相同的目录并且其标准输出文件描述符 1重定向到一个名为 output 的文件。要成功地卸载 /export/home应该在通知用户以确保情况正常之后中止这些进程。 这个示例说明了应用程序的当前工作目录非常重要因为它仍保持着文件资源并且可以防止文件系统被卸载。这就是为什么大部分守护进程后台进程将它们的目录更改为根目录、或服务特定的目录如 sendmail 示例中的 /var/spool/mqueue的原因以避免该守护进程阻止卸载不相关的文件系统。如果 sendmail 从 /export/home/sean 目录启动并且没有将其目录更改为 /var/spool/mqueue那么在卸载 /export/home 前必须中止它。 如果您对非装入点目录中打开的文件感兴趣那么必须通过 d 或 D 指定该目录的名称具体使用其中的哪一个标志取决于您需要递归到子目录D或者不需要递归到子目录d。例如要查看 /export/home/sean 中所有打开的文件可以使用 lsof D /export/home/sean。在前面的示例中相关的目录是一个装入点而这里与前面的示例存在细微的差别并且限制了 lsof 和内核之间的交互。这还会引起潜在的问题即 lsof /export/home 与 lsof /export/home/请注意尾部的斜杠有所区别。第一种方式可以正常工作因为它指向了装入点。第二种方式不会生成任何输出因为它指向了目录。如果您在 Shell 中使用 Tab 键自动完成命令那么可能碰到这个问题其中会帮助您添加结尾的斜杠。在这种情况下您可以删除这个斜杠或者使用 D 指定目录。前者是首选的方法因为与指定任意的目录相比其执行速度更快。 不常见的用法 在前面的部分中我们研究了 lsof 的基本用法即显示打开的文件和控制它们的进程之间的关系。当您想对系统进行一些烦琐的操作而又不希望破坏别人重要的文档时这种方法很有帮助。您还可以使用相同的方法执行一些高难度的 UNIX 操作。 恢复删除的文件 当 UNIX 计算机受到入侵时常见的情况是日志文件被删除以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件比如在清理旧日志时意外地删除了数据库的活动事务日志。有时可以恢复这些文件并且 lsof 可以为您提供帮助。 当进程打开了某个文件时只要该进程保持打开该文件即使将其删除它依然存在于磁盘中。这意味着进程并不知道文件已经被删除它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外这个文件是不可见的因为已经删除了其相应的目录条目。 前面曾在转到 /proc 目录部分中说过通过在适当的目录中进行查找您可以访问进程的文件描述符。在随后的内容中您看到了 lsof 可以显示进程的文件描述符和相关的文件名。您能明白我的意思吗 但愿它真的这么简单当您向 lsof 传递文件名时比如在 lsof /file/I/deleted 中它首先使用 stat() 系统调用获得有关该文件的信息不幸的是这个文件已经被删除。在不同的操作系统中lsof 可能可以从核心内存中捕获该文件的名称。清单 5 显示了一个 Linux 系统其中意外地删除了 Apache 日志我正使用 grep 工具查找是否有人打开了该文件。 清单 5. 在 Linux 中使用 lsof 查找删除的文件 1 2 3 4 5 6 # lsof | grep error_log httpd      2452     root    2w      REG       33,2      499    3090660                     /var/log/httpd/error_log (deleted) httpd      2452     root    7w      REG       33,2      499    3090660                     /var/log/httpd/error_log (deleted) ... more httpd processes ... 在这个示例中您可以看到 PID 2452 打开文件的文件描述符为 2标准错误和 7。因此可以在 /proc/2452/fd/7 中查看相应的信息如清单 6 所示。 清单 6. 通过 /proc 查找删除的文件 1 2 3 4 # cat /proc/2452/fd/7 [Sun Apr 30 04:02:48 2006] [notice] Digest: generating secret for digest authentication [Sun Apr 30 04:02:48 2006] [notice] Digest: done [Sun Apr 30 04:02:48 2006] [notice] LDAP: Built with OpenLDAP LDAP SDK Linux 的优点在于它保存了文件的名称甚至可以告诉我们它已经被删除。在遭到破坏的系统中查找相关内容时这是非常有用的内容因为攻击者通常会删除日志以隐藏他们的踪迹。Solaris 并不提供这些信息。然而我们知道 httpd 守护进程使用了 error_log 文件所以可以使用 ps 命令找到这个 PID然后可以查看这个守护进程打开的所有文件。 清单 7. 在 Solaris 中查找删除的文件 1 2 3 4 5 6 7 8 9 10 11 12 13 # lsof -a -p 8663 -d ^txt COMMAND  PID   USER   FD   TYPE        DEVICE SIZE/OFF    NODE NAME httpd   8663 nobody  cwd   VDIR         136,8     1024       2 / httpd   8663 nobody    0r  VCHR          13,2          6815752 /devices/pseudo/mm0:null httpd   8663 nobody    1w  VCHR          13,2          6815752 /devices/pseudo/mm0:null httpd   8663 nobody    2w  VREG         136,8      185  145465 / (/dev/dsk/c0t0d0s0) httpd   8663 nobody    4r  DOOR                    0t0      58 /var/run/name_service_door                         (door to nscd[81]) (FA:-0x30002b156c0) httpd   8663 nobody   15w  VREG         136,8      185  145465 / (/dev/dsk/c0t0d0s0) httpd   8663 nobody   16u  IPv4 0x300046d27c0      0t0     TCP *:80 (LISTEN) httpd   8663 nobody   17w  VREG         136,8        0  145466                                                           /var/apache/logs/access_log httpd   8663 nobody   18w  VREG         281,3        0 9518013 /var/run (swap) 我使用 -a 和 -d 参数对输出进行筛选以排除代码程序段因为我知道需要查找的是哪些文件。Name 列显示出其中的两个文件FD 2 和 15使用磁盘名代替了文件名并且它们的类型为 VREG常规文件。在 Solaris 中删除的文件将显示文件所在的磁盘的名称。通过这个线索就可以知道该 FD 指向一个删除的文件。实际上查看 /proc/8663/fd/15 就可以得到所要查找的数据。 如果可以通过文件描述符查看相应的数据那么您就可以使用 I/O 重定向将其复制到文件中如 cat /proc/8663/fd/15 /tmp/error_log 。此时您可以中止该守护进程这将删除 FD从而删除相应的文件将这个临时文件复制到所需的位置然后重新启动该守护进程。 对于许多应用程序尤其是日志文件和数据库这种恢复删除文件的方法非常有用。正如您所看到的有些操作系统以及不同版本的 lsof比其他的系统更容易查找相应的数据。 查找网络连接 网络连接也是文件这意味着可以使用 lsof 获得关于它们的信息。您曾在清单 2 中看到过这样的示例。该示例假设您已经知道 PID但是有时候并非如此。如果您只知道相应的端口那么可以使用 -i 参数利用套接字信息进行搜索。清单 8 显示了对 TCP 端口 25 的搜索。 清单 8. 查找监听端口 25 的进程 1 2 3 4 # lsof -i :25 COMMAND  PID USER   FD   TYPE        DEVICE SIZE/OFF NODE NAME sendmail 605 root    5u  IPv4 0x300010ea640      0t0  TCP *:smtp (LISTEN) sendmail 605 root    6u  IPv6 0x3000431c180      0t0  TCP *:smtp (LISTEN) 需要以 protocol:ip:port 的形式向 lsof 实用程序传递相关信息其中的 protocol 为 TCP 或 UDP可以使用 4 或 6 作为前缀表示 IP 的版本IP 为可解析的名称或 IP 地址而 port 为数字或表示该服务的名称来自 /etc/services。需要一个或多个元素端口、IP、协议。在清单 8 中:25 表示端口 25。输出显示进程 605 正在使用 IPv6 和 IPv4 监听端口 25。如果您对 IPv4 不感兴趣那么可以将筛选器改为 6:25以表示监听端口 25 的 IPv6 套接字或者直接使用 6 表示所有的 IPv6 连接。 除了显示出这些守护进程正在监听的对象lsof 还可以发现发生的连接同样是使用 -i 参数。清单 9 显示了搜索与 192.168.1.10 之间的所有连接。 清单 9. 搜索活动的连接 1 2 3 4 5 6 # lsof -i 192.168.1.10 COMMAND  PID USER   FD   TYPE        DEVICE  SIZE/OFF NODE NAME sshd    1934 root    6u  IPv6 0x300046d21c0 0t1303608  TCP sun:ssh-linux:40379                              (ESTABLISHED) sshd    1937 root    4u  IPv6 0x300046d21c0 0t1303608  TCP sun:ssh-linux:40379                              (ESTABLISHED) 在这个示例中sun 和 linux 之间有两个 IPv6 连接。对其进行更仔细的研究可以看出这些连接来自于两个不同的进程但它们却是相同的这是因为两台主机是相同的并且端口也是相同的ssh 和 40379。这是由于进入主进程的连接分叉出一个处理程序并将该套接字传递给它。您还可以看到名为 sun 的计算机正在使用端口 22 (ssh)而 linux 具有端口 40379。这表示sun 是该连接的接收者因为它关联于该服务的已知端口。40379 是源或临时端口并且仅对这个连接有意义。 因为至少在 UNIX 中套接字是另一类文件所以 lsof 可以获得关于这些连接的详细信息并找出谁对它们负责。 结束语 UNIX 大量使用了文件。作为系统管理员lsof 允许您对核心内存进行查看以找出系统当前如何使用这些文件。lsof 最简单的用法可以告诉您哪些进程打开了哪些文件以及哪些文件由哪些进程打开。在收集关于应用程序工作情况的信息时或在进行某些可能损坏数据的操作前确保文件未被使用时这一点特别重要lsof 更高级的用法可以帮助您查找删除的文件并获得关于网络连接的信息。这是一个功能强大的工具它几乎可以用于任何地方。   Reference: 从「https://www.ibm.com/developerworks/cn/aix/library/au-lsof.html  使用 lsof 查找打开的文件」转载  转载于:https://www.cnblogs.com/piperck/p/9833373.html
http://www.zqtcl.cn/news/310035/

相关文章:

  • 安康网站建设公司价格pathon做网站
  • jq网站模板宣城有做网站的公司吗
  • 江苏个人备案网站内容大连seo加盟
  • 服装网站建设公司地址公司网站建设需要注意什么
  • 免费行情软件网站下载安装电子商务网站建设实训报告
  • wordpress怎么添加企业网站美化网站公司
  • 工作室网站源码全球军事网站
  • 网站设计模板免费建站珠海正规网站制作排名费用多少
  • 北京沙河教做网站的wordpress增加自适应功能
  • 中国著名的个人网站网站设计怎么做ppt答辩
  • 郑州做招商的网站网站后台主流网站开发语言
  • 专业足球网站开发铜陵网站优化
  • 南昌高端网站开发山西太原网站建设公司
  • 青岛专业制作网站的公司吗百度咨询
  • 自定义网站模块深圳宝安区有什么好玩的地方
  • 如何增加网站的外链微平台网站支持html5实现游戏
  • 平台网站建设网站邯郸seo优化
  • 做网站着用什么软件盐城网站建设电话
  • 自己的网站wordpress自动变化文字
  • 北京制作网站公司哪家好wordpress小工具不显示不出来
  • 如何建设一个新的网站h5网站建设价格
  • 无锡专业做网站的怎么攻击php做的网站
  • 盐城网站建设代理商wordpress定义字体颜色
  • 成都旅游网站建设地址自己做的网站怎么被搜索出来
  • 网站建设免费免代码商城微网站如何做
  • 网站建设域名是什么东莞网络科技营销
  • 法语网站建设高端网站建设 骆
  • vue网站开发注意事项做设计想接外单去哪个网站好
  • 免费模板下载网站推荐苏州seo
  • 徐州市水利工程建设有限公司网站网站建设技术团队有多重要性