linux学习基础进阶

Linux学习

linux进程

进程概念
从用户角度:进程就是一个正在运行中的程序。
操作系统角度:操作系统运行一个程序,需要描述这个程序的运行过程,这个描述通过一个结构体task_struct{}来描述,统称为PCB,因此对操作系统来说进程就是PCB(process control block)程序控制块
进程的描述信息有:标识符PID,进程状态,优先级,程序计数器,上下文数据,内存指针,IO状态信息,记账信息。都需要操作系统进行调度。

显示系统执行的进程

显示系统执行的进程:
ps -a # 显示当前终端所有进程信息
ps -u # 以用户的格式显示进程信息
ps -x # 显示后台进程运行的参数

ps -aux 获得的进程信息
指令说明

指令含义
System V展示风格
USER用户名称
PID进程号
%CPUCPU占用率
%MEM物理内存占用百分比
VSZ占用虚拟内存大小
RSS占用物理内存大小
TT终端名称,缩写
STAT进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STARTED进程的启动时间
TIME进程使用CPU的时间
COMMAND启动进程所用的指令和参数,如果太长会被截断显示

显示当前的进程

以全格式显示当前的进程:
ps -ef # 以全格式显示当前的进程
ps -e # 显示当前进程
ps -f # 全格式

ps -ef 显示当前进程
指令说明

指令含义
UID用户id
PID进程id
PPID父进程id
CCPU用于计算执行优先级的银子。数值越大表明进程是CPU密集型运算,执行的优先级会降低
STIME系统启动的时间
TTY完整的终端名称
TIME进程使用CPU的时间
CMD启动进程所用的指令和参数

终止进程

以全格式显示当前的进程:
kill [选项] 进程号 # 通过进程号来杀死进程
killall 进程名称 # 通过进程名称来杀死进程,支持通配符
kill/killall -9 # 强制立刻杀死进程

进程树

以树状格式显示进程信息:
pstree [选项] # 以树状格式显示进程信息,若命令找不到则使用yum install psmisc下载
pstree -p # 显示进程号
pstree -u # 显示用户名

服务管理

服务本质就是进程,但是运行在后台,通常都会监听某个端口,等待其他程序的请求,比如(mysqld,sshd等),因此我们又称为守护进程。

service管理指令

在centos7以后很多服务都不再支持service,而是systemctl
service指令管理的服务在/etc/init.d查看

service 服务名 [选项] # 选项包括start启动、stop停止、restart重启、status状态

服务的运行级别

linux的服务有7种运行级别

// 运行级别
0:关机
1:单用户 [找回丢失密码]
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
// 常用运行级别是3和5,也可以指定默认的运行级别,后面演示
init 级别 // 切换级别命令
systemctl get-default //获取当前级别
systemctl set-default //设置默认级别

服务管理(chkconfig)

通过chkconfig命令可以给服务的各个运行级别下设置自启动/关闭
在centos7以后很多服务都不再支持chkconfig,而是systemctl
chkconfig指令管理的服务在/etc/init.d查看

chkconfig --list | grep [选项] // 查看服务
chkconfig 服务名 --list // 查看服务
chkconfig --level 运行级别 服务名 on/off // 设置服务在该级别下是否自启

使用chkconfig指令设置服务后需要使用reboot重启机器才能生效

服务管理(systemctl)

systemctl指令管理的服务在/user/lib/systemd/system查看

// 基本语法
systemctl [选项] 服务名 // 设置服务信息,start、stop、status、restart,临时生效
// systemctl设置服务的自启动状态
systemctl list-unit-file [|grep 服务名] // 查看服务开机启动状态,grep过滤查看
systemctl enable 服务名 // 设置服务开机启动
systemctl disable 服务名 // 关闭服务开机启动
systemctl is-enabled 服务名 // 查询某个服务是否自启动

服务管理端口操作(firewall)

打开或关闭指定端口

netstat -anp | more // 查看端口信息
// firewall 指令
firewall-cmd --permanent --add-port=端口/协议 // 打开端口
firewall-cmd --permanent --remove-port=端口/协议 // 关闭端口
firewall-cmd --reload // 重新载入,才能生效
firewall-cmd --query-port=端口/协议 // 查看端口是否打开

