linux命令收集

mkdir     创建目录   -p递归创建    mkdir -p /data/aaa.txt
ls –l 显示目录或者文件  -F给不同文件结尾加不同的符号 -t按修改时间 -r翻转排序  -lrt  -R显示当前目录下的内容 -i 显示inode信息
cd    切换目录层次
echo   打印输出内容
runlevel 查看系统运行级别
cat   查看文件内容  -n 显示行号(cat -n less -N nl grep -n .)
cat file1 file2 > file3  两个文件合并成一个
paste  file1  file2 >file3  两个文件行合并
cp  -a  拷贝文件或者目录    \cp 直接覆盖不提示或者全路径 -l 创建硬链接  -s  创建软链接
rm -f   强制删除文件  -r递归删除   删除文件或者目录  -fr删除指定的目录和文件
head     头部  显示文件头部 -n 行数  默认头部10行     head -2 test.txt
tail    尾部  显示文件尾部 -n 行数  默认尾部10行      tail -1 test.txt
grep       (过滤)-v 排除      grep -v 排除内容  文件路径    grep -v aaa  test.txt
sed    取各种内容 -n取消默认输出  p打印 d删除    sed -n /aaa/p test.txt
LANG=en  临时调整字符集
vim /etc/sysconfig/i18n  字符集路径
alias   查看别名  unalias 删除别名   cat ~/.bashrc 系统别名位置  设置别名 alias cp='cp -i'
which     查看命令的路径
find  查找命令  -type (f d) -name "f" 按名字查找 -mtime 安装修改时间查找
       -maxdepth level 查找目录的深度
find / -type f -name "cat"
find / -name "test.txt" -exec rm -f {} \;  find / -name "test.txt" |xargs rm -f  查找到删除
find /root/ -type f -name "*.log" -mtime -3|xargs rm -f    删除三天前数据
sed -n '12,16p' cc 打出12-16行
sed -i ‘s#aaalinux#windows#g’ cc   替换内容
find / -type f -name "cc"|xargs  sed -i s#aaalinux#windows#g 查找并修改
awk '{if(NR>3&&NR<26) print $0}' cc
awk -F ":" '{print $1}' /etc/passwd
xargs  用于把find/ls的输出命令交给后面处理
find /tmp/aaa -type f ! -name "passwd"|xargs rm  除了passwd其他都删除
seq    打印数字序列echo {1..}
man    查看命令及配置文件等帮助
touch    创建文件或者修改文件时间戳
pwd    显示当前的路径
tree   -L显示层数  -d列目录 查看目录结构
tail -f /var/log/maillog  查看实时文件变化
more 查看文件但是不能向上回滚
less  查看文件可以向上回滚
useradd   添加用户 –e 用户终止时间 –c 注释 –d指定家目录 –s指定sh
useradd xiao && echo 123456 | passwd --stdin xiao   快速添加用户和密码
usermod 修改用户信息
userdel  删除用户
groupadd 添加组 –g
passwd  --stdin  修改用户密码,如果不指定用户,则修改当前用户密码,普通用户只能改自己的密码
chage    命令是用来修改帐号和密码的有效期限。
whoami   查看当前命令行终端用户
w   查看是哪个用户登录且使用情况
su   切换用户角色 注意要带上 -
sudo  让普通用户可以拥有指定用户root的权限的命令
yum    包管理工具  解决rpm包的依赖
yum info xx 查看软件详细信息
yum list all xx 查看软件安装版本   
rpm  -ivh 软件安装命令   rpm -ivh 包名.rpm
rpm -ql xx 查看软件安装文件路劲
chkconfig   查看设置开机自启动软件的命令 -add/ --list
netstat 查看网络状态-lntup 或-an
[--tcp |t] [--udp|-u] [--listening|-l ][--all|-a] [--numeric|-n] [--program|-p]
lsof  -i :port 查看端口 ,list open files
uname -a -r -m 查看系统版本,内核版本
getconf LONG_BIT  查看系统位数
halt 关机(init 0)
reboot重启(init 6)
tar  gzip打包组合zcvf,解包组合zxvf
       bzip打包组合jcvf,解包组合jxvf
       z(gzip),c(create),v(verbose),file,x(extract),j(bzip)
       --exclude –X(--exclude-from),-C指定目录解压,-p保持属性
