本章说明
标准Linux目录树的重要部分,基于FSSTND文件
系统标准。概述根据不同的目的和给定的要求将目录树分为若干分离的文件系统的一般方法。也说明一些其他方法。
0 R# J* G {- e 背景
8 W. B1 o- N, i: f& a1 H( C
2 O1 w& t5 d7 r0 T+ z 本章松散地基于Linux文件系统标准FSSTND版本1.2(见参考书目[Qui95]),它意图建立一个如何组织Linux系统目录树的标准。这样一个标准具有易于写或port(移植?)Linux
软件、管理Linux系统的优点,因为所有东西都将在他们的一般地方。此标准没有强制所有人遵从的权威,但它有最多的Linuxdistributions的支持。如果没有什么特殊的理由,不遵从FSSTND不是个好主意。FSSTND意图遵从Unix传统和当前趋势,使熟悉其他Unix系统的人对Linux系统更容易接受(反之亦然)。
% ^1 y' |# ]% g* ]7 N! A* J
* T G, B5 F2 Y$ m' F, q 本章并非如FSSTND那么详细。一个系统管理员应该阅读FSSTND以得到全部的理解。
- ^0 _/ Y3 o5 D P
& T) h. V# e. R8 I9 k 本章不详细解释所有文件。其意图并非说明每个文件,而是从文件系统的视角给出系统的一个概览。每个文件的更多的信息在本手册或man页的其他地方。
5 v9 A+ Q4 I; D+ A
6 r8 C$ B& C4 ], d& i 有意将全目录树可以分为小的部分,每个部分可以在自己的磁盘或分区上,以能为磁盘容量所容纳,并易于备份及其他系统管理。主要部分是根、/usr、/var和/home文件系统。每个部分有不同的目的。目录树已被设计成能在Linux
机器的
网络中很好地工作,可以通过只读设备(如CDROM)或NFS
网络共享文件系统的一些部分。
4 H$ j Y+ C5 ^# V! W
5 U' Z) u$ B! s1 f& M* } 下面说明目录树不同部分的任务。
7 @6 w- W7 y$ `; c& N! z- T+ i
% b( ]0 X$ g C
每台机器都有根文件系统(一般在本地盘中,当然也可以在RAM盘或网络盘中),它包含系统引导和使其他文件系统得以mount所必要的文件,根文件系统应该有单用户状态所必须的足够的内容。还应该包括修复损坏系统、恢复备份等的工具。
' Y$ s4 |9 W6 U6 l7 {7 I0 D* y" c: m$ C9 {
/usr文件系统包含所有命令、库、man页和其他一般操作中所需的不改变的文件。/usr应该没有对给定机器特定的文件,也不应该有一般使用中要修改的文件。这样允许此文件系统中的文件通过网络共享,这样可以更有效,因为这样节省了磁盘空间(/usr很容易是数百兆),且易于管理(当升级应用时,只有主/usr需要改变,而无须改变每台机器)即使此文件系统在本地盘上,也可以只读mount,以减少系统崩溃时文件系统的损坏。
& ~" P: g0 D4 Z0 J" A& M; g3 h2 j$ i, A% ^1 D9 ^) Y
/var文件系统包含会改变的文件,比如spool目录(mail、news、打印机等用的),log文件、formattedmanualpages和暂存文件。传统上/var的所有东西曾在/usr下的某个地方,但这样/usr就不可能只读安装了。
r( M& |! [2 V3 {* N6 {& B! j
2 ~, `- D" Z( I /home文件系统包含用户家目录,即系统上的所有实际
数据。将家目录分到自己的目录树或文件系统中易于备份,其他部分经常不必备份,至少不必经常备份(它们很少改变)。一个大的/home可能要分为若干文件系统,需要在/home下加一级名字,如/home/students、/home/staff等。
$ B' z# K, ^* x, x) a# v Z
4 {& j5 t% e' ?& ?- P+ o3 [( D! h0 K
虽然上面将不同的部分称为文件系统,但它们不必是真的分离的文件系统。如果系统是小的单用户系统,而用户希望简单化,可以很容易地放在一个文件系统中。根据磁盘容量和不同目的所需分配的空间,目录树也可以分到不同的文件系统中。重要的是使用标准的名字,即使/var和/usr在同一分区上,名字/usr/lib/libc.a和/var/adm/messages必须能工作,例如将/var下的文件移动到/usr/var,并将/var作为/usr/var的符号连接。
6 J! P# @0 T' t- \) \* c! J* |9 p- `" g/ J# M3 M+ Q
Unix文件结构根据目的来分组文件,即所有的命令在一个地方,所有的数据在另一个地方,所有的文档又在一个地方,等等。另一个方法是根据属于的程序分组文件,即所有Emacs文件在一个目录中,所有TeX文件在另一个中,等等。后一种方法的问题是文件难于共享(程序目录经常同时包含静态可共享的和动态不可共享的文件),有时难于查找(例如man页在极大数量的地方,使man程序查找它们极其困难)。
( S- |4 ?( ]: N/ x/ j
( L2 D: a3 p6 s) ]3 F/ _; I$ ^3 Y$ ~
- D3 N, e7 h" A& j/ o+ E
根文件系统
3 }/ A* M+ O1 U1 }
I) { _5 W5 Q* [' p4 N- g 根文件系统一般应该比较小,因为包括严格的文件和一个小的不经常改变的文件系统不容易损坏。损坏的根文件系统一般意味着除非用特定的方法(例如从软盘)系统无法引导,所以不应该冒这个险。
. v( B* U5 B. ~7 v. J
% B- V d* \, b, z% h8 ]: ^- {/ O/ r 根目录一般不含任何文件,除了可能的标准的系统引导映象,通常叫/vmlinuz。所有其他文件在根文件系统的子目录中。
# V2 h1 O: ^9 p' G1 X: s, O
1 n/ A) X) E0 b7 O4 A! r6 w
/bin
7 s" ?) v3 K! G
引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。
: w7 I8 g: u% u4 D3 V; f. `" u6 v3 Q5 O' G& n2 N
/sbin
+ R$ U) p# b/ @0 p( `0 } 类似/bin,但不给普通用户使用,虽然如果必要且允许时可以使用。
5 N0 u8 W( I0 ^: S2 G9 K/ c2 d$ x8 j' F( r1 r9 r2 Z6 [* o
/etc
8 E. }- W0 w) A+ c/ ]
特定机器的配置文件。
; {# P( F6 m' s$ [2 x
9 l+ S; f. h9 j# U& b6 O0 N8 L /root
' G" W. k7 g+ ^ x root用户的家目录。
$ w7 { B ]+ H5 F$ f5 N
$ T$ H+ H0 E% e+ P* i /lib
; T" Q2 E6 x8 X) _5 ~' `- l
根文件系统上的程序所需的共享库。
/ k; ~* b' s' o6 R J
9 |' X! n+ i" ?
/lib/modules
% y! s0 m; _8 Z6 y: V: \9 r* B 核心可加载模块,特别是那些恢复损坏系统时引导所需的(例如网络和文件系统
驱动)。
# G+ r: L- l) I- R0 C# `4 Y1 n7 V! i
0 C' [& i# T% F6 b% t1 L0 C* u /dev
+ Q! I5 m4 E; j8 k5 s 设备文件。
: S+ k2 }9 |$ a, G4 \- @- \ z
8 G6 x4 H, T; J5 D' [: p- _! z- R /tmp
5 m4 l! t. b5 J' r, {# e. U6 ?' J 临时文件。引导启动后运行的程序应该使用/var/tmp,而不是/tmp,因为前者可能在一个拥有更多空间的磁盘上。
. t3 n' u) D. Q5 d! w1 t U
' W i: p( n# M /boot
; d) P( `, ~- p0 y 引导加载器(bootstraploader)使用的文件,如LILO。核心映象也经常在这里,而不是在根目录。如果有许多核心映象,这个目录可能变得很大,这时可能使用单独的文件系统更好。另一个理由是要确保核心映象必须在IDE
硬盘的前1024柱面内。
7 g4 @3 H. ]4 X
5 w4 W, i& ^& y
/mnt
0 t; c7 M4 [' R' t7 I9 W
系统管理员临时mount的安装点。程序并不自动支持安装到/mnt。/mnt可以分为子目录(例如/mnt/dosa可能是使用MSDOS文件系统的软驱,而/mnt/exta可能是使用ext2文件系统的软驱)。
/ r* h$ D4 i, z+ I' o+ M
) n& v0 j F0 B# ], h /proc,/usr,/var,/home
4 Q& B# h. u' l9 W- [5 H- X 其他文件系统的安装点。
6 N0 I* W2 t' m* ?9 O$ R! n# B
$ I- n3 B+ E# W" L+ C
/etc目录
% _, K2 |- F' l1 X; } /etc目录包含很多文件。下面说明其中的一些。其他的你应该知道它们属于哪个程序,并阅读该程序的man页。许多网络配置文件也在/etc中,它们在《网络管理
指南》中说明。
- A2 ]& v; \, z! r; e2 q
: _! m8 {# r0 r2 s8 ~: ? /etc/rcor/etc/rc.dor/etc/rc.d
( A% ?( m# t8 X5 b* c
启动、或改变运行级时运行的scripts或scripts的目录,更详细的信息见关于init的章。
9 Y- b+ K3 u, P5 w" l- g% ?( h
2 z# ]* ^ y* D
/etc/passwd
) w# g7 E- t/ u3 z: M( q 用户
数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息。格式见passwd的man页。
" O- Z( u7 K2 t3 q7 E! _$ d' `1 x* i
: R- h" j# \; c. u- N /etc/fdprm
+ o0 N* f( _) S% `7 I
软盘参数表。说明不同的软盘格式。用setfdprm设置。更多的信息见setfdprm的man页。
$ H2 ?0 G* H9 ?! O
1 Y" P1 D: R+ s, Q6 n /etc/fstab
7 x y4 |1 k1 m% H3 T 启动时mount-a命令(在/etc/rc或等效的启动文件中)自动mount的文件系统列表。Linux下,也包括用swapon-a启用的swap区的信息。见4.8.5节和mount的man页。
; B9 B" u( y& X( H$ U2 L, N
/ f1 V8 {6 q* F" t5 v) x1 a /etc/group
) ?- Z8 C/ F) i' Y
类似/etc/passwd,但说明的不是用户而是组。见group的man页。
: l: b/ N$ j- Z: t3 H6 Q% y" U B
* I5 t8 \) }3 O0 J+ K
/etc/inittab
1 V) t6 a0 O+ _9 ^% w! s; B/ s# l init的配置文件。
. L# O. i3 l+ s" v6 e4 Q U0 e$ q
0 k$ d, ~6 n Q) Z+ k /etc/issue
& P2 f4 n" j9 e5 k# X
getty在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。内容由系统管理员确定。
) ~$ x! m( T7 t& T7 U, Q m+ u
, ~: I0 e9 V* \! {/ y# A
/etc/magic
1 n" ^9 \. W6 d1 K+ \/ |
file的配置文件。包含不同文件格式的说明,file基于它猜测文件类型。见magic和file的man页。
& e9 f* f8 w7 p# x& H8 f% h
1 |8 p1 @: t* {4 y" ]- w /etc/motd
1 X) M& ~# d" A; K0 G' X
MessageOfTheDay,成功登录后自动输出。内容由系统管理员确定。经常用于通告信息,如计划关机时间的警告。
, a8 B9 U# ~- {1 R9 A, Y
3 T% ~# D+ w; N8 j /etc/mtab
* Q, \3 R# A8 U& @# z* V5 R m1 r
当前安装的文件系统列表。由scripts初始化,并由mount命令自动更新。需要一个当前安装的文件系统的列表时使用,例如df命令。
! F0 g+ B$ f2 e4 {( n& W
% ]0 z. ~: U2 e0 ^# P E t& {# _% O
/etc/shadow
# c6 k0 c" a' a/ O! I, \
在安装了影子口令软件的系统上的影子口令文件。影子口令文件将/etc/passwd文件中的加密口令移动到/etc/shadow中,而后者只对root可读。这使破译口令更困难。
9 K; n: u! B6 `
' W3 ^9 N( E3 B
/etc/login.defs
& Z8 ]0 j: U/ B& N5 ~. B- b% W; r2 m
login命令的配置文件。
: i7 R( |7 O- N* J
: x( ?, v% i0 S
/etc/printcap
! t: P4 Z+ _* i' m* H 类似/etc/termcap,但针对打印机。语法不同。
1 c$ z6 U6 W& g5 ^
. p" `! q c" g* m8 Z: J /etc/profile,/etc/csh.login,/etc/csh.cshrc
. c+ e0 c) ]9 O
登录或启动时Bourne或Cshells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。各shell见man页。
( @! \" f6 e. |( T0 V$ N% c! b, Z- T- v
3 t: S. _/ [ D% T4 M, U9 \
/etc/securetty
0 ]4 j" I3 `1 X2 ^! S0 _ 确认安全终端,即哪个终端允许root登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权。
4 d) Q' A, q+ S: @7 N& |. {- x. Y5 N- _2 [( G9 n( P8 J5 \
/etc/shells
: S' w( z8 |9 [, g) K# d5 l7 Z
列出可信任的shell。chsh命令允许用户在本文件指定范围内改变登录shell。提供一台机器FTP服务的服务进程ftpd检查用户shell是否列在/etc/shells文件中,如果不是将不允许该用户登录。
4 E5 [% _0 z. q6 u
7 x2 d4 ]* v; V /etc/termcap
5 p+ Q9 s7 S8 t6 V2 j
终端性能数据库。说明不同的终端用什么"转义序列"控制。写程序时不直接输出转义序列(这样只能工作于特定品牌的终端),而是从/etc/termcap中查找要做的工作的正确序列。这样,多数的程序可以在多数终端上运行。见termcap、curs_termcap和terminfo的man页。
) m* v. O( d! u, k! T' I( |) c; A4 J3 s' _6 O, K' P
/dev目录
6 i0 J- u$ Z; c9 K | /dev目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明(见[Anv])。设备文件在安装是产生,以后可以用/dev/MAKEDEV
描述。/dev/MAKEDEV.local是系统管理员为本地设备文件(或连接)写的
描述文稿(即如一些非标准设备驱动不是标准MAKEDEV的一部分)。
* F6 d7 Q2 \9 O1 a4 N$ B
, F: Q4 V$ n e* v5 K1 Y /usr文件系统
& B' y. e9 L# t% u3 c
/usr文件系统经常很大,因为所有程序安装在这里。/usr里的所有文件一般来自Linuxdistribution;本地安装的程序和其他东西在/usr/local下。这样可能在升级新版系统或新distribution时无须重新安装全部程序。/usr的有些子目录在下面列出(一些不太重要的目录省略了,更多信息见FSSTND)。
0 M7 h0 @% F* b$ N' _
2 Z/ E! {. Q w' e* Z6 L2 o2 }
/usr/X11R6
$ \& ?' h' s; X) }, N( E
XWindow系统的所有文件。为简化X的开发和安装,X的文件没有集成到系统中。X自己在/usr/X11R6下类似/usr。
# g* j1 y5 g5 w& V1 R+ m9 S
4 k& a3 `# R/ f3 k. ~+ B4 c
/usr/X386
1 p# m& \* i6 V+ c$ _- p 类似/usr/X11R6,但是给X11Release5的。
* W0 M1 x! R6 \( n. O
. t7 {' e6 I! k: |5 E/ X; i /usr/bin
/ H7 ^. I& O+ U& ]- G
几乎所有用户命令。有些命令在/bin或/usr/local/bin中。
6 L8 n x4 S1 i
( n0 M: U* X4 v" | w, Q. n$ Z' N /usr/sbin
' H& z- ?& r+ |, G7 B& s
根文件系统不必要的系统管理命令,例如多数服务程序。
9 u- z) O0 R6 I& ?4 J& }2 H7 [
! V( F8 i. X+ T# P /usr/man,/usr/info,/usr/doc
( T) q: }. i& @
手册页、GNU信息文档和各种其他文档文件。
/ C/ {0 g9 D% d5 h$ `3 n1 q
8 k. K* n% ]. N6 n: Y8 G
/usr/include
* c( O2 I! y3 `) l# e, `# T' H C编程语言的头文件。为了一致性这实际上应该在/usr/lib下,但传统上支持这个名字。
/ B9 a% ]0 M$ w3 M+ M6 e6 x
w, k+ L" a- u' e /usr/lib
0 H9 Q5 T4 r. b" p' k6 | 程序或子系统的不变的数据文件,包括一些site-wide配置文件。名字lib来源于库(library);编程的原始库存在/usr/lib里。
2 H" ~6 Q% v3 o: d" }
% K P5 u/ O( t1 A( } /usr/local
0 A3 a N; O4 w* r
本地安装的软件和其他文件放在这里。
8 p( f6 ~* G. Q+ q; o/ j. C9 M3 f; o' V- Q) Q" F
/var文件系统
. J; Q6 o: Z' N! a) }+ ^
/var包括系统一般运行时要改变的数据。每个系统是特定的,即不通过网络与其他
计算机共享。
/ l8 G3 q! W! V2 \5 i# n
0 B3 d" ]' ^% ~4 t% t4 k /var/catman
7 \+ P( j! d3 C- G1 a8 K" X
当要求格式化时的man页的cache。man页的源文件一般存在/usr/man/man*中;有些man页可能有预格式化的版本,存在/usr/man/cat*中。而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man中,这样其他人再看相同的页时就无须等待格式化了。(/var/catman经常被清除,就象清除临时目录一样。)
( @4 j0 f" \* }- }( E2 Z! S3 W% M* O1 s( b9 L8 F( f u" M/ l
/var/lib
/ ?$ {3 U: w" {
系统正常运行时要改变的文件。
+ Q' N- t+ H) `. I+ B0 j& ~7 l: V
. [ ~1 U' L7 F7 s6 E5 J" i /var/local
6 D! {8 N& ?1 F) [ X$ \0 G /usr/local中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,即使本地安装的程序也会使用其他/var目录,例如/var/lock。
A: n9 a7 R7 i0 z" N
* U" S( ?# n$ l' `+ K5 t6 _ i+ E /var/lock
. R, d, Q2 l2 I3 c# D 锁定文件。许多程序遵循在/var/lock中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件,将不试图使用这个设备或文件。
( e p/ z! g) \% D; g7 r( A
- R: N) j- W6 O N4 @3 M/ r3 E3 g /var/log
- J% N& t3 s. `, S4 a
各种程序的Log文件,特别是login(/var/log/wtmplog所有到系统的登录和注销)和syslog(/var/log/messages里存储所有核心和系统程序信息。/var/log里的文件经常不确定地增长,应该定期清除。
; Z7 M/ W- z8 q4 C0 Q. a
1 Z) d) A( f( r8 w) M/ H; M /var/run
( u0 R @- \# L& j M0 {, ?8 ^0 \
保存到下次引导前有效的关于系统的信息文件。例如,/var/run/utmp包含当前登录的用户的信息。
* |! S- {3 Z; T0 x
* @+ r' Q9 G1 `, [) A /var/spool
4 h' _0 c* T4 [2 j' r+ m( o mail,news,打印队列和其他队列工作的目录。每个不同的spool在/var/spool下有自己的子目录,例如,用户的邮箱在/var/spool/mail中。
' M0 `( U4 z# _/ y: V. @3 O
. w& {* ?& R. v5 e6 A9 ] /var/tmp
% r3 k7 S! Y' E! r% M比/tmp允许的大或需要存在较长时间的临时文件。(虽然系统管理员可能不允许/var/tmp有很旧的文件。)
" `! i* V5 }# q ~! ~1 [! }+ \
6 M$ ^4 G! e# | j, r0 v /proc文件系统
+ P0 [* J V; E6 R
/proc文件系统是一个假的文件系统。它不存在在磁盘某个磁盘上。而是由核心在
内存中产生。用于提供关于系统的信息(originallyaboutprocesses,hencethename)。下面说明一些最重要的文件和目录。/proc文件系统在procman页中有更详细的说明。
# N; W ?7 |3 K3 r. j8 s% B
9 t( v4 u+ E3 E6 O$ [ /proc/1
- _' p1 v% v: y/ b 关于进程1的信息目录。每个进程在/proc下有一个名为其进程号的目录。
" {1 C" S, h% l1 H3 R
7 c% q% J0 ^/ j' S ^ /proc/cpuinfo
: Y% {$ w3 T- H. ^6 H) p
处理器信息,如类型、制造商、型号和性能。
$ S' d4 O1 C S- |" Y) s" ^1 t
6 `/ k8 G( s/ l) r$ w! `4 O& |0 a# A
/proc/devices
4 ]- B, Y, Q/ U* y. r Q/ H
当前运行的核心配置的设备驱动的列表。
9 g* R* w! O5 V6 Z' Q$ s. P
- Q ~ ^. ?7 g1 | /proc/dma
1 }. J' r H2 Q1 M6 O 显示当前使用的DMA通道。
" Z& I; ~6 d0 F; i4 Q. i
, N4 Y W+ {/ A1 w /proc/filesystems
- ~3 H7 ~1 c4 T/ i5 y) f5 X" ~ 核心配置的文件系统。
6 r7 _( O! G3 u" l& h# e! J% \! N* v9 L, U/ h/ [) V
/proc/interrupts
n! a' b) N, t2 f 显示使用的中断,andhowmanyofeachtherehavebeen.
! |7 n) [7 E3 }
) I& P- M9 Y# @8 w& \! G, n& E /proc/ioports
1 ~. s) A4 b, P* p+ X0 K9 e0 W 当前使用的I/O端口。
' P3 `+ P0 l$ l5 i$ ]7 A
. U$ a1 z p0 r# i
/proc/kcore
9 t$ _) E7 w4 |( f3 S2 J
系统
物理内存映象。与
物理内存大小完全一样,但不实际占用这么多内存;itisgeneratedontheflyasprogramsaccessit.(记住:除非你把它拷贝到什么地方,/proc下没有任何东西占用任何磁盘空间。)
, S/ o/ Z% X3 P. X' Z
& M" u" T4 X9 ^* V /proc/kmsg
* u' U) e1 {' h. r 核心输出的消息。也被送到syslog。
: A# a: z/ C3 c; l, S7 q' h$ x2 z, U1 S4 n! ?% ~8 E' X
/proc/ksyms
b( C8 [( `+ B! U
核心符号表。
: D- K3 H' d' T; @5 i
' W- i) }; t8 ]% z- t' B' v4 n5 T$ l /proc/loadavg
& ]& x, D6 ~3 k; b, [" Q) I
系统"平均负载";3个没有意义的指示器指出系统当前的工作量。
# C2 d _( ^4 S$ z) x# H$ g+ c/ ~4 e) p0 q& ` A2 M2 K, a% G
/proc/meminfo
& T4 t8 W5 W9 `+ g 存储器使用信息,包括物理内存和swap。
3 e3 u9 I9 u. B9 m, m. ]- A
& z% I! c, _2 F9 w, s /proc/modules
, Z4 Z. i# ?$ ~# \2 E+ W. E
当前加载了哪些核心模块。
2 m8 q3 \% ^+ T3 X) D3 { P8 n c$ m _* R
/proc/net
7 J1 @7 H! s/ x& u; g6 `) a! Q
网络协议状态信息。
, z1 I6 m3 J; u/ Y, S) l( l8 D: O/ m' ^% n! G- C
/proc/self
/ m% q* U- g9 e* x 到查看/proc的程序的进程目录的符号连接。当2个进程查看/proc时,是不同的连接。这主要便于程序得到它自己的进程目录。
6 h; V7 |8 [' |; |$ {& L- z! k( R6 N; }
/proc/stat
+ T# X+ V1 J' o; s6 z- o" g
系统的不同状态,suchasthenumberofpagefaultssincethesystemwasbooted.
Y5 J& n4 @' i5 ~6 B7 @! ^( _+ U" Q+ F: r% T
/proc/uptime
* y3 o9 m$ Y6 t0 q
系统启动的时间长度。
. m" m4 E2 g' @5 p5 t5 |' s5 C8 e) }
/proc/version
9 ~9 Z4 |* e J; K3 j+ z5 h# K* m& I
核心版本。
* T; ]' _: U, {$ c: r
# s; ]. {+ O u, d+ T) F 注意所有上述文件给出易读的文本文件,有时可能是不易读的格式。有许多命令做了些格式化以更容易读。例如,free程序读/proc/meminfo并将给出的字节数转换为千字节(并增加了一些信息)。