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

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-3-17 20:02:02 | 显示全部楼层 |阅读模式
发现当前磁盘空间使用情况:5 z  G3 {7 a/ V) `3 Y3 D
" o) ~/ h8 I; F- W. j! T( G
' L9 h! i) \$ u4 r, b

8 z3 I6 T- r+ X" z& _3 T  a[root@ticketb ~]# df -h
- I/ L' P) N7 Y2 P2 HFilesystem            Size  Used Avail Use% Mounted on
& i' d+ z& F  x+ {( ^8 A) J9 g. k/dev/sda1             981M  203M  729M  22% /
0 k& W/ U1 V& J0 t/ s; c; ?: Rnone                   16G     0   16G   0% /dev/shm
$ s9 H2 p) o3 @% h/dev/sda9             2.9G   37M  2.7G   2% /tmp) J( w( T- T7 t$ d. l
/dev/sda7             4.9G  1.9G  2.7G  42% /usr' @8 \/ j4 R+ F/ T4 b; ~/ L
/dev/sda8             2.9G  145M  2.6G   6% /var5 A. m$ ~% g9 x- C# y1 I0 U6 |
/dev/mapper/vghome-lvhome
) |/ y4 ^8 F0 c) j- Q- q6 _5 I                       20G   19G   11M 100% /home
6 O, g* Y2 k) y* \/dev/mapper/vgoradata-lvoradata
8 z. R& X3 P( {( x- F& x& I                      144G   48G   90G  35% /u01/oradata
- m+ }' h. n8 g, D5 J; {/dev/mapper/vgbackup-lvbackup. a9 x& t6 u, B; A
                      193G  7.8G  175G   5% /u01/backup
3 {4 J& M( r; O" Y1 L* t1 h5 \! u# q2 c

* n0 d( `6 i/ v. Q+ s( @通过下面的命令找到无用的文件,然后删除) ^( C% u/ d: ~, w
- A( y- f7 f$ p- b, i% s$ s1 O* j

; c" L$ \7 h/ L  j2 _& ^3 a1 }[root@ticketb ~]# find /home/oracle/admin/dbticb/udump/ -name "dbticb_*.trc" -mtime +50 | xargs rm -rf9 R+ |- I2 v  X5 S! \0 e' T. G, Q
* {3 K6 ]7 e  v
3 z5 ~5 P' q( f! l

& z0 K3 a8 P) F8 e9 `9 k然后在查看磁盘空间使用情况,发现没有/home空间没有变化# d8 {( \' d' U. X* m3 V& t: `4 e
3 V2 C9 y% ]/ v+ g( \% b* P# ]

, [" j, F( r/ }9 e3 Y/ {6 H1 m; [. h! U# Q
[root@ticketb ~]# df -h
6 x2 V! ]3 p# a$ B; `, {/ pFilesystem            Size  Used Avail Use% Mounted on
3 U& T! S1 x8 P+ W1 }( T* w" r/dev/sda1             981M  203M  729M  22% /
* S) ?" _# f; {& E) p) i5 K. j! X$ X6 Onone                   16G     0   16G   0% /dev/shm" k" V  N4 C  T( K4 j% I
/dev/sda9             2.9G   37M  2.7G   2% /tmp- B& u& k- D: ?% c- H
/dev/sda7             4.9G  1.9G  2.7G  42% /usr' ?4 g2 N2 s' k# F8 g6 H
/dev/sda8             2.9G  145M  2.6G   6% /var" Z. ^* }: V$ W% A
/dev/mapper/vghome-lvhome2 s6 D) b: ~% q+ Q
                       20G   19G   11M 100% /home( W8 z: g/ v# ~9 f6 s" b
/dev/mapper/vgoradata-lvoradata" z" ]! d/ k' E8 a( ]' V& r
                      144G   48G   90G  35% /u01/oradata7 S8 j4 f* Q4 m( T7 Z5 o: e" M# C3 I8 g
/dev/mapper/vgbackup-lvbackup* \8 x: Y+ Z, J. H8 {8 `
                      193G  7.8G  175G   5% /u01/backup0 e. O4 ?, a6 F' l

* `1 z; ?1 H$ ?% v: K& R; A. Q: [( o; Y, V
* A$ c* u( V" E0 O
这个郁闷啊,明明删除文件了,怎么空间没有被释放啊,rm命令应该是直接删除啊,在查看下/home下还有什么占用空间8 G* K2 Y3 @% H; f
1 l" d$ e8 N2 Z4 M8 F/ Q

! @) u3 j2 ]- u" d" G3 L/ o: ^9 ?* [
[root@ticketb ~]# du -h --max-depth=1  /home
4 f* M" A' i4 G; U% Z1 r% C, M16K     /home/lost+found5 B+ t, x3 o8 l, [- D
2.6G    /home/oracle
) d6 o5 ?" @, y2.6G    /home
" D: N3 e, R3 p7 ]0 c: e: k# `1 Z! Y: t; X4 D, p

7 G( l' T$ z0 C, ~3 V
+ Z6 e2 O1 X3 T可这里显示空间已经释放了啊,于是google下,
" l% G( T" ]3 T1 B3 F& p0 W0 M) \1 w( w

' }, `: m. e5 F1 g% M$ ~1 h  p: P4 i  u' a: A+ j
未释放磁盘空间原因:3 s& u8 x; B4 ~& C! n8 e
+ ]( e/ R7 G0 F7 t6 C" f

6 @) A  w3 V* ~! u
  g4 ~5 W' P- D& ?' C& i- Q在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被
$ g3 u8 G$ y8 j7 p$ {打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是oracle的告警log文件
" y% X" g0 S& g2 z% L0 F9 E  ~删除的时候文件应该正在被使用
- a7 I' o$ e! q+ {3 `: Q) s  i7 h0 B5 G7 z9 \+ u+ h9 ?# b5 M
4 d6 u* o6 z' `. O
) b; j1 }2 @* l8 x! J
解决方法
3 r: ]/ z* [1 _) h2 o" V% [8 ^$ U; e: n( x! k7 x9 p9 N
* d) s  L4 O( O" w& u
5 i5 E' T  x' U3 C5 d
首先获得一个已经被删除但是仍然被应用程序占用的文件列表,如下所示:% f, ?+ L8 O1 `/ I. V% A" h2 F6 B
$ x' d! W. b& _0 f. T
- y) z7 t  V  b) ?& U7 G* V9 t
[root@ticketb ~]# lsof |grep deleted
# J/ E* @9 I8 w, D" B. d9 Woracle    12639  oracle    5w      REG              253,0         648     215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)7 k5 a7 s- S, o9 K$ V
oracle    12639  oracle    6w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)$ u  N$ N' Z: g# x: o! p3 O0 y/ h
oracle    12639  oracle    7u      REG              253,0           0      36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
6 ^+ e$ d  D  w- B% S- R4 roracle    12639  oracle    8w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)% w4 i6 {2 }% y. x& Z' ~
oracle    12641  oracle    5w      REG              253,0         648     215907 /home/oracle/admin/dbticb/udump/dbticb_ora_12637.trc (deleted)7 P+ g- N# @8 g9 ?2 Y
oracle    12641  oracle    6w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)4 }6 ^1 @9 e4 B- J. I' F+ X

; D* W9 r  ~2 I0 |, t- ]: F; U0 K( s7 h8 Q+ y3 z1 _4 W
: `! t- S9 i) h6 L& H+ o
oracle    23492  oracle    6w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted)
6 M  W7 X3 |  @7 a5 U+ v" b, @: |0 aoracle    23492  oracle    7u      REG              253,0           0      36282 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstdbticb (deleted)
( U: k' k. D+ @) y& d4 L  Y5 Woracle    23492  oracle    8w      REG              253,0 16749822091     215748 /home/oracle/admin/dbticb/bdump/alert_dbticb.log (deleted). Q+ j4 u0 E/ I7 d" a  Z
oracle    23494  oracle   10u      REG              253,0           0      36307 /home/oracle/oracle/product/10.2.0/db_1/dbs/lkinstrmandb (deleted)  S2 ?* b* N% k0 T
8 y8 e; H, _/ o; h

: K6 b  U* N: [  u" }% Y' R
) [( p6 b' n3 D, |5 P/ S# G8 q. y/ ]2 g) G3 r
从输出结果可以看到/home/oracle/admin/dbticb/bdump/alert_dbticb.log还被使用,未被释放空间
  O2 o6 r2 [- u5 M3 p
5 C1 U- h4 Y$ L8 q) b# D* e, V! G
8 h9 r8 r1 V) {7 ]1 A
* q" X  {' w+ |7 h如何让进程释放呢?& g$ v. f, P4 P  c$ m. s

# c: m( _. t' D4 L# y) V* M! V$ `
3 B+ U, N1 `) c) B+ Q, ]
一种方法是kill掉相应的进程,或者停掉使用这个文件的应用,让os自动回收磁盘空间
* n% D9 H5 q2 }/ `
6 f, l& @; I9 c* T% R7 ]0 O2 U我这个环境有很多进程在使用的这个文件,停掉进程有点麻烦,再有就是风险很大7 s! [0 u1 N- S5 ~1 K

( R. W9 _2 i% F8 f2 [8 r$ X. X* N2 C; j; U. G* e( N
, ]. [5 [# \0 \$ D, g8 u, X1 F( y& N
当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid* [, a- c$ A* D" S$ o
为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。* V! F/ M% E/ Z7 z% L9 X

+ M, x+ r9 g3 y& z3 L+ Ekill进程是通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。9 s/ r4 F' r# O0 p
这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。应用程序对这种方7 ~; X( U8 v4 U
式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题: K2 G( G# E$ q- _: ]) l

% f: h7 z( x) O* O
7 f/ L- r( C/ I0 l- i' C0 R) Z: r
所以我还是采用停应用来解决+ a: t9 @6 @8 U0 s- O& L

( {! u7 D/ q2 C- S6 C8 d4 P0 Q# W$ |& e6 D+ p& K: w9 \2 l

0 |9 J# e: p+ x! z5 W* v1 Krestart oracle数据库,发现/home/oracle/admin/dbticb/bdump/alert_dbticb.log对应的空间被释放
. _; N5 V. b9 d* k
  P1 \. m( c. h% Z4 B7 Y. E4 b9 R* S. b! j* n" i+ v
  d7 G. O7 R% w  M2 u$ C: ^
在查看磁盘空间的使用情况,发现空间已经回收了5 U* B0 G7 O' ?/ o: ]% c9 [
! e, R& p6 b  _% l6 c+ w  Z" \
( ~2 x/ v/ ~9 I5 }
[root@ticketb ~]# df -h. L5 a# @6 _  `6 S, c# B
Filesystem            Size  Used Avail Use% Mounted on/ z; L6 A; t: t% s% p( `: I" M
/dev/sda1             981M  203M  729M  22% /
& d1 a" s$ Q. _8 p, [6 Knone                   16G     0   16G   0% /dev/shm+ c1 z4 h0 L. ~
/dev/sda9             2.9G   37M  2.7G   2% /tmp3 w+ W9 m3 i* c# y4 R
/dev/sda7             4.9G  1.9G  2.7G  42% /usr
" ~, Y$ M, K7 j/dev/sda8             2.9G  145M  2.6G   6% /var3 }# g  {, Y7 z. W& J
/dev/mapper/vghome-lvhome$ n: l* w2 \, J! D
                       20G  2.6G   16G  15% /home, }/ }/ s& L* m5 O
/dev/mapper/vgoradata-lvoradata3 F6 E+ C& |) X
                      144G   48G   90G  35% /u01/oradata
, Q; ~" h" w' e- z2 W/dev/mapper/vgbackup-lvbackup
6 G: [* u' J% Z6 {+ J                      193G  7.8G  175G   5% /u01/backup9 M  ^. l& Q0 m" j. x+ [

& F$ |; z7 O  }* e: {
/ |" \0 E+ B. |5 x3 Xok,问题解决,然后做下收尾工作即可
& I0 q; c. @! y" t! Z* H( R& ^0 P4 Q/ G5 ^
" u# l6 A, y& ]! r) U' e' o

0 Y$ C9 q& l) v- X-------------------------------------------------------------------------------------------------5 L( x. G7 e& E9 U" a/ {, n

! i, G$ n; u; Y# `/ Z+ I- }# h9 @2 Z( n. k. C9 u' C7 O9 Z$ M/ Q0 \& I

* [8 X* {+ Q5 x, \$ {  m" p学习下lsof命令
9 e# {. \6 q" _- w4 q/ R
6 W2 Q# e2 P  H  i& g1 T, Q1 P5 g- c. f: c2 z$ S

; y- _5 b9 G, D. H# j4 [& _lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux环境中,任何事物都是文件," ?. N& S- X6 k# e7 W6 U" r
设备是文件,目录是文件,甚至sockets也是文件。所以,用好lsof命令,对日常的linux管理非常有帮助。
  P' K2 V% A, ~# _% J, b- q! K: Q/ i- v; `% H' \  O
! C9 |1 b; z3 F) J- e
& t2 E. g& e8 @% M3 e; w9 [# X
lsof是linux最常用的命令之一,通常的输出格式为:5 r$ c0 s. a. K2 i

3 k) _' \; D4 e4 U/ W4 |  a
1 S' E) G# R9 u* E
6 [5 }$ q+ t( e- Z$ h引用
; p3 T( [7 ]/ n6 S6 w: L+ }6 wCOMMAND     PID   USER   FD      TYPE     DEVICE     SIZE       NODE NAME. k5 W4 M- i) ~" I
) ?- T+ q7 y  U9 Q. L6 u' l

- \) e$ M% Q; z4 g
# ]: }* H9 p+ s) g" I3 K常见包括如下几个字段:更多的可见manual。5 Q+ ~0 \, X! Z2 Q3 ]% s9 V
8 {* ?- V5 T  X: C* X: I0 Z8 O
1、COMMAND
* H+ L" ^- M# I+ p/ M# t默认以9个字符长度显示的命令名称。可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名" X$ L+ ?  O" |
2、PID:进程的ID号% P8 i1 X- m/ I4 b, A/ h& ^
3、PPID
+ r9 e( \5 O0 e$ \父进程的IP号,默认不显示,当使用-R参数可打开。
  ]* h8 r0 A+ W; {/ i4、PGID1 K2 K$ i$ o" f1 X0 l
进程组的ID编号,默认也不会显示,当使用-g参数时可打开。
1 c6 z2 M* R8 w2 x5、USER6 \& z5 i# U* x8 A$ c" C1 b+ N
命令的执行UID或系统中登陆的用户名称。默认显示为用户名,当使用-l参数时,可显示UID。
$ P0 _/ [( ~& i$ i) q) {6、FD
: ^3 b- [# {8 s& V是文件的File Descriptor number,或者如下的内容:/ L: h7 J1 N" C: W! {
(这里很难翻译对应的意思,保留英文)1 \* W2 L2 E4 m

3 X0 U5 Z/ m6 A$ @
6 X( X# d! r7 `- Z4 K" h* @
1 ?& V+ C" Q; f5 B: g) S引用
$ O9 ^6 M! C; k* H' S' y% hcwd  current working directory;1 \3 q7 g- a7 X( D8 l" X& g
Lnn  library references (AIX);& p: W2 e5 j* }
jld  jail directory (FreeBSD);
  P/ [0 w* O+ H9 Z2 ^ltx  shared library text (code and data);  T( \0 z$ t( U8 w* q" r% v
Mxx  hex memory-mapped type number xx.! _  r' G- S9 b+ S# u7 G
m86  DOS Merge mapped file;* M( ?  A' m$ p1 d% y
mem  memory-mapped file;# I% p, ?5 c% i+ {8 D
mmap memory-mapped device;
- Y6 S  ?+ L% R  G/ q5 w" R4 kpd   parent directory;* t) K7 r4 ^$ H9 g3 C! k
rtd  root directory;
1 u7 q# \- V: N7 xtr   kernel trace file (OpenBSD);  e+ \1 F: \. F8 ~9 h. ~
txt  program text (code and data);
* b* Z9 K# D! @0 c$ O! Gv86  VP/ix mapped file;9 g- V- w% Q5 R0 j* d5 H

' q8 v3 T  v$ n8 O7 {
! M/ U: o* I# o3 W& E# c
: J) Z. V- c2 R' P8 }6 |
  _7 ]0 q5 \: D; ?
* q7 I- \+ U* v) k7 `文件的File Descriptor number显示模式有:
; E0 B: D/ |/ p6 O- z" x
0 f  N" J! ^# _6 C; f
, G+ |9 P5 V5 Z, Y
* o% p/ R' n9 ?/ N" U: V引用
8 E0 K* @* _. n; n# Pr for read access;& f+ Q9 }: z# w; r1 T9 f# Z
w for write access;! Z; j1 t, z! l- j) e7 X. T
u for read and write access;
7 n0 c: O# L7 CN for a Solaris NFS lock of unknown type;! X( v5 F% z4 [+ U
r for read lock on part of the file;
/ {! N" u  s+ VR for a read lock on the entire file;) @8 {( i/ D. N6 Z, C
w for a write lock on part of the file;
' V' L8 `6 _# X7 T& a; MW for a write lock on the entire file;
7 {$ ~) @5 y6 S+ J! B( \7 Z) |) `9 su for a read and write lock of any length;
4 {' |6 Z- x8 t% G, a# G( IU for a lock of unknown type;" U  e. [2 o. \/ [- t+ s# L
x for an SCO OpenServer Xenix lock on part  of the file;
" x8 t6 V2 ^6 i6 T. lX  for an SCO OpenServer Xenix lock on the entire file;' Q# s* {  k6 V: p" ~" G
space if there is no lock.3 U& P+ l5 C4 R" {1 E9 U

. s, Q$ w, Z* \/ Z6 J2 l2 l0 ?+ D( z% N5 ^. ^

! w# ^% O% U1 C7 j  s5 ?! P1 K
: L6 D/ V9 m5 D$ B9 {& V6 q4 {7 E( E1 p
7、TYPE- T* @8 x+ ^9 a/ b" J+ E) w
: X+ y. Q' C0 I7 p6 [3 W3 @0 B3 A
引用; M; p) q& A' x9 }) W( F. j
IPv4 IPv4的包;4 G: p  [& Q  {0 m6 v
IPv6 使用IPv6格式的包,即使地址是IPv4的,也会显示为IPv6,而映射到IPv6的地址;7 k! l9 G) _( f  ?; R6 U
DIR 目录
# i3 G, y1 D& X5 O+ O# l: `& V4 |/ WLINK 链接文件0 S0 U4 y3 H2 f1 r
7 F( y2 @6 ^" ]/ F& F5 o6 U
详情请看manual中更多的注释。/ N; Z0 C* s$ @
: N6 K/ z8 U! Q! s# w! w4 U

  G+ J8 D; M- b* h  @3 e& a- j0 z6 x! X& O5 F8 n5 B% s0 n  ]
8、DEVICE
$ [+ N4 s9 Z; ], a3 w使用character special、block special表示的设备号5 e  ~" p4 J+ [# K+ v
9、SIZE
+ b* g- z. r4 \% D! _7 w文件的大小,如果不能用大小表示的,会留空。使用-s参数控制。6 x1 J6 p* m3 _* f! d$ a5 y$ g
10、NODE
3 f/ G+ d6 c( ?/ O9 L本地文件的node码,或者协议,如TCP等
7 _" a% U6 e# S/ G, M" _11、NAME0 z/ x5 C6 r7 |* y& B$ l
挂载点和文件的全路径(链接会被解析为实际路径),或者连接双方的地址和端口、状态等- M3 W- [( t- k, S! x) ~
% R7 \% r) G. b
3 ~6 f6 f% _, p3 B7 u  K  b5 A; J

# b# {, \! o0 F2 L3 e' p! I" B$ v0 E% c常用示例:
$ P" W7 H" W- s3 e# y: X% s; I; q: Q8 }+ F/ u+ I- R0 W

. R; q! i- ?" s' Z5 V; d( h! ?# A0 _6 F$ r/ r" I
1.显示开启文件/home/oracle/10.2.0/db_1/bin/tnslsnr的进程4 A  c9 P/ J& c1 H1 v
8 J6 w& u, N2 d& Y

, E. K2 B, }6 `* b
. @6 q/ Y+ ^- g4 S0 c- M- ~5 O( R[root@svr-db-test ~]# lsof /home/oracle/10.2.0/db_1/bin/tnslsnr  K8 G+ c3 `4 {6 f) u
COMMAND  PID   USER  FD   TYPE DEVICE   SIZE     NODE NAME! D! r" Q9 ]0 ~! I- A
tnslsnr 3520 oracle txt    REG  253,5 431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr6 S1 W+ q2 L3 N4 s+ \5 w' f8 q
  q7 x* I  x% B/ v

! J4 E% |& N$ V9 s" w& q: _- y* R# [4 u3 T, ^
2.知道22端口现在运行什么程序. j4 x* e( _/ _0 g8 ~

) J$ Q' Z; M3 X5 M% e+ U0 @5 }* E
: N* C/ \( T- P) x9 B" f5 h( G- u3 T3 t7 X  Q
[root@svr-db-test ~]# lsof -i :22: z8 n1 q  H+ [3 t# W. j' E6 O  u
COMMAND  PID USER   FD   TYPE  DEVICE SIZE NODE NAME
7 b3 i: ^" j5 A- F5 Lsshd    3101 root    3u  IPv6    8670       TCP *:ssh (LISTEN)" R- S! p! z! n, q
sshd    4545 root    3u  IPv6 4237972       TCP 203.aibo.com:ssh->win-avbmq9e8ka7.gdgg.local:nsjtp-ctrl (ESTABLISHED)
# X; B- ?: S) e$ l$ g7 @  h* c( S# S! }, K$ K/ B! n, \) u) q
4 _) `% _  s0 j
# r% o9 S2 G9 Q, u1 S4 k9 V
3.显示init进程现在打开的文件
0 {! L0 T$ {* O$ J  O2 Q* \6 u' t
) _) @9 Y+ m9 t9 \7 E. i# N( D4 q2 C5 u# }, i/ I
, f! Y# o1 q" D9 Z
[root@svr-db-test ~]# lsof -c init
( E# e' N( ?$ j4 B' r; T% D  HCOMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME
: a' ?- W: d& B4 W$ Oinit      1 root  cwd    DIR  253,0    4096      2 /
' c' ~' x4 {. @& M: M" Dinit      1 root  rtd    DIR  253,0    4096      2 /
0 o  x4 n7 s" M. e# xinit      1 root  txt    REG  253,0   43496 524446 /sbin/init
; b! e5 K/ x, o1 N: L/ }) Hinit      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so
; h* Y9 [/ P) n' ginit      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
- U" E6 }" i3 yinit      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so8 H8 s* t5 t) f, A6 [! e) a6 e" k
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1, }9 W* ^; A5 P  ~
init      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
4 x: m5 L8 ~+ w1 L6 ]init      1 root   10u  FIFO   0,16           2311 /dev/initctl
3 b  ?9 Z6 f5 d" i2 t5 c
* D) R* n3 l9 R
. [, J+ z& f2 ]# G$ X% T' M  H6 n  g0 K) S: D& a/ ?, s
4. 看进程号为1的进程打开了哪些文件: x9 v& ]) T0 |. r
! L  \' M  @  Z

* y8 x2 Z; n6 n; j( O! D: P
0 G; k3 W2 I4 H2 a* l$ q9 X[root@svr-db-test ~]# lsof -p 1
2 b, E. X) k6 t8 b6 WCOMMAND PID USER   FD   TYPE DEVICE    SIZE   NODE NAME* `1 c1 _6 ?  M  C
init      1 root  cwd    DIR  253,0    4096      2 /0 I9 I5 z* i+ g
init      1 root  rtd    DIR  253,0    4096      2 /
5 ?& }9 b8 e/ {: L' k0 l& K6 Kinit      1 root  txt    REG  253,0   43496 524446 /sbin/init
. r; {  Z( y" t) Q* _1 w5 Q1 B# sinit      1 root  mem    REG  253,0  130448 917826 /lib64/ld-2.5.so. Q- m6 T" ~8 U4 w0 X" H  c3 J
init      1 root  mem    REG  253,0 1678480 917827 /lib64/libc-2.5.so
: \( Q2 E5 F9 N7 ^' c: K& I2 iinit      1 root  mem    REG  253,0   23520 917686 /lib64/libdl-2.5.so4 j' ^% s4 U" y# n, s- a  V
init      1 root  mem    REG  253,0  247528 917844 /lib64/libsepol.so.1
# f# ]6 B! Q: K$ D0 r" hinit      1 root  mem    REG  253,0   95480 917845 /lib64/libselinux.so.1
8 u! x+ @( H+ l/ Rinit      1 root   10u  FIFO   0,16           2311 /dev/initctl
' C, f4 L" _+ A) g' D" u0 Z# d
) `! o) x# A7 V( O2 i# \3 n" L4 I
8 o4 [  H/ h5 w$ b, t
* ]/ b* g0 a9 ]1 Y: Y5. 显示归属3520的进程情况3 z& F5 G  w$ q/ S

& s2 w" G* W3 T) e5 ^; u3 Y6 I8 M5 y9 X5 Q

, E6 ]* d6 \/ b! t7 s' t9 d/ p! F[root@svr-db-test ~]# lsof -g 3520
) L5 M  {# v) N/ eCOMMAND  PID PGID   USER   FD   TYPE             DEVICE      SIZE     NODE NAME
& Q& q8 m  O5 r& ~8 ~tnslsnr 3520 3520 oracle  cwd    DIR              253,5      4096 11059201 /home/oracle6 |, \$ t5 e) S
tnslsnr 3520 3520 oracle  rtd    DIR              253,0      4096        2 /& p" j0 [* |7 N6 j
tnslsnr 3520 3520 oracle  txt    REG              253,5    431062 11408866 /home/oracle/10.2.0/db_1/bin/tnslsnr% {- `& ~5 D8 _. N2 g! j( W; e& M
tnslsnr 3520 3520 oracle  mem    REG              253,0    130448   917826 /lib64/ld-2.5.so9 l: J0 h+ u9 E3 l
tnslsnr 3520 3520 oracle  mem    REG              253,0   1678480   917827 /lib64/libc-2.5.so, s% R- R5 R: _  T- J" q
tnslsnr 3520 3520 oracle  mem    REG              253,0     23520   917686 /lib64/libdl-2.5.so
* i  _/ r1 H& ~8 j4 F) qtnslsnr 3520 3520 oracle  mem    REG              253,0    615136   917834 /lib64/libm-2.5.so4 w$ L* F- Y: \/ m. v  T
tnslsnr 3520 3520 oracle  mem    REG              253,0    141208   917829 /lib64/libpthread-2.5.so7 g% j8 v$ M5 [# I+ f) _
tnslsnr 3520 3520 oracle  mem    REG              253,0    109824   917839 /lib64/libnsl-2.5.so7 k2 c" `1 E: N- h
tnslsnr 3520 3520 oracle  mem    REG              253,5  20706622 11405436 /home/oracle/10.2.0/db_1/lib/libclntsh.so.10.18 [: y4 T" K! c: X- O4 I
tnslsnr 3520 3520 oracle  mem    REG              253,5   3803097 11410641 /home/oracle/10.2.0/db_1/lib/libnnz10.so1 g/ L$ L0 z# h8 N  z
tnslsnr 3520 3520 oracle  mem    REG              253,5     83493 11407251 /home/oracle/10.2.0/db_1/lib/libons.so
9 W% j! A. J: ?0 j) g! R& k: b; Vtnslsnr 3520 3520 oracle  mem    REG              253,0     53880   917532 /lib64/libnss_files-2.5.so4 ^2 y' b4 F! k4 W0 Q  e
tnslsnr 3520 3520 oracle  mem    REG              253,5      8545 11407615 /home/oracle/10.2.0/db_1/lib/libskgxn2.so: [% D. ], J! {# ]5 y0 Y& q
tnslsnr 3520 3520 oracle  mem    REG              253,5    513705 11410332 /home/oracle/10.2.0/db_1/lib/libocrutl10.so
( _4 p* K- G$ mtnslsnr 3520 3520 oracle  mem    REG              253,5    636161 11410330 /home/oracle/10.2.0/db_1/lib/libocr10.so
% K: I" s& s) c! ^5 {8 jtnslsnr 3520 3520 oracle  mem    REG              253,5    657825 11410331 /home/oracle/10.2.0/db_1/lib/libocrb10.so$ {% M1 v( b2 S! Q0 b
tnslsnr 3520 3520 oracle  mem    REG              253,5   1745769 11410365 /home/oracle/10.2.0/db_1/lib/libhasgen10.so
" L) C$ l9 x: b) ?( R" Stnslsnr 3520 3520 oracle  mem    REG              253,5     61985 11410366 /home/oracle/10.2.0/db_1/lib/libclsra10.so- g& c, N5 ^; ?+ ~
tnslsnr 3520 3520 oracle    0u   CHR                1,3               2553 /dev/null/ h1 [% t/ {3 R+ U: W; N
tnslsnr 3520 3520 oracle    1u   CHR                1,3               2553 /dev/null
! M! v8 _; n6 X1 l6 F* E8 A- M$ u6 t# Atnslsnr 3520 3520 oracle    2u   CHR                1,3               2553 /dev/null( A0 z/ g# @1 g* \& N# V+ j( ]
tnslsnr 3520 3520 oracle    3w   REG              253,5 318853012 11633459 /home/oracle/10.2.0/db_1/network/log/listener.log
" j: t* n& h* T8 j! y5 Atnslsnr 3520 3520 oracle    4r  FIFO                0,6              15661 pipe) a# b% z& u7 i* h, c: Z7 z
tnslsnr 3520 3520 oracle    5r   REG              253,5     11776 11410579 /home/oracle/10.2.0/db_1/network/mesg/nlus.msb1 {5 s, o9 ^+ f+ u0 J
tnslsnr 3520 3520 oracle    6r   REG              253,5     46592 11407160 /home/oracle/10.2.0/db_1/network/mesg/tnsus.msb
+ O5 O3 m, F) @( O& l' |" z  otnslsnr 3520 3520 oracle    7w  FIFO                0,6              15662 pipe/ d* ]5 z& E6 m/ i! ~; @
tnslsnr 3520 3520 oracle    8u  IPv4              15665                TCP 203.aibo.com:ncube-lm (LISTEN)
2 \" n) _( z) V; l) ~tnslsnr 3520 3520 oracle    9u  unix 0xffff81021b7d6980              15666 /var/tmp/.oracle/s#3520.1
- P, ?( Q: A8 {  k2 V) o/ ctnslsnr 3520 3520 oracle   10u  unix 0xffff81021b7d66c0              15668 /var/tmp/.oracle/s#3520.2: \& c# B- n3 `2 j6 I8 k
4 ?% J8 e0 T0 S
6 v7 ]4 x3 d' Q: T: f
6.依照文件夹/home/oracle来搜寻,但不会打开子目录,用来显示目录下被进程开启的文件* S% ]* [5 L, N1 N- w# q

8 d9 Z- E1 s  b; D  ~3 U8 c' ~3 A1 d% \1 Q( i
, t: Q. _7 D- j; _6 W! p6 F
[root@svr-db-test ~]# lsof +d /home/oracle
# v- Y  ?% c) X. X+ C# zCOMMAND  PID   USER   FD   TYPE DEVICE SIZE     NODE NAME
' }4 l) i; u1 o" b2 u, Vtnslsnr 3520 oracle  cwd    DIR  253,5 4096 11059201 /home/oracle' A9 ?  _( Y; y6 V5 b

! B7 c" r8 g6 I
& n- H: L' `8 `- C' v0 g& a% q2 x+ \
7. 打开/home/oracle文件夹以及其子目录搜寻,用来显示目录下被进程开启的文件
# d; [+ X5 q' g7 ]. H
3 M: |) J4 j8 u" l) a( g
% D# `' n' y- P$ ^% j( I+ F- S
1 ^6 B5 H: d. P6 q! A% Y0 h[root@svr-db-test ~]# lsof +D /home/oracle5 R5 e6 s# o8 ^3 ]4 C
7 L4 F) V4 F1 |9 H+ r/ t! @
: h" S/ i1 Y+ Q, d/ p% \% M- q% O6 b/ P
显示内容太多了,不显示了8 B4 e- M. B, Y$ }8 `

& v! h; Y- c2 C6 j- E+ f
; [5 y; y% P& [* ~) H, S8. lsof -i 用以显示符合条件的进程情况
* V& C6 J& s& P. R* _
) V+ v  s- m1 t4 o3 V& k9 `/ _) u
  r, A+ j6 o! ^& a
: `# P7 Y9 V1 n+ |& S8 ~8 s( g语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]2 D3 b" H3 |1 q' R2 I9 e+ b

2 \: G. ?* c6 p" m/ F: ]' {: K' r' q$ g% k

4 K# s( v- o  I. R! e4 s46 --> IPv4 or IPv6( o* M2 Z0 s6 o7 {+ }1 Z1 d  X

5 t! `  y. Y$ S  a) q' B; ^. Oprotocol --> TCP or UDP% }" a/ M9 P; s  o

4 [7 f7 D( d+ D7 q! o2 Zhostname --> Internet host name
$ M" [4 M. ]+ e3 G( ?, s8 b2 }/ A2 Y) r$ q3 p5 a8 k2 J' T
hostaddr --> IPv4位置
+ @. {+ Y8 {& {. ]$ `( k
7 p, P! n+ L5 {4 P3 c( [6 Yservice --> /etc/service中的 service name (可以不只一个)
5 ~* J# }" C1 p: h
! K( o) `: S2 [  _/ ]: z9 vport --> 端口号 (可以不只一个)
3 Z, h, E+ p# e( {  h  J  d, |+ S- {

6 D7 Z5 J! {0 {4 ^/ v! Q
8 L2 X! N/ y* T: ~, y' }例:
: h9 m$ m- C, u- ]3 w0 U3 P1 j/ P
4 K1 n. E. \- S
[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:1521 -n/ r( v9 Q+ h, S: N  j0 l9 Y  G
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME$ f1 c- w6 W9 c
oracle  15633 oracle   16u  IPv4 4069605       TCP 192.168.2.203:31580->192.168.2.245:ncube-lm (ESTABLISHED); b, s* I( I1 r0 n1 u  w# \
4 P; [7 q0 h1 r/ e6 T7 e

" c$ a2 g; \4 Z% ]# a* V/ a- C/ i0 z4 ^- l1 K& q# [+ b: {

/ W9 w2 n. v( D2 \" j4 E8 Y- r
- @8 T8 B, H5 D  C' a) g0 F: W0 `' z9 e1 [- J6 X5 w
, r* v4 Q  ]! M5 U0 p
[root@svr-db-test ~]# lsof -i tcp@192.168.2.245:15216 T9 M% K% k% T% T
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE NODE NAME
! m1 K5 |0 O' b' t" f' {  [oracle  15633 oracle   16u  IPv4 4069605       TCP 203.aibo.com:31580->192.168.2.245:ncube-lm (ESTABLISHED)
' W6 E7 a" c# S" }3 w
; g" \+ |9 U! x- a( h( s3 B) S! @  q3 _# u6 {. f) }* R1 e9 o6 V
5 X$ P6 l  v% N) l
lsof -n 不将IP转换为hostname,缺省是不加上-n参数* U/ H# T3 E; h& D+ P8 E

4 b. ?/ j  r) ?  \) q8 n1 Z
6 Y" D8 o' L# l0 J& ?. w- r8 X0 A$ I/ Y5 J# p0 b2 a
9. 显示某用户的已经打开的文件(或该用户执行程序已经打开的文件)
: i7 V+ S5 r( S! ~. \1 u: d7 x7 d4 M1 P9 X7 Z( O, h/ a5 n

, P6 R- [, u/ m3 Y# D# T% _; T3 l/ |1 k9 X2 @
[root@svr-db-test ~]# lsof -u oracle
9 N8 ^# c+ b3 W  a, h% p( H% q8 y
2 f3 n( g9 E5 W( f[root@svr-db-test ~]# lsof -u 02 D8 u- S0 g  p7 c' A7 L

" @2 g+ @; u1 b' E( w, R+ U7 N6 G8 Z+ E$ H/ m
10. 仅打印进程,方便shell脚本调用1 t  W# X  z" ?/ E9 E! s# V

  g5 F$ z; C; P, G$ L) Q[root@svr-db-test ~]# lsof -tc sshd+ v* D. {% P6 ]- Q# e; [8 ~
3101
* Q8 c; Q6 v: W2 U$ r- K; G4545! G/ H' d5 h$ n( {- D

/ w* E* N4 Q  c/ U% ]; m2 [$ q; n2 \% Y/ c, L6 N$ Z. @) p
/ X/ k' f6 S! q0 J5 z
2 P# H5 o- \, P+ S
* Q: z4 a, K2 q* b! m( r5 c
关注:
$ }9 Y* y0 Z9 o- Y% ]" Y8 t; ~6 m/ F7 @, r5 `( A$ p: b

. Q2 N" ?0 V$ G6 h- w. l3 F7 M
( w: a' L; O, B进程调试命令:truss、strace和ltrace( g; ^8 l* E$ r& N

  d) ^8 n: n- g- P9 |: T& x% u; `; u5 E, W6 r7 C
/ c- _; d+ x  S& k3 S& u" a
进程无法启动,软件运行速度突然变慢,程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,而这些问题都可以通过使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。# `9 R/ E# J+ v& V" {) k: u- R

9 l2 o7 Y& W$ k& M: q  J" i) M& O问题描述:) J6 P" m2 |  X. i+ t5 C' w! y
df -h 查看到的空间,和du目录的空间不一致,实际du目录大小要小,磁盘空间没释放# V! L0 p9 y- d- v5 F+ H0 r  N- Q
du /home 大小93G df 查看实际/home挂载已使用168G
4 f# M0 m2 W  T
1 q* z6 u; K  N, h) C; x4 X问题原因:
5 g" ?' h* a: D5 V& j3 V& Q- P6 M4 r磁盘空间未释放,在此前执行删除操作中,进程未结束
+ r9 {5 w( V8 w5 r8 R6 _
1 I; R7 a. ?. V9 }% e# ^' b解决方案:
5 m4 w/ m1 A  e2 n8 a7 q. {: Nlsof |grep delete 找到未结束的进程,杀掉进程
( y: u! [1 W; ~7 Y2 l. A找到delete进程中3504和4433一致占用,杀掉
" t; V$ K/ m: H  M6 B
4 p8 Y: v' @2 W- \$ G0 K0 U. Lkill之后正常" h- q# T) O' C- {; D

2 q$ i2 B/ r" u* [: M7 Y/ j
5 u# S! @/ D, A6 b4 S3 v备注:在实际应用中,可能还存在在文件目录下使用du -sh * 查看文件总体大小和du -sh 文件目录大小不一致,也不是磁盘空间不释放,可能是存在隐藏文件,du -sh * 是不会du隐藏文件(.)的,此时建议使用du -h –max-depth=1 ,显示本一级目录的大小,包含所有隐藏文件. ]9 Z- Z, Y8 Y$ m" w7 \3 M0 n
6 p8 a; I4 g9 }1 N% b5 l

' z+ e- ?' K7 D4 q/ j- q8 |% Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:56 , Processed in 0.023481 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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