tar zcvf 筐 苹果
tar zcvf aaa1.tar.gz  --exclude=aaa/time.sh ./aaa   排除打包
tar tf aaa3.tar.gz    查看包里的内容
tar zcvfX aaa3.tar.gz test.txt ./aaa  排除内容打包
 
tar xf aaa1.tar.gz   解包
tar xf aaa1.tar.gz -C /tmp/  解包指定目录
  
cut  按列切割 –d 指定分隔符,-f数字选列,-c按字符
cut -c 1-4 取字符
 
wc   -l 统计行号   cat –n file|tail -1
echo –n 不换行输出
sh -x file 查看脚本运行过程
sh -n file 检查脚本语法
dd命令创建虚拟镜像文件
# 从/dev/zero设备创建一个容量为 256M 的空文件virtual.img:
$ dd if=/dev/zero of=virtual.img bs=1M count=256
$ du -h virtual.img
dd if=/dev/cdrom of=/root/centos6.9.iso   克隆系统
echo -e 处理特殊字符
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
tac 反转内容输出
date  :显示时间
stat  文件详细属性
useradd 添加用户 –g –u –c –s  -d –G –M –D
userdel 删除用户  -r
usermod 修改用户
groupadd 添加用户
groupdel  删除组
passwd  修改密码   --stdin
chage    修改密码过期属性  -l  -E
su       切换用户角色   -   -c
visudo   编辑sudo配置文件
id       查看用户身份
w   who  lastlog  whoami  finger
chmod  目录授权     -R 目录及子目录  
chown  修改目录所属主
chattr +i(-i) 文件名     锁定文件(取消锁定)不可删除与清空
chattr +a(-a) 文件名   添加内容(只可添加内容)
使用lsattr  文件名   查看文件的特殊权限
root用户默认创建的目录权限是755,文件权限是644
普通用户默认创建的目录权限是775,文件权限是664
umask   禁止权限
umount  卸载命令  -lf强制卸载
dd  convert and copy a file (dd if=/dev/sda of=mbr.bin bs=512 count=1)
mkfs  格式化命令  -t  文件系统类型mkfs.ext3
df  -h 查看磁盘挂载信息
du –sh 查看文件及目录总大小    du -sh * 查看每个目录的大小
time  计算一个任务执行时间
uniq  去重  -c 计数
sort 排序(ascll) -r 逆序  -n 按数值 -u 除去重复项 -t 指定字段分隔符 -k 指定排序字段
sort -t':' -k 3 -n /etc/passwd
date  -s  修改时间
chgrp   改变用户组  -R 递归
fgrep -r "hello world" ./* 查询当前目标下,包含hello world的文件
磁盘分区:
fdisk 磁盘分区的命令  -l 查看列表  小于2T的分区工具
parted GUN磁盘分区工具,适合大于2T的分区工具
mount 挂载的命令 –t  文件系统类型 –o挂载的选项 –a
umount 卸载的命令 –lf强制卸载
mkfs 格式化命令  -t 文件系统类型mkfs.ext3
lsof –i:端口号   查看端口号对应的协议
netstat  -lntup   查看协议对应的端口号
ethtool -i 网卡名  查看网卡名
env  显示所有的环境变量
export 显示当前环境变量
locale 显示系统编码 
tee 记录消息 (覆盖) -a (追加)
at  定时任务   at -f test1.sh 00:28
atq  显示定时任务
atrm  56 删除定时任务
test -f file && echo true || echo false    测试文件是否存在  -z  字符串的长度为0  [ -f file  ]
[ -z ] 长度为0
[ -n ]长度不为0
rename    批量修改扩展名
local tmp 局部变量定义
stat:文件/文件系统的详细信息显示
file :查看文件类型
tr 用来标准输入中替换或者删除操作进行字符转换。 echo ABcd|tr "[A-Z]" "[a-z]"
export HISTTIMEFORMAT='%F %T'   history显示时间
sar 获取系统的CPU、运行队列、磁盘IO、分页(交换区)、内存、CPU中断、网络等性能数据
top 显示系统中各个进程的资源占用状况
htop   高级top yum install -y htop
iostat 对系统的磁盘IO操作进行监视。显示磁盘读写操作的统计信息
free 监控linux内存使用的指令 -m 兆为单位  -g G为单位
当观察到free栏已为0的时候,表示内存基本被吃完了,那就释放内存吧。
dmidecode -t 1 查看设备信息
dmidecode -s system-serial-number 查看序列号
 
释放内存:
sync
echo 3 > /proc/sys/vm/drop_caches
uptime 统计系统当前的运行状况
rename "jpg" "txt" *.jpg    把jpg改为txt
shuf  -n3     随机取3行
mail -s "`date +%F-%T`$CHARS" 490004487@qq.com </tmp/messages.txt 发送邮件
nc -v -z -w2 192.168.0.3 1-100  扫描0.3 1-100的tcp端口
nc -nvv 192.168.0.1 80 //扫描 80端口  指定端口
nmap -sP 192.168.160.0/24|grep Nmap|awk '{print $NF}' 查看网段主机
dstat 多类型资源统计工具
-c: 显示cpu相关信息
-C #,#,...,total
-d: 显示disk相关信息
-D total,sda,sdb,...
-g:显示page相关统计数据
-m: 显示memory相关统计数据
-n: 显示network相关统计数据
-p: 显示process相关统计数据
-r: 显示io请求相关的统计数据
-s: 显示swapped相关的统计数据
--top-cpu:显示最占用CPU的进程
--top-io: 显示最占用io的进程
--top-mem: 显示最占用内存的进程
--top-latency: 显示延迟最大的进程
- -raw:显示裸套接字
- -ipc:进程间通信信息
实例1:显示cpu、进程、内存、io线程以及swap等相关信息
dstat -c -d -g -m -n -p -r -s
实例2:显示系统中cpu和io线程以及内存使用的情况
dstat --top-cpu --top-io --top-mem
实例3:显示tcp、udp协议和raw和socket套接字以及进程间通信的信息
dstat --tcp --udp --raw --socket --ipc
 
 
PS1='\[\e[32;1m\][\u@\h \W]\$ \[\e[0m\]'  改变提示符颜色文件路径:/etc/bashrc
显示路径则把W改成w:
 
kill -9 PID 强制杀进程
kill  PID   杀进程
pkill  进程名    杀进程
vi/vim 记事本编译器 
显示行号:set nu 删除当前行dd(n行 dd),拷贝当前行yy粘贴p切换到尾部G到文件头部gg退出保存:wq强制退出不保存:q!行首数字0行尾shift+a返回u向下搜索/字符向上搜索?字符删除全部dG
 
定位行号:vim +行号 test.sh
[root@localhost ~]# date +%F\ %T
2013-04-14 03:03:39
  
 mysql自动补全:
在mysql下执行:rehash;
 
小结:
sed   擅长打印行
awk   擅长打印列
修改主机名的步骤:
1)hostname jianlai
2)vi /etc/syscofnig/network
3)  vi /etc/hosts
修改网卡:编辑配置文件,然后/etc/init.d/network restart   重启网卡
ifup eth0     启动网卡
ifdown  eth0  关闭网卡
ifconfig eth0:X 10.0.0.23/24 up 配置别名ip
ifoconfig  eth0:X down  停掉
ip addr add 192.168.160.138/24 dev eth0  添加临时ip
iwconfig 查看无线网卡
配置默认网关:
route add default gw 10.0.2.3    添加默认网关
route del default gw 10.0.2.3     删除默认网关
如果你添加/修改默认网关时遇到这个问题。
原因:你要添加的网关不在你主机所在的网段。
解决方法:
比如你要添加的网关是10.57.50.1
sudo route add 10.57.50.1/32 dev eth0
然后再
sudo route add default gw 10.57.50.1
 显示系统路由
ip route show
设置系统默认路由
ip route add default via 192.168.1.1
删除路由
ip route delete 192.168.1.0/24 dev eth0
 
DNS域名解析:
nslookup
dig
host
 
url下载:
wget
curl
 
网络检查:
Ping
 
路由追踪:
traceroute
 
端口扫描:
nmap
nc
telnet    可能防火墙
 
抓包工具:
tcpdump
tcpdump -i eth0
tcpdump -i p2p1 dst port 53 -c 1000 -w asd.pcap
tcpdump -i p2p1 dst port 53 -vv -nn
 
linux系统运行级别:
0 关机模式
1 单用户模式
2 无NFS的多用户模式
3 文本模式
4 无用
5 图形化
6 重启
  
elinks 实现一个纯文本界面的浏览器 yum install -y elinks
 
符号:
: 多个命令的分隔符
/  根或者路径的分隔符
>  标准输出重定向(数据流朝着箭头的方向流动),覆盖原来的文件
>> 追加重定向
<   标准输入重定向   指定 输入内容  后跟文件名
<<   输入重定向 
..  上一级目录
~  用户的家目录
`` 等于$()
| 管道  通过管道把前一个命令的输出交给后一个命令继续处理
{  }  大括号配合echo打印序列echo{}
.  当前目录 (隐藏文件的标识)
正则表达式:
^  意思是什么开头  例如^aaa  就是以aaa开头
[^aaa] 不是aaa的内容
$  意思是以什么结尾 例如aaa$  就是以aaa结尾
^$  一起就是空行
\   让一个字符脱掉马甲,还原本来意义  ls -Fl |sed -n '/\/$/p'
grep -Ev "^#|^$" /etc/sysconfig/sshd
egrep -v "^#|^$" /etc/sysconfig/sshd
.   代表且只能代表任意一个字符
*   例0* 重复0个或多个前面的一个字符
.*    匹配所有字符。^.* 以任意多个字符开头
[ ]   字符集合的多个字符
[^word]  非     不包含word
~ 匹配
!~ 不匹配
a\{n,m\} 重复n到m次,前一个重复的字符
a\{,m\} 重复至多m次,前一个重复的字符
\{n,\}   重复至少n次
\{n\}    重复n次
卸载yum安装的软件  yum remove
文件修改显示时间:
[root@localhost aaa]# ls -l --time-style=long-iso
total 4
-rw-r--r--. 2 root root  0 2017-02-13 06:25 aaafile
取ip地址:
ifconfig eth0|grep " inet add"|cut -d":" -f2|cut -d " " -f1
ifconfig eth0|grep " inet add"|awk -F":" '{print $2}'|awk -F " " '{print $1}'
ifconfig eth0|awk -F "[:B]" 'NR==2{print $2}'
ifconfig eth0|sed -n '/inet addr/p'|sed 's#.*addr:##g'|sed  's#  Bc.*$##g'
ifconfig eth0|sed -n 's#^.*addr:\(.*\)  Bca.*$#\1#gp'
取得字符长度:
${#word} 
wc -L
expr length
awk
取数组中元素:${arr[@]}
判断是否为数字:
if [[ `expr match "$1" "[0-9][0-9]*$"` == 0 ]]
判断文件扩展名:
if expr "$1" : ".*\.pub" &>/dev/null
将目录权限转换为数字:stat -c %a /etiantian
磁盘分区;
parted的交互模式:
#  parted  /dev/sdb
GNU  Parted  1.8.1
Using  /dev/sdb
Welcome  to  GNU  Parted!  Type  ‘help’  to  view  a  list  of  commands.
(parted) mklabel gpt
将MBR磁盘格式化为GPT
(parted) mkpart primary 0 100
划分一个起始位置为0大小为100M的主分区
(parted) mkpart primary 100 200
划分一个起始位置为100M大小为100M的主分区
(parted)  mkpart  primary  0  -1
划分所有空间到一个分区
(parted)  print
打印当前分区
(parted)  quit
可能还会用到的一些命令
(parted) mklable msdos
如果要反过来.将GPT磁盘转化为MBR磁盘
 
在这样分完分区后,还要使用mkfs.ext3来进行格式化
#partprobe
#mkfs.ext3 -F /dev/sdb1
 
由于fdisk是不支持GPT磁盘,所以使用fdisk -l来查看磁盘刚才的分区是没有用的.
命令行的模式:
将硬盘转化为GPT磁盘后,执行下列命令
parted /dev/sdx mkpart primary 0 100 ##划分一个起始位置为0大小为100M的主分区
sed:
sed '2,5d'  将第 2~5 行删除
sed '2d'  只要删除第 2 行
sed '3,$d'  要删除第 3 到最后一行
sed '2a drink tea' 在第二行后(亦即是加在第三行)加上『drink tea?』字
sed '2i drink tea' 在第二行前
sed -n '5,7p' 第 5-7 行
sed -n '/root/p'  使用-n的时候将只打印包含模板的行。
sed  '/root/d'   删除/etc/passwd所有包含root的行,其他行输出
sed 's/要被取代的字串/新的字串/g'
sed -i 's/\.$/\!/g' regular_express.txt  利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成!
sed -i 's/\(.\)\{6\}$//'  domain.txt   去掉每行后的6个字符
sed 's/.\{6\}//' file    去掉每行的前6个字符
grep:
grep -v root /etc/passwd   将/etc/passwd,将没有出现 root 的行取出
grep -n '^[a-z]' regular_express.txt 开头是小写字节
grep -n '^the' regular_express.txt   让 the 只在行首列出
grep -n '^[^a-zA-Z]' regular_express.txt 不想要开头是英文字母
awk:
awk  -F ':'  '{print $1"\t"$7}'  账户和账户对应的shell,而账户与
awk 'NR==3'  读取第三行
awk '{print $NF}' 最后一列
shell之间以tab键分割
awk '{print length($0)}'   取字符串长度
diff + sort 快速比较文件差异
diff <(sort file1) <(sort file2)
vimdiff file1 file2  比较
 
1、在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行
root@Ubuntu$ ./tcpserv01 &
2、如果程序正在前台运行,可以使用 Ctrl+z 选项把程序暂停,然后用 bg %[number] 命令把这个程序放到后台运行
cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ ./tcpserv01
^Z
[1]+  Stopped                 ./tcpserv01
cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ bg %1
[1]+ ./tcpserv01 &
cat@Ubuntu:~/unp/unpv13e/tcpcliserv$
3、对于所有运行的程序,我们可以用jobs –l 指令查看
cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ jobs -l
[1]+  4524 Running                 ./tcpserv01 &
4、也可以用 fg %[number] 指令把一个程序掉到前台运行
cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ fg %1
./tcpserv01
5、也可以直接终止后台运行的程序,使用 kill 命令
cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ kill %1
yum安装错误
rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了
yum常用命令
  ● 1.列出所有可更新的软件清单命令:yum check-update
  ● 2.更新所有软件命令:yum update
  ● 3.仅安装指定的软件命令:yum install <package_name>
  ● 4.仅更新指定的软件命令:yum update <package_name>
  ● 5.列出所有可安裝的软件清单命令:yum list
  ● 6.删除软件包命令:yum remove <package_name>
  ● 7.查找软件包 命令:yum search <keyword>
  ● 8.清除缓存命令:
      ○ yum clean packages: 清除缓存目录下的软件包
      ○ yum clean headers: 清除缓存目录下的 headers
      ○ yum clean oldheaders: 清除缓存目录下旧的 headers
      ○ yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
Linux 定时任务
实现linux定时任务有:cron、anacron、at等,这里主要介绍cron服务。
名词解释:
   cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表。
软件包安装:
要使用cron服务,先要安装vixie-cron软件包和crontabs软件包,两个软件包作用如下:
 
vixie-cron软件包是cron的主程序。
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
查看是否安装了cron软件包: rpm -qa|grep vixie-cron
查看是否安装了crontabs软件包:rpm -qa|grep crontabs
如果没有安装,则执行如下命令安装软件包(软件包必须存在)
rpm -ivh vixie-cron-4.1-54.FC5*
rpm -ivh crontabs*
如果本地没有安装包,在能够连网的情况下可以在线安装
yum install vixie-cron
yum install crontabs
查看crond服务是否运行:
pgrep crond
/sbin/service crond status
ps -elf|grep crond|grep -v "grep"
crond服务操作命令:
/sbin/service crond start //启动服务 
/sbin/service crond stop //关闭服务 
/sbin/service crond restart //重启服务 
/sbin/service crond reload //重新载入配置
/var/log/cron   日志文件路径
 
ipmi重启服务器
ipmitool -I lanplus -H 192.168.0.218 -U root -P dnion power off
ipmitool -I lanplus -H 192.168.0.218 -U root -P dnion power status
ipmitool -I lanplus -H 192.168.0.218 -U root -P dnion power on
ipmitool -I lanplus -H 192.168.0.218 -U root -P CacheApp power reset
ipmitool -I open sensor list
 
ssh设置
更改默认的SSH端口,先打开sshd_config文件
vim /etc/ssh/sshd_config
找到下面这行:
#Port 22
去掉#号设置端口号保存
service sshd restart
 
centos每天自动备份mysql数据库
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='********'
需要备份的数据库,多个数据库用空格分开
dbname='xiaohuai xiaohuai2'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/home/mysqlbak'
#数据备份路径
datapath='/home/mysqlbak'
#日志记录头部
echo ‘"备份时间为${backtime},备份数据库表 ${dbname} 开始" >> ${logpath}/log.log
#正式备份数据库
for table in $dbname; do
source=`mysqldump -u ${dbuser} -p${dbpasswd} ${table}> ${logpath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#为节约硬盘空间,将数据库压缩
tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null
#删除原始文件,只留压缩后文件
rm -f ${datapath}/${backtime}.sql
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.tar.bz2" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
 
echo "数据库表 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
#备份失败则进行以下操作
echo "数据库表 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log
fi
done
如果这个sh文件是在win下编辑的,需要用Uedit转换为unix格式,否则sh会执行不成功,如图
 
另外,一定要记得给这个sh文件执行权限
1chmod +x /home/sh/mysqlbak.sh
定时执行脚本:
方式:
1、
执行 crontab -e
输入以下内容:
______________________________________________________________________________
00 00 * * * /bin/bash yourpath/mysqlbak.sh
2、
打开自动执行文件
vi /etc/crontab
在etc中加入如下内容,让其自动执行任务。
00 00 * * * root /mysqlbak.sh
以上两个 00 00 *** 为每天的凌晨自动执行脚本
分 时 日 月 周 命令
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
另外,测试的时候可以直接进入sh目录下执行
# sh sh ./mysqlbak.sh
等执行完了看看
#日志备份路径
logpath='/home/mysqlbak'
这个目录下有没有备份文件,如果有,则表示sh执行成功,没有错误。
 
Linux下模拟多线程的并发并发shell脚本
     分享一个在Linux下模拟多线程的并发脚本,使用这个脚本可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常多,在管理大批服务器时非常的实用。
     以下脚本功能是通过scp(也可选rsync)向上千台服务器传更新包,脚本运行后同时在后台有50个scp进程向服务器传包。
#!/bin/bash
ip=`cat iplist.txt|grep -v "#"|awk '{print $1}'`   #过滤服务器IP
dir='/usr/local/src'  #目标路径
 
thead_num=50 #自定义并发数,根据自身服务器性能或应用调整大小,开始千万别定义太大,避免管理机宕机
tmp_fifo_file="/tmp/$$.fifo"  #以进程ID号命名管道文件
mkfifo $tmp_fifo_file   #创建临时管道文件
exec 4<>$tmp_fifo_file  #以读写方式打开tmp_fifo_file管道文件,文件描述符为4,也可以取3-9任意描述符
rm -f $tmp_fifo_file    #删除临时管道文件,也可不删除
 
服务器压力测试:
ApacheBench用法详解:在Linux系统,一般安装好Apache后可以直接执行;
# ab  -n  1000 -c 100 http://10.1.1.128/test.php
//n后面的代表总共发出1000个请求;-c后面的100表示采用100个并发(模拟100个人同时访问),后面的网址表示测试的目标URL。
 
paste file1 file2 合并两个文件或两栏的内容
paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分
sort file1 file2 排序两个文件的内容
sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
sort file1 file2 | uniq -u 删除交集,留下其他的行
sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)
comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容
comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分
 
字符设置和文件格式转换
dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX
unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS
recode ..HTML < page.txt > page.html 将一个文本文件转换成html
recode -l | more 显示所有允许的转换格式
 
文件系统分析
badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块
fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性
fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性
e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性
e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性
fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性
fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性
fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性
dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性
 
初始化一个文件系统
mkfs /dev/hda1 在hda1分区创建一个文件系统
mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统
mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统
mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统
fdformat -n /dev/fd0 格式化一个软盘
mkswap /dev/hda3 创建一个swap文件系统
mke2fs -t ext3 /dev/sda5 #把分区格式为ext3格式的
mke2fs -t ext3 -b 2048 /dev/sda5 # 把分区的块改成2048字节,一般用于系统中小文件很多的情况
mke2fs -t ext3 -m 3 /dev/sda5 #把分区预留的空间改为所占总空间的3%,默认为5%,因为当某个分区足够大的时候,可以减少空间
mke2fs -t ext3 -L DATE /dev/sda5 #把分区的卷标设置为DATE
 
SWAP文件系统
mkswap /dev/hda3 创建一个swap文件系统
swapon /dev/hda3 启用一个新的swap文件系统
swapon /dev/hda2 /dev/hdb3 启用两个swap分区
 
备份
dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份
dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份
restore -if /tmp/home0.bak 还原一个交互式备份
rsync -rogpav --delete /home /tmp 同步两边的目录
rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync
rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录
rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作
dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件
tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录
tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作
dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容
 
光盘
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容
mkisofs /dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件
dd if=/dev/cdrom of=/root/cd.iso
mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件
mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件
cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件
gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件
mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件
cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中
cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中(参数-3)
cdrecord --scanbus 扫描总线以识别scsi通道
dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD