找回密码
 注册
查看: 416|回复: 0

linux删除文件后没有释放磁盘空间

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-3-17 20:02:02 | 显示全部楼层 |阅读模式
发现当前磁盘空间使用情况:
' p& z8 R+ e" G; S/ A
- i7 t8 c1 C( f( [- A7 L6 I8 b

& l0 U9 _$ `8 q; z[root@ticketb ~]# df -h! }* s' y4 w/ b2 A
Filesystem            Size  Used Avail Use% Mounted on7 m) L' k( t0 q: S) @9 l
/dev/sda1             981M  203M  729M  22% /& r$ |# c% D2 G# ?  g3 i$ D: U( V. Z
none                   16G     0   16G   0% /dev/shm
0 f. }  V6 q9 `4 v/dev/sda9             2.9G   37M  2.7G   2% /tmp
5 Y6 l' A' C6 z! u& a& x/dev/sda7             4.9G  1.9G  2.7G  42% /usr
2 k, H+ `4 ~, X! B/dev/sda8             2.9G  145M  2.6G   6% /var
8 v2 E' j! c; z4 M0 M/dev/mapper/vghome-lvhome  Z8 b  }" q% E1 \$ N4 D( W
                       20G   19G   11M 100% /home
0 w$ s3 \2 |% t( I+ L% e" O& k& d4 ^/dev/mapper/vgoradata-lvoradata
7 s7 j) ?! m; z9 \( u& Q) D                      144G   48G   90G  35% /u01/oradata
  M( V' j9 o& @5 q/dev/mapper/vgbackup-lvbackup
" H! s% z! Q. D( `  t                      193G  7.8G  175G   5% /u01/backup
  v" d6 y& A" D1 }" f0 p# J0 ^3 |, d( j

- j1 G% S7 m" j1 `/ F通过下面的命令找到无用的文件,然后删除0 ]  e4 o% c4 B" ]* i

7 q* X5 C+ N% ?: |4 `7 I& h+ Y5 y
[root@ticketb ~]# find /home/oracle/admin/dbticb/udump/ -name "dbticb_*.trc" -mtime +50 | xargs rm -rf
$ T/ C4 N$ W1 l2 N, |
4 F, u  y0 J4 Y! K6 R9 B6 z+ d" u7 E6 X) N3 }9 s- H

- T4 [$ s9 I5 |* l然后在查看磁盘空间使用情况,发现没有/home空间没有变化
' D: {& w, b# z) R% E
$ H1 \; O* e' ]2 W! D& X
: [# D5 Y5 L1 U/ P* d0 }; j- P5 \/ }# z* V5 x
[root@ticketb ~]# df -h$ _4 G/ l/ p$ E# R; ~
Filesystem            Size  Used Avail Use% Mounted on
2 S% h7 m7 t* i: B0 O$ B/dev/sda1             981M  203M  729M  22% /
& ~9 [7 ~: y1 Fnone                   16G     0   16G   0% /dev/shm
/ D/ n4 c/ x9 P$ W- O& ~0 T) v% A/dev/sda9             2.9G   37M  2.7G   2% /tmp
7 V0 V! L+ c- [7 X+ S/dev/sda7             4.9G  1.9G  2.7G  42% /usr; k/ p2 w& F5 f6 r3 I
/dev/sda8             2.9G  145M  2.6G   6% /var% k( o+ \1 P: I6 Z  ?4 e# b  {
/dev/mapper/vghome-lvhome. N7 m- \! a0 X7 r' t
                       20G   19G   11M 100% /home
) }; g9 Z5 `) r6 T5 z. q+ \9 u/dev/mapper/vgoradata-lvoradata
1 U2 F$ F( Q0 k0 ^. {/ l+ P                      144G   48G   90G  35% /u01/oradata, O7 V0 R% }& \" ]
/dev/mapper/vgbackup-lvbackup3 l# o7 W% W) X
                      193G  7.8G  175G   5% /u01/backup* c: t1 y6 {, [# _2 t

6 F& u  S9 K7 J) O6 ^1 h1 |, Z4 h' o

; h( g0 s, k6 X1 c这个郁闷啊,明明删除文件了,怎么空间没有被释放啊,rm命令应该是直接删除啊,在查看下/home下还有什么占用空间* [( ]. f% d4 v) v

- V8 M/ ~; {6 Q+ R4 c) J* \# g6 g/ [# y* w* F; w& U1 }% Q

; D! U3 o. a. o' |) ~[root@ticketb ~]# du -h --max-depth=1  /home) U6 q/ j: f+ Q2 U3 D
16K     /home/lost+found& t! O5 ^0 G1 A% J4 }  L" I( {
2.6G    /home/oracle
2 s/ R) u4 z' r$ o* P! f1 _2.6G    /home
: e7 H7 K5 v2 F6 D
, p4 ]! M; F, t+ M# z1 @
8 ^& G" a8 B5 o0 Y  d: N; ]" r8 ^( y  R( }1 U
可这里显示空间已经释放了啊,于是google下,
% t/ R- w1 _4 h! D7 t* p( d* F& B
; T! O! z) d3 x- V: C
5 f4 t5 Y* I0 O" z! `' @8 R. u" z/ Y3 b' v  r2 F! `. G8 J- x
未释放磁盘空间原因:
, r; M4 {  |9 m( W
  i6 `8 `- [1 E1 O$ A- f7 a: r
; E5 v# p* Q) B# l- r8 e% e: _) t" ?- [& l2 h
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被) d) s2 o. X0 v# p  x
打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是oracle的告警log文件: q4 x6 G# z/ e! Y( ~3 L
删除的时候文件应该正在被使用+ Z: A& ^, w# m! t3 V5 R$ C7 S

; r/ [, k( o! x5 D% a  f" {% c8 e
7 ]. r; a( U$ q/ P) _9 t8 E+ W% ?& ]. a$ R  M- A
解决方法$ h- j3 q; u/ d
5 S' S; Z& Q+ i  o+ ?# R; L9 p
! A$ {' m1 P4 F7 V4 k1 Q

4 Q4 H9 W+ H+ r4 ?9 I首先获得一个已经被删除但是仍然被应用程序占用的文件列表,如下所示:% E5 ]% M- ~& I6 G- |

  Z6 t- c& y3 ~3 v& i9 V; J( K# w% ]' C$ \
[root@ticketb ~]# lsof |grep deleted4 j+ W; V$ W- N% W
oracle    12639  oracle    5w      REG              253,0         648     215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)" O& `/ A7 o% s+ P
oracle    12639  oracle    6w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)5 q+ L0 W+ }  h0 r) w" |
oracle    12639  oracle    7u      REG              253,0           0      36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)( }. l9 ~$ w! K* v
oracle    12639  oracle    8w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
# B! U& a9 |* O4 E" _9 |6 Horacle    12641  oracle    5w      REG              253,0         648     215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)
1 c9 c  Q- J' ]% }- g! j6 goracle    12641  oracle    6w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)$ O* \7 x  R1 v
% s4 G0 a8 X  |9 c, v$ H) J% p

