目录
1.mktemp
mktemp 使用一个"唯一"的文件名来创建一个 临时文件。如果不带参数的在命令行下调用这个命令时, 将会在 /tmp 目录下产生一个零长度的文件(权限是600)。例如
bash$ mktemp
/tmp/tmp.zzsvql3154
#在shell中使用:
PREFIX=filename
tempfile=`mktemp $PREFIX.XXXXXX`
# XXXXXX 意思是在这个临时的文件名中至少需要 6 个占位符.
# 如果没有指定临时文件的文件名,那么默认就是 "tmp.XXXXXXXXXX"
echo "tempfile name = $tempfile"
#可以得出结果
2.find
用于查找符合条件的文件。任何位于参数之前的字符串都将被视为用户想要查找的目录。
-help 或--help 在线帮助。
-used<日数> 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算。
-amin<分钟> 查找在指定时间曾被存取过的文件或目录,单位以分钟计算。
-anewer<参考文件或目录> 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目 录。
-atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24时计算。
-cmin<分钟> 查找在指定时间之时被更改的文件或目录。
-cnewer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。
-ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算。
-mmin<分钟> 查找在指定时间曾被更改过的文件或目录,单位以分钟计算。
-newer<参考文件或目录> 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录。
-mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算。
-daystart 从本日开始计算时间。
-depth 从指定目录下最深层的子目录开始查找。
-maxdepth<目录层级> 设置最大目录层级。
-mindepth<目录层级> 设置最小目录层级。
-expty 寻找文件大小为0 Byte的文件或者目录下没有任务子目录或者文件的空目录。
-exec<执行指令> 假设find指令的回传值为True,就执行该指令。
-ok<执行指令> 此参数的效果和指定"-exec"参数类似,但在执行指令之前会先询问用户,若回答"y"或"Y",则放弃执行指令。
-true 将 find 指令的回传值皆设为 True。
-false 将find指令的回传值皆设为False。
-ls 假设find指令的回传值为True,就将文件或目录名称列出到标准输出。
-fls<列表文件> 此参数的效果和指定"-ls"参数类似,但会把结果保存为指定的列表文件。
-follow 排除符号连接。
-print 假设 find 指令的回传值为 True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有"./"字符串。
-print0 假设 find 指令的回传值为 True,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行。
-printf<输出格式> 假设 find 指令的回传值为 True,就将文件或目录名称列出到标准输出。格式可以自行指定。
-fprint<列表文件> 此参数的效果和指定"-print"参数类似,但会把结果保存成指定的列表文件。
-fprint0<列表文件> 此参数的效果和指定"-print0"参数类似,但会把结果保存成指定的列表文件。
-fprintf<列表文件><输出格式> 此参数的效果和指定"-printf"参数类似,但会把结果保存成指定的列表文件。
-inum<inode 编号> 查找符合指定的 inode 编号的文件或目录。
-path<范本样式> 指定字符串作为寻找目录的范本样式。
-ipath<范本样式> 此参数的效果和指定"-ipath"参数类似,但忽略字符大小写的差别。
-links<连接数目> 查找符合指定的硬连接数目的文件或目录。
-noleaf 不去考虑目录至少需拥有两个硬连接存在。
-version 或--version 显示版本信息。
示例:
使用-name参数查看/etc目录下面所有的.conf结尾的配置文件:
find /etc -name "*.conf
使用-size参数查看/etc目录下面大于1M的文件:
find /etc -size +1M
列出当前目录及子目录下所有文件和文件夹:
find .
在/home目录下查找以.txt结尾的文件名:
find /home -name "*.txt"
在/var/log目录下忽略大小写查找以.log结尾的文件名:
find /var/log -iname "*.log"
搜索超过七天内被访问过的所有文件:
find . -type f -atime +7
搜索访问时间超过10分钟的所有文件:
find . -type f -amin +10
找出/home下不是以.txt结尾的文件:
find /home ! -name "*.txt"
从用户的home目录中删除所有的test文件
find ~/ -name 'test*' -exec rm {} \;
找出最后一天被修改的
find /tmp -mtime 1
删除至少 5 天内没被存取过的
find /tmp -type f -atime +5 -exec rm {} \;
在/etc 目录中的文件找到所所有包含 IP 地址(xxx.xxx.xxx.xxx) 的文件
find /etc -exec grep '[0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*[.][0-9][0-9]*' {} \;
find /etc -type f -exec cat '{}' \; | tr -c '.[:digit:]' '\n' | grep '^[^.][^.]*\.[^.][^.]*\.[^.][^.]*\.[^.][^.]*$'
处理文件名中以任何方式包含空白的文件
find . -name "* *" -exec rm -f {} \;
3.xargs
是给命令传递参数的一个过滤器, 也是组合多个命令的一个工具。它把一个数据流分割为 一些足够小的块, 以方便过滤器和命令进行处理。由此这个命令也是后置引用的一个强有 力的替换。在一般使用过多参数的命令替换失败的时候,用 xargs 来替换它一般都能成功。 通常情况下xargs从管道或者 stdin 中读取数据, 但是它也能够从文件的输出中读取数据。 xargs的默认命令是echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不 过通过 xargs 的处理后,换行和空白将被空格取代。
-n 多行输出
-d 自定义一个定界符
-I 指定一个替换字符串{},将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-t 打印出 xargs 执行的命令,先打印命令,然后再执行
-p 执行每一个命令时弹出确认
-a file 从文件中读入作为 stdin
-e flag 有时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
-p 当每次执行一个argument的时候询问一次用户
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的,加上数字后是限制每次传递进来参数的个数
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了
-s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数
-L num 从标准输入一次读取 num 行送给 command 命令
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符
-x exit的意思,主要是配合-s使用
-0 使用 find -print0 或 grep -lZ 这两种组合方式,允许处理包含空白或引号的参数
使用 gzips 压缩当前目录下的每个文件, 一次压缩一个, 并且在 每次压缩前都提示用户
ls | xargs -p -l gzip
删除任何包含 "TEST" 的文件
find / -type f -print0 | xargs -0 grep -liwZ TEST | xargs -0 rm -f
或者
grep -rliwZ TEST / | xargs -0 rm -f
拷贝当前目录下的所有文件到另一个目录/tmp下
ls . | xargs -i -t cp ./{} /tmp
自定义一个定界符
echo test-test-test | xargs -d ‘-‘
xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次
通过名字TEST杀掉进程
ps ax | grep "TEST" | awk '{print $1}' | xargs -I kill {} 2&>/dev/null
4.unlink
unlink是用于删除单个文件和链接(软链接、硬链接)的命令行程序,使用它删除符号链接时,符号链接指向的文件并不会被删除。
GNU实现下的unlink命令无法删除目录,使用unlink删除指定的文件时,需要对包含该文件的目录具有写权限。
使用方式即:
unlink fileName/linkName
rm命令在执行的时候,首先会安全检查,如果你没有文件的写权限,那么系统会要求你给出相应权限,还有使用强制删除选项-f;而unlink则不会进行安全检查,直接删除文件。在某些情况下,例如强制删除一个文件而不考虑安全或者权限问题;或者若删除失败(比如文件不存在)的话希望能看到对应报错信息,因为使用rm -f强制删除文件,如果文件不存在的话,不会显示错误信息,这时可以使用 unlink。
5.crontab
“cron table”的缩写,其功能是管理定时计划任务。定时计划任务,即计划好的任务,到了时间就会自动执行,在Linux系统中的crond是一个定时计划任务服务,我们只要能够按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,那么就会按照预定的周期时间自动的执行下去,而crontab命令则是用于配置的工具名称,是用来让使用者在固定时间或固定间隔执行程序用的,类似使用者的时程表。
操作系统安装好后,crond会默认启动,crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作,但是如果是新创建的cron任务,不会马上执行,至少要过2分钟后才会,可以重启cron来马上执行。
Linux任务调度的工作分类:
- 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存等。
- 个人执行的工作:某用户定期要做的工作,例如每隔30分钟执行一个脚本,这些工作是有由每个用户自行设置的。
crontab [ -u user ] { file | -l | -r | -e }
-u user:是指设定指定user的时程表,必须要有其权限(例如root)才能够指定其他user的时程表。如果不使用-u user就是表示设定自己的时程表。
-e:创建、编辑计划任务,运行时以此参数会执行文字编辑器来设定时程表,内定的文字编辑器是vi,如果要设定别的文字编辑器,需要先设定VISUAL环境变数来指定别的文字编辑器,例如setenv VISUAL joe。
-r:删除当前的时程表。
-l:列出目前的时程表来查看当前的计划任务。
时间格式如下:
f1 f2 f3 f4 f5 program
- 其中f1是表示分钟,f2表示小时,f3表示一个月份中的第几日,f4表示月份,f5表示一个星期中的第几天,program表示要执行的程序。
- 当f1为*时表示每分钟都要执行program,f2为*时表示每小时都要执行程序,以此类推。
- 当f1为a-b时表示从第a分钟到第b分钟这段时间内要执行,f2为a-b时表示从第a到第b小时都要执行,以此类推。
- 当f1为*/n时表示每n分钟个时间间隔执行一次,f2为*/n表示每n小时个时间间隔执行一次,以此类推。
- 当f1为a, b, c,...时表示第a, b, c,...分钟要执行,f2 为a, b, c,...时表示第a, b, c...个小时要执行,以此类推。
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0~7) (星期天 为0和7)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
“分”字段必须有数值,绝对不能为空或是*号;“日”和“星期”字段不能同时使用,否则就会发生冲突。
我们也可以将所有的设定先存放在文件中,用crontab file的方式来设定执行时间。在crond服务的配置参数中,注释的方式和Shell脚本那样以#号开头写上注释信息。
Crontab实例:
每一分钟执行一次/bin/ls:
* * * * * /bin/ls
每两个小时执行一次/bin/ls:
0 */2 * * * /bin/ls
每天7:50执行一次/bin/ls:
50 7 * * * /bin/ls
在12月内, 每天的早上6点到12点,每隔 3 个小时的0分执行一次/bin/ls:
0 6-12/3 * 12 * /bin/ls
周一到周五每天下午5点整执行一次/bin/ls:
0 17 * * 1-5 /bin/ls
每月每天的0点20 分, 2点20分, 4点20分....执行一次/bin/ls:
20 0-23/2 * * * /bin/ls
每月1号和15号执行一次/bin/ls:
0 0 1,15 * * /bin/ls
每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件:
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;
6.sar
sar命令(System Activity Reporter系统活动情况报告),是目前LINUX上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC 有关的活动等方面。系统管理员可以使用sar命令对Linux系统进行取样,大量的取样数据和分析结果会实时存入到文件中,因此不会消耗太多的内存和额外系统资源。
sar [options] [-A] [-o file] t [n]
-A | 显示全部报告信息 |
-a | 显示文件读写情况 |
-B | 统计内存设备的分页使用情况 |
-b | 显示I/O速率信息 |
-c | 显示进程创建活动 |
-d | 显示块设备的状态 |
-e | 设置显示结束时间 |
-f | 从文件中读取报告 |
-i | 设置刷新间隔时间 |
-P | 显示每个CPU状态 |
-q | 显示系统负载情况 |
-R | 显示内存状态 |
-r | 输出内存和交换空间的统计信息 |
-u | 显示CPU利用率 |
-v | 输出inode、文件和其他内核表的统计信息 |
-W | 输出系统活动报告 |
-w | 显示交换分区状态 |
-x | 显示指定进程状态 |
-y | 终端设备活动情况 |
怀疑CPU有性能瓶颈:
sar -u 2 3(统计CPU设备的负载信息,每次间隔2秒,共3次)
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
sar -q(显示系统负载情况)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
怀疑内存存在瓶颈:
sar -B 5 3(统计内存设备的分页使用情况,每次间隔5秒,共3次)
pgpgin/s:表示每秒从磁盘或SWAP置换到内存的字节数(KB)
pgpgout/s:表示每秒从内存置换到磁盘或SWAP的字节数(KB)
fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)
pgsteal/s:每秒钟从cache中被清除来满足内存需要的页个数
%vmeff:每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比
sar -r 2 3(统计内存设备的读写信息,每次间隔2秒,共3次)
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
sar -W(输出系统活动报告)
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
用于衡量系统交换页面活动频繁程度的指标,可以用来判断系统的内存使用状况和性能表现。
怀疑I/O存在瓶颈:
sar -b(显示硬盘I/O和传输速率情况)
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
sar -u 2 3(统计CPU设备的负载信息,每次间隔2秒,共3次)
%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。
2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量
3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。
如果要查看二进制文件test中的内容,需键入如下sar命令:
sar -d 2 3(统计硬盘设备的读写信息,每次间隔2秒,共3次)
tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util:I/O请求占CPU的百分比,比率越大,说明越饱和.
2. 当%util的值接近 1% 时,表示设备带宽已经占满。
sar -n DEV