ALL RESOURCE IS COLLECTED FROM INTERNET !!!
(1) 远程关闭一台Windows的机器
net rpc shutdown -I ipAddressOfWindowsPC -U username%password(2) !$是一个特殊的环境变量,它代表了上一个命令的最后一个字符串
(3) sudo !! 以root的身份执行上一条命令 。
(4) "cd –" 回到上一次的目录
(5) ‘ALT+.’ or ‘<ESC> .’ 热建alt+. 或 esc+. 可以把上次命令行的参数给重复出来。
(6) ^old^new 替换前一条命令里的部分字符串。也可以使用 !!:gs/old/new
(7) du -s * | sort -n | tail 列出当前目录里最大的10个文件。
(8) :w !sudo tee % 在vi中保存一个只有root可以写的文件
(9) date -d@1234567890
(10) > file.txt 创建一个空文件,比touch短。
(11) mtr coolshell.cn mtr命令比traceroute要好。
(12) 在命令行前加空格,该命令不会进入history里。
(13) echo “ls -l” | at midnight 在某个时间运行某个命令。
(14) 命令行的方式更新twitter。
curl -u user:pass -d status=”Tweeting from the shell” http://twitter.com/statuses/update.xml
(15) 检查你的gmail未读邮件
curl -u username –silent “https://mail.google.com/mail/feed/atom” | perl -ne ‘print “\t” if /<name>/; print “$2\n” if /<(title|name)>(.*)<\/\1>/;’
(16) ps aux | sort -nk +4 | tail 列出头十个最耗内存的进程
(17) man ascii
(18) netstat –tlnp 列出本机进程监听的端口号.(netstat -anop 可以显示侦听在这个端口号的进程)
(19) ctrl-x e 快速启动你的默认编辑器(由变量$EDITOR设置)。
(20) 当file.log里出现Finished: SUCCESS时候就退出tail,这个命令用于实时监控并过滤log是否出现了某条记录。
tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'
(21) 在远程机器上运行一段脚本。这条命令最大的好处就是不用把脚本拷到远程机器上。
ssh user@server bash < /path/to/local/script.sh
(22) 比较一个远程文件和一个本地文件
ssh user@host cat /path/to/remotefile | diff /path/to/localfile -
(23) screen -d -m -S some_name ping my_router
(24) 下载整个www.example.com网站
wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
(25) curl ifconfig.me 当你的机器在内网的时候,可以通过这个命令查看外网的IP。
(26) 改一下图片的大小尺寸
convert input.png -gravity NorthWest -background transparent -extent 720×200 output.png
(27) lsof –i 实时查看本机网络服务的活动状态。
(28) vim一个远程文件
vim scp://username@host//path/to/somefile
(29) 行脚本能输出你最常用的十条命令
history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[a] " " CMD[a]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
history|awk ‘{print $2}’|awk ‘BEGIN {FS=”|”} {print $1}’|sort|uniq -c|sort -rn|head -10
(30) 想看看Marix的屏幕效果?
tr -c “[:digit:]” ” ” < /dev/urandom | dd cbs=$COLUMNS conv=unblock | GREP_COLOR=”1;32″ grep –color “[^ ]“
(31) egrep/grep -o/-A/-B
(32) ip 或 ifconfig, dig。当然,原作者还忘了如netstat, ping, traceroute
(33) 在 bash 里,使用 Ctrl-R 而不是上下光标键来查找历史命令。
(34) 在 bash里,使用 Ctrl-W 来删除最后一个单词,使用 Ctrl-U 来删除一行。请man bash后查找Readline Key Bindings一节来看看bash的默认热键,比如:Alt-. 把上一次命令的最后一个参数打出来,而Alt-* 则列出你可以输入的命令
(35) cat hosts | xargs -I{} ssh root@{} hostname
find ... -print0 | xargs ...
(36) pstree -p 可以帮你显示进程树。
(37) 使用 pgrep 和 pkill 来找到或是kill 某个名字的进程。 (-f 选项很有用).
(38) kill -l/man 7 signal
(39) 使用 nohup 或 disown 如果你要让某个进程运行在后台, screen
(40) 在bash的脚本中,你可以使用 set -x 来debug输出。使用 set -e 来当有错误发生的时候abort执行。考虑使用 set -o pipefail 来限制错误。还可以使用trap来截获信号(如截获ctrl+c)。
(41) 在bash 脚本中,subshells (写在圆括号里的) 是一个很方便的方式来组合一些命令。一个常用的例子是临时地到另一个目录中
# do something in current dir
(cd /some/other/dir; other-command)
# continue in original dir
(42) 在 bash 中,注意那里有很多的变量展开。如:检查一个变量是否存在: ${name:?error message}。如果一个bash的脚本需要一个参数,也许就是这样一个表达式 input_file=${1:?usage: $0 input_file}。一个计算表达式: i=$(( (i + 1) % 5 ))。一个序列: {1..10}。 截断一个字符串: ${var%suffix} 和 ${var#prefix}。 示例: if var=foo.pdf, then echo ${var%.pdf}.txt prints “foo.txt”.
(43) 通过 <(some command) 可以把某命令当成一个文件。示例:比较一个本地文件和远程文件 /etc/hosts: diff /etc/hosts <(ssh somehost cat /etc/hosts)
(44) 在 bash中,使用重定向到标准输出和标准错误。如: some-command >logfile 2>&1。另外,要确认某命令没有把某个打开了的文件句柄重定向给标准输入,最佳实践是加上 “</dev/null”,把/dev/null重定向到标准输入。
(45) 在 ssh中,知道怎么来使用ssh隧道。通过 -L or -D (还有-R) ,翻墙神器。
(46) 你还可以对你的ssh 做点优化。比如,.ssh/config 包含着一些配置:避免链接被丢弃,链接新的host时不需要确认,转发认证,以前使用压缩(如果你要使用scp传文件):
ServerAliveInterval=15
ServerAliveCountMax=6
StrictHostKeyChecking=no
Compression=yes
ForwardAgent=yes
(47) 如果你要处理XML,使用 xmlstarlet
(48) 把 HTML 转成文本: lynx -dump -stdin
(49) 了解 sort 和 uniq 命令 (包括 uniq 的 -u 和 -d 选项).
(50) 了解用 cut, paste, 和 join 命令来操作文本文件。很多人忘了在cut前使用join。
(51) 如果你知道怎么用sort/uniq来做集合交集、并集、差集能很大地促进你的工作效率。假设有两个文本文件a和b已解被 uniq了,那么,用sort/uniq会是最快的方式,无论这两个文件有多大(sort不会被内存所限,你甚至可以使用-T选项,如果你的/tmp目录很小)
cat a b | sort | uniq > c # c is a union b 并集
cat a b | sort | uniq -d > c # c is a intersect b 交集
cat a b b | sort | uniq -u > c # c is set difference a - b 差集
(52) 了解和字符集相关的命令行工具,包括排序和性能。很多的Linux安装程序都会设置LANG 或是其它和字符集相关的环境变量。这些东西可能会让一些命令(如:sort)的执行性能慢N多倍(注:就算是你用UTF-8编码文本文件,你也可以很安全地使用ASCII来对其排序)。如果你想Disable那个i18n 并使用传统的基于byte的排序方法,那就设置export LC_ALL=C (实际上,你可以把其放在 .bashrc)。如果这设置这个变量,你的sort命令很有可能会是错的。
(53) 了解 awk 和 sed,并用他们来做一些简单的数据修改操作。例如:求第三列的数字之和: awk ‘{ x += $3 } END { print x }’。这可能会比Python快3倍,并比Pyt使用 shuf 来打乱一个文件中的行或是选择文件中一个随机的行。hon的代码少三倍。
(54) 使用 shuf 来打乱一个文件中的行或是选择文件中一个随机的行。
(55) 了解sort命令的选项。了解key是什么(-t和-k)。具体说来,你可以使用-k1,1来对第一列排序,-k1来对全行排序。
(56) Stable sort (sort -s) 会很有用。例如:如果你要想对两例排序,先是以第二列,然后再以第一列,那么你可以这样: sort -k1,1 | sort -s -k2,2
(57) 查看/编辑二进制hd/bvi
(58) 如果你要分隔一个大文件,你可以使用split命令(split by size)和csplit命令(split by a pattern)。
(59) 如果你想知道磁盘、CPU、或网络状态,你可以使用 iostat, netstat, top (或更好的 htop), 还有 dstat 命令。你可以很快地知道你的系统发生了什么事。关于这方面的命令,还有iftop, iotop等
(60) 要了解内存的状态,你可以使用free和vmstat命令。具体来说,你需要注意 “cached” 的值,这个值是Linux内核占用的内存。还有free的值。
(61) 如果你要找到哪个socket或进程在使用网络带宽,你可以使用 iftop 或 nethogs。
(62) 如果你要抓网络包的话,试试 wireshark 或 tshark。
(63) 如果你调试某个东西为什么出错时,sar命令会有用。它可以让你看看 CPU, 内存, 网络, 等的统计信息。
(64) 使用 dmesg 来查看一些硬件或驱动程序的信息或问题。
(65) SHELL shortcut
CTRL-a - Moves the cursor the start of the line
CTRL-e - Moves the cursor to the end of the line
CTRL-f - Moves the cursor 1 character forward
CTRL-b - Moves the cursor 1 character backward
CTRL-k - Cuts the text under the cursor and to the end of the line.
CTRL-u - Cuts the text behind the cursor to the beginning of the line.
CTRL-w - Cuts the word behind the cursor.
CTRL-y - Pastes the word or text that was cut after the cursor.
CTRL-d - Deletes the character under the cursor.
note: When the cursor is at the beginning of the line CTRL-d will log your session off.)
CTRL-l - Clears the screen and places the command prompt at the top of the page.
CTRL-r - Starts a search against the command history. Start by typing in what you want to search by then
press CTRL-r to see the matches. CTRL-r to see all matches. If you wish to change your search parameters just hit the backspace key to erase the current inputing and then write your new search,
CTRL-c - Kills the current running foreground program.
CTRL-z - Stop/sleep the current running foreground program.
CTRL-s - Stops the output to the screen.
CTRL-q - Allows output to the screen.
(66) fg
tail -f /var/log/messages &
[1] 614
bash> fg 1 # bring the background task to foreground
(67) quick caculation
bash> echo $((16/2))
8
(68) 删除0字节文件
find -type f -size 0 -exec rm -rf {} \;
(70)查看进程
按内存从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
(71)按cpu利用率从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -nr
(72)打印说cache里的URL
grep -r -a jpg /data/cache/* | strings | grep "http:" | awk -F'http:' '{print "http:"$2;}'
(73)查看http的并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
(74) sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config sed在这个文里Root的一行,匹配Root一行,将no替换成yes.
(75)如何杀掉mysql进程:
ps aux |grep mysql |grep -v grep |awk '{print $2}' |xargs kill -9 (从中了解到awk的用途)
killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid` 试试查杀进程PID
(76)显示运行3级别开启的服务:
ls /etc/rc3.d/S* |cut -c 15- (从中了解到cut的用途,截取数据)
(77)如何在编写SHELL显示多个信息,用EOF
cat << EOF
+--------------------------------------------------------------+
| === Welcome to Tunoff services === |
+--------------------------------------------------------------+
EOF
(78) for 的巧用(如给mysql建软链接)
cd /usr/local/mysql/bin
for i in *
do ln /usr/local/mysql/bin/$i /usr/bin/$i
done
(79) 取IP地址:
ifconfig eth0 |grep "inet addr:" |awk '{print $2}'|cut -c 6- 或者
ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
(80)内存的大小:
free -m |grep "Mem" | awk '{print $2}'
(81)
netstat -an -t | grep ":80" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort
(82)查看Apache的并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
(83)因为同事要统计一下服务器下面所有的jpg的文件的大小,写了个shell给他来统计.原来用xargs实现,但他一次处理一部分,搞的有多个总和....,下面的命令就能解决啦.
find / -name *.jpg -exec wc -c {} \;|awk '{print $1}'|awk '{a+=$1}END{print a}'
CPU的数量(多核算多个CPU,cat /proc/cpuinfo |grep -c processor)越多,系统负载越低,每秒能处理的请求数也越多。
---------------------------------------------------------------------------------------
(84) CPU负载 # cat /proc/loadavg
检查前三个输出值是否超过了系统逻辑CPU的4倍。
(85) CPU负载 #mpstat 1 1
检查%idle是否过低(比如小于5%)
(86) 内存空间 # free
检查free值是否过低 也可以用 # cat /proc/meminfo
(87) swap空间 # free
检查swap used值是否过高 如果swap used值过高,进一步检查swap动作是否频繁:
# vmstat 1 5
观察si和so值是否较大
(88) 磁盘空间 # df -h
检查是否有分区使用率(Use%)过高(比如超过90%) 如发现某个分区空间接近用尽,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录:
# du -cks * | sort -rn | head -n 10
(89) 磁盘I/O负载 # iostat -x 1 2
检查I/O使用率(%util)是否超过100%
(90) 网络负载 # sar -n DEV
检查网络流量(rxbyt/s, txbyt/s)是否过高
(91) 网络错误 # netstat -i
检查是否有网络错误(drop fifo colls carrier) 也可以用命令:# cat /proc/net/dev
(92) 网络连接数目 # netstat -an | grep -E “^(tcp)” | cut -c 68- | sort | uniq -c | sort -n
(93) 进程总数 # ps aux | wc -l
检查进程个数是否正常 (比如超过250)
(94) 可运行进程数目 # vmwtat 1 5
列给出的是可运行进程的数目,检查其是否超过系统逻辑CPU的4倍
(95) 进程 # top -id 1
观察是否有异常进程出现
(96) 网络状态 检查DNS, 网关等是否可以正常连通
(97) 用户 # who | wc -l
检查登录用户是否过多 (比如超过50个) 也可以用命令:# uptime
(98) 系统日志 # cat /var/log/rflogview/*errors
检查是否有异常错误记录 也可以搜寻一些异常关键字,例如:
# grep -i error /var/log/messages
# grep -i fail /var/log/messages
(99) 核心日志 # dmesg
检查是否有异常错误记录
(100) 系统时间 # date
检查系统时间是否正确
(101) 打开文件数目 # lsof | wc -l
检查打开文件总数是否过多
(102) 日志 # logwatch –print 配置/etc/log.d/logwatch.conf,将 Mailto 设置为自己的email 地址,启动mail服务 (sendmail或者postfix),这样就可以每天收到日志报告了。
缺省logwatch只报告昨天的日志,可以用# logwatch –print –range all 获得所有的日志分析结果。
可以用# logwatch –print –detail high 获得更具体的日志分析结果(而不仅仅是出错日志)。
(103)杀掉80端口相关的进程
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh
(104)清除僵死进程。
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
(105)tcpdump 抓包 ,用来防止80端口被人攻击时可以分析数据
# tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts
(106)然后检查IP的重复数 并从小到大排序 注意 "-t\ +0" 中间是两个空格
# less pkts | awk {'printf $3"\n"'} | cut -d. -f 1-4 | sort | uniq -c | awk {'printf $1" "$2"\n"'} | sort -n -t\ +0
(107)查看有多少个活动的php-cgi进程
netstat -anp | grep php-cgi | grep ^tcp | wc -l
chkconfig --list | awk '{if ($5=="3:on") print $1}'
(108) kudzu查看网卡型号
kudzu --probe --class=network
(109)
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式