- f4 X" \+ Z4 Q4 t& _! C3 ^( C4 n$ G: L( a
oracle    23492  oracle    6w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)/ L+ n8 f" ?, h( ?' Y/ P
oracle    23492  oracle    7u      REG              253,0           0      36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
5 ?( v$ j/ n! O7 z" eoracle    23492  oracle    8w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
" F( w% C2 W$ F! ]6 }* y0 Ioracle    23494  oracle   10u      REG              253,0           0      36307 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstrmandb (deleted)
- \  t! J* x  E; p
* Y; L. e5 r% {% h, F: K
& N' x# O" _( n2 N! K4 C. H
' r6 n2 [; [) r% L0 ?3 i
$ R' L+ s+ D3 L% i8 u& B  R1 [: T, ^从输出结果可以看到/home/oracle/admin/dbticb/bdump/alert_dbticb.log还被使用,未被释放空间, ^( M1 }0 O" o' Y* g0 ^

: C; j) o& |. l8 `2 P! ~
: b/ Q" c% @0 @5 j- h1 R. d4 ^1 ?7 {4 g3 j7 w% c$ A$ C
如何让进程释放呢?1 E2 t6 w' C: A' u3 A
& J( h+ R1 L& u. ]

3 o  b5 d2 E) s, b  v$ E, h/ `' t# g: T; I8 o4 c) M7 W
一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自动回收磁盘空间- z  p- b& @6 g3 K# h! X" m( x9 ~

, R& j; N% Y: O! m5 p, B我这个环境有很多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险很大
+ }- N( x- q6 S- }5 v% y( o: Q) L( R+ ], o+ ]' E- l

/ [$ i4 ?+ D# J
5 Q: x% D! e" a; p/ r当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid) H- a" U  ]5 m4 d
为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。, ?( y& T' a0 C- G! P

- Z- m, a7 v4 c6 Q! ?, a  V" v7 ?kill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。
8 j  U! a! H7 ^8 A1 [/ l! `这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。应用程序对这种方
% r* c- Z8 g" W* U2 m* `! Q式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题
! s4 B$ t3 r2 |4 y( Z( S
: @2 C( F8 y& h  }7 t& @: @
. {) |& s' C  j& u6 Z; \; Y& C8 u2 ^1 Y3 H) f3 [* g+ p" `
所以我还是采用停应用来解决8 e6 p6 c4 J% j' D* m. A

: a7 V$ G! M9 x& ?: q9 e' c4 @' f
2 [2 G, W8 z5 ?) @- p* m+ r4 I
restart oracle数据库,发现/home/oracle/admin/dbticb/bdump/alert_dbticb.log对应的空间被释放
4 s3 a7 D# D  U  _; x, }$ E5 K* M. S& V! S$ ]" z( v
6 B3 X* C8 Q" f: d% d  p4 j' l- j# q
8 v5 C( {5 t# F8 S7 J) B- o
在查看磁盘空间的使用情况,发现空间已经回收了
+ B" v$ u7 T; H  `1 g4 Z( i
. ]8 S+ m! o7 s; k. W) W2 U, t6 P# d. B0 J+ }9 B7 l/ D
[root@ticketb ~]# df -h7 R3 H8 d) K0 X* M
Filesystem            Size  Used Avail Use% Mounted on* U4 i+ }5 K, ~; U3 @
/dev/sda1             981M  203M  729M  22% /! G. F8 X- [1 f) I
none                   16G     0   16G   0% /dev/shm  q( M: ~; ~2 }5 t
/dev/sda9             2.9G   37M  2.7G   2% /tmp
( F% H. \0 @7 J9 X* U* }2 d/dev/sda7             4.9G  1.9G  2.7G  42% /usr3 h! F7 F% l! A' [: l
/dev/sda8             2.9G  145M  2.6G   6% /var  t* Q- t1 U$ W
/dev/mapper/vghome-lvhome
% c" g% w9 C7 n8 W5 j$ {" V                       20G  2.6G   16G  15% /home3 ?0 S5 f1 M; y: ]% M9 X2 W
/dev/mapper/vgoradata-lvoradata
1 M. k1 j! U" u9 Q" e1 W                      144G   48G   90G  35% /u01/oradata
  G" w5 _2 u* t" M5 E2 k/dev/mapper/vgbackup-lvbackup
7 @+ N: z& Y6 k) ?) p# G                      193G  7.8G  175G   5% /u01/backup' Z' b' j* d; Q" A; l) s

