1.查看分区和文件夹所占空间大小
df -T
df命令可以显示目前所有文件系统的可用空间及使用情形 df -h
参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。
2. du命令
//查看系统中文件的使用情况 df -h //查看当前目录下各个文件及目录占用空间大小 du -sh * //方法一:切换到要删除的目录,删除目录下的所有文件 rm -f * //方法二:删除logs文件夹下的所有文件,而不删除文件夹本身 rm -rf log
du:查询文件或文件夹的磁盘使用空间
du -h --max-depth=1 /home
2.删除文件
删除制定文件之外的所有文件
rm -rf !(folder)
#删除folder1和folder2文件之外的所有文件 rm -rf !(folder1 | folder2)
当前文件夹中结合使用grep和xargs来处理文件名:
ls | grep -v keep | xargs rm
使用find命令代替ls,改进方法3从而能够处理制定文件夹的文件:
#删除当前test文件夹中keep文件之外的所有文件 find ./test/ | grep -v keep | xargs rm
应用场景:权重文件保留太多,要删除一些
方法1: 正则匹配
rm -rf checkpoint_7* checkpoint_8*
方法2: 根据创建时间
find ./ -type f -mmin +0
#删除keep以外的其他文件。 find ./ -name '[^k][^e][^e][^p]*' -exec rm -rf {} \;
#删除keep以外的其他文件。推荐! find ./ -name '[^k][^e][^e][^p]*' | xargs rm -rf
说明:上面第二行的代码效率高些,原因在于删除多个文件时 -exec会启动多个进程来处理,而xargs会启动一个rm进程来处理。
3.根据时间find筛选并删除
find 参数说明
-amin -n: 最后一次访问发生在 n分钟 之内
-amin n: 最后一次访问发生在距离当前时间 n分钟 至 (n+1)分钟
-amin +n: 最后一次访问发生在 (n+1)分钟 之外
-atime -n: 最后一次访问发生在 n天 之内
-atime n: 最后一次访问发生在 n天 至 (n+1)天
-atime +n: 最后一次访问发生在 (n+1)天 之外
-cmin -n: 最后一次文件状态修改发生在 n分钟 之内
-cmin n: 最后一次文件状态修改发生在 n分钟 至 (n+1)分钟
-cmin +n: 最后一次文件状态修改发生在 (n+1)分钟 之外
-ctime -n: 最后一次文件状态修改发生在 n天 之内
-ctime n: 最后一次文件状态修改发生在 n天 至 (n+1) 天
-ctime +n: 最后一次文件状态修改发生在 (n+1)天 之外
-mmin -n: 最后一次文件内容修改发生在 n分钟 之内
-mmin n: 最后一次文件内容修改发生在 n分钟 至 (n+1)分钟
-mmin +n: 最后一次文件内容修改发生在 (n+1)分钟 之外
-mtime -n: 最后一次文件内容修改发生在 n天 之内
-mtime n: 最后一次文件内容修改发生在 n天 至 (n+1)天
-mtime +n: 最后一次文件内容修改发生在 (n+1)天 之外
location="/root/test"
find $location -mtime +30 -type f | xargs rm -rf
#访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
#修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
#变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
# 搜索最近七天内被访问过的所有文件
find . -type f -atime -7
#搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7
#搜索超过七天内被访问过的所有文件
find . -type f -atime +7
#搜索访问时间超过10分钟的所有文件
find . -type f -amin +10
查杀僵尸进程
如何查看linux系统上的僵尸进程,如何统计有多少僵尸进程?
ps -ef | grep defunct
或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。
另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
top命令中也统计了僵尸进程。或者使用下面的命令:
ps -ef | grep defunct | grep -v grep | wc -l
如何杀死僵尸进程呢?
一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9
或
kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`
当然您可以自己编写更好的shell脚本,欢迎与大家分享。
另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。
如何避免僵尸进程呢?
处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结 束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程
或者
用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。
如何区分进程和线程ps -eLf
方式
- 使用ls /proc/pid/task/ 查看线程
- 使用ps -eLf命令/ps aux -L/ps aux -el
- 使用pstree
进程和线程
- 进程是资源分配的最小单位
- 线程是cpu时间片分配的最小单位
- 一个进程至少包含一个线程,即主线程
ps -eLf各字段含义
- UID:用户ID
- PID:process id 进程id
- PPID: parent process id 父进程id
- LWP:表示这是个线程;要么是主线程(进程),要么是线程
- NLWP: num of light weight process 轻量级进程数量,即线程数量
- STIME: start time 启动时间
- TIME: 占用的CPU总时间
- TTY:该进程是在哪个终端运行的;pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端
- CMD: 进程的启动命令
进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
linux 中如何查看进程启动时间,持续时长
ps -eo pid,lstart,etime | grep 5359
5359 Tue Sep 16 14:47:22 2014 00:43
其中5359为进程号,方便做过滤用的
Tue Sep 16 14:47:22 2014 为启动时间
00:43为持续时长
查看端口占用的方法
1. ss
ss ntlp | grep 7788
2.netstate -ntlp | grep xxx
3. lsof -i:xxxx
ss 比netstate 快一些,具体百度一下