首先使用man命令或—help参数可以看所有命令的帮助,请大家善加利用
例如:
#man cd
#cp –help
另外linux中 > 表示标准输出重定向到其他地方例如文件:
# ll >a.txt ll命令应该在屏幕显示的信息写入文件a.txt
linux中 | 表示管道,管道前的命令输出作为管道后的命令输入
#grep “abc” a.txt | wc –l 在a.txt中查找含abc字符串的行,通过管道给wc 命令计数。
一.常用系统命令
1. Cd 进入目录 #为系统提示符
#cd /ITC/test/ 绝对路径
#cd dns 相对路径
#cd ../dns 相对路径
#cd ~/websearch ~可以替代该用户的home目录,比如一个用户的home目录为/ITC/aaa 则~/websearch等于/ITC/aaa/websearch
2. pwd 查看当前所在路径
3. Rm 删除文件或目录
#rm a.txt 删除一个文件
#rm dns –r -r参数表示删除目录
#rm * -f -f参数表示不提示是否确定,直接删除(不包括路径)
#rm * -rf 全部删除包括路径,不提示是否确定
4. Cp 拷贝
#cp a.txt ../dns/ a.txt拷到../dns/下,不改名
#cp a.txt b.txt a.txt拷贝成b.txt
#cp –r dns dnsbak 拷贝目录dns为dnsbak
5. Mv 移动
#mv a.txt b.txt a.txt改名为b.txt
#mv dns dnsbak 目录dns改名为dnsbak
#mv a.txt b.txt c.txt dns/ 3个文件移动到dns目录,源文件移动后删除。
6. Scp 机器间远程
#scp a.txt root@192.168.1.48:/usr/local
当前路径的a.txt拷贝到48机器的指定路径。Root为拷贝后目标文件的所属用户,可以是其他用户。拷贝时需要输入48机器的root密码
#scp sonic@192.168.1.48:/usr/local/a.txt /ITC/test/
将48上指定目录下的a.txt拷到本机/ITC/test/,从48机器拷贝文件时使用sonic用户登录,需要输入密码
#scp –r dns root@192.168.1.48:/root/
拷贝目录dns到别的机器上
7. Rsync 机器间拷贝
#rsync a.txt 192.168.1.48::root/usr/local/ –progress 拷贝a.txt到48上,–progress为显示进度。
#rsync –r dns 192.168.1.48:root/usr/local/ 拷贝目录到别的机器上。
Rsync只能用root权限。而且本地和远程都需要启动rsync-demon程序。
8. Df 查看当前机器所有磁盘空间
#df 查看磁盘空间并以K为单位显示
#df -h 不以K为单位显示,自动选择最合适的单位显示如M 、G
9.Du 查看目录占用磁盘空间
#du –max-depth=1 /ITC 查看逻辑分区/ITC上各目录的空间占用情况,设定只显示一层路径。
10.Ls 显示当前路径下文件和目录
#ls –al -l用详细格式显示,-a显示隐藏文件
#ls /ITC/test/ 指定显示路径
- Su 切换用户
#su 切换为root用户
#su – 切换为root用户并使用root用户的环境配置
#su – test 切换为test用户并使用test用户的环境配置
12.Exit 从切换到的用户环境退出(回到su之前的用户)
13.Ssh 登录到别的机器
#ssh root@192.168.1.48 从当前机器登录到48机器,可以使用其他用户
- Ifconfig查看当前机器的网络状况(主要用于查看内部或外部IP)
- Export 显示和设置环境变量
#export 显示当前环境信息
#export WEBSEARCH_CODE_ROOT=/ITC/test/ 设置环境变量
- Rz 从本机向secucrt连接的服务器传文件(secucrt客户端可用)
- Sz 从服务器向本机传文件
#sz a.txt 将a.txt传到本机,默认存放位置为secrcrt安装路径下的download目录。
- Sh 运行脚本
#sh start.sh
- Chmod 改变文件权限
#chmod 755 start.sh 给start.sh的拥有用户读写执行权限,给组用户和其他用户读执行权限。
- Chown 改变文件或目录的用户和组权限
#chown test:root a.txt a.txt的用户为test,组为root
#chown -R test:test /ITC/test/ 目录下所有文家和子目录的用户和组都是test。
- More 显示文件,满一屏暂停,空格继续显示下一屏,q退出
#more filename
- Cat 显示文件,不暂停 加-n 显示行数
#cat –n filename
- Head 显示文件开头10行,加-n 100 显示开头100行
#head –n 100 filename
- Tail 显示文件尾 加-f 持续显示(文件还在增长)
#tail –f filename
#tail –n 100 filename 显示文件结尾100行
- Vi 编辑文件
#vi filename
vi编译器常用命令:
I 进入编辑状态,屏幕左下显示 –INSERT—
:/abc 在文章中查找abc串 找到后按N到下一次出现的地方 shift-N到上一次出现的地方
:%s#被替换串#替换串#g 将文章中所有被替换串替换为替换串。#g参数表示如果一行出现多次被替换串都有替换,否则只替换每行第一次出现的
:50 跳转到文章第50行
shift-g 到文章末尾
gg 到文章开头
dd 剪切光标所在行
50dd 从光标所在行向后剪切50行
yy 拷贝光标所在行
50yy 拷贝光标所在行之后50行(含所在行)
p 粘贴
以上剪切粘贴使用的剪贴板为vi自己维护的,与windows的无关,只在vi中生效。即使用yy拷贝的行只能在vi中用p粘贴,无法用ctrl-v粘贴。
w 存盘
q 退出(如果之前对文件有修改且未保存,则无法用q退出,必须用q!退出)
wq 存盘退出
wq! 强行存盘退出(适用于对只读文件的修改)
- Ln 创建链接命令
#ln –s /ITC/search/ /search 创建软连接,访问/ITC/search/目录等同于访问/search目录。
- Nslookup和 host命令 查看指定域名的IP
#nslookup www.sohu.com
#host http://www.sohu.com
- Curl
#curl –v http://www.sohu.com/
#curl –v –A “abcde” http://www.sohu.com/ //使用abced作为agent
- Wget 抓取网页保存在当前目录
#wget http://www.sohu.com/
#wget –I inputfile //依次wget inputfile中的url
#wget –user-agent=AGENT http://www.sohu.com/ //使用IE的agent代替wget agent 抓取。
- telnet 网络访问
#telnet www.sohu.com 80 访问www.sohu.com的80端口
- Cut 切割文件中某列
#cut –f1 a.txt >b.txt 将a.txt中第一列(用\t分隔的列)写入b.txt
#cut –d” “ –f”1,3,5” a.txt >b.txt -d参数表示用双引号中的字符代替\t作为域分隔符,-f参数后的引号内可以写多个列。
- Uniq 显示文件中重复(或唯一)的行,需要注意要uniq的文件必须先用sort排序
#uniq filename 显示该文件所有行,但是重复的行只显示一次。
#uniq –c filename 功能同上,并且显示每行重复的次数
#uniq –u filename 只显示文件中唯一的行(不重复的行)
#uniq –d filename 只显示文件中出现重复的行
#uniq –f1 filename 忽略第一列,只对第二列及其之后的内容进行uniq。
- Sort 文件排序 加-n参数对行使用自然数大小排序(否则按ascii码排序)
#sort –n a.txt
#sort –n –v –k2 filename1 filename2 将两个文件混合排序,对第二列进行自然数排序,按从大到小顺序显示
以/做分隔,从第3个域到第3个域的部分进行排序,-u是排重。
sort -t/ -k3,3 -u filename|more
可以从一批url中,按站点,每个站点得到一条。
- Diff 比较两个文件的不同之处
#diff a.txt b.txt 比较两个文件不同之处
- Grep 过滤查找
#grep “aaa” a.txt 查找a.txt中含有”aaa”的行并显示
#grep –v “aaa” a.txt 查找a.txt中不含”aaa”的行并显示
- Wc 计算数量
#wc a.txt 计算a.txt中的行数,字符数等
#wc –l a.txt 只计算行数
- Tar 压缩解压缩命令
#tar cvf archiev.tar dns/ 将dns目录压缩为archiev.tar文件
#tar zxvf archiev.tar.gz 解压缩archiev.tar.gz文件
37.Kill 杀死进程命令
#kill 11333 杀死进程号为11333的进程(无权限的进程无法杀掉)进程号可以通过ps命令得到
#kill –9 11333 强行杀死进程号为11333的进程(无权限的进程无法杀掉)
#killall dnsserver 杀死所有进程名为dnsserver的进程(无权限的进程无法杀掉)
#killall –9 dnsserver 强行杀死所有进程名为dnsserver的进程(无权限的进程无法杀掉)
- source
修改用户的配置文件.bash_profile .bashrc等文件后,如果不想中断连接重新ssh登录,就需要使用source命令使刚改的内容生效:
#source .bash_profile
- Ldconfig(只有root能用)
安装某些软件后(如ACE BDB)需要修改/etc/ld.so.conf文件,加入程序使用的动态链接库位置信息。修改文件后使用ldconfig命令使修改生效。
#ldconfig –v
- Pstree
查看当前进程启动情况,子进程数等,并可查看进程启动的命令行
#pstree -a
- Unix2dos dos2unix
Dos和unix格式文本转换。将dos的换行(\r\n)和unix的换行(\n)进行转换。
#unix2dos a.txt
#dos2unix a.txt
- Useradd (adduser) 新增用户
常用方法:
#useradd abc 新增用户abc,默认home目录为/home/abc/
#adduser abc 同上
#useradd abc –d /ITC/abc/ 新增用户abc,指定home目录/ITC/abc/ (没有的话会自己建立)
- Userdel 删除用户
#userdel abc 删除用户abc。(用户创建的目录和文件并不会删除)
#userdel –r abc 删除用户abc,用户home目录下所有文件自动删除,/etc/passwd group shadow文件中该用户信息删除。
- Passwd修改用户密码
#passwd username
不输入username时是修改root密码,谨慎!
- 计算md5值的命令 md5sum
#md5sum filename
- dmesg查看系统信息
#dmesg
- Rename 对批量文件改名
#rename abc 123 *abc* 将所有文件名含abc的文件,将其中的字串abc改成123
例如: sssabca.com -> sss123a.com
Sss.abc -> sss.123
二.常用性能监控命令
1.查看进程: ps
参数:
-A all processes
-N negate selection
-a all w/ tty except session leaders
-d all except session leaders
-e all processes
-u by effective user ID
T all processes on this terminal
a all w/ tty, including other users
g all, even group leaders!
r only running processes
x processes w/o controlling ttys
m show threads
常用方法: ps -ax 显示所有进程 ps -ax|grep processname 可以查看该进程的状态
ps -aux 显示所有进程和进程启动用户 ps -aux|grep user 可以查看该用户的启动进程
2.查看端口情况:netstat
参数:
-r, –route display routing table
-i, –interfaces display interface table
-g, –groups display multicast group memberships
-s, –statistics display networking statistics (like SNMP)
-M, –masquerade display masqueraded connections
-v, –verbose be verbose
-n, –numeric don’t resolve names
–numeric-hosts don’t resolve host names
–numeric-ports don’t resolve port names
–numeric-users don’t resolve user names
-N, –symbolic resolve hardware names
-e, –extend display other/more information
-p, –programs display PID/Program name for sockets
-c, –continuous continuous listing
-l, –listening display listening server sockets
-a, –all, –listening display all sockets (default: connected)
常用方法: netstat -nap|grep 7777 查看指定端口7777的情况
netstat -nap 5|grep 7777 查看指定端口7777的情况,每5秒自动刷新
[@65.159 monitor_log]# netstat -nap|grep 1073
接收缓冲 发送缓冲
tcp 0 0 0.0.0.0:58001 0.0.0.0:* LISTEN 1073/webcached
tcp 223 0 10.10.65.159:58001 10.10.63.106:55887 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:58001 10.10.63.106:55886 ESTABLISHED 1073/webcached
tcp 9120 0 10.10.65.159:46514 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:46512 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:46513 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:46511 10.10.99.2:38598 ESTABLISHED 1073/webcached
tcp 0 210 10.10.65.159:11459 10.10.97.22:19018 ESTABLISHED 1073/webcached
tcp 0 0 10.10.65.159:11458 10.10.97.22:19018 ESTABLISHED 1073/webcached
webcached进程监听58001端口,同时去连接query99.2:38598 连接summary97.22:19018
63.106机器有1个压力程序,开了2个连接,向58001发送请求。
tcp 223 0 10.10.65.159:58001 10.10.63.106:55887 ESTABLISHED 1073/webcached
这一行表示,本机58001端口的tcp接收缓冲区有223字节的数据,说明cache处理不够及时,有待处理的请求。
tcp 9120 0 10.10.65.159:46514 10.10.99.2:38598 ESTABLISHED 1073/webcached
这一行表示,46514端口(cache用该端口向query发请求和收返回)的tcp接收缓冲区有9120字节的数据,说明cache没有及时将query返回的数据从缓冲区里拿出来。
tcp 0 210 10.10.65.159:11459 10.10.97.22:19018 ESTABLISHED 1073/webcached
这一行表示,11459端口(cache用该端口向summary发请求和收返回)的tcp发送缓冲区有210字节的数据,说明summary机器的接收缓冲区已经满了,cache的请求已经发不过去,都堆积在自己的发送缓冲区了。
3.查看进程占用系统资源:top
执行top后,”h”进入帮助。
Shift-m 用内存占用大小排序
4.查看系统资源状况:vmstat
常用方法:vmstat delay count delay=延迟 count=次数
vmstat 5 100 每5秒打印一次结果,共100次(可以省略次数,一直打印)
5.查看网卡带宽资源占用情况:sar iptraf
常用方法:
sar -n DEV 1 100 每隔1秒刷新一次结果,打印100次
结果说明:
时间 设备 接收包/s 发送包/s 接收字节/s 发送字节/s
13时56分49? IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s
13时56分50? lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时56分50? eth0 1.00 1.00 64.00 446.00 0.00 0.00 0.00
13时56分50? eth1 2.00 0.00 128.00 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 19.81 9.78 29507.01 646.56 0.00 0.00 0.01
Average: eth1 37.11 0.20 2414.21 20.13 0.00 0.00 0.01
可以使用iptraf查看各网卡流量。
Yum install iptraf 可以安装
6.iostat 磁盘io状态查看
常用方法:
iostat -x 5 每隔5秒刷新一次
其他命令:
- Ipcs 检查sharemem.id 检查共享内存编号
- Ipcrm 删除共享内存
Ipcrm –M key
- Sysctl 查看并修改系统参数
#sysctl –a 显示所有系统参数
#sysctl –w 设置参数值
- Od 查看2进制文件
#od –Ax –tx binaryfilename 16进制显示2进制文件内容
- Watch 定期执行一个命令显示结果
#watch –n1 tail err.log –n 1
每秒执行一次tail err.log –n 1 命令
三.Shell心得(heart get)
1.打印记录的某一列。
经常会用到某文件的某一列,用awk命令可以轻松实现。
$ awk ‘{print $[列数]}’ [文件名]
2.将文件加入一列相同的值。
$ awk ‘{print “%s[分隔符][值],$1}’ [文件名]
3.将两个不同文件的两列合并,用paste命令。
$ paste [文件1] [文件2]
4.匹配:
类似于
$grep [匹配内容] [文件]
用awk实现:
$awk ‘{if ([列数]~/[匹配内容]/) pirnt $0}’ [文件名]
5.替换
类似于vi [文件] :%s#[欲替换]#[替换为]#g
用awk实现:
$awk ‘gsub (/[匹配内容]/ ,“[替换模式]”) {print $0} ‘ [文件名]
这样就可以不vi 一个文件,实现替换,在写shell时十分有用。
也可以替换分隔符,但是要注意转义:
如文件以“|”为分隔符,我们想替换成TAB。则:
$awk ‘gsub /\|/ ,”\t” {print $0}’ [文件名]
6.乱序文件
rev filename|sort|rev >temp 将file每行反向输出,再排序,再反向回来。实际就是按每行最后一个字母排序。但是不能对双字节(如汉字)文本做
- Sed
替换
Sed –e ‘s/被替换串/替换串’ file
Sed –e ‘s/^../&ok/’ file #将所有行开头两个字符之后插入ok &可以代表被匹配上的串
Sed –e ‘s/$/abc/’ file #在所有行最后加上abc
修改文本文件
i\ 在指定行前插入
a\ 在指定行后插入
d 删除指定行
sed ‘3i\sss’ tmp 在第3行之前插入sss
sed ‘3,$i\sss’ tmp 在第3行到最后一行所有行之前都插入sss
sed ‘/abc/a\sss’ tmp 在匹配上abc的行后都插入sss
7.split
按行分割文件
split –10000 log xlog 将log文件按每10000行分出一个小文件,小文件前缀xlog,后缀是aa、ab……累加
split –10000 –d log xlog 增加-d参数,文件后缀变成数字
8.Iptables
iptables -A INPUT -s 200.200.200.1 -j DROP 将规则“丢弃所有来自指定IP的包”放入接收链表(不加-p 参数,默认将tcp udp icmp 都禁止)。
iptables -D INPUT -s 200.200.200.1 -j DROP 把上述规则从链表中取消。
iptables -A OUTPUT -d 200.200.200.1 -j DROP
将本机向指定ip发出的包都drop
iptables –list 显示所有规则。
9.Date
tail queryServer.tiny.log.wf -n20000 | grep `date “-d 1 second ago” “+%H:%M:%S”` | grep QueryItem –c
date “-d 1 second ago” “+%H:%M:%S” 显示当前时间前一秒。
date +%s seconds since 1970-01-01 00:00:00 UTC
10.tcpdump
tcpdump -Xx -s 4096 dst port 80 查看发给80端口的tcp包内容
tcpdump udp -Xx -s 4096 dst port 12345 查看发给12345端口的udp包内容
tcpdump -Xx -s 4096 src port 1111 查看从1111端口发出去的tcp包内容
11. 查找一个小文件中的url是否存在大文件中的shell
在文件中的shell:
while read URL
do
grep $URL std.log
done < $1;
不在文件中
while read URL
do
TEMP=`grep $URL std.log`
if [ “$TEMP” = “” ] ; then
echo $URL
fi
done < $1