! g: |- T. V. h; E1 k  w. Y5 [* k6 k( c6 o! \$ q! P
ok,问题解决,然后做下收尾工作即可2 T3 V4 H1 W( J2 T% C
1 E+ `, }. J6 E# S
( ?( \- T" L% v+ E( i" I) C: s

" ^! \- g7 Y, j% I-------------------------------------------------------------------------------------------------
. [: s  B, M4 s( q, U8 Q$ F" ?2 C+ w9 W8 `1 ^& W

( j6 l6 r: d4 ^5 _0 Z/ w" j2 H; N* m. y. O/ [! }
学习下lsof命令
9 G) t' o/ q9 D
, W% ?" }, X9 [. X3 q- G4 v; E, O5 R3 J" Q9 @- G4 W6 b

3 L+ C7 j0 V& h( a: Flsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件,) m* K" b4 s8 \! w* W, v, i
设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。
6 ]4 q; S) k3 o( C/ d+ j. ^. y6 [+ p0 a) r/ s* p( C# B/ ^# [
# j6 N/ [" @7 I6 {$ M
& I5 _0 H# @: C# ?* ~
lsof是linux最常用的命令之一,通常的输出格式为:
, x6 }* T) n- n2 f9 y
/ D3 i/ t' p. p
$ `& d& [- j/ I( @- }8 ?3 J* D5 w) |* Q% l" `. \7 V, e& Z( X9 p
引用; z( v3 `% f3 g; f& S5 s3 N' p1 |& k
COMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME7 @3 V+ I# _/ `' m+ ^' R; G( R

# P1 k! F. {7 d. I# l2 P4 g) v$ y3 l$ y! |# s3 F

( ^- D% ]& s7 e" `9 a4 U8 L8 l, ]- X常见包括如下几个字段:更多的可见manual。
) |$ v4 h. x: U4 t, @0 E- e. ?* l
& p8 [% s/ v6 U1、COMMAND5 y2 c5 G% P; w/ _0 a
默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名4 A2 u' N' K0 ?* f. `( q* |
2、PID:进程的ID号
( s9 F7 A( n( p3、PPID7 \3 U6 p' x6 g: U" i
父进程的IP号,默认不显示,当使用-R参数可打开。
* A  x5 q  Z8 n/ y# T4、PGID
% F7 d" [: j5 {/ ~9 a进程组的ID编号,默认也不会显示,当使用-g参数时可打开。! ]8 T* e2 a3 v& P0 v* r- P3 n
5、USER
5 a+ \& x* O) Y命令的执行UID或系统中登陆的用户名称。默认显示为用户名,当使用-l参数时,可显示UID。
& S0 {) q; H/ r6 h6、FD- Y% m  f1 Z$ v0 [
是文件的File Descriptor number,或者如下的内容:  ^4 j& |% \' I, c# L
(这里很难翻译对应的意思,保留英文)6 d9 D" c$ G) x8 O. X

9 V* c7 A+ ^8 o- p" V9 Q' u/ o, A
" l; L% j1 `5 X' Y# K# J
4 t6 ]* Y" Z2 v# `) a3 ]& T- x引用
* w  Y. G7 W6 W1 _5 ccwd  current working directory;! y/ |( W4 k7 ]* I. p
Lnn  library references (AIX);1 E. G& _8 d  y- ~+ [2 K
jld  jail directory (FreeBSD);
- H2 ?* I: v5 L* eltx  shared library text (code and data);
5 p1 V- S$ p0 WMxx  hex memory-mapped type number xx.3 t; f. Y$ ^; [5 A3 L7 Y9 z. R
m86  DOS Merge mapped file;$ a9 ~0 u$ i6 P0 r
mem  memory-mapped file;0 }3 B! D& w2 f# g+ f6 d
mmap memory-mapped device;/ U- b  Q7 S' {* y
pd   parent directory;  z; z  J: H  V: m5 N6 N
rtd  root directory;4 ]$ G( b5 b& w4 ^" p( Z6 T
tr   kernel trace file (OpenBSD);
6 W! |) m$ V8 u8 L& Z/ mtxt  program text (code and data);- p" |4 W  e: W( ]% V7 i* u3 N- n
v86  VP/ix mapped file;
4 }, S( v9 }! y# |5 ]1 t$ |! X5 {" a
( a$ d6 _  ?! O
' a, q: ?6 Y: A. L% z  M
+ _) m- {8 a& j

# d* v8 U4 i( _" J% R文件的File Descriptor number显示模式有:
1 N) z" I" z1 l$ Z  D- d1 T- a: _# U- ~4 o: t

: U* ^6 `  C7 H& k5 H
9 z/ G( g  ?- T4 F引用4 \, S# ~2 c" H
r for read access;
7 K0 F& G' e/ K& `4 X, I/ Jw for write access;  f/ |% C( L5 G" i
u for read and write access;
* p4 w3 A# b* K0 x: s# eN for a Solaris NFS lock of unknown type;
! V; E1 B7 U+ z0 r& Lr for read lock on part of the file;
" f/ N- J3 a, _3 FR for a read lock on the entire file;
& t4 |; L) v+ ^! tw for a write lock on part of the file;
6 G/ Z, [) O5 s' I  {, ]5 ^W for a write lock on the entire file;
1 N+ _4 o' Z4 M; a1 Ou for a read and write lock of any length;; ]1 v; ^% w7 Q3 Q! }5 X+ y! ]& ]
U for a lock of unknown type;
5 I4 q7 }( s) Q- F9 \x for an SCO OpenServer Xenix lock on part  of the file;  Z8 _. e" M* e. J
X  for an SCO OpenServer Xenix lock on the entire file;
: p7 K) ^9 k8 gspace if there is no lock.
/ l. M9 ], n+ l# V3 d
) H2 _  [* A0 U& L
) C" n( b4 }  _) X2 N$ f7 ^6 b8 q  l: N
+ B' {( }* D3 k/ B- A
8 w& V5 t8 F' |5 a& Z
7、TYPE" J( }' s5 C9 g7 g) f7 e
* W4 n# l1 ~# Y
引用' C% l  \4 l3 I, h& t) c8 I
IPv4 IPv4的包;1 C/ W2 f6 K+ T  L& i
IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;: f0 a+ S1 z" |% e/ F& }- m9 x: k  S
DIR 目录
+ P5 @! K9 C1 j& k' v& ZLINK 链接文件
( U4 X% D$ `8 G* ?1 f6 [
5 ?4 H" U0 x& i, i详情请看manual中更多的注释。
* W  M. B7 D! P3 k! L1 L) E) a5 t( ?( X( \& W5 O1 v& O1 {* `  U4 F
+ T4 ]6 t) I6 z6 ^$ h