动态监控系统

top指令和ps指令十分相像,它们都用来显示正在执行的进程,不同之处在于top在执行一段时间可以更新正在执行的进程。
基本语法:

top [选项]

选项说明

选项含义
-d 秒数指定top指令,每隔几秒更新,默认3秒
-i使top不显示任何闲置或僵死进程
-p通过指定监控进程id来监控某个进程状态

交互操作说明:
在使用top指令查看进程以后可以使用交互指令操作

选项含义
P以cpu使用率排序。默认是此排序
M以内存占用率排序
N以PID排序
u 用户1监控用户1的进程
k终止进程
q退出top

查看网络情况

基本语法

netstat [选项]

选项说明

选项含义
-an按一定的顺序排列输出
-p显示哪一个进程在调用

软件包管理

rpm

RPM是Red-Hat Package Manager(红帽软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

// 基本语法
rpm -qa // 查询安装的所有的rpm软件包,可以使用more分页和grep过滤查看
rpm -q 软件包名 // 查询软件包是否安装
rpm -qi 软件包名 // 查询软件包信息
rpm -ql 软件包名 // 查询软件包中的文件
rpm -qf 文件全路径名 // 查询文件所属的软件包

rpm -e 软件包名 // 卸载软件包
rpm -e --nodeps 软件包名 // 强制卸载软件包

rpm -ivh 软件包全路径名称 // 安装rmp包
// 其中i=install 安装,v=verbose 提示,h=hash 进度条

yum

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

// 基本语法
yum list | grep 软件名 // 在yum服务器查询是否有需要的安装的软件
yum install 软件名 // 安装指定的软件

shell编程

Linux世界中最为流行的shell脚本语言之一,就是bash。而我认为(这是我自己的看法)原因在于,默认情况下bash shell可以让用户便捷地通过历史命令(先前执行过的)导航,与之相反的是,ksh则要求对.profile进行一些调整,或者记住一些“魔术”组合键来查阅历史并修正命令。
shell脚本也像解释器一样,但它通常用于调用外部已编译的程序。然后,它会捕获输出结果、退出代码并根据情况进行处理。

shell脚本的执行方式

脚本格式要求
脚本要以 #!/bin/bash开头
脚本需要有可执行的权限

示例

#!/bin/bash
ehco "hello"
ehco 'hello'
ehco hello

执行方式:

在脚本目录下直接./文件名称即可执行,但需要有执行权限
sh 文件全路径也可以执行

shell变量

shell变量介绍:
1.linux变了分为系统变量和用户自定义变量
2.系统变量:$HOME,$PWD,$USER,$SHELL等等
3.显示当前系统所有的变量:set
shell变量的定义:
定义变量:变量名=值
撤销变量:unset 变量名
声明静态变量:readonly变量,静态变量不能撤销
变量的定义规则:
变量可以由数字、字母和下划线组成,但不能以数字开头。
等号两侧不能有空格
变量名称一般为大写
将命令的返回值赋值给变量:
A=`date` // 反引号,运行里面的命令,并将返回值赋值给A
A=$(date) // 运行里面的命令,并将返回值赋值给A

环境变量

// 基本语法
export 变量名=变量值 // 输出为环境变量
source 配置文件 // 让修改后的配置信息立即生效
echo $变量名 // 输出变量

// shell脚本的多行注释
<< ! // 注释开头必须另起一行
注释内容
! // 结尾也另起一行

位置参数变量
当我们执行一个shell脚本时,需要获得命令行的参数信息,就可以使用位置参数变量。
比如:./shell-test.sh 1 2,这就是一个执行shell脚本的命令行,可以在脚本里使用位置参数变量获得参数信息

// 基本语法
$n // n为数字,$0代表命令本身,$1~$9依次代表后面9个参数,第10个以上的参数需要用大括号包含,比如${10}
$* // 代表命令行中所有的参数,把所有的参数看做一个整体
$@ // 代表命令行中所有的参数,把每个参数区别对待
$# // 这个命令代表命令行中所有参数的个数

预定义变量
已经设计好的变量,直接在shell脚本中就可以使用

// 基本语法
$$ // 获取当前进程的id
$! // 获取后台最后一个进程的id
$? // 获取最后一个命令的返回状态,若值为0则正确运行,不为0则运行失败
命令 & // 在脚本使用&符号表示该条命令在后台运行

运算符
shell中的运算操作

// 基本语法
1.$((表达式))或者$[表达式]或者expr 表达式 // expression
2.注意expr运算符之间要有空格,可以使用``将返回值赋值给变量
3.expr的表达式中,运算符\*,/,%表示乘除取余

流程判断

// 基本语法
// 第一种:
if [ 条件判断式 ];then
程序
fi
// 第二种:
if [ 条件判断式 ]
then 
	程序
elif [ 条件判断式 ]
then 
	程序
fi
// 注意事项:(1)中括号和条件判断式之间必须有空格 (2)条件判断式里非空返回true
// 分支条件判断
// 且
// 方式一
if [ c1 -a c2 ]; then
…
fi
// 方式一
if [ c1 ] && [ c2 ]; then
…
fi
// 或
// 方式一
if [ c1 -o c2 ]; then
…
fi
// 方式二
if [ c1 ] || [  c2 ]; then
…
fi

常用条件判断

选项含义
=判断字符串是否一样
-lt小于
-le小于或者等于
-eq等于
-gt大于
-ge大于或者等于
-ne不等于
-le小于或者等于
-eq等于
-gt大于
-ge大于或者等于
-r对文件是否有读的习惯
-x对文件是否有执行的习惯
-w对文件是否有写的习惯
-f文件是否存在且是一个正规的文件
-e文件是否存在
-d文件是否存在且是一个目录

case in流程控制

#! /bin/bash
case $1 in
[a-z] | [A-Z])
echo "英文字符"
;;
[0-9])
echo "数字"
;;
[,.!?])
echo "符号"
;;
*)
echo "不知道"
esac

