网络设置
使用ifconfig eth0 192.168.1.56
即可设置或改变Linux系统的网络IP地址,注意在虚拟机中所设置的ip地址要和主机在同一个网段中,否则不能相互ping通(以上只是临时生效,重启之后则失效)
IP地址分类:
- 子网掩码作用:(1代表网络位,0代表主机位)确定任意IP地址是否属于同一个网络段,同一网段之间通讯只需要交换机就可以了,但是不同网络段之间通信需要经过路由器
注意:IP地址和子网掩码相与操作就是网络地址,将子网掩码是0的位数和IP地址对应的位数的值变为1就是广播地址
示例(来自兄弟连Linux)
网卡信息文件
- vim /etc/sysconfig/network-srcipts/ifcfg-eth0
主机名文件
- vim /etc/sysconfig/network
DNS文件
- vim /etc/resolv.conf
补充:
- df -h:查看系统分区使用情况
软件包管理
1软件包管理简介
1.1、软件包分类
- 源码包:使用C语言编写
- 二进制包(源码包经过编译)(RPM包,即是系统默认包):好处在于安装比较快,坏处在于不可以查看里面的代码
1.2、源码包
优点
- 开源:可以修改
- 可以自由选择需要的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
- 卸载方便(直接删除对应的安装文件就可以了)
缺点:
- 安装过程步骤比较多,尤其安装较大的软件集合时,容易出现拼写错误
- 编译过程时间较长,安装比二进制安装时间长
- 因为是编译安装,安装过程中一旦报错很难解决
1.3、RPM包
优点:
- 包管理系统简单,只通过几个命令就可以实现报的安装、升级、查询和卸载
- 安装速度比源码安装快许多
缺点:
- 经过编译,不再可以看到源代码
- 功能选择不如源码包灵活
- 依赖性
注意:在centos中的二进制包是PRM包,但是在Ubuntu中的二进制包是dpkg
2RPM软件包管理-rpm命令
2.1、 rpm包命令原则
2.2、rmp包依赖性
- 树形依赖:a依赖b依赖c
- 环形依赖:a依赖b依赖c依赖a
- 模块依赖:模块依赖查询网站:www.rpmfind.net
2.3、包全名和包名
- 包全名:操作的包是没有安装的软件包是,使用包全名(一般安装和更新),而且要注意路径
- 包名:操作已经安装的软件包时,使用包名(查询和卸载)。
2.4、 RPM安装
使用命令rpm -ivh 包全名
选项:
- -i:安装
- -v: 显示详细信息
- -h: 显示进度
- – nodeps: 不检测依赖性
2.5、 RPM升级
使用命令rmp -Uvh 包全名
- U :升级
2.5、 RPM卸载
使用命令:rpm -e 包名
注意:不需要使用包的全名
Shell编程
1 脚本运行方式(P64)
1.1 脚本文件
以“.sh”结尾的文件,并且在文件第一句是 #!/bin/bash
表明这是一个shell文件,并且注释语句为“#”
- 补充:采用echo输出内容,
echo 内容
- 注意:如
echo $PATH
输出环境变量PARH的值,注意,如果直接在命令行里面输入$变量名
,那么会将变量的具体值取出,如果该值是具体命令如ls
会执行该命令,但是该值不是具体值,则会报错
1.2 运行shell文件
1.2.1赋予执行权限,直接运行
-
首先使用
chmod 755 shell_name.sh
为其添加运行的权限 -
使用绝对路径或者相对路径的方式运行脚本文件
如/home/fei/shell_dir/hello.sh
或者./hello.sh
1.2.2 通过bash调用执行脚本文件
在当前路径下执行bash hello.sh
,Linux系统下的所有命令都没有大写的
2 Bash 基本功能
2.1 历史命令查看
-
使用
history
命令可以查看历史命令 -
使用
history -c
清空历史命令 -
使用
history -w
默认将缓存中的10000条历史命令保存到指定文件,默认保存到~/bash_history
中
2.2 历史命令的调用
- 使用 上下箭头 条用以前的历史命令
- 使用
!n
重复执行第 n 条历史命令 - 使用
!!
重复执行上一条命令 - 使用
!字符串
重复执行最后一条以该字符串开头的命令
2.3 命令自动补全功能
使用 tab键 补全 文件名、命令、目录等
2.4 别名
- 使用 alias 来查看已经定义的别名
- 使用
alias 别名 = “命令名
临时定义别名 如:alisa vi = vim ",使用 unalias 别名删除别名 - 使用
vim /root/.bashrc
编辑系统文件,使得让别名永久生效
注意:查看Linux中的变量时候需要在变量前面加上“
"
符
号
,
如
"
"符号,如"
"符号,如"PATH"则是显示环境变量,使用echo &PATH
则输出系统环境变量的值,其值是个命令的绝对路劲环境变量
2.5 快捷键
- ctrl + A: 将光标移到命令开头
- ctrl + E: 将光标移到命令行行尾
- ctrl + C: 强制终止当前命令
- ctrl + D: 退出终端
- ctrl + L : 清屏
- ctrl + u: 删除或剪切光标之前的命令
- ctrl + k: 删除或剪切光标之后的命令
- ctrl + Y:粘贴
2.6 输入输出重定向
1 标准输入输出
设备 | 文件描述 | 类型 |
---|---|---|
键盘 | 0 | 标准输入 |
显示器 | 1 | 标准输出 |
显示器 | 2 | 标准错误输出 |
2 输出重定向
类型 | 符号 | 示例 | 作用 |
---|---|---|---|
标准输出重定向 | 命令 > 文件 | cat hello.sh > abc | 以覆盖的形式,把命令的正确输出结果输出到指定的文件设备当中 |
标准输出重定向 | 命令 >> 文件 | 以追加的形式,把命令的正确输出结果输出到指定的文件设备当中 | |
标准错误输出重定向 | 命令 2> 文件 | lsss > haha | 以覆盖的形式,把命令的错误输出结果输出到指定的文件设备当中 |
标准错误输出重定向 | 命令 2>> 文件 | 以追加的形式,把命令的错误输出结果输出到指定的文件设备当中 |
注意:命令需要能输出内容,如cd 命令则不能使用,并且当命令产生正确输出时候,比如使用date 2> haha
,并不会产生重定向文件haha,因为date会产生正确输出,并且执行上条命令后会将时间输出到屏幕,所以在使用以上命令之前要判断命令的正确与否,不实用,所以通常使用以下命令。
类型 | 符号 | 示例 | 作用 |
---|---|---|---|
正确输出和错误输出同时保存 | 命令 > 文件 2>&1 或 命令 &> 文件 | 以覆盖的形式,把正确的输出结果 和 错误的输出结果 同时保存到一个文件当中 | |
正确输出和错误输出同时保存 | 命令 >> 文件 2>& 或 命令 &>> 文件 | 以追加的形式,把正确的输出结果 和 错误的输出结果 同时保存到一个文件当中 | |
正确输出和错误输出同时保存 | 命令 >>文件1 2>> 文件2 | ls >> abc 2>> cuowu | 把正确的输出追加到文件1中,把错误的输出追加到文件2中 |
3 输入重定向
wc xaing [选项][文件名]
2.6多命令顺序执行
多命令执行符 | 格式 | 作用 |
---|---|---|
; | 命令1 ; 命令2 | 命令1 无论正确执行还是错误执行之后,接着执行命令2,适合没有逻辑关系的几条命令 |
&& | 命令1 && 命令2 | 逻辑与,只有当命令1正确执行后,才会执行命令2 |
|| | 命令1 || 命令2 | 逻辑或 |
例子:
命令 && echo yes || echo no
常用来判断“命令”的正确与否,如果命令正确则先执行命令然后输出yes, 如果命令错误则输出no…
2.6 管道符
命令格式:命令1 | 命令2
作用: 命令1 的正确输出 作为命令2 的操作对象
注意:如果命令1执行错误或没有输出则命令2不会被执行
示例: ll -a /etc | more
补充:grep 命令
2.7 通配符和其他特殊字符号
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[abc] | 匹配括号中的任意一个字符 |
[-] | 如 [a-z] |
[^] | 逻辑非,如[^0-9] |
示例:
rm -rf /home/fei/Demo/*
删除该文件目录下的所有文件
符号 | 作用 |
---|---|
’ ’ | 单引号,在单引号中的所有特殊字符(如“$”等)都没有特殊含义 |
“” | 双引号,在双引号中的特殊符号(除了“$"、` 和\之外)都没有特殊含义,且三者分别表示 “调用变量的值”,“引用命令”和“转义符”的含义 |
`` | 反引号,反引号括起来的内容是系统命令,在bash中会优先执行它 |
# | 在shell表示注释 |
$ | 用于调用变量的值 |
\ | 转义字符,跟在\后面的特殊字符会失去特殊含义,变为普通字符 |
2.8 变量
变量类型
- 用户自定义变量
- 环境变量:
- 位置参数变量:
- 预定义变量:
2.8.1 用户自定义变量
- 组成:字母、数字、下划线,且不能以数字开头
- 类型:变量的默认类型是字符串型,如果要进行数值运算,则需要指定变量类型为数值型
- 变量用等号连接值,等号左右两侧不能有空格
- 变量的值如果有空格,则需要使用单引号或双引号
- 在变量的值中,可以使用\ 转义符
- 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量值需要使用双引号包含,如“$变量名”
- 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
如:
(base) fei@carrot:~$ local_time=$(date)
(base) fei@carrot:~$ echo $local_time
2019年 03月 16日 星期六 20:40:14 CST
(base) fei@carrot:~$ local_time2=`date`
(base) fei@$ echo $local_time2
2019年 03月 16日 星期六 20:41:44 CST
- 环境变量名建议大写
- 查看当前系统的所有变量:set
- 删除变量: unset val_name
注意:本地变量即自定义变量只在当前bash中存在,如果进入子bash 中,则不存在刚定义的本地变量,但是环境变量存在于所有的bash中,及环境变量相当于全局变量,使用pstree即可查看当前在哪一层bash中
2.8.2 环境变量
定义: export 变量名=变量值
查询环境变量:env (只显示环境变量)
删除环境变量:unset 环境变量名
调用:$变量名
系统常用环境变量:PATH 、 PS1
有一个hello.sh脚本文件存放于目录:/home/fei/Desktop/linux/shell
在没有添加该文件的环境变量时候,直接运行会直接报错,但是将该文件的目录添加发哦系统环境变量中后,直接运行hello.sh之后直接出结果!
$ pwd
/home/fei/Desktop/linux/shell
$ hello.sh
hello.sh:未找到命令
$ PATH="$PATH":/home/fei/Desktop/linux/shell
$ hello.sh
hello world
2.8.2 位置参数变量
当shell程序里面需要用户交互输入程序运行的参数变量时候,需要在shell程序中使用$来定义位置参数,执行该shell程序的时候,需要在其后加上对应的参数
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0代表命令本身,$1~ 9 代 表 第 一 到 第 9 个 参 数 , 10 以 上 的 参 数 需 要 使 用 大 括 号 包 含 , 如 9代表第一到第9个参数,10以上的参数需要使用大括号包含,如 9代表第一到第9个参数,10以上的参数需要使用大括号包含,如{12},程序如例2821 |
$* | 这个变量代表命令行中所有的参数,$* 把所有的参数看作成一个整体,程序如例2822 |
$@ | 这个变量代表命令行中所有的参数,不过把每个参数区别对待,程序如例2823 |
$# | 这个变量代表命令中所有参数的个数,程序如例2822 |
例子2821:
首先编写一个shell脚本,内容如下:
#!/bin/bash
echo $0
echo $1
echo $2
echo $3
运行结果如下:
例子2821:
运行结果
例子2822(使用$*,$@,$#的区别):
1 #!/bin/bash
2
3 echo '使用$*的循环:'
4 for i in "$*"
5 # $*将所有的除了$0之外的参数看作成一个整体,所以这个循环只会执行一次
6 do
7 echo "the parameters is: $i"
8 done
9
10 echo "\n"
11
12 echo '使用$@的循环:'
13 for i in "$@"
14 #$@ 相当于一个列表,将所有的参数分别存放在里面,每次调用一次,依次从头到尾部给出一个值
15 do
16 echo "the parameter is: $i \n"
17 done
18
19 echo "the nums of parameters is : $#"
执行结果:
2.8.3 预定义变量
预定义变量 | 作 用 |
---|---|
$? | 其值为最后一次执行的命令的返回状态,如果这个变量的值为0,表示上一条命令正确执行,如果这个变量的值非0,则表示上一条命令执行不正确,比如若其值为127表示上一条命令不存在,具体的值已经设定好,程序代码示例如图2831 |
$$ | 当前进程号(PID),程序代码示例2832 |
$! | 表示后台运行的最后一个进程的进程号,程序代码示例2832 |
程序代码示例2831:
程序代码示例2832:
2.8.4 接受键盘输入
命令read [选项] [变量名]
选项:
- -p “提示信息” :在等待read输入时,输出提示信息
- -t 秒数 : read命令默认会一直等待用户输入,使用此选项可以指定等待时间,超过指定时间没有输入则终止命令
- -n 字符数 : 表示read命令只要接受指定长度的字符数,就会自动执行该命令
- -s :隐藏输入的内容,适用于机密信息的输入,如同输入密码一样效果
注:命令末尾是变量名,用于接受用户屏幕的输入值
补充:换行命令echo -e \n
2.8.5 数值运算与运算符
1 使用declare命令声明变量类型,进行数值运算
格式:declare [+ / -][选项] 变量名
- - :给变量设定类型属性
- +:取消变量的类型属性
- -i :将变量声明为整数型(int)
- -x:将变量声明为环境变量
- -p:显示指定变量被声明的类型
2 使用expr 或let 进行数值运算
注意:上图中的 ( . . . ) 是 将 里 面 的 运 行 结 果 赋 值 给 d d 即 (...) 是将里面的运行结果赋值给dd 即 (...)是将里面的运行结果赋值给dd即()中括号里面的是命令,
3 使用$((…))进行数值运算 最常用
4 运算符
2.8.6 变量测试与内容替换
目的:根据x的值来判断y的值情况,如是否存在、是否为空,以前的值是什么!因为echo语句可以将某一变量的值取出来给人来来判断,所以变量测试用以计算机来判断
2.8.6 环境变量配置文件
1 source 命令
作用及来源:当修改环境变量等配置文件之后,只有退出登录且重新登录之后才会,被修改的环境变量等配置文件才会生效,使用source 配置文件名
或. 配置文件名
(此处的.
相当于source)之后可以无需重新登录而强制立生效。
2 环境变量配置文件简介
- 环境变量举例:PATH, HOSTNAME, HISTSIZE, PS1等
- 环境变量配置文件如下五类:
- /etc/profile
- /etc/profile.d/*.sh
- /etc/bashrc
- ~/.bash_profile
- ~/.bashrc
备注:含有etc路径名的配置文件,作用对象是所有的用户,因为每个用户都有家目录,所以在不同的用户的家目录下修改配置文件,配置文件则分别作用于对应的用户
3 环境变量配置文件作用
用户登录系统之后,首先读取/etc/profile
各个配置文件的作用:
3 shell编程
3.1 正则表达式
3.1.1 正则表达式与通配符
- 正则表达式用来在文件中匹配符合条件的字符串,正则式包含匹配。grep、awk、sed等命令可以支持正则表达式。
如使用grep命令在文件中搜索符合搜索条件的字符串
- 通配符,在shell中,有*、?、[] 用来匹配符合条件的文件名,匹配符是完全匹配。ls、find、cp这些不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
注意:在非linux的shell中,通配符只是RE中的一个符号
3.1.2 基础正则表达式
-
*
-
.
-
^ & $
-
[]
-
\
-
\{n\}
-
\{n,m\}
补充:grep 只会提取文件中符合搜索条件的行,-n会显示行号
3.1 字符提取
cut -d "分割规则" -f 2,3,4 filename
用来提取文件中的某些列,通常结合grep(用来提取文件中的某一些列)使用
- d :表示使用什么规则分割每行,默认是分割符是制表符,可以指定;
- f :表示提取哪一列
如以下命令:
3.2 字符截取
2 printf命令
3 awk命令
难点!!!
4 sed命令
3.2 字符处理命令
1 使用关键词sort [选项] 文件名
选项如下:
- f : 忽略大小写
- n : 以数值型数据进行排序,默认使用字符串类型排序
- r : 反向排序,即逆序
- t : 指定分割符,默认分隔符是制表符
- k n[ ,m]: 按照指定的字段范围进行排序。从第n字段开始,m字段结束
如:sort /etc/pass
不加选项默认按照每行字段的首字母开始排序
sort -t ":" -k 3,3 /etc/passwd
表示将passwd 文件每行按照“:”进行分割,分割规则按照按照以第三列开始并以第三列结束的***字符串***,按照分割规则进行排序
sort -n -t ":" -k 3,3 /etc/passwd
表示将passwd 文件每行按照“:”进行分割,分割规则按照按照以第三列开始并以第三列结束的 ***“数值型数据”***,按照分割规则进行排序
2 统计命令 wc
wc [选项] 文件名
选项
- -l : 只统计行数
- -w: 只统计单词数
- -m: 只统计字符数
3.3 条件判断
1 按照文件类型进行判断
- 两种判断格式:
test -e /root/install.log
用于判断该路径下的install.org文件是否存在,存在返回True,否则返回false
[空格-e /root/install.log空格]
作用同上 常用
常与其他命令结合使用,如下所示:
[ -f /root/student.txt ] && echo"yes" || echo "no"
2 按照文件权限进行判断
3 两个文件之间进行比较
示例:
4 两个数值的比较:
示例:
5 字符串的比较
6 多重条件判断
示例:
3.4 流程控制
3.4.1 if-语句格式
1 单分支if 语句
if [ 条件判断式 ]:then
程序
if
# 或者
if [ 条件判断式 ]
then
程序
fi
注意:if 中的test语句,在中括号里面的条件判断式两端一定要有空格,此外注意如下:
示例:
建立一个脚本sda_use_rate.sh,判断其磁盘是否快用满!
#!/bin/bash
rate=$(df -h | grep /dev/sda1 | awk '{print $5}' | cut -d "%" -f1)
if [ $rate -ge 80 ]
then
echo "/dev/sda1 if full "
fi
2 双分支if语句
if [ 条件判断句 ]
then
pass
else
pass
fi
示例2:备份mysql数据库
#!/bin/bash
ntpdate asia.pool.ntp.org &> /dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照“年月日”格式赋予变量date
size=$(du -sh /var/lib/mysql)
#tongjia mysql数据库的大小,并把大小复制size变量
示例3:
4 用户和用户组管理
4.1用户配置信息
4.1.1 /etc/passwd 文件
改文件每一行代表一个用户,每一行有7个字段
- 第一个字段:用户名称 #
useradd 用户名
命令添加用户 - 第二字段:密码标志 #
passwd 用户名
命令设置用户密码 - 字段3:UIP(用户ID)
- 0:超级用户
- 1-499:系统用户(伪用户)
- 500-65535:普通用户
- 字段4:GID(用户初始组ID)
- 初始组:指用户一登录就立即拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组(一般不建议修改初始组)
- 附加组:指用户可以加入多个其他的用户组,并拥有这些则的权限,附加组可以有多个
- 字段5:用户说明
- 字段6:家目录
- 普通用户:
/home/用户名/
- 超级用户:
/root/
- 普通用户:
- 字段7:用户登录之后的shell类型
4.1.2 用户配置文件–影子文件/etc/shadow
每一行表示一个用户的信息,每行九段
- 字段一:用户名
- 字段二:加密密码
- 加密算法为SHA512散列加密算法
- 如果密码位是“!!”或“*”代表没有密码,不能登录
- 字段三:最后一次修改时间
4.1.3 组信息文件
4.2用户配置信息
1、用户的家目录
4.3 用户管理命令
4.3.1 用户添加命令
- useradd [选项] 用户名
–u UID : 手工指定用户的UID号,UID号为0的用户一定是超级用户
–d 家目录:- -c 用户说明:
- -g 用户初始组组名:
- -G 附加组组名:指定用户的附加组
- -shell: 手工指定用户的登录shell。默认是/bin/bash
举例: