代码拉取完成,页面将自动刷新
1,获得命令行Ctrl + Alt + Fn1~6
2,init 5进入图形界面 init 3 进入命令行模式
3,pwd :查看当前所在目录
4,cd 切换工作目录 cd [目标文件夹目录]
5,Cat 查看文本文件较少的文件 列:cat /root/1.txt
6,Less 查看文本文件较多的文件 q键退出 列:less /root/1.txt
7,head -[数字] [文件路径] :查看头部第前几行文件 列:head -5 /root/1.txt
8,tail -[ 数字] [文件路径] :查看尾部第几行文件 列:tail -5 /root/1.txt
9,vim :
三个模式:命令模式、插入模式、末行模式
按 i 或者 o 键进入插入模式 i是从当前行插入 o 是从下一行插入
末行模式:Esc回到命令模式
末行模式:wq 保存并退出
q! 强制不保存提出
命令模式:
光标行内跳转 Home 键 或 ^ 或 数字 0(跳转到行首)
End 键 或“$”键(跳转到行尾)
全文翻页 PgUp 键、PgDn 键 (向上翻页、向下翻页)
光标行间跳转 1G 或 gg 跳转到文件的首行
G 跳转到文件的末尾行
10,mkdir [文件路径] 新建目录 列:mkdir /root/123 [-p:创建多级目录,创建父目录]
11,touch [文件目录] 新建文件 列:touch /root/1.txt
12, hostname 创建新主机名 列:hostname dajianhao *需要重启命令行生效
13,ifconfig ·查看自己网卡ip信息
ip address #ip查看命令(可以缩写ip a s 或 ip add s)
14,reboot 重启
15,poweroff 关机
shutdown 关机
shutdown -h now 立刻关机 (-h 20:25 在20:25关机) (-h +10 在过十分钟关机)
shutdown -r now 立刻重启 (-k now '说的话' 吓唬人)
16,lscpu 查看cpu信息
17,cat /proc/meminfo 查看内存信息
18,ls
- -ld:显示目录本身的详细属性
- -lh:显示详细属性,加上容量单位
- -l:以长格式显示,显示详细信息
- -A:显示所有内容包含隐藏数据
- -d:显示目录本身(而不是内容)的属性
- -h:提供易读的容量单位(K、M等)
- -R:递归显示内容(显示目录下所有内容,包括子目录)
(列:ls -l /etc/shells (输出 -rw-r--r--. 1 root root 95 8月 1 10:58 /etc/shells)
19 , mount [设备挂载点] [挂载点目录] *(挂载光盘或分区)列(mount /dev/cdroom /dvd/)
20,umount [挂载点目录] (*卸载挂载的光盘)umount /dvd/
21,cd ..返回上一级 cd ~[用户名] :切换用户的家 useradd [名字] :创建新用户
22,exit 退出 date显示时间 bc计算器 cal 日历(+年会显示全年日历)
23,rm 删除 -r 递归删除 -f 强制删除
24,mv 移动
25,cp 复制 (格式 .当前目录 ..返回上一级目录 ~用户家目录)
-r (递归,复制目录必须有此项)
26,grep 搜索文本文档内容
- -
- -n 添加行号 (}# grep -n "root" user)
- -v 取反匹配项
- -i 忽略大小写(列:]# grep -i man /etc/man_db.conf #忽略大小写)
(列:grep -v root /etc/passwd #输出不包含root的行
grep -i man /etc/man_db.conf #忽略大小写
- –^word 以字符串word开头
- –word$ 以字符串word结尾)
27,ailas 简化复杂的命令
(• 查看已设置的别名
alias [别名名称]
定义新的别名
alias 别名名称= '实际执行的命令行'
取消已设置的别名
unalias [别名名称])
28,nano 文本编辑器
28.1
netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:
- -a显示所有端口的信息
- -n以数字格式显示端口号
- -t显示TCP连接的端口
- -u显示UDP连接的端口
- -l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
- -p显示监听端口的服务名称是什么(也就是程序名称)
(列]# netstat -anptu | grep nginx)
29 ,tar集成备份工具
– -c:创建归档
– -x:释放归档
– -f:指定归档文件名称,必须放在所有选项的最后
– -z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
– -t:显示归档中的文件清单
– -C:指定释放路径
tar 打包格式
tar 选项 /路径/压缩包名字 /路径/被归档压缩的数据…..
-c:创建归档 -f:指定压缩包名字
-z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
(列]#tar -zcf /opt/nsd01.tar.gz /home /etc/passwd # 进行gz格式打包
tar -jcf /opt/nsd01.tar.bz2 /home /etc/passwd
tar -Jcf /opt/nsd01.tar.xz /home /etc/passwd)
-t:显示归档中的文件清单
(列:tar -tf /opt/nsd01.tar.gz)
tar 解包格式
tar 选项 /路径/压缩包的名字 -C(大写) /路径/释放位置
(列:tar -xf /opt/nsd01.tar.gz -C /stu01/)
30, >:覆盖重定向
>>:追加重定向
(列: cat --help > /opt/test.txt)
31.find基本设置
find [查找目录] [条件]
- -type 类型(f文件、d目录、l快捷方式)
- -name "文档名称" (# find /etc/ -name "*tab")
- -size +|-文件大小(k、M、G)(# find /boot/ -size +300k)
- -user 用户名(列find / -user student #在整个系统中进行查找/proc:不占用磁盘空间,反映内存的数据)
- -mtime 修改时间( -mtime +10 #10天之前的数据
-mtime -10 #最近10天之内的数据)
find高级使用
– find [范围] [条件] -exec 处理命令 {} \;
– -exec:额外操作的开始,传递参数一次传递一个
– {}:代表find查询的每一个结果
– \; : 额外操作的结束
(列: find /boot/ -size +10M -exec cp {} /opt \;)
rpm包
普通执行程序 安装目录(/usr/bin/ 、/bin/)
服务器程序、管理工具 安装目录(/usr/sbin/ 、/sbin/)
配置文件 安装目录(/etc/ 、/etc/软件名/)
日志文件 安装目录(/var/log/、/var/log/软件名/)
程序文档、man手册页 安装目录(/usr/share/doc/ 、/usr/share/man/)
RPM包 格式:rpm -q[子选项] [软件名称]
- -a:列出已安装的所有软件包
- -i:查看指定软件的详细信息
- -l:查看指定软件的文件安装清单
( rpm -q zip #查询当前系统是否安装zip软件
rpm -qa #列出系统已安装所有的软件
rpm -qi firefox #显示软件的信息
rpm -ql firefox #显示软件的安装清单.
rpm -qpl /mydvd/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #查看软件包安装清单
rpm -qpi /mydvd/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #查看软件包的信息
)
查询某个目录/文件是哪个RPM包带来的
– 格式:rpm -qf [文件路径]…
安装RPM软件
– 格式:rpm -i RPM包文件...
-v:显示细节信息
-h:以#号显示安装进度
--force:强制安装、覆盖安装
--test:测试安装,不做真实安装动作
rpm -ivh /mydvd/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm #安装vsftpd包
rpm -q vsftpd #查询软件是否安装成功
rpm -e vsftpd #卸载软件
rpm -ivh --force /mydvd/Packages/hostname-3.13-3.el7.x86_64.rpm #强制安装
32, Yum软件仓库
仓库配置:/etc/yum.repos.d/*.repo
[源名称] :自定义名称,具有唯一性
name:本软件源的描述字串
baseurl:指定YUM服务端的URL地址
enabled:是否启用此频道
gpgcheck:是否验证待安装的RPM包
gpgkey:用于RPM软件包验证的密钥文件
例子:
[nsd2007] #仓库标识
name=centos7 #仓库描述信息
baseurl=file:///mydvd #服务端路径
enabled=1 #本文件是否生效
gpgcheck=1 #是否检测红帽签名信息
gpgkey=file:///mydvd/RPM-GPG-KEY-CentOS-7
yum -y install [] #安装软件包
yum remove [] #卸载软件
yum list bash #查询仓库中是否有ftp软件
yum search ftp #模糊查询包含ftp即可
yum provides guestmount #查询包来自什么路径
*/
33, du,统计目录的占用空间
– -s:只统计每个参数所占用的总空间大小
– -h:提供易读容量单位(K、M等)
34, date,查看/调整系统日期时间
– date +%F、date +%R
– date +"%Y-%m-%d %H:%M:%S"
– date -s "yyyy-mm-dd HH:MM:SS"
date +%Y年 m月 d日 F年月日 H时 M分 S秒 R时分秒
35,格式:ln -s /路径/源数据 /路径/快捷方式名字 #软连接
格式:ln /路径/源数据 /路径/快捷方式名字 #硬链接
硬链接: 软连接:
1.不可以针对目录制作快捷方式 1.可以针对目录制作快捷方式
2.不可以跨越分区 2.可以跨越分区
3.源数据的消失,快捷方式仍然有效 3.源数据的消失,快捷方式失效
36,zip
格式:zip [-r] 备份文件.zip 被归档的文档...
unzip解压
格式:unzip 备份文件.zip [-d 目标文件夹]
40, /etc/shadow,保存密码字串/有效期等信息
– 每个用户记录一行,以:分割为9个字段
]# grep nsd01 /etc/shadow
nsd01:$6$NVe937Nd$B0n94XrpQ.LipQHTpYh0iV/M4jCLdccfHxzRLprdxDzwk8WDDh/TzdTfh8lA9y9WKJ.8Ls/l5.w/1W.nV6CFX/:18481:0:99999:7:::
字段1:用户帐号的名称
字段2:加密后的密码字符串
字段3:上次修改密码的时间
字段4:密码的最短有效天数,默认0
字段5:密码的最长有效天数,默认99999
字段6:密码过期前的警告天数,默认7
字段7:密码过期后多少天禁用此用户账号
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
41, 配置文件来源
新建用户时,新建用户家目录,根据 /etc/skel 模板目录复制
]# ls -A /etc/skel/
]# touch /etc/skel/haxi.txt
]# mkdir /etc/skel/test
]# ls -A /etc/skel/
]# useradd nsd19
]# ls -A /home/nsd19
]# useradd nsd20
]# ls -A /home/nsd20
主要的初始配置文件
~/.bash_profile:每次登录系统时执行,定义初始变量值
~/.bashrc:每次进入新的Bash环境时执行(开启新的终端)
]# vim /root/.bashrc #定义永久别名
(alias haha='echo haha')定义暂时别名
vim /root/.bashrc #定义永久别名
/etc/bashrc:全局配置文件,影响全体用户 (开启新的终端)
37, 命令useradd
– 格式:useradd [选项]... 用户名
• 常用命令选项
– -u:指定 UID 标记号 ( useradd -u 1500 nsd02 #指定UID创建用户)
– -d:指定宿主目录(家目录),缺省为 /home/用户名(useradd -d /opt/nsd04 nsd04)
– -G:指定所属的附加组 (useradd -G stugrp nsd06)
– -s:指定用户的登录解释器 (useradd -s /sbin/nologin nsd10)禁止用户登录操作系统
/sbin/nologin:禁止用户登录操作系统
38, usermod命令
– 格式:usermod [选项]... 用户名
• 常用命令选项
– -l:更改用户帐号的登录名称 (usermod -l stu13 nsd13 #修改用户名字)
– -u:用户id (usermod -u 1600 stu13 #修改用户的UID)
– -d:家目录路径 ( usermod -d /etc/abc nsd15)
– -s:登录解释器 (usermod -s /sbin/nologin stu13 #修改用户的解释器程序)
– -G:附加组 //重置附加组 (usermod -G stugrp nsd16)
39, passwd命令,支持非交互式设置密码
– --stdin:从标准输入(比如管道)取密码
42,chmod命令
- 格式 chomd [uroa] [+ - =] [rex] 文件
chmod [nnn] 文件
-R :递归修改权限
(列chmod u+w /nsd01 #所有者加上w权限
chmod u=w /nsd01 #所有者重新定义权限
chmod g+w /nsd01 #所属组加上w权限
chmod u=rwx,g=rx,o=rwx /nsd01 #u用户赋予所有权限,#用户组赋予
)
43, 读取:允许查看内容-read 利用r表示
写入:允许修改内容-write 利用w表示
可执行:允许运行和切换-excute 利用x表示
对于文本文件:
r:查看文件内容 cat head tail less grep
w:修改文件内容并且能够保存 vim > >>
x:学习shell与Python时期
– 所有者:拥有此文件/目录的用户-user 利用u表示
– 所属组:拥有此文件/目录的组-group利用g表示
– 其他用户:除所有者、所属组以外的用户-other利用o表示
执行 ls -l .. .. 命令查看,输出信息包括7个字段
以-开头:文本文件
以d开头:目录
以l开头:快捷方式
判定用户具备的权限
1.首先判断用户对于该数据所处身份
2.查看相应身份的权限位
对于目录:
r:可以查看目录下内容
w:可以新建、删除、改名、目录的内容 ,对目录本身无法修改
x:可以切换到此目录下
44, 权限可以用数字方式表示
r、w、x分别对应4、2、1,后3组分别求和
User权限 Group权限 Other权限
r w x r - x r - x
4 2 1 4 0 1 4 0 1
7 5 5
列:chmod 755 /nsd04
45,chown命令
chown 属主 文件...
chown 属主:属组 文件...
chown :属组 文件...
常用命令选项
-R:递归修改权限
( chown lisi /nsd05 #单独修改所属主:用户
chown lisi:sg /nsd05 #修改所属组 :用户组
chown :sg /nsd05 #单独修改所属组 用户组
列:groupadd tarena #创建tarena组 )
46 ,
一般文件默认均不给 x 执行权限
其他取决于 umask(权限掩码) 设置
默认情况下,umask值为022。新建目录权限为755,新建文件权限为644
47, 粘滞位,Sticky Bit 权限
– 占用其他人(Other)的 x 位
– 显示为 t 或 T,取决于其他人是否有 x 权限
– 适用于目录,用来限制用户滥用写入权
– 在设置了粘滞位的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档
()大T代表未赋予文件x选项,反之则赋予)
(chmod o+t /home/public 加t之后本用户创建文件别的用户不可以删除,也不可以删除别的用户创建的文件)
48, SGID权限
– 占用属组(Group)的 x 位
– 显示为 s 或 S,取决于属组是否有 x 权限
– 对目录有效
– 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份
(解释 :使用root赋予Sgid权限之后 比如李四用户创建个文件,这个文件的所属组是root)
[root@localhost ~]# mkdir /nsd11
[root@localhost ~]# ls -ld /nsd11
[root@localhost ~]# chown :tmooc /nsd11 #修改所属组
[root@localhost ~]# ls -ld /nsd11
[root@localhost ~]# mkdir /nsd11/test01
[root@localhost ~]# ls -ld /nsd11/test01
[root@localhost ~]# chmod g+s /nsd11 #赋予SGID权限
[root@localhost ~]# ls -ld /nsd11/
[root@localhost ~]# mkdir /nsd11/test02
[root@localhost ~]# ls -ld /nsd11/test02 #查看继承效果
49, 文档归属的局限性
任何人只属于三种角色:属主、属组、其他人
无法实现更精细的控制
acl访问策略
考点:作用:能够对个别用户、个别组设置独立的权限
大多数挂载的EXT3/4、XFS文件系统默认已支持
setfacl命令
– 格式:setfacl [选项] u:用户名:权限 文件...
setfacl [选项] g:组名:权限 文件...
常用命令选项
– -m:定义一条ACL策略 (setfacl -m u:zhangsan:rx /nsd13,制定/nsd13 用户所属zhangsan ,赋予读取功能)
– -x:清除指定的ACL策略(setfacl -x u:zhangsan /nsd15 #删除指定用户的ACL策略)
– -b:清除所有已设置的ACL策略(setfacl -b /nsd15 #清空所有的ACL策略)
– -R:递归设置ACL策略(setfacl -Rm u:dc:rwx /opt/aa)
利用ACL策略拉黑某个用户(setfacl -m u:lisi:--- /nsd16)
50,lsblk #查看当前系统的识别的硬盘
51,常见分区模式:MBR、GPT
MBR分区模式:
– 分区类型:主分区、扩展分区、逻辑分区
– 最多4个主分区
– 划分的方案:3个主分区+1个扩展分区(n个逻辑分区)
– 逻辑分区建立在扩展分区之上
– 可以存储数据的分区:主分区、逻辑分区
– 最大支持容量为 2.2TB 的磁盘
– 扩展分区不能格式化,不能存储数据,至多一个
52, 修改硬盘的分区表(分区规划的工具)
– fdisk 硬盘设备
常用交互指令:
[root@localhost ~]# fdisk /dev/sdb
m 列出指令帮助
p 查看现有的分区表
n 新建分区
d 删除分区
q 放弃更改并退出
w 保存更改并退出
53,blkid : #查看文件系统类型 (列:blkid /dev/sdb2 #查看文件系统类型)
54,开机自动挂载在/etc/fstab 目录
mount -a: 用来检测开机是否挂载
格式:设备路径 挂载点 类型 参数 备份标记 检测顺序
列:/dev/sdb1 /mypart1 ext4 defaults 0 0
列:/dev/sdb1 /mypart1 xfs defaults 0 0
列:/dev/sdb2 swap swap defaults 0 0
55,partprobe #刷新分区表
56,格式化 :mkfs.格式化分区格式 分区绝对路径 mkfs.ext4 mkfs.xfss
57,mktable gpt #指定分区模式为GPT
58,mkpart #划分新的分区
-help 查看帮助
-mktable msdos | gpt 建立指定分区
-mkpart 指定大小建立主分区
-print 查看分区表
-rm 序号 删除指定分区
-quit 退出
59,mkswap #格式化交换文件系统(列:mkswap /dev/sdc1)
60,swapon #启用交换分区(列:swapon /dev/sdc1)
swapoff #停用交换分区(列:swapoff /dev/sdc1 )
61,free -m #查看交换空间总共的大小
unit #以便携方式查看(unit -m)
62,swapon -a #专门用于检测交换分区
63,dd 利用文件进行交换空间
dd if=源设备 of=目标设备 bs=块大小 count=次数
(列:dd if=/dev/zero of=/opt/swap.txt bs=1M count=2048)
利用文件占用空间,充当交换空间
]# mkswap /opt/swap.txt #格式化交换文件系统
]# swapon /opt/swap.txt #启用交换文件
swapon: /opt/swap.txt:不安全的权限 0644,建议使用 0600。
]# swapon #查看交接空间组成的成员信息
64, /boot 开机所需文件—内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户家目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin 与/sbin 下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的“共享”临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin Linux 系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
65, 功能 物理卷管理 卷组管理 逻辑卷管理
Scan 扫描 pvscan vgscan lvscan
Create 创建 pvcreate vgcreate lvcreate
Display 显示 pvdisplay vgdisplay lvdisplay
Remove 删除 pvremove vgremove lvremove
Extend 扩展 / vgextend lvextend
66, 建立卷组
命令格式:vgcreate 卷组名 设备路径……. (列:vgcreate systemvg /dev/sdb1 /dev/sdb2)
创建单词:Successfully(成功)
67, vgs #查看当前系统中所有卷组信息
68, pvs #查看系统中物理卷信息
69, 建立逻辑卷
命令格式:lvcreate -L 大小 -n 逻辑卷名字 卷组名
(列:lvcreate -L 16G -n vo systemvg )
70, vgs #查看卷组信息
71, lvs #查看逻辑卷信息
72, 逻辑卷的使用
ls -l /dev/systemvg/vo
mkfs.xfs /dev/systemvg/vo #格式化
(设置开机自启
vim /etc/fstab打开文件写入下面这行
/dev/systemvg/vo /mylv xfs defaults 0 0)
mount -a 查看是否挂载
df -h
73, xfs_growfs:刷新xfs文件系统
resize2fs:刷新ext4文件系统
74, 进程管理
pstree — Processes Tree显示进程树
格式:pstree [选项] [PID或用户名]
常用命令选项
-a:显示完整的命令行
-p:列出对应PID编号
systemd:上帝进程(所有进程的父进程)
pstree #查看系统整个进程树信息
pstree lisi #查看lisi用户开启的进程
pstree -p lisi #显示PID
pstree -ap lisi #显示PID与完整命令行
75, ps — Processes Snapshot
– 格式:ps [选项]...
常用命令选项
– aux:显示当前终端所有进程(a)、当前用户在所有终端下的进程(x)、以用户格式输出(u)
– -elf:显示系统内所有进程(-e)、以长格式输出(-l)信息、包括最完整的进程信息(-f)
76, ps aux 操作:列出正在运行的所有进程,显示信息非常完整
用户 进程ID %CPU %内存 虚拟内存 固定内存 终端 状态 起始时间 CPU时间 程序指令
77, ps -elf 操作:列出正在运行的所有进程,显示进程的父进程的PID
PPID列: 父进程的PID
78, top进程动态排名
[root@localhost ~]# top -d 1 #每隔1秒钟刷新
按P(大写)进行CPU排序
按M(大写)进行内存排序
79, pgrep — Process Grep 检索进程
用途:pgrep [选项]... 查询条件
常用命令选项
-l:输出进程名,而不仅仅是 PID
-U:检索指定用户的进程
-x:精确匹配完整的进程名
(列: pgrep -l a #包含a即可
pgrep -l cron #包含cron即可
pgrep -x crond #必须严格匹配
pgrep -lx crond)
80, 进程的前后台调度
Ctrl + z 组合键:挂起当前进程(暂停并转入后台)
jobs 命令:查看后台任务列表
fg 命令:将后台任务恢复到前台运行
bg 命令:激活后台被挂起的任务
]# yum -y install xorg-x11-apps
]# xeyes & #将程序以正在运行的状态,放入后台运行
]# xeyes
jobs #查看后台进行信息
]# bg 2 #让后台的编号为2的进程,由暂停变成运行状态
]# jobs
]# fg 1 #让后台的编号为2的进程,恢复到前台
xeyes
^C #按Ctrl + c,结束正在运行进程
81, 干掉进程的不同方法
– Ctrl+c 组合键,中断当前命令程序
– kill [-9] PID... 、kill [-9] %后台任务编号
– killall [-9] 进程名...
– pkill [-9] 查找条件 #包含即可
(kill 10556 #杀死编号为10556进程
kill -9 10595 #强制杀死
killall -9 -u lisi #强制踢出一个用户
killall xeyes #杀死所有xeyes
)
82, /eth/hostname # 永久的主机名,配置文件
hostname svr7.tedu.cn #临时修改设置
83, 修改引导内核 vim /etc/default/grub #引导内核启动的文件
…….此处省略一万字
GRUB_CMDLINE_LINUX=" …….此处省略一万字
quiet net.ifnames=0 biosdevname=0"
…….此处省略一万字
修改完后进行重新生成引导
grub2-mkconfig -o /boot/grub2/grub.cfg #重新生成引导文件
]# reboot #重启验证
84, 显示识别网卡的信息 nmcli connection show #显示识别的网卡信息
删除网卡 nmcli connection delete 有线连接\ 1 #删除网卡配置
添加网卡 nmcli connection add type ethernet con-name eth0 ifname eth0 #添加网络设备
格式: nmcli 连接网络设备 添加 类型 以太网设备 命名为 eth0 网卡设备为 eth0
添加虚拟网卡 nmcli connection add type tema con-name team0 ifname team0 config '{"runner: {name}"}'
添加成员 nmcli connection add type tema-slave con-name team0-1 ifname team0 config '{"runner: {name}"}'
85, 配置网卡ip, 子网掩码 ,网关
格式 nmcli 连接网络设备 修改网卡 eth0 ipv4.方法 手工配置 ipv4.地址 192.168.4.7/24
ipv4.网关 192.168.4.254 每次开机自动启用上述配置
nmcli connection modify eth0 ipv4.method manual
ipv4.addresses 192.168.4.7/24
ipv4.gateway 192.168.4.254
connection.autoconnect yes
vim配置网卡文件
目录:网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet #网络类型 = 以太网
PROXY_METHOD=none #硬件地址mac地址
BROWSER_ONLY=no
BOOTPROTO=none #获取ip方式 dhcp代表动态获取 none,staic表示手工配置
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0 #网卡名字给用户看的
UUID=19cdc1c8-1c07-4513-a9ca-cec2bb192db0 #UUID做到系统独一无二
DEVICE=eth0 #网卡名字给系统看的
ONBOOT=yes #是否激活网卡设备
IPADDR=192.168.4.10 #网卡ip地址
PREFIX=24 #子网掩码
GATEWAY=192.168.4.254 #配置网关
86, 查看网关
route -n #查看Linux路由表(查看网关命令)
87, 配置本机的DNS服务器
地址: /etc/resolv.conf
添加NDS
nameserver 192.168.100.1
88, 配置永久
# mkdir /mydvd #创建挂载点目录
]# mount /dev/cdrom /mydvd #挂载光驱设备
mount: /dev/sr0 写保护,将以只读方式挂载
]# ls /mydvd
]# rm -rf /etc/yum.repos.d/ *
]# vim /etc/yum.repos.d/mydvd.repo
[dc]
name=centos7
baseurl=file:///mydvd
enabled=1
gpgcheck=0
]# yum -y install xorg-x11-apps
]# rpm -q xorg-x11-apps #查询软件是否安装成功
]# blkid /dev/cdrom #查看文件系统类型
]# vim /etc/fstab
/dev/cdrom /mydvd iso9660 defaults 0 0
]# reboot
]# ifconfig | head -2
]# yum repolist 查看yum源
89, 复制虚拟机前提条件
[root@svr7 ~]# vim /etc/fstab #修改UUID为/dev/sda1
/dev/sda1 /boot xfs defaults 0 0
[root@svr7 ~]#
90, Linux远程管理Linux
SSH协议,Secure Shell
为客户机提供安全的 Shell 环境
默认端口:TCP 22
OpenSSH 服务
服务名称:sshd
主程序:/usr/sbin/sshd、/usr/bin/ssh
配置文件:/etc/ssh/sshd_config
/etc/ssh/ssh_config
格式ssh 对方用户名@IP地址
列: ssh root@192.168.4.207
91, ssh+cp结合,传递数据
格式
scp 自己用户名@自己IP地址:自己目录 对方目录
scp 对方用户名@对方IP地址:对方目录 我的目录
scp root@192.168.4.207:/etc/fstab /root
92, ssh实现无密码的验证
ssh-keygen #生成公钥与私钥一路回车
]#root@svr7 ~]# ls /root/.ssh/
id_rsa(私钥) id_rsa.pub (公钥) known_hosts(记录曾经远程管理过的机器)
传递公钥给虚拟机B
]# ssh-copy-id root@192.168.4.207
输入密码
]# ssh root@192.168.4.207
#再次查看是否有密码。
93, 利用ip命令 查看ip地址
ip address shou
ip a s #支持命令缩写
临时添加一张网卡 ip address add 192.168.8.1/24 dev eth0 #临时添加一张网卡
94, 源码编译安装
步骤1:安装开发工具
]# yum -y install gcc
]# yum -y install make
步骤2:tar解包,释放源代码至指定目录
]# tar -xf /root/tools.tar.gz -C /usr/local/
]# ls /usr/local/
]# ls /usr/local/tools/
]# tar -xf /usr/local/tools/inotify-tools-3.13.tar.gz -C /usr/local/
]# ls /usr/local/
]# cd /usr/local/inotify-tools-3.13/
]# ls
步骤3:./configure 配置,指定安装目录/功能模块等选项
作用1:检测系统是否安装gcc 作用2:指定安装位置
]# ./configure --prefix=/opt/myrpm #当前运行脚本指定安装位置
步骤4:make 编译,生成可执行的二进制程序文件
]# make
步骤5:make install 安装,将编译好的文件复制到安装目录
]# make install
]# ls /opt/
]# ls /opt/myrpm/
]# ls /opt/myrpm/bin/ #查看安装好的程序
95, 自定义yum仓库
createrepo /usr/local/tools/other/ #创建仓库清单、在rpm包的父目录
搭建yum仓库
vim /etc/yum.repos.d/mydvd.repo #书写客户端配置文件
96, 日志
/var/log/messages,记录内核消息、各种服务的公共消息
/var/log/dmesg,记录系统启动过程的各种消息
/var/log/cron,记录与cron计划任务相关的消息
/var/log/maillog,记录邮件收发相关的消息
/var/log/secure,记录与访问限制相关的安全消息
日志分析
通用分析工具
tail、tailf、less、grep等文本浏览/检索命令
awk、sed等格式化过滤工具
tailf:实时跟踪日志消息
users、who、w 命令
查看已登录的用户信息,详细度不同
last、lastb 命令
查看最近登录成功/失败的用户信息
tailf:实时跟踪日志消息
查看用户登录信息
users:最省略
who:中立
w:最详细
last -2 #最近登录成功的2条记录
lastb -2 #最近登录失败的2条记录
pts(图形命令行终端)
97, SELinux的运行模式
enforcing(强制)、permissive(宽松)
disabled(彻底禁用)
任何模式变成disabled,都需要重启系统
切换运行模式
临时切换:setenforce 1|0
固定配置:/etc/selinux/config 文件
getenforce #查看当前系统SELinux模式
setenforce 0 #临时设置当前SELinux模式
vim /etc/selinux/config #更改永久selinux运行模式
构建基本的Web服务
Web服务:提供网页内容的服务
Web服务器:提供网页内容的服务机器
实现web服务软件:httpd nginx tomcat
http协议:超文本传输协议
安装 httpd
编写网页 vim /var/www/html/index.html
hahaxixihehelele哈哈嘻嘻
运行httpd /usr/sbin/httpd #绝对路径方式运行程序
查看浏览器 curl http://192.168.4.7 #命令行浏览器
curl:命令行浏览器必须是文字图形显示不出来 (列:curl http://192168.4.7)
firefox :图形浏览器 (列 curl http://192.168.4.7)
98, 管理工具:firewall-cmd(命令)、firewall-config(图形工具)
public:仅允许访问本机的ssh、dhcp、ping服务
trusted:允许任何访问
block:拒绝任何来访请求,有明确的回应
drop:丢弃任何来访的数据包,没有明确的回应
1.查看请求中源IP地址,查看自己所有区域,哪个区域有该源IP地址规则,则进入哪个区域
2.进入默认区域(默认情况下为public)
firewall-cmd --get-default-zone #查看默认区域
firewall-cmd --set-default-zone=trusted #修改默认区域
firewall-cmd --zone=public --list-all #查看区域规则
firewall-cmd --zone=public --add-service=http #添加协议 刷新失效
永久规则
永久(--permanent)
firewall-cmd --reload #刷新重新加载防火墙永久的配置
firewall-cmd --permanent --zone=public --add-service=http #永久规则
单独拒绝192.168.4.207所有访问,允许其他机器
firewall-cmd --zone=block --add-source=192.168.4.207
99, 上帝进程、
Linux系统和服务管理器
–是内核引导之后加载的第一个初始化进程(PID=1)
–负责掌控整个Linux的运行/服务资源组合
•一个更高效的系统&服务管理器
–开机服务并行启动,各系统服务间的精确依赖
–配置目录:/etc/systemd/system/
–服务目录:/lib/systemd/system/
–主要管理工具:systemctl
100, systemctl -t service --all #列出所有的服务
systemctl restart 服务名 #重起服务
systemctl start 服务名 #开启服务
systemctl stop 服务名 #停止服务
systemctl status 服务名 #查看服务当前的状态
systemctl enable 服务名 #设置服务开机自启动
systemctl disable 服务名 #设置服务禁止开机自启动
systemctl is-enabled 服务名 #查看服务是否开机自启
101, RHEL7:运行模式(运行级别)
字符模式:multi-user.target #当前直接切换到字符模式 相当于init 3
图形模式:graphical.target #当前直接切换到图形模式 相当于init 5
(列 systemctl set-default multi-user.target 设置永久策略,每次开机自动进入
systemctl get-default multi-user.target )
yum provides */guestmount #查看仓库中那个包产生
102, 离线访问虚拟机
使用 guestmount 工具
支持离线挂载 raw、qcow2 格式虚拟机磁盘
可以在虚拟机关机的情况下,直接修改磁盘中的文档
方便对虚拟机定制、修复、脚本维护
!!! 需要注意 SELinux 机制的影响
基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
103,
修改用户家目录
]# useradd tom
]# grep tom /etc/passwd
]# ls /home/
]# usermod -d /opt/mytom tom
]# grep tom /etc/passwd
]# ls /opt/mytom
ls: 无法访问/opt/mytom: 没有那个文件或目录
]# ls -A /etc/skel/ #用户家目录配置文件来源的模板目录
]# cp -r /etc/skel/ /opt/mytom
]# ls -A /opt/mytom
]# chown -R tom:tom /opt/mytom #修改归属关系
]# ls -ld /opt/mytom
]# ls -lA /opt/mytom
104, web
供的默认配置
– Listen:监听地址:端口(80)
– ServerName:本站点注册的DNS名称(空缺)
– DocumentRoot:网页根目录(/var/www/html)
– DirectoryIndex:起始页/首页文件名(index.html)
针对网页文件存放路径,访问控制
默认情况下子目录默认继承父目录的访问控制
除非针对子目录有单独的访问控制规则
默认情况下允许所有客户端访问只有/var/www
<Directory />
Require all denied #拒绝所有客户端访问
</Directory>
<Directory "/var/www">
Require all granted #允许所有客户端访问
</Directory>
<Directory "/webroot"> #针对/webroot进行访问控制
Require all granted #允许所有
Listen 8000 #添加端口
*************************虚拟Web主机
作用:一台服务器,提供多个不同页面
• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
• 为每个虚拟站点添加配置
<VirtualHost IP地址:端口>
ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录
</VirtualHost>
• 配置文件路径
– /etc/httpd/conf/httpd.conf #主配置文件
– /etc/httpd/conf.d/*.conf #调用配置文件
• 一旦使用虚拟Web主机功能,所有的网站都要使用虚拟Web主机功能进行呈现
修改配置文件
[root@svr7 ~]# vim /etc/exports
– 文件夹路径 客户机地址(权限) 客户机地址(权限) .. ..
/public *(ro) #允许所有客户端,以只读方式进行访问
3.开机自动挂载
_netdev:声明网络设备,本机在识别网络参数后,在进行挂载本设备
[root@pc207 ~]# vim /etc/fstab
192.168.4.7:/public /mnt/nsd nfs defaults,_netdev 0 0
[root@pc207 ~]# umount /mnt/nsd
[root@pc207 ~]# df -h
[root@pc207 ~]# mount -a
[root@pc207 ~]# df -h
105, DNS服务
为什么需要DNS系统
www.baidu.com 与 119.75.217.56,哪个更好记?
互联网中的114查号台/导航员
DNS服务器的功能
正向解析:根据注册的域名查找其对应的IP地址
反向解析:根据IP地址查找对应的注册域名,不常用
DNS服务器分类:
根域名服务器、一级DNS服务器、二级DNS服务器、三级DNS服务器
根域名 : .
一级域名: .cn .us .tw .hk .jp .kr ……….
二级域名: .com.cn .org.cn .net.cn ………
三级域名: haha.com.cn xixi.com.cn .nb.com.cn …..
• BIND服务器端程序
– 主要执行程序:/usr/sbin/named
– 系统服务:named
– DNS协议默认端口:TCP/UDP 53
– 运行时的虚拟根环境:/var/named/chroot/
• 主配置文件:/etc/named.conf #设置负责解析的域名
• 地址库文件:/var/named/ #完全合格的主机名与IP地址对应关系
zone "tedu.cn" IN { #定义负责的解析tedu.cn域名
type master; #权威主DNS服务器
file "tedu.cn.zone"; #地址库文件名称
};
建立地址库文件
]# cd /var/named/
]# cp -p named.localhost tedu.cn.zone #保持权限不变
]# ls -l tedu.cn.zone
]# vim tedu.cn.zone
……此处省略一万字
edu.cn. NS svr7 #声明DNS服务器为svr7
svr7 A 192.168.4.7 #svr7解析结果为192.168.4.7
www A 1.1.1.1
ftp A 2.2.2.2
[root@svr7 named]# systemctl restart named
nslookup www.tedu.cn #nslookup测试DNS服务器 在b主机上
*/
nmtui 使用字符界面配置ip
shell
bash优点 支持tab键、历史记录、别名、管道、重定向、快捷键
cat /etc/shells #查看系统中所有的解释器
#!/bin/bash 脚本第一行必须是解释器
1,执行方式
赋予x权限,然后使用路径执行
2,使用解释器执行,会多开启子进程
列(bash tesh01.sh)
3,使用source命令,使用默认解释器执行,不会开启子进程
列(source test01.sh)
二 环境变量
USER当前用户名
HOME当前用户的家目录
UID当前用户的id号
SHELL当前用户的解释器 P
WD当前位置
PS1一级提示符
PS2二级提示符
PATH存储执行指令的目录
列(echo $PATH)
env 查看所有环境变量
set 查看所有变量
1,预定义变量与位置变量
$* $# $$ $? $1 $2 $3 ….
#!/bin/bash
echo $1 获取第1个位置变量
echo $2 获取第2个位置变量
echo $3 获取第3个位置变量
echo $* 所有位置变量
echo $# 所有位置变量的个数
echo $$ 随机进程号
echo $? 判断上一个任务是否成功,0是成功,非0是失败
2,引号
‘ ’ 单引号 界定范围 可以屏蔽特殊符号
列(touch 'x y'
[root@localhost opt]# echo '$a $a $a'
$a $a $a
)
“ ” 双引号 界定范围
列(
touch “x y”
[root@localhost opt]# echo "$a $a $a"
10 10 10
touch “x y”
)
` `反撇号 获取指令的执行结果 ,或者使用$()
a=date 定义变量时如果使用命令则不会直接识别
a=`date` 使用反撇号可以将命令的执行结果赋值给变量
a=$(date) 效果同上
read指令
用法:read -p “提示的信息” 变量名
列(#!/bin/bash
read -p "请输入用户名:" u
useradd $u
read -p "请输入密码:" p
echo "$p" | passwd --stdin $u)
stty -echo 屏蔽回显
stty echo 回复回显
export #定义全局变量,可以让子进程使用父进程定义的变量
export -n 取消变量的全局效果
expr 可以计算数字并输出,运算符号两边要有空格
列(
expr 3 – 1 减法
expr 2 + 2 加法
expr 2 '*' 2 乘法
expr 2 \* 2 使用乘法时,这里使用\代表转义符号,可以屏蔽之后1个字符的特殊效果
expr 4 / 2 除法
expr 10 % 3 取余数
)
方法二用$[ ]结构,配合echo输出,同样可以实现加 减 乘 除 取余
echo $[1+1]
echo $[2-1]
echo $[2*2]
echo $[4/2]
echo $[5%3]
使用let指令,不输出计算结果,专用于创建变量,或者对变量进行自增减
条件测试
1,test 表达式
2, [ 表达式 ]
条件测试种类:
1,对字符串进行判断
可以使用的方式有
==两边是否相等
!=两边是否不等
-z变量是否为空
! -z 变量是否非空
[ a == a ] 判断字符串a是否等于a,如果相等,返回值就是0
[ root != $USER ] 判断当前用户名是否不叫root,如果不叫root,返回值就是0
[ -z $a ] 判断变量a是否为空,如果是,返回值是0
[ ! -z $a ]
&& 之前任务执行成功才执行之后任务
|| 之前任务执行失败才执行之后任务
对数字进行判断
-eq 是否相等
-ne 是否不等
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
#!/bin/bash
#检测登陆用户数量
x=$(who | wc -l) #将目前登录人数赋值给x
[ $x -ge 3 ] && echo "有人入侵服务器!牛老师来了!" | mail -s test root 如果大于等于3人登录就发邮件
对文件测试,加!可以取反测试
-e 文件是否存在,不关心类型
-f 文件是否存在,必须是普通文件
-d 文件是否存在,必须是目录 [ -d abc ] || mkdir abc 如果没有abc目录,就创建
-r 是否有读权限,对root无效
-w 是否有写权限,对root无效 [ -w abc ] 当前用户是否对abc文件具有写权限
-x 是否有x权限
if判断
if分支
单分支
if 条件测试 ;then #如果满足条件测试,那么
执行指令
就执行该指令
fi
多分支
if 条件测试 ;then
执行指令
else
执行指令
fi
多分支2
if 条件测试;then
执行指令
elif 条件测试;then
执行指令
elif 条件测试;then
执行指令
else
执行指令
fi
ping -c(ping的次数) 3 -i(间隔时间,单位秒) 0.2 -W(当不通时,加快反馈时间) 1
编写脚本,可以实现ping命令的结果反馈
#!/bin/bash
read -p "请输入要测试的ip地址:" ip
ping -c 3 -i 0.2 -W 1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "通了"
else
echo "不通"
fi
RANDEM #可以产生随机数
利用随机数与while循环编写猜数脚本:
#!/bin/bash
x=$[RANDOM%100]
while : 这里使用冒号表示无限循环
do
read -p "请输入一个整数(0-99)" n
if [ $x -eq $n ];then
echo "恭喜!猜对了!"
exit
elif [ $x -lt $n ];then 如果随机数比用户给的数字小
echo "猜大了"
else
echo "猜小了"
fi
done
ease分支
case分支 ,功能类似if,不如if强大,语句比if精简
语法格式:
case 变量名称 in
模式1)
执行指令;;
模式2)
执行指令;;
*)
执行指令
esac
列
#!/bin/bash
case $1 in
t|tt|T|TT) 如果$1里面的内容是下面小括号中一致,则会执行touch命令
touch $2 ;;
m|M) 如果$1里面的内容是下面小括号中一致,则会执行mkdir命令
mkdir $2 ;;
r) 如果$1里面的内容是下面小括号中一致,则会执行rm命令
rm -rf $2 ;;
*) 如果都不匹配,则执行echo命令
echo "t|m|r"
esac
修改颜色
echo -e "\033[92mABCD\033[0m" 修改为绿色并输出ABCD
循环控制
循环控制:
exit 可以终止循环,但脚本也同时退出
continue 可以终止当前循环,继续下一次循环
break 可以终止循环,继续循环之后的任务
编写脚本,可以为用户进行整数求和,0是退出并显
列:
#!/bin/bash
x=0
while :
do
read -p "请输入一个数字" n
[ -z $n ] && continue 如果用户输入的是空,则从新开始循环
[ $n -eq 0 ] && break 如果用户输入0,则跳出循环
let x+=n 将x与n相加赋值给x
done
echo "总和是$x"
字符串的截取
${变量名:截取的位置:截取的位数}
]# x=abcdefg
]# echo ${x:1:1} 从第2个字符开始截取1位
]# echo ${x:1:2} 从第2个字符开始截取2位
]# echo ${x:4:2} 从第5个字符开始截取2位
]# echo ${x:0:2} 从第1个字符开始截取2位
]# echo ${x::2} 效果同上
列 随机截取字符脚本
#!/bin/bash
n=$[RANDOM%7] #先获0-6之间的取随机数
x=abcdefg #再定义变量
echo ${x:n:1} #在通过随机数n截取x中的任意一个字符
优化版 可以获取随机的8位字符
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..8}
do
n=$[RANDOM%62] #得到0-61之间的随机数
p=${x:n:1} #随机截取一个x中的字符存储到变量p中
pass=$pass$p #将每次获取的随机字符存储到变量pass中
done
echo $pass #循环完8次之后,喊出最终结果
字符串的替换
${变量名称/old/new} #可以将旧的内容换成新的
a=123456 #定义变量作为素材
echo ${a/4/8} #将1个4替换成8
a=11223344 #再次定义素材
echo ${a/4/8} #将1个4换成8
echo ${a//4/8} #将所有4换成8
a=33444 #再次定义素材
echo ${a/4/8} #替换1个
echo ${a//4/8} #替换所有
echo ${a/44/88} #替换2个
变量初值(备用值)的定义
echo ${a:-123} #如果a是空则输出123,如果a有值则输出具体的值
字符串处理
1,字符串截取 ${变量名:截取位置:截取长度}
2,字符串替换 ${变量名/old/new}
3,初值的定义 ${变量名:-初值}
4,字符串的删除
${变量名#被删除内容} #从左往右删除 掐头
${变量名%被删除内容} #从右往左删除 去尾
a=abcxyzabc
echo ${a#abcdefgh} #从左往右删除到h
echo ${a#*h} #效果同上,更精简
a=abcxyzabc
echo ${a#ab} #从左往右删除到b
echo ${a#*b} #效果同上,更精简
echo ${a##*b} #从左往右删除到最后一个b
a= abcabcxyzxyz
echo ${a%xyz} #从右往左删除到x
echo ${a%x*} #从右往左删除到x,更精简
echo ${a%%x*} #从右往左删除到最后一个x
a=$(head -1 /etc/passwd)
echo ${a#*t} #从左往右删除到t
echo ${a#*0} #从左往右删除到0
echo ${a##*0} #从左往右删除到最后的0
echo ${a#*:root} #从左往右删除到:root
编写脚本,实现批量修改扩展名
touch abc{1..10}.txt #创建10个文件作为素材
#!/bin/bash
for i in $(ls *.txt) #找到所有txt文件交给for循环
do
n=${i%.*} #先用去尾删除扩展名
mv $i $n.doc #再将原文件修改为doc扩展名
done
正则表达式,使用若干符号配合某工具实现对文档的过滤、查找等功能
head -5 /etc/passwd > user 准备素材
grep bin user 找有bin的行
grep ^bin user 找以bin开头的行
grep bash user 找有bash的行
grep bash$ user 找以bash结尾的行
vim user 编辑文档添加空行
grep ^$ user 找空行
grep "[root]" user 找root四个字符任意一个
grep "[rot]" user 效果同上,找rot任意一个字符
grep "rot" user 找连续的rot字符串
grep "[^rot]" user 效果同上取反查找
grep "[a-z]" user 找所有小写字母
grep "[A-Z]" user 找所有大写字母
grep "[a-Z]" user 找所有字母
grep "[0-9]" user 找所有数字
grep "r..t" user 找rt之间有2个任意字符的行
grep "r...t" user 找rt之间有3个任意字符的行
grep "*" user *号是匹配前一个字符任意次,不能单独使用
grep "ro*t" user 找rt,中间的o有没有都行
grep "." user 找任意单个字符
grep ".*" user 找任意
grep "ro\{2,4\}t" user 找rt,中间的o可以是2~4个
grep "ro\{2,\}t" user 找rt,中间的o可以是2个以及2个以上
grep "ro\{3,7\}t" user 找rt,中间的o可以是3~7个,没有匹配条件就没有任何显示
grep "ro\{3,\}t" user 找rt,中间的o可以是3个以及3个以上
grep "ro\{2\}t" user 找rt,中间的o必须是2个
grep -E "ro{2,4}t" user 使用扩展正则,需要-E选项
egrep "ro{2,4}t" user 效果同上
egrep "ro{2}t" user 效果等同"ro\{2\}t"
egrep "ro{3,}t" user 效果等同"ro\{3,\}t"
grep "ro\{1,\}t" user 找1次以及1次以上的o
egrep "ro{1,}t" user 效果同上,比较精简
egrep "ro+t" user 效果同上,最精简
grep "roo\{0,1\}t" user 找0~1次o
egrep "roo{0,1}t" user 效果同上,比较精简
egrep "roo?t" user 效果同上,最精简
egrep "root|^bin" user 找root或者以bin开头的行
egrep "\bthe\b" abc 找the,前后不允许出现数字,字母,下划线
grep -i "Root" user 忽略大小写,对egrep适用
grep -v "t" user 取反,找没有t的行,对egrep适用
grep -n "t" user 找到具体内容并显示行号,对egrep适用
sed 流式编辑器,可以对文档进行非交互式增删改查,逐行处理
适用方式:
1,前置指令 | sed 选项 定址符 指令
2,sed 选项 定址符 指令 被处理文档
选项 -n 屏蔽默认输出 -i 写入文件 -r 支持扩展正则
指令
p 输出
d 删除
s 替换
a 行下追加
i 行上添加
c 替换整行
sed -n '1p' user 输出第1行
sed -n '2p' user 输出第2行
sed -n '3p' user 输出第3行
sed -n '2,4p' user 输出第2~4行
sed -n '2,+1p' user 输出第2行以及后面1行
sed -n '2p;4p' user 输出第2行,第4行
sed -n '1~2p' user 查看奇数行
sed -n '2~2p' user 查看偶数行
sed -n '/^root/p' user 在sed中使用正则表达式输出以root开头的行
grep "^root" user 效果同上
egrep "^root|^bin" user 找root或者bin开头的行
sed -nr '/^root|^bin/p' user 在sed中查找,-r使用扩展正则,效果同上
sed -n '=' user 查看所有行号
sed -n '$=' user 查看最后一行的行号,相当于查看文档总共有几行
sed '1d' user 删第1行
sed 'd' user 删所有
sed '3d' user 删第3行
sed '2,5d' user 删2~5行
sed '4,+2d' user 删4行以及后面2行
sed '1d;3d' user 删第1行,第3行
sed '1~2d' user 删奇数行
sed '2~2d' user 删偶数行
sed '$d' user 删除最后一行
sed -n '$p' user 查看最后一行
sed中的替换,使用 s/old/new/
sed 's/2017/8888/' num 替换所有行的第1个2017为8888
sed '1s/2017/8888/' num 替换第1行的第1个2017
sed '2s/2017/8888/' num 替换第2行
sed '1,2s/2017/8888/' num 替换1~2行
sed 's/2017/8888/2' num 替换所有行的第2个2017
sed 's/2017/8888/3' num 替换所有行的第3个2017
sed '/2011/s/2017/8888/' num 替换有2011的行的第1个2017
sed 's/2017/8888/g' num 替换文档中所有的2017
sed -n 's/root/XXXX/p' /etc/passwd 替换每行第1个root,并只显示被替换的行
sed -n 's/root/XXXX/2p' /etc/passwd 替换每行第2个root,并只显示被替换的行
sed -n 's/root/XXXX/gp' /etc/passwd 替换每行所有root,并只显示被替换的行
尝试将user文档中的/bin/bash替换成/sbin/sh
tail -6 > /opt/user
sed 's//bin/bash//sbin/sh/' user 常规手段替换,内容会与替换 冲突,替换失败
sed 's/\/bin\/bash/\/sbin\/sh/' user 使用\转义符号,可以成功,但不方便
sed 's!/bin/bash!/sbin/sh!' user 更改替换的间隔符号是最理想方法
sed 's(/bin/bash(/sbin/sh(' user 效果同上
Sed中s替换的高级应用
1) 删除文件中每行的第二个、最后一个字符
sed 's/.//2;s/.$//' test 分两个步骤完成,中间用分号隔开,第一步将每行的第二个任意字符替换成空,第二步将每行的最后一个任意字符替换成空即可
2) 将文件中每行的第一个、倒数第1个字符互换
( ) 保留(复制)
echo abc > abc 创建素材
sed -r 's/(a)(b)(c)/\3\2\1/' abc 替换abc时复制每一个字符,后面替换的内容用\数字粘贴,可以任意调换位置
echo xyz >> abc 追加内容
sed -r 's/(a)(b)(c)/\3\2\1/' abc 再用之前的方法无法替换第2行
sed -r 's/(.)(.)(.)/\3\2\1/' abc 将具体字符用 . 替代即可
echo opqr >> abc 再次追加内容,4个字符的行
sed -r 's/(.)(.)(.)/\3\2\1/' abc 三个 . 不能匹配4个字符
sed -r 's/^(.)(.*)(.)$/\3\2\1/' abc 再次升级,分别找到第1个字符和最后1个字符,中间可以是任意
sed -r 's/^(.)(.*)(.)$/\3\2\1/' test
3)删除文件中所有的数字
sed -i 's/[0-9]//g' test 先找到任意数字,然后都替换成空
4)为文件中每个大写字母添加括号
sed -r 's/([A-Z])/{\1}/g' test 先找到任意大写字母,然后保留,最后替换成带括号的状态
-------------------------------
Sed其他指令
a 行下追加 i 行上添加 c 替换整行
sed 'a 666' abc 在所有行下追加666
sed '1a 666' abc 第1行下追加666
sed 'i 666' abc 所有行上添加666
sed '3i 666' abc 第3行上添加666
sed '2a 666' abc 第2行下追加666
sed 'c 666' abc 所有行替换成666
sed '/abc/c 666' abc 有abc的行才替换成666
编写脚本,找到使用bash解释器的用户,并按照 “用户名 密码” 的格式保存到log文件中
#!/bin/bash
u=$(sed -n '/bash$/s/:.*//p' /etc/passwd) 找到使用bash的人,并且将这些用户的名字存到变量u中
for i in $u 将这些人交给for循环处理
do
u1=$(grep $i: /etc/shadow) 用每个人名找到密码文件中shadow中对应的信息
u2=${u1#*:} 然后掐头
u3=${u2%%:*} 再去尾,得到纯粹的密码
echo "$i --> $u3" >> log 再按格式输出到文档中
done
-------------------------------
grep 模糊搜索
sed 比较精确的搜索
awk 精确搜索,逐行处理
使用方式:
1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符 指令 print 输出
awk的内置变量 $1第1列 $2第2列 $3第3列。。 $0所有列
NR 行号 NF列号
awk '{print}' test 输出test所有行所有列
awk '{print $1}' test 输出test所有行第1列
awk '{print $2}' test 输出test所有行第2列
awk '/the/{print}' test 输出有the的行的所有列
awk '/the/{print $3}' test 输出有the的行的第3列
awk '/the/{print $2,$3}' test 输出有the的行的第2列第3列
awk '/the/{print $0,$3}' test 输出有the的行的所有列,以及第3列
awk -F: '/root/{print $1}' user 使用F定义分隔符为冒号,输出有root的行的第1列
awk -F: '/^root/{print $7}' user 输出以root开头的行的第7列,也就是找用户的解释器
awk -F: '/^bin/{print $6}' user 输出以bin开头的第6列,也就是找bin的家目录
awk '{print "ABCD"}' test 输出常量ABCD
awk '{print ABCD}' test 输出变量ABCD,没有该变量,输出为空
awk -F: '{print $1,$7}' user 使用冒号作为分隔符,输出第1列,第7列
awk -F: '{print $1" 的解释器是 "$7}' user 使用冒号作为分隔符,输出第1列,第7列,中间加常量
awk -F[:/] '/root/{print $9}' user 使用冒号或者/作为分隔符,输出有root的行的第9列
利用awk提取本机的网络流量
ifconfig ens33 | awk '/TX p/{print "ens33网卡的发送流量是"$5"字节"}'
ifconfig ens33 | awk '/RX p/{print "ens33网卡的接收流量是"$5"字节"}'
使用awk提取根分区剩余容量
df -h | awk '/\/$/{print "根分区剩余容量是"$4}'
获取远程失败的IP地址
/var/log/secure是安全日志,记录了系统的安全相关信息
环境准备:先连接几次4.7服务器root账户时故意输入错误的密码
awk '/Failed password/{print $11}' /var/log/secure 查找安全日志中,登录本机时输入了错误密码的主机ip
awk处理的时机
BEGIN{ } 执行1次
{ } 逐行任务,执行n次
END{ } 执行1次
awk -F: 'BEGIN{print "User\tUID\tHome" }{print $1"\t"$3"\t"$6}END{print "总计"NR"行"}' user
使用正则设置条件
awk -F: '/bin/{print $1}' user 输出有bin的行的第1列
awk -F: '$5~/bin/{print $1}' user 输出第5列包含bin的行的第1列
awk -F: '$5!~/bin/{print $1}' user 输出第5列不包含bin的行的第1列
2,使用数值/字符串比较设置条件
== != > < >= <=
awk -F: 'NR==3{print}' /etc/passwd 输出第3行
awk -F: '$3<10{print}' /etc/passwd 输出UID小于10的行
awk -F: '$3>=1000{print}' /etc/passwd 输出UID大于等于1000的行
awk -F: '$7=="/bin/bash"{print}' /etc/passwd 输出使用/bin/bash的用户
awk -F: '$7!="/bin/bash"{print}' /etc/passwd 输出没使用/bin/bash的用户
&& 并且 || 或者
awk -F: '$3>3{print}' user 找第3列大于3的行
awk -F: '$3>3' user 效果同上, 如果任务仅仅是输出的话,可以省略不写
awk -F: '$3<10&&$7~/bash/{print}' /etc/passwd 找第3列小于10并且第7列包含bash的行
awk -F: '$3>=10&&$3<=20{print}' /etc/passwd 找第3列大于等于10并且小于等于20的行
awk -F: 'NR>=2&&NR<=10{print}' /etc/passwd 找2~10行
awk -F: '$3<5||$3>1000{print}' /etc/passwd 找第3列小于5或者第3列大于1000的行
awk -F: '$3<5||$3>1000' /etc/passwd 效果同上,精简写法
案例
在awk中使用运算作为条件
在一个有200行从1~200的数字序列的文档中,找到包含7,并且能被7整除的行
seq 200 | awk '$1~/7/&&$1%7==0'
awk -F: '$1=="root"&&$1=="bin"' /etc/passwd 逻辑错误,无输出
awk -F: '$3>10||$3<1000' /etc/passwd 所有行都显示
awk -F: '$3>1000&&$3<5' /etc/passwd 逻辑错误,无输出
awk 'BEGIN{print 1+1}' awk支持运算
awk 'BEGIN{a=10;b=20;print a+b}' 也支持变量的定义再运算
在awk中使用if分支
单分支 if(条件){执行指令}
awk -F: 'BEGIN{x=0}{if($7~/bash/){x++}}END{print x}' /etc/passwd
首先定义变量x=0,然后使用if判断如果每找到一行的$7包含bash,就把x+1,所有逐行任务结束后,最终使用end任务输出x的值,也就是找系统中使用bash作为解释器的用户数量
双分支 if(条件){执行指令}else{执行指令}
awk -F: '{if($7~/bash/){x++}else{y++}}END{print x,y}' /etc/passwd
使用if判断如果每找到一行的$7包含bash,就把x+1,否则y+1,最后使用end输出x与y的值
多分支 if(条件){执行指令}else if(条件){执行指令} else{执行指令}
awk -F: '{if($7~/bash/){a++}else if($7~/nologin/){b++}else{c++}}END{print a,b,c}' /etc/passwd
使用if多分支,每找到一个使用bash的账户就把a+1,每找到一个使用nologin的账户就把b+1,否则c+1,最后分别输出三个变量的值
2,统计服务器中,超级管理员、普通账户、系统账户的数量
awk -F: '{if( ){ }else if( ){ }else{ }}END{print a,b,c}' /etc/passwd
awk -F: '{if($3==0){a++}else if($3>=1000&&$3<=5000){b++}else{c++}}END{print a,b,c}' /etc/passwd 找到uid是0的用户将a+1,找到uid是1000~5000的将b+1,除此之外将c+1,最后输出
使用awk,找到使用bash的账户,按照 名字 密码的格式输出
#!/bin/bash
u=$(awk -F: '/bash$/{print $1}' /etc/passwd)
for i in $u
do
grep $i: /etc/shadow | awk -F: '{print $1" --> "$2}'
done
数组
数组,相当于可以存储多个值的特殊变量
数组名[下标]=下标对应的值
awk 'BEGIN{a=10;b=20;print a,b}' 常规方式使用多个变量定义多个值,并输出
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}' 使用数组的方式定义不同的值,并输出
awk 'BEGIN{a=10;a++;print a}' 使用变量做运算
awk 'BEGIN{a[1]=10;a[1]++;print a[1]}' 使用数组,效果同上
在awk中利用for循环遍历数组(显示数组所有内容)
for循环基本格式 for(变量名 in 数组名){执行指令}
awk 'BEGIN{abc["a"]="aaa";abc["b"]="bbb";abc["c"]="ccc";for(i in abc){print i}}' 定义了数组abc,分别有a、b、c三个下标,对应了aaa、bbb、ccc三个值,最后使用for循环,循环数组abc,输出的变量i表示该数组的每个下标
awk 'BEGIN{abc["a"]="aaa";abc["b"]="bbb";abc["c"]="ccc";for(i in abc){print abc[i]}}' 定义了数组abc,分别有a、b、c三个下标,对应了aaa、bbb、ccc三个值,最后使用for循环,循环数组abc,输出的变量i表示该数组的每个下标,abc[i]就相当于显示每个值
使用awk统计网站访问量
yum -y install httpd 先安装httpd
systemctl restart httpd 启服务
netstat -ntulp | grep :80 查询80端口是否被httpd占用
systemctl stop firewalld 关闭防火墙
echo "httpd_web_test~~" > /var/www/html/index.html 创建网站测试页
curl 192.168.4.7 使用字符的方式访问网站(火狐浏览器之类也行)
awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log 最后使用数组ip收集日志中每行第1列的ip,把所有不同的ip以及ip出现的次数收集完后交给for循环显示出来,/var/log/httpd/access_log是存放httpd网站日志的文件
可以再命令后面加 | sort -nr 可以实现排序功能,-n是以数字方式排序,-r是降序,默认是升序,-k 2是按照第2列的内容进行排序
编写脚本,可以监控主机的各种信息,并实时刷新
#!/bin/bash
while :
do
uptime | awk '{print "cpu的平均负载是 " $(NF-2),$(NF-1),$NF}'
ifconfig ens33 | awk '/RX p/{print "ens33网卡的接收流量是"$5"字>节"}'
ifconfig ens33 | awk '/TX p/{print "ens33网卡的发送流量是"$5"字>节"}'
free -h | awk '/Mem/{print "剩余内存容量是 "$4}'
df -h | awk '/\/$/{print "根分区剩余空间是 "$4}'
awk 'END{print "主机中一共拥有账户数量是"NR"个"}' /etc/passwd
echo "当前登录用户数量是$(who|wc -l)个"
echo "总共开启的进程数量是$(ps aux|wc -l)个"
echo "总共安装的软件包数量是$(rpm -qa|wc -l)个"
sleep 2 这里可以让脚本运行一次后休息2秒
clear 然后使用clear命令可以清屏
done
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。