常用命令
- top
显示当前系统中耗费资源最多的进程
- ps
显示瞬间的进程状态
-e /-A 显示所有进程,环境变量
-f 全格式
-a 显示所有用户的所有进程(包括其它用户)
-u 按用户名和启动时间的顺序来显示进程
-x 显示无控制终端的进程
[root@master qy114]# ps -aux
[root@master qy114]# ps -ef
- kill
杀死一个进程
kill -9 pid
- ifconfig
网卡网络配置详解
- ping
测试网络的连通性
shell脚本
当命令不在命令行中执行,而是从一个文件中执行时,该文件就是shell脚本。
- Shell是一种解释型编程语言,不需要编译,执行时也是按行执行
- Shell脚本是由解释器解释执行的,常见的解释器有:
bash dash ash ksh sh等
每种Shell解释器对shell的语法解释并不完全相同,但基本相同
1示例
1创建脚本
vim test.sh
#!/bin/sh
echo 'hello world' #注释
2.修改权限
chmod 766 test.sh
3.执行
./test.sh
2.定义变量
shell中没有变量类型,本质上都是字符串
变量大致分为四类
- 本地变量:仅在当前shell中有用,在shell外部或者子shell中都不可用
- 环境变量:当前及子shell有用
- 位置参数变量:脚本的参数或者函数的参数等
- 特殊变量:脚本内置的具有特殊用途的变量
声明变量
a=/root #定义变量a 字符串可以加‘’,也可以不加
c= #声明变量 c
b=$a/qy114 #定义变量b 并引用变量a
ls -la $b #引用变量b
export a #将a 声明为外部变量, 子shell 中可以使用
unset b #将b 变量删除
位置参数变量
$1 表示第1个参数值,……,$9 表示第9个参数值
${10} 表示第10个参数值, ${11} 表示第11个参数值, ……
特殊变量
命令行变量
$* 将所有位置参量看成一个字符串(以空格间隔) 。
@
将
每
个
位
置
参
量
看
成
单
独
的
字
符
串
(
以
空
格
间
隔
)
。
“
@ 将每个位置参量看成单独的字符串(以空格间隔)。 “
@将每个位置参量看成单独的字符串(以空格间隔)。“*” 将所有位置参量看成一个字符串(以
I
F
S
间
隔
)
。
“
IFS间隔)。 “
IFS间隔)。“@” 将每个位置参量看成单独的字符串(以空格间隔) 。
$0 命令行上输入的Shell程序名。
$# 表示命令行上参数的个数。
进程状态相关
$? 表示上一条命令执行后的返回值
$$ 当前进程的进程号
$! 显示运行在后台的最后一个作业的 PID
$_ 在此之前执行的命令或脚本的最后一个参数
示例2
#!/bin/sh
echo 'hello world' #注释
echo "应用名: $0"
echo "参数1: ${1}"
echo "进程id: $$"
echo "上一个命令返回值: $?"
3退出/返回状态
$?:返回上一条语句或脚本执行的状态
- 0:成功
- 1-255:不成功
exit 命令
n 是一个从 0 到 255 的整数
0 表示成功退出,非零表示遇到某种失败
返回值 被保存在状态变量 $? 中
exit n
常见状态码
0 执行正确
1 通用错误
126 命令或脚本没有执行权限
127 命令没找到
4数据流重定向
> 表示 写入; >>表示追加
<表示 读入;<<表示结束读入
echo aaa >aa.text #覆盖写入
echo aaa >> aa.tex #追加写入
一次性追加写入多行
cat >> aa.text <<EOF
dsfsdf
sdfasd
EOF
5.命令的连续执行
使用场景
- 执行备份日志成功后删除日志
- 从服务器下载文件失败后从备份服务器下载
&&
连起来的命令,后面的命令只有在前一命令执行成功后才执行
ls /root/qy114 && echo 'fsdfsd'
||
连起来的命令,后面的命令只有在前一命令执行失败后才执行
ls /root/qy115 || echo 'fsdfsd'
|
命令是同时执行的
ls /root/qy115 || echo 'fsdfsd'
awk
awk是一个非常棒的数据处理程序,它比较倾向于将一行分成多个‘字段’来处理。
数据可以来自标准输入、一个或者多个文件、其他进程的输出
awk从第1行到最后一行逐行扫描,并执行匹配的操作
awk的默认操作是输出匹配行即打印匹配行到标准输出
基本语法
awk 'BEGIN{语句1;语句2;...} END{语句1;语句2;...} 模式1{语句1;语句2;...} 模式2{语句1;语句2;...} 模式n...' [文件名]
begin,end 可以省略
分隔符为 空格 tab
示例
echo '1 2 3 4' |awk 'BEGIN{print "start"} END{print "end"} {print $1}'
输出第几列
echo '1 2 3 4' | awk '{print $1}'
echo '1 2 3 4' | awk '{print $1"A"$2}' #列之间使用A连接
echo '1 2 3 4' | awk '{print $1,"A",$2}' #列之间使用A连接
内置变量
FS | 输入列分隔符,默认是空格或tab |
---|---|
OFS | 输出列分隔符,默认空格 |
NF | 每一行拥有的字段总数 |
NR | 目前awk处理的是第几行数据 |
RS | 输入行分隔符,默认是换行符 |
ORS | 输出行分隔符,默认是换行符 |
自定义分隔符
echo '1;2;3;4' | awk 'BEGIN{FS=";"}{print $1,"A",$2}'
从多上行开始读文件
awk 'NR>1{print $0}' /etc/profile
比较字符转
echo 'A B C D' | awk '$1=="A"{print "yes"}'
差选进程id
ps -e | awk '$4=="sleep"{print $1}'
查询进程叫-bash的进程号
ps -ef | awk 'BEGIN{ print "begin..."} END{print "end..."} $8=="-bash"{print $2}'