搭建实验环境
注意:每次实验之前都要搭建一个纯净的实验环境,这样有利于将实验效果很好的展现给大家
(1)在真机中重置并且打开我的desktop虚拟机
rht-vmctl reset desktop
rht-vmctl start desktop
rht-vmctl view desktop
(2)给desktop虚拟机配置网络
cd /etc/sysconfig/network-scripts
ls
vim ifcfg-eth0编辑
systemctl restart network
(3)给desktop虚拟机搭建本地yum源
接下来学习shell中一些常用的基本命令
1.diff命令
(1)基本概念以及命令的格式
diff 命令是用来比较两个文件或目录的不同
格式:diff [options] target1 target2
diff file1 file2比较两个文件的不同之处
diff direcory1 directory2比较两个目录的不同之处
diff 命令是用来比较两个文件或目录的不同,并且是以行为单位来比对的,一般是用在 ASCII 纯文本文件的比对上
由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上对比上,能够借由 diff 创建的分析档,以处理补丁(patch)功能的文件
(2)diff在比较文件过程中结果读取方式,读取结果每一项的意思
[num1,num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
num3,num4 表示在第二个文件中的行数
a | 表示添加 ----add |
---|---|
c | 表示更改 ----change |
d | 表示删除 ----delete |
< 表示第一个文件中的内容
> 表示第二个文件中的内容
--- 分割线
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中(表示第一个文件和第二个文件的不同之处在于第二行和第四行)
(3)diff在比较目录过程中结果的读取,读取结果每一项表示什么
Only in directroy/: filename只有directroy这个目录有filename这个文件
directory 表示在这个目录中
filename 表示在这个目录的文件
(4)diff中常用的参数
-b 或 --ignore-space-change | 不检查空格字符的不同 |
---|---|
-B 或 --ignore-blank-lines | 不检查空白行 |
-c | 显示全部内文,并标出不同之处 |
-i 或 --ignore-case | 不检查大小写的不同 |
-p | 若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称 |
-q 或 --brief | 仅显示有无差异,不显示详细的信息 |
-r 或 --recursive | 比较子目录中的文件 |
-u | 以合并的方式来显示文件内容的不同 |
-q和-c的不同之处 | -c更智能一些 |
-b 或 --ignore-space-change 不检查空格字符的不同
-B 或 --ignore-blank-lines 不检查空白行
-c 显示全部内文,并标出不同之处
-i 或 --ignore-case 不检查大小写的不同
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的函数名称;
-q 或 --brief :仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
-q和-c的不同之处:-c更智能一些
2.patch命令
(1)基本概念以及命令的用法
Linux patch命令用于修补文件,用于文件不同文件打布丁,这个指令常与 diff 配合使用,diff 可以用来分辨两个版本之间的差异
我们将旧的文件升级成为新的文件时,应该要怎么做?
就是“先比较新旧版本的差异,并将差异档制作成为补丁文件,再由补丁文件更新旧文件“即可,也就是我们俗称的打补丁
patch指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行
如果配合修补文件的方式则能一次修补大批文件,这也是Linux系统核心的升级方法之一
-b或–backup:备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它
-p :后面可以接“取消几层目录”的意思。
-R :代表还原,将新的文件还原成原来旧的版本
用于不同文件打补丁
命令格式 patch [options] file.old(旧文件) file.path(补丁文件)使用补丁文件来完善旧文件
(2)实验步骤
yum install patch -y ##安装打补丁的软件
diff -u test1 test2 > test.patch ##生成补丁文件 test.patch
patch -b test1 test.patch ##修补文件test1
3.cut命令:cut 命令多用于字符截取
cut -d | 指定分隔符 |
---|---|
cut -f 1,7 | 1-7 |
cut -c 1,4 | 1-4 指定截取的字符位置 |
注意:1,7表示第一列和第七列;1-7表示第一列到第七列
cut命令实验演示步骤如下:
cut -d(分隔符) : -f(列) 1(第一列) passwd
cut -d(分隔符) : -f(列) 1,3(1和3) passwd
cut -d(分隔符) : -f(列) 1-3(1到3) passwd
cut -c(位置) 2-4(2到4) passwd
cut -c(位置)2,4(2和4) passwd
4.sort命令:sort多用于字符排序
sort -n | 纯数字排序 |
---|---|
sort -r | 倒序 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件中 |
sort -t | 指定分隔符 |
sort -k | 指定要排序的列 |
实验步骤如下
cd /meng
vim test(竖着写一些数字)
cat test查看文件内容
sort test仅对第一列数字排序
sort -n test对数字排序
sort -nr test对数字倒序排序
sort -nru test去掉重复的数字对数字倒序排序
sort -nru test -o westos指定排序结果到westos文件中
cat westos查看
vim test
加上分隔符,前面再加一列
sort -n test仅仅对分隔符前的数字进行排序
sort -t(指定分隔符) : -k(指定列) 2 -n test
5.uniq命令:对重复的字符做相应的处理
uniq -u | 显示唯一的行 |
---|---|
uniq -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复次数 |
实验步骤如下
vim test 删除第一列和分隔符
sort test
sort -n test
sort -nu test
sort n test | uniq -c 每个数字只显示一次,并且显示出现的次数
sort n test | uniq -d显示重复的行并且进行排序
sort n test | uniq -u显示唯一的行并且排序
6.&&(表示true条件为真)命令和||(表示false条件为假)命令
&&命令:用来执行条件成立后执行的命令
||命令: 用来执行条件不成立后执行的命令
实验如下
ping -c1 -w1 172.25.254.8(我的真机,肯定通) && echo up
ping -c1 -w1 172.25.254.88(随便写的,肯定不通) || echo down
ping -c1 -w1 $1 &> /dev/null && echo yes || echo no如果成立就是yes,如果不成立就是no
7.test命令:test 是 Shell 内置命令,用来检测某个条件是否成立
test命令(=和 == 均是相等的意思,与c语言不一样,c语言中 = 是赋值的意思,==是相等的意思)
test 命令 和 [ ] 等同,功能一样
test "$A" == "$B" 等同 [ "$A" == "$B" ]
[ "$A" = "$B" ]相等
[ "$A" != "$B" ]不相等
[ "$A" -eq "$B" ]等于
[ "$A" -ne "$B" ]不等于
[ "$A" -le "$B" ]小于等于
[ "$A" -lt "$B" ]小于
["$A" -ge "$B" ]大于等于
["$A" -gt "$B" ]大于
["$A" -ne "$B" -a "$A" -gt "$B" ]与条件(必须条件都满足才成立)
["$A" -ne "$B" -o "$A" -gt "$B" ]或条件(至少有一个条件满足才成立)
[-z "$A" ]判断是否为空,空为真,非空为假
[-n "$A" ]和条件相反就是真,非空为真,空为假
["file1" -ef "file2" ] 判断前后两个文件是否互相为硬链接
["file1" -nt "file2" ]判断前面的硬链接是否与新
["file1" -ot "file2" ]判断前面的硬链接是否旧
[-e "file" ]判断文件是否存在
[-f "file" ]判断文件是否为普通文件
[-L "file" ]是否为软链接
[-S "file" ]判断是否为套接字
[-b "file" ]判断是否为块设备
[-d "file" ]判断是否为目录
[-c "file" ]判断是否为字符设备
实验步骤如下
a=1
b=1
test "$a" = "$b" && echo yes || echo no
m=3
n=4
["$m"="$n"] && echo yes || echo no
m=3
n=4
["$m"!="$n"] && echo yes || echo no
m=3
n=4
[!"$m"="$n"] && echo yes || echo no
["$a" -eq "$b"] && echo yes || echo no
["$a" -ne "$b"] && echo yes || echo no
["$a" -lt "$b"] && echo yes || echo no
["$a" -le "$b"] && echo yes || echo no
["$a" -gt "$b"] && echo yes || echo no
["$a" -ge "$b"] && echo yes || echo no
["$a" -lt "1" -a "$b" -gt "5"] && echo yes || echo no
["$a" -lt "1" -o "$b" -gt "5"] && echo yes || echo no
[ -z "$a"] && echo yes || echo no
[ -n "$a"] && echo yes || echo no
cd /meng/
ls
ln /meng/westos /mnt/westos1
["/mnt/westos" -nt "/mnt/ping.sh"] && echo yes || echo no
["/mnt/westos" -ot "/mnt/ping.sh"] && echo yes || echo no
[ -e "/mnt"] && echo yes || echo no
[ -e "/mnt/linux"] && echo yes || echo no
[ -f "/mnt/"] && echo yes || echo no
[ -f "/mnt/westos"] && echo yes || echo no
[ -L "/etc/system-release"] && echo yes || echo no
ls -l /etc/system-release
yum install mariadb-server -y
systemctl start mariadb
ls -l /var/lib/mysql/mysql.sock
[ -S "/var/lib/mysql/mysql.sock"] && echo yes || echo no
[ -b "/dev/vda"] && echo yes || echo no
[ -d "/dev/vda"] && echo yes || echo no
[ -d "/dev/"] && echo yes || echo no
[ -c "/dev/pts/0"] && echo yes || echo no
8.tr命令:tr是translate的简写,只能翻译单个字符,不能翻译句子
tr --help