Linux File and File Descriptor Information: Difference between revisions
(8 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
* [[Ls#ls_and_File_Time_Information|<tt>ls</tt> and File Time Information]] | * [[Ls#ls_and_File_Time_Information|<tt>ls</tt> and File Time Information]] | ||
=File Descriptors | =File Size= | ||
==File Size with <tt>wc</tt>== | |||
<syntaxhighlight lang='bash'> | |||
wc -c <path-to-file> | awk '{print $1}' | |||
</syntaxhighlight> | |||
==File Size with <tt>stat</tt>== | |||
<syntaxhighlight lang='bash'> | |||
stat -c %s "/etc/passwd" | |||
stat --format=%s "/etc/passwd" | |||
</syntaxhighlight> | |||
On Mac: | |||
<syntaxhighlight lang='bash'> | |||
stat -f %z "/etc/passwd" | |||
</syntaxhighlight> | |||
==File Size with <tt>du</tt>== | |||
<syntaxhighlight lang='bash'> | |||
du --apparent-size --block-size=1 "/etc/passwd" | |||
</syntaxhighlight> | |||
==File Size with <tt> find </tt>== | |||
<syntaxhighlight lang="bash"> | |||
find "/etc/passwd" -printf "%s" | |||
</syntaxhighlight> | |||
=File Descriptors= | |||
There's a ''per-process'' maximum number of allowed [[Linux_General_Concepts#File_Descriptor|file descriptors]] - that can be set on a per-user basis - and a ''per-system'' limit. | There's a ''per-process'' maximum number of allowed [[Linux_General_Concepts#File_Descriptor|file descriptors]] - that can be set on a per-user basis - and a ''per-system'' limit. | ||
Line 13: | Line 39: | ||
For more information about file descriptors see: {{Internal|Linux_General_Concepts#File_Descriptor|Unix File Descriptors}} | For more information about file descriptors see: {{Internal|Linux_General_Concepts#File_Descriptor|Unix File Descriptors}} | ||
=Number of Allowed File Descriptors= | ==Number of Allowed File Descriptors== | ||
==Allowed File Descriptors Per System== | ===Allowed File Descriptors Per System=== | ||
<pre> | <pre> | ||
Line 33: | Line 59: | ||
</pre> | </pre> | ||
==Allowed File Descriptors Per Process== | ===Allowed File Descriptors Per Process=== | ||
<pre> | <pre> | ||
Line 47: | Line 73: | ||
</blockquote> | </blockquote> | ||
=Number of Used File Descriptors= | ==Number of Used File Descriptors== | ||
==Used File Descriptors per System== | ===Used File Descriptors per System=== | ||
<pre> | <pre> | ||
Line 57: | Line 83: | ||
The results show, in order: total allocated open file descriptor, total free allocated file descriptors, maximum. | The results show, in order: total allocated open file descriptor, total free allocated file descriptors, maximum. | ||
==Used File Descriptors per Process== | ===Used File Descriptors per Process=== | ||
The number of opened [[Linux_General_Concepts#File_Descriptor|file descriptors]] per process can be inferred by listing the content of <tt>/proc/<pid>/fd</tt> directory. This directory contains links representing the ''open file descriptors'' of the process in question and the files they represent: | The number of opened [[Linux_General_Concepts#File_Descriptor|file descriptors]] per process can be inferred by listing the content of <tt>/proc/<pid>/fd</tt> directory. This directory contains links representing the ''open file descriptors'' of the process in question and the files they represent: |
Latest revision as of 03:01, 25 December 2020
External
- http://www.netadmintools.com/art295.html
- http://www.cs.wisc.edu/condor/condorg/linux_scalability.html
Internal
File Size
File Size with wc
wc -c <path-to-file> | awk '{print $1}'
File Size with stat
stat -c %s "/etc/passwd"
stat --format=%s "/etc/passwd"
On Mac:
stat -f %z "/etc/passwd"
File Size with du
du --apparent-size --block-size=1 "/etc/passwd"
File Size with find
find "/etc/passwd" -printf "%s"
File Descriptors
There's a per-process maximum number of allowed file descriptors - that can be set on a per-user basis - and a per-system limit.
For more information about file descriptors see:
Number of Allowed File Descriptors
Allowed File Descriptors Per System
cat /proc/sys/fs/file-max
To change it:
echo "200000" > /proc/sys/fs/file-max
or set the following in /etc/sysctl.conf:
fs.file-max = 200000
Allowed File Descriptors Per Process
ulimit -n
To change it: ulimit - Set a Value.
More on ulimit:
Number of Used File Descriptors
Used File Descriptors per System
cat /proc/sys/fs/file-nr
The results show, in order: total allocated open file descriptor, total free allocated file descriptors, maximum.
Used File Descriptors per Process
The number of opened file descriptors per process can be inferred by listing the content of /proc/<pid>/fd directory. This directory contains links representing the open file descriptors of the process in question and the files they represent:
ls -l /proc/<pid>/fd
total 0 lr-x------. 1 vagrant vagrant 64 May 3 09:45 0 -> /dev/null lrwx------. 1 vagrant vagrant 64 May 3 09:45 1 -> /dev/pts/0 (deleted) ...
The number of open file descriptors can be obtained with:
ls -l /proc/<pid>/fd | wc -l
and subtract 1 from it (discard "total 0" line).
Information about a specific open file is provided in the /proc/<pid>/fdinfo/<fd> files. A typical fdinfo file contains a "pos" field, which represents the current offset of the opened file in decimal form and "flags" which is the octal O_xxx mask the file has been created with.
The contents of /proc/<pid>/fd and /proc/<pid>/fdinfo are in sync.
Open Files
All files opened on the system can be obtained with:
lsof
All files opened by one process can be obtained with:
lsof -p <pid>
Note that the output of lsof includes all information that can be obtained by listing the /proc/<pid>/fd directory, and also other files that have a special significance for the process and are not associated with file descriptors, such as the current working directory, the root directory, memory mapped files, etc.
More about lsof: