Daily Linux Command Learning -4-lsof

Source: Internet
Author: User

Lsof (list open files) is a tool that lists open files for the current system. In a Linux environment, everything is in the form of files, with files that not only access regular data, but also access to network connectivity and hardware.

Enter lsof at the terminal to display the file opened by the system, because lsof needs to access core memory and various files, so it must be run as root to fully perform its functions.  Show ExampleCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEinit 1 root cwd DIR 3,3 1024x768 2/Init 1 root RTD DIR 3,3 1024x768 2/init 1 root txt REG 3,3 38432 1763452/sbin/initinit 1 root mem REG 3,3 106114 1091620/lib/libdl-2.6.soinit 1 root mem REG 3,3 7560696 1091614/lib/libc-2.6.soinit 1 root mem REG 3,3 79460 1091669/lib/libselinux.so.1init 1 root mem REG 3,3 223280 1091668/lib/libsepol.so.1init 1 root mem REG 3,3 564136 1091607/lib/ld-2.6.soinit 1 root 10u FIFO 0,15 1309/dev/initctl each column explainseach row displays an open file, and all files opened by all processes are displayed by default if you do not specify a condition. The meaning of the lsof output column information is as follows:COMMAND: Name of the processPID: Process identifierUSER: Process ownerFD: File descriptor in which the application recognizes the file through a file descriptor. such as CWD, TXT, etc.Type : File types, such as Dir, Reg, etc.DEVICE: Specifies the name of the diskSize: Sizes of filesNode : Index node (the identity of the file on disk)Name : Open the exact name of the file Supplementwhere the file descriptor CWD value in the FD column represents the current working directory of the application, which is the directory that the application launches, unless it makes changes to the directory itself. TXT types of files are program code, such as the application binaries themselves or shared libraries, as shown in the list above in the/sbin/init program. The second value represents the application's file descriptor, which is an integer returned when the file is opened. As on the last line of file/dev/initctl, its file descriptor is 10. U means the file is open and in read/write mode, not read-only ® or write-only (w) mode. Also, a capital W indicates that the application has a write lock on the entire file. This file descriptor is used to ensure that only one instance of the application can be opened at a time. When each application is initially opened, it has three file descriptors, from 0 to 2, representing standard input, output, and error streams, respectively. So most applications open files with FD starting from 3. The Type column is more intuitive than the FD column. Files and directories are called REG and Dir, respectively. The CHR and BLK, respectively, represent characters and block devices, or UNIX, FIFO, and IPV4, respectively, representing the UNIX domain sockets, first in and Out (FIFO) queues, and Internet Protocol (IP) sockets. lsof common usage is to find the name and number of files opened by the application. Can be used to find out where a particular application logs the log data, or to track an issue. For example, Linux restricts the number of files that a process can open. This is usually a large number, so there is no problem, and when needed, the application can request a larger value (up to a certain limit). If you suspect that the application is running out of file descriptors, you can use Lsof to count the number of open files for verification. lsof syntax format is: lsof [options] filename Common list of parameterslsof filename Displays all processes that open the specified filelsof-a indicates that two parameters must be met before the results are displayedlsof-c string Displays all open files for the process containing the specified characters in the command columnlsof-u username Displays the files that are open by the user processlsof-g GID shows the process of attribution to GIDlsof +d/dir/Displays files that are opened by the process in the directorylsof +d/dir/, but will search all directories under the directory for a relatively long timelsof-d FD Displays the process for specifying the file descriptorlsof-n do not convert IP to hostname, the default is not to add the-n parameterlsof-i to show condition-eligible processeslsof-i[46] [protocol][@hostname |hostaddr][:service|port]--- IPv4 or IPv6Protocol--- TCP or UDPhostname-Internet host namehostaddr-IPV4 addressService -to-/etc/service in service name (can be more than one)Port-and port number (can be more than one) See what happens with Port 22 now runningEdit# Lsof-i:COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEsshd 1409 root 3u IPv6 5678 TCP *:ssh (LISTEN)view files with file type txt opened by the root user process # lsof-a-u root-d txtCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEinit 1 root txt REG 3,3 38432 1763452/sbin/initmingetty 1632 root txt REG 3,3 14366 1763337/sbin/mingettymingetty 1633 root txt REG 3,3 14366 1763337/sbin/mingettymingetty 1634 Root txt REG 3,3 14366 1763337/sbin/mingettymingetty 1635 root txt REG 3,3 14366 1763337/sbin/mingettymingetty 1636 Root txt REG 3,3 14366 1763337/sbin/mingettymingetty 1637 root txt REG 3,3 14366 1763337/sbin/mingettyKDM 1638 root txt REG 3,3 132548 1428194/usr/bin/kdmX 1670 root txt REG 3,3 1716396 1428336/usr/bin/xorgKDM 1671 Root txt REG 3,3 132548 1428194/usr/bin/kdmstartkde 2427 root txt REG 3,3 645408 1544195/bin/bash... ... lsof Use InstancesEdit find who is using the file systemwhen uninstalling a file system, the operation will typically fail if there are any open files in the file system. Then through lsof you can find out which processes are using the file system currently being uninstalled, as follows: # lsof/gtes11/COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEbash 4208 root cwd DIR 3,1 4096 2/gtes11/vim 4230 root cwd DIR 3,1 4096 2/gtes11/in this example, user root is doing some work in its/GTES11 directory. One bash is the instance running, and its current directory is/GTES11, and the other is that Vim is editing the file under/GTES11. To successfully uninstall/GTES11, you should abort these processes after notifying the user to ensure that the situation is correct. This example illustrates the importance of the current working directory of the application because it retains the file resources and prevents the file system from being unloaded. This is why most daemons (background processes) change their directories to the root directory, or service-specific directories (such as/var/spool/mqueue in the SendMail example) to prevent the daemon from preventing the uninstallation of unrelated file systems.  Recovering deleted Fileswhen a Linux computer is compromised, it is common for the log files to be deleted to conceal the attacker's traces. Administrative errors can also cause accidental deletion of important files, such as the active transaction log of the database is accidentally deleted when the old log is cleaned up. These files can sometimes be recovered by lsof. When a process opens a file, it remains on disk as long as the process remains open for that file, even if it is deleted. This means that the process does not know that the file has been deleted, and it can still read and write to the file descriptor that was provided to it when the file was opened. In addition to this process, this file is not visible because its corresponding directory index node has been deleted. in the/proc directory, it contains various files that reflect the kernel and the process tree. The/proc directory mounts an area that is mapped in memory, so these files and directories do not exist on disk, so when we read and write these files, we actually get the relevant information from memory. Most of the information related to lsof is stored in a directory named after the PID of the process, that is,/proc/1234 contains information about the process with PID 1234. There are various files in each process directory that allow the application to simply understand the process's memory space, file description list characters, symbolic links to files on disk, and other system information. The LSOF program uses this information and other information about the internal state of the kernel to produce its output. So lsof can display information such as the file descriptor of the process and the associated filename. That is, we can find information about the file by accessing the file descriptor of the process. when a file in the system is accidentally deleted, as long as there are processes in the system that are accessing the file, we can recover the contents of the file from the/proc directory by lsof. If the/var/log/messages file is deleted due to misoperation, then the method to restore the/var/log/messages file is as follows:first use lsof to see if there is currently a process open/var/logmessages file, as follows: # lsof |grep/var/log/messagessyslogd 1283 root 2w REG 3,3 5381017 1773647/var/log/messages (deleted)from the above information you can see that the PID 1283 (syslogd) Open file has a file descriptor of 2. You can also see that/var/log/messages has been flagged for deletion. So we can view the corresponding information in/PROC/1283/FD/2 (each file descriptor for the process corresponding to a digitally named file under FD), as follows:# head-n 10/PROC/1283/FD/24 13:50:15 holmes86 syslogd 1.4.1:restart.4 13:50:15 holmes86 kernel:klogd 1.4.1, log Source =/proc/kmsg started.4 13:50:15 holmes86 kernel:linux version 2.6.22.1-8 (rooteverestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 11:18:32 EDT4 13:50:15 holmes86 kernel:bios-provided physical RAM map:4 13:50:15 holmes86 kernel:bios-e820:0000000000000000-000000000009f000 (usable)4 13:50:15 holmes86 kernel:bios-e820:000000000009f000-00000000000a0000 (reserved)4 13:50:15 holmes86 kernel:bios-e820:0000000000100000-000000001f7d3800 (usable)4 13:50:15 holmes86 kernel:bios-e820:000000001f7d3800-0000000020000000 (reserved)4 13:50:15 holmes86 kernel:bios-e820:00000000e0000000-00000000f0007000 (reserved)4 13:50:15 holmes86 kernel:bios-e820:00000000f0008000-00000000f000c000 (reserved)As you can see from the information above, you can get the data you want to recover by looking at/PROC/1283/FD/2. If you can view the data through a file descriptor, you can use I/O redirection to copy it to a file, such as: CAT/PROC/1283/FD/2 >/var/log/messagesThis method of recovering deleted files is useful for many applications, especially log files and databases.

Daily Linux Command Learning -4-lsof

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.