More Related Content
Similar to Effective linux.2.(tools)
Similar to Effective linux.2.(tools) (20)
Effective linux.2.(tools)
- 3. findutils
► $ dpkg -L findutils | grep bin/
/usr/bin/find
/usr/bin/oldfind
/usr/bin/xargs
find + xargs 威力非常强大
- 4. findutils
► 查找所有mp3/MP3文件
$ find –iname “*.mp3”
► 查找当前目录下所有后缀是.c或者.h的文件,但是
忽略.svn目录
$ find . -type f -name '*.[ch]' -not -regex './.svn.*'
► 找出所有 .svn 目录下的文件:
$ find . -type f -regex '.*/.svn.*‘
- 5. findutils
► 删除当前目录下的空目录
$ find -type d -empty | xargs rmdir
►当前目录下文件长度大于1 M字节的文件:
$ find . -size +1M -print
$ find . –size -10M 小于10M的
单位:k, M, G, c(bytes)
- 6. findutils
►find 的时间参数 -mtime 修改时间 -atime 访
问时间
$find / -amin -10 # 查找系统中最后10分钟访问的文件
$find / -atime -2 # 查找系统中最后48小时访问的文件
$find / -mmin -5 # 查找系统中最后5分钟里修改过的文件
$find / -mtime -1 #查找系统中最后24小时里修改过的文件
$find / -mtime +7 #查找7天前的文件
- 7. findutils
► $ find -iregex ".*.(xml|java|vm)" | grep -v "test/" |
xargs grep ldap
► $ find -type f | sed -n '/test//d;/(.java|.vm|.xml)$/p' |
xargs grep ldap
第二个在一些低版本的linux (redhat as3) 上更快一些,
在高版本上两者已经接近。(可能首次执行时
iregex要慢一些,之后再执行已经很接近了)
- 8. findutils
► find 避开某个子目录的问题
$ find . -path "./a/b" -prune -o -type f
# 虽然不会列出./a/b目录下的文件,但这样会把 ./a/b 这个文件也打印
出来。上面的命令和 find . ( -path './a/b' -prune -o -type f ) -print 效
果是一样的。find 不指定-print参数,默认会对满足条件的进行print操作
$ find . -path "./a/b" -prune -o -type f -print # 这样没有问题。
它和
$ find . -path "./a/b" -prune -o ( -type f -a -print ) 效果一样。
把逻辑顺序交换一下,find -type f -print -o -path ‘./a/b’ -prune 也能得
到一样的效果,相当于:
$ find ( -type f -print ) -o -path './a/b' -prune
- 10. procps
► hongjiang@whj ~ % dpkg -L procps | grep bin/ | xargs -i basename {}
| xargs -n5 | column -t
kill ps sysctl free pgrep
pmap pwdx skill slabtop tload
top uptime vmstat w.procps watch
pkill snice
► 需要掌握: ps kill free pgrep pmap pwdx top uptime vmstat pkill
- 11. procps
► ps 查看线程
$ ps –eL | grep java
$ ps axms (BSD风格?,不好看)
若只是查看某个进程的线程数:
$ ps –onlwp –C java
$ ps –moTHREAD –C java
- 13. procps
► $ top -b -d 1 -n 3600 | grep java
一秒钟取一次取3600次 (1个小时)后结束
► $ top -b -d 1 –n 100 -p pid
单显示指定的进程
- 14. procps
► 定位哪些java线程 的使用率超过 50%
$ top -H -b -p 3260 | awk '/java/ && $9>50‘
► 有个线程cpu 100%,找出来
$ top -H -b -p 3260 | grep 100
3352 hongjian 20 0 1242m 37m 11m R 100 1.0 9:18.03 java
3352 hongjian 20 0 1242m 37m 11m R 100 1.0 9:21.02 java
3352 hongjian 20 0 1242m 37m 11m R 100 1.0 9:24.02 java
- 15. procps
► $ vmstat -S m 1 100
每秒钟刷新一次,执行100次。用m作为单位。
$ pgrep java 获取所有java进程的pid
注,sysvinit-utils下有个pidof命令,两者相同
$ pwdx $$ 当前进程的pwd环境变量(启动时所在的
路径)
- 17. coreutils
$ dpkg -L coreutils | grep bin/ | xargs -i basename {} | xargs -n6 | column -t
cat chgrp chmod chown cp date
dd df dir echo false ln
ls mkdir mknod mv pwd readlink
rm rmdir vdir sleep stty sync
touch true uname mktemp install hostid
nice who users pinky stdbuf [
base64 basename chcon cksum comm csplit
cut dircolors dirname du env expand
expr factor fmt fold groups head
id join link logname md5sum mkfifo
nl nproc nohup od paste pathchk
pr printenv printf ptx runcon seq
sha1sum sha224sum sha256sum sha384sum sha512sum shred
shuf sort split stat sum tac
tail tee test timeout tr truncate
tsort tty unexpand uniq unlink wc
whoami yes arch chroot touch md5sum.textutils
- 19. coreutils
► $ echo “hello” | base64
►$ base64 –d <<< “aGVsbG8K”
► $ basename /a/b/c/name
► $ dirname /a/b/c/name
- 20. coreutils
► 每行不超过100个字符
$ cat file | cut –b1-100
► 统计当前目录下每个子目录下有多少个文件:
$ ls -F | grep '/' | xargs -i find {} -type f | cut -d'/' -f2 |
uniq -c
- 22. util-linux
► $ dpkg -L util-linux| grep bin/ | xargs -i basename {} | xargs -n6 |
column –t
lsblk tailf dmesg more mkfs mkswap
fsck.minix mkfs.minix mkfs.bfs blockdev swaplabel raw
fsck.cramfs mkfs.cramfs fdisk sfdisk cfdisk agetty
blkid findfs wipefs ctrlaltdel fsfreeze fstrim
pivot_root switch_root hwclock isosize getty fsck
getopt addpart ddate delpart mcookie namei
partx whereis rename.ul setterm chkdupexe chrt
ionice taskset flock ipcrm ipcs ipcmk
setsid setarch lscpu fallocate unshare rev
line pg fdformat cytune readprofile ldattach
tunelp rtcwake x86_64 i386 linux64 linux32