Linux Day04
Day04
目录
进程管理
进程切换
前台进程:阻塞进程
后台进程;后台运行
快捷键介绍
crtl+c:终止进程(前台)
ctrl+z:挂起进程(进程暂时停止运行;驻留后台;随时恢复运行)
fg命令
将进程切换到前台运行
fg %jobNumber
bg命令
让送往后台的作业在后台继续运行
bg %jobNumber
jobs命令
查看所有任务
top命令
display linux processes
%CPU
us:用户空间占据CPU百分比
sy:内核空间占据CPU百分比
ni:对nice调整占用CPU时间
id:空闲百分比
wa:等待IO完成的所消耗的时间
hi:硬件终端占据的CPU百分比
si:软件终端占据的CPU百分比
st:被虚拟化软件偷走的时间百分比
VIRT:虚拟内存集
RES:常驻内存集
SHR:共享内存空间
排序:
- P:以占据CPU百分比排序
- M:以占据内存百分比排序
- T:累计占用CPU时间排序
首部信息:
- uptime信息:l命令,开启或关闭
- tasks及CPU信息:t命令
- 内存信息:m命令
- 每个cpu的占用百分比:1命令
退出命令:q
修改刷新时间间隔:s
终止指定的进程:k
选项:
-d #:指定刷新时间间隔,默认为3秒
-b:以批次方式显示;
-n #:显示多少批次
pstree命令
查看进程树
pstree
-p 查看pid
jps命令
jvm查看java进程命令
计划任务
at命令
后台服务名称atd,指定时间执行一次
crontab命令
后台服务名称crond,周期执行命令和shell脚本。
分时日月周
使用命令
crontab -u 指定用户(默认当前用户)
-e;编辑用户的cron配置 /var/spool/cron/USERNAME
-l:查看用户cron配置
-r:删除cron配置
-a:用于提示
配置说明
用户cron的配置格式:/var/spool/cron/USERNAME
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
注意:
- 每一行定义一个周期任务;共6个字段;
* * * * *:定义周期性时间分别是分时日月周command to be executed:任务
- 此处的环境变量不同于用户登陆后获得的环境,因此,建议命令使用绝对路径;或者自定义PATH环境变量;
- 邮件发送给当前用户;
时间表示法
- 特定值;
- 给定时间点有效取值范围内的值;
- 注意:days of week和day of mounth 一般不同时使用;
*:
给定时间点上有效取值范围内的所有值;表示“每……”- 离散取值:,
在时间点上使用逗号分隔的多个值;#,#,# - 连续取值:-
在时间点上使用-连接开头和结束:#-# - 在指定时间点上,定义步长:/
*/#:#即步长,例如:*/2
注意: - 指定的时间点不能被步长整除时,其意义将不复存在;
- 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其他机制;定义成每分钟任务;而在利用脚本实现在每分钟之内,循环执行多次;
示例
3 * * * *: 每小时执行一次;每小时的第三分钟;
3 4 * * 5: 每周执行一次,每周五的4点3分;
5 6 7 * *: 每月执行一次,每月7号的6点5分;
7 8 9 10 *: 每年执行一次,每年10月9日的8点7分;
9 8 * * 3,7: 每周执行一次,每周3和周日的8点9分;
0 8,20 * * 3,7: 每周3和周日的8点和20点;
0 9-18 * * 1-5: 工作时间内的每小时;
*/5 * * * *: 每5分钟执行一次某任务;
*/7 * * * *: 每7分钟执行一次某任务;
虚拟机克隆
虚拟机克隆完成后,修改克隆机的配置
修改硬件信息
vim /etc/udev/rules.d/70-persistent-net.rules- 删除eth0,将eth1修改为eth0
ip地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0- 删除uuid,修改hwaddr,修改ipaddr
修改主机名称
vim /etc/sysconfig/network
主机映射
vim /etc/hosts
最后
保存,重启
ssh免密登陆
什么是ssh
- ssh安全外壳协议,主要应用于计算机之间的安全访问;
- ssh由客户端和服务端组成,
- ssh服务端是一个sshd后台守护进程(22端口),监听客户端的请求以及响应
- 客户端程序 :ssh程序,scp远程拷贝,slogin远程登录,sftp远程文件传输
ssh登录验证
- 基于口令认证(账户+密码)
- 基于密钥安全验证
免密登陆
-
生成密钥对
ssh-keygen -
公钥发送授权池中
-
~/.ssh/authorized_keys授权池文件 -
ssh-copy-id HOSTNAME -
简化版本
我们将公钥发送授权池时,直接发送到本地;然后将本地
~/.ssh/*中的所有文件拷贝到集群中每台服务器上即可;
Shell 编程
什么是shell
- Shell 是一个接口(壳),用户通过shell实现对内核调用。
- 图形界面shell:kde,gnome
- 命令行shell:bash(linux默认的) sh(unix默认的) /command ,cmd.exe
- shell是命令语言,也是程序设计语言;(解释型)
shell基本格式
编写shell脚本
#!/bin/bash
#默认的shell解释器;如果执行解释器执行该脚本,则不生效;
echo "aa"
单行注释:#
多行注释: <<! 注释语句!
shell脚本的执行
- 指明解释器(查看shell:
cat /etc/shells)- sh 程序文件
- bash 程序文件
- 点命令(bash内部命令)
./source shell脚本- 作用: 使shell读入指定的shell程序文件并以此执行文件中的所有语句
- 直接执行脚本文件(文件必须有执行权限)
- 相对路径:
./a.sh - 绝对路径:
/root/a.sh
- 相对路径:
shell基本语法
变量
内置变量
$变量名($USER,$PWD…$)
常用${变量名}来调用变量;
使用$(命令)或者\命令``来得到命令的执行结果
自定义变量
- 变量设置的两次不能有空格
- 变量名一般用大写
- 变量值是多个单词必须使用引号
- 双引号能够直接识别变量,单引号会脱意(当做字符串处理)
- 变量取值时可以使用$
高级用法
readonly 变量名= 变量值: 只读变量(不能修改也不能撤销)unset 变量名:撤销变量
运行命令并赋值
B=date/$(date)
变量的其他用法
${var:-VALUE}:如果var变量为空,或未设置;那么返回VALUE,否则,则返回var变量值;${var:=VALUE}:如果var变量为空,或未设置;那么返回VALUE,并将VALUE赋值给var变量,否则,则返回var变量值;,${var:+VALUE}:如果var变量不空,则返回VALUE;${var:?ERROR_INFO}:如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值;
特殊变量
$0:脚本文件路径本身;
#!/bin/bash
bashname $0
$#:脚本参数的个数;
$*:所有参数
$@:所有参数
$$: 进程编号
$*和$@的区别:
- $* 和 $@ 都以$1 $2 … $n 的形式组成参数列表
- "$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串;
- "$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式组成一个参数列表
运算符
算术运算符
expr命令
格式:\expr 2 + 3``
注意:expr运算符号两侧必须有空格,乘法必须转义;除法取整
其他用法:
# 获取长度
expr length
# 查看子字符串的位置
expr index 源字符串 子字符串
# 截取字符串
expr substr 源字符串 index length
$(())
$(((2+3)*4))
$[]
$[(2+3)*4]
let
let A=B-C(符号两侧不能由空格)
取变量的值时可以不用$,$(())、$[]和let命令都是一样的
bc命令
# 执行浮点数运算
# 保留小数位数
echo "scale=2;10/3" | bc
# ibase 输入的进制
echo "ibase=2;11" | bc
# obase 输出的进制
echo "ibase=8;obase=2;11" | bc
# 科学计算
echo "2^10" | bc
# 比较运算,true-> 1
echo "2.2 > 1.2" | bc
比较运算符
| 运算符 | 等同运算符 | 说明 |
|---|---|---|
| -eq | = | 检测两个数是否相等,相等返回true |
| -ne | != | 检测两个数是否相等,不相等返回true |
| -ge | >= | 检测左边的数是否大等于右边的,如果是,则返回true |
| -gt | > | 检测左边的数是否大于右边的,如果是,则返回true |
| -le | <= | 检测左边的数是否小于等于右边的,如果是,则返回true |
| -lt | < | 检测左边的数是否小于右边的,如果是,则返回true |
逻辑运算符
| 运算符 | 等同运算符 | 说明 |
|---|---|---|
| ! | ! | 非运算,表达式为 true 则返回false,否则返回true |
| -a | && | 与运算,两个表达式都为true 才返回true |
| -o | || | 或运算,有一个表达式为true 则返回true |
字符串运算符
| 运算符 | 说明 |
|---|---|
| = | 检测两个字符串是否相等,相等返回true |
| != | 检测两个字符串是否相等,不相等返回true |
| -z | 检测字符串长度是否为0,为0返回true |
| -n | 检测字符串长度是否为0,不为0返回true |
| str | 检测字符串是否为空,不为空返回true |
文件运算符
| 运算符 | 说明 |
|---|---|
| -d | 检测文件是否是目录,如果是,则返回true |
| -f | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true |
| -e | 检测文件(包括目录)是否存在,如果是,则返回true |
| -s | 检测文件是否为空(文件大小是否大于0),不为空返回true |
| -r | 检测文件是否可读,如果是,则返回true |
| -w | 检测文件是否可写,如果是,则返回true |
| -x | 检测文件是否可执行,如果是,则返回true |
| -b | 检测文件是否是块设备文件,如果是,则返回true |
| -c | 检测文件是否是字符设备文件,如果是,则返回true |
三元运算符
[ 条件 ] && 表达式1 || 表达式2[[ 条件 ]]&& 表达式1 || 表达式2
流程控制
if判断
if [ 条件 ];then
表达式
elif [ 条件 ];then
表达式
else
表达式
fi
读取输入
read -p "提示信息" 变量名
case
case $variable in
num1)
表达式1
;;
num2)
表达式2
;;
*)
表达式3
esac
注意:如果没有双分号,则会继续匹配第二个分支。双分号可以单独成行,也可以在分支后
case支持global风格的通配符:
*:任意长度的任意字符;?:任意单个字符[]:范围内任意单个字符a|b:a或b
示例
#!/bin/bash
read -p "请输入成绩:" SCORE
if [ $SCORE -ge 80 ];then
echo A
elif [ $SCORE -ge 60 ];then
echo B
else
echo C
fi
case $SCORE in
100)
echo A
;;
[9,8]?)
echo A
;;
[7,6]?)
echo B
;;
*)
echo C
;;
esac


浙公网安备 33010602011771号