sed
#关闭交换分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
io问题
iostat -d -x -k 2
-d 表示,显示设备(磁盘)使用状态
-k 某些使用block为单位的列强制使用Kilobytes为单位
-x 该选项将用于显示和io相关的扩展数据
2 表示,数据显示每隔2秒刷新一次
#常见用法
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态
iotop查看哪个进程io使用率高
vim
1. 删除指定符号内的内容
di{ 删除{}之内的内容。
dgg 删除光标前的所有内容
dG 删除光标后的所有内容
dg0 删除行第一个
#批量注释
按 ESC进入命令行模式;
ctrl+v进入块选择模式;
操作 k和 j进行上下行选择;
按大写 I进入插入模式,输入注释符 //或 #(shell脚本注释符);
最后按下 ESC即可完成注释。
取消注释
按 ESC进入命令行模式;
ctrl+v进入块选择模式;
操作 k和 j进行上下行选择,还可以操作 h和 l键进行左右控制;
按 d键删除注释符;
最后按下 ESC即可完成取消注释。
总结
大写 I为在光标处插入;
利用Visual-Block模式进行列选择,进而便捷地操作代码注释和取消注释。
syntax on
打开语法高亮。自动识别代码,使用多种颜色显
awk
#1.用法
awk 'BEGIN{X=0}/root/{X+=1}END{print "I find",X,"root lines"}' /etc/passwd 统计 /etc/passwd 文件中包含root行的总数
* $0 表示整个当前行
* $1 每行第一个字段
* NF 字段数量变量
* NR 每行的记录号,多文件记录递增
* FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
* \t 制表符
* \n 换行符
* FS BEGIN时定义分隔符
* RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
* ~ 包含
* !~ 不包含
* == 等于,必须全部相等,精确比较
* != 不等于,精确比较
* && 逻辑与
* || 逻辑或
* + 匹配时表示1个或1个以上
* /0-9+/ 两个或两个以上数字
* /0-9*/ 一个或一个以上数字
* OFS 输出字段分隔符, 默认也是空格,可以改为其他的
* ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
* -F [:#/] 定义了三个分隔符
#2.打印
* print 是 awk打印指定内容的主要命令,也可以用 printf
* awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwd
* awk '{print " "}' /etc/passwd 不输出passwd的内容,而是输出相同个数的空行,进一步解释了awk是一行一行处理文本
* awk '{print "a"}' /etc/passwd 输出相同个数的a行,一行只有一个a字母
* awk -F: '{print Extra close brace or missing open brace1}' /etc/passwd
* awk -F: '{print 2}' 输入字段1,2,中间不分隔
* awk -F: '{print 3,$6}' OFS="\t" /etc/passwd 输出字段1,3,6, 以制表符作为分隔符
* awk -F: '{print 2}' /etc/passwd 输入字段1,2,分行输出
* awk -F: '{print 2}' /etc/passwd 输入字段1,2,中间以**分隔
* awk -F: '{print "name:"3}' /etc/passwd 自定义格式输出字段1,2
* awk -F: '{print NF}' /etc/passwd 显示每行有多少字段
* awk -F: 'NF>2{print }' /etc/passwd 将每行字段数大于2的打印出来
* awk -F: 'NR==5{print}' /etc/passwd 打印出/etc/passwd文件中的第5行
* awk -F: 'NR5|NR6{print}' /etc/passwd 打印出/etc/passwd文件中的第5行和第6行
* awk -F: 'NR!=1{print}' /etc/passwd 不显示第一行
* awk -F: '{print > "1.txt"}' /etc/passwd 输出到文件中
* awk -F: '{print}' /etc/passwd > 2.txt
#3.字符匹配
* awk -F: '/root/{print }' /etc/passwd 打印出文件中含有root的行
* awk -F: '/'打印出文件中含有变量A的行
* awk -F: '!/root/{print}' /etc/passwd 打印出文件中不含有root的行
* awk -F: '/root|tom/{print}' /etc/passwd 打印出文件中含有root或者tom的行
* awk -F: '/mail/,mysql/{print}' test 打印出文件中含有 mailmysql 的行,代表有0个或任意多个字符
* awk -F: '/^2[7]*/{print}' test 打印出文件中以27开头的行,如27,277,27gff 等等
* awk -F: '$1~/root/{print}' /etc/passwd 打印出文件中第一个字段是root的行
* awk -F: '($1=="root"){print}' /etc/passwd 打印出文件中第一个字段是root的行,与上面的等效
* awk -F: '$1!~/root/{print}' /etc/passwd 打印出文件中第一个字段不是root的行
* awk -F: '($1!="root"){print}' /etc/passwd 打印出文件中第一个字段不是root的行,与上面的等效
* awk -F: '$1~/root|ftp/{print}' /etc/passwd 打印出文件中第一个字段是root或ftp的行
* awk -F: '(1=="ftp"){print}' /etc/passwd 打印出文件中第一个字段是root或ftp的行,与上面的等效
* awk -F: '$1!~/root|ftp/{print}' /etc/passwd 打印出文件中第一个字段不是root或不是ftp的行
* awk -F: '(1!="ftp"){print}' /etc/passwd 打印出文件中第一个字段不是root或不是ftp的行,与上面等效
* awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd 如果第一个字段是mail,则打印第一个字段,否则打印第2个字段
#4.格式化输出
awk '{printf "%-5s %.2d",2}' test
* printf 表示格式输出
* %格式化输出分隔符
* -8表示长度为8个字符
* s表示字符串类型,d表示小数
#5.例子
1、显示 /etc/passwd 中含有 root 的行
awk '/root/' /etc/passwd
2、以 : 为分隔,显示/etc/passwd中每行的第1和第7个字段
awk -F ":" '{print $1,$7}' /etc/passwd 或 awk 'BEGIN{FS=":"}{print $1,$7}' /etc/passwd
3、以 : 为分隔,显示/etc/passwd中含有 root 的行的第1和第7个字段
awk -F ":" '/root/{print $1,$7}' /etc/passwd
4、以 : 为分隔,显示/etc/passwd中以 root 开头行的第1和第7个字段
awk -F ":" '/^root/{print $1,$7}' /etc/passwd
5、以 : 为分隔,显示/etc/passwd中第3个字段大于999的行的第1和第7个字段
awk -F ":" '$3>999{print $1,$7}' /etc/passwd
6、以 : 为分隔,显示/etc/passwd中第7个字段包含bash的行的第1和第7个字段
awk -F ":" '$7~"bash"{print $1,$7}' /etc/passwd
7、以 : 为分隔,显示/etc/passwd中第7个字段不包含bash的行的第1和第7个字段
awk -F ":" '$7!~"nologin"{print $1,$7}' /etc/passwd
8、以 : 为分隔,显示$3>999并且第7个字段包含bash的行的第1和第7个字段
awk -F ":" '$3>999&&$7~"bash"{print $1,$7}' /etc/passwd
9、以 : 为分隔,显示$3>999或第7个字段包含bash的行的第1和第7个字段
awk -F ":" '$3>999||$7~"bash"{print $1,$7}' /etc/passwd
系统信息查询
arch
#显示机器的处理器架构(1)
uname -m
#显示机器的处理器架构(2)
uname -r
#显示正在使用的内核版本
dmidecode -q
#显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda
#罗列一个磁盘的架构特性
hdparm -tT /dev/sda
#在磁盘上执行测试性读取操作
cat /proc/cpuinfo
#显示CPU info的信息
cat /proc/interrupts
#显示中断
cat /proc/meminfo
#校验内存使用
cat /proc/swaps
#显示哪些swap被使用
cat /proc/version
#显示内核的版本
cat /proc/net/dev
#显示网络适配器及统计
cat /proc/mounts
#显示已加载的文件系统
lspci -tv
#罗列PCI设备
lsusb -tv
#显示USB设备
find
find / -name file1
#从 '/' 开始进入根文件系统搜索文件和目录
find / -user user1
#搜索属于用户 'user1' 的文件和目录
find /home/user1 -name \*.bin
#在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
find /usr/bin -type f -atime +100
#搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10
#搜索在10天内被创建或者修改过的文件
find / -name \*.rpm -exec chmod 755 '{}' \;
#搜索以 '.rpm' 结尾的文件并定义其权限
find / -xdev -name \*.rpm
#搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
locate \*.ps
#寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
whereis halt
#显示一个二进制文件、源码或man的位置
which
halt
#显示一个二进制文件或可执行文件的完整路径
磁盘空间
df -h
#显示已经挂载的分区列表
ls -lSr |more
#以尺寸大小排列文件和目录
du -sh dir1
#估算目录 'dir1' 已经使用的磁盘空间'
du -sk * | sort -rn
#以容量大小为依据依次显示文件和目录的大小
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n
#以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)
dpkg-query -W -f= '${Installed-Size;10}t${Package}n' | sort -k1,1n
#以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)
RPM 包
rpm -ivh package.rpm
#安装一个rpm包
rpm -qc hive
#查找hive的配置文件
rpm -ivh --nodeeps package.rpm
#安装一个rpm包而忽略依赖关系警告
rpm -U package.rpm
#更新一个rpm包但不改变其配置文件
rpm -F package.rpm
#更新一个确定已经安装的rpm包
rpm -e package_name.rpm
#删除一个rpm包
rpm -qa
#显示系统中所有已经安装的rpm包
rpm -qa | grep httpd
#显示所有名称中包含 "httpd" 字样的rpm包
rpm -qi package_name
#获取一个已安装包的特殊信息
rpm -qg
"System Environment/Daemons"
#显示一个组件的rpm包
rpm -ql package_name
#显示一个已经安装的rpm包提供的文件列表
rpm -qc package_name
#显示一个已经安装的rpm包提供的配置文件列表
rpm -q package_name --whatrequires
#显示与一个rpm包存在依赖关系的列表
rpm -q package_name --whatprovides
#显示一个rpm包所占的体积
rpm -q package_name --scripts
#显示在安装/删除期间所执行的脚本l
rpm -q package_name --changelog
#显示一个rpm包的修改历史
rpm -qf /etc/httpd/conf/httpd.conf
#确认所给的文件由哪个rpm包所提供
rpm -qp package.rpm -l
#显示由一个尚未安装的rpm包提供的文件列表
rpm --import /media/cdrom/RPM-GPG-KEY
#导入公钥数字证书
rpm --checksig package.rpm
#确认一个rpm包的完整性
rpm -qa gpg-pubkey
#确认已安装的所有rpm包的完整性
rpm -V package_name
#检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间
rpm -Va
#检查系统中所有已安装的rpm包- 小心使用
rpm -Vp package.rpm
#确认一个rpm包还未安装
rpm2cpio package.rpm | cpio --extract --make-directories *bin*
#从一个rpm包运行可执行文件
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm
#从一个rpm源码安装一个构建好的包
rpmbuild --rebuild package_name.src.rpm
#从一个rpm源码构建一个 rpm 包
yum 软件
yum install package_name
#下载并安装一个rpm包
yum localinstall package_name.rpm
#将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系
yum update package_name.rpm
#更新当前系统中所有安装的rpm包
yum update package_name
#更新一个rpm包
yum remove package_name
#删除一个rpm包
yum list
#列出当前系统中安装的所有包
yum search package_name
#在rpm仓库中搜寻软件包
yum clean packages
#清理rpm缓存删除下载的包
yum clean headers
#删除所有头文件
yum clean all
#删除所有缓存的包和头文件
yum whatprovides libstdc++.so.6
#查找这个库存在于哪个安装包中
DEB 包
dpkg -i package.deb
#安装/更新一个 deb 包
dpkg -r package_name
#从系统删除一个 deb 包
dpkg -l
#显示系统中所有已经安装的 deb 包
dpkg -l | grep httpd
#显示所有名称中包含 "httpd" 字样的deb包
dpkg -s package_name
#获得已经安装在系统中一个特殊包的信息
dpkg -L package_name
#显示系统中已经安装的一个deb包所提供的文件列表
dpkg --contents package.deb
#显示尚未安装的一个包所提供的文件列表
dpkg -S /bin/ping
#确认所给的文件由哪个deb包提供
APT 软件工具
apt-get install package_name
#安装/更新一个 deb 包
apt-cdrom install package_name
#从光盘安装/更新一个 deb 包
apt-get update
#升级列表中的软件包
apt-get upgrade
#升级所有已安装的软件
apt-get remove package_name
#从系统删除一个deb包
apt-get check
#确认依赖的软件仓库正确
apt-get clean
#从下载的软件包中清理缓存
apt-cache search searched-package
#返回包含所要搜索字符串的软件包名称
tcpdump -i eth0 vrrp -n
#抓取vrrp协议包
网络
ifconfig eth0
#显示一个以太网卡的配置
ifup eth0
#启用一个 'eth0' 网络设备
ifdown eth0
#禁用一个 'eth0' 网络设备
ifconfig eth0 192.168.1.1 netmask 255.255.255.0
#控制IP地址
ifconfig eth0 promisc
#设置 'eth0' 成混杂模式以嗅探数据包 (sniffing)
dhclient eth0
#以dhcp模式启用 'eth0'
route -n
#查看路由表
route add -net 0/0 gw IP_Gateway
#配置默认网关
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
#配置静态路由到达网络'192.168.0.0/16'
route del 0/0 gw IP_gateway
#删除静态路由
hostname
#查看机器名
host www.example.com
#把一个主机名解析到一个网际地址或把一个网际地址解析到一个主机名。
nslookup www.example.com
#用于查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。
ip link show
#查看网卡信息
mii-tool
#用于查看、管理介质的网络接口的状态
ethtool
#用于查询和设置网卡配置
netstat -tupl
#用于显示TCP/UDP的状态信息
tcpdump tcp port 80
#显示所有http协议的流量
#!/bin/bash
user=`whoami`
passwd=000000
#yum install -y sshpass expect
for((current=102; current<=104; current++));do
for((host=102; host<=104; host++));do
sshpass -p $passwd ssh -q -o StrictHostKeyChecking=no $user@hadoop$current expect << EOF
spawn ssh-copy-id ${user}@hadoop${host}
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "$passwd\r"}
}
expect eof
EOF
done
done
文件同步
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=1; host<=5; host++)); do
#echo $pdir/$fname $user@node$host:$pdir
echo --------------- node$host ----------------
rsync -rvl $pdir/$fname $user@node$host:$pdir
done
查看系统产品名称
yum -y install dmidecode
/usr/sbin/dmidecode -s system-product-name|awk '{print $1}'