Fork me on GitHub

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:共享内存空间

排序:

  1. P:以占据CPU百分比排序
  2. M:以占据内存百分比排序
  3. T:累计占用CPU时间排序

首部信息:

  1. uptime信息:l命令,开启或关闭
  2. tasks及CPU信息:t命令
  3. 内存信息:m命令
  4. 每个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

注意:

  1. 每一行定义一个周期任务;共6个字段;
    1. * * * * *:定义周期性时间分别是分时日月周
    2. command to be executed:任务
  2. 此处的环境变量不同于用户登陆后获得的环境,因此,建议命令使用绝对路径;或者自定义PATH环境变量;
  3. 邮件发送给当前用户;

时间表示法

  1. 特定值;
    1. 给定时间点有效取值范围内的值;
    2. 注意:days of week和day of mounth 一般不同时使用;
  2. *
    给定时间点上有效取值范围内的所有值;表示“每……”
  3. 离散取值:,
    在时间点上使用逗号分隔的多个值;#,#,#
  4. 连续取值:-
    在时间点上使用-连接开头和结束:#-#
  5. 在指定时间点上,定义步长:/
    */##即步长,例如:*/2
    注意:
  6. 指定的时间点不能被步长整除时,其意义将不复存在;
  7. 最小时间单位为“分钟”,想完成“秒”级任务,得需要额外借助于其他机制;定义成每分钟任务;而在利用脚本实现在每分钟之内,循环执行多次;

示例

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分钟执行一次某任务;

虚拟机克隆

虚拟机克隆完成后,修改克隆机的配置

修改硬件信息

  1. vim /etc/udev/rules.d/70-persistent-net.rules
  2. 删除eth0,将eth1修改为eth0

ip地址

  1. vim /etc/sysconfig/network-scripts/ifcfg-eth0
  2. 删除uuid,修改hwaddr,修改ipaddr

修改主机名称

vim /etc/sysconfig/network

主机映射

vim /etc/hosts

最后

保存,重启

ssh免密登陆

什么是ssh

  1. ssh安全外壳协议,主要应用于计算机之间的安全访问;
  2. ssh由客户端和服务端组成,
  3. ssh服务端是一个sshd后台守护进程(22端口),监听客户端的请求以及响应
  4. 客户端程序 :ssh程序,scp远程拷贝,slogin远程登录,sftp远程文件传输

ssh登录验证

  1. 基于口令认证(账户+密码)
  2. 基于密钥安全验证

免密登陆

  1. 生成密钥对

    ssh-keygen
    
  2. 公钥发送授权池中

  3. ~/.ssh/authorized_keys 授权池文件

  4. ssh-copy-id HOSTNAME

  5. 简化版本

    我们将公钥发送授权池时,直接发送到本地;然后将本地~/.ssh/*中的所有文件拷贝到集群中每台服务器上即可;

Shell 编程

什么是shell

  1. Shell 是一个接口(壳),用户通过shell实现对内核调用。
    1. 图形界面shell:kde,gnome
    2. 命令行shell:bash(linux默认的) sh(unix默认的) /command ,cmd.exe
  2. shell是命令语言,也是程序设计语言;(解释型)

shell基本格式

编写shell脚本

#!/bin/bash

#默认的shell解释器;如果执行解释器执行该脚本,则不生效;

echo "aa"

单行注释:#
多行注释: <<! 注释语句!

shell脚本的执行

  1. 指明解释器(查看shell:cat /etc/shells
    1. sh 程序文件
    2. bash 程序文件
  2. 点命令(bash内部命令)
    1. ./source shell脚本
    2. 作用: 使shell读入指定的shell程序文件并以此执行文件中的所有语句
  3. 直接执行脚本文件(文件必须有执行权限)
    1. 相对路径:./a.sh
    2. 绝对路径:/root/a.sh

shell基本语法

变量

内置变量

$变量名($USER,$PWD…$)

常用${变量名}来调用变量;
使用$(命令)或者\命令``来得到命令的执行结果

自定义变量

  1. 变量设置的两次不能有空格
  2. 变量名一般用大写
  3. 变量值是多个单词必须使用引号
  4. 双引号能够直接识别变量,单引号会脱意(当做字符串处理)
  5. 变量取值时可以使用$

高级用法

  1. readonly 变量名= 变量值: 只读变量(不能修改也不能撤销)
  2. unset 变量名:撤销变量

运行命令并赋值

B=date/$(date)

变量的其他用法

  1. ${var:-VALUE}:如果var变量为空,或未设置;那么返回VALUE,否则,则返回var变量值;
  2. ${var:=VALUE}:如果var变量为空,或未设置;那么返回VALUE,并将VALUE赋值给var变量,否则,则返回var变量值;,
  3. ${var:+VALUE}:如果var变量不空,则返回VALUE;
  4. ${var:?ERROR_INFO}:如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值;

特殊变量

$0:脚本文件路径本身;
	#!/bin/bash
	bashname $0
$#:脚本参数的个数;
$*:所有参数
$@:所有参数
$$: 进程编号

$*$@的区别:

  1. $* 和 $@ 都以$1 $2 … $n 的形式组成参数列表
  2. "$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式组成一个整串;
  3. "$@" 会将各个参数分开,以"$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. [ 条件 ] && 表达式1 || 表达式2
  2. [[ 条件 ]]&& 表达式1 || 表达式2

流程控制

if判断

if [ 条件 ];then
	表达式
elif [ 条件 ];then
	表达式
else
	表达式
fi

读取输入

read -p "提示信息" 变量名

case

case $variable in
num1)
	表达式1
	;;
num2)
	表达式2
	;;
*)
	表达式3
esac

注意:如果没有双分号,则会继续匹配第二个分支。双分号可以单独成行,也可以在分支后

case支持global风格的通配符:

  1. *:任意长度的任意字符;
  2. :任意单个字符
  3. []:范围内任意单个字符
  4. 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


posted @ 2018-11-05 18:42  耳_东  阅读(96)  评论(0)    收藏  举报