2、监控工具
netstat
对于UDP服务,查看所有监听的UDP端口的网络情况
netstat -lump
packet receive errors 这一项数值增长了,则表明在丢包
对于TCP
1、良好状态指标
对于TCP而言,不会出现因为缓存不足而存在丢包的事,因为网络等其他原因,导致丢了包,协议层也会通过重传机制来保证丢的包到达对方。
所以,tcp而言更多的专注重传率。
2、监控工具
cat /proc/net/snmp | grep Tcp
内核信息
dmesg
dmesg | grep -n --color=auto 'eth'
第七章 输入输出重定向
cat过滤器
cat
:等待输入
>abc 创建文件,或清空
cat >a.txt
cat <<EEE aaa 输入完才输出
cat > b.txt <<DDD
> 2> &> < << >>
tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' 有趣的密码转换
tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' < /etc/passwd > 1.txt 有趣的密码转换
tr '"a-m""n-z""A-M""N-Z"' '"N-Z""A-M""n-z""a-m"' < /etc/passwd > mail -s "for you" shrek@looking.com 发密邮给shrek
ctrl +D结束
等待输入
ls /etc/ -l | grep '^d' |wc -l统计文件夹的数目
^- 多少个文件
^l 多少个连接
tee Copy standard input to each FILE, and also to standard output
ls /etc/ -l | grep '^d' |tee /dev/ptd/2 |wc -l 输出在屏幕上
tr "a-z""A-Z"转换成大写
tr "a-z""A-Z" < /etc/passwd
find /-name sherk &> /tmp/findfile
第8章LInux系统及进程控制
/proc 内核的小窗户 通过/proc查看内核
hostname 主机名
/etc/hosts
/etc/network
last
内存使用清空free
du -sh /etc
cat /proc/*
mount -t proc none /mnt 只有知道死proc就会自动加载/proc文件
/proc/meminfo 只读
/proc/sys/net/ipv4
/proc/sys/net/ipv4
系统日志
/var/log/*
/var/log/dmesg 核心启动日志
/var/log/message 系统报错日志
/var/log/maillog 邮件系统日志
/var/log/boot.log系统引导过程日志
/var/log/cron 记录守护进程派生子进程
/var/log/syslog记录警告信息
/var/log/wtmp永久记录用户登陆事件
/var/log/xferlog记录FTP会话
/var/log/secure安全信息
ps -ef
ps aux两种一样的
ps auxf 所有进程树(附进程)
kill -9 id
kill -l kill 的功能参数
killall -9 httpd 进程名称
skill -9 wangjianjian 把用户为wangjianjian的所有进程结束 进程用户为wangjianjian或进程名称为wangzjianjian
skill -9 pts/2 结束远程的
pkill -u wangjianjian 精确kill用户名为wangjianjian的
pstree
第九章bash 变量快捷键
ctrl + l 清屏
ctrl + d 完成操作
第10章
set | grep HIS
vim /home/zhangjianlin/.bash_history
.bash_logout shell退出时的初始化
ctrl + r 调用历史 在history 中查询指令
向上向下按钮
!123 使用! 调用指令
!! !!上一条命令
!$ 上一条命令作为参数 $aaa变量值 *任意多个字符
设置变量
set普通变量
env环境变量
export变成环境变量
unset 删掉普通变量
设置命令
alias unalias
bash中的运算符
已经接触过的通配符
* ? {abc} {a,b,c}
!$
echo *输出前部文件名
echo [abc]* 以a或b或c开头的
echo [^abc]* 出了以a或b或c 开头的
rm -rf * 强行删除
touch {a,b,c}-{1,2,3} 随机选择 3×3
#ls #注释
aaa()函数
@linux:~$ aaa()
> {
> echo this is a function test
> ls
> cd /tmp
> touch /tmp/aaaa
> }
touch "a b"
touch a b
无符号 单引号 双引号 反引号
echo which is 原样输出
echo "a b $USER" ""号只屏空格符号
echo 'a b $USER' 屏蔽所有字符
echo `which ls` 反引号 内容预先执行
touch a b touch a\ b 创建两个文件a和b,创建一个文件a b
touch log`date +%m%d` 创建log0709文件
[ -f /etc/passwd ]
echo $? 或[ -f /etc/passwd ] [] 跟[ 两个空格 ] 不同,两个字符是判断,如这里判断文件是否存在。这里死记
@linux:~$ [ -f /etc/passwd ]
@linux:~$ echo $?
0
@linux:~$ [ -f /etc/passwdddd ] && echo ok
@linux:~$ [ -f /etc/passwd ] && echo ok
ok
@linux:~$
@linux:~$ [ -d /proc/bus/usb ] && echo ok
@linux:~$ [ -d /Oracle ] && echo begin the insrall很常用
@linux:~$ [ -d /proc ] && echo begin the insrall
begin the insrall
@linux:~$ vim /etc/rc
-l -b -c -x -r -w
[ $USER = zhangjianlin ] && echo fuck you[ $USER = zhangjianlin ] && echo hello //判断字符是否相等
fuck you[ zhangjianlin = zhangjianlin ]
hello
@linux:~$
man bash 查询上述字符
info 比man更好
$[1+3] $[]算数表达式
定制bash
开机执行的四个脚本
/etc/profile系统全程的初始化文件,为登录的shell所执行(替换shell也算) su - wangjianjian
/etc/bashrc定义系统级的别名和函数,为每个新开的shell所执行 su wangjianjian
~/.bash_profile个人的初始化文件,为登录的shell所执行
~/.bashrc个人的交互式shell的起始文件
~/.bash_logout个人登录shell的清理文件,当登录shell退出时执行
su - wangjianjian 它将依次读取并执行以下文件:/etc/profile,~/.bash_profile,~/.bash_login,(/etc/bashrc 也执行)
su wangjianjian 它将读取并执行/etc/bashrc, ~/.bashrc
login 时4个文件都执行
使用su命令切换用户时,如果带-l 选项就是登录为login shell,执行/etc/profile,否则为非login shell,不执行/etc/profile
/etc/profile会执行/etc/profile.d下的所有文件
./bash_history 命令历史
修改./bashrc export LANG="zh_CN.UTF-8" export LC_ALL="zh_CN.UTF-8"
xstart LC_ALL 桌面中文还是英文
第11
reset 重置bash
可以使用参数来传递内容
$1$2$3
可以使用命令来进行交互
read 读入数据给变量
echo 输出数据
printf输出数据
#!/bin/bash
echo $1 $2 ing ......
read -p "please input you name:" A
printf "$A is fool\n"
grep -A2 -B2 查看上下两行 pstree | grep -A2 B2 pstree
./b bash-bash-pstree 直接执行,新打开一个bash 如bash ./b
. ./b bash-pstree .说明是当前sh
应用 如在b中
export aaa=shrek
如果用第一种不会将aaa设置成环境变量,应为它在子sh中设置不会成效
第12 bash脚本中的流程控制
条件判断控制
[ ] && ||
if then
elif then
case
循环控制
while
utile
for
break
continue
[ abc ] abc ASCII码大于0返回大于0
echo $?
echo [ $USER = "shrekk" ]
[ -x /etc/ ] && echo hello
[ -f /usr/sbi/httpd ] && echo please install httpd with --force option && exit
man bash /-w 查找各文件类型的
调试脚本
bash -v ./b -v 执行可见 显示脚本调试
-v Display readline variable names and values in such a way that they can be re-read.
@linux:~/mytest/linuxtest/linuxshell$ bash -v ./iftest
#!/bin/bash
read -p "input you user:" aaa
input you user:zhangjianlin
if [ $aaa = zhangjianlin ]
then
echo hello zhangjianlin
elif [ $aaa = root ]
then echo hello root!
else echo 'get out here!'
fi
hello zhangjianlin
bash -vx ./iftest 替换调试
@linux:~/mytest/linuxtest/linuxshell$ bash -vx iftest #!/bin/bash
read -p "input you user:" aaa
+ read -p 'input you user:' aaa
input you user:zhangjianlin
if [ $aaa = zhangjianlin ]
then
echo hello zhangjianlin
elif [ $aaa = root ]
then echo hello root!
else echo 'get out here!'
fi
+ '[' zhangjianlin = zhangjianlin ']'
+ echo hello zhangjianlin
hello zhangjianlin
case
@linux:~/mytest/linuxtest/linuxshell$ bash -v casetest
#!/bin/bash
read -p "input you name:" aaa
input you name:zhangjianlin
case $aaa in
zhangjianlin ) #)加上
echo hello zhangjianlin
echo nice to meet you
;; #; 结束
root )
echo hello root
echo i miss you too
;;
*)
echo get out here
;;
esac
hello zhangjianlin
nice to meet you
数值进行比较的运算符
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt
为空 -z
不为空 -n
比如:
比较变量 a 和 b 的值 是否相等就写作:[ $a = $b ]
判断变量a是否为空就写作: [ -z$a ]
判断整数变量a是大于b就写作 [ $a-gt$b ]
#!/bin/bash
bbb="`pgrep ps`" #变量跟-号不要加空格
[ -z "$bbb" ] && echo 'ps is running' && exit #加双引号,使空格无效
for i in $bbb
do kill -9 $i
done
echo ps is kill
seq 1 100 产生100个数 应用,for 中循环100次
for aaa in `seq 1 100`
do
echo $aaa;sleep 1
done
while
while [ iii -lt 100 ]
do
iii=$[$iii+1]
echo -n "$iii"
done
until ![ $iii -lt 100 ] #这里 可以写成$iii -gt 100
do
iii=$[$iii+1]
echo -n "$iii"
done
while true #死循环
do
read AAA
if [ "$AAA" = "ddd"]
then
break;
fi
done
unset AAA
myFunction() #取消变量 unset myFunction iii aaa AAA 避免跟上一次的变量冲突
{
}
第十三 shell 脚本 sed-awk 流编辑器
sed -e 's/root/shark/g' /etc/passwd > /tmp/a 替换 -e excute
sed -n -e '/zhangjianlin/s/bash/nolog/' /etc/passwd
sed -n -e '/zhangjianlin/s/bash/nolog/p' /etc/passwd
sed -n -e '/shrek/p' /etc/passwd #打印
sed -e -e '/bash/d' #删除
cp /tmp/a /etc/passwd
sed -e '/^#/d' /etc/etc/passwd #删除以#��头的行
sed -e '/^#/d' -e '/^$/d' /etc/etc/passwd #删除以#开头的行 ,删除空行
sed -e '/bash/s/root/shrek/g' /etc/passwd 仅仅替换有bash的那一行
使用sed进行替换
set 's/oldvalue/newvalue/'
多次替换
set -e 's/milk/todd/' -e 's/good/better/'
sed '/s/tiger/wolf/;s/before/after/'
cat /etc/passwd | sed'
sed -f commenfile /etc/passwd
另类shell脚本编写
#!/bin/sed -f
s/root/shrek/
s/bash/nologin/
执行./sss /etc/passwd
5. 元字符集^
锚定行的开始 如:/^sed/匹配所有以sed开头的行。
$
锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
.
匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
*
匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]
匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\)
保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&
保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\<
锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\>
锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\}
重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\}
重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。