目录
第一章、Linux概述
一、Linux的概念
(1)Linux=Linux-Kernel(内核)+自由发行的软件,
(2)Linux是一个开源的,可以自由发布的系统软件。
(3)Linux 之父: Linus -----林纳斯-----91年发布的
(4)Linux内核: http://www.kernel.org
二、Linux的特点
(1)与UNIX兼容
(2)自由软件,源码公开
(3)性能高,安全性强
(4)便于定制和再开发
(5)相互之间操作性高
(6)全面的多任务和真正的32/64位操作系统
(7)在服务器市场及嵌入式系统领域应用广泛,是一种高性能、低开支的可以替换其他昂贵操
作系统的系统。
三、Linux VS Windows
![](https://i-blog.csdnimg.cn/blog_migrate/5067fc02db6da8dbcacac873da38c78a.png)
四、Linux的发展优势与存在问题-------不足
(1)硬件方面的支持
(2)桌面功能不够完备
(3)操作入门门槛较高
五、Linux常用发行版
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、 Arch Linux、SolusOS 等。
六、CentOS简介
CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照[开放源代码](https://baike.baidu.com/item/开放源代码/114160)规定释出的源代码所编译而成。
CentOS加入红帽后不变的是:
(1) CentOS 继续不收费。
(2)保持赞助内容驱动的网络中心不变。
(3) Bug、Issue 和紧急事件处理策略不变。
(4)Red Hat Enterprise Linux 和 CentOS 防火墙也依然存在。
CentOS** **加入红帽后变化的是:
(1)我们是为红帽工作,不是为 RHEL。
(2)红帽提供构建系统和初始内容分发资源的赞助。
(3)一些开发的资源包括源码的获取将更加容易。
(4)避免了原来和红帽上一些法律的问题。
CentOS的特点(了解) :
(1)可以把CentOS理解为Red Hat AS系列!它完全就是对Red Hat AS进行改进后发布的!各种操作、使用和RED HAT没有区别!
(2)CentOS完全免费,不存在RED HAT AS4需要序列号的问题。
(3)CentOS独有的yum命令支持在线升级,可以即时更新系统,不像RED HAT那样需要花钱购买支持服务!
(4)CentOS修正了许多RHEL的BUG!
(5)CentOS版本说明:CentOS3.1 等同于 RED HAT AS3 Update1 CentOS3.4 等同于 RED HAT AS3 Update4 CentOS4.0 等同于 RED HAT AS4。
七、VMWare虚拟机简介
1、在装虚拟机之前先开启InterVT-x,如果未开启则会抛出如下错误,重启进入电脑的bos系统进行修改(根据个人电脑型号进入百度查看如何开启InterVT-x)。
2、安装Linux操作系统要划分两个分区:/(根分区)和swap分区(交换分区)
(1)根分区就是root分区,所有的东西都在这个分区内
(2)/swap分区是交换分区,是一定磁盘空间(分区或文件),用于将部分内存中的数据换下来,以腾出内存空间用于其他需求。在一个系统中,物理内存快使用完时,操作系统会使用交换分区。当系统内存紧张时,操作系统根据一定的算法规则,将一部分最近没使用的内存页面保存到交换分区,从而为需要内存的程序留出足够的内存空间;在swap中的内存页面被访问时,系统会将其重新载入到物理内存中去运行。
第二章、Linux初示
一、虚拟控制台
Linux是真正的多用户操作系统。可以同时接受多个用户远程和本地登录,也允许同一用户多次登录。这是因为Linux和许多版本的UNIX一样, 提供了虚拟控制台的访问方式,允许用户在同一时间从不同控制台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。
注意:在安装了图形化界面之后,系统默认控制台终端数量为 6 个 。
在图形界面常用的一些快捷键:
一个终端上建立多个虚拟控制台标签:ctrl+shift+t
切换到第几个虚拟控制台上:Alt+数字
放大虚拟控制台:ctrl+shift+“+”
缩小虚拟控制台:ctrl+“-”
切换到字符登陆界面:ctrl+Alt+F2~F6
切换到图形界面:ctrl+Alt+F1
清屏命令:ctrl+L
退出虚拟化控制台:ctrl+D 或者 exit。
二 、Linux启动
(1) 启动Linux操作系统
超级用户(root)的提示符是“#”,普通用户的提示符是“$”【重点】
[root@localhost home]#解析:
- root-----当前登录的用户的用户名
- @---表示地址域名
- localhost---表示当前登录的主机名
- home---表示当前所在的目录
- #---超级管理员用户
- $---普通用户
(2)退出Linux操作系统
1. 若要注销登录,可以在当前终端上输入logout命令或使用ctrl+D快捷键:
- logout (字符界面下使用)
- exit
注意:Linux系统是严格区分大小写的,无论是用户名、文件名、设备名还是命令,都是严格区分大小写。
2. 关机指令shutdown:
在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非 特殊情况下,不得已才会关机。
注意:不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中,防止数据丢失。
sync # 将数据由内存同步到硬盘中。 shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机: shutdown –h 10 # 这个命令告诉大家,计算机将在10分钟后关机 shutdown –h now # 立马关机 shutdown –h 20:25 # 系统会在今天20:25关机 shutdown –h +10 # 十分钟后关机 shutdown –r now # 系统立马重启 shutdown –r +10 # 系统十分钟后重启 reboot # 就是重启,等同于 shutdown –r now halt # 关闭系统,等同于shutdown –h now 和 poweroff
三、Linux命令格式
Linux命令的一般格式:命令名 [-选项……] [参数……] [对象]
(1) 一般格式中方括号括起来的部分是可选的,即该项对命令行来讲不是必须的,依具体情况而定。
(2)命令名必须是小写的英文字母,并且往往是表示相应功能的英文单词或单词的缩写。命令名、选项和参数彼此间必须用空格或制表符隔开,不能连在一起。
四、Linux启动关闭命令
(1)poweroff命令
作用:关闭操作系统。
语法:poweroff [-n] [-w] [-d] [-f] [-i] [-h](一般在关机时直接使用poweroff即可,[]可以全部省略)
选项:(了解即可)
- -n : 在关机前不做将记忆体资料写回硬盘的动作
- -w : 并不会真的关机,只是把记录写到 /var/log/wtmp 档案里
- -d : 不把记录写到 /var/log/wtmp 文件里
- -i : 在关机之前先把所有网络相关的装置先停止
- -p : 关闭操作系统之前将系统中所有的硬件设置为备用模式。
注意:
普通用户与管理员用户都可以使用该命令,普通用户在使用此命令进行关机时需要保证被操作的操作系统只有本用户自己登录才可以进行,如果同时有多个用户登录着,则普通用户也不可以使用此命令。
(2)shutdown命令(仅管理员命令)
作用:关闭或重启操作系统。仅管理员命令,或者sudo调用管理员权限使用。
语法:shutdown [-rkhncfF] time [message]
选项:(掌握)
- -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
- -r : 关机后重新开机。
- -h : 关机后停机。
- time(绝对时间):hh:mm
- 相对时间:+num (分钟)
示例:
shutdown -r +5 “System will be reboot in 5 minites,Please save your work”
再过5分钟系统会重新启动,并显示后面的信息给所有在线的使用者;
(3)reboot命令(常用)
作用:重启操作系统。
语法:reboot [-n] [-w] [-d] [-f] [-i]([]中的内容不用重点记忆,了解即可)
选项:(了解即可)
- -n : 在重开机前不做将记忆体资料写回硬盘的动作
- -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
- -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
- -f : 强迫重开机,不呼叫 shutdown 这个指令
- -i : 在重开机之前先把所有网络相关的装置先停止
注意:
与poweroff类似,普通用户与管理员用户都可以使用该命令,普通用户在使用此命令进行关机时需要保证被操作的操作系统只有本用户自己登录才可以进行,如果同时有多个用户登录着,则普通用户也不可以使用此命令。
(4)init命令【更改运行级别】【重点】
修改运行级别文件的位置:/etc/inittab
- init 3 - 完全多用户模式(标准的运行级)【字符界面】
- init 5 - X11 (xwindow) 图形化界面模式【图形界面】
- centos7:
multi-user.target对应的是runlevel 3,而graphical.target 类似与之前的runlevel 5
runlevel :查看运行级别,显示的是3或5
查看默认运行级别:systemctl get-default (结果为multi-user.target)
改变默认的运行级别:
systemctl set-default multi-user.target(每次开机进入系统默认都是字符界面)
systemctl set-default graphical.target(每次开机进入系统默认都图形界面)
五、Linux登录信息命令
(1)logname命令(了解)
作用:查看初次登录控制台的用户
语法:logname [--help][--version]
选项:
- --help 在线帮助。
- --vesion 显示版本信息。
(2)whoami命令(记住)
作用:查看当前活动用户
语法:whoami 选项
选项:
- --help 在线帮助。
- --vesion 显示版本信息。
注意:如初次登录控制台的用户为user1,那么只要这个控制台一直被user1占用,没有出
现注销或者关机重启的情况,logname的执行结果一定是user1,sudo命令无效( sudo命令以系
统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行)
whoami命令为显示当前激活的用户,或者说活动用户,当前活动的是什么用户,whoami显
示的就是哪个用户的用户名,sudo有效,且使用sudo时一定返回root用户。
(3)who命令
作用:查看当前登录系统的用户列表(详细版)
选项:
- -H 或 --heading:显示各栏位的标题信息列;
- -u :显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
- -m:此参数的效果和指定"am i"字符串相同;
- -q:只显示登入系统的帐号名称和总人数;
- -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
- -w:显示用户的信息状态栏;
- --help:在线帮助;
- --version:显示版本信息。
(4)获取命令帮助手册
- man 命令名
- 命令名 - -help
(5)id命令
作用:查询用户的id详细信息
语法:id [用户名称]
选项:
- -g或--group 显示用户所属群组的ID。
- -G或--groups 显示用户所属附加群组的ID。
- -n或--name 显示用户,所属群组或附加群组的名称。
- -r或--real 显示实际ID。
- -u或--user 显示用户ID。
- --help 显示帮助。
- --version 显示版本信息。
(6)last 命令
作用:查看登录操作系统的历史信息,该命令经常用于排错的场景,如某时间段操作系统出现问题,那么会排查一下出问题之前都有哪些用户登录。
语法:last [选项]
选项:
- -R 省略 hostname 的栏位
- -num 展示前 num 个【常用】
- username 展示 username 的登入讯息
- tty 限制登入讯息包含终端机代号
(7)uname命令
作用:显示计算机的基本信息
语法: uname [options]
选项:-a 显示全部的信息。【常用,需要掌握】
(8)hostname命令【掌握】
作用:显示计算机的名称,也可以临时设置主机名称
语法:hostname [options] [hostname strings]
选项:
- -i 显示主机的ip地址。
- -a 显示主机的别名。
- -s 显示短主机名称。
- -f 显示你的主机的全域名。
- -d 显示主机的dns域名。
- -y 显示主机的nis或yp域名。
- 注意:hostname xxx可以临时更改主机名为xxx,重启系统后失效。
(9)hostnamectl命令
作用:永久设置主机名
语法:hostnamectl [actions][name strings]
动作:
- status 显示当前主机名设置【掌握】
- set-hostname NAME 设置系统主机名【掌握】
- set-icon-name NAME 为主机设置icon名
- set-chassis NAME 设置主机平台类型名
- hostnamectl set-hostname xxx可以将主机名称修改为xxx,并且重启有效。
六、Linux用户与组管理【必考、重点】
(1)root用户
(2)用户组 (group)
一个用户只有一个基本用户组,这个基本用户组与用户名的名称相同,但是可以有多个扩展用户组,从而满足日常的工作需要。
用户组的所有信息存放于 /etc/group中:
查看所属组的用户: cat /etc/passwd
(3)组管理命令:【重点】
I. 创建组:groupadd
语法:groupadd [选项] 组名
案例1:创建一个test组,使用默认组id。
[root@centos home]# groupadd test
案例2:创建一个english组,指明组id。
[root@centos home]# groupadd -g 1010 english
向新组中添加用户:
[root@centos home]# useradd -g english xiaohong
[root@centos home]# useradd -G english xiaomingII. 修改组:groupmod
语法:groupmod [选项] 组名
案例1:修改组的名称:
[root@centos home]# groupmod -n Eng english
案例2:修改组的ID:
[root@centos home]# groupmod -g 1007 EngIII. 删除组:groupdel
语法:groupdel 组名
案例:删除组test
[root@centos home]# groupdel test
注意:删除组时,如果一个组是已经存在用户的基本组的时候,无法直接删除该组。删除存在的用户,会将用户的基本组也删除。
(4)创建用户命令useradd
作用:创建用户
语法:useradd [选项名] 用户名
选项:
- -d<登入目录> 指定用户登入时的起始目录。 【掌握】
- -g<群组> 指定用户所属的群组(基本组)。【掌握】
- -G<群组> 指定用户所属的附加群组(扩展组)。【掌握】
- -M 不要自动建立用户的登入目录。【掌握】
案例一:创建用户useradd
创建一个张三用户useradd zahngsan(用户的基本组是默认创建的)
创建一个lisi 用户useradd -g zhangsan lisi(这个用户的基本组使用张三组)
创建一个wangwu 用户useradd -G zahngsan wangwu(这个用户基本组是默认的,指明扩展组为zhangsan)
案例二:指定用户家目录
注意:用户创建后会自动生成一个用户家目录(这个目录的名称默认为用户名),存
放在/home下。
(A)创建一个webmaster用户,指定它的家目录不自动创建,而是指定到具体位置(/home/www),该具体位置需要提前存在。
(B)创建目录(绝对路径)
相对路径:mkdir www
(C)创建webmaster用户
(D)cat /etc/passwd
(5)修改用户usermod
语法:usermod [选项] 用户名
选项:
- -d登入目录> 修改用户登入时的目录。【掌握】
- -g<群组> 修改用户所属的群组。【掌握】
- -G<群组> 修改用户所属的附加群组。【掌握】
- -u<uid> 修改用户ID。【掌握】
案例一:更改登录时的目录(-d)
案例二:修改用户webmaster的基本组
案例三:修改用户webmaster的扩展组(-G )
案例四:修改用户webmaster的id(-u)
(6)删除用户账号 userdel
语法:userdel [选项] 用户名
选项:-r 删除用户登入目录以及目录中所有文件。
案例1:删除zhangsan用户(默认不会删除用户家目录)
案例2:删除zhangsan用户(同时删除家目录及家目录下的所有文件)
![](https://i-blog.csdnimg.cn/blog_migrate/f14fe3ec503e99e247d4a47bba00b559.png)
七、权限调用类命令
(1)su命令
作用:切换用户身份(高权限用户切换到低权限用户不用输入密码,反之则需要输入密码)
语法:su 用户名
高权限→低权限:
低权限→高权限:
(2)sudo命令
作用:以管理员身份执行指令,经由 sudo 所执行的指令就好像是 root 亲自执行。
语法:sudo command
注意:如果想要使用sudo命令获取root权限,首先需要把该用户加入sudoers文件中,并且获取执行命令权限。
sudoers文件存放的位置:/etc/sudoers
案例:使用sudo命令。
第1步:使用root用户修改/etc/sudoers,将当前要执行命令的普通用户加入。
①vim /etc/sudoers 进入文档标准模式
②将光标定位到要修改的行首,按下i键,进入插入模式
③插入以下内容:
④插入后,按下ESC键,退出到标准模式。
⑤按下英文冒号:,进入末行模式,输入wq! 强制保存退出。
第2步:切换回普通用户,执行sudo命令即可。
第三章 常用命令简介
一、Linux命令概述
Linux命令的一般格式:命令名称 [选项] [命令参数] [命令对象]
注意:
命令名称、命令参数、命令对象之间请用空格键分隔。
方括号括起来的部分是可选的,即该项对命令行来讲不是必须的,依具体情况而定。
命令名称必须是小写的英文字母,并且往往是表示相应功能的英文单词或单词的缩写。
命令对象一般是指要处理的文件、目录、用户等资源,而命令参数可以用长格式(完整的选项名称),也可以用短格式(单个字母的缩写),两者分别用- -与-作为前缀:长格式:man --help 短格式: man -h。
二、Linux联机帮助命令
(1)man
功能:联机帮助手册,在命令 man 后,输入想要获取的命令的名称,man 就会列出一份完整的说明,其内容包括命令语法、各选项的意义以及相关命令等。
语法:man 命令名称
man命令中常用按键以及用途:
(2)help
功能:查看shell内部命令帮助信息语法。
语法:help 命令名称
(3)- -help(此为选项)
功能:选项模式的帮助手册,使用时需本命令具备此选项才可使用,否则无效。
语法:命令名 - -help
三、屏幕输出命令【重点】
(1)echo命令
作用:字符串在屏幕上的输出
语法:echo 内容
常用选项:
- -e 对输出内容中的转义字符进行识别,比如:\n \t【掌握】
- -n输出时不自动换行
用法:
a. 打印普通字符串,可以使用双引号,也可以不使用
echo "It is a test" 或 echo It is a test
b. 打印特殊含义的字符,需要提前用\进行转义。比如:双引号、单引号、反斜线、$符号等。
c. 显示变量:read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。
d.转移序列的用法:\n \t
识别转义序列,需要加-e选项
e. echo结合重定向新建文件
f. 双引号、单引号和反引号的区别。(重点)
单引号:由单引号括起来的所有字符都作为普通字符出现。
双引号:由双引号扩起来的字符,除$、倒引号``和转义字符\外,均作为普通字符对待。$表示变量值,倒引号``表示命令替换。
倒引号:用倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以执行结果取代整个倒引号部分。现在,可以使用$()来替换。
(2)printf命令
作用:用于格式化输出字符串,相当于C的printf()函数。
用法:
(a)可以识别转义序列的 \n。
(b)格式化输出语句:%d %s %f等
四、简单工具命令
(1)date:格式化显示日期时间,也可以设置系统的日期时间。
说明:以“+”号开头,即可按照指定格式来输出系统的时间或日期 :date +%STRINT
%H 小时(以00-23来表示)。
%I 小时(以01-12来表示)。
%K 小时(以0-23来表示)。
%l 小时(以0-12来表示)。
%M 分钟(以00-59来表示)。
%P AM或PM。
%r 时间(含时分秒,小时以12小时AM/PM来表示)。
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)。
%T 时间(含时分秒,小时以24小时制来表示)。
%X 时间(以本地的惯用法来表示)。
%Z 市区。
%a 星期的缩写。
%A 星期的完整名称。
%b 月份英文名的缩写。
%B 月份的完整英文名称。
%c 日期与时间。只输入date指令也会显示同样的结果。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%j 该年中的第几天。
%m 月份(以01-12来表示)。
%U 该年中的周数。
%w 该周的天数,0代表周日,1代表周一,异词类推。
%x 日期(以本地的惯用法来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。
%n 在显示时,插入新的一行。
%t 在显示时,插入tab。
MM 月份(必要)
DD 日期(必要)
hh 小时(必要)
mm 分钟(必要)
ss 秒(选择性)
详细操作可以参考:Linux date命令的用法(转) - asxe - 博客园
(2)cal:用来显示日历
语法:cal [-yj3]
选项:
- -y 显示当前年份的日历
- -3 显示三个月的日历:包括前一个月和下一个月的日历。
- -j 显示某一日位于当年中的第几天。
(3)history:用于显示历史执行过的命令
(4)clear:清屏
(5)passwd:修改用户密码
如果是根用户可以直接修改其他用户密码。不需要输入原来的密码,直接输入新密码即可。
语法:passwd [选项...] 用户名
选项:(了解即可)
- -d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
- -l, --lock 锁定指名帐户的密码(仅限 root 用户)
- -u, --unlock 解锁指名账户的密码(仅限 root 用户)
- -e, --expire 终止指名帐户的密码(仅限 root 用户)
- -f, --force 强制执行操作。
(6)pwd
作用:pwd命令用于显示用户当前所处的工作目录(从根出发的一个目录)
(7)cd
作用:针对目录进行操作(蓝色的表示目录),快速切换目录。
语法:cd test/ 目录前不加"/",则表示相对路径.从当前工作目录下查找test/文件夹
cd /home/test/ 此用法为绝对路径,不考虑当前的工作目录
常见的切换目录方式:
“cd - ”命令返回到上一次所处的目录
“cd ..”命令进入父级目录
“cd ~”命令切换到当前用户的家目录
“cd ~username”切换到其他用户的家目录
(8)expr命令用于计算
注意:数字与运算符号之间要有空格,若不加空格将输出整个表达式。
案例:
#expr length “this is a test” //计算字符串长度,结果: 14
#expr substr "this is a test" 3 5 //截取字符串,结果: is is
#expr index "sarasara" a // 抓取符合条件的第一个字符出现的位置,2
#expr 14 % 9 //取余,整数运算,结果为:5
# expr 10 + 10 //整数运算,结果为:20
#expr 1000 + 900 // 1900
#expr 30 / 3 / 2 // 5
# expr 30 \* 3 //90
使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
五、五大常用命令【重点】
(1)ls命令
功能:用于显示当前工作目录下之内容(列出目前工作目录所含之文件及子目录)。包含隐藏文件
语法:ls [选项][目录名]
选项:
-a 显示所有文件及目录 ,包括隐藏文件(ls默认将文件名或目录名称开头为"."的视为隐藏文档,不会列出)【掌握】
-l 除文件名称外,将文件型态、权限、拥有者、文件大小等资讯详细列出【掌握】
-r 文件以相反次序显示(原定依英文字母次序)【掌握】
-t 将文件依建立时间之先后次序列出【掌握】
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;默认可执行文档后面加 "*", 目录后面加 "/"【掌握】
-R 若目录下有文件,则以下之文件亦皆依序列出【掌握】
(2)cp命令---用于复制文件或目录。
说明:在Linux系统中,复制操作具体分为3种情况:
(1)如果目标文件是目录,则会把源文件复制到该目录中;
(2)如果目标文件也是普通文件,则会询问是否要覆盖它;
(3)如果目标文件不存在,则执行正常的复制操作。
语法:cp [options] 原文件 目标文件或cp [选项] 原文件... 目标
选项:
- -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
- -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
- -f:覆盖已经存在的目标文件而不给出提示。【掌握】
- -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
- -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
- -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。 【掌握】
- -l:不复制文件,只是生成链接文件。
案例:
(1)复制目录时,需要加上-r选项递归的复制
(2)复制目录下的所有文件:
cp abc/* /home/123/456/
(3)复制普通文件:
cp 原文件路径 新文件路径
(3)scp命令---远程复制
前提:能够通过IP地址远程访问到主机。
语法:scp -r root@43.224.34.73:/home/lk /root。*
案例:
两台机器IP分别为:A.104.238.161.75,B.43.224.34.73。
在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录下。
命令为:scp -r root@43.224.34.73:/home/lk /root
(4)mv命令
功能:
(1)移动文件,相当于剪切功能
(2)重命名文件(相当于在同一个目录下进行剪切)
语法: mv [选项] source dest或mv [选项] source... directory
选项:
- -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;【掌握】
- -f: 在 mv 操作要覆盖某已有的目标文件时不给任何指示;【掌握】
说明:
该命令相当于剪切操作,其不同于复制操作,因为它会默认把源文件删除掉,只保留剪切后的文件。如果在同一个目录中对一个文件进行剪切操作,其实也就是对其进行重命名。
案例:
(5)rm命令---删除一个文件或者目录。
语法:rm [选项] name...
选项:
- -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。【掌握】
- -r 将目录及以下之档案亦逐一删除。需要进行一一确认【掌握】
案例:
六、ln命令
作用:为某一个文件在另外一个位置建立一个同步的链接。
功能:当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
语法:ln [参数] [源文件或目录] [目标文件或目录]
选项:
- -b 删除,覆盖以前建立的链接
- -d 允许超级用户制作目录的硬链接
- -f 强制执行
- -i 交互模式,文件存在则提示用户是否覆盖
- -s 软链接(符号链接)【掌握】
- -v 显示详细的处理过程
链接文件的原理:
文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 与元数据(metadata)
- 用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;
- 元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。
在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)是文件的唯一标识。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。如图展示了程序通过文件名获取文件内容的过程。
软硬链接的区别:【重点】
软链接:
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
5.软链接有自己的文件属性inode号及权限等。
6.删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
硬链接:
1.硬链接以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
4.删除原文件,不会形成死链接。
案例一、如何创建硬链接:
(1)在用户的家目录下创建一个shell脚本
(2)在家目录下执行该脚本,可以正常执行
(3)切换到/tmp目录中,如何才能在/tmp目录中执行这个文件?
解决方案:
- 复制一份脚本到/tmp目录下(这种方式浪费存储空间)
- 创建链接文件(不占用存储空间)
(4)创建硬链接
此时建立了一个hardlink.sh的硬链接,执行这个硬链接即可执行这个文件。
(5)创建软链接文件(相当于Windows中的快捷方式)
注意:创建软链接是要使用绝对路径
(6)验证删除原文件后,会影响软链接吗?
可以发现,软链接受到影响,变成死链接,无法继续执行。
第四章
一、文件概述
(1)Linux文件概述
由字母、数字、下划线、圆点等组成的字符串来构成。
要求长度限制在255个字符以内。
没有扩展名,系统不将文件名中最后一个.后的字符串视为区分文件类型的依据,与Windows系统不同。【掌握】
(2)Linux文件分类
普通文件:
用 ls -lh 来查看某个文件的属性,可以看到有类似-rwxrwxrwx,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。这些文件一般是由一些相关的应用程序创建,比如图像工具、文档工具、归档工具... .... 或 cp工具等。这类文件的删除方式是用rm 命令。
文本文件或二进制文件
第一列字符:-
颜色:白色
目录文件:
第一列字符:d
颜色:蓝色
设备文件:ls -l /dev查看设备文件
块设备文件 :储存数据,以提供系统随机存取的接口设备,例如:磁盘、光盘、U盘等
①第1列字符:b
颜色:黄色
字符设备文件:键盘、鼠标等
第1列字符:c
颜色:黄色
②磁盘在Linux文件系统上怎么体现的?
sda:第一块SCSI格式的硬盘
sdb:第二块SCSI格式的硬盘
hda:第一块IDE格式的硬盘
sda1:第一块SCSI格式的硬盘上的第1个主分区,默认最多有4个主分区。
Sdb1:第二块SCSI格式的硬盘上的第1个主分区
③ Linux上的磁盘分区fdisk命令。
- fdisk [选项] <磁盘> 更改分区表
- fdisk [选项] -l <磁盘> 列出分区表
- fdisk -s <分区> 给出分区大小(块数)
案例:
I. fdisk -l :列出当前文件系统上所有磁盘的分区
II. fdisk -l /dev/mapper/centos-swap:查看/dev/mapper/centos-swap磁盘上的分区:
III. 为/dev/mapper/centos-swap磁盘进行分区:fdisk /dev/mapper/centos-swap
输入子命令:
- p 打印当前分区表
- n 添加分区,选择分区类型,填入分区号即可分区
- p打印分区表,验证分区是否正确
- w 写入保存
数据接口文件:
用于socket连接,一般存放于/var/run目录中。
第1列字符:s
颜色:紫色的
符号链接文件:
等同于软链接文件:ln -s创建的文件
第1列字符:l
颜色:
二、Linux普通文件概述
文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。
二进制文件是基于值编码的文件,可以根据应用的具体情况自定义自己的编码。
计算机的存储在物理上是二进制形式的。所以文本文件与二进制文件的区别并不是物理上,而是逻辑上的。
三、普通文件命令
(1)新建文件
(A)touch命令
①用于修改文件或者目录的时间属性,包括存取时间和更改时间。
②若文件不存在,系统会建立一个新的文件。
语法: touch [选项]... 文件...
选项: d 设定时间与日期,可以使用各种不同的格式。
功能:
①创建一个空文件:touch mytxt
②如果文件已经存在的话,使用touch则是修改文件的时间。
(B)echo命令结合重定向符号,可以创建普通文件:
(C)vim/vi编辑器
(D)cat命令结合重定向符号也可以创建文件:cat hello.txt mytest >>file1
(2)查看文件的内容
(A)cat命令
用于在标准输出上显示文件,查看纯文本文件,连接文件并打印到标准输出设备上。适用于查看短文件。
语法:cat [选项]... [文件]...
选项:
- -n 或 --number:由 1 开始对所有输出的行数编号。
- -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
功能:
①查看文件:cat /var/log/message
②查看文件并显示行号: cat -n /var/log/message
③结合重定向符号,可以连接多个文件内容,形成一个新的文件:
④清空文件:
(B)more命令:适用于查看长文件,可以进行分屏显示。
分屏形式显示文本内容。对于长篇的文本内容,推荐使用more命令来查看。
语法:more [选项] 文件...
选项:
- -num 每屏显示的行数
- -d 每屏末行提示友好信息
- +NUM 从文件第 NUM 行开始显示
案例:
more /var/log/messages
![]()
more +20000 /var/log/messages
more -d +20000 /var/log/message -d每行末尾提示有好信息。
![]()
(C)less命令:适用于查看长文件,可以进行分屏显示。
分页形式显示文本内容。与more功能基本一致。
区别:
more命令在使用时是全部加载文件内容,然后只展示第一屏,less则为展示哪一页就加载哪一页。当more或者less一个大文件时,more表现出来的特点就是打开文件很慢,但是一旦打开了,转换屏幕很快。less表现出来的特点是打开文件比more快的多,但是转换页面需要一定的时间。
语法:less [选项] filename...
选项:-N 显示每行的行号
案例:
sudo less -N /var/log/messages
(D)head命令:
用于查看文件的开头部分的内容,默认前10。
语法:head [参数][文件]
选项:
- -c<数目> 输出前n个字节。
- -n<行数> 输出前n行。
案例:
head /var/log/messages
head -n 5 /var/log/messages
head -c 5 /var/log/messages
(E)tail命令
用于查看文件末尾的内容
语法:tail [参数][文件]
选项:
- -c<数目> 显示的字节数
- -n<行数> 显示文件的尾部 n 行内容
- -f 循环读取,当想要实时查看最新日志文件时,这特别有用。
案例:
tail /var/log/messages
tail -n 5 /var/log/messages
tail -c 5 /var/log/messages
tail -f /var/log/messages
(3)查看文件的属性:文件大小、文件的类型等
(A)file命令
辨识文件类型
语法:file [OPTION...][FILE...]
选项:
显示install.log文件类型: # file install.log
显示install.log文件类型(不显示文件名称):# file -b install.log
显示install.log文件MIME类别:# file -i install.log
显示install.log文件MIME类别(不显示文件名称): # file -b -i install.log
显示符号链接/var/mail的文件类型: # file /var/mail
显示符号链接/var/mail所指向的文件的文件类型:# file -L /var/mail
(B)stat命令:
用于查看文件的具体存储信息和时间、大小、连接数等等信息。
语法:stat 文件名
(4)用于文件内容统计、提取、排序等工具的一些命令
(A)wc命令
用于统计指定文本的行数、字数、字节数
语法:wc [选项]... [文件]...
选项:
- -c或--bytes或--chars :统计Bytes字节数。
- -l或--lines: 统计行数。
- -w或--words: 统计字数(单词数)。
案例:
wc -l hello.txt
管道符| :前一个命令的输出结果当做后一个命令的输入
(B)cut命令:
用于按“列”提取文本字符。
语法:cut [参数] filename
选项:
- -f 参数来设置需要筛选的列数。
- -d 参数来设置间隔符号
案例:
1.cut -f 1 -d : /etc/passwd >user.txt //提取passwd文档中的第1列内容存到user.txt
2.cut -f 1,3,5 -d : passwd >user.txt //提取passwd文档中的第1,3,5列内容
3.cut -d : -f 1 /etc/passwd //提取passwd文档中第一列中的内容
4.cut -d : -f 1,6 /etc/passwd //提取passwd文档中第1、6列中的内容
5.cut -d : -f 1,6 /etc/passwd >> userinfo.txt //提取passwd文档中第1、6列中的内容到userinfo.txt
(C)sort命令:
对文本文件的各行按照ASCII码顺序进行升序排序
语法:sort [选项] filename
选项:
- -r : 降序排序
- -k: 按每行中的某列(列域)进行排序
- -t: 指定列的分隔符
- -n :按数字大小进行排序
案例:
sort -t " " -n -k 3 score.txt //默认升序
sort -t " " -n -k 3 -r score.txt
sort -t " " -n -k 1 -r score.txt
sort -t " " -n -k 1 -r score.txt >>newscore.txt //排序后存放在新的文件newscore.txt中
(5)如何快速的查找的符合条件的文件。
(A)find命令
用于按照指定条件来查找文件,“Linux系统中的一切都是文件”,在Linux系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。
语法:find [选项][查找路径] [操作]
选项:
- -name 匹配名称
- -perm 匹配权限(mode为完全匹配,-mode为包含即可)
- -user 匹配所有者
- -group 匹配所有组
- -mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
- --type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
- -size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
案例:
find /etc -name "host*" -print
find /etc -name "host*" -size -50k -mtime +2 -user "root" -print
四、目录文件概述【重点】
(1)Linux目录采用多级树形结构:【掌握】
Linux主要目录简介:【牢记】
- /bin:bin是Binary的缩写。这个目录存放着普通用户经常使用的命令文件。
- /sbin:s就是Super User的意思。这里存放的是系统管理员使用的系统管理程序。
- /boot:这里存放的是启动Linux时使用的一些核心文件,包括内核、一些链接文件以及镜像文件。
- /dev:dev是Device(设备)的缩写。该目录下存放的是设备文件,在Linux中访问外部设备的方式和访问文件的方式是相同的。 【光盘,鼠标.......】
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射。我们可以通过直接访问这个目录来获取系统信息。
- /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /lib:库文件,这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /mnt【挂载目录】:在这里面有几个目录,系统提供这些目录是为了**让用户临时挂载别的文件系统,我们可以将光驱挂载在/mnt/cdrom上,然后进入该目录就可以查看光驱里的内容
- /root:该目录为系统管理员(即超级用户root)的用户主目录。
- /home:用以存放普通用户的主目录。在Linux中,每个用户都有一个自己的目录,一般以用户的账号命名。
- /var:这个目录中存放着在不断更新的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种缓冲区和日志文件。
- /tmp:这个目录是用来存放一些临时文件的。
- /usr:我们要用到的很多应用程序和文件几乎都存放在usr目录下。如:/usr/local:这是提供给一般用户的/usr目录,在这里安装一般的应用软件。
根目录:根目录的标识符为/,每一个操作系统只有一个根,根与分区数量无关。
当前目录:.
父级目录:..
五、目录相关命令
(1)切换目录命令: cd 目录
(2)获取当前目录的绝对路径:pwd
(3)创建目录的命令:mkdir
语法:mkdir [选项] 目录名
选项:-p 递归的创建文件目录
案例:递归创建空目录
(4)删除目录命令:rmdir 目录
注意:此时这个命令只能删除空目录
选项:
- rmdir -rf:强制删除
- rmdir -p: 递归删除空目录。
(5)basename命令:输出文件路径中的以最后一个/为分割的后面部分的路径字符串。
(6)dirname命令:输出文件路径中的以最后一个/为分割的前面部分的路径字符串。
六、Linux文件的压缩与解压缩【重点】
(1)gzip命令
作用:
- 用于压缩文件,文件经它压缩过后,其名称后面会多出".gz"的扩展名。
- 用于解压缩“.gz”格式的文件。
语法:gzip [选项] 文件名
- -d或--decompress或----uncompress 解压缩文件。
- -r或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
- -v或--verbose 显示指令执行过程。
案例:
(2)zip/unzip
作用:
zip是压缩指令,unzip是解压指令。zip指令既可以压缩文件,也可以压缩目录。压缩会自动保留源文件,解压会自动保留压缩文件。
语法:
- zip [参数][打包后的文件名] [打包的目录路径]
- unzip [选项] 压缩文件名.zip –d 指定目录
选项:
- -d 目录 把压缩文件解到指定目录下。
- -r 递归处理,将指定目录下的所有文件压缩。
(3)tar命令
语法:tar [主选项+辅选项] 文件或目录
作用:实现打包压缩和解压缩功能。
注意:用该命令时,主选项必须有,主选项用于告诉tar要做什么事情(压缩或解压缩),辅选项是辅助使用的,可以选用。
主选项:【一条命令以下5个参数只能有一个】
- -c: 新建一个压缩文档,即打包【掌握】
- -x: 解压文件【掌握】
- -t: 查看压缩文档里的所有内容
- -r: 向压缩文档里追加文件
- -u: 更新原压缩包中的文件
辅助选项:
- -z:是否同时具有gzip的属性?即是否需要用gzip压缩或解压?【掌握】
- 一般格式为xxx.tar.gz或xx.tgz
- -j:是否同时具有bzip2的属性?即是否需要用bzip2压缩或解压?【掌握】
- 一般格式为xx.tar.bz2
- -v:显示操作过程!这个参数很常用 【掌握】
- -f:使用文档名,注意,在f之后要立即接文档名,不要再加其他参数!【掌握】
- -C 指定解压到的目录【常用】
- --exclude FILE:在压缩过程中,不要将FILE打包
案例:
(1)具备gzip属性:压缩文件demo,压缩后文件名为demo.tar.gz
tar -zcvf abc.tar.gz abc
tar -zxvf abc.tar.gz
tar -zxvf abc.tar.gz -C 目录
(2)具备bzip属性:
tar -jcvf abc.tar.gz abc
tar -jxvf abc.tar.gz
tar -jxvf abc.tar.gz -C 目录
(4)扩展:Linux上安装一个Java环境:JDK
第1步:官网下载安装包:选择CentOS7适用版本。
第2步:安装包上传到Linux主机上。借助xftp工具。
第3步:解压安装包,解压到根目录:
tar zxvf jdk-8u231-linux-x64.tar.gz
第4步:用户安装应用程序一般放在/usr/local目录中,所以移动到此目录中,并将解压后的目录重命名为java。
第5步:配置环境变量
①编写文件:vim /etc/profile
添加以下内容后保存退出:
②使其配置环境变量生效,执行命令:source /etc/profile
第6步:执行java命令及javac命令验证
出现帮助手册,则证明jdk安装成功。
第五章
一、vi/vim三种模式间的切换【重点】
(1)命令模式
这是执行vi后的缺省模式,此时键盘输入当作命令,命令有大小写之区分。可控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
(2)插入模式
在命令模式下可进入该模式。正常的文本录入,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。
(3)末行模式
在命令模式下可进入该模式。该模式用来进行保存文件、打开文档或环境的设定、退出文档,以及设置编辑环境。
vi 进入文件的命令模式,此时输入的字母都将被作为命令来解释;
在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或者替换命令s都可以进入输入模式。在输入模式下,用户输入的任何字符都被vi当做文件内容保存起来。
在文本输入模式下,按ESC键回到命令模式;
在命令模式下,输入“:”“/”或“?”进入末行模式。末行命令执行完后,vi自动回到命令模式。如果末行模式执行退出命令,则退出vi。(保存并退出:wq!)
二、vi/vim的插入模式
命令模式进入插入模式的几种方式(下为命令模式中的命令)
插入模式返回命令模式的方式--------键盘ESC键
三、vi的末行模式
命令模式进入末行模式的方式:
符号: “:”、“/”、“?”。其中,“/”和“?”表示查找。
末行模式返回命令模式的方式:
- 键盘enter键提交执行末行模式命令并返回命令模式
- 键盘esc键取消末行模式命令并返回命令模式
vi环境变更:
文件的保存和退出:
编辑多个文件时(如:vi file1 file2 …):
文本内容的修改:
查找匹配字符:
替换匹配字符(引用于sed命令的替换模式):
第六章 vi的命令模式
由于Linux操作系统命令行模式没有鼠标操作,所以光标的移动效率直接决定了vi/vim的使用效率。
光标的移动分类:
- 基础移动:一格一格的去移动光标,不推荐一直使用,可以在快捷键移动完毕之后补充使用
- 快捷移动:用最少的时间移动到目标光标附近,然后用基础移动微调光标的位置。(首选)
光标的基础移动:
光标的快捷移动:
按文件的位置:
- G 移动到当前文件的最后一行
- gg 移动到当前文件最开始的一行
按屏幕窗口的位置:
- H 移动到当前屏幕窗口的第一行
- M 移动到当前屏幕窗口的中间行
- L 移动到当前屏幕窗口的最末行
- 上:k nk向上移动n行
- 下:j nj向下移动n行
- 左:h nh向左移动n列
- 右:l nl向右移动n列
按文本行内的位置:
- ^ 至本行第一个非空字符
- $ 至行尾
- 0 至行首
按段落的位置:
- } 光标所在位置到该段落的最后一个字母
- { 光标所在位置到该段落的第一个字母
按句子的位置:
- )光标坐在位置到下个句子的第一个字母
- ( 光标所在位置到该句子的第一个字母
按字(单词)的位置:
- w,W 移动到后一个字的开头
- b,B 移动到前一个字的开头
- e,E 移动到后一个字的末尾
- ge,gE 移动到前一个字的末尾
大写忽略标点字符,但非全部特殊字符
vi/vim中以空格区分文本的字(单词)
文本的复制与粘贴:
- yy 复制当前行到内存缓冲区
- p 将缓冲区的内容粘贴到光标的后面
- P 将缓冲区的内容粘贴到光标的前面
文本的删除:
- x 删除光标所在的字符
- X 删除光标前面的字符
- s 删除光标所在的字符,并进入插入模式
- S 删除光标所在的行,并进入插入模式
- dd 删除光标所在的行
- D 从光标位置开始删除到行尾
文本的修改:
- r 修改光标所在的字符,r后接着要修改的字符
- R 进入替换型插入模式,新增内容会覆盖原先的内容,退出方式等同于退出插入模式,按ESC回到命令模式。
- cc 修改光标所在的行
- C 修改从光标位置到该行末尾的内容
第七章、Linux文本处理与正则表达式
一、通配符
通配符是一种特殊语句,用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。
通配符是独立于不同编程语言与操作系统的,只不过不同编程语言和操作系统分别定义的通配符往往意义比较接近甚至雷同。
适用场景:主要适用于对文件对象的模糊查询场景
通配符符号:
- * 指代任意个字符
- ? 指代任意一个字符
- [] 指代符合方括号内匹配字符的任意一个字符
- {} 指代符合花括号内匹配字符串中的任意一个字符串
- [^a] 表示反向选择
通配符使用特点:
通配符的使用思想为文件对象名称的完全匹配。筛选出的文件对象与写出的通配符表达式必须完全匹配才可以,不可以部分匹配,而且通配符的四个符号都是具体指代的字符。
如:ls a? 命令,查询出的文件对象就是a开头且长度为2的,无法查出a开头后面有一个字符,长度随意的文件对象。完全匹配为通配符的使用特点中很重要的一环。
案例:
通配符练习:
(1)查找第一位为数字开头的文件:
(2)查找只有一个字符的文件:
(3)查找文件名中含有.的文件:
(4)查找文件名中含有数字的文件:
(5)查找/etc目录下的以cron开头的文件:
(6)查找/etc目录下正好是5个字符长度的文件:
(7)查找/etc目录下含有数字的文件:
(8)查找/etc目录下开头为小写字母的文件:
二、正则表达式
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
正则表达式是跨语言跨操作系统的一种规范,并非本操作系统独立支持使用的一种技术。
表达式符号:
代表字符的正则表达式符号:
代表限定的正则表达式符号:
其他一些辅助符号:
正则表达式使用特点:
正则表达式的使用思想为文本中的各行中有能体现正则表达式规则的即为匹配,可以被筛选出,不需要整行完全匹配。正则表达式规则能在备选行中找到符合条件的部分即可。
三、文本处理三剑客
(1)grep命令
作用:用于查找文件里`符合条件`的字符串
语法:grep [选项] 文件路径
选项:
案例:
1. 显示出test.txt中不包含字母c的行,并显示行号:
grep -v -n "c" test.txt
2. 统计test.txt中包含字母a的行的数量:
$ grep "a" test.txt |wc -l
3. 过滤出test.txt中包含大写字母的行,并显示行号。
grep -n "[A-Z]" test.txt
4. 过滤出test.txt中以大写字母开头的行,并显示行号。
grep -n "^[A-Z]" test.txt
5. test.txt中匹配非数字字符,并显示行号。
grep -n -v "[^0-9]" test.txt
6. test.txt中查看包含数字的行,要求显示该行上下各2行。
grep -n -C 2 "[0-9]" test.txt
7. 过滤出一行中a在前,v在后的行
grep -n "a.*v" test.txt
8. 在test.txt中匹配a和b之间有最少2个c最多5个c的行。
grep -n "ac\{2,5\}b" test.txt
9. 过滤出以一个字符为开头,且第二个字符是空格的行
grep -n "^.[[:space:]]" test.txt
10. 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行及文件名。
grep -n -H "test" *file
11. 以递归的方式查找查找指定目录/etc 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,及打印出该文件的文件名称。
grep -r -n -H update /etc
12. 过滤出不是(空行和以#开头)的行
(2)sed命令
作用:
利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。通过指定的正则表达式完成指定关键字的过滤、截取、修改等操作。
工作原理:
sed读取一行,首先将这行放入到缓存中,然后,对这行进行处理,处理完成以后,将缓冲区的内容发送到终端。
存储sed读取到的内容的缓存区空间称之为:模式空间(Pattern Space)
语法: sed [-hnV] [-e] [-f] [文本文件]
选项:
- -e 执行脚本
- -n 将处理后的结果输出,一般结合p动作进行使用
- -i 直接修改文件,将修改处理后的内容直接保存
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现【下一行增加】
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现【上一行增加】
- d :【删除】,因为是删除,所以 d 后面通常不接任何内容;
- s :【取代】,可以直接进行字符串替换
- w : 【保存】,从一个文件中将匹配的内容写入到另外一个文件中
- c :【取代】, c 的后面可以接字串,这些字串可以取代整行!
- p :【打印】,将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行 ~
- ! : 对指定行以外的所有行应用命令,对命令的执行结果取反(不显示命令找到的内容)
- r : 从一个文件中读取到另一个文件中
案例:(普通用户登录)
1.在sed.txt文件的第2行的下一行添加内容“你好”,并将结果输出到标准输出
$ sed “2a 你好” sed.txt
2. 在sed.txt文件的第4行前添加“你好”,并将结果输出到标准输出。
$ sed -e “4i 你好” sed.txt 或 $ sed -e “4i\你好” sed.txt
3. 在sed.txt文件的第2-5行前面增加“你好” :$ sed -e “2,5i 你好” sed.txt
4. sed.txt文件的第2行前面增加多行内容,使用换行: $ sed -e “2i 你好\n我很好” sed.txt
5. 删除所有sed.txt文件的内容: $ sed -e “d” sed.txt
6. 删除sed.txt文件的第2到5行: $ sed -e “2,5d” sed.txt
7. 删除第2行到行尾的内容(包含第2行):$ sed -e ‘2,$d’ sed.txt
8. 取反删除,除了第2行到第4行,其它都删除:$ sed -e ‘2,4!d’ sed.txt
9. 删除包含fir的行:$ sed -e ‘/fir/d’ sed.txt
10. 删除所有不包含fir的行:$ sed -e ‘/fir/!d’ sed.txt
11. 在sed.txt文件中,整行替换第2行:$ sed -e ‘2c 整行替换’ sed.txt
12. 在sed.txt文件中,替换每行的第一个is为IS:$ sed -e ‘s/is/IS/’ sed.txt
13. 在sed.txt文件中,替换每行的全部is为IS:$ sed -e ‘s/is/IS/g’ sed.txt
14. 在sed.txt文件中,替换每行的第2个is为IS:$ sed -e ‘s/is/IS/2’ sed.txt
15. 将修改保存至新的文件: $ sed -e ‘s/is/IS/2w sed2.txt’ sed.txt
16. 直接修改文件内容,-i选项: $ sed -i ‘2i你好’ sed.txt
注意:sed 的 -i 选项可以直接修改文件内容,举例来说,如果有一个 100 万行的 文件,要在第 100 行加某些文字,此时 vim 不适用,因为文件太大了!
17. 删除文件中的注释行和空白行: $ sed -e ‘/^#/d’ -e ‘/^$/d’ sed.txt
18. 多点编辑,只打印显示第1行和第4行: $ sed -n -e ‘1p’ -e ‘4p’ sed.txt
(3)awk命令
作用:文本内容的分析工具,用来处理文本信息
语法:
- awk [选项参数] ‘{pattern + action}’ {filenames} var=value file(s)
- 或awk [选项参数] -f scriptfile var=value file(s)
常用选项:
- -F fs 指定输入文件的分隔符,fs是一个字符串或者是一个正则表达式。 例如:awk -F分隔符号 '{print $列数}' 文件名 #-F不写,默认使用空格分隔
- -v var=value 赋值一个用户定义变量。
- -f scripfile从脚本文件中读取awk命令。
内建变量:
FS、$n、$0、FILENAME、NR【掌握记住】
用法1:分割提取
语法: awk -F ‘分割符’ ‘{[pattern] action}’ {filenames}
说明:
行匹配语句 awk ‘’ 只能用单引号,‘{ }’花括号属于‘组合语句’类型的动作,即 将多个代码组合成代码块,比如输出语句代码块、条件语句代码块、循环语句代码 块。 print语句:普通打印 printf语句: 格式化打印输出 省略-F是默认以空格来分割
注意:
1、print 中不能使用%s ,%d 或%c;
2、print 自动换行,printf 没有自动换行。
①-F选项按条件分割提取打印指定列:
按空格分割,提取第1列和第4列内容:$ awk -F ‘ ’ ‘{print $1,$4}’ log.txt
$ awk -F ‘,’ ‘{print $1}’ log.txt
$ awk ‘{printf “%s\t\t%s\n”,$1,$4}’ log.txt
②使用内建变量FS方式指定提取分割符,提取打印指定列:
按,分割,提取第1列和第2列内容:
awk ‘BEGIN{FS=”,“} {printf “%s\t\t%s\n”,$1,$2} END{print “执行成功…..”}’ log.txt
说明:
单引号里面存放执行脚本,执行脚本:
BEGIN{这里面放的是执行前的语句 }
END{这里面放的是处理完所有的行后要执行的语句}
{这里面放的是处理每一行时要执行的语句}
用法2:做计算
语法:awk -v 变量 -F 分隔符 ‘{[pattern] action}’ {filenames}
选项:-v var=value (声明变量)
运算符:
案例:
$ awk -v id=10 -F “ “ ‘{printf “id+1:%d\t\t%s\n”,$1+id,$2}’ log.txt
$ awk ‘BEGIN{id=10} {printf “%d\t\t%s\n”,$1+id,$2} END{print “计算结束”}’ log.txt
$ awk ‘BEGIN{id=10;FS=” “} {printf “%d\t\t%s\n”,$1+id,$2} END{print “计算结束”}’ log.txt
用法3:结合控制语句:if、for、while等
案例:
①结合if语句
$ awk ‘BEGIN{id=10;FS=” “;str=”hello“} {if ($1+id >=20) { printf “%d\t\t%s\n”,$1,$2} } END{print “计算结束”}’ log.txt
$ awk ‘BEGIN{id=10;FS=” “;str=”hello“} {if ($1+id >=20) { printf “%d\t\t%s\n”,$1,$2} else {print “不符合打印条件”} } END{print “计算结束”}’ log.txt
②结合for语句
$ awk ‘BEGIN{FS=”,“} {for(i=1;i<4;i++){printf “%s\t\t%s\n”,$1,$3}} END{print “计算结束”}’ log.txt
用法4:编写awk脚本
需要分析的文件:score.txt
①编写脚本文件,注意awk脚本文件第1行,指明awk解析。#!/bin/awk -f
②执行分析:awk -f 脚本文件 原来文件: $ awk -f score.awk score.txt
更多内容请移步这里查看:https://download.csdn.net/download/friggly/85078993https://download.csdn.net/download/friggly/85078993