" X  P1 L3 k& n% T: e0 Z9 H8、DEVICE8 K# v# B1 _& W7 ^5 t$ d4 U
使用character special、block special表示的设备号4 L" ?9 p9 N8 i! w0 V- E. f
9、SIZE
) }$ q. C' N  ^文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。
0 e7 j# Q4 @. q" r9 O10、NODE5 r0 e+ l) H& Q& }  r3 n) K
本地文件的node码,或者协议,如TCP等
2 I- A8 y9 ^' S6 y( w11、NAME! z1 f  I- ?8 t2 e4 \
挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等
8 S0 P+ D, A* R% t% `& ?  X
$ G7 E! G9 N( f% G! ~. W& _: _* }( P. \* a" Z9 ]2 v0 S8 F
4 A, Y) A/ V! {4 ~
常用示例:! v3 g2 T, f- I' @6 p
1 y  E3 s( s: Y- O! I

9 h# y7 \, Z1 h8 K& @( d2 D+ F" U4 V" ~! O
1.显示开启文件/home/oracle/10.2.0/db_1/bin/tnslsnr的进程/ b  s8 Z# s' i* s

  j. N. M& f; y: O
1 ]) p% y* J2 P" e7 R* v- k9 I. r6 I' q1 ?
[root@svr-db-test ~]# lsof /home/oracle/10.2.0/db_1/bin/tnslsnr4 t' W' j1 e7 w5 Z0 E
COMMAND  PID   USER  FD   TYPE DEVICE   SIZE     NODE NAME
% R: m- r" H+ j8 ?0 Ztnslsnr 3520 oracle txt    REG  253,5 431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr
3 `' I5 w/ X. T" B1 ]) v7 C" K6 L0 r! m3 G: Q8 u1 U
& {$ _2 ]+ U, m+ A

