软件安装,进程管理,Shell编程
我们的目标是星辰大海,而非人间烟尘
软件安装
软件包分类⭐️
源码包
内核,C语言,易报错,安装时间长、繁琐
优点:开源,官网可下载二进制包(RPM包、deb包、系统默认包)
经过编译的,不能看到源代码
优点:使用简单,安装快
- 脚本安装包
源码包再开发,不需要手工安装,类似于Windows中的软件,事先写好安装界面和安装程序——install.sh,出现窗口界面,安装位置、功能配置等,安装简单
RPM包管理-rpm命令管理
rpm –ivh 包全名PACKAGE_FILE
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
–nodeps 不检测依赖性
RPM包命名原则
httpd-2.2.15-59.el6.centos.1.i686.rpm
httpd :软件包名
2.2.15 :软件版本
59: 软件发布的次数
el6.centos: 适合的Linux平台 rhel6和Centos
i686 或者 x86_64:适合的硬件平台
noarch:适合任何硬件平台
rpm :rpm包扩展名,扩展名便于管理员理解
包全名与包名
包全名PACKAGE_FILE
:操作的包是没有安装的软件包时, 使用包全名。而且要注意路径
包名PACKAGE_NAME
:操作已经安装的软件包时,使用包名。 是搜索/var/lib/rpm/
中的数据库
RPM包升级
# rpm -Uvh 包全名PACKAGE_FILE
-U(upgrade) 升级
卸载
rpm -e 包名 PACKAGE_NAME
-e(erase) 卸载
–nodeps 不检查依赖性
查询包是否安装
查询软件包详细信息
查询包中文件安装位置
查询系统文件属于哪个RPM包
[root@localhost ~]# rpm –qf 系统文件名
选项:
-f 查询系统文件属于哪个软件包(file)
查询软件包的依赖性
[root@localhost ~]# rpm –qR 包名
选项:
-R 查询软件包的依赖性(requires)
RPM包管理-yum在线管理
IP地址配置和网络yum源
yum命令
查询
[root@localhost yum.repos.d]# yum list
#查询所有可用软件包列表
[root@localhost yum.repos.d]# yum search 关键字
#搜索服务器上所有和关键字相关的包[root@localhost yum.repos.d]# yum –y install 包名
选项:
install 安装
-y 自动回答yes升级
[root@localhost yum.repos.d]# yum -y update 包名
选项:
update 升级
-y 自动回答yes卸载
[root@localhost yum.repos.d]# yum -y remove 包名
选项:
remove 卸载
-y 自动回答yes
光盘yum源搭建
| RPM****包默认安装路径 | |
| --------------------------- | -------------------------- |
| /etc/ | 配置文件安装目录 |
| /usr/bin/ | 可执行的命令安装目录 |
| /usr/lib/ | 程序所使用的函数库保存位置 |
| /usr/share/doc/ | 基本的软件使用手册保存位置 |
| /usr/share/man/ | 帮助文件保存位置 |
进程管理
进程与程序的区别⭐️
进程由可执行的程序、该程序所需的相关数据集合和进程控制块(PCB)组成。PCB中包含进程标识PID、处理器状态信息、进程控制信息。操作系统通过进程控制块对进程加以管理。
进程与程序的区别:
- 进程是程序处理数据的过程,而程序只是一组指令的有序集合。
- 进程具有动态性、并发性、独立性和异步性,而程序只是静态的代码不具有这些特性。
- 进程与程序并非一一对应的,一个进程可能对应一个程序,也可能多个进程对应一个程序;例如,一个编译程序为多个用户程序编译,构成多个进程。
多任务与进程的类型
- Linux系统采用
多级反馈队列
实现处理机的调度.- 对于
实时和系统进程
采用优先级和先来先服务
相结合的调度算法- 对于
普通的用户进程
采用优先级与时间片
轮转相结合的调度算法交互进程、批处理进程和监控进程
- 交互进程:它是由某种shell程序启动的进程,如执行一个命令。交互进程既可以在前台运行,也可以在后台运行。
- 批处理进程:这种进程和终端没有联系,但它是一个进程系列。例如执行一个shell脚本程序。
- 监控进程:也称为守护进程,它是在Linux 系统启动时运行的进程,并且运行在后台。
工作管理
把进程放入后台
1、在命令后加&
[root@localhost ~]# tar -zcf etc.tar.gz /etc &
2、按下ctrl+z快捷键
[root@localhost ~]# top(任意命令)
在top(任意)命令执行的过程中,按下ctrl+z快捷键用jobs来查看
[root@localhost ~]# jobs [-l]
-l: 显示工作的PID进程的前后台转换
[root@localhost ~]# fg 工作号
注意:工作号不是PID
[root@localhost ~]# fg
#进程在前台恢复运行
[root@localhost ~]# bg
#进程在后台恢复运行**查看系统中所有进程 **
[root@localhost ~]# ps aux
查看系统中所有进程,使用 BSD 操作系统格式
选项:
a 选择显示当前终端上的所有进程,包括其他用户的进程。
x 显示所有进程,包括没有控制终端的进程。
u 指定输出格式,以用户为主的格式显示进程信息。
[root@localhost ~]# ps -le
查看系统中所有进程,使用 Linux 标准命令格式。
选项:e 显示所有进程 l 以详细格式显示进程的信息
杀死进程
kill命令
[root@localhost ~]# kill –l
#查看可用的进程信号
注意:这里是L,小写的L[root@localhost ~]# kill [信号] PID
[root@localhost ~]# kill -1 22354重启进程
[root@localhost ~]# kill -9 22368
强制杀死进程
killall命令
[root@localhost ~]# killall [选项][信号] 进程名
按照进程名杀死进程
选项:
-i: 交互式,询问是否要杀死某个进程
-I: 忽略进程名的大小写
pkill命令
[root@localhost ~]# pkill [选项] [信号] 进程名
按照进程名终止进程
选项:
-t 终端号: 按照终端号踢出用户
系统定时任务
at命令
at 命令是用来执行一次性任务,适合应对突发性和临时性的任务。
守护进程 atd
为 at 命令提供服务。[root@www /]# at [-ldc]
[root@www /]# at 时间
-l:列出当前用户的at任务列表,也可使用 atq
-d 任务编号:取消一个at 任务,后面跟 at 任务编号,也可使用atrm 任务编号代替
-c 任务编号:显示该任务的实际内存,如:at -c 1 ,显示 1 号任务的详情
Shell编程
Shell是什么
Shell是一个命令行解释器,它为用户提供 了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 启动、挂起、停止甚至是编写一些程序。
Linux支持的Shell :
/etc/shells
echo输出命令
[root@localhost ~]# echo [选项] [输出内容]
-e: 支持反斜线控制的字符转换
[root@localhost ~]# echo “Hello World”[root@localhost ~]# echo -e “ab\bc”
删除左侧字符
[root@localhost ~]# echo -e “a\tb\tc\nd\te\tf”
制表符与换行符
[root@localhost ~]# echo -e \ “\x61\t\x62\t\x63\n\x64\t\x65\t\x66”
按照十六进制 ASCII 码也同样可以输出
历史命令
[root@localhost ~]# history [选项] [历史命令保存文件]
选项:
-c: 清空历史命令
-w: 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
打开/etc/profile文件查看: HISTSIZE=1000
配置文件生效:重新登录或者source /etc/profile
命令别名
[root@localhost ~]# alias
查询命令别名
[root@localhost ~]# unalias 别名
删除别名[root@localhost ~]# alias 别名=‘原命令’
设定命令别名
[root@localhost ~]# vi /root/.bashrc
#让别名永久生效
输入输出重定向 (重点)
输入重定向
root@localhost ~]# wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数命令<文件 把文件作为命令的输入
命令<< 标识符
…
标识符 把标识符之间内容作为命令的输入
管道符
[root@localhost ~]# 命令1 | 命令2
命令 1 的正确输出作为命令 2 的操作对象
grep
grep [选项] "搜索内容" 文件名
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
–color=auto 搜索出的关键字用颜色显示
接收键盘输入
[root@localhost ~]# read [选项] [变量名]
-p “提示信息”:在等待read输入时,输出提示信息
-t 秒数: read命令会一直等待用户输入,使用此选 项可以指定等待时间
-n 字符数: read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
Shell脚本编程
expr或let
必须使用expr或let命令来指明表达式是一个运算式。expr命令会先求出表达式的值,然后送到标准输出显示。let命令会先求出表达式的值,然后赋值给一个变量,而不显示在标准输出上。
expr <表达式> let <表达式1> [表达式2 ...]
- expr 3+2
操作数3、2和运算符+之间没有空格,此时bash不会报错,而是把3+2作为字符串来处理。
expr 3 + 2
操作数3、2和运算符+之间有空格,此时bash认为是数字运算,返回5送到标准输出expr 3""2
使用双引号将操作符括起,此时bash返回乘积6let s=(2+3)4
s结果为54=20。
条件判断
test cond_expr
或 [ cond_expr ]这里“真”的数值表示为0,“假”的数值表示为非0,与表达式的真值以及C语言的真值刚好相反。
利用一对中括号时,左右的中括号与表达式之间都必须存在空格。
Shell控制结构
分支结构
循环结构bash支持的分支结构有
if结构和case结构
,支持的循环结构有for结构、while结构和until结构。
1. if分支结构
if 条件测试1 ;
then
command_list_1
[elif 条件测试2 ;
then
command_list_2 ]
[else
command_list_3 ]
fi
2. case分支结构
case expr
模式1 )
command_list_1
;;
[ 模式2 )
command_list_2
;;
……
* )
command_list_n
;; ]
esac
#模式为expr的取值, expr可以是变量、表达式或shell命令等 。
#通常一个模式可以是expr的多种取值,使用或(|)连接。模式中还可以使用通配符,
for循环结构
for var [ in value_list ]
do
command_list
done
while和until循环结构
while expr
do
command_list
done
until的格式如下:
until expr
do
command_list
done
从1加到100
#!/bin/bash #从1加到100
i=1
s=0
while [ $i -le 100 ]
#如果变量i的值小于等于100,则执行循环
do s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is: $s"
99乘法表
#! /bin/sh –
for i in 1 2 3 4 5 6 7 8 9
do
for j in 1 2 3 4 5 6 7 8 9
do
echo – ne 'expr $ i\* $j' "\t"
if (test $ j -eq 9 ) then
echo
fi
done
done