Linux基础03
Posted 王振龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础03相关的知识,希望对你有一定的参考价值。
** Linux基本操作常用命令(三)
** Linux的软件包
Linux的软件把分为“源码包”和“二进制包”
源码包:免费,开源
二进制包:系统默认包,即RPM包(上一节我们通过rpm卸载过openJDK),比较常用
特点:
* 经过编译
* 安装,卸载,升级,查询直接使用命令来操作即可
* 安装速度比源码包更快,省略编译过程。
* 安装具有依赖性
比如:安装某个包03,前提需要安装了某个包02,而安装某个包02,又需要提前安装某个包01,即,在安装包03时,如果没有安装前几个包,那么该包03是无法直接安装的。
** rpm命令
1、centos主要管理方式:RPM
2、rmp管理以rpm结尾的包
(接下来我们要使用这个命令安装个rpm程序试试)
3、挂载光驱
mount /dev/cdrom /media/
即挂载光驱 到 挂载点media
挂载成功后,出现:
![](http://upload-images.jianshu.io/upload_images/4951489-050578047b0b746c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/671)
4、进入该光盘,即切换到该光驱的挂载点目录
cd /media/
之后使用ls -l命令,查看该光驱下的文件结构:
![](http://upload-images.jianshu.io/upload_images/4951489-6f663e3c126b1007.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
切换到Packages目录下,查看该目录文件,你会发现全是以.rpm结尾的安装包:
![](http://upload-images.jianshu.io/upload_images/4951489-e1c65356ce67f8af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
5、安装
使用命令:rpm -ivh zlib-devel-1.2.7-15.el7.x86_64.rpm
zlib-devel-1.2.7-15.el7.x86_64.rpm为某个安装包,记得使用tab键来智能补全,不然你需要自己把文件名打全。
参数解释:
-i:安装
-vh:显示安装时的进度
6、卸载
rpm -e zlib-devel-1.2.7-15.el7.x86_64
rpm
参数解释:
-e:卸载
7、查询
rpm -qa 查看当前系统有哪些已经安装好的rpm包
-q:query查询
-a:all全部
8、查询文件属于哪个rpm安装包
rpm -qf /etc/ntp.conf
参数解释:
-f:file文件
![](http://upload-images.jianshu.io/upload_images/4951489-07e226f9c4f9dec0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/560)
** yum命令
1、批量解决rpm依赖性问题
我们使用rpm命令安装某一个文件时,需要解决一系列依赖问题,即,安装包03,需要先找到并安装包02,安装包02,需要找到并安装包01,这样操作很麻烦,效率也比较低,yum命令可以自动找到并安装所有依赖,很方便。
2、查询
yum list
该命令可以列出系统中所有已经安装包的rpm包,例如:
![](http://upload-images.jianshu.io/upload_images/4951489-2a548af451652a04.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
3、右边的updates表明已安装的包有更新可用
4、安装
yum -y install httpddevel.x86_64,即安装httpddevel.x86_64
![](http://upload-images.jianshu.io/upload_images/4951489-78b68e5380ec5f48.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
5、卸载
yum -y remove httpddevel.x86_64
(尖叫提示:-y表明yes,即批量安装依赖包的时候,会有确认提示,yes or no,-y,即全部yes,简单粗暴)
6、yum仓库
路径:/etc/yum.repos.d/
配置:CentOS-Base.repo就是以.repo结尾的
gpgcheck=1代表是否开启校检(0为不开启)
gpgkey=校检公钥所在位置
7、常见错误:
* 外网不同:检查网卡设置,检查IP设置,检查DNS设置
* 无法下载:检查仓库是否正确
** shell编程
什么是shell,我建议你百度一下。
简而言之:即shell解释层,用于外层应用程序和内存交互的,例如你使用的ls命令,就是一个ls脚本,即名字为ls的shell脚本,ls是个命令,可以理解为ls是一个文件,文件里保存的是一系列代码,该代码称之为shell脚本,使用ls命令的过程,就是执行文件名为ls的脚本的过程。
显示当前系统支持的shell环境:
![](http://upload-images.jianshu.io/upload_images/4951489-c615763b8441298c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/481)
其中Linux中最常用的shell是bash
1、环境变量
保存系统运行时的环境变量
用户变量:
.bash_profile
每个用户下都有一个用来保存每一个用户的环境变量,对于其他用户不共享
系统变量:
/etc/profile
系统全局生效的配置文件,系统下所有的用户共享该文件
(尖叫提示:这个和windows下的管理模式是一样的)
2、位置变量
将传递给脚本的参数保存位置变量中以便于在脚本中引用这些参数,类似于编程中,函数的形参。
bash中定义了9个位置变量:$1.....$9
$0则代表脚本名称
现在创建一个.sh脚本,例如vi zz01.sh,内容如下:
#!/bin/bash
echo $0
echo $2
echo $3
echo $1
![](http://upload-images.jianshu.io/upload_images/4951489-fe5c7eb2c9c77627.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/184)
传递参数要以空格隔开,如图:
![](http://upload-images.jianshu.io/upload_images/4951489-8d84427686184a2f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/393)
#!/bin/bash这句话的意思是:标识当前sh脚本为bash
接下来,执行该脚本,sh zz01.sh aa bb cc dd
其中aa bb cc dd为参数,输出结果:
![](http://upload-images.jianshu.io/upload_images/4951489-bfe1031f0a7090e5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/609)
dd其实也是传递进去了,但是处于第4个位置,而我们的脚本中没有使用echo打印第四个位置的参数,所以没有显示,大家仔细对比一下就能发现规律。
3、预定义变量
$0:当前脚本名称
$!:进程PID,每一个进程都有一个编号
$$:当前进程ID号
$#:当前shell的参数个数
$*:显示所有参数内容(整体)
$@:显示所有参数内容(逐个读取)
$?:判断,表示程序退出的代表(返回0表示成功,返回非0表示失败)
4、自定义变量
语法格式:
name=[value]
等号两边不能有空格,变量名大小写敏感,定义好以后使用$变量名来调用变量的值
例如:a=2 echo $a
5、逻辑符号
&&:逻辑与
cmd1 && cmd2
具有短路作用
例如:
cat /etc/passwd && mkdir zzz/
解释:
查看该文件如果不成功(比如文件不存在),那么就不会执行mkdir zzz/这个命令,反之则执行该命令
||:逻辑或
cmd1 || cmd2
具有短路作用
例如:
cat /etc/passwd || mkdir zzz/
解释:
如果查看该文件成功,则mkdir zzz/指令就直接短路不执行,反之,则执行后边命令
无逻辑符号
cmd1 ; cmd2
例如:
cat /etc/passwd ; mkdir zzz/
解释:
依次执行这两个命令
6、算数运算
格式:
1、$((表达式))
2、$[表达式]
3、expr 表达式
例如:
a=10
b=20
1、echo $((a+b))
echo $(($a+$b))
2、echo $[a+b]
echo $[$a+$b]
3、expr a+b
expr $a+$b
乘法:expr $a \\* $b
注意:\\*此处左右两边有空格
7、内置测试判断
数值测试:
-eq:等于
-ne:不等于
-le:小于等于
-ge:大于等于
-lt:小于
-gt:大于
例如:[ 2 -eq 2] 则返回结果为真,以此类推
字符串测试:
=:等于则为真
!=:不相等则为真
-z:字符串长度为空则为真
-n:字符串长度不为空则为真
文件测试:
-e 文件名:如果文件存在则为真
-r 文件名:如果文件存在且可读则为真
-w 文件名:如果文件存在且可写则为真
-x 文件名:如果文件存在且可执行则为真
-s 文件名:如果文件存在且至少有一个字符则为真
-d 文件名:如果文件存在且为目录则为真
-f 文件名:如果文件存在且为普通文件则为真
-c 文件名:如果文件存在且为字符型特殊文件则为真
-b 文件名:如果文件存在且为块特殊文件则为真
Linux还提供了非(!)、或(-o)、与(-a)三个逻辑操作符,用于将测试条件连接
优先级顺序:!> -a > -o
8、时间命令
date:时间命令,用语查看当前系统时间,例如:
![](http://upload-images.jianshu.io/upload_images/4951489-c39ce14f352c0835.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/351)
修改时间:-s,例如:
date -s "2015-05-09 10:20:30",如图:
![](http://upload-images.jianshu.io/upload_images/4951489-453b656cd9e5ee62.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/612)
查看时间:
date "+%Y%m%d%H%M",如图:
![](http://upload-images.jianshu.io/upload_images/4951489-bde71ee805fd8aad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/547)
其中YmdHM各代表什么,自己对照即可明白。
时间操作:
回到5天前:
date -d \'5 day ago\' \'+%Y%m%d%H%M\',如图:
![](http://upload-images.jianshu.io/upload_images/4951489-aea65fa4f43fe4db.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/661)
9、书写shell脚本的规范
* 一般以.sh结尾,方便识别文件类型
* 一般开头加上注释:#!/bin/bash 以表明这是bash shell
(尖叫提示:bash shell是centos系统默认的shell环境)
10、for循环
语法1:
![](http://upload-images.jianshu.io/upload_images/4951489-237e2301fbc42cc8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/315)
语法2:
![](http://upload-images.jianshu.io/upload_images/4951489-c9a6bbd08f9e817e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/462)
例子1:vi for01.sh,编辑内容如下:
![](http://upload-images.jianshu.io/upload_images/4951489-bd170bf2383a18d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/260)
执行:sh for01.sh,结果如下:
![](http://upload-images.jianshu.io/upload_images/4951489-c4e3870392e438c7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/376)
例子2:vi for02.sh,编辑内容如下:
![](http://upload-images.jianshu.io/upload_images/4951489-1e5ef28c1c375266.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/543)
(尖叫提示:如果do和for不在一行,则可以省略分号;)
执行:sh for02.sh,结果如下:
![](http://upload-images.jianshu.io/upload_images/4951489-caa9eb0ba6c06518.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
11、while循环
语法1:
![](http://upload-images.jianshu.io/upload_images/4951489-945efc49b92e4ea7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/247)
语法2:
![](http://upload-images.jianshu.io/upload_images/4951489-ae23f5f499a12367.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/311)
例子1:vi while01.sh,编辑内容如下:
![](http://upload-images.jianshu.io/upload_images/4951489-52d9df6aee6725ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/397)
执行:sh while01.sh,结果如下:
![](http://upload-images.jianshu.io/upload_images/4951489-c2cb6f6e46fba6ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/456)
let关键字解释:
如果只是 let a=1 和 a=1,它们没有区别,但是 let 还可以用于带赋值的运算,例如
let a=1+5
echo $a
得到计算结果 6,而
a=1+5
echo $a
得到一个字符串 1+5
例子2:vi while02.sh,内容如下:
![](http://upload-images.jianshu.io/upload_images/4951489-a27d27dae5cb61cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/239)
该脚本用语读取passwd文件的每一行并打印出来
执行:sh while02.sh,结果如下:
![](http://upload-images.jianshu.io/upload_images/4951489-a7c842fc41115240.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
12、awk命令
该命令一言两语无法解释清楚,请大家参看该博客(为尊重作者,请大家链接过去)
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
简单例子:
cat /etc/passwd | awk -F \':\' \'{print $1"\\t"$2}\'
13、if命令
语法1:
![](http://upload-images.jianshu.io/upload_images/4951489-0a6b7d6f0742e6dc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/317)
语法2:
![](http://upload-images.jianshu.io/upload_images/4951489-0ebd2e56dec45d1a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/353)
例子1:vi if01.sh,编辑内容如下:
![](http://upload-images.jianshu.io/upload_images/4951489-cadb50ae7d041fe1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/205)
执行:sh if01.sh,结果如下:
![](http://upload-images.jianshu.io/upload_images/4951489-a6e9042d88d4882c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/432)
例子2:vi if02.sh,内容编辑如下:
![](http://upload-images.jianshu.io/upload_images/4951489-4282fb7516b010cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/240)
功能解释:是否存在目录./123,如果存在,则列出该目录下的文件,如果不存在,则创建该目录
执行:sh.if02.sh,结果如下:
![](http://upload-images.jianshu.io/upload_images/4951489-d6d8af6b24c51cf8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700)
14、case语句
语法1:
![](http://upload-images.jianshu.io/upload_images/4951489-f2438560f21588ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/475)
语法2:
![](http://upload-images.jianshu.io/upload_images/4951489-c61e5154d549edef.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/392)
例子1:vi case01.sh,编辑内容如下:
![](http://upload-images.jianshu.io/upload_images/4951489-5aee6bbf5e9ff4b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/651)
执行:sh case01.sh gameover,如图
![](http://upload-images.jianshu.io/upload_images/4951489-c3101ca2eaeedafa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/605)
如果传入的参数没有匹配到case,则默认执行*)通配条件。(如上图的aaa参数)
** 额外:
(尖叫提示:使用man命令可以查看某个命令的具体帮助)
(尖叫提示:使用which命令,可以查看该命令的具体位置,比如:which vi,如图:)
![](http://upload-images.jianshu.io/upload_images/4951489-623675776e6894cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/433)
(尖叫提示:使用rpm -qf 命令传入具体位置,可以查看命令路径的安装包,如图:)
![](http://upload-images.jianshu.io/upload_images/4951489-b936f5604f1255b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/528)
** 总结
判断测试符可能比较零碎,不容易记忆,多操作即可。循环语法之类的东西,理解其中1,2即可触类旁通,重在理解。
个人微博:http://weibo.com/seal13
QQ大数据技术交流群(广告勿入):476966007
作者:Z尽际
链接:https://www.jianshu.com/p/21cd6afa40f7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以上是关于Linux基础03的主要内容,如果未能解决你的问题,请参考以下文章