Linux commands you should know

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个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式










【操作要求1】首先用合法用户名登陆系统,不保存直接退出。 【操作步骤】 (1)在系统提示符下,输入vi,按回车键,进入vi的界面。 (2)输入:q!不保存直接退出。 【操作要求2】新建文件f1并编辑一段文字进行保存。 【操作步骤】 (1)在系统提示符下输入vi f1,按回车键。 (2)看到vi的界面,输入i,左下角会出现“插入”。 (3)输入一段文字,锻炼输入的熟练性。 10 Basic Linux Networking and Monitoring Commands You Should Know I have listed down 10 basic Linux networking and monitoring commands which each Linux user should know. These Linux basic networking and monitoring commands like hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool are used for viewing the IP address of the Linux server, managing Linux server network adapter configuration, making network connections among Linux servers over telnet and ethernet, Linux server information etc. Lets have a look on the following Linux networking and monitoring commands. (4)按Esc键,进入命令模式。这时“插入”就不见了。 (5)输入:wq,按回车键,保存文件。 实验结果截图: 【操作要求3】对文件f1进行增、删、改操作。 【操作步骤】 (1)在系统提示符下输入vi f1,按回车键。看到vi的界面。输入i,进入插入模式。 输入增加的文字:“vi is very easy to user~!”。用方向键将光标移到图文字行的任意处。 实验结果截图: (2)按Esc键,进入命令模式。 输入命令dd,删除光标所在一行(若连续输入d,d是将光标所在的行及以下所有行删除)。 实验结果截图: (3)输入u撤销刚刚的删除操作,用方向键将光标移到very的v处,按Esc键,进入命令模式,输入命令2x,查看结果。 实验结果截图: 【操作要求4】输入u撤销刚刚的删除操作,接着上述步骤继续做,对文件f1进行复制、粘贴操作。 【操作步骤】 (1)将光标移动到“vi is very easy to user~!”。 (2)按Esc键,输入命令yy,进行复制. (3)按Esc键.,进入命令模式,输入p,完成粘贴,查看结果。 实验结果截图: (4) 将光标移动至第一个“vi is very easy to user~!”行上;按Esc键,进入命令模式; 输入命令2yy,进行复制, (5)按Esc键,进入命令模式,输入p,完成粘贴,查看结果。 实验结果截图: 【操作要求5】接着步骤继续,在f1文件中进行字符串搜索、替换操作。 【操作步骤】将光标移动至第一个“vi is very easy to user~!”行上,输入“/is”,在命令模式下,按回车键,查看结果。 实验结果截图: 2、用vi编辑器来编写一个简单的程序,用gcc编译。 【操作步骤】 (1)、输入vi,进入vi编辑器。 (2)、编写程序代码如下(自行调试): #include “stdio.h” main( ) {int i,sum=0; for(i=1,i<=10;i++) sum+=i; printf(“sum=%d\n”,sum); } 实验情况截图: (3)、按Esc键,进入命令模式。 (4)、输入“:w sum.c”。 (5)、按Esc键,进入命令模式,并输入“:q”,退出vi编辑器即可。 (6)、输入“gcc -o sum sum.c”,进行编译。 用ls查看sum文件截图: (7)、若成功则不会有任何信息,反之,系统会报错。若成功,则输入“./sum”,就可得到结果。 实验结果截图: (8)、将10替换为每个同学的学号的最后三位数字,重新编译,查看结果。(注意,程序部分需要调试)。 实验结果截图: 3、编译书上296页12.2.2 C++实例程序,输入参数29,查看结果。 注意需要安装gcc包:yum install -y gcc-c++ 实验程序及结果截图:
最新发布
09-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值