Linux关机命令 重启命令
关机:
shutdown -h now 直接关机
shutdown -h 0 直接关机
shutdown -h 10 10分钟后关机
shutdown -c 取消关机
poweroff 关机
halt 关机
init 0 关机
重启:
shutdown -r now 重启
shutdown -r 10 10分钟后重启
reboot 重启
init 6 重启`
命令行快捷键的使用 提升工作效率
ctrl + l(小写的L) 清屏 对应的命令clear
ctrl + c 终止退出当前的操作
ctrl + a 快速移动光标到行首 Home
ctrl + e 快速移动光标到行尾 End
ctrl + u 剪切光标所在到行首
ctrl + y 粘贴 ctrl+u剪切的内容
ctrl + k 剪切光标所在到行尾
ctrl + ← 快速向左移动一个单词
ctrl + → 快速向右移动一个单词
ctrl + s 锁屏(不禁止输入内容)
ctrl + q 解锁
ctrl + r 搜索使用过的命令 history 查看历史
ctrl + d 退出当前登录
路径
相对路径
hosts oldboy.txt passwd
隔壁305 隔壁304
绝对路径 地球/亚洲/中国/广东/深圳/南山区/室外桃园创意园/C栋/306
/etc/oldboy /etc/passwd
命令
pwd print working directory 查看当前路径 当前在哪个目录
cd change directory 改变当前的工作目录
两种方式
1.全路径
cd /etc/sysconfig/network-scripts/
2.一步步的进 相对路径查找
cd /
cd etc
cd sysconfig
cd network-scripts
~ 表示家目录 当前登录用户的家目录
cd ~ === cd 回车
cd - 切换到上一次所在的目录
cd .. 切换到上一级目录
cd . 代表了当前的目录
ls list 显示目录中的内容
-l 显示详细信息
-r 逆序排序默认是 根据首字母
mkdir 创建目录 make directory
-p 递归创建目录
相对路径创建 mkdir test
绝对路径创建 mkdir /tmp/test
一次性创建多个目录
如在在/oldboy/下 创建test1 test2 test3目录
mkdir -p /oldboy/test1 /oldboy/test2 /oldboy/test3
touch 摸 创建文件 更改文件的时间 不影响文件内容
一次性创建多个文件
如何在/oldboy/alex/创建 1.txt 2.txt 3.txt
touch /oldboy/alex/test1.txt /oldboy/alex/test2.txt /oldboy/alex/test3.txt
cp copy 复制
-r 拷贝目录及目录下面的所有内容 递归
[root@oldboyedu ~]# #把oldboy.txt 拷贝到/opt下
[root@oldboyedu ~]# cp oldboy.txt /opt/
[root@oldboyedu ~]# ls -l /opt/
total 0
-rw-r--r--. 1 root root 0 Dec 10 10:34 oldboy.txt
[root@oldboyedu ~]# #cp 源文件 目标地址
[root@oldboyedu ~]# #cp 从哪里 到哪里去
Linux中大部分命令无法直接对目录进行操作 需要加参数
[root@oldboyedu ~]# \cp -r /etc/ /opt/ 直接覆盖 不提示
很多命令都给我们起了个小名 都加-i参数 目的就是保护系统安全
.
cp /opt/oldboy.txt . 拷贝oldboy.txt 文件到当前目录
cp 文件后如果写了新的名字 则为重命名
练习:
1.在/opt下创建 oldboy目录
mkdir /opt/oldboy
2.在oldboy目录下创建test1 test2目录
mkdir /opt/oldboy/test1 /opt/oldboy/test2
3.在/opt/oldboy目录下创建alex1.txt alex2.txt
touch /opt/oldboy/alex1.txt /opt/oldboy/alex2.txt
4.然后把alex1.txt alex2.txt 复制到 /opt/oldboy/test1和test2目录下
cp /opt/oldboy/alex1.txt /opt/oldboy/alex2.txt /opt/oldboy/test1
cp /opt/oldboy/alex1.txt /opt/oldboy/alex2.txt /opt/oldboy/test2
5.然后把/opt/oldboy下的test1和test2目录 复制到 /tmp/下
cp -r /opt/oldboy/test1 /tmp
cp -r /opt/oldboy/test2 /tmp
6.重复5的操作 在复制一遍
\cp -r /opt/oldboy/test1 /tmp
\cp -r /opt/oldboy/test2 /tmp
7.history历史命令截图
echo 输出内容到桌面
[root@oldboyedu ~]# echo I am lizhenya teacher > oldboy.txt
[root@oldboyedu ~]# # echo 内容 漏斗 输入到oldboy.txt
> 重定向 先清空源文件 在把新的内容重定向到文件中
echo > oldboy.txt 清空文件内容
>> 追加重定向
echo I am lizhenya teacher >> oldboy.txt
cat 查看文件内容
-n 显示行号
tree 以树形结构显示目录 需要安装此命令
-d 只显示目录
-F 在目录的后面加上/ 区分是否是目录还是文件
-L 显示目录层级
tree -L 1 /opt/oldboy/ 只显示oldboy下的第一层目录
rm remove 删除文件或目录
-f force 强制删除 不提示
-r 递归删除目录及目录下所有内容
mv move 移动目录或文件
mv alex1.txt test.txt 改名
vim
1)vim 编辑器 vi
第一个里程碑 如何进入到文件 如何打开文件
vim oldboy.txt 如果文件不存在 则创建为新文件 无法创建目录
vim 进入到视图模式
第二个里程碑 如何编辑
i o 进入到编辑模式
第三个里程碑 如何退出
先进入到视图模式 esc 多按
第四个里程碑 如何保存
输入: 进入到底行模式
w 保存 write
q 退出 quit
q! 强制退出不保存
wq 保存并退出
wq! 强制保存并退出
2)vim快捷键
光标的移动
G 快速移动到文件的尾部
10G 快速移动到文件的第10行
gg 1G 快速移动到行首
10gg 快速移动到文件的第10行
$ End 快速移动光标所在行的行尾
^ Home 0 快速移动光标所在行到行首
复制粘贴剪切删除 视图模式
yy 复制当前光标所在行
2yy 复制光标所在连续两行
p 粘贴到光标所在行的下一行
3p 粘贴3次内容
dd 剪切光标所在的行
2dd 剪切光标所在连续的两行
u 撤销操作
d$ d+End 剪切光标所在到行尾
D 删除光标所在到行尾
d^ d+Home d0 删除光标所在到行首
dG 删除光标所在行到文件的尾部
dw 删除一个单词
s 删除一个字母并进入编辑模式
x 删除一个字母
进入编辑模式
i a 进入编辑模式
o 进入光标所在行的下一行编辑
O 进入光标所在行的上一行进行编辑
C 删除光标所在行行尾并进入编辑模式
A 移动到行尾并进入编辑模式
cc 删除整行进入编辑模式
批量操作
1. ctrl+v 选中行
2. 按大写I
3. 输入要添加的内容
4. 按两次esc
3)vim报错
在vim编辑文件的时候 系统自动生成一个隐藏文件.swp结尾
如果正常退出 则生成的.swp消失
如果处理不正常退出产生的隐藏文件.swp
1. 直接删除.swp文件 进行编辑 新写入的内容会消失
2. 如何恢复
vim -r oldboy.txt 按回车保存退出
删除.swp文件即可
不正常退出?
1. 不小心关闭窗口
2. 台式机断电
3. 自己在多窗口中打开了相同的文件 关闭一个即可
4. 在公司中其他同事在编辑 你俩谁先编辑
目录结构网卡介绍
Linux目录的特点
1. 一切从根开始 / 顶点
2. 类似于倒挂的一棵树
3. 有层次的目录结构
4. 每一个目录都有规范性
4. Linux的目录可以挂在不同的磁盘上
模拟挂载过程 光驱 所有的硬件设备都在linux系统dev目录下
第一个里程碑
把iso文件放入光驱内
第二个里程碑
如何查看光驱里的内容
给光驱设备开一个窗口
/mnt 目录 可以是新创建 可以是以存在的 /mnt已存在的目录 临时挂载点
第三个里程碑 如何挂载 如何开通窗口
命令 设备名称 窗口/目录
mount /dev/cdrom /mnt/
第四个里程碑 卸载 不用这个设备
umount /mnt/
如果挂载点有内容 则会隐藏 卸载后显示内容
df -h 查看磁盘信息 查看挂载信息
目录层次标准 FHS
3. 重要的配置文件
/etc
1)网卡配置文件
ifconfig
/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet # 网络类型 以太网
BOOTPROTO=none # 获取IP地址
三种配置方式
1.none 静态
2.DHCP 动态获取
3.static 静态
家用路由器都开启了DHCP
电脑 笔记本 电视 手机 平板电脑 电饭锅 电水壶
物联网--基础互联网--网络
树濑
NAME=eth0 # 配置文件的名字 网卡名称
DEVICE=eth0 # 硬件网卡名称
UUID=e96acd48-0d3e-4e51-bb05-68df3913fd0d # 唯一标识 系统为每一个硬件设备分配的唯一标识 身份证号码 干掉他
ONBOOT=yes # 开启自动启动
IPADDR=10.0.1.200 # IP地址 局域网内唯一 公网上唯一
PREFIX=24 # 子网掩码 决定了我们网络中可使用的IP地址数量
1.PREFIX=24
2.NETMASK=255.255.255.0
GATEWAY=10.0.1.254 # 网关 大门口 家路由器 192.168.1.1 0.1
公司网络一般默认网关会更改
192.168.1.254
192.168.1.253
192.168.1.252
DNS1=223.6.6.6 # 域名解析服务器 可快速方便的访问服务器
负责把域名解析为IP地址
www.baidu.com 14.215.177.38
公用DNS: 流量 13个顶级域名
阿里云 223.5.5.5 223.6.6.6
电信 114.114.114.114
谷歌 8.8.8.8
联通202.106.0.20
默认的DNS 运营商下发给我们的
目录作用
etc/hosts 本地解析配置文件 DNS解析域名 解析主机名称
在解析域名的时候先查看/etc/hosts文件 如果有则直接解析 没有才使用我们配置的DNS进行解析域名
jd.com 对用户提供访问的服务地址
183.60.141.1
jd.com
10.0.0.29
10.0.0.29 jd.com
/etc/hostname 主机名称的配置文件
第一个里程碑 如何查看当前主机名
centos6 centos7相同
hostname
第二个里程碑 如何修改主机名
centos6 centos7相同
hostname alexlnb # 临时修改主机名称 重启失效
第三个里程碑 如何永久修改主机名
vim /etc/hostname # 永久修改主机名 centos7 必须重启后生效
vim /etc/sysconfig/network # 永久修改主机名配置文件 Centos6
第四个里程碑 如何临时+永久修改主机名
hostnamectl set-hostname alexlnb #centos7 永久加临时修改主机名
hostname 先临时修改 在更改配置文件/etc/sysconfig/network # centos6 临时+永久修改主机名称
/etc/resolv.conf 配置DNS服务器的配置文件
配置方法不同
网卡配置 DNS1=223.6.6.6
resolv.conf nameserver 223.6.6.6
如果网卡中配置了DNS 如果不重启则不会覆盖 /etc/resolv.conf
如果重启网络服务则网卡中的dns配置会覆盖 /etc/resolv.conf
在工作中尽量使用resolv.conf
DNS服务器不稳定 223.5.5.5 223.6.6.6
resolv.conf中配置方法
nameserver 10.0.0.28
nameserver 114.114.114.114
nslookup 解析服务地址
nslookup 解析服务地址 查看通过哪个DNS进行解析的 需要安装yum -y install bind-utils
/etc/rc.local # 开机后自动执行文件中的命令 开机自启动
chmod +x /etc/rc.d/rc.local 给源文件一个执行权限
/etc/fstab file system table 磁盘挂载的配置文件 开机自动挂载
/etc/issue 登录服务器前显示的内容
/etc/issue.net 登录服务器前显示的内容
echo > /etc/issue.net
echo > /etc/issue
/etc/motd 连接服务器后显示的内容
/etc/inittab 服务器开机后的运行级别 runlevel
centos6.X 操作系统 运行级别表示方法
面试题 请写出系统的运行级别
0 关机 init 0
1 单用户模式 救援模式 忘记密码
2 多用户模式 没有NFS存储图片
3 完全多用户模式 默认使用的
4 待开发
5 桌面模式 需要安装桌面的软件
6 重启 init 6
centos7.X 操作系统 运行级别表示方法 中文翻译成英文 target
0 关机 poweroff.target
1 单用户模式 rescue.target 救援模式
2 多用户模式 multi-user.target
3 完全多用户模式 multi-user.target
4 待开发 multi-user.target
5 桌面模式 graphical.target
6 重启 reboot.target
第一个里程碑 如何查看当前的运行级别
centos6的查看方法
cat /etc/inittab
id:3:initdefault:
centos7的查看方法
[root@alexlnb ~]# systemctl get-default
multi-user.target
第二个里程碑 如何临时修改启动级别 centos6和7相同
init 6 重启
init 0 关机
init 5 桌面
第三个里程碑 如何永久修改运行级别 开机后自动运行哪个功能 哪个级别
centos6的配置方法
直接修改/etc/inittab
id:3:initdefault:
centos7的配置方法
systemctl set-default runlevel5.target # 开机后运行桌面模式
/etc/profile 环境变量 别名(小名) 开机后自动运行 每一次使用xshell连接都会加载一次
针对系统层面 所有用户生效
什么是环境变量
环境变量支撑我们正常使用Linux操作系统
x=1 y=x+1 y=2
名称(自定义)=变量的值
右面一堆内容 使用一个名字来代替 称为环境变量 等号两端不允许有空格
例: test="I am lizhenya teacher"
系统环境变量
PATH 路径
USER 用户名
/etc/bashrc 环境变量 别名
针对系统层面 所有用户生效
.bashrc 环境变量 针对当前登录用户生效/
.bash_profile 环境变量 针对当前登录用户生效
/etc/profile 国家的法律
/etc/bashrc 国家的法律
.bashrc 家里的规矩
.bash_profile 家里的规矩
小结/etc
/etc/hostname
/etc/resolv.conf
/etc/hosts
/etc/issue
/etc/issue.net
/etc/motd
/etc/fstab
/etc/inittab
/etc/profile
/etc/bashrc
/etc/rc.local
2. /usr/local 二进制安装 第三方安装 程序默认的目录
安装软件的三种方式
1.yum安装 公司常用
yum -y install package.name
-y 安装过程中会遇到很多确定 -y 自动确认
install 安装
yum安装的特点?
吃饭:
去饭店吃饭 点外卖 饭店和外卖都给我们把需要的打包好了 只管用 只管吃
yum 安装能够自动解决依赖问题
依赖:在安装某个服务前 必须要安装必要的包 缺什么补什么
yum安装软件的方式
yum -y install package.name
yum卸载方式
yum -y remove package.name
查找包的名字的方法
1)百度查找 搜索 安装
2) yum provides rz # 查看命令属于的安装包
2.rpm安装 常用
rpm的特点:
吃饭:
去超市买包泡面-
自己准备
要自己泡
热水
壶
碗
筷子
缺的依赖我们要自己手动下载 手动安装所需要的依赖 无法自动解决依赖问题
安装的包的名字的后缀 全部是以.rpm结尾的
1)rpm的安软件的方式
rpm -ivh package.name
-i install
-v verbose 显示安装过程
-h 人类可读的方式查看
rpm -i package.name 其他参数可忽略
2)如何查看当前系统是否安装了想要的软件
rpm -qa 查看软件是否安装
-q query 查看
-a all 所有
-l list 列表
rpm -qa wget 查看是否安装过wget
rpm -qa 查看系统中已经安装了哪些软件
rpm -qa|grep wget 通过搜索的方式查看软件是否安装
rpm -ql 查看当前软件包里的内容 安装了哪些内容
3) 如何使用rpm进行卸载软件 不建议使用 建议使用yum remove 进行卸载
注意:
1)无法解决依赖问题
2) 卸载有的包的名字需要复制全部包括版本号
rpm -e package.name
[root@alexlnb ~]# rpm -qa wget
wget-1.14-18.el7_6.1.x86_64
[root@alexlnb ~]# rpm -e wget
[root@alexlnb ~]# rpm -qa wget
[root@alexlnb ~]#
3.编译安装
编译安装特点:
吃饭
自己做饭
买菜
洗菜
刀 菜板 锅碗瓢盆 油盐酱醋
自定选择 自己需要的模块进行编译安装 自己定制所需
.configure make makeinstall
目录二
目录:
/var variable 变化的 日志文件
/var/log/messages 日志信息 记录了系统运行的记录
/var/log/secure 系统的安全日志
如果安全日志出现Failed 上百次或上千次 暴力破解
日志切割
为了防止系统或者服务的日志量过大
如果文件被剪切走 日志文件不会重新生成 必须重启服务 或者重新加载服务
rsyslog 系统日志的服务
/proc 内存的映射 运行的进程
/proc/cpuinfo
[root@alexlnb ~]# grep 'physical id' /proc/cpuinfo
physical id : 0
physical id : 0
physical id : 1
physical id : 1
[root@alexlnb ~]# grep 'processor' /proc/cpuinfo
processor : 0
processor : 1
processor : 2
processor : 3
使用命令查看cpu信息
lscpu
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 2
Socket(s): 2
/proc/meminfo 查看内存信息
MemTotal: 997980 kB 总共的内存
MemFree: 731164 kB 剩余的内存
MemAvailable: 708344 kB 可用的内存
Buffers: 2076 kB 缓冲
Cached: 83916 kB 缓存
SwapCached: 0 kB swap 硬盘临时充当内存的大小
使用命令查看内存信息
free -h
如何算百分比: 使用的除以总数乘以100
/proc/loadavg 平均负载 load average
什么是负载
负载是衡量系统的繁忙程度
什么时候才算繁忙
当负载的值接近CPU核心的总数
什么硬件能让我们的负载高
cpu 硬盘 cpu负责运算 负责处理 硬盘负责 读写
0.00 0.01 0.02 1/125 1484
1分钟 5分钟 15分钟
1分钟5分钟15分钟的系统平均负载值
使用命令查看负载信息
09:42:01 up 26 min, 1 user, load average: 0.00, 0.01, 0.02
当前时间
top 查看负载和系统的详细信息
w 命令 包含了多个命令 1人做多份工作 不可替代
你会的别人都会 危险
别人会的你会 别人不会的你会 你就是 w
/proc/mounts 了解 系统挂载的详细信息
df -h 查看磁盘或者挂载的信息
/etc/fstab
总结:重要的配置文件
/etc
/etc/hosts *
/etc/hostname *
/etc/rc.local *
/etc/inittab *
/etc/fstab *
/etc/issue
/etc/issue.net
/etc/motd
/etc/resolv.conf *
/etc/profile *
/etc/bashrc
/etc/sysconfig/network-scripts/ifcfg-eth0 *
/usr
/usr/local
/var/
/var/log/messages *
/var/log/secure *
/proc
/proc/cpuinfo
/proc/meminfo
/proc/loadavg
/proc/mouts
lscpu
free -h
w
uptime
top
yum源
1.yum源 如何安装软件 yum -y install package.name
默认的yum仓库
windows安装软件的方法?
1)下载.exe安装程序
2)用360软件仓库安装
centos的安装软件的方法
1)yum 直接通过软件仓库进行查找并下载安装
2)rpm 先下载.rpm结尾的软件包后 使用rpm -ivh进行安装
如何查看当前默认的软件仓库?
centos默认的仓库是系统随机生成的
仓库有很多 阿里云 清华云 百度云 163 jd云 腾讯云 每所大学都有自己的仓库 等
yum repolist # 查看当前使用的软件仓库
* base: mirrors.cn99.com # 网易
* extras: mirror.jdcloud.com
* updates: mirrors.cn99.com
repolist: 11,399 # 当前仓库中有多少个可用的软件包
rpm -qa # 查看所有已安装过的软件
yum list # 查看这个仓库里有什么软件可安装
更改默认的yum源为阿里云
第一个步骤
阿里云仓库的地址如何获取?
opsx.alibaba.com -> 点centos系统
备份原有的默认的仓库 默认的仓库目录 /etc/yum/repos.d/
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二个步骤
下载新的仓库到我们本地
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
下载后别忘记检查
当把默认的仓库移动走了 现在要使用wget下载新的仓库 发现没有wget软件 怎么办?
把移动走的仓库在移回来
或者使用curl命令进行下载新的仓库
第三个步骤
yum makecache 可忽略不使用
yum源问题解决
是否能联网
yum clean all 清空缓存
网络慢导致无法安装软件
扩展的额外的yum仓库
yum -y install sl cowsay
epel EPEL (Extra Packages for Enterprise Linux) 企业额外的安装包
1)先备份原有epel源 默认系统不会存在的 直接执行第二个步骤
2)wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
centos6 大部分都自动补全 不需要安装命令
centos7 自动补全的命令 安装tab
自动补全命令 bash-completion # 基本的一些命令可自动补全
高级补全命令 bash-completion-extras # 第三方安装的命令可自动补全 大部分
注意中英文问题 "" “” ·· `` '' ‘’
2. selinux 防火墙 公司和测试环境必须关闭 centos6配置相同
美国国家安全局 NSA
1.如何查看当前selinux是否开启
getenforce
2.如何临时关闭selinux
setenforce Permissive
setenforce 0
3.永久关闭selinux 需要重启
/etc/selinux/conf
enforcing # 开启状态 运行中
permissive # 关闭状态但是会提示警告信息
disabled # 完全关闭状态
SELINUX=disabled
Linux更改配置文件的习惯
1)更改前先备份配置文件
cp name.conf name.conf.bak
2)更改配置文件不要在原有的内容上更改 不好恢复
把之前的内容注释掉 复制一行进行更改新的内容
3)所有测试环境需要关闭
3. firewalld 关闭防火墙
centos6.x iptables
centos7.x firewalld
1)如何查看当前防火墙是否运行
systemctl status firewalld
中间的常用命令
start 开启
stop 停止
restart 重启
reload 加载
status 状态
systemctl is-active firewalld # 查看防火墙运行状态
2)如何临时关闭防火墙
systemctl stop firewalld
3)永久关闭防火墙
如何查看是否开机禁止启动防火墙
systemctl status firewalld.service 第二行显示 enabled 开机自动启动
[root@alexlnb ~]#systemctl is-enabled firewalld.service
enabled
禁止启动
systemctl disable firewalld.service
在什么情况下开启防火墙 Iptables firewalld
1)在工作中服务器有公网的IP地址的 需要开启
2)内网环境 测试环境 没有公网IP 不能直接访问的服务器 不需要开启
3)公司网站流量大 高并发 不需要开防火墙 需要使用硬件防火墙
在公司中常用iptables
iptables-save 查看centos6 centos7 防火墙是否开启 如果列出规则说明开启 没有则是关闭状态
如果centos7使用iptables
1.把firewalld 永久+临时关闭
2.安装iptables-services
centos6 iptables的关闭和禁止启动
centos7 centos6
sytemctl stop firewalld /etc/init.d/iptables stop | service iptables stop
systemctl disable firewalld chkconfig iptable off
systemctl status firewalld /etc/init.d/iptables status # 查看状态
字符集
什么是字符集
各种语言在计算机中表达方式
UTF-8 万国码
GBK 国标扩展
1)如何查看系统默认的字符集 centos7
PS1
LANG
[root@alexlnb ~]#echo $LANG
en_US.UTF-8
[root@alexlnb ~]##语言.编码
2)临时修改默认的字符集
LANG='zh_CN.UTF-8'
3)永久修改字符集
/etc/locale.conf
LANG="en_US.UTF-8"
source /etc/locale.conf 相当于帮我们执行了export LANG="zh_CN.UTF-8"
source 或者 . 都是让配置文件即时生效 对环境变量相关的配置文件生效
4)修改配置文件 必须source 或者. 临时生效
localectl set-locale LANG='zh_CN.UTF-8' # 直接覆盖配置文件
source /etc/locale.conf # 永久生效
centos6修改字符集
1)临时修改
echo $LANG
LANG='zh_CN.UTF-8'
2)永久修改字符集
/etc/sysconfig/i18n
source /etc/sysconfig/i18n
解决乱码方式 xshell和系统默认的UTF-8
系统中的字符集必须和连接工具的字符集相同
vim2
vim
撤销 u
底行模式
:set nu 显示行号
:set nonu 取消显示行号
ZZ 保存并退出
搜索
/ 搜索的内容
n 查找下一个内容 往下查找
N 查找上一个内容 往上查找
1copy10 # 把第一行的内容复制到第10行的下面 简写co
1,3copy10 # 把第一行到第三行的内容复制到第10行的下面
1move10 # 把第一行的内容移动到第10行的下面 简写mo
1,3move10 # 把第一行到第三行的内容移动到第10行的下面
1d # 删除第一行的内容
1,5d # 删除第一行到第五行的内容
vim的高亮显示
:noh # 取消高亮显示
查看帮助
:h
vim的替换功能
s###g # s替换标志 g 全局替换
s@@@g
s///g
s#需要替换内容#替换后的内容#g
sg vim中只替换光标所在行的所有内容 sed 中的sg 全局替换
查看命令
cat 查看文件内容 合并多个文件的内容
-n 显示行号
-A 在行尾加上$ 表示行结束
cat file
cat file > 重定向文件
>> 追加到文件中
less 一页一页的显示文件的内容 特别大的文件使用less 常用
-N 显示行号
空格 f 显示下一页内容
b 显示上一页内容
gg 快速移动到首页
100G 快速到100行
g 快速移动到第一页
G 快速移动到文件的底部
/ 搜索
n 查找下一个内容
N 查找上一个内容
q 退出
more 一页一页的显示文件的内容 不常用
f 往下翻页
b 往上翻页
空格 往下翻页
head 默认显示文件的前10行
-n 显示文件的行数 可简写 -2 -n2
-c 显示文件的前n个字符 不常用
tail 默认显示文件的后10行
-n 显示文件的行数 简写-2 -n2
-f follow 实时显示文件的内容变化
-F 实时显示文件内容的变化 监控文件 文件不存在会时时等待文件的出现
tailf === tail -f
tailf 不读磁盘 速度快
tail -f 读磁盘 速度慢
seq 生成数字序列
grep 过滤字符串
-v 取反
-n 显示行号
[root@alexlnb ~]#grep '1' test.txt
1
10
[root@alexlnb ~]#grep -n '1' test.txt
1:1
10:10
[root@alexlnb ~]#grep -v '1' test.txt
2
3
4
5
6
7
8
9
-w 过滤只有一个内容 完全匹配
[root@alexlnb ~]#grep '1' test.txt
1
10
011
221
110
102
[root@alexlnb ~]#grep -w '1' test.txt
1
[root@alexlnb ~]#grep -w 'oldboy' test.txt
oldboy oldboy
[root@alexlnb ~]#cat test.txt
oldboytest
alexoldboy
testtest
oldboy oldboy
test
echo 输出内容到屏幕
> 重定向
>> 追加重定向
{} 生成序列
[root@alexlnb ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10
mkdir {1..10} # 创建10个文件
在/oldboy目录里 创建stu01 stu02 stu03.. stu10 在10个目录里面分别创建stu01/01..3 stu02/01..3 stu10/01..3
/oldboy/stu01 ..stu10/01..3
mkdir /tmp/test /tmp/test1 /tmp/test2
mkdir -p /oldboy/stu{01..10}/{01..3}
[root@alexlnb ~]#touch {1..3}.txt
[root@alexlnb ~]#ll
总用量 606572
-rw-r--r--. 1 root root 368 12月 17 17:12 1.txt
-rw-r--r-- 1 root root 0 12月 17 17:12 2.txt
-rw-r--r-- 1 root root 0 12月 17 17:12 3.txt
[root@alexlnb ~]#echo {oldboy,stu}{01..2}
oldboy01 oldboy02 stu01 stu02
[root@alexlnb ~]#echo 1 8 9
1 8 9
[root@alexlnb ~]#echo stu{1,8}
stu1 stu8
[root@alexlnb ~]#echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@alexlnb ~]#echo {A..Z}
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
在/oldboy/stu01 /oldboy/stu02 /oldboy/stu03
/oldboy/stu01/www /oldboy/stu01/bbs /oldboy/stu01/blog
/oldboy/stu02/www /oldboy/stu02/bbs /oldboy/stu02/blog
tr 替换 不能直接对文件进行操作 替换符号 1对1的进行替换
-d 删除内容
-c 取反
[root@alexlnb ~]#tr -d "test" < test.txt
oldboy
alx
[root@alexlnb ~]#tr -cd "test" < test.txt
teste[root@alexlnb ~]#
特殊符号
. 代表当前的目录
.. 代表上一级目录
# 注释 不生效的内容 shell编程的第一行有用 root用户提示符
~ 代表家目录
$ 代表普通用户提示符
> 重定向
>> 追加重定向
< 输入重定向
- 上一次所在的目录
| 前面命令的输出 作为后面命令的使用
\ 转义字符
alias 别名
系统默认的为重要的命令添加了一个小名(昵称)
cp ====== cp -i
rm ====== rm -i
作用:
系统安全
方便
如何定义别名 临时定义
当我们执行 rm命令 让系统给我们提示 command not available
alias rm='echo command not available'
如何查看当前已经定义过的别名
alias # 查看别名
alias vieth0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
永久定义别名
把配置写入/etc/profile中
环境变量的生效顺序 /etc/profile-> /etc/bashrc
[root@alexlnb ~]#alias cdeth0='cd /etc/sysconfig/network-scripts/'
[root@alexlnb ~]#cdeth0
[root@alexlnb /etc/sysconfig/network-scripts]#
删除文件 临时取消别名
unalias rm
\rm passwd
文件类型
1.ls
-l 详细信息
-i inode
-h 以人类可读的方式显示
33575001 - rw-r--r-- . 1 root root 18 12月 12 20:37 bash.sh
inode 文件的类型 文件的权限 selinux 硬链接个数 属主 属组 文件的大小 时间 文件名
inode index node # 存放着文件的属性和文件具体的位置的指针 不包含文件名
block 快 文件的具体存放位置
硬链接 文件的多个入口 # 超市有多个门 堵死一个门 少一个门 文件正常使用
软链接
文件的类型 如何知道文件的类型?
windows中文件的类型: 以后缀名来区分文件的类型
.exe 安装程序 或者 可运行的程序
.txt 文本文件
.mp4 .avi
.jpg
.bat
.rar
Linux中的文件类型 让我们能够识别是什么文件
.txt
.sh .bash shell脚本
.conf .cfg .config 配置文件
.rpm 安装包 数据包
.log 日志文件
.py python
1) linux下的普通文件类型
-rw-r--r--
- 普通文件
1) 普通文件 手动创建的或系统存在的
-rw-r--r-- 1 root root 7 12月 18 09:41 test.txt
2) 系统的命令 二进制的文件
-rwxr-xr-x. 1 root root 117672 4月 11 2018 /usr/bin/ls
3) 压缩包 数据文件
-rw-rw-r-- 1 root root 83176 7月 4 2014 zziplib-0.13.62-5.el7.x86_64.rpm
drwxr-xr-x d 目录 directory
lrwxr-xr-x l 软链接 soft link 符号链接 symbolic link 类似windwos快捷方式
brw-rw---- b 快设备 硬盘 光驱 U盘 /dev
c 字符设备
crw-rw-rw- 1 root root 1, 9 12月 18 08:36 /dev/urandom 吐字符
tr -cd 'a-zA-Z0-9' < /dev/urandom
crw-rw-rw- 1 root root 1, 3 12月 18 08:36 /dev/null 黑洞 吃字符
crw-rw-rw- 1 root root 1, 5 12月 18 08:36 /dev/zero 生成字符
s socket
p 管道设备
2)文件相关的几个命令
1. which 查看命令的全路径 $PATH
2. file 查看文件的类型
[root@alexlnb ~]#file test.txt
test.txt: ASCII text
[root@alexlnb ~]#file test
test: directory
[root@alexlnb ~]#file /etc/rc.local
/etc/rc.local: symbolic link to `rc.d/rc.local'
[root@alexlnb ~]#file /dev/sda
/dev/sda: block special
[root@alexlnb ~]#file /dev/urandom
/dev/urandom: character special
3. whereis 查看文件的具体位置和文件的帮助
4. locate 命令 mlocate 需要安装命令 快速定位文件位置 不用 扩展
updatedb
5. find 查找文件
find的格式
find 在哪里找 -类型 f -名字 "国产"
find /tmp -type f -name "test.txt"
-类型 -type
f 普通文件
d 目录
l 软链接
c
s
p
find 查找方式 默认并集 默认 -and
find /tmp/ -type f # 查找/tmp下所有的普通文件
find /tmp/ -type d # 查找/tmp下所有的目录文件
1)按名称查找
find /tmp/ -type f -name "test.txt"
2)按文件的后缀查找 所有.txt结尾的文件
find /tmp/ -type f -name "*.txt"
3)不区分大小写搜索
find /tmp/ -type f -iname "*.txt"
4)按照大小查找 -size
c b k M G
find ./ -type f -size +100k # 查找当前目录 大小100k的文件
find ./ -type f -size -2M # 查找当前目录 小于2M的文件
find -type f -size 2M # 查找1.xM - 2M 不包含1M
find -type f -size 5M # 查找4.xM - 2M 不包含4M
find ./ -type f -size +1M -size -3M # 查找 大于1M 并且小于3M的文件 默认就是并集
find ./ -type f -size +1M -size -15M #
find / -type f -size +50M -size -100M
5)按时间查找
注意(find命令中不支持别名)
xargs 把前面的命令输出 甩到命令的最后面
格式化输出 -n 显示多少列
[root@alexlnb ~]#cat 2.txt|xargs -n2
1 2
3 4
5 6
7 8
如何对批量查找到的文件进行操作
如何批量查看文件
find ./ -type f -size +1M|xargs ls -lh
1.如何移动
方法1
find ./ -type f -size +1M|xargs -i mv {} /tmp
方法2
mv `find /tmp/ -type f -name "7.txt"` .
方法3
find /tmp/ -type f -name 8.txt -exec mv {} /opt \;
2.如何删除
find /tmp/ -type f -name "5.txt"|xargs rm
[root@alexlnb ~]#rm `find ./ -type f -name 7.txt`
command not available ./7.txt
[root@alexlnb ~]#\rm `find ./ -type f -name 7.txt`
find ./ -type f -name "3.txt" -exec rm {} \;
3.如何复制
find /tmp/ -type f -name "6.txt"|xargs -i cp {} .
cp `find /tmp/ -type f -name 8.txt` .
find ./ -type f -name "4.txt" -exec cp {} /tmp \;
4.序列匹配
find /tmp -type f -name '[1-8].txt' # 匹配1-8以.txt结尾的文件 不能使用{}
find
find
-name # 按名称查找 test.txt *.txt test.*
-iname # 查找到的内容不区分大小写 *.TXT *.txt "test.txt" "TEST.TXT"
-size # 按照大小查找 -b -k -M -G +1M 大于1M -1G 小于1G的文件 并且关系 默认and
-maxdepth # 按最大的深度等级查找 find ./ -maxdepth 1 -type f
-mtime # 按照文件的修改时间查找modify
-mtime +n n是整数
面试题
find ./ -type f -mtime +7 # 查找修改时间为7天前的文件
find ./ -type f -mtime -7 # 查找修改时间为7天内的文件
find ./ -type f -mtime 0 # 查找修改时间为1天内的文件 当前时间算 24小时内
find ./ -type f -mtime 1 # 查找修改时间为2天内的文件 48小时内
find ./ -type f -mtime +7 -mtime -30 # 查找 7天前 30天内修改过的文件
df -i
df -i 查看inode使用情况
df -h 查看block使用情况
-rw-r--r-- 文件的权限
-文件类型
9位权限位(12位权限位)
前三位 对应了属主
中三位 对应了数组
后三位 对应了其他用户
rwx
r read 读 # cat oldboy.txt less oldboy.txt 重要的文件不允许其他用户看到
w write 写 # vim oldboy.txt echo 111 >oldboy.txt sed 会把木马写入服务器
x excute 可执行 # shell脚本 bash
3. -rw-r--r-- 1 root root 2681172 12月 18 10:51 all.txt
1 硬链接的个数
面试题
ln 源文件 目标文件 # 创建硬链接
硬链接的特点:
1)在相同文件系统中具有相同inode号的文件 互为硬链接 ll -i
2)相当于文件的多个入口 类似于超市的多个入口
3)文件默认的硬链接为1 目录默认的硬链接为2 且 目录无法做硬链接(会出现循环)
4)删除源文件和目标文件任意一个文件 文件不会真正的删除
5)只有同时删除源文件和目标文件 文件才会被删除 (普通文件)
6)删除源文件和目标文件 并且没有被系统或程序调用 则被真正删除 进程调用
7)如果删除文件的空间在存放其他文件 则被删除文件无法恢复 或者使用fsck命令进程磁盘检查 空间也会被系统回收
8)硬链接文件是普通文件 使用rm删除即可
9)硬链接为防止文件的误删做的备份
10)不能跨文件系统
2. 软链接
ln -s 源文件 目标文件
软链接的特点:
1)Inode号不同
2)类似于windows的快捷方式 里面存放了源文件的指针指向
3)删除软链接文件不影响源文件
4)删除源文件则文件被真正的删除 软链接不会删除 但是不可用
5)做软链接尽量使用全路径
6)删除一定要注意不能删除源文件(>后面的为源文件)
4. 33666248 - rw- r-- r-- 1 oldboy oldgirl 2.6M 12月 18 10:51 all.txt
主人 组 其他人 主人 家庭 笔记本电脑
root root
属主 属组
root 管理员用户 UID 唯一标识 0
晓东 身份证唯一
用户类型 三种
cat /etc/passwd
1. root用户 UID 0 /bin/bash
2. 虚拟用户 # 存在 不能登录的用户 服务启动需要一个用户 /sbin/nologin
3. 普通用户 # 自己创建的用户 useradd 可登录 可正常使用 /bin/bash
在工作中禁止root登录 都是使用自己的用户名登录
直接查看目录是显示目录本身的大小 目录存放的是下级的文件名
5. 文件详细信息的时间
Access: 2019-12-19 12:05:23.928187905 +0800
Modify: 2019-12-18 10:51:54.960652005 +0800
Change: 2019-12-18 10:51:54.960652005 +0800
Access: 访问时间 cat查看 当文件无修改 则时间不会变
Modify: 修改时间 vim echo 修改
Change: 属性的修改时间 属性信息 -rw-r--r-- 1 root root 1.3M Dec 18 10:53
为什么目录的硬链接数为2
[root@alexlnb ~/oldboy]#ll -adi .
17446568 drwxr-xr-x 2 root root 34 12月 19 10:13 .
[root@alexlnb ~/oldboy]#ll -adi ../oldboy/
17446568 drwxr-xr-x 2 root root 34 12月 19 10:13 ../oldboy/
[root@alexlnb ~]#ll -aid ../root/ . /oldboy/..
33574977 dr-xr-x---. 5 root root 245 12月 19 10:12 .
64 dr-xr-xr-x. 19 root root 268 12月 11 11:38 /oldboy/..
33574977 dr-xr-x---. 5 root root 245 12月 19 10:12 ../root/
[root@alexlnb ~]#cd oldboy/
[root@alexlnb ~/oldboy]#ll -aid ../
33574977 dr-xr-x---. 5 root root 245 12月 19 10:12 ../
6. 打包压缩
tar 筐子 香蕉 苹果 梨
tar -zcvf all.tar.gz all.txt 1.txt test.txt
z 使用gzip压缩
c create 创建
v 显示过程 verbose
f 指定压缩文件
简写 -zcf
通配符
&& # 前面的命令执行成功 则执行后面的命令 不成功则不执行后面的命令
cd /backup && ls 如果backup存在则执行ls 如果backup不存在 则不行ls
|| # 前面的命令执行失败 则执行后面的命令 不失败则不执行
cd /backup || mkdir backup 如果cd执行失败 则创建目录backup
如果cd成功 则不会执行后面的创建命令
; # 前面的命令成功和失败 都会继续执行后面的命令
cd /backup;ls /opt 不管cd是否成功 都会继续执行分号后面的命令
"" # 大部分都是字符串 能解析变量 不能解析通配符
错误重定向 正确重定向 &>/dev/null 定向到空
ls > test.txt # 命令执行的结果为正确的才可重定向到test.txt
1> 只接收正确的结果 重定向 前清空在写入
1>> 只接收正确的结果 追加
2> 只接收错误的结果
2>> 只接收错误的结果 追加
正确和错误的都追加到test.txt
ls stu01111.txt >>test.txt 2>>test.txt
简写:
stu0111.txt >>test.txt 2>&1
简写:
ls stu0111.txt &>>test.txt
[root@alexlnb ~/oldboy]#ls stu0111.txt &>test.txt
[root@alexlnb ~/oldboy]#cat test.txt
ls: cannot access stu0111.txt: No such file or directory
[root@alexlnb ~/oldboy]#ls stu01.txt &>>test.txt
[root@alexlnb ~/oldboy]#cat test.txt
ls: cannot access stu0111.txt: No such file or directory
stu01.txt
[root@alexlnb ~/oldboy]#ls stu01.txt >>test.txt 2>>test.txt
[root@alexlnb ~/oldboy]#ls stu01111.txt >>test.txt 2>>test.txt
[root@alexlnb ~/oldboy]#cat test.txt
stu01.txt
ls: cannot access stu01111.txt: No such file or directory
'' 输出不解析变量 所见即所得
"" 解析变量 不能解析通配符
不加引号和加双引号类似 能解析变量 但是能解析通配符
`` 执行命令 把命令的结果留在原地 其他命令调用 和$()相同
正则表达式
grep
^ 以什么什么开头
[root@alexlnb ~]#grep '^m' oldboy.txt
my blog is http: blog.51cto.com
my qq num is 593528156
$ 以什么什么结尾的行
[root@alexlnb ~]#grep 'm $' oldboy.txt
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
' ' 过滤空格 不显示空行
[root@alexlnb ~]#grep ' ' oldboy.txt
I am lizhenya teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com
our site is http:www.lizhenya.com
my qq num is 593528156
not 572891888887.
^$ 表示空行
[root@alexlnb ~]#grep -v '^$' /etc/selinux/config|grep -v '#'
SELINUX=disabled
SELINUXTYPE=targeted
. 过滤任意一个字符 不会匹配空行
grep '.' oldboy.txt
[root@alexlnb ~]#grep '\.$' oldboy.txt
I teach linux.
not 572891888887.
* 前面的字符串出现0次或0次以上
第一种 0次 没有则显示文件所有内容
第二种多次 显示内容 高亮
echo "oldboy\talex\noldgirl" -e参数 支持\n \t
[root@alexlnb ~]#echo "oldboy\talex\noldgirl"
oldboy\talex\noldgirl
[root@alexlnb ~]#echo -e "oldboy\talex\noldgirl"
oldboy alex
oldgirl
.* 所有 包含空行
[] 匹配中括号中的任意一个字符
[abcd] 不是匹配abcd的单词 而是匹配 a 或者b 或者c 或者d
grep '[abcd]' oldboy.txt -o
[root@alexlnb ~]#grep '[a-zA-Z0-9]' oldboy.txt
[root@alexlnb ~]#grep '[0-Z]' oldboy.txt
[root@alexlnb ~]#grep '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9X]' id.txt
孔 150000123874591242
夏 222113859123487192
赵 37142518322922103X
神奇的坑 [] 取消字符特殊的含义
[root@alexlnb ~]#grep '[$LANG]' oldboy.txt
^^^^^^^^66$$$$$$$^^^$$
$LANG
[root@alexlnb ~]#grep '[.!]$' oldboy.txt
I am lizhenya teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
not 572891888887.
基础正则小结
^
$
^$
.
*
[] 或者 取消特殊字符含义
扩展正则
使用扩展正则
egrep 'a+' oldboy.txt
grep -E 'a+' oldboy.txt
[^] 取反 中括号和默认语句'' 都不会匹配空行
grep '[^.!$]' oldboy.txt # 排除.!$
[root@alexlnb ~]#grep '^^' oldboy.txt
^^^^^^^^66$$$$$$$^^^$$
+ 前面的字符出现1次或1次以上
[root@alexlnb ~]#egrep '8+' oldboy.txt -o
8
8
88888
8
egrep '[a-Z]+' oldboy.txt -o
| 或者
[root@alexlnb ~]#egrep -v '^$|#' /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
{}
第一种方法 {n,m}前一个字符至少连续出现n次 最多出现m次
[root@alexlnb ~]#egrep '8{1,2}' oldboy.txt -o
8
8
88
88
8
8
[root@alexlnb ~]#egrep '8{2,4}' oldboy.txt -o
8888
[root@alexlnb ~]#egrep '8{2,3}' oldboy.txt -o
888
88
第二种方法8{3} 显示多少次
[root@alexlnb ~]#cat id.txt
李 2113421234
张 500224197
王 1233423423432oldboy
万 5oldboy
吕 lzy235872451234814
孔 X50000123874591242
夏 2221138X9123487192
夏 827313859123482885
赵 37142518322922103X
王 3142S183229221403X
1. 取出正确的身份证号
2. 取出以3714开头的
grep 过滤字符串
-r 递归搜索
-v 取反
-o 显示匹配过程
-n 显示过滤出内容的行号
-w 统计单词
-i 不区分大小写
-c 过滤内容的总行数
-E 支持扩展正则
-A 匹配到内容的往下n行 -A1
-B 匹配到内容的往上n行 -B1
-C 配置到内容的上下n行 -C1
[root@alexlnb ~]#grep -A1 111 1.txt
111111111111
2222222222
[root@alexlnb ~]#grep -B1 '222' 1.txt
111111111111
2222222222
[root@alexlnb ~]#grep -C1 '222' 1.txt
111111111111
2222222222
333333333333
sed 替换 查找内容
sed 替换 查找内容
格式:
sed '模式 动作' file
sed '找谁 干啥' file
-n 取消默认输出
-r 支持扩展正则
sed ^ 代表以什么开头 或者是 代表了开头
sed '1s/^/#/g' 在第一行开头处加上#
sed 1,5 ,序列 表示1到5行
动作
p 打印
d 删除 临时删除
sed之查找:
1)如何查找第三行 明确 直接找3
sed '3p' file
[root@alexlnb ~]#sed -n '3p' 1.txt #取消默认输出 只显示第三行
333333333333
2)明确查找1到3行的内容显示出来 ,分隔
[root@alexlnb ~]#sed -n '1,3p' 1.txt
111111111111
2222222222
333333333333
3)明确匹配最后一行
[root@alexlnb ~]#sed -n '$p' 1.txt
55555555555555
明确匹配2到最后一行
[root@alexlnb ~]#sed -n '2,$p' 1.txt
2222222222
333333333333
4444444444444
55555555555555
4)显示包含lizhenya的行 模糊匹配// 字符串匹配
sed '/字符串/p' file
[root@alexlnb ~]#sed -n '/lizhenya/p' oldboy.txt
I am lizhenya teacher!
our site is http:www.lizhenya.com
lizhenya
lizhenyalizhenyalizhenya
lizhenyalizhenyalizhenya
5)匹配显示lizhenya的行到test之间的行
从第几行都第几行
sed -n '1,5p' file
sed -n '//,//p' file
sed -n '/lizhenya/,/test/p' 1.txt
vim 1.txt
sed -n '/lizhenya/,/test/p' 1.txt
vim 1.txt
cat 1.txt
sed -n '/lizhenya/,/test/p' 1.txt
---------------
[root@alexlnb ~]#cat 1.txt
lizhenya
111111111111
2222222222
333333333333
test
4444444444444
lizhenya
55555555555555
jijfqfjeiqwjfiwe
test
fwqefqwfewq
lizhenya
qfeqfqef
fwqfweqfwqfe
fqwfwqefqwf
qwfewqfqwf
14234234234
----------------
小结:
sed -n '3p' file
sed -n '1,3p' file
sed -n '3,$p' file
sed -n '/字符串/p' file
sed -n '/字符串/,/字符串/p' file 贪婪匹配
sed之增加
a 追加 在当前行的下一行插入内容
i 插入 在当前行插入新的内容
sed '3a aaaa' 1.txt
sed '3i aaaa' 1.txt
sed '3c aaaa' 1.txt
sed -in '/^SELINUX\b/c SELINUX=disabled' /etc/selinux/config
sed之删除
d 删除
[root@alexlnb ~]#sed -i '2d' 1.txt
[root@alexlnb ~]#cat 1.txt
1111
333
4444
5555
sed之替换
/// ### @@@
g 全局替换 如果不加 替换每行的第一个内容
sed 's/内容/替换的内容/g' file
[root@alexlnb ~]#sed 's#alex#oldboy#g' 1.txt
1111
oldboy xxoldboy aaaa
333
4444
5555
oldboy
oldboy
删除文件1到5行中的所有的字母
第一种方式
[root@alexlnb ~]#sed -n '1,5p' test.txt |sed 's#[a-Z]##g'
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
第二种方式
[root@alexlnb ~]#sed -n '1,5s#[a-Z]##gp' test.txt
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
先查找以root开头的行 并把行里的bin替换为root
[root@alexlnb ~]#sed -n '/^root/s#bin#root#gp' test.txt
root:x:0:0:root:/root:/root/bash
[root@alexlnb ~]#sed -i '1,5s/^/#/g' test.txt
[root@alexlnb ~]#cat test.txt
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
1.复制/etc/passwd 到家目录
2.注释/etc/passwd中以root开头的行
按照查找行注释
按照查找字符注释
sed 后向引用 \1 开始
支持 输出空格 字符串 \t \n
[root@alexlnb ~]#ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (.*) n.*$#当前服务器的IP地址: \1#g'
当前服务器的IP地址: 10.0.1.200
第一题
如何匹配出 10.0.1.200 255.255.255.0
inet 10.0.1.200 netmask 255.255.255.0 broadcast 10.0.1.255
[root@alexlnb ~]#echo 123456 45678|sed -r 's#(.*) (.*)#\1\t\2#g'
123456 45678
[root@alexlnb ~]#echo 123456 45678|sed -r 's#(.*) (.*)#\1\n\2#g'
123456
45678
第二题
使用ip add方式取出eth0网卡的IP地址和lo 127.0.0.1/8
awk
awk
awk文件的来源
awk的格式
awk '找谁{干啥}' passwd.bak
awk '匹配{print }' file
AWK变量 awk把所有的字符当做变量 加上双引号视为字符串
NR 行号
1)文件的标准输入
awk '{print }' file
2)其他命令的标准输出
cat passwd.bak |awk '{}'
3)awk取行
== 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
!= 不等于
&& 并且
|| 或者
[root@alexlnb ~]#awk 'NR==1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
取第一行到第五行
[root@alexlnb ~]#awk 'NR<6' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
大于16的行
[root@alexlnb ~]#awk 'NR>16' /etc/passwd
大于等于1的行
awk 'NR>=1' test.txt
小于等于1的行
awk 'NR<=1' test.txt
取反
awk 'NR!=1' test.txt
查找行数大于1并且行数小于4
[root@alexlnb ~]#awk 'NR>1&&NR<4' test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
查找行数等于1或者等于10的
[root@alexlnb ~]#awk 'NR==1||NR==10' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
3)awk取列
awk分隔符 默认空格和tab键分隔
[root@alexlnb ~]#cat 1.txt
oldboy 123456 test 324324
lizhenya 345435 oldboy 213423
1 2 3 4
5 6 7 8
[root@alexlnb ~]#awk '{print $1}' 1.txt
oldboy
lizhenya
1
5
同时取出第一列和第三列 中间以空格分开 或者tab键
awk '{print $1" "$3}' 1.txt
awk '{print $1,$3}' 1.txt
awk '{print $1"\t"$3}' 1.txt
awk '{print $1"\n"$3}' 1.txt
[root@alexlnb ~]#awk '{print "第一列 "$1"\t第三列 "$3}' 1.txt
第一列 oldboy 第三列 test
第一列 lizhenya 第三列 oldboy
第一列 1 第三列 3
第一列 5 第三列 7
NF
[root@alexlnb ~]#cat 1.txt
oldboy 123456 test 324324
lizhenya 345435 oldboy 213423
1 2 3 4 6
5 6 7 8 10 20
[root@alexlnb ~]##awk会把每一列的总列数赋值给NF
[root@alexlnb ~]##NF awk的总列数
[root@alexlnb ~]#
[root@alexlnb ~]#awk '{print NF}' 1.txt
4
4
5
6
使用$NF取最后一列
[root@alexlnb ~]#awk '{print $NF}' 1.txt
324324
213423
6
20
-F 指定分隔符 可以是任意的
awk -F ":" '{print $NF}' test.txt
awk -F: '{print $NF}' test.txt
[root@alexlnb ~]#cat 2.txt
oldboy
[root@alexlnb ~]#awk -F "d" '{print $1}' 2.txt
ol
[root@alexlnb ~]#awk -F "d" '{print $2}' 2.txt
boy
AWK BEGIN和END模块
awk 'BEGIN{动作}'
BEGIN 在读取文件前做的动作
END 在执行完文件后做的动作
动作 print 字符串
print 计算
[root@alexlnb ~]#awk 'BEGIN{print "准备开始上课"}'
准备开始上课
awk 'BEGIN{print "以下是passwd的内容"}{print}' test.txt
END模块
[root@alexlnb ~]#awk 'BEGIN{print "以下是passwd的内容"}{print}END{print "内容打印完成"}' test.txt
以下是passwd的内容
root:x:0:0:root:/root:/bin/bash
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
内容打印完成
[root@alexlnb ~]##i++ ++i
[root@alexlnb ~]##i++ =i=i+1
[root@alexlnb ~]#
[root@alexlnb ~]#let i++
[root@alexlnb ~]#echo $i
1
[root@alexlnb ~]#let i++
[root@alexlnb ~]#echo $i
2
[root@alexlnb ~]#awk '{print "OK"}' /etc/hosts
OK
OK
[root@alexlnb ~]#cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@alexlnb ~]#awk 'BEGIN{print 10+10}'
20
[root@alexlnb ~]#awk 'BEGIN{print 10+10/2}'
15
使用awk的内置变量FS指定分隔符 了解
awk 'BEGIN{FS=":"}{print $1}' test.txt
OFS 空格的变量
[root@alexlnb ~]# awk 'BEGIN{print 1+1} {print "ok"} END {print "Game Over"}' /etc/hosts
2
ok
ok
Game Over
awk匹配
[root@alexlnb ~]#awk '/root/' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
查找以root开头的行
[root@alexlnb ~]#awk '/^root/' test.txt
root:x:0:0:root:/root:/bin/bash
[root@alexlnb ~]#awk '/^root/{print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
查找以root开头的行 并打印第一列和最后一列
[root@alexlnb ~]#awk -F: '/^root/{print $1,$NF}' test.txt
root /bin/bash
awk 数字比较
[root@alexlnb ~]#cat 2.txt
1 2 3
1 2 3
4 5 6
3 1 2
[root@alexlnb ~]#awk '$1>2' 2.txt
4 5 6
3 1 2
[root@alexlnb ~]#awk '$1>2{print $1}' 2.txt
4
3
[root@alexlnb ~]#awk '{if($1>3)print}' 2.txt
4 5 6
[root@alexlnb ~]#awk '$1>3' 2.txt
4 5 6
awk查看行号
awk '{print NR,$0}' test.txt
NF-1
[root@alexlnb ~]#awk '{print NF-1,$NF}' 2.txt
3 alex
3 zs
3 oldboy
3 oldgirl
[root@alexlnb ~]#awk '{print $(NF-1)}' 2.txt
3
3
6
2
[root@alexlnb ~]#cat 2.txt
1 2 3 alex
1 2 3 zs
4 5 6 oldboy
3 1 2 oldgirl
[root@alexlnb ~]#cat passwd.bak
root:x:0:0:root:/root:/bin/bash
[root@alexlnb ~]#awk -F ":/" '{print $1}' passwd.bak
root:x:0:0:root
[root@alexlnb ~]#awk -F ":/" '{print $1,$2}' passwd.bak
root:x:0:0:root root
[root@alexlnb ~]#awk -F ":/" '{print $1,$2,$3}' passwd.bak
root:x:0:0:root root bin/bash
| 或者
[root@alexlnb ~]#awk -F ":|/" '{print $1,$2,$3}' passwd.bak
root x 0
[root@alexlnb ~]#awk -F ":|/" '{print $1,$2,$3,$7}' passwd.bak
root x 0 root
[root@alexlnb ~]#awk -F "[:/]+" '{print $1,$2,$3,$6}' passwd.bak
root x 0 root
[root@alexlnb ~]#echo ----:::+++,,,,oldboy--:::++alex----:::oldgirl---+++|awk -F "[-:+,]+" '{print $2,$3,$4}'
oldboy alex oldgirl
awk 正则匹配
以^开头的行
awk '/^r/' /etc/passwd
按照列数匹配
[root@alexlnb ~]#awk -F: '$1 ~ /^r/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@alexlnb ~]#awk -F: '$NF ~ /^\/b/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
www:x:1000:1000::/home/www:/bin/bash
lyz:x:1001:1001::/home/lyz:/bin/bash
[root@alexlnb ~]#awk -F "[:/]+" '$NF ~ /^b/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www:x:1000:1000::/home/www:/bin/bash
lyz:x:1001:1001::/home/lyz:/bin/bash
匹配以in结尾的行
awk -F "[:/]+" '$NF ~ /in$/' /etc/passwd
取反 !~
[root@alexlnb ~]#awk -F "[:/]+" '$NF !~ /in$/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
www:x:1000:1000::/home/www:/bin/bash
lyz:x:1001:1001::/home/lyz:/bin/bash
按照日志的时间匹配
awk '/Dec 25 00:01:01/,/Dec 25 07:01:01/' /var/log/messages
[root@alexlnb ~]#awk -F: '$3>0&&$3<1000' test.txt|wc -l
9
awk -F: '$7=="/sbin/nologin"' test.txt
取反
awk -F: '$7!="/bin/bash"' test.txt
df|sed -n '2p'|awk '$3>1000000{print $5}'
grep sed awk find
回顾
grep 过滤字符串
-r 递归查询 grep -r '内容' /etc/*
-v 取反 egrep -v '^$|#' file
-w 单词 以空格分隔
-i 不区分大小写
-n 显示过滤到内容的行号
-E 扩展
sed 字符串替换 免交互
sed -n '3p' file
sed -n '1,3p' file
sed -n '/root/p' file
sed -n '/root/,/alex/p' file
sed -i '2s#root#oldboy#g' file
sed -i '1,10s/^/#/g' file
awk 取行 取列 数据统计 if for while 数组
awk 'NR==2' file
awk 'NR==1 || NR==10' file
awk '$3>1&& $3<50' file
[root@alexlnb ~]#sed -i 's/^/http:\/\//g' 2.txt
[root@alexlnb ~]#cat 2.txt
http://www.baidu.com.cn/1.html
http://www.sina.com.cn/2.qqqq
http://www.youku.com/4.wwww
http://www.youku.com/4.wwww
http://www.job.com/1.html
http://www.job.com
http://www.baidu.com.cn/1.html
http://www.job.com/1.html
http://www.sina.com.cn
sort 排序 uniq -c 去重统计 sort -r 逆序排序 -n以数字排序
cat 3.txt|sort |uniq -c|sort -rn
[root@alexlnb ~]#cat 2.txt|sort -rn
39
33
30
22
20
12
10
9
8
5
2
[root@alexlnb ~]#cat 2.txt|sort -rnk3
周扬 1 56
肖博 1 55
肖博 1 52
伍建明 1 51
施华青 1 49
李树昆 1 47
郑亨凭 1 46
周扬 1 43
伍建明 1 39
刘晓东 1 38
刘晓东 1 28.5
施华青 1 15
开机启动流程
1.第一个进程 老祖宗
Centos6.X init
串行启动 如果某一项服务挂掉 无法启动 则后面的全部无法正常启动
centos7.X systemd
并行启动 如果某一项服务挂掉 不影响系统正常启动
用户管理
1) 让一个命令或者一个服务开机自启动有什么方法?
/etc/rc.local 需要给源文件x权限 可执行命令 服务启动 脚本
chkconfig iptables on 开机启动
systemctl enable firewalld 开机启动
/etc/profile 开机加载 或者重新打开窗口连接 重新加载
2) 用户分类
2) 用户分类
系统默认
1. 管理员 root UID 0
2. 虚拟用户 UID CentOS6 1-499 # 每个服务启动都需要一个用户 用户不需要登录
UID CentOS7 1-999
3. 普通用户 CentOS6 500+ # 自己创建的用户
CentOS7 1000+
/etc/passwd
centos中默认的shell是bash
/bin/bash 解释器
/sbin/nologin 不允许登录
如何统计passwd中有几个管理员 几个虚拟用户 几个普通用户
awk -F: '$3==0{a++}' /etc/passwd
awk -F: '$3==0{a++}END{print a}
' /etc/passwd
awk -F: '$3>0&&$3<1000{a++}END{print a}' /etc/passwd
awk -F: '$3>999{a++}END{print a}' /etc/passwd
--------------
awk -F: '$3==0' /etc/passwd|wc -l
awk -F: '$3>0 && $3<1000 ' /etc/passwd|wc -l
awk -F: '$3>999' /etc/passwd|wc -l
--------------
用户可属于多个组
一个组内可有多个用户
xd用户
oldboy 组
alex
lw
oldboy组
alex 用户
zs
ls
em
/etc/passwd
/etc/group
/etc/gshadow
/etc/shadow
每列的含义 以:分隔
lyz: x: 1001: 1001 : : /home/lyz: /bin/bash
root: x: 0: 0: root: /root: /bin/bash
用户名 密码 UID GID 描述 家目录 解释器
root用户的家目录 /root 皇宫
[root@alexlnb ~]#pwd
/root
普通用户的家目录 /home/用户名 贫民窟
[www@alexlnb ~]$pwd
/home/www
3)与用户相关的目录
/etc/skel 家目录的模板
useradd 创建用户
1.创建家目录/home/name
2.把/etc/skel下的隐藏文件 复制到家目录中
3.更改隐藏文件的默认权限
.bash_logout # 使用ctrl+d 退出的时候执行此文件
.bash_profile # 环境变量 别名 针对当前用户生效 局部 家里的规矩
.bashrc # 别名 局部 家里的规矩
第一步 vim /etc/profile 笔试题
把PS1 注释掉
第二部 su - oldboy
第三步 rm -rf /*
第四步 exit
第五步 su - oldboy
如何恢复:
把三个文件拷贝到家目录中
cp /etc/skel/.bash* .
退出重新连接 或者使用 source .bash_profile
.. 上一级
. 当前目录
.file 隐藏文件
. file 执行 相当于source 文件
用户相关的命令
useradd
-s 指定解释器
-u 指定用户的uid
-M 不创建家目录
-g 指定属于组
-c 描述信心
添加一个用户alex999指定uid为888 禁止用户登录系统 不创建家目录
useradd -u 888 -s /sbin/nologin -M alex999
id 查看用户信息
userdel 删除用户 默认不删除家目录 在公司中用户尽量不删 使用注释的方式
-r 删除家目录
usermod 修改用的信息
-s 修改解释器
-u 修改用户uid
-g 修改属于组
-G 属于多个组
[root@alexlnb ~]# grep lzy /etc/passwd
lzy:x:1003:1004::/home/lzy:/bin/bash
[root@alexlnb ~]# usermod -s /sbin/nologin lzy
[root@alexlnb ~]# grep lzy /etc/passwd
lzy:x:1003:1004::/home/lzy:/sbin/nologin
usermod -G alex999,oldboy lzy
指定lzy属于多个组 alex999 oldboy 中间使用逗号分隔
[root@alexlnb ~]# usermod -G alex999,oldboy lzy
[root@alexlnb ~]# id lzy
uid=1003(lzy) gid=1004(lzy) groups=1004(lzy),1003(alex999),1002(oldboy)
清空附属组
[root@alexlnb ~]# usermod -G '' lzy
[root@alexlnb ~]# id lzy
uid=1003(lzy) gid=1004(lzy) groups=1004(lzy)
修改用户的uid
[root@alexlnb ~]# usermod -u 899 lzy
[root@alexlnb ~]# id lzy
uid=899(lzy) gid=1004(lzy) groups=1004(lzy)
useradd -u -s -M
passwd 设置密码
1)交互式
passwd 回车默认修改当前登录用户 后面跟用户 指定修改某个用户的密码
passwd oldboy
2)非交互式
echo 123456|passwd --stdin oldboy
[www@alexlnb ~]$ exit
logout
[root@alexlnb ~]# grep lzy /etc/passwd
lzy:x:899:1004:handsome:/home/lzy:/sbin/nologin
[root@alexlnb ~]# usermod -s /bin/bash lzy
[root@alexlnb ~]# grep lzy /etc/passwd
lzy:x:899:1004:handsome:/home/lzy:/bin/bash
[root@alexlnb ~]# su - www
Last login: Fri Dec 27 09:15:51 CST 2019 on pts/0
[www@alexlnb ~]$ su - lzy
Password:
Last login: Fri Dec 27 09:15:55 CST 2019 on pts/0
如何管理密码?
笔记本文档中 手机里 设置为相同
生日 特殊日子
密码要复杂12位以上字母数字特殊字符
如何设置密码
I.a,m@l!i_z9834*& henya teacheR
echo 'I.a,m@l!i_z9834*& henya teacheR'|passwd --stdin lzy
[root@alexlnb ~]# mkpasswd
PvaU49sa#
[root@alexlnb ~]# mkpasswd
c8Cc$A9gl
[root@alexlnb ~]# mkpasswd
Lhe21m[Uh
[root@alexlnb ~]# mkpasswd
DLvd3y@9l
[root@alexlnb ~]# mkpasswd
hTsr_w07L
[root@alexlnb ~]# mkpasswd
x1.I1qamZ
[root@alexlnb ~]# mkpasswd
dY6f_kL5d
§¦Ç¡Ç<Ð_µèôRߤZ¯H(ÉÏ
lzy
如何让系统更加安全
用户可访问到的服务器
1.最小化原则 安装操作系统 需要什么安装什么
2.保护root 禁止root登录 更改默认SSH端口 22端口
3.给重要的命令+i 给重要的文件加a
4.给重要的文件或命令做一个指纹
1.给文件创造一个指纹 数字的指纹大家都相同
md5sum file
2.检查指纹库是否有文件被修改过
[root@alexlnb ~]# md5sum -c police.txt
1.txt: OK
3.修改一个文件在检测
[root@alexlnb ~]# echo 111 >1.txt
[root@alexlnb ~]#
[root@alexlnb ~]# cat 1.txt
111
[root@alexlnb ~]# md5sum -c police.txt
1.txt: FAILED
通过以上的方式检测网站的站点目录下所有的代码文件 如果有更改发送邮件通知运维
如果是开发人员修改了代码
重新生成指纹
md5sum 1.txt >police.txt
[root@alexlnb ~]# cat 1.txt
111
[root@alexlnb ~]# md5sum -c police.txt
1.txt: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
[root@alexlnb ~]# md5sum 1.txt >police.txt
[root@alexlnb ~]# md5sum -c police.txt
1.txt: OK
作业:如何批量获取文件的MD5值 find
把家目录中所有的文件的指纹取出存放在/tmp/police.txt中
作业2:批量添加10个用户stu01..stu10 并设置统一密码为123456 禁止for while
批量添加10个用户stu01,stu02....stu10,并设置8位随机密码(禁止使用for,while等循环)
chown 修改用户的属主属组
chown lzy police.txt # 修改文件的属主
chown lzy.lzy police.txt # 修改文件的属主属组
chown -R lzy.lzy oldboy/ # 修改目录和目录下的所有文件属主和属组
groupadd 添加用户组 先创建组或者GID 创建用户添加到组
坑: 创建一个用户 UID888 指定用户组为test 不创建家目录 /sbin/nologin oldboy
groupadd test
useradd -u 888 -g test -s /sbin/nologin -M oldboy
[root@alexlnb ~]# useradd -u 1111 -g test -s /sbin/nologin -M oldboy
useradd: group 'test' does not exist
[root@alexlnb ~]# useradd -s /sbin/nologin test01
[root@alexlnb ~]# grep test01 /etc/passwd
test01:x:1113:1113::/home/test01:/sbin/nologin
last 查看系统最近用户最近一次登录的时间
lastlog 查看系统所有用户 最近登录的时间
需求 如何使用普通用户www查看/root家目录下的内容
尚方宝剑
visudo 让普通用户临时以root的身份运行命令
1)如何查看我当前有没有尚方宝剑 有没有以root身份可运行的命令
[www@alexlnb ~]$ sudo -l
# 只提示一次 后面直接输入密码
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for www:
以上输入www的密码 默认没有尚方宝剑
visudo === /etc/sudoers
visudo 可以检查语法的错误
授权1个命令 开发人员最小化
www ALL=(ALL) /usr/bin/ls
授权多个命令
www ALL=(ALL) /usr/bin/ls,/usr/bin/cat
授权所有命令
www ALL=(ALL) /usr/bin/*
对某个命令取反
www ALL=(ALL) /usr/bin/*,!/usr/bin/vim
使用sudo方式运行命令
运维人员拥有最高权限
www ALL=(ALL) NOPASSWD: ALL
[www@alexlnb ~]$ sudo ls /root
1.txt oldboy police.txt
[www@alexlnb ~]$ su - root
Password:
[www@alexlnb ~]$ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[www@alexlnb ~]$ sudo sed -i '1s#root:x#root:#g' /etc/passwd
[www@alexlnb ~]$ head -1 /etc/passwd
root::0:0:root:/root:/bin/bash
[www@alexlnb ~]$ su - root
Last login: Fri Dec 27 12:18:42 CST 2019 on pts/2
批量创建用户
批量创建10个用户 test01..test10 密码统一设置123456
useradd oldboy;echo 123456|passwd --stdin oldboy
useradd oldboy oldboy01 oldboy02
useradd test01
useradd test02
useradd test10
[root@alexlnb ~]# echo test{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g'|bash
useradd test01
useradd test02
useradd test03
useradd test04
useradd test05
useradd test06
useradd test07
useradd test08
useradd test09
useradd test10
useradd oldboy;echo 123456|passwd --stdin oldboy
[root@alexlnb ~]# echo test{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1;echo 123456|passwd --stdin \1#g'
useradd test01;echo 123456|passwd --stdin test01
useradd test02;echo 123456|passwd --stdin test02
useradd test03;echo 123456|passwd --stdin test03
useradd test04;echo 123456|passwd --stdin test04
useradd test05;echo 123456|passwd --stdin test05
useradd test06;echo 123456|passwd --stdin test06
useradd test07;echo 123456|passwd --stdin test07
useradd test08;echo 123456|passwd --stdin test08
useradd test09;echo 123456|passwd --stdin test09
useradd test10;echo 123456|passwd --stdin test10
如何批量删除用户
echo oldboy{1..10}|xargs -n1|sed -r 's#(.*)#userdel -r \1#g'|bash
awk 批量创建用户 oldboy1 oldboy10
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk '{print "useradd " $1}'
useradd oldboy1
useradd oldboy2
useradd oldboy3
useradd oldboy4
useradd oldboy5
useradd oldboy6
useradd oldboy7
useradd oldboy8
useradd oldboy9
useradd oldboy10
设置密码统一123456
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk '{print "useradd " $1";echo 123456|passwd --stdin " $1}'
useradd oldboy1;echo 123456|passwd --stdin oldboy1
useradd oldboy2;echo 123456|passwd --stdin oldboy2
useradd oldboy3;echo 123456|passwd --stdin oldboy3
useradd oldboy4;echo 123456|passwd --stdin oldboy4
useradd oldboy5;echo 123456|passwd --stdin oldboy5
useradd oldboy6;echo 123456|passwd --stdin oldboy6
useradd oldboy7;echo 123456|passwd --stdin oldboy7
useradd oldboy8;echo 123456|passwd --stdin oldboy8
useradd oldboy9;echo 123456|passwd --stdin oldboy9
useradd oldboy10;echo 123456|passwd --stdin oldboy10
awk批量删除
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk '{print "userdel -r " $1}'
userdel -r oldboy1
userdel -r oldboy2
userdel -r oldboy3
userdel -r oldboy4
userdel -r oldboy5
userdel -r oldboy6
userdel -r oldboy7
userdel -r oldboy8
userdel -r oldboy9
userdel -r oldboy10
[root@alexlnb ~]# echo oldboy{1..10}|xargs -n1|awk '{print "userdel -r " $1}'|bash
随机数
0-32767
[root@alexlnb ~]# echo $RANDOM|md5sum|cut -c1-8
a4616bef
[root@alexlnb ~]# echo $RANDOM|md5sum|cut -c1-8
318556cb
[root@alexlnb ~]# echo $RANDOM|md5sum|cut -c1-8
date +%N|md5sum|cut -c1-8
[root@alexlnb ~]# useradd oldboy;echo `echo $RANDOM|md5sum|cut -c1-8|tee passwd.txt`|passwd --stdin oldboy
echo test{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;echo `echo $RANDOM|md5sum|cut -c1-8|tee -a passwd.txt`|passwd --stdin \1#g'|bash
[root@alexlnb ~]# awk -F: '$3>999' /etc/passwd|sed -i 's/#//g'|awk -F: '{print "userdel -r " $1}'|bash
[root@alexlnb ~]# echo test{1..10}|xargs -n1|sed -r 's#(.*)#echo \1 >>passwd.txt;useradd \1;echo `echo $RANDOM|md5sum|cut -c1-8|tee -a passwd.txt`|passwd --stdin \1 #g'|bash
echo test1 >>passwd.txt;useradd test1;echo `echo $RANDOM|md5sum|cut -c1-8|tee -a passwd.txt`|passwd --stdin test1
[root@alexlnb ~]# useradd oldboy;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin oldboy
创建用户 设置随机数密码取8位赋值给变量pass 免交互配置密码给用户
[root@alexlnb ~]# useradd oldboy;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin oldboy;echo oldboy $pass >>passwd.txt
输出用户名和密码 追加到passwd.txt
Changing password for user oldboy.
passwd: all authentication tokens updated successfully.
[root@alexlnb ~]# cat passwd.txt
oldboy bcedf792
echo test{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin \1;echo \1 $pass >>passwd.txt#g'|bash
echo test{1..10}|awk '{for(i=1;i<=NF;i++)print "useradd " $i";pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin "$i";echo "$i" $pass >>passwd.txt"}'
echo test{1..10}|xargs -n1|awk '{print "useradd "$1";pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin "$1";echo "$1" $pass >>passwd.txt"}'|bash
for i in {1..10};do userdel -r test$i;done
RXW
RWX是什么
R read 读 可以看文件 cat less more head tail
W write 写 可以写入 vim echo sed -i
X execute 执行 可执行文件 .sh 脚本文件可执行
普通文件是否需要可执行权限? 普通文件的最高权限 RW
如何知道我对当前的文件有什么权限?
1.首先要知道你的当前登录的用户 whoami 查看当前登录的用户
2.确定当前用户和文件有什么关系 属主 属组 陌生人(other)
[oldboy@alexlnb ~]$ll /etc/hosts
-rw-r--r-- 1 root root 158 Dec 25 10:12 /etc/hosts
3.根据当前用户和文件的对应关系找出对应的权限
rw-r--r--
前三位 属主的权限
中三位 属组的权限
后三位 其他用户的权限 陌生人
rwx 可读可写可执行
R == 4
W == 2
x == 1
- == 0
rw-r--r-- 数字表示 644
属主的权限: 6
属组的权限:4
其他的权限:4
属主 属组 其他用户
user group other
u g o
ugo = a
644 rw-r--r--
600 rw-------
755 rwxr-xr-x
777 rwxrwxrwx
000 ---------
555 r-xr-xr-x
[root@alexlnb ~/oldboy]## 修改test.sh 属主 可写 可读 属组 可读 其他用户 可读
[root@alexlnb ~/oldboy]##属主 420 属组 400 其他 400
[root@alexlnb ~/oldboy]##相加结果 6 4 4
[root@alexlnb ~/oldboy]#chmod 644 test.sh
[root@alexlnb ~/oldboy]#ll test.sh
-rw-r--r-- 1 root root 13 Dec 31 09:30 test.sh
rwx对于文件的作用
r 可读 不可写 不可执行
w 不可写 不可执行 可追加 如果想要写入 必须和r配合使用
x 啥都不能干 想要执行 必须和r进行配合
rwx对于目录的作用
r 不能进入目录 只显示文件名 不显示详细信息 配合x使用
w 啥都不能干 控制是否在目录下创建 删除 重命名 必须和x配合
x 可进入到目录 可以查看文件内容
为了系统的安装 所有的创建的目录都是755权限
小结:
1.当前登录用户
2.登录用户对应文件的关系
3.通过关系找到对应权限
可查看某个目录下的内容
目录必须有rx权限
如果祥在某个目录下进行修改创建删除移动
目录必须有wx权限
文件的删除和文件本身没有关系 看上级目录的w权限
rwx 对于文件
r 可读
w 可写+r
x 可执行+r
rwx 对于目录
r 只能查看文件名 +x
w 下级目录的增删改+x
x 只能进入目录 查看+r
umask 控制系统默认创建目录和文件的权限
文件最大的权限 666 rw-rw-rw-
目录最大的权限 777 rwxrwxrwx
默认权限:
使用文件最大的权限和目录最大的权限减去默认的umask值得到创建后的权限
如何查看umask
umask
文件 666
-022
644
目录 777
-022
755
如何修改umask 临时的
umask 032
文件 666
-032
634
+010
644
目录 777
-032
745
对于文件减去后如果有奇数 则在奇数位+1 目录不需要加
umask 035 文件和目录的默认权限
文件
666
- 035
631
+011
642
目录 777
035
742
创建一个文件权限为000 目录为111 则umask默认是多少?666
网站对外提供访问 公网 必须对站点目录的权限严格空格
目录755
文件644
必须对所有的站点目录下的文件做MD5指纹认证
重要的数据做备份
先把中毒的文件 拷贝到 /tmp 留证据
先恢复数据
suid setuid 特殊权限位 数字 4 使用stat查看 在属主权限位设置
sgid 特殊权限位 数字 2 在组权限位设置
t 粘滞位 数字 1 在陌生人权限位设置
小结:
rwx 文件 目录
421
如何修改
chmod 修改属主 属组 chown
ugo
u
+x
a+x
u-x,o+w
g=r-x
chmod 644
umask
隐藏属性
a
i
特殊权限位
s
t
sgid
---------------
定时任务
某个时间做某件事情
闹钟起床
Linux中定时任务
备份
tar 打包-发送到备份服务器
统计数据
什么时间使用定时任务打包
业务低谷期
游戏低谷时间 小游戏-12点 端游-4点5点
电影 3点-4点
商城 4点-5点
外卖 4点-5点
官网 12点后
小视频 4点-5点
滴滴 4点-5点
系统定时任务 针对所有用户
/etc/crontab # 公司常用
用户定时任务
crontab -l 列出定时任务
crontab -e 编辑定时任务
crontab -e /var/spool/cron/用户名 用户名:当前登录系统的用户
crontab 类似visudo 语法检测的功能
公司常用的定时任务配置文件
/etc/crontab
crontab -e = /var/spool/cron/用户名
日志文件
/var/log/cron
查看服务
centos6.x
/etc/init.d/crond status
/etc/init.d/crond stop 或者 start restart
centos7.x
systemctl status crond
* * * * *
分钟0-59
小时0-23
天 1-31
月 1-12
周 0-6 or 1-7
口诀:什么时间做什么,然后再想下一次什么时候执行 什么时间,做什么事情
每天的上午8点30分,来学校上车(go to school)
* * * * *
分 时 日 月 周
* * * * * 执行的命令
30 8 * * * go to school
或者
30 08 * * * go to school
每天晚上12点准时,回家自己开车(go to bed) * 中间必须有空格 * 和命令中间必须有空格
0 0 * * * go to bed
00 00 * * * go to bed
* 代表 每
注意:星期几和日期不要同时加上 2020年2月29日 星期六
* 12 * * * # 12点的每分钟执行任务 12.01 12.02 12.03 12.03 12.59
/n 每隔n分钟执行定时任务
每5分钟执行时间同步任务 须安装ntpdate
*/5 * * * ntpdate ntp1.aliyun.com
13分钟 5分钟执行 15分钟执行定时任务
[root@alexlnb ~]#echo hostname >>`date +%F`.log
[root@alexlnb ~]#ll
-rw-r--r-- 1 root root 9 Jan 2 11:58 2020-01-02.log
定时任务2
定时任务:
每5分钟执行一次时间同步 重要 搭建时间服务器
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
每天的上午7点到上午11点 每一个小时运行CMD命令
- 区间 从几点到几点
00 7-11 * * * cmd
分 时 日 月 周
定时任务
备份
shell脚本
7点半-8点25执行
25 7-8 * * *
--------------
30 7 * * *
25 8 * * *
7点 10点-12点的每小时执行
00 7,10-12 * * * cmd
每分钟把自己的名字 追加到 /oldboy/oldboy.txt
第一个里程碑-如何显示自己的名字 并放入文件中 用什么命令
第二个里程碑-定时任务如何写
第三个里程碑-测试-看看结果
第四个里程碑-排错-遇到错误了
tailf /oldboy/oldboy.txt
[root@alexlnb ~]#echo liuxiaodong
liuxiaodong
echo liuxiaodong >>/oldboy/oldboy.txt
每分钟 晚上11点,凌晨12点到早上7点
* 23,00-07/1 * * * /application/nginx/sbin/nginx -s reload
00
每小时
0 0 * * *
00 00 * * *
什么是脚本
把可执行命令放入普通文本中就是脚本 使用 bash或sh执行运行此文本
[root@alexlnb ~]#sh 1.sh
/root
[root@alexlnb ~]#bash 1.sh
/root
课下了解 宝塔面板
[root@alexlnb ~]#echo `date +%F-%H-%M-%S`.txt
2020-01-03-10-34-52.txt
每天凌晨12点把1.sh的行注释
00 00 * * * sed -i '/1.sh/s/^/#/g'
[root@alexlnb ~]#crontab -l
#时间同步
#* * * * * /usr/sbin/ntpdate ntp1.aliyun.com
#print name
* * * * * bash /root/1.sh
* * * * * sed -i '4s/^/#/g' /var/spool/cron/root
00 08 * * * sed -i '4s/#//g' /var/spool/cron/root
定时任务中的命令 使用全路径执行
echo `which ntpdate` ntp1.aliyun.com
05.定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1
如果定时任务没有定向到文件中或者空 会发送邮件给root
可发送邮件 必须保证系统邮件服务开启状态
/var/spool/mail/root
公司中邮件大部分服务器是关闭状态
发不出邮件憋得上 会产生临时小文件 每执行一次定时任务就会产生一个新的小文件
每个新的文件 都会占用系统的inode号 如果inode满 则硬盘无法存储新的内容
inode df -i
如何解决定时任务的产生的小文件 (postfix没有开启)
1.开启邮件服务 (工作中很多服务器都是关闭状态)
2.把所有的定时任务的结果定向到空 或者定向到文件中
3.定时任务清空小文件
1.邮件的服务
systemctl stop postfix
2.root邮件的地址
/var/spool/mail/root
3.小文件的目录
/var/spool/postfix/maildrop/
每天凌晨1点把/etc/目录 打包备份/tmp下目录并且要求每天的备份名字不同。
1.如何打包/etc目录
2.如何放在/tmp下
3.文件的名字要求不同 每天日期不同
4.在命令行测试
5.写入脚本 并执行脚本测试 目录/server/scripts
6.把脚本写入定时任务 每分钟执行一次进行测试
7.OK后然后时间改为凌晨1点
管理-技术-一起走==发展
定时任务默认不指定文件的目录 在家目录中创建
执行命令的过程
1.执行命令
2.查找命令的全路径 ls pwd
3.PATH 存放命令的路径 只有PATH变量中有的 才可在任意的路径执行命令
临时生效 永久 写入 /etc/profile
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/oldboy:'
普通用户定时任务运行脚本的时候可以识别的PATH只有 /usr/bin和/bin
[root@alexlnb ~]#which ntpdate
/usr/sbin/ntpdate
[root@alexlnb ~]#which ifconfig
/usr/sbin/ifconfig
作业:解决上面全路径问题
1)全路径
2)
3)
1.定时任务的注意事项
1)定时任务规则前面加注释 是给我们自己看
2)使用脚本替代命令 (超过两条以上) ntpdate ntp1.aliyun.com &>/dev/null
3)定时任务配置文件中不要出现% 比如时间 date +%F 写入脚本或转义
4)运行脚本的时候使用/bin/sh /bin/bash (如果没有全路径直接写脚本 脚本必须有执行权限)
5)定时任务的结果必须输出到文件或者黑洞
a. 邮件开启 发邮件
b. 邮件关闭 生成小文件
6)避免不必要的程序命令输出 tar 相对路径
7)定时任务中输出的文件必须是全路径 默认是在家目录
8)定时任务只识别的变量是/usr/bin和/bin 使用全路径执行
a. PATH 放了命令路径
b. 可执行命令如何放入PATH
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
:/usr/local/test/bin'
所有的命令都是放在了程序目录的bin或者sbin目录下
c. java的服务全部使用全路径或者写入PATH
案例:
创建一个以IP地址命名的目录 把IP目录放在/tmp下
mkdir `如何取IP`
ifconfig
打包/etc目录放入IP目录下
并且以每天的名字不同
1)如何取IP地址
ifconfig eth0
如何取第二行
ifconfig eth0|awk 'NR==2'
ifconfig eth0|sed -n '2p'
取IP地址
ifconfig eth0|sed -n '2p'|awk '{print $2}'
ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (.*) net.*$#\1#g'
2)如何创建以IP命名的目录
a. mkdir /tmp/`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
b. 变量
IP=`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
mkdir /tmp/$IP
3) 打包etc放入IP目录下
a. tar zcf /tmp/$IP/etc.tar.gz etc
b. tar zcf /tmp/`ifconfig eth0|sed -n '2p'|awk '{print $2}'`/etc.tar.gz etc
4) 每天的名称不同
按照每天的时间格式
a.tar zcf /tmp/$IP/`date +%F`-etc.tar.gz etc
b.TIME=`date +%F`
tar zcf /tmp/$IP/$TIME-etc.tar.gz etc
5) 写入脚本 并测试脚本
[root@alexlnb /server/scripts]#cat etc.sh
IP=`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
TIME=`date +%F`
mkdir -p /tmp/$IP
cd /
tar zcf /tmp/$IP/$TIME-etc.tar.gz etc
6) 写入定时任务
* * * * * sh /server/scripts/etc.sh &>/dev/null 按照每分钟测试
00 00 * * * sh /server/scripts/etc.sh &>/dev/null
7) 如何解决路径问题
a. 命令写全路径 /usr/sbin/ifconfig
b. PATH变量写入脚本
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
IP=`ifconfig eth0|sed -n '2p'|awk '{print $2}'`
c. . /etc/profile
8)定时任务书写规范
a. 先在命令行测试
b. 把正确的命令写入脚本
脚本中命令使用全路径 或者使用环境变量 PATH
脚本固定一个目录
不要输出不必要的信息 输入到文件或者空
tar打包到相对路径
c. 测试脚本
sh test.sh
-x 脚本的执行过程
d. 写入定时任务
crontab -e 编辑定时任务 语法检测功能
不要求结果的定向到空
命令使用绝对路径 脚本中可以使用PATH变量
e. 工作中定时任务使用的配置文件
crontab -e /var/spool/cron/root
/etc/crontab
磁盘管理
磁盘管理
磁盘的体系结构
1.磁盘的外部结构
2.磁盘的内部结构
3.磁盘的工作原理读写原理
4.磁盘阵列RAID LVM
5.磁盘分区 分区表 命令 fdisk parted
6.格式化-挂载
1.磁盘的外部结构
a. 外观
固态硬盘
机械硬盘
b. 接口 连接服务器的RAID卡
SAS SATA SCSI
SAS 企业级
SATA 家用
SAS+SATA结合
2.磁盘的内部结构
a. 磁盘的主轴 决定了磁盘的转速
家用笔记本 5400RPM
高配置笔记本 7200RPM
企业服务器 10K RPM
15K RPM 最大的存储 900G SAS盘
b. 传动手臂 控制磁头
c. 盘片
d. 磁头 读写数据 磁力感应 径向运动 盘面的数量=磁头的数量
e. 磁道 存储数据 由上到下 由外到里
f. 扇区 磁道上最小的存储单位 512字节 inode block
g. 柱面 不同盘面上相同的磁道组合在一起
3. 磁盘阵列RAID
a. 提高存储空间
b. 提高数据安全
c. 提高性能
RAID 0 最少1快硬盘 容量 所有磁盘的总和 安全:没有冗余 速度 最快
企业场景: 从节点 小弟 不重要的服务器
数据库从库 挂掉不影响正常使用的服务器
RAID 1 最少两块硬盘 容量 所有磁盘的一半 安全: 百分百冗余 速度 慢
企业场景: 系统盘 监控服务器
RAID 5 最少使用3快盘 容量 损失1快盘 安全:只能坏一块盘 较快
企业场景:数据库主库 数据量不高 测试服务器
RAID 01 只能损坏一边的盘 容量 所有磁盘的一半 安全:百分百冗余 写入一般 读快
RAID 10 两边都可损失一块盘 容量 所有磁盘的一半 安全:百分百冗余 写入快 读快
企业场景 高并发 高访问量 数据库主库 重要的存储
4. 磁盘分区
引导记录
MBR格式 小于2T的磁盘 fdisk
GPT格式 大于2T的磁盘 parted
MBR格式分区
4个主分区
3个主分区+1个扩展分区
1个主分区+1个扩展分区
磁盘在Linux中显示的名称
SAS SATA SCSI
sd?
第一块磁盘 sda
sda1 主分区
sda2 主分区
sda3 主分区
sda4 扩展分区
sda5 逻辑分区
第二块磁盘 sdb
第三块磁盘 sdc
磁盘格式化 磁盘挂载
第一个里程碑:
准备一块磁盘插入到系统中 虚拟机需要重启 物理机不需要重启 磁盘支持热插拔
第二个里程碑:
检查系统是否识别到了磁盘
Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 sectors
第三个里程碑:
使用fdisk分区
Command (m for help): m
Command action
d delete a partition *****
删除分区
g create a new empty GPT partition table
创建一个可用的GTP分区表
l list known partition types LVM
列出分区类型
m print this menu *****
打印帮助
n add a new partition *****
添加新的分区
p print the partition table *****
打印分区表
q quit without saving changes *****
退出不保存
t change a partition's system id
改变分区系统id
w write table to disk and exit *****
保存并退出
Command (m for help): n # 创建新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free) #p 主分区
e extended #e 扩展分区
Select (default p): p # 默认主分区
Partition number (1-4, default 1): 1 # 编号1-4
First sector (2048-208895, default 2048): # 开始的扇区
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M # 格式单位不能小写
Partition 1 of type Linux and of size 20 MiB is set
Command (m for help): p # 打印分区表
显示分区表类型和id
Command (m for help): l # 小写的L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
更改分区表类型id
Command (m for help): t
Hex code (type L to list all codes): 83
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 2048 43007 20480 83 Linux
第四个里程碑:
格式化 文件系统选择xfs
centos ext3 ext4
centos xfs 格式化效率高 存储效率高 数据库(动态数据)
partprobe /dev/sdb1 # 通知系统内核识别新的分区 企业环境
mkfs.xfs /dev/sdb1 # 在虚拟环境中直接挂载可使用
第五个里程碑:
挂载并使用磁盘
mount /dev/sdb1 /mnt # 挂载点在工作中 自己创建的 /data1
第六个里程碑:
如何开机自动挂载
1) 写入/etc/rc.local # 开机自动运行 自动执行 脚本 需要执行权限
2) 写入/etc/fstab # 硬件开机自动挂载
blkid # 查看系统所有设备的唯一标识
/dev/sdb1 /mnt xfs defaults 0 0
UUID=f100aa92-19a0-483d-9e6a-72cb154c2de9 /mnt xfs defaults 0 0
唯一标识 设备名称 挂载点 文件类型 挂载参数 是否备份 开机是否检查
mount
-o 指定挂载的参数
第二个方案 磁盘大于2T GPT格式 支持最大128个主分区 parted 直接写入磁盘 直接生效
fdisk分大于2T磁盘
Command (m for help): g # 类型更改为GPT格式
Building a new GPT disklabel (GUID: BBB5949E-E369-4C58-AD73-F56AA2C9353B)
Partition number (1-128, default 1):
help [COMMAND] print general help, or help on COMMAND
帮助
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
创建分区类型表
mkpart PART-TYPE [FS-TYPE] START END make a partition mkpart primary 10G 20G
创建分区
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space,
all found partitions, or a particular partition
显示分区表
quit exit program
quit
rm NUMBER delete partition NUMBER
删除分区
第一步
(parted) mktable GPT # 更改分区表类型为GPT格式
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost.
Do you want to continue?
Yes/No? yes
第二步
(parted) mkpart primary 0 1T # 创建主分区 从0开始 到1T结束 (可以用百分比表示,比如Start? 0% , End? 50%)
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted) mkpart primary 1T 2T # 创建1个T的主分区
第三步
格式化
mkfs.xfs /dev/sdb1
-f 强制格式化
第四步
挂载
mount /dev/sdb1 /data
企业场景:
直接格式化挂载使用
mkfs.xfs /dev/sdb
mount /dev/sdb /data
系统分区 两个300G 做RAID 1
300G的磁盘进行分区 # 安装操作系统
非交互式parted
[root@alexlnb ~]#parted /dev/sdb mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost.
Do you want to continue?
Yes/No? yes
Information: You may need to update /etc/fstab.
[root@alexlnb ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3329GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
[root@alexlnb ~]#parted /dev/sdb mkpart test 0 1T
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
Information: You may need to update /etc/fstab.
[root@alexlnb ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3329GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000GB 1000GB test
[root@alexlnb ~]#parted /dev/sdb mkpart primary 1 2T
Warning: You requested a partition from 1000kB to 2000GB (sectors 1953..3906250000).
The closest location we can manage is 1000GB to 2000GB (sectors 1953125001..3906250000).
Is this still acceptable to you?
Yes/No? yes
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
Information: You may need to update /etc/fstab.
[root@alexlnb ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3329GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000GB 1000GB test
2 1000GB 2000GB 1000GB primary
[root@alexlnb ~]#parted /dev/sdb mkpart primary 2T 3T
Information: You may need to update /etc/fstab.
[root@alexlnb ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3329GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000GB 1000GB test
2 1000GB 2000GB 1000GB primary
3 2000GB 3329GB 1329GB primary
[root@alexlnb ~]#parted /dev/sdb rm 3
Information: You may need to update /etc/fstab.
[root@alexlnb ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 3329GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 1000GB 1000GB test
2 1000GB 2000GB 1000GB primary
问题
企业案例:
java 程序内存不够用 占用大量swap分区 用户正常访问中
1) 加内存 可以关机的情况下
临时扩充swap分区
第一个里程碑
如何生成20M的文件 放入/dev下
dd if=/dev/zero of=/tmp/20m bs=1M count=20 *****
input file output file block size 次数
第二个里程碑
格式化
mkswap /tmp/20m
第三个里程碑
挂载使用swap
swapon /tmp/20m
企业案例: inode满如何查找小文件
显示 no space left on device
df –h查看磁盘有剩余
如何查看系统中哪个目录小文件多 目录本身越大 则目录下的小文件越多
查看目录本身的大小
ll -d
使用find查找大于1M的目录 在工作中尽量使用相对路径查找内容
find / -type d -size +1M
find / -type d -size +1M|xargs ls -lhd
find / -type d -size +1M -exec ls -lhd {} \;
ll -hd `find / -type d -size +1M`
使用du命令查看目录的大小 -h
查看根下的第一列G结尾的目录
du -h /|awk '$1~ /G$/'
查看目录下所有文件的大小
du -h /var/log/*
查找到目录下包含G的行
du -h /var/log/*|grep G
企业案例
文件被彻底删除
1.硬链接为0
2.进程调用为0
[root@alexlnb ~]#lsof |grep messages
abrt-watc 717 root 4r REG 8,3 2759937 1095001 /var/log/messages (deleted)
列出谁在使用某个端口
lsof -i :3306
ps axuf stat状态信息栏
R 运行状态
S 可中断睡眠 当进程优先级高的抢占资源时 可中断此进程
T 进程被暂停
D 不可中断进程 当进程优先级高的抢占资源时 不可中断此进程
Z 僵尸进程
Ss 代表父进程
S< 进程优先级高 Ss<
SN 进程优先级低
R+ 进程在前台运行
S<sl
ctrl+z 暂停进程
top命令 和 w 命令相同?
top - 11:58:35 up 1 day, 40 min, 3 users, load average: 0.23, 0.16, 0.10
问题2
问题? 为什么备份的时候 需要打包 IO高 负载高
1.如何批量kill进程
a.pkill nginx # pkill 服务名字
b.killall nginx # killall 服务名字
c.
第一个里程
1.需要安装nginx
yum -y install nginx
2.启动服务
systemctl start nginx
浏览器访问页面 虚拟机IP地址
3.强制杀死nginxmaster进程
kill -9 pid
4. 如何批量杀死子进程 awk
ps axu|grep nginx|grep -v grep|awk '{print $2}'|xargs kill -9
kill `ps axu|grep nginx|grep -v grep|awk '{print $2}'`
5. 发送信号
a. 对于系统中没有指定信号的进程 使用kill方式
b. 对于系统中的服务 使用服务的信号 /usr/sbin/nginx -s stop reload
把程序放入后台运行 当前终端测试使用
nohup sleep 60 &
python程序如何启动和停止
python2.X
python3.7
nohup python3.7 test.py & # py正确启动方式
nohup python3.7 test.py --redis 10.0.0.202 --port 6379 --file /tmp/test.txt &
如何查看py程序的帮助
python3.7 test.py -h
使用帮助:
--redis IP
--port 6379
--file /tmp/test.txt
ps axu|grep test.py|grep - v grep|awk '{print $2}'|xargs kill
如何py程序较长 写入脚本中 test.sh
#!/bin/bash
nohup python3.7 test.py --redis 10.0.0.202 --port 6379 --file /tmp/test.txt &
如何运行?
sh test_start.sh
如何停止?
#!/bin/sh
ps axu|grep test.py|grep - v grep|awk '{print $2}'|xargs kill
sh test_stop.sh
jobs 显示后台的作业
bg %id 让后台的作业继续运行
fg %id 让后台的作业在前台运行
kill %id 杀死后台运行的作业
让后台的程序把日志信息 输出定向到文件或者空
for i in {1..10};do echo $i;done &>test.txt &
for i in {1..10};do echo $i;done &>/dev/null &
网络
tcpdump
tcpdump -nni 不解析主机名称 指定网卡
tcpdump -nni eth0 抓取eth0的所有信息
tcpdump -nni eth0 port 12345 抓取eth0的12345端口的信息
tcpdump -nni eth0 src 10.0.1.204 and dst 10.0.1.201 # 源IP 10.0.1.204 目标 10.0.1.201
tcpdump -nni eth0 udp 抓取UDP协议的数据包
$? 上一条命令的返回结果 0为成功 非0失败
iftop 查看当前的主机和其他主机通信的流量 先安装 yum -y install iftop
ip address add 10.0.1.201/24 dev eth0 # 给eth0网卡添加一个IP地址
ip address del 10.0.1.201/24 dev eth0 # 删除IP
route -n # 查看当前默认网关
route add default gw 10.0.1.254 # 配置默认网关 笔试题
route del default gw 10.0.1.254 # 删除默认网关
ip route add 0/0 via 10.0.1.254 # 指定默认网关
ip route del 0/0 via 10.0.1.254 # 删除默认路由
ip route replace 0/0 via 10.0.1.253 # 修改默认路由
-----------------------------------
ip route add 114.114.114.114 via 10.0.1.254 # 去往114的走1.254网关 电信 笔试题
ip route replace 114.114.114.114 via 10.0.1.253 # 去往114的走1.253网关 联通
如何批量删除网卡上的临时IP 10.0.1.210-250
echo {210..250}|xargs -n1|awk '{print "ip addr del 10.0.0."$1" dev eth0"}'
echo {210..250}|xargs -n1|sed -r 's#(.*)#ip addr del 10.0.0.\1 dev eth0#g'
ip add|grep '10.0.1'|grep -v 200|awk '{print $2}'|xargs -i ip addr del {} dev eth0
tcpdump
nmap
netstat
ss
iftop
dstat