Your SlideShare is downloading. ×

Effective linux.2.(tools)

1,259

Published on

linux tools

linux tools

Published in: Technology, News & Politics
1 Comment
4 Likes
Statistics
Notes
  • 最后一页的演示echo少了-e参数哦。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
1,259
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
40
Comments
1
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Effective Linux(2):Effective Linux(2): toolstools hongjiang 2012.2.29hongjiang 2012.2.29
  • 2. toolstools ► findutilsfindutils 包包 ► procpsprocps 包包 ► coreutilscoreutils 包包 ► util-linuxutil-linux 包包 ► sshssh
  • 3. findutilsfindutils ► $ dpkg -L findutils | grep bin/$ dpkg -L findutils | grep bin/ /usr/bin/find/usr/bin/find /usr/bin/oldfind/usr/bin/oldfind /usr/bin/xargs/usr/bin/xargs find + xargsfind + xargs 威力非常强大威力非常强大
  • 4. findutilsfindutils ► 查找所有查找所有 mp3/MP3mp3/MP3 文件文件 $ find –iname “*.mp3”$ find –iname “*.mp3” ► 查找当前目录下所有后缀是查找当前目录下所有后缀是 .c.c 或者或者 .h.h 的文件,但是的文件,但是 忽略忽略 .svn.svn 目录目录 $ find . -type f -name '*.[ch]' -not -regex './.svn.*'$ find . -type f -name '*.[ch]' -not -regex './.svn.*' ► 找出所有找出所有 .svn.svn 目录下的文件:目录下的文件: $ find . -type f -regex '.*/.svn.*‘$ find . -type f -regex '.*/.svn.*‘
  • 5. findutilsfindutils ► 删除当前目录下的空目录删除当前目录下的空目录 $ find -type d -empty | xargs rmdir$ find -type d -empty | xargs rmdir ►当前目录下文件长度大于当前目录下文件长度大于 1 M1 M 字节的文件:字节的文件: $ find . -size +1M -print$ find . -size +1M -print $ find . –size -10M$ find . –size -10M 小于小于 10M10M 的的 单位:单位: k, M, G, c(bytes)k, M, G, c(bytes)
  • 6. findutilsfindutils ►findfind 的时间参数的时间参数 -mtime-mtime 修改时间修改时间 -atime-atime 访问时间访问时间 $find / -amin -10 #$find / -amin -10 # 查找系统中最后查找系统中最后 1010 分钟访问的文件分钟访问的文件 $find / -atime -2 #$find / -atime -2 # 查找系统中最后查找系统中最后 4848 小时访问的文件小时访问的文件 $find / -mmin -5 #$find / -mmin -5 # 查找系统中最后查找系统中最后 55 分钟里修改过的文件分钟里修改过的文件 $find / -mtime -1 #$find / -mtime -1 # 查找系统中最后查找系统中最后 2424 小时里修改过的文件小时里修改过的文件 $find / -mtime +7 #$find / -mtime +7 # 查找查找 77 天前的文件天前的文件
  • 7. findutilsfindutils ► $ find -iregex ".*.(xml|java|vm)" | grep -v "test/" | xargs$ find -iregex ".*.(xml|java|vm)" | grep -v "test/" | xargs grep ldapgrep ldap ► $ find -type f | sed -n '/test//d;/(.java|.vm|.xml)$/p' | xargs$ find -type f | sed -n '/test//d;/(.java|.vm|.xml)$/p' | xargs grep ldapgrep ldap 第二个在一些低版本的第二个在一些低版本的 linux (redhat as3)linux (redhat as3) 上更快一些上更快一些 ,在高版本上两者已经接近。(可能首次执行时,在高版本上两者已经接近。(可能首次执行时 iregexiregex 要慢一些,之后再执行已经很接近了)要慢一些,之后再执行已经很接近了)
  • 8. findutilsfindutils ► findfind 避开某个子目录的问题避开某个子目录的问题 $ find . -path "./a/b" -prune -o -type f$ find . -path "./a/b" -prune -o -type f ## 虽然不会列出虽然不会列出 ./a/b./a/b 目录下的文件,但这样会把目录下的文件,但这样会把 ./a/b./a/b 这个文件也打印这个文件也打印 出来。上面的命令和出来。上面的命令和 find . ( -path './a/b' -prune -o -type f ) -printfind . ( -path './a/b' -prune -o -type f ) -print 效果效果 是一样的。是一样的。 findfind 不指定不指定 -print-print 参数,默认会对满足条件的进行参数,默认会对满足条件的进行 printprint 操操 作作 $ find . -path "./a/b" -prune -o -type f -print$ find . -path "./a/b" -prune -o -type f -print ## 这样没有问题。这样没有问题。 它和它和 $ find . -path "./a/b" -prune -o ( -type f -a -print )$ find . -path "./a/b" -prune -o ( -type f -a -print ) 效果一样。效果一样。 把逻辑顺序交换一下,把逻辑顺序交换一下, find -type f -print -o -path ‘./a/b’ -prunefind -type f -print -o -path ‘./a/b’ -prune 也能得也能得 到一样的效果,相当于:到一样的效果,相当于: $ find ( -type f -print ) -o -path './a/b' -prune$ find ( -type f -print ) -o -path './a/b' -prune
  • 9. findutilsfindutils ► xargsxargs 的作用也很大的作用也很大 ► 目录下文件太多,无法用目录下文件太多,无法用 rm *rm * 删除时删除时 可以用可以用 ls | xargs rmls | xargs rm 一次删除一次删除 ► 对文本上下两行合并对文本上下两行合并 $ cat file | xargs –d’n’ –n2$ cat file | xargs –d’n’ –n2
  • 10. procpsprocps ► hongjiang@whj ~ % dpkg -L procps | grep bin/ | xargs -i basename {} |hongjiang@whj ~ % dpkg -L procps | grep bin/ | xargs -i basename {} | xargs -n5 | column -txargs -n5 | column -t kill ps sysctl free pgrepkill ps sysctl free pgrep pmap pwdx skill slabtop tloadpmap pwdx skill slabtop tload top uptime vmstat w.procps watchtop uptime vmstat w.procps watch pkill snicepkill snice ► 需要掌握:需要掌握: psps killkill free pgrep pmap pwdxfree pgrep pmap pwdx toptop uptime vmstat pkilluptime vmstat pkill
  • 11. procpsprocps ► psps 查看线程查看线程 $ ps –eL | grep java$ ps –eL | grep java $ ps axms (BSD$ ps axms (BSD 风格风格 ?? ,不好看,不好看 )) 若只是查看某个进程的线程数:若只是查看某个进程的线程数: $ ps –onlwp –C java$ ps –onlwp –C java $ ps –moTHREAD –C java$ ps –moTHREAD –C java
  • 12. procpsprocps ►以以 CPUCPU 占用率为序显示进程占用率为序显示进程 $ ps -eo pcpu,cmd | sort -nk1$ ps -eo pcpu,cmd | sort -nk1 ►以以 MEMMEM 占用率为序显示进程占用率为序显示进程 $ ps -eo pmem,cmd | sort -nk1$ ps -eo pmem,cmd | sort -nk1 或:或: $ ps –eo rss,cmd | sort –nk1$ ps –eo rss,cmd | sort –nk1
  • 13. procpsprocps ► $ top -b -d 1 -n 3600 | grep java$ top -b -d 1 -n 3600 | grep java 一秒钟取一次取一秒钟取一次取 36003600 次次 (1(1 个小时个小时 )) 后结束后结束 ► $ top -b -d 1 –n 100 -p pid$ top -b -d 1 –n 100 -p pid 单显示指定的进程单显示指定的进程
  • 14. procpsprocps ► 定位哪些定位哪些 javajava 线程 的使用率超过线程 的使用率超过 50%50% $ top -H -b -p 3260 | awk '/java/ && $9>50‘$ top -H -b -p 3260 | awk '/java/ && $9>50‘ ► 有个线程有个线程 cpu 100%cpu 100% ,找出来,找出来 $ top -H -b -p 3260 | grep 100$ top -H -b -p 3260 | grep 100 3352 hongjian 20 0 1242m 37m 11m R3352 hongjian 20 0 1242m 37m 11m R 100100 1.0 9:18.03 java1.0 9:18.03 java 3352 hongjian 20 0 1242m 37m 11m R3352 hongjian 20 0 1242m 37m 11m R 100100 1.0 9:21.02 java1.0 9:21.02 java 3352 hongjian 20 0 1242m 37m 11m R3352 hongjian 20 0 1242m 37m 11m R 100100 1.0 9:24.02 java1.0 9:24.02 java
  • 15. procpsprocps ► $ vmstat -S m 1 100$ vmstat -S m 1 100 每秒钟刷新一次,执行每秒钟刷新一次,执行 100100 次。用次。用 mm 作为单位。作为单位。 $ pgrep java$ pgrep java 获取所有获取所有 javajava 进程的进程的 pidpid 注,注, sysvinit-utilssysvinit-utils 下有个下有个 pidofpidof 命令,两者相同命令,两者相同 $ pwdx $$$ pwdx $$ 当前进程的当前进程的 pwdpwd 环境变量环境变量 (( 启动时所在启动时所在 的路径的路径 ))
  • 16. procpsprocps ► $ pmap pid$ pmap pid 查看进程的地址空间分布查看进程的地址空间分布
  • 17. coreutilscoreutils $ dpkg -L coreutils | grep bin/ | xargs -i basename {} | xargs -n6 | column -t$ dpkg -L coreutils | grep bin/ | xargs -i basename {} | xargs -n6 | column -t cat chgrp chmod chown cp datecat chgrp chmod chown cp date dd df dir echo false lndd df dir echo false ln ls mkdir mknod mv pwd readlinkls mkdir mknod mv pwd readlink rm rmdir vdir sleep stty syncrm rmdir vdir sleep stty sync touch true uname mktemp install hostidtouch true uname mktemp install hostid nice who users pinky stdbuf [nice who users pinky stdbuf [ base64 basename chcon cksum comm csplitbase64 basename chcon cksum comm csplit cut dircolors dirname du env expandcut dircolors dirname du env expand expr factor fmt fold groups headexpr factor fmt fold groups head id join link logname md5sum mkfifoid join link logname md5sum mkfifo nl nproc nohup od paste pathchknl nproc nohup od paste pathchk pr printenv printf ptx runcon seqpr printenv printf ptx runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shredsha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sort split stat sum tacshuf sort split stat sum tac tail tee test timeout tr truncatetail tee test timeout tr truncate tsort tty unexpand uniq unlink wctsort tty unexpand uniq unlink wc whoami yes arch chroot touch md5sum.textutilswhoami yes arch chroot touch md5sum.textutils
  • 18. coreutilscoreutils ► CoreutilsCoreutils 是是 linuxlinux 下命令最多的一个包,也下命令最多的一个包,也 是最基础的一个工具包。大部分都需要了解是最基础的一个工具包。大部分都需要了解 。。 ► $ printf %0x 1234$ printf %0x 1234 打印打印 1616 进制进制 ► $ seq 0 5 100$ seq 0 5 100 步长为步长为 55 打印打印 0-1000-100 之间之间 ► $ seq –s, 0 10$ seq –s, 0 10 产生产生 0,1,2,3…100,1,2,3…10
  • 19. coreutilscoreutils ► $ echo “hello” | base64$ echo “hello” | base64 ►$ base64 –d <<< “aGVsbG8K”$ base64 –d <<< “aGVsbG8K” ► $ basename /a/b/c/name$ basename /a/b/c/name ► $ dirname /a/b/c/name$ dirname /a/b/c/name
  • 20. coreutilscoreutils ► 每行不超过每行不超过 100100 个字符个字符 $ cat file | cut –b1-100$ cat file | cut –b1-100 ► 统计当前目录下每个子目录下有多少个文件:统计当前目录下每个子目录下有多少个文件: $ ls -F | grep '/' | xargs -i find {} -type f | cut -d'/' -f2 | uniq -c$ ls -F | grep '/' | xargs -i find {} -type f | cut -d'/' -f2 | uniq -c
  • 21. coreutilscoreutils ► 统计代码行数统计代码行数 (( 不精准不精准 )) $ find –name “*.java” | xargs wc –l | tail -1$ find –name “*.java” | xargs wc –l | tail -1 一些不常用的:一些不常用的: $ find . –type f | shuf$ find . –type f | shuf 洗牌洗牌 $ factor 12345$ factor 12345 可用来判断是不是质数可用来判断是不是质数
  • 22. util-linuxutil-linux ► $ dpkg -L util-linux| grep bin/ | xargs -i basename {} | xargs -n6 |$ dpkg -L util-linux| grep bin/ | xargs -i basename {} | xargs -n6 | column –tcolumn –t lsblk tailf dmesg more mkfs mkswaplsblk tailf dmesg more mkfs mkswap fsck.minix mkfs.minix mkfs.bfs blockdev swaplabel rawfsck.minix mkfs.minix mkfs.bfs blockdev swaplabel raw fsck.cramfs mkfs.cramfs fdisk sfdisk cfdisk agettyfsck.cramfs mkfs.cramfs fdisk sfdisk cfdisk agetty blkid findfs wipefs ctrlaltdel fsfreeze fstrimblkid findfs wipefs ctrlaltdel fsfreeze fstrim pivot_root switch_root hwclock isosize getty fsckpivot_root switch_root hwclock isosize getty fsck getopt addpart ddate delpart mcookie nameigetopt addpart ddate delpart mcookie namei partx whereis rename.ul setterm chkdupexe chrtpartx whereis rename.ul setterm chkdupexe chrt ionice taskset flock ipcrm ipcs ipcmkionice taskset flock ipcrm ipcs ipcmk setsid setarch lscpu fallocate unshare revsetsid setarch lscpu fallocate unshare rev line pg fdformat cytune readprofile ldattachline pg fdformat cytune readprofile ldattach tunelp rtcwake x86_64 i386 linux64 linux32tunelp rtcwake x86_64 i386 linux64 linux32
  • 23. util-linuxutil-linux ► kill apachekill apache 进程时别忘了清除共享内存进程时别忘了清除共享内存 在我们的服务器启动脚本中都有的:在我们的服务器启动脚本中都有的: $ ipcs -m | grep admin | awk '{print $2}' | xargs ipcrm shm$ ipcs -m | grep admin | awk '{print $2}' | xargs ipcrm shm $ ipcs -s | grep admin | awk '{print $2}' | xargs ipcrm sem$ ipcs -s | grep admin | awk '{print $2}' | xargs ipcrm sem
  • 24. util-linuxutil-linux ► $ rev$ rev 命令 与命令 与 tactac 命令 对比命令 对比 ► $ echo "hello" | rev$ echo "hello" | rev ► $ echo "hellonworld" | tac$ echo "hellonworld" | tac

×