for流程控制

for((i=0;i<=10;i++))
do
	S=$(($S+i))
done
echo $S

while流程控制

for((i=0;i<=10;i++))
do
	S=$(($S+i))
done
echo $S

shell函数

read读取控制台输入

//基本语法
read (选项)(参数)
//示例
#!/bin/bash
read -t 5 -p "请输入第一个数:" NUM1
read -t 5 -p "请输入第二个数:" NUM2
SUM=$(($NUM1+$NUM2)) // 将两数之和赋给SUM
echo "两数之和是:$SUM"
选项含义
-p指定读取时的指示符
-t指定读取等待时间

系统函数

dirname基本语法:
返回绝对路径的文件所在路径,出去文件名
basename的基本语法:
返回绝对路径的文件名,包括拓展名

自定义函数

基本语法
function name() {
函数体
}
name 参数 // 调用函数

// 示例
#!/bin/bash
# 计算两个数的和
function getSum() {
	SUM=$(($1+$2))
	echo "和为:$SUM"
}
getSum $1 $2 // 调用函数

备份数据库

// 备份mysql数据库示例
#备份数据所存放的目录
BACKUP=/data/backup/db/

#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME

#数据库地址,用户名,密码,备份的数据库
HOST=localhost
USER=root
PWD=123456fls
DATABASE=Students

#创建备份文件夹
if [ ! -d ${BACKUP}/${DATETIME} ]
then
        mkdir -p "${BACKUP}/${DATETIME}"
        echo "备份文件创建好了,为:${BACKUP}/${DATETIME}"
else
        echo "备份文件为:${BACKUP}/${DATETIME}"
fi

#备份数据库
mysqldump -u$USER -p$PWD -h${HOST} -q -R -B ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

# 将备份文件夹打包成tar文件
cd ${BACKUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}
# 删除对应目录
rm -rf ${BACKUP}/${DATETIME}
# 删除3分钟前备份的文件,-atime 0表示24小时内访问的文件,-exec表示执行后面的命令,斜杠防止;号转义
find $BACKUP -atime 0 -name "*.tar.gz" -exec rm -rf {} \;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值