第1章 Linux入门
一、Linux基本知识
1、Linux介绍
1.1简介
Linux是一种操作系统,像Windows一样,但是Windows 操作系统,个人终端用的比较多
1.2特点
免费、开源、安全、高效、稳定;处理高并发非常的强,很多企业的项目都部署到Linux服务器上运行
1.3创始人:林纳斯(芬兰人),1991年发布
1.4吉祥物:一只企鹅(tux)
1.5版本
(1)内核版本:一般人接触不到
(2)发行版本:常见的发行版本:RedHat;centOS;Ubuntu
1.6目前主要的操作系统
Windows、Android、Linux、Unix、IOS、macOS
1.7Windows发展的历史
dos1 --> dos2 --> dos3 -->dos4 --> windows95 -->windows98 --> winXP -->vista-->win7-->win8-->win10
2、Linux的搭建
2.1 Linux一般搭建在虚拟机环境中
(1)原因:Linux需要搭建在干净稳定的环境,一般电脑一次只能运行一个操作系统,所以一般选择在虚拟机中搭建其运行环境
(2)使用到的软件
I虚拟机VM10
II Linux发行版本,常用centOS和RedHat
(3)具体软件安装步骤见附件
2.2 Linux远程协议
Linux自带的终端不方便操作,一般我们使用第三方Xshell软件通过Linux的IP地址和管理者权限实现对linux的远程控制
3、Linux目录结构
3.1 各目录介绍
/bin[重点]:(/usr/bin、/usr/local/bin)
是binary的缩写,这个目录存放着最经常使用的命令
/sbin:(/usr/sbin、/usr/local/sbin)
S就是Super User的意思,这里存放的是系统管理员使用的系统管理程序
/home[重点]:
存放普通用户的主目录,在Linux中每个用户都有一个自己得的目录,一般该目录名是以用户的账号命名的
/root[重点]:
该目录为系统管理员,也称为超级权限者的用户主目录
/boot[重点]:
存放的是启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件
/proc:
这个目录存放的是一个虚拟的目录,它是系统内存的映射
/srv:service缩写,该目录存放一些服务启动之后需要提取的数据
/sys:
这是Linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统ysfs
/tmp:这个目录是用来存放一些临时文件的
/dev:类似于Windows的设备管理器,把所有的硬件用文件的形式储存
/media[重点]:
Linux系统会自动识别一些设备,例如:U盘、光驱等等;当识别后,linux会把识别的设备挂载到这个目录下
/mnt[重点]:
系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部的储存挂载在/mnt上,然后进入该目录就可以看到里面的内容了
/opt:这是给主机额外安装软件所摆放的目录,默认为空
/usr/local[重点]:
这是另一个给主机额外安装软件所安装的目录,一般是通过编译源码方式安装的程序
/var[重点]:
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
/selinux:[security-enhanced linux]
SElinux是一种安全子系统,它能控制程序只能访问特定文件
3.2 总结说明
(1)Linux的目录中有且只有一个根目录“/”;
(2)Linux的各个目录存放的内容是规划好的,不能乱放文件;
(3)Linux是以文件的形式管理我们的设备,在Linux系统中,一切皆文件;
(4)Linux的各个文件目录下存放什么内容,必须要有一个认识
4、Linux中文件/目录不同颜色的含义
蓝色 ---- 目录文件
灰色 ---- 普通的文本文件
绿色 ---- 可执行文件
黄色 ---- 和设备有关的文件
红色 ---- 压缩文件或者损坏的软链接文件
浅蓝色 ---- 正常的软链接文件
粉色 ---- 日志文件
5、Linux常用的快捷键
清屏:
tab 键可以补全
上下键可以选择一个输入过的命令
ctrl + u 可以快捷删除光标之前的内容
ctrl + c 结束当前命令,如果没有效果,可以使用 q 退出当前命令
ctrl + z 将当前的任务放在后台执行
二、远程登录Linux
1、为什么要远程登录Linux?
往往项目的服务器是不在工作电脑上的,所以需要通过第三方工具建立主机和服务器的连接,通常使用的连接软件是Xshell
2、Xshell介绍
(1)Xshell是目前最好用的远程登录Linux的操作软件,运行流畅并且完美解决中文乱码问题;
(2)Xshell是一个强大的安全终端模拟软件,它支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议;
(3)Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的
3、Xshell安装和配置
(1)安装软件
(2)连接终端
4、远程上传下载文件Xftp5
4.1 Xftp5介绍
Xftp5是一个基于Windows平台的功能强大的SFTP、FTP文件传输软件;使用Xftp以后,Windows用户能安全的在UNX/Linux和WindowsPC之间传输文件
4.2 软件的安装和配置
(1)软件安装
(2)软件配置
(3)解决乱码问题
三、vi和vim编辑器
1、vi和vim的基本介绍
1.1 所有的Linux系统都会内建vi文本编辑器
1.2 Vim具有程序编辑能力,可以看做是vi的增强版,可以主动的以字体颜色辨别语法的正确性,方便程序设计;且代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广使用
2、vi和vim的三种常见模式
2.1 正常模式
以vim打开一个档案就直接进入一般模式了(这也是默认的模式);在这个模式下,可以使用【上下左右】键来移动光标,可以使用快捷键删除字符、删除整行,也可以使用复制、粘贴来处理文件数据
2.2插入(编辑)模式
按下i、l、o、O、a、A、r、R等任何一个字母之后才会进入编辑模式,一般来说就按i即可
2.3命令行模式
在这个模式中,可以提供相关指令,完成读取、存盘、替换、离开vim、显示行号等动作则是在这个模式下完成的
2.4 三种模式的转化关系
(1)一般模式按i或a进入编辑模式,编辑模式按ESC退出到一般模式;
(2)一般模式按:或 / 进入命令模式,命令模式按ESC退出到一般模式;
(3)在命令模式中的操作快捷键
I :wq à保存并退出
II :q à直接退出(需要没有修改文件)
III :q! à强制退出不保存
3、vi和vim快捷键
3.1 vim常用快捷键
(1)yy:拷贝当前行;拷贝当前行向下的5行:5yy,并粘贴(p)
(2)dd:删除当前行;删除当前行向下5行:5dd
(3)在文件中查找某个单词:(命令行下 /关键字,回车查找,输入n就是查找下一个)
(4)设置文件的行号 à命令行下输入:set nu
(5)取消文件的行号 à命令行下输入:set nonu
(6)编辑/etc/profile文件,正常模式下使用快捷键[G]到文件最低端,使用[gg]到文件最首行
(7)跳转到指定行:一般模式下,先输入行号,再按shift+g跳转
(8)撤销命令:u
在一个文件中输入“hello”,然后又撤销这个动作:u
3.2 vi和vim键盘图
四、Linux开关机和重启及用户登录注销
1、关机和重启命令
1.1 基本介绍
shutdown -h now: 立即关机
shutdown -h 1: 1分钟后关机
halt: 关机
reboot或者是shutdown -r now: 立即重启
sync:把内存的数据同步到磁
2.2 特别注意
不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
2、用户登录和注销
2.1 基本介绍
(1)登录时尽量少用root账户登录,因为root是系统管理员,拥有最大权限,操作失误可能导致系统崩溃;为避免操作失误,可以以普通用户登录,在需要管理员权限是使用su切换到root权限
(2)在提示符下输入logout注销用户
2.2 特别注意
logout注销指令在图形运行级别无效,在Xshell中有效
2.3用户说明
[root@xc ~]#
[当前登录的用户名@主机名 当前所在的(目录)位置标识符]角色
(1)# 管理员权限
(2)$ 普通用户权限
五、用户及用户组的管理
1、用户管理
1.1 基本介绍
1.2 添加用户
(1)基本语法
useradd用户名 创建一个新用户,默认放在/home目录下
useradd -d 指定的目录 新的用户名 创建一个新用户,指定放置的目录
useradd –g 用户组名 用户名 创建一个用户时同时给它分配一个组
执行useradd 用户名这个指令会创建一个用户,同时会创建一个和用户名一样的组
(2)应用实例
Eg:添加一个用户xm并放在police组中
1.3 指定/修改用户密码
(1)基本语法
passwd 用户名
(2)应用实例
Eg:给xiaoming指定密码
1.4 删除用户
(1)基本语法
userdel用户名
(2)应用实例
Eg1:删除用户xm,但是保留家目录
Eg2:删除用户xh以及用户主目录
1.5 完全修改用户名
(1)更改用户名
usermod -l 新用户 旧用户
这只会更改用户名,而其他的东西,比如用户组、家目录、ID 等都保持不变。
(2)杀掉进程(需要root权限)
pkill -9 -u 旧用户
(3)修改家目录
usermod -d /home/新用户名 -m 旧用户名
(4)更改用户UID
usermod -u 2000 新用户名
(5)修改用户组名
groupmod -n 新用户名 旧用户名
1.6 查看当前用户/登录用户
基本语法
whoami/who am i
2、用户组管理
2.1 基本介绍
可以方便对多个有共同性质的用户进行统一管理
2.2 新增用户组
(1)基本指令
groupadd 组名
(2)应用实例
2.3 删除用户组
(1)基本指令
groupdel 组名
(2)应用实例
2.4 修改用户组
(1)基本指令
usermod –g 用户组 用户名 修改用户所在组
usermod -G 用户组 用户名 给用户设定附加组
groupmod -n 新用户名 旧用户名 修改组名
(2)应用实例
Eg:添加一个ws用户,添加群组组testteam,由于工作关系ws兼任devteam组,ws设定密码,切换ws用户下,查看自己的UID和gid所属组
3、用户和用户组的相关文件
3.1 /etc/passwd文件
用户(user)的配置文件,记录用户的各种信息
3.2 /etc/shadow文件
口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
3.3 /etc/group文件
组(group)的配置文件,记录Linux包含的组信息
每行含义:组名:口令:组标识号:组内用户列表
六、指定运行级别
1、运行级别说明
0:关机
1:单用户(找回密码)
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形化界面
6:系统重启
常用的级别是3和5,要修改的默认运行级别可以修改配置文件/etc/initdefault:这一行中的数字
2、切换运行级别的指令
2.1 基本语法:Init [0 1 2 3 4 5 6]
2.2 应用实例
Eg1:通过init来切换不同的运行级别,比如5 à,然后关机
Eg2:如何找回root密码(必须在Linux自带终端上操作)
开机à在引导时输入回车键à看到一个界面输入eà看到一个新界面选中第二行再输入eà在这一行最后输入1,然后回车à再次输入b,这时就进入单用户模式了à使用password指令来修改密码
Eg3:如何设置默认的运行级别
第2章 Linux实用指令(上)
一、帮助类
1、man指令
当对某个指令不熟悉时。可以使用Linux提供的帮助指令来了解这个指令的使用方法
1.1 基本语法:man 命令
1.2 应用实例
Eg:查看ls命令的帮助信息
2、help指令
1.1 基本语法:命令 --help
1.2 应用实例
Eg:查看cd命令的帮助信息
二、文件目录类
1、pwd指令
1.1 基本语法:pwd 显示当前工作目录的绝对路径
1.2 应用实例:显示当前工作目录的绝对路径
2、ls指令
2.1 基本语法:ls 目录或者是文件
2.2 常用选项:
(1) -a:显示当前目录所有的文件和目录,包括隐藏的文件
(2) -A:用于显示所有文件,包括隐藏文件,但是不显示 . / .. 文件,其中 . 表示当前目录,..表示上级目录
(3) -l:以列表的方式显示文件及其详细信息
(4) -a -l:以列表的方式显示所有的文件和目录,包括隐藏的文件
(5)-t:按照最近修改的时间进行排序,倒序(如果没有修改,就按照首次创建的时间排序)
(6)-d:查看本目录的属性
(7)-h:人性化显示文件的大小(默认字节,工作中学习中,习惯用M字节)
(8)-i:显示文件的 inode ,即文件编号,Linux 中实际上是通过inode 去找文件的
2.3 应用实例:查看当前目录的所有内容信息
3、cd指令
3.1 基本语法:cd [参数] 切换到指定目录
3.1 常用参数:
cd或者cd:回到自己的家目录
cd .. :回到当前目录的上一级目录
3.3 思考:当前工作路径在/root,希望进入到/home下
绝对路径:/home,即从根目录下开始定位
相对路径:../home,从当前工作目录开始定位到需要的目录去
4、mkdir指令:make directory à用于创建目录
4.1 基本语法:mkdir [选项] 要创建的目录名
4.2 常用选项:-p:创建多级目录
4.3 应用案例:
(1)创建一个目录:/home/dog
(2)创建多级目录:/home/anima/tiger
5、rmdir指令:删除空目录
5.1 基本语法:rmdir [选项] 要删除的空目录名
5.2 应用实例:删除一个目录/home/dog
5.3 使用细节:rmdir删除的是空目录。如果目录下有内容是无法删除的,如果要删除非空目录,可以使用rm -rf;
6、touch指令:创建空文件
6.1 基本语法:touch 文件名称
6.2 应用实例:创建一个空文件hello.txt
7、cp指令:拷贝文件到指定目录
7.1 基本语法:cp [选项] 原文件
7.2 常用选项:-r 递归复制整个文件夹
7.3 应用实例:使用细节:强制复制不提示的方法:\cp
(1)将/home/aaa.txt拷贝到/home/bbb目录下
(2)将递归复制整个文件夹:将/home/do整个目录拷贝到/home/animal目录下
(3)将多个文件一起复制到指定目录
cp文件1,文件2,文件n} 目录名
(4)将多个目录一起复制到指定目录
cp文件1,文件2,文件n} 目录名
8、rm指令:移除文件或目录
8.1 基本语法:rm [选项] 要删除的文件或目录
8.2 常用选项
(1)-r:递归删除整个文件夹
(2)-f:强制删除不提示,但是不能删目录
(3)-rf:强制删除目录或者文件,没有任何提示信息,谨慎使用
8.3 rm指令总结总结:
(1)rm -rf a/ ---- 表示将a目录彻底删除(包含了a目录及它内部的所有文件及下级目录)
(2)rm -rf a/* ---- 表示将目录a 中所有文件和子目录都删除,但是a目录保留
(3)rm -rf /* ---- 禁止使用,会将根目录下所有的内容全部删除
8.4 应用实例:
8.3.1将/home/aaa.txt删除
8.3.2递归删除整个文件夹/home/bbb
9、mv指令:移动文件与目录或重命名
9.1 基本语法:mv 旧文件 新文件名
mv 文件名 新的路径
9.2 应用实例:
(1)将/home/aaa.txt文件重命名为pig.txt
(2)将/home/pig.txt文件移动到/root目录下
10、cat指令:查看文件内容(只能看不能修改)
10.1 基本语法:cat [选项] 要查看的文件
10.2 常用选项:
(1)-n:文件内容和行号一起显示
(2)-b:空行不显示行号
10.3 应用实例:/etc/profile
10.4 使用细节:只能浏览文件,不能修改文件,为了浏览方便,一般会带上管道符
11、more指令
more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容;且more指令中的内置了若干快捷键
11.1 基本语法:more 要查看的文件
11.2 操作说明:
空格键:代表向下翻一页
Enter:代表向下翻一行
q:代表立刻离开more,不再显示该文件内容
Ctrl + F:向下滚动一屏
Ctrl + B:返回上一屏
=:输出当前行的行号 :f:显示文件名和当前行号
+n:n 需要替换为具体的数字,表示从第n 行开始显示
-n:n 需要替换为具体的数字,表示一页显示 n 行信息
12、less指令
less用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。
àless指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率
12.1 基本语法:less 要查看的文件
12.2 操作说明:
空格键:向下翻动一页
回车键:滚动一行
[pagedown]:向下翻动一页
[pageup]:向上翻动一页
/子串:向下搜寻【子串】的功能:n à向下查找à向上查找
?子串:向上搜寻【子串】的功能:n à向上查找à向下查找
q:离开less这个程序
13、>指定和>>指令
> 输出重定向:会将原来的文件内容覆盖
>> 追加:不会覆盖原来的内容,而是追加到文件尾部
13.1 基本语法:
(1) ls -l > 文件 (功能描述:列表内容写入文件a.txt中(覆盖写))
说明:ls -l > a.tx:将ls –l显示的内容覆盖写入到a.txt文件中,如果改文件不存在,就创建该文件
(2) ls –文件 (功能描述:列表内容追加到文件a.txt的末尾)
说明:ls –文件:将ls -l显示的内容追加到后面的文件中
(3) cat 文件1 > 文件2 (功能描述:将文件1内容覆盖到文件2)
(4) echo “内容”文件
补充:echo $PATH 查看环境变量
echo “文本内容”直接输出文本
说明:echo “内容”文件:将内容覆盖添加到文件中,如果没有该文件就创建一个
echo “内容”文件:将内容追加加到文件末尾
13.2 应用实例:
(1)将/home目录下的文件列表写入到info.txt中
(2) 将当前日历信息追加到/home/mycal文件中
14、head指令
用于显示输出文件的开头部分,默认显示文件的前10行内容
14.1 基本语法:
(1) head 文件名 (功能描述:显示改文件前10行)
(2) head -n 文件名/文件路径 (功能描述:显示该文件的头n行内容)
15、tail指令
用于输出显示文件尾部的内容,默认显示后10行的内容
15.1基本语法:
(1) tail 文件名 (功能描述:显示改文件后10行)
(2)tail -n文件名/文件路径 (功能描述:显示该文件的后n行内容)
(3) tail -f 文件名 (功能描述:实时追踪该文档的所有更新)
15.2 应用实例:实时监控mtdate.txt,看看该文件变化时,是不是能及时看到变化
16、ln指令
软链接也叫符号链接,类似于Windows里的快捷方式,主要存放了链接其他文件的路径
16.1 基本语法:ln –s [原文件名或者路径][软链接名] (功能描述:给源文件创建一个软链接)
16.2 应用实例:
Eg1:在/home目录下创建一个软连接linkToRoot,连接到/root目录
Eg2:删除软连接linkToRoot
17、history指令
查看已经执行过的历史指令,也可以执行历史指令
17.1 基础语法:history(不加参数)
17.2 应用案例:
Eg1:显示所有的历史指令
Eg2:显示最近使用过的10个指令
Eg3:执行历史编号为97的文件
三、时间日期类
1、date指令
1.1 基本语法:
1)date (功能描述:显示当前时间)
2)date +%Y (功能描述:显示当前年份)
3)date +%m (功能描述:显示当前月份)
4)date +%d (功能描述:显示当前是哪一天)
5)date “+%Y-%m-%d %H:%M:%S” (功能描述:显示年月日时分秒)
1.2 应用实例:
Eg1:显示当前时间信息
Eg2:显示当前时间年月日
Eg3:显示当前时间年月日时分秒
2、cal指令:查看当前日历
2.1 基本语法:cal [选项] (功能描述:不加选项,显示本月日历)
2.2 应用实例
Eg1:显示当前日历
Eg2:显示2020年日历
四、搜索查找类
1、find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端
基本语法
find [指定查找目录] [查找规则] [查找完后执行的action]
1.2 选项说明
(1)根据文件名查找
-name<文件名>:按照指定的文件名查找文件
-iname<文件名>:按照指定的文件名查找文件,不区分大小写
(2)根据文件所属用户和组来查找文件
-user 根据属主来查找文件
-group 根据属组来查找文件
(3)根据uid 和 gid来查找用户
find /tmp -uid 500 查找uid是500 的文件
find /tmp -gid 1000 查找gid是1000的文件
(4)-a and -o and –not的使用
-a 连接两个不同的条件(两个条件必须同时满足)
-o 连接两个不同的条件(两个条件满足其一即可)
-not 对条件取反的
(5)根据文件时间戳的相关属性来查找文件
-atime 最近一次访问时间(active)
-mtime 最近一次内容修改时间(make)
-ctime 最近一次属性修改时间(type)
(6)根据文件类型来查找文件
-type
普通文件
目录文件
链接文件
块设备文件
字符设备文件
管道文件
文件
(7)根据大小来查找文件
find(+n:大于;-n:小于;n:等于)
(8)根据文件权限查找文件
find –perm
find /tmp -perm 755 //查找在/tmp目录下权限是755的文件
find /tmp -perm +222 //表示只要有一类用户(属主,属组,其他)的匹配写权限就行
find /tmp -perm -222 //表示必须所有类别用户都满足有写权限
(3)-user<用户名>:查找属于指定用户名的所有文件
(4)-size<文件大小>:按照指定的大小查找文件
1.3应用实例
Eg1:按文件名:根据名称查找/home目录下的hello.txt文件
Eg2:按拥有者:查找/opt目录下,用户名称为nobody的文件
Eg3:查找整个Linux系统下大于20MB的文件(+n:大于;-n:小于;n:等于)
2、locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度快。为保证查询结果的精确度,管理员必须定期更新locate时刻
2.1 基本语法:locate 搜索文件
2.2 特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
2.3应用实例
Eg1:请使用locate指令快速定位hello.txt文件所在目录
Eg2:搜索etc目录下所有以sh开头的文件
locate /etc/sh
Eg3: 搜索用户主目录下,所有以m开头的文件
locate ~/m
Eg4: 搜索用户主目录下,所有以m开头的文件,并且忽略大小写
locate -i ~/m
3、grep指令
grep过滤查找,管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理
3.1 基本语法:grep [选项] 查找内容 源文件
3.2 常用选项
(1)-n:显示匹配行和行号
(2)-i:忽略字母大小写
(3)-v:grep –v 内容 文件名
3.3应用实例
Eg1:请在hello.txt文件中,查找“yes”所在行,并显示出行号
Eg2:请在hello.txt文件中,查找不含“hello”的行,并显示出行号
Eg3:请在hello.txt文件中,查找以“hello”开头的行,并显示出行号
语法1:grep “\<过滤内容”文件名à grep “\<hello”文件名
语法2:grep ^过滤内容 文件名 à文件名
Eg4:请在hello.txt文件中,查找以“hello”结尾的行,并显示出行号
语法1:grep “过滤内容\>”文件名à grep “hello\>”文件名
语法2:grep 过滤内容$ 文件名 à文件名
Eg4:请在hello.txt文件中,查找以“hello”开头和结尾的行,并显示出行号
4、which指令
which指令查找可执行文件位置,一般指命令形语法文件
5、whereis指令
Whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)
五、压缩和解压缩类
1、gzip和gunzip指令
gzip用于压缩文件,gunzip用于解压文件
1.1 基本语法
(1)gzip 文件 (功能描述:压缩文件,只能将文件压缩成*.gz文件)
(2)gunzip 文件.gz (功能描述:解压缩文件)
1.2 应用实例
Eg1:gzip压缩,将/home下的hello.txt文件进行压缩
Eg2:gunzip解压缩,将/home下的hello.txt.gz文件进行解压缩
2、zip和unzip指令
zip用于压缩文件,unzip用于解压文件,这个在项目打包发布中很有作用
2.1 基本语法
(1)zip [选项] xxx.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令
(2)unzip [选项] xxx.zip (功能描述:解压缩文件)
2.2 常用选项
(1)zip的常用选项
-r:递归压缩,即压缩目录
(2)unzip的常用选项
-d<目录>:指定解压后文件的存放目录
2.3应用实例
Eg1:将/home下的所有文件进行压缩成mypckage.zip
Eg2:将mypckage.zip解压到/opt/tmp目录下
3、tar指令
tar指定是打包指令,最后打包的文件是.tar.gz的文件
3.1 基本语法
tar [选项] xxx.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
3.2 选项说明
(1)-c:产生.tar打包文件
(2)-v:显示详细信息
(3)-f:指定压缩后的文件名
(4)-z:打包同时压缩
(5)-x:解压缩.tar文件
(6)-zcvf:打包压缩并显示详细信息,然后指定压缩后的文件名
(7)-zxvf:打包解压并显示详细信息,然后指定压缩后的文件名
3.3 应用实例
Eg1:压缩多个文件,将/home/a1.txt和/home/a2.txt压缩成a.tar.gz
Eg2:将/home的文件夹压缩成myhome.tar.gz
Eg3:将a.tar.gz解压到当前目录
Eg4:将myhome.tar.gz解压到/opt/tmp目录下(该目录必须存在,否则会报错)
第2章 Linux实用指令(下)
六、编辑器类
1、vim指令
1.1 基本语法
(1)vim filename :打开或新建文件,并将光标置于第一行首
(2)vim:打开文件,并将光标置于第n行首
(3)vim:打开文件,并将光标置于最后一行首
(4)vim:在上次正用vi编辑时发生系统崩溃,恢复filename
(5)vim filename....filename :打开多个文件,依次编辑
1.2 应用实例
Eg:打开/home/abc.txt,并将光标置于尾行
2、sed指令
sed是一种非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,并将结果发送到屏幕
引用:https://www.cnblogs.com/edwardlost/archive/2010/09/17/1829145.html
2.1 定址
(1)地址是一个数字,则表示行号;用“$"符号,则表示最后一行;
sed -n '3p' test 只打印第三行
sed -n '$p' test 只打印最后一行
(2)只显示指定行范围的文件内容;
sed -n '1,3p' test 只查看文件的第1行到第3行
(3)地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示
sed '2,5d' test 删除第二到第五行
sed '/hello/,/pen/d' test 删除包含“hello”的行到“pen”的行之间的行
sed '/hello/,4d' test 删除包含“hello”的行到第4行的内容
2.2 命令与选项
(1)基本语法
sed [选项] '指令' 文件名
sed [选项] -f 脚本文件 文件名 以某个脚本文件来处理文件
(2)常用选项
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
L 列出非打印字符
P 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
-e 进行多项编辑,即对输入行应用多条sed命令时使用
-n 取消默认的输出
-f 指定sed脚本的文件名
2.3 正则表达式元字符
^ 行首定位符 /^my/ 匹配所有以my开头的行
$ 行尾定位符 /my$/ 匹配所有以my结尾的行
. 匹配除换行符以外的单个字符 /m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行
* 匹配零个或多个前导字符 /my*/ 匹配包含字母m,后跟零个或多个y字母的行
[] 匹配指定字符组内的任一字符 /[Mm]y/ 匹配包含My或my的行
[^] 匹配不在指定字符组内的任一字符 /[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行
& 保存查找串以便在替换串中引用 s/my/**&**/ 符号&代表查找串。my将被替换为**my**
\< 词首定位符 /\
\> 词尾定位符 /my\>/ 匹配包含以my结尾的单词的行
x\{m\} 连续m个x /9\{5\}/ 匹配包含连续5个9的行
x\{m,\} 至少m个x /9\{5,\}/ 匹配包含至少连续5个9的行
x\{m,n\} 至少m个,但不超过n个x /9\{5,7\}/ 匹配包含连续5到7个9的行
2.4 应用实例
(1)p指令
P指令用于显示模式空间的内容。默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认的打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容。
<1> sed '/hello/p' test
#默认情况下,sed把所有输入行都打印在标准输出上。如果某行匹配到hello,p命令将把该行另外打印一遍
<2> sed -n '/hello/p' test
#选项-n取消sed默认的打印,p命令把匹配模式hello的行打印一遍。
(2)d指令
命令d用于删除输入行。sed先将输入行从文件复制到模式空间里,然后对该行执行sed命令,最后将模式空间里的内容显示在屏幕上。如果发出的是命令d,当前模式空间里的输入行会被删除,不被显示。
<1>sed '$d' test
#删除最后一行,其余的都被显示
<2>sed '/hello/d' test
#删除包含hello的行,其余的都被显示
(3)s指令
<1>sed 's/hello/Hi/g' haha
#命令末端的g表示在行内进行全局替换,也就是说如果某行出现多个hello,所有的hello都被替换为Hi。
<2>sed -n '1,4s/haha$/gun/gp' haha
#取消默认输出,处理1到4行里匹配以haha结尾的行,把行内所有的haha替换为gun,并打印到屏幕上。
(4)e选项
-e是编辑命令,用于sed执行多个编辑任务的情况下。在下一行开始编辑前,所有的编辑动作将应用到模式缓冲区中的行上。
sed -e '1,3d' -e '4,6s/haha$/gun/' haha
#选项-e用于进行多重编辑。第一重编辑删除第1-3行。第二重编辑将第4到-6行出现在行末尾的haha替换为gun。因为是逐行进行这两项编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。
(5)r指令
r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上。
(6)w指令
sed -n '/hrwang/w me.txt' datafile
(7)a\指令
a\ 命令是追加命令,追加将添加新文本到文件中当前行(即读入模式缓冲区中的行)的后面。所追加的文本行位于sed命令的下方另起一行。如果要追加的内容超过一行,则每一行都必须以反斜线结束,最后一行除外。最后一行将以引号和文件名结束。
七、网址通讯类
1、ifconfig指令
ifconfig 命令用来查看和配置网络设备
1.1基本语法
ifconfig [网络设备] [参数]
1.2 常见选项
(1)up 启动指定网络设备/网卡
(2)down 关闭指定网络设备/网卡
(3)-a 显示全部接口信息
(4)-s 显示摘要信息
2、ping
ping命令用于:确定网络和各外部主机的状态
2.1 基本语法
ping [参数] [主机名或IP地址]
2.2 应用实例
Eg:ping的通的情况
八、系统资源查看类
1、top指令
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
https://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
1.1 基本语法
top [选项]
1.2 常用选项
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数
1.3 应用实例
实例1:显示进程信息
2、ps指令
2.1 基础语法
用来显示当前进程的状态
2.2 常用选项
-a 列出所有进程(显示同一终端下的所有程序)
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
-e 列出进程,等于“-A”显示所有进程, 与-a略有区别,这里不做区分
3、vmstat指令
用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况
九、磁盘管理类
1、df指令
显示指定磁盘文件的可用空间
2、du指令
显示每个文件和目录的磁盘使用空间
3、mount指令
挂载
第3章 组管理和权限管理
一、Linux组的基本介绍
在Linux中的每个用户必须属于一个组,不能独立于组外;在Linux中每个文件有所有者、所在组、其他组的概念
所有者:一般为文件(目录)的创建者,谁创建的谁就是所有者;
所在组:当某个用户创建了一个文件后。这个文件所在的组就是该用户所在的组
其他组:除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
1、文件/目录所有者
1.1 概念
一般为文件(目录)的创建者,谁创建的谁就是所有者
1.2 查看文件/目录的所有者
(1)基本指令:ls -l(-ahl)
(2)应用实例
Eg:创建一个组police,再创建一个用户tom,然后使用tom来创建一个文件
(3)组有关命令
创建组:groupadd 组名
删除组:groupdel 组名
创建用户:useradd –g组名 用户名:在该组下创建该用户
删除用户:userdel -r 用户名
查看用户信息:id 用户名
1.3 修改文件的所有者
(1)指令:chown 用户名 文件名
(2)应用实例
Eg:用root创建一个apple.txt文件,然后将其所有者修改为tom
2、文件/目录所在组
2.1 概念
当某个用户创建了一个文件后,这个文件所在的组就是该用户所在的组
2.2 查看文件/目录的所在组
(1)基本指令:ls -l 简写 ll
(2)应用实例
2.3 修改文件所在组
(1)基本指令:chgrp 组名 文件名
(2)应用实例
Eg:使用root用户创建文件arange.txt,然后将该文件所在组修改到police
3、其他组
3.1 概念
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
3.2 改变用户所在组
在添加用户时,可以将该用户指定添加到哪个组;
(1)基本指令
usermod -g 组名 用户名
usermod -d 目录名 改变该用户登录的初始目录
(2)应用实例
创建一个土匪组(bandit),将tom这个用户从原来所在的police组,修改到bandit组中
二、权限的基本介绍
1、文件的三种权限
详细解释一下,ll显示的完整属性信息,分为七个组成部分
1.1 三种权限的表示
总共是10个位数构成,分为4个小部分
第一小部分(第一位):表示文件或者目录的属性;
"d" 表示的是目录;
"-" 表示的是普通文件;
"l" 表示软链接文件(类似于windows 中的快捷方式);
"c" 表示的是字符设备(键盘、鼠标);
"b" 表示的是块文件(硬盘)
第二小部分(2~4位):表示文件/目录的所有者的权限,
r 表示可读
w 可写
x 可执行
- 表示没有对应的权限
第三小部分(5~7位):表示文件/目录的所在群组的其他用户的权限信息
r 表示可读
w 可写
x 可执行
- 表示没有对应的权限
第四小部分(8~10位):表示的剩下的其他用户对应的权限信息
r 表示可读
w 可写
x 可执行
- 表示没有对应的权限
1.2 rwx权限详解
(1)rwx作用到文件
[r]代表可读(read):可以读取、查看
[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除该文件的前提是对该文件所在的目录有可写权限
[x]代表可执行(execute):可以执行
(2)rwx作用到目录
[r] 代表可读(read):可以读取,ls查看目录内容
[w] 代表可写(write):可以修改,目录内创建+删除+重命名
[x] 代表可执行(execute):可以进入该目录
2、修改文件/目录权限
chmod : 修改文件/目录的权限,重新设定不同的访问权限,即控制文件可以被人使用
2.1 基本语法
chmod [参数] 文件/目录名
2.2 常用选项
-R:用于修改目录,将目录中所有文件及子目录的权限同步修改;如果不加参数,只修改本级别的权限
()将权限修改成具体的什么权限? rwx ,即 权限值
2.3 常用方法
方法一:权限掩码法(umask法)
(1)将需要修改的权限信息用二进制表示出来,0 表示没有权限,1表示有权限
(2)将转换后的二进制数字每3位进行分隔
(3)将分隔后的数字转换为八进制或者十进制
(4)将转换的八进制或者十进制拼接到命令中
Eg:将文件读写权限设置为: rw-r--r--
(1)rw-r--r-- à 110100100
(2)110100100 à 110 100 100
(3)110 100 100 à 6 4 4
(4)chmod 644 文件名/目录名
rwxr-xr-x à 111 101 101 à 7 5 5
==》 如果给所有用户都具备所有rwx 权限,就使用 chmod 777 文件名/目录名
==》 总结:死记硬背 à按照每个权限类型对应的数字,3位一加就是权限信息
r: 4 w:2 x:1
结论: rwx ---- 4+2+1 7
rw- ---- 4+2+0 6
r-x ---- 4+0+1 5
方法二:ugo 赋值法:通过+、-、=变更权限
(1)chmod文件/目录名
(2)chmod文件/目录名
(3)chmod a-x 文件/目录名
u ---- 所有者 user
g ---- 所在群组剩下的人,group
o ---- 群组之外的其他人
a ---- 所有人 ,包括前面3者 all
Eg: 将文件读写权限由-rw-r--r--修改为:-r--r-xrx-
分析:-rw-r--r-- à -r--r-xrx- u+w,g+x,o+x
3、修改文件所有者
3.1 基本语法
(1)chown newowner file 改变文件所有者
(2)chown newowner:newgroup file 改变文件的用户所有者和所有组
(3)-R:同步修改本级别及子目录的归属角色
3.2案例演示
Eg1:请将/home/abc.txt文件的所有者修改成tom
Eg2:请将/home/kkk目录下所有的文件和目录的所有者都修改成tom
4、修改文件所在组
4.1 基本语法
chgrp newgroup file 改变文件的所有组
4.2 应用实例
Eg1:请将/home/abc.txt文件所在的组修改成shaolin
Eg2:请将/home/kkk目录下所有的文件和目录的所在的组都修改成shaolin
第4章 Shell脚本
一、shell概述
1、shell的介绍
(1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
(2)Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调 用Linux系统命令
2、软件测试为什么要学shell?
(1)对Linux加深理解,会写一些shell脚本完成一些简单操作;
(2)shell主要运用于软件的运维方向,学习shell为以后转型做铺垫
3、shell的分类
(1)Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Shell是贝尔实验室开发的,最早开始在1979年Unix上就在使用Bourne Shell,其主文件名为sh,因功能简单基本上已被淘汰
(2)Bourne Again Shell(/bin/bash)
GNU操作系统上默认的Bourne Again Shell
(3)C Shell(/usr/bin/csh)
C Shell是SUN公司开发的,主要在BSD版的Unix系统中使用,因其语法和C语言相似而得名
(4)K Shell(/usr/bin/ksh)
K Shell是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。
(5)Shell for Root(/sbin/sh)
总结:Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。
Bourne家族主要包括:sh、ksh、Bash、psh、zsh
C家族主要包括:csh、tcsh
二、shell脚本如入门
1.脚本格式
脚本以#!/bin/bash开头(指定解析器)
2.第一个Shell脚本:helloworld
(1)需求:创建一个Shell脚本,输出helloworld
(2)应用实例
在helloworld.sh中输入如下内容
#!/bin/bash #!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行
echo "helloworld"
(3)脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
<1>sh+脚本的相对路径
<2>sh+脚本的绝对路径
<3>bash+脚本的相对路径
<4>bash+脚本的绝对路径
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
<1>首先要赋予helloworld.sh 脚本的+x权限
chmod 权限掩码 shell文件
<2>执行脚本
a 相对路径
b 绝对路径
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
3.第二个Shell脚本:多命令处理
(1)需求:
在/home/xc/目录下创建一个test.txt,在test.txt文件中增加“hello,world!”
(2)应用实例:
#!/bin/bash
cd /home/xc
touch hello.txt
echo "hello,world!" >> test.txt
三、Shell中的变量
1、系统变量
1. 1 常用系统变量
$HOME、$PWD、$SHELL、$USER等
1.2 案例实操
(1)查看系统变量的值
(2)显示当前Shell中所有变量:set
[root@localhost home]# $set
2、自定义变量
2.1 基本语法
(1)定义变量:变量=值
(2)撤销变量:unset 变量
(3)声明静态变量:readonly变量,注意:不能unset
2.2 变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
2.3 案例实操
(1)定义变量A
(2)给变量A重新赋值
(3)撤销变量A
(4)声明静态的变量B=2,不能unset
(5)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
(6)变量的值如果有空格,需要使用双引号或单引号括起来
(7)可把变量提升为全局环境变量,可供其他Shell程序使用
export 变量名
vim helloworld.sh
在helloworld.sh文件中增加echo $B
#!/bin/bash
echo "helloworld"
echo $B
./helloworld.sh
Helloworld
发现并没有打印输出变量B的值。
export B
./helloworld.sh
3、位置参数变量:$n、$#、$*、$@
1、特殊变量:$n
1.1 基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
1.2 案例实操
输出该脚本文件名称、输入参数1和输入参数2 的值
2、特殊变量:$#
2.1 基本语法
$# (功能描述:获取所有输入参数个数,常用于循环)。
2.2 案例实操
(1)获取输入参数的个数
3、特殊变量:$*、$@
3.1 基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
3.2 案例实操
(1)打印输入的所有参数
(2)说明$*和$@的区别
4、特殊变量:$?
4.1 基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
4.2 案例实操
判断helloworld.sh脚本是否正确执行
4、预定义变量:$?、$$、$!
$$:当前进程的进程号(PID) à echo $$
$!:后台运行的最后一个进程的进程号(PID) à echo $!
四、运算符
1.基本语法
(1)“$((运算式))”或“$[运算式]”
(2)expr + , - , \*, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
(3)使用bc命令
2.案例实操:
(1)计算3+2的值
(2)计算3-2的值
(3)计算(2+3)X4的值
(a)expr一步完成计算
使用 expr命令 (其中做乘的时候*号要用斜杠进行转义)
(b)采用$[运算式]方式
(c)使用bc指令
五、条件判断
1. 基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。
2. 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -ne 不等于(Not equal)
-gt 大于(greater than) -ge 大于等于(greater equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence)
-d 文件存在并是一个目录(directory)
3.案例实操
(1)23是否大于等于22
(2)/home/xc/hello.txt是否具有写权限
(3)/home/xc/hello.txt目录中的文件是否存在
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
六、流程控制(重点)
1、if 判断
1.1 基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
1.2 案例实操
(1)输入一个数字,如果是1,则输出a,如果是2,则输出b,如果是其它,什么也不输出。
(2)输入两个数字,判断这两个数字是否相等
2、多分支语句
if [ 条件判断式1 ];then
语句1
elif [ 条件判断式2 ];then
语句2
else 语句3
fi
2、case语句
2.1 基本语法
case语句和if...elif...else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系
case $变量名 in
值1")
如果变量的值等于值1,则执行程序1
;;
值2")
如果变量的值等于值2,则执行程序2
;;
省略其他分支…
)
如果变量的值都不是以上的值,则执行此程序
;;
esac
2.2 注意事项:
(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于java中的break。
(3)最后的“*)”表示默认模式,相当于java中的default。
2.3 案例实操
输入一个数字,如果是1,则输出a,如果是2,则输出b,如果是其它,什么也不输出。
3、for循环
3.1 基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
3.2 案例实操
利用for循环实现从1加到100,并输出结果
3.3 基本语法2
for 变量 in 值1 值2 值3…
do
程序
done
3.4 案例实操
(1)打印所有输入参数
(2)比较$*和$@区别
4、while 循环
4.1 基本语法
while [ 条件判断式 ]
do
程序
done
4.2 案例实操
从1加到100
5、until 循环
5.1 基本语法
until循环和while循环相反,until循环时只要条件判断式不成立则进行循环,一旦循环条件成立,则终止循环
until [ 条件判断式 ]
do 语句
done
5.2 案例实操
从1加到100
七、read读取控制台输入
1. 基本语法
read(选项)(参数)
2. 常用选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)
3. 参数
变量:指定读取值的变量名
4. 案例实操
提示6秒内,读取控制台输入的名称
八、函数
1、系统函数
1.Basename函数
1.1 基本语法
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
basename [字符串 /路径] [后缀] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
1.2 常用选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
1.3 案例实操
(1)截取该/home/atguigu/banzhang.txt路径的文件名称
2、dirname函数
2.1 基本语法
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
2.2 案例实操
(1)获取banzhang.txt文件的路径
2、自定义函数
1.基本语法
function 函数名()
{
Action;
[return int;]
}
函数名
2.经验技巧
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
3.案例实操
(1)计算两个输入参数的和
九、Shell工具(重点)
1、cut
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1.1 基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
1.2 选项参数说明
表1-55
选项参数 | 功能 |
-f | 列号,提取第几列 |
-d | 分隔符,按照指定分隔符分割列 |
1.3 案例实操
(1)数据准备
touch cut.txt
vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
(2)切割cut.txt第一列
cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le
(3)切割cut.txt第二、三列
cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le
(4)在cut.txt文件中切割出guan
cat cut.txt | grep "guan" | cut -d " " -f 1
guan
(5)选取系统PATH变量值,第2个“:”开始后的所有路径:
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin
echo $PATH | cut -d: -f 2-
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/atguigu/bin
(6)切割ifconfig 后打印的IP地址
ifconfig eth0 | grep "inet addr" | cut -d: -f 2 | cut -d" " -f1
192.168.1.102
2、sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
2.1 基本用法
sed [选项参数] ‘command’ filename
2.2 选项参数说明
表1-56
选项参数 | 功能 |
-e | 直接在指令列模式上进行sed的动作编辑。 |
2.3 命令功能描述
表1-57
命令 | 功能描述 |
a | 新增,a的后面可以接字串,在下一行出现 |
d | 删除 |
s | 查找并替换 |
2.4 案例实操
(0)数据准备
touch sed.txt
datas]$ vim sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
(1)将“mei nv”这个单词插入到sed.txt第二行下,打印。
sed '2a mei nv' sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai
le le
cat sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
注意:文件并没有改变
(2)删除sed.txt文件所有包含wo的行
sed '/wo/d' sed.txt
dong shen
guan zhen
lai lai
le le
(3)将sed.txt文件中wo替换为ni
sed 's/wo/ni/g' sed.txt
dong shen
guan zhen
ni ni
lai lai
le le
注意:‘g’表示global,全部替换
(4)将sed.txt文件中的第二行删除并将wo替换为ni
sed -e '2d' -e 's/wo/ni/g' sed.txt
dong shen
ni ni
lai lai
le le
3、awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
3.1 基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
3.2 选项参数说明
表1-55
选项参数 | 功能 |
-F | 指定输入文件折分隔符 |
-v | 赋值一个用户定义变量 |
3.3 案例实操
(0)数据准备
sudo cp /etc/passwd ./
(1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
awk -F: '/^root/{print $7}' passwd
/bin/bash
(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。
awk -F: '/^root/{print $1","$7}' passwd
root,/bin/bash
注意:只有匹配了pattern的行才会执行action
(3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
awk -F : 'BEGIN{print "user, shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"}' passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
。。。
atguigu,/bin/bash
dahaige,/bin/zuishuai
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
(4)将passwd文件中的用户id增加数值1并输出
awk -v i=1 -F: '{print $3+i}' passwd
1
2
3
4
3.4 awk的内置变量
表1-56
变量 | 说明 |
FILENAME | 文件名 |
NR | 已读的记录数 |
NF | 浏览记录的域的个数(切割后,列的个数) |
案例实操
(1)统计passwd文件名,每行的行号,每行的列数
awk -F: '{print "filename:" FILENAME ", linenumber:" NR ",columns:" NF}' passwd
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
(2)切割IP
ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk -F " " '{print $1}'
192.168.1.102
(3)查询sed.txt中空行所在的行号
awk '/^$/{print NR}' sed.txt
5
4、sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
4.1 基本语法
sort(选项)(参数)
表1-57
选项 | 说明 |
-n | 依照数值的大小排序 |
-r | 以相反的顺序来排序 |
-t | 设置排序时所用的分隔字符 |
-k | 指定需要排序的列 |
参数:指定待排序的文件列表
4.2 案例实操
(0)数据准备
touch sort.sh
vim sort.sh
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
(1)按照“:”分割后的第三列倒序排序。
sort -t : -nrk 3 sort.sh
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6
十、企业真实面试题(重点)
1、京东
问题1:使用Linux命令查询file1中空行所在的行号
答案:
awk '/^$/{print NR}' sed.txt
5
问题2:有文件chengji.txt内容如下:
张三
李四
王五
问题3:使用Linux命令计算第二列的和并输出
cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'
150
2、搜狐&和讯网
问题1:Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?
#!/bin/bash
if [ -f file.txt ]; then
文件存在!"
else
文件不存在!"
fi
3、新浪
问题1:用shell写一个脚本,对文本中无序的一列数字排序
[root@CentOS6-2 ~]# cat test.txt
9
8
7
6
5
4
3
2
10
1
[root@CentOS6-2 ~]# sort -n test.txt|awk '{a+=$0;print $0}END{print "SUM="a}'
1
2
3
4
5
6
7
8
9
10
SUM=55
4、金和网络
问题1:请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符”shen”的文件名称
grep -r "shen" /home | cut -d ":" -f 1
/home/atguigu/datas/sed.txt
/home/atguigu/datas/cut.txt