1 p. g+ r5 ^- N2.知道22端口现在运行什么程序
4 I% x4 [) W, l5 l2 _/ b2 v/ X6 W4 {- v' y9 b; N( r
7 O3 @0 P( I7 `  m/ r3 h. B
5 p, G0 W. L, {; Y
[root@svr-db-test ~]# lsof -i :22
0 @3 @1 I" G+ R# ~COMMAND  PID USER   FD   TYPE  DEVICE SIZE NODE NAME# X8 o$ K% ?7 \$ r. J6 q
sshd    3101 root    3u  IPv6    8670       TCP *:ssh (LISTEN)
1 E4 ]/ V, L9 [! ^sshd    4545 root    3u  IPv6 4237972       TCP 203.aibo.com:ssh->win-avbmq9e8ka7.gdgg.local:nsjtp-ctrl (ESTABLISHED)- y+ o$ @- n% d# L  o

/ _8 u, \$ _: J/ p5 D8 f2 @9 f9 G9 E' W; w
6 t- N- D  _8 z0 s) k. S, @! S
3.显示init进程现在打开的文件' X6 ^3 d" e4 g) p8 Z. F
1 \: {0 q- F: R' u- A! C7 d: s
6 Y. O5 ^- y- m$ |- ^0 G' O
, |3 d8 y% Q. f) n
[root@svr-db-test ~]# lsof -c init/ Z% |3 X/ ^8 O, I1 q; g0 S
COMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
4 P4 C* }2 E- ]& D) R4 d4 Z2 j& L! finit      1 root  cwd    DIR  253,0    4096      2 /
4 |- R4 t: Q- E# T. M$ L2 a, iinit      1 root  rtd    DIR  253,0    4096      2 /- O8 ~# J, e/ G5 p
init      1 root  txt    REG  253,0   43496 524446 /sbin/init1 f4 l: s) z9 S9 Z4 U6 Z6 Z
init      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so! Q/ T' k. Y( D2 M
init      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so* _7 {+ t& p+ i8 Y4 j
init      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so% Y/ U  E* G# b9 q/ {- S
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.19 g! K$ G/ f) b5 U  W9 X$ O
init      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1) c8 K" d$ C6 N" \' c
init      1 root   10u  FIFO   0,16           2311 /dev/initctl
+ V7 V& P4 K! y8 @8 }
& n) g8 D7 G$ r0 ]0 z3 |. |, z/ W- b0 l! }" Z' o% Z+ J
' e- M5 W* K6 S
4. 看进程号为1的进程打开了哪些文件
$ d' {$ O7 I4 y1 X; R( Z* C1 ]; ?( e; O/ ^( v% H/ j& P; H0 Q
, y) D, k4 \2 j, F: f7 W: X/ U/ x

0 E/ ]+ D3 u2 _- p3 A[root@svr-db-test ~]# lsof -p 1
* c: t/ C& ?6 B$ u0 f% U  }9 nCOMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME2 Q4 Y/ ?' }1 n8 i3 z
init      1 root  cwd    DIR  253,0    4096      2 /
- x% x% l( {0 K- M' o+ `' W& binit      1 root  rtd    DIR  253,0    4096      2 /
  v* ?# w" {/ k  H% }8 Binit      1 root  txt    REG  253,0   43496 524446 /sbin/init: \7 h5 ]( o/ b
init      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so
9 k7 o+ f7 Y* @( S4 O9 Z2 winit      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
7 `9 d# t9 V8 R: T; H% \init      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so6 t  k- m- c1 F5 f, w) i9 V
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1
  a1 l0 P% i5 |3 s! y# x3 uinit      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
; ?& u9 y! M; X  m# A# cinit      1 root   10u  FIFO   0,16           2311 /dev/initctl+ R- W* ^/ D* P. ^5 V- q: r
0 s1 {! r; \) y

4 w7 `. I* D" Y8 C5 Y" f' n
  _& D" q, p; i4 Y# Q5. 显示归属3520的进程情况& F+ m& [4 n1 o7 a

* V$ |& x  J" O1 s0 O
; j- X* h# f! [) D6 ~% H3 \  P0 T5 F/ ^- W9 ]
[root@svr-db-test ~]# lsof -g 3520% c' v- O7 N( y- p1 m: v
COMMAND  PID PGID   USER   FD   TYPE             DEVICE      SIZE     NODE NAME
* U& h1 q" V$ ?) n. ]& r% j, N/ Vtnslsnr 3520 3520 oracle  cwd    DIR              253,5      4096 11059201 /home/oracle  \: ?; c2 `5 N  ^
tnslsnr 3520 3520 oracle  rtd    DIR              253,0      4096        2 /. ^  G2 u8 q7 k* T" }/ B
tnslsnr 3520 3520 oracle  txt    REG              253,5    431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr" v( I9 G' H; l" j
tnslsnr 3520 3520 oracle  mem    REG              253,0    130448   917826 /lib64/ld-2.5.so
" ?" u( i  r- ttnslsnr 3520 3520 oracle  mem    REG              253,0   1678480   917827 /lib64/libc-2.5.so
# v* Y2 ~( }/ n2 v, w. h. @tnslsnr 3520 3520 oracle  mem    REG              253,0     23520   917686 /lib64/libdl-2.5.so
, z' ?4 _/ X3 W: q( z8 \tnslsnr 3520 3520 oracle  mem    REG              253,0    615136   917834 /lib64/libm-2.5.so
- }) b. ~3 ]8 |9 E& K) mtnslsnr 3520 3520 oracle  mem    REG              253,0    141208   917829 /lib64/libpthread-2.5.so
, d* B8 U- H$ d3 z; x" K; ctnslsnr 3520 3520 oracle  mem    REG              253,0    109824   917839 /lib64/libnsl-2.5.so6 }1 n5 k  @, h# H
tnslsnr 3520 3520 oracle  mem    REG              253,5  20706622 11405436 /home/oracle/10.2.0/db_1/lib/libclntsh.so.10.1
3 q& c0 o1 D9 d/ y5 p$ jtnslsnr 3520 3520 oracle  mem    REG              253,5   3803097 11410641 /home/oracle/10.2.0/db_1/lib/libnnz10.so' A3 j4 @* k0 F+ a2 P
tnslsnr 3520 3520 oracle  mem    REG              253,5     83493 11407251 /home/oracle/10.2.0/db_1/lib/libons.so
% w6 g& C9 ?; I$ ctnslsnr 3520 3520 oracle  mem    REG              253,0     53880   917532 /lib64/libnss_files-2.5.so
3 o- b! I* ]7 y: u& Mtnslsnr 3520 3520 oracle  mem    REG              253,5      8545 11407615 /home/oracle/10.2.0/db_1/lib/libskgxn2.so& g) E2 }0 k$ S
tnslsnr 3520 3520 oracle  mem    REG              253,5    513705 11410332 /home/oracle/10.2.0/db_1/lib/libocrutl10.so
% z2 r( o" K" w, U" f3 W7 ztnslsnr 3520 3520 oracle  mem    REG              253,5    636161 11410330 /home/oracle/10.2.0/db_1/lib/libocr10.so. r, U- ^. K: v0 E) @6 x, @' Q; ^8 ~
tnslsnr 3520 3520 oracle  mem    REG              253,5    657825 11410331 /home/oracle/10.2.0/db_1/lib/libocrb10.so
+ t% G- g2 \0 [$ ztnslsnr 3520 3520 oracle  mem    REG              253,5   1745769 11410365 /home/oracle/10.2.0/db_1/lib/libhasgen10.so
) L& ?) i, S! ?tnslsnr 3520 3520 oracle  mem    REG              253,5     61985 11410366 /home/oracle/10.2.0/db_1/lib/libclsra10.so
. _- y0 U, ?6 c2 H/ J  etnslsnr 3520 3520 oracle    0u   CHR                1,3               2553 /dev/null
7 q* Y& O$ p- @' Rtnslsnr 3520 3520 oracle    1u   CHR                1,3               2553 /dev/null
6 h0 y& d: \0 [tnslsnr 3520 3520 oracle    2u   CHR                1,3               2553 /dev/null
+ e1 ~" b) Y" v6 {2 ktnslsnr 3520 3520 oracle    3w   REG              253,5 318853012 11633459 /home/oracle/10.2.0/db_1/network/log/listener.log' B4 ?  a8 J  B
tnslsnr 3520 3520 oracle    4r  FIFO                0,6              15661 pipe) j5 k# V- G! O
tnslsnr 3520 3520 oracle    5r   REG              253,5     11776 11410579 /home/oracle/10.2.0/db_1/network/mesg/nlus.msb2 Y7 G5 u) ]2 U% @
tnslsnr 3520 3520 oracle    6r   REG              253,5     46592 11407160 /home/oracle/10.2.0/db_1/network/mesg/tnsus.msb& m; g2 ?1 ^( R. c! o2 R4 \8 P' F7 V1 c
tnslsnr 3520 3520 oracle    7w  FIFO                0,6              15662 pipe% R8 ?" M5 Y3 h* B- k: k
tnslsnr 3520 3520 oracle    8u  IPv4              15665                TCP 203.aibo.com:ncube-lm (LISTEN). r( k/ u& U0 S
tnslsnr 3520 3520 oracle    9u  unix 0xffff81021b7d6980              15666 /var/tmp/.oracle/s#3520.1
. L% s+ o1 E# Y, [- vtnslsnr 3520 3520 oracle   10u  unix 0xffff81021b7d66c0              15668 /var/tmp/.oracle/s#3520.2
' d/ V' V4 h" z3 X( ]/ H
4 S  N1 a2 X# k: k5 P( i" ^
0 A+ l6 \" y9 L) t6.依照文件夹/home/oracle来搜寻,但不会打开子目录,用来显示目录下被进程开启的文件1 U8 ^+ L5 v% }0 I7 m- B2 r/ [; O

0 U; m7 e% \3 G  c* I3 X& y% _6 j& C4 n: Y  v! \3 `( q* N4 C

' Y% s) b/ H+ ~. W[root@svr-db-test ~]# lsof +d /home/oracle
4 U* ]& [$ C$ w, LCOMMAND  PID   USER   FD   TYPE DEVICE SIZE     NODE NAME; m) j& d' X2 \7 Y/ i
tnslsnr 3520 oracle  cwd    DIR  253,5 4096 11059201 /home/oracle
& X" C2 T% e. g2 k  {! z9 L6 ^+ }  I5 p  B) ~/ ?+ a) V

, i# k; Y1 ^) u) z1 d
% d$ x: \9 D# Q: X# i7. 打开/home/oracle文件夹以及其子目录搜寻,用来显示目录下被进程开启的文件( ]1 k0 y5 s" h
$ E6 w, e( P( S" q7 j. c6 k

2 \9 E  ~1 X- k2 A
% F; F( L8 M  O. H/ x* P; A/ O[root@svr-db-test ~]# lsof +D /home/oracle
2 r8 K* u( Y2 i1 u) f
3 f* \9 Z! D1 o  {: M5 D& z5 r8 l; c% \9 h# }
显示内容太多了,不显示了2 p! [, B( \/ r5 \
; Q9 X/ p9 x) N' \. g

" `+ y6 x1 v8 l! G; @8. lsof -i 用以显示符合条件的进程情况6 z5 ~2 @# t' Q+ {! W7 h
4 Z9 t" g( r9 P% s8 N. x
) c, Q. N$ D6 o3 N

& g4 ~% _: d& J" z( k5 h4 M语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
: k; S, A0 R9 g
1 k( Q# }- E0 u+ Y/ Q
7 t, h. I7 }8 O2 g; H; l- ^+ x
$ f) d% X7 Y2 @5 J8 c, t6 q46 --> IPv4 or IPv6# s( [3 b; K3 H: r7 d2 i5 ]

