资讯详情

Ubuntu下进程管理工具

Ubuntu下一步管理工具 进程管理 一些细节 该过程一般分为交互过程、批处理过程和保护过程三类。 保护过程总是活跃的,通过脚本自动启动或由系统启动root启动,通常在后台运行。 一个过程可以有子过程。当父亲的过程终止时,其子过程也会终止;当子过程终止时,父亲的过程通常可以继续运行。 init 所有的过程都是它的子过程 ps 可以省略显示过程信息的参数 - aux 以BSD风格显示过程 常用 -efH 以System V风格显示过程 -e , -A 显示所有过程 a 显示终端上所有用户的过程 x 显示无终端进程 u 详细信息显示 f 树状显示 w 完整显示信息 l 显示长列表 示例: ps alx 另一种常用的输出格式 ps aux | less 通过管道使用输出 less 查看 ps aux | grep <关键字> 查找关键字的过程 输出字段 USER 进程所有者 PID 进程ID PPID 父进程 %CPU CPU占用率 %MEM 内存占用率 NI 过程优先级。数值越大,占用越大。CPU时间越少 VSZ 虚拟大小的过程 RSS 占用页面文件 TTY 终端ID STAT 进程状态 D 不可中断 Uninterruptible sleep (usually IO) R 正在运行,或在队列中的过程 S 处于休眠状态 T 停止或跟踪 Z 僵尸进程 W 进入内存交换(从内核2).6开始无效) X 死掉的进程 < 高优先级 N 低优先级 L 有些页面被定在内存中 s 包含子进程 后台的进程组; l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do) pstree 树状显示过程信息 -a 显示完整命令及参数 -c 分别显示重复过程 -c 显示进程ID PID -n 按 PID 排列进程 pgrep <进程名> 显示进程的PID -l 显示过程名和过程PID -o 进程起始ID -n 进程终止ID xkill 点击图形界面中的杀戮过程。执行此命令后,鼠标指针变成骷髅图案(必须看到加勒比海盗)。单击窗口中的左键杀死过程,右键取消 pkill <进程名> 结束过程族。如果单个过程结束,请使用 kill kill [信号代码] <进程PID> 根据PID向过程发送信号通常用于结束过程。默认信号是 -9 -l [信号数字] 显示和翻译信号代码 -9 , -KILL 发送 kill 信号退出 -6 , -ABRT 发送 abort 信号退出 -15 , -TERM 发送 Termination 信号 -1 , -HUP 挂起 -2 , -INT 相当于从键盘中断 Ctrl c -3 , -QUIT 退出键盘相当于 Ctrl d -4 , -ILL 非法指令 -11 , -SEGV 内存错误 -13 , -PIPE 破坏管道 -14 , -ALRM -STOP 停止过程,但不结束 -CONT 继续运行已停止的过程 -9 -1 结束当前用户的所有流程 renice <优先表达式> <进程表达式> 重新设置过程优先级(无必要) 优先表达式: |-|= <nice值> nice取值范围: -20~19 流程表达式: -p <PID> 通过进程ID进行设定 -g <PGID> 通过进程组ID -u <UID> 过程所有者UID设定 top 交互式过程管理器 -c 显示进程启动状态,包括参数、操作对象等;而不只是进程名 -d <秒> 刷新频率。 -d 5.说明5秒刷新一次 -n <次> 刷新次数,然后退出。 -n 5.刷新5次后退出; -b 批量运行,使输出可以使用管道或重定向。但是不能互动,最好和 -n <次> 一起使用参数 -i 禁止显示空闲过程或僵尸过程; -p PID 仅监控指定的过程ID;PID是一个值; -s 运行安全模式,禁止一些效互指令; -S 累积模式,每个过程的总输出CPU时间,包括死子过程; 交互命令: <space> 立即刷新 k 交互式杀死过程提示输入过程 PID (默认发送信号15) r 设定renice,提示输入PID和renice值 s 改变两次刷新时间间隔,以秒为单位 n 设置显示过程数, 0 为不作限制 i 隐藏空闲和僵尸的过程 S 切换到累积时间模式 l 顶部显示开关 uptime 信息 t 顶部显示开关 进程和CPU状态 m 顶部显示开关 free 信息 c 切换显示模式: 过程名/过程启动状态 A 按照过程启动顺序。从新到旧。 M 按内存占用排序。从大到小。 N 以进程ID从大到小排序 P 按CPU占用排名。从大到小 T 按时间/累积时间排序 f ,F 设置显示字段。设置完成后,退出空 o,O 设置显示字段的排序。大写向前移动,小写向后移动,空间退出 h,? 显示安全模式和累积模式的帮助信息 W 写下当前配置~/.toprc中; nohup <命令> 将任务提交到后台,并附加输出 ~/nohup.out 文件。即使用户退出登录,提交的命令也会继续执行。 <命令> & 背景执行此命令。如果用户退出登录,命令将停止执行 <命令1> ; <命令2> ; ... 命令队列从左到右依次执行 ; 分隔的命令 <命令1> && <命令2> && ... 命令队列从左到右依次执行 && 分隔的命令。前一个命令执行成功,后一个命令才能执行 <命令> <Ctrl z> <Ctrl z> 挂起当前Shell中的任务 jobs 显示背景任务 bg [任务号] 执行挂起的任务背景 fg [任务号] 将背景任务转移到前台执行 计划任务 cron anacron 磁盘和内存管理 一些细节 Linux中、设备/dev/目录下的文件表示。 /dev/hda1 第一块硬盘的第一主分区 /dev/hdb5 第二块硬盘的第一逻辑分区 /dev/sda4 第一块SATA硬盘第四主分区,或扩展分区 /dev/null 黑洞设备 详见磁盘设备 分区概念 mount <设备文件> [挂载路径] 挂载文件系统 -t 指定文件系统的类型。通常不需要指定,mount自动检测。以下是常用的格式 reiserfs ReiserFS 3.6版 jfs IBM技术 xfs SGI技术(适用于高级服务器,桌面用户慎用) ext3 Linux传统文件系统 vfat fat fat32 ext2 不带日志的ext3 ntfs WINNT iso9660 光盘 smbfs Windows文件共享 -o [选项1] [选项2] ... loop 环设备。光盘、ISO镜像等 ro | rw 只读readonly;可读写read-write sync | async 同步模式|异步模式。决定修改是否立即写入文件系统 atime | noattime 读取时是否修改访问时间。建议使用敏感设备,如闪存和软盘 *noatime* auto | noauto 自动吊载模式 exec | noexec 是否允许执行权限 defaults 使用预设选项 rw, suid, dev, exec, auto, nouser, async iocharset=UTF-8 指定字符集可以简写为 utf8 codepage=936 指定的代码页可以简写为 cp936 西文系统代码页为 437 umask=<权限掩码> 设置权限掩码 uid=<UID> 设置所有用户 gid=<GID> 设置归属组 remount 重新加载不同的选项 -L <卷标> 带有特殊卷标的分区 Tip 权限掩码 权限=777-权限掩码(三位) | 7777-权限掩码(四位) 若权限掩码为 022 ,新对象权限为 755 rwxr-xr-x 可以使用 umask 命令设置权限掩码 mount -a 挂载 /etc/fstab 文件中定义的所有设备 示例: sudo mount -t iso9660 -o loop /dev/cdrom0 /media/cdrom sudo mount -t vfat -o remount iocharset=utf8,codepage=cp936 /dev/hda5 /media/hda5 umount <设备文件> | <挂载路径> 卸载已挂载的文件系统 df 查看已挂载文件系统磁盘空间占用的磁盘空间 -a 显示所有文件系统的磁盘使用情况,包括0块(block)例如/proc文件系统 -T 显示文件系统类型 -k 以k字节为单位显示 -i 显示i节点信息而不是磁盘块 -t <文件系统类型> 磁盘空间使用显示指定类型的文件系统 -x <文件系统类型> 列出磁盘空间的使用情况的磁盘空间使用情况(与t选项相反)。 -l 只显示本地文件系统 free 查看内存、缓冲区、交换空间的占用 -b 以字节为单位显示值 -k 数值以千字节为单位显示 -m 以兆字节为单位显示值 -g 以吉字节为单位显示数值 -l 显示内存占用峰值 -o 不显示缓冲区占用 -t 统计结果 -s <秒> 新频率 sync 同步文件系统。将缓冲区中的数据写入文件系统 fdisk <磁盘设备文件> 分区表修改工具 交互命令: m 使用帮助 l 查看已知文件系统类型 p 显示分区信息 n 新建分区 (p:主分区 l:扩展分区 参见 分区概念 ) d 删除分区 t 改变分区类型 w 将改动写入分区表 q 放弃改动并退出 * 磁盘设备名称为整块磁盘,而不是磁盘中的分区。例如 /dev/hda ,而不是 /dev/hda1fdisk -l 查看所有磁盘分区信息 cfdisk 更加友善的分区表修改工具 mkfs.<文件系统类型> <分区设备文件> 将分区格式化为文件系统。 文件系统类型 示例: sudo mkfs.reiserfs /dev/hda1mkfs <分区设备文件> -t <文件系统类型> 指定文件系统类型 -c 格式化前检查磁盘mkisofs -o <镜像文件> [源文件目录] 用光盘或者文件制作iso镜像 -b 可启动镜像 hdparm <磁盘设备文件> 设置硬盘参数 -d <0|1> DMA模式开关 -a <0|1> 预计模式开关 -t 性能测试 -T 缓存性能测试 -c <0|1|3> 32位传输模式开关 -g 显示柱面,扇区等信息 -i -I 显示磁盘信息 网络和硬件管理 ifconfig 配置网络接口 -a 显示所有网络接口ifconfig <网卡> up|down 激活|禁用网卡 示例: :: sudo ifconfig eth0 upifconfig <网卡> add <IP地址> [ netmask <子网掩码> ] 给网卡指定IP地址或子网掩码 route 配置路由及网关 route add -net <路由地址> gw <网关地址> [ netmask <子网掩码> ] dev <网卡> 指定路由及网关 route del -net <网关地址> gw <网关地址> [ netmask <子网掩码> ] 删除路由及网关 ip 配置网络 子命令: link 网卡配置 address 配置地址。相当于 ifconfig route 配置路由。相当于 route 参数: show 显示 (默认) set 设置 add 添加 del 删除 示例: ip link show 显示网卡配置 ip link set eth0 name xxx 重命名网络接口 ping <IP地址> 向目标地址发送ICMP封包,常用来测试网络 -b <广播地址> ping整个网段 -c 发送封包次数 -s <封包大小> 默认为64字节 netstat 网络连接状态 -r 显示路由表,同 route -a 所有连接 -t 只显示TCP协议 -U 只显示UDP协议 -l 只显示正在监听的端口 -p 显示PID和进程名 -c <秒> 刷新频率 * http/ftp/ssh…… 为应用层协议 * TCP/UDP为传输层协议 * IP/ICMP为网络层协议 lspci 查看PCI总线连接的设备 lsusb 查看USB接口连接的设备 lsmod 查看已加载模块 * /lib/modules/uname -r 目录下为所有可用模块 modprobe <模块名称> 启用模块chkconfig: chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 语法: chkconfig --list [name] chkconfig --add name chkconfig --del name chkconfig [--level levels] name <on|off|reset> chkconfig [--level levels] name chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。 --level选项可以指定要查看的运行级而不一定是当前运行级。 需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。 chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。 chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。 chkconfig --del name一、sysv-rc-conf简介 sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconfig好用。二、背景知识1、Ubuntu运行级别 Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作。Ubuntu 的系统运行级别:0 系统停机状态1 单用户或系统维护状态2~5 多用户状态6 重新启动 查看当前运行级别,执行命令: runlevel ( runlevel 显示上次的运行级别和当前的运行级别,“N”表示没有上次的运行级别。)切换运行级别,执行命令: int [0123456Ss] ( 即在 init 命令后跟一个参数,此参数是要切换到的运行级的运行级代号,如:用 init 0 命令关机;用 init 6 命令重新启动。)Linux 系统主要启动步骤: 1. 读取 MBR 的信息,启动 Boot Manager Windows 使用 NTLDR 作为 Boot Manager,如果您的系统中安装多个 版本的 Windows,您就需要在 NTLDR 中选择您要进入的系统。 Linux 通常使用功能强大,配置灵活的 GRUB 作为 Boot Manager。 2. 加载系统内核,启动 init 进程 init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。 3. init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别, 按顺序运行该运行级别对应文件夹下的脚本。脚本通常以 start 参数启 动,并指向一个系统中的程序。 通常情况下, /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是 /etc/rcN.d/ 目录。例如您设定的运行级别为 3,那么它对应的启动 目录为 /etc/rc3.d/ 。 4. 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg Xwindow 为 Linux 下的图形用户界面系统。 5. 启动登录管理器,等待用户登录 Ubuntu 系统默认使用 GDM 作为登录管理器,您在登录管理器界面中 输入用户名和密码后,便可以登录系统。(您可以在 /etc/rc3.d/ 文件夹中找到一个名为 S13gdm 的链接)三、安装sysv-rc-confsudo apt-get install sysv-rc-conf四、使用sysv-rc-confsudo sysv-rc-conf 操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。常见的系统服务有: acpi-support 高级电源管理支持 acpid acpi 守护程序.这两个用于电源管理,非常重要 alsa 声音子系统 alsa-utils anacron cron 的子系统,将系统关闭期间的计划任务,在下一次系统运行时执行。 apmd acpi 的扩展 atd 类似于 cron 的任务调度系统。建议关闭 binfmt-support 核心支持其他二进制的文件格式。建议开启 bluez-utiles 蓝牙设备支持 bootlogd 启动日志。开启它 cron 任务调度系统,建议开启 cupsys 打印机子系统。 dbus 消息总线系统(message bus system)。非常重要 dns-clean 使用拨号连接时,清除 dns 信息。 evms 企业卷管理系统(Enterprise Volumn Management system) fetchmail 邮件用户代理守护进程,用于收取邮件 gdm gnome 登录和桌面管理器。 gdomap gpm 终端中的鼠标支持。 halt 别动它。 hdparm 调整硬盘的脚本,配置文件为 /etc/hdparm.conf。 hibernate 系统休眠 hotkey-setup 笔记本功能键支持。支持类型包括: HP, Acer, ASUS, Sony,Dell, 和 IBM。 hotplug and hotplug-net 即插即用支持,比较复杂,建议不要动它。 hplip HP 打印机和图形子系统 ifrename 网络接口重命名脚本。如果您有十块网卡,您应该开启它 inetd 在文件 /etc/inetd.conf 中,注释掉所有你不需要的服务。如果该文件不包含任何服务,那关闭它是很安全的。 klogd 重要。 linux-restricted-modules-common 受限模块支持。 /lib/linux-restricted-modules/ 文件夹中的模块为受限模块。例如某些驱动程序,如果您没有使用受限模块,就不需要开启它。 lvm 逻辑卷管理系统支持。 makedev 创建设备文件,非常重要。 mdamd 磁盘阵列 module-init-tools 从/etc/modules 加载扩展模块,建议开启。 networking 网络支持。按 /etc/network/interfaces 文件预设激活网络,非常重要。 ntpdate 时间同步服务,建议关闭。 pcmcia pcmcia 设备支持。 powernowd 移动 CPU 节能支持 ppp and ppp-dns 拨号连接 readahead 预加载库文件。 reboot 别动它。 resolvconf 自动配置 DNS rmnologin 清除 nologin rsync rsync 守护程序 sendsigs 在重启和关机期间发送信号 single 激活单用户模式 ssh ssh 守护程序。建议开启 stop-bootlogd 在 2,3,4,5 运行级别中停止 bootlogd 服务 sudo 检查 sudo 状态。重要 sysklogd 系统日志 udev & udev-mab 用户空间 dev 文件系统(userspace dev filesystem)。重要 umountfs 卸载文件系统 urandom 随机数生成器 usplash 开机画面支持 vbesave 显卡 BIOS 配置工具。保存显卡的状态 xorg-common 设置 X 服务 ICE socket。 adjtimex 调整核心时钟的工具 dirmngr 证书列表管理工具,和 gnupg 一起工作。 hwtools irqs 优化工具 libpam-devperm 系统崩溃之后,用于修理设备文件许可的守护程序。 lm-sensors 板载传感器支持 mdadm-raid 磁盘陈列管理器 screen-cleanup 清除开机屏幕的脚本 xinetd 管理其他守护进程的一个 inetd 超级守护程序ps 显示当前进程 ps -l 显示详细信息 ps -u 以用户的格式显示 相关字段说明 F 进程状态标志 S 进程状态代码 UID 进程执行者ID PPID 父进程标识(parent process ID) PRI 进程执行的优先级(priority) NI 进程执行优先级的nice值,负值表示其优先级较高 SZ 进程占用的内存大小 WCHAN 进程或系统调用等待时的地址 %CPU cpu使用百分比 %MEM 内存使用百分比 VSZ 占用虚拟内存大小 RSS 占用物理内存大小 START 进程开始时间 kill 删除进程 kill pid 删除指定pid的进程 kill -l 查看所有可供传送的信号 kill -9 pid 强制删除进程,传送的是SIGKILL信号 kill -15 pid 强制删除进程,传送的是SIGTERM信号 kill -HUP pid 重启Deamon进程 free 查看内存使用状态 free -s 10 每10秒检查内存使用情况 nice 设置执行优先级,-20~19,19最低 sudo nice –2 vi 将vi的优先级调为-2 renice 修改执行优先级,-20~19,19最低 top 动态显示进程 按”P”键 按CPU使用时间排序 按”M”键 按内存使用多少排序 按”T”键 按执行时间多少排序 按”u”键 监视特定用户 按”K”键 删除进程 top -d 10 指定更新时间 lsof -p 查看进程打开的文件 jobs 命令查看后台作业sof简介lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接 和硬件。所以如传输控制协议 (tcp) 和用户数据报协议 (udp) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因 为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。 lsof使用 lsof输出信息含义 在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 command pid user fd type device size node name init 1 root cwd dir 3,3 1024 2 / init 1 root rtd dir 3,3 1024 2 / init 1 root txt reg 3,3 38432 1763452 /sbin/init init 1 root mem reg 3,3 106114 1091620 /lib/libdl-2.6.so init 1 root mem reg 3,3 7560696 1091614 /lib/libc-2.6.so init 1 root mem reg 3,3 79460 1091669 /lib/libselinux.so.1 init 1 root mem reg 3,3 223280 1091668 /lib/libsepol.so.1 init 1 root mem reg 3,3 564136 1091607 /lib/ld-2.6.so init 1 root 10u fifo 0,15 1309 /dev/initctl 每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下: command:进程的名称 pid:进程标识符 user:进程所有者 fd:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 type:文件类型,如dir、reg等 device:指定磁盘的名称 size:文件的大小 node:索引节点(文件在磁盘上的标识) name:打开文件的确切名称 其中fd 列中的文件描述符cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。 txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序。其次数值表示应用 程序的文件描述符,这是打开该文件时返回的一个整数。如上的最后一行文件/dev/initctl,其文件描述符为 10。u 表示该 文件被打开并处于读取/写入模式,而不是只读 ® 或只写 (w) 模式。同时还有大写 的w 表示该应用程序具有对整个文件的写 锁。该文件描述符用于确保每次只能打开一个应用程序实例。初始打开每个应用程序时,都具有三个文件描述符,从 0 到 2, 分别表示标准输入、输出和错误流。所以大多数应用程序所打开的文件的 fd 都是从 3 开始。 与 fd 列相比,type 列则比较直观。文件和目录分别称为 reg 和 dir。而chr 和 blk,分别表示字符和块设备; 或者 unix、fifo 和 ipv4,分别表示 unix 域套接字、先进先出 (fifo) 队列和网际协议 (ip) 套接字。 lsof常用参数 lsof 常见的用法是查找应用程序打开的文件的名称和数目。可用于查找出某个特定应用程序将日志数据记录到何处,或者正在跟踪某个问题。 例如,linux限制了进程能够打开文件的数目。通常这个数值很大,所以不会产生问题,并且在需要时,应用程序可以请求更大的值(直到某 个上限)。如果你怀疑应用程序耗尽了文件描述符,那么可以使用 lsof 统计打开的文件数目,以进行验证。lsof语法格式是: lsof [options] filename 常用的参数列表: lsof filename 显示打开指定文件的所有进程 lsof -a 表示两个参数都必须满足时才显示结果 lsof -c string 显示command列中包含指定字符的进程所有打开的文件 lsof -u username 显示所属user进程打开的文件 lsof -g gid 显示归属gid的进程情况 lsof +d /dir/ 显示目录下被进程打开的文件 lsof +d /dir/ 同上,但是会搜索目录下的所有目录,时间相对较长 lsof -d fd 显示指定文件描述符的进程 lsof -n 不将ip转换为hostname,缺省是不加上-n参数 lsof -i 用以显示符合条件的进程情况 lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 46 --> ipv4 or ipv6 protocol --> tcp or udp hostname --> internet host name hostaddr --> ipv4地址 service --> /etc/service中的 service name (可以不只一个) port --> 端口号 (可以不只一个) 例如: 查看22端口现在运行的情况 # lsof -i :22 command pid user fd type device size node name sshd 1409 root 3u ipv6 5678 tcp *:ssh (listen) 查看所属root用户进程所打开的文件类型为txt的文件: # lsof -a -u root -d txt command pid user fd type device size node name init 1 root txt reg 3,3 38432 1763452 /sbin/init mingetty 1632 root txt reg 3,3 14366 1763337 /sbin/mingetty mingetty 1633 root txt reg 3,3 14366 1763337 /sbin/mingetty mingetty 1634 root txt reg 3,3 14366 1763337 /sbin/mingetty mingetty 1635 root txt reg 3,3 14366 1763337 /sbin/mingetty mingetty 1636 root txt reg 3,3 14366 1763337 /sbin/mingetty mingetty 1637 root txt reg 3,3 14366 1763337 /sbin/mingetty kdm 1638 root txt reg 3,3 132548 1428194 /usr/bin/kdm x 1670 root txt reg 3,3 1716396 1428336 /usr/bin/xorg kdm 1671 root txt reg 3,3 132548 1428194 /usr/bin/kdm startkde 2427 root txt reg 3,3 645408 1544195 /bin/bash ... ... lsof使用实例一、查找谁在使用文件系统 在卸载文件系统时,如果该文件系统中有任何打开的文件,操作通常将会失败。那么通过lsof可以找出那些进程在使用当前要卸载的文件系统,如下: # lsof /gtes11/ command pid user fd type device size node name bash 4208 root cwd dir 3,1 4096 2 /gtes11/ vim 4230 root cwd dir 3,1 4096 2 /gtes11/ 在 这个示例中,用户root正在其/gtes11目录中进行一些操作。一个 bash是实例正在运行,并且它当前的目录为/gtes11,另一个则显示的是vim正在编辑/gtes11下的文件。要成功地卸载/gtes11,应该 在通知用户以确保情况正常之后,中止这些进程。 这个示例说明了应用程序的当前工作目录非常重要,因为它仍保持着文件资源,并且可以防止文件系统被卸载。这就是为什么大部分守护进程(后台进程)将它们的 目录更改为根目录、或服务特定的目录(如 sendmail 示例中的 /var/spool/mqueue)的原因,以避免该守护进程阻止卸载不相关的文件系统。二、恢复删除的文件当linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。 当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。 在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这 些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 pid 命名的目录中,即 /proc/1234 中包含的是 pid 为 1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信 息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。 当 系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。 假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下: 首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下: # lsof |grep /var/log/messages syslogd 1283 root 2w reg 3,3 5381017 1773647 /var/log/messages (deleted) 从 上面的信息可以看到 pid 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下: # head -n 10 /proc/1283/fd/2 aug 4 13:50:15 holmes86 syslogd 1.4.1: restart. aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started. aug 4 13:50:15 holmes86 kernel: linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 smp wed jul 18 11:18:32 edt 2007 aug 4 13:50:15 holmes86 kernel: bios-provided physical ram map: aug 4 13:50:15 holmes86 kernel: bios-e820: 0000000000000000 - 000000000009f000 (usable) aug 4 13:50:15 holmes86 kernel: bios-e820: 000000000009f000 - 00000000000a0000 (reserved) aug 4 13:50:15 holmes86 kernel: bios-e820: 0000000000100000 - 000000001f7d3800 (usable) aug 4 13:50:15 holmes86 kernel: bios-e820: 000000001f7d3800 - 0000000020000000 (reserved) aug 4 13:50:15 holmes86 kernel: bios-e820: 00000000e0000000 - 00000000f0007000 (reserved) aug 4 13:50:15 holmes86 kernel: bios-e820: 00000000f0008000 - 00000000f000c000 (reserved) 从上面的信息可以看出,查看 /proc/8663/fd/15 就可以得到所要恢复的数据。如果可以通过文件描述符查看相应的数据,那么就可以使用 i/o 重定向将其复制到文件中,如: cat /proc/1283/fd/2 > /var/log/messages 对于许多应用程序,尤其是日志文件和数据库,这种恢复删除文件的方法非常有用。

标签: 传感器ni10u

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台