1、du
du:显示磁盘使用情况(disk usage)
df:显示磁盘可用空间(disk usage)
du directory:只显示子目录使用的磁盘空间
du -a directory:递归显示目录中各个文件的磁盘占用情况
-h:人性化显示
-c:会在输出结果末尾加上一行总计,输出作为命令行参数的所有文件和目录的磁盘使用情况
-s:只输出合计数据
还可以指定使用特定的单位:
以字节为单位:单位是bytes
du -b file(s)
以KB为单位:1KB等于1024字节,单位是KB或者K
du -k file(s)
以MB为单位:
du -m file(s)
以块为单位
du -B block_size file(s)
还可以排除指定文件:
du –exclude “*.txt” file(s)
排除所有的.txt文件
排除列表:
–exclude-from
du –exclude-from exclude.txt file(s)
exclude.txt包含了需要排除的文件列表
指定遍历目录层次的最大深度:
–max-depth,将深度指定为1表示统计当前目录下的所有文件的占用情况,指定为2表示统计当前目录以及下一级子目录下的文件占用
限制只能对单个文件系统进行遍历:
-x:将所有挂载点排除在磁盘使用统计之外
假设有这样一种情况,递归遍历的目录层次中的某个子目录可能就是一个挂载点。例如,/mnt/sda1是/mnt的子目录,同时也是设备/dev/sda1的挂载点
常用例子:
1)du -ak|sort -nrk 1|head
sort对第一列依数值逆序排序,head显示前10行输出(缺点是输出结果中包含了目录)
2)find . -type f exec du -k {} \; | sort -nrk 1|head
只输出最大的10个文件
2、time
time:测试运行时间
time COMMAND 显示COMMAND命令的运行时间
输出三个时间:real、user、sys
备注:
当运行time时,默认调用的是shell的内建命令time,内建的time命令选项有限。如果想要使用另外的功能,应该使用/usr/bin/time这个可执行二进制文件
/usr/bin/time:
1)-o:将相关的时间统计信息写入文件
/usr/bin/time -o output.txt COMMAND
2)-f:格式化时间输出
/usr/bin/time -f “Time:%U” -a -o timing.log uname
3)使用错误重定向操作符(2>)对时间信息重定向(因为time命令会将命令的执行时间输出到stderr中)
/usr/bin/time -f “Time:%U” uname > command.output.txt 2>timing.log
3、登录用户相关命令
1)当前用户登录信息:who
显示出登录名、用户所使用的tty、登录时间以及登录用户的远程主机名(或ip)
说明:
tty是与终端相关联的设备文件,对应的设备文件目录在/dev/pts目录,执行tty可以获取当前终端的设备路径
2)更加详细的用户登录信息:w
3)当前登录主机的用户列表:users
排除重复用户最简单的方法是:users|tr ‘ ‘ ‘\n’|sort |uniq
4)查看系统运行了多长时间:uptime
uptime|grep -Po “\d{2}:\d{2}:\d{2}”
5)查看登录会话信息:last
last USER 获取单个用户登录会话的信息
last reboot 获取重启会话的信息
lastb 获取登录失败的会话信息
ps -eo comm,pcpu|tail -n +2 获取cpu的统计数据,tail -n +2用来将ps输出中COMMAND %CPU去掉
$$:表示当前脚本的进程id
4、watch
用来在终端以固定的时间间隔监视命令输出
例如watch ‘ls -l|grep “^d”‘ 只列出目录,默认每2秒更新一次输出
也可以用-n seconds指定更新输出的时间间隔
例如watch -n 5 ‘ls -l’ 以5秒为间隔,监视ls -l的输出
5、inotifywait
可以收集有关文件访问的信息。linux发行版默认没有包含这个命令,要用软件管理器自行安装inotify-tools。
安装:apt install inotify-tools
inotifywait -m -r -e create,move,delete $path -q
选项说明:
-m:表示要持续监视变化
-r:表示以递归形式监视命令(忽略符号链接)
-e:指定要监视的事件列表
-q:减少冗余信息
-e可以指定的监视事件列表有:
access 读取文件
modify 修改文件
attrib 文件元数据被修改
move 移动文件
create 创建文件
open 打开文件
close 关闭文件
delete 删除文件
6、logrotate
用于管理日志文件:rotation(轮替)
例如,logrotate在保留日志文件中最新添加的100KB内容(假设指定SIZE = 100k)的同时,将剩下的数据(较旧的日志数据)移入新文件logfile_name.1。随着该日志文件(logfile_name.1)中的内容越来越多,逐渐超出了SIZE规定的定额,logrotate就会再用最近的内容更新日志文件,然后用较旧的内容创建logfile_name.2。整个过程可以轻松地使用logrotate进行配置。logrotate还可以将旧的日志文件压缩成logfile_name.1. gz、logfile_name.2.gz等。是否选择压缩旧日志文件也可以通过logrotate来配置。
logrotate的配置目录位于/etc/logrotate.d。
假如我们的程序会生成这样一个日志/var/log/program.log,我们可以为这个日志编写一个特定的配置:
cat /etc/logrotate.d/program
/var/log/program.log { #/var/log/program.log指定了日志文件路径
missingok #如果日志文件丢失,则忽略(不对日志文件轮替)
notifempty #仅当源日志文件非空时才对其进行轮替
size 30K #限制轮替日志的大小,可以用1M表示1MB
compress #允许用gzip压缩较旧的日志
weekly #指定进行轮替的时间间隔,可以是daily、weekly、yearly
rotate 5 #这是需要保留的旧日志文件的归档数量。这里指定为5,所以日志文件名会是program.log.1.gz、program.log.2.gz一直到program.log.5.gz
create 0600 root root #指定所创建归档文件的权限、用户和用户组
}
说明:
以上选项都是可选的
7、syslog
在linux系统中,由守护进程syslogd使用syslog协议负责在/var/log中创建并写入日志信息。每一个标准应用进程都可以利用syslog记录日志信息
用logger创建和管理日志信息:
1)向系统日志文件/var/log/message写入日志信息:#logger默认将日志信息记录到/var/log/message
logger this is a test
然后执行命令:
[root@host ~]# tail -n 1 /var/log/messages
Mar 14 15:01:41 host root: this is a test
2)将另一个日志文件的最后一行记录到系统日志中:
logger -f /var/log/program.log #系统日志是message