6 x3 H- Y0 r0 w2 Z% H# u: p! c& Pprotocol --> TCP or UDP
' Y8 C! M$ e' t- o* \6 ?% X6 c4 L- W
hostname --> Internet host name
& ]4 U+ T; R0 ^: b4 x# _+ T  j7 M4 s
+ g" M0 n7 m& p& j" Mhostaddr --> IPv4位置7 h7 Y" p$ X" i' x$ j! W/ n

* N5 n, V+ ~9 e. b; @service --> /etc/service中的 service name (可以不只一个)
3 C/ U6 R/ C& S" Y' F6 V# d' l- `1 y4 N7 l  }: F
port --> 端口号 (可以不只一个): l' t$ Z7 X0 Z: L
2 P. V: C+ _0 I9 f

- w9 E9 h4 Q+ w/ Z- z* g
+ R7 Y3 E. J( g, H5 F( a4 Z例:
7 v) x7 E/ i' `' G+ Q3 S% A
3 v9 N% w& s% t2 p) Q
3 v1 Y. s" |, k, k[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521 -n; B0 z' |5 [* I$ f" u& q& U+ ~
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME8 j& F/ e/ d6 ?- C
oracle  15633 oracle   16u  IPv4 4069605       TCP 192.168.2.203:31580->192.168.2.245:ncube-lm (ESTABLISHED)
) N5 n, ?7 P/ I- q1 h# f& V
1 P$ D- l2 a" v7 z9 _, \/ T/ f
0 C# `% u! |" R3 n8 k  u3 z  ^6 x: s7 Q+ Z3 c' s0 J

& t  a# t: \4 I! {) [# H! [; ^
4 N7 f3 z, I- A# D7 N) Z. H
9 |% \: D+ y* L3 N% i8 j5 q+ C# Z- I
[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521
  y$ i$ v  Y, z1 ~3 K3 Y- `COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
& @! _, D  ^9 ^4 Y! {7 G% X9 f" loracle  15633 oracle   16u  IPv4 4069605       TCP 203.aibo.com:31580->192.168.2.245:ncube-lm (ESTABLISHED)
- w) b$ u# K# p7 ^" g; H' l
" P# ^% R7 I, n% {) O3 \; Y6 L0 ^0 T. i+ j8 H0 @5 x: S3 x
2 _; V  A9 c* W" Q6 w! }
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
) e3 H; i# |& e5 C+ U4 z, `1 o: U6 T
& q8 _# B+ ^/ L  B, V$ s
' s0 A/ P. K8 a" b5 p" t- Q
* g6 {# w6 n, y$ Z9. 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)* a6 x# D) S# l* P! G

" n- F( d. u3 e) T- x- Z! @' W" }2 a! Q1 A7 [

3 k; A! @" X; |0 T[root@svr-db-test ~]# lsof -u oracle
1 ~) H$ ^( Z5 g
/ J* d) V/ I. V8 P[root@svr-db-test ~]# lsof -u 0
5 j3 U/ d. ^7 T! V' c1 n" G& ^7 m+ h
4 K  O6 e$ \  |! w: U) _4 ^
10. 仅打印进程,方便shell脚本调用
& `; M3 I" G9 l! r
' ^0 e3 W8 V: _2 G3 B& u) F) r[root@svr-db-test ~]# lsof -tc sshd
# q# S# v  A4 ]( ?- T8 N3101- N% @) ^! b* C
4545+ m  R% H! Q3 g" o$ p
, X( N) U# f" _* x7 h% Y# K

" j( Y) T$ m" @6 j/ ^! u2 ~/ W' T+ X( a  m3 a  q7 ^: k% ^

7 V+ w3 X  n  E& Q! }2 \9 l
& T* [! a2 S% q0 s9 F  p" V8 n# v关注:
; X: m2 ^) @, z6 E% U0 D/ n) ]* f8 \; P9 s3 r

" y" ?) r- p& R
4 l; M# @8 J" E$ D进程调试命令:truss、strace和ltrace: x& c2 [* `9 g6 U8 }' r6 }3 \
* x  Q% g! h4 Z6 C  I1 R; J0 I: F

. L( ^% u& ~* \$ k8 ^) ?4 L; L* }0 ^& u
进程无法启动,软件运行速度突然变慢,程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,而这些问题都可以通过使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。
; Y% F. d* \0 I& ?" R. Y4 G
0 e$ |9 o, H/ `/ P  k9 p问题描述:
6 y5 @& J3 P* Xdf -h 查看到的空间,和du目录的空间不一致,实际du目录大小要小,磁盘空间没释放
5 {% v' k2 t8 Sdu /home 大小93G df 查看实际/home挂载已使用168G* O$ N/ T% U9 e! F" w4 R) l

, \% d. v) S$ L问题原因:; \+ `  d5 S& H- `1 b; w3 R: l
磁盘空间未释放,在此前执行删除操作中,进程未结束
5 z3 ?- H3 j* ]; w# n4 J
( z7 F( q- O1 X. L) O7 G解决方案:
8 t- N8 p( S( ]4 w2 ?+ }& g* O8 |lsof |grep delete 找到未结束的进程,杀掉进程9 I9 R: @3 k2 \! _8 }# k% j
找到delete进程中3504和4433一致占用,杀掉$ s" O: ]: e8 Q+ F- o1 H# ?2 w  S
* [3 L$ F7 ]3 @7 J- M( {
kill之后正常; X) b: L  N$ m1 ~6 a

0 [" k$ ]* O! p; r0 V+ Y+ c- L, q3 m0 |4 \0 v
备注:在实际应用中,可能还存在在文件目录下使用du -sh * 查看文件总体大小和du -sh 文件目录大小不一致,也不是磁盘空间不释放,可能是存在隐藏文件,du -sh * 是不会du隐藏文件(.)的,此时建议使用du -h –max-depth=1 ,显示本一级目录的大小,包含所有隐藏文件4 U& l& a# e% }3 P& l- f1 I1 y

# r" v& |+ \  Z2 u( p& ^8 q( t* Z: B) m% Y8 Z7 X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:43 , Processed in 0.017880 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表