Linux运维基础笔记整理
查找软件配置文件位置
rpm -qc 软件名
yum缓存
默认是: /var/cache/yum
也可以在 /etc/yum.conf 指定
cachedir=/var/cache/yum #存放目录
keepcache=1 #1为保存 0为不保存
metadata_expire=1800 #过期时间
2020年07月03日上午(day01)
一、Linux前景介绍
1.什么是运维?什么是linux?
Linux是IT技术行业的常青树、不倒翁
互联网公司 金融 信息 游戏 医药 期货 电商
定一个小目标 毕业之后的薪资范围
写一份决心书
技术网站 博客园 **** 51cto 知乎 简书 discuz论坛
https://www.increase93.com/
2.课程:
第一阶段: 运维基础 很慢 25-30天 基础不牢,地动山摇! 半天 全天
第二阶段: 综合架构 慢 30-40天 架构述职 模拟面试
第三阶段: Shell编程及代码上线 稍慢 10个全天 18-20半天 Shell就是最简单的开发语言更新业务版本 将开发 写好的新功能,进行交付给用户
第四阶段: MySQL数据库+Redis+MongoDB+ELK 快 25天 数据库 + 日志管理
第五阶段: 网络基础+监控+云计算 Zabbix+Kvm+Docker+K8S 稍快 全天 15-18全天想拿高薪
第六阶段: Python基础+就业指导 6天 运维开发 如何面试
总周期 5个半月-6个半月
二、什么是操作系统
1.基本含义:
简称OS 是计算机系统中必不可少的基础系统软件,是应用程序运行和用户操作必备的基础环境
操作系统就是一个人与计算机之间的中介
2.组成方式:
操作系统的组成: 计算机的硬件 + 系统核心 内核 + 命令解释器 + 外围的应用程序
3.常见操作系统:
windows 系统 桌面系统
linux系统
Unix系统
Mac系统 是Unix的变体
三、什么是Linux
1.含义:
类似于windows系统,Linux也是一个操作系统软件,但是他们的不同之处,windows是收费,不开源 主要应用于日常办公,游戏,娱乐 而Linux是一套开放源代码,并可以*传播类似于Unix的操作系统软件 多用户、多任务、多线程、多CPU的操作系统,主要用于企业环境
2.linux系统主要服务于 服务器端 嵌入式开发 个人PC桌面 三大领域
3.特点:
开源的,可以*修改
Unix系统兼容,具备了Unix的优秀特性
可以*传播,没有商业版权之说
适用于Intel等x86 CPU系列架构计算机
4.学习要求:
>8G 16G内存 500G硬盘 i7 i5处理器
5.学习完linux,可以掌握哪些技术,可以适用于哪些公司
基础运维能力 自动化运维 数据库运维 公有云运维 集群架构运维 代码发布 私有云运维 监控运维
日常处理系统故障,解决问题能力
四、linux的历史
1.1969年 Unix诞生于贝尔实验室
2.1984年 ,Minix 谭宁邦 大学教授 应用于教学
3.1984 斯托曼 *软件之父 FSF *软件基金会 GNU项目 GPL 通用公共许可协议 革奴计划
4.1991年 Linux内核 托瓦兹 Linux之父
5.1993年 linux内核加入了GPL协议 GNU Linux 出现了
6.Unix的优秀特性
技术成熟,可靠性高
极强的可伸缩性
强大的网络功能
强大的数据库支持能力
强大的开发功能
五、Linux的核心概念
1.FSF
*软件的核心就是没有商业化版权制约,源代码开发,可*传播
运行 复制 发布 研究 修改
2.GPL
通用公共许可协议 开源许可协议
*的,可任意传播的
可任意修改的,但是必须将修改之后的源代码发布出来
3.GNU
是FSF下面的一个项目 全称 GNU is not Unix
优秀的软件: Emacs编辑器 gcc编译软件 bash命令解释器 gawk开发语言 hurd内核 还在研发
4.linux系统 == GNU项目的组件(gcc bash)+Linux内核+成千上万的开发者提供的软件 GNU Linux操作系统
六、Linux的特点
1.特点:
支持多用户 多任务 多线程 多CPU
系统稳定性 安全性 可靠性高
有完善的网络服务
*开源的系统
有大量的第三方应用程序免费使用
多厂商支持
有完善的数据库平台
有完善的图形界面
有完善的开发平台
2.Linux应用领域:
IT服务器端 重中之重
嵌入式开发
个人PC桌面
七、Linux的发行版本
1.Linux内核 2.2 2.4 2.6 3.x
https://www.kernel.org/
2.发行版本:
Redhat 红帽 开源但是收费
CentOS 学习使用 去掉了Redhat的收费和logo部分编译而成的系统 开源 免费 企业 首选
Fedora 新功能 想使用新功能 是Redhat的测试版本 预发布版
Ubuntu 乌班图 桌面系统 开发人员使用的多
SUSE 数据库高级服务及电子邮件 德国使用的多 收费 OpenSUSE
Debian、FreeBSD 对安全性要求比较高 中文 麒麟 红旗
3.windows系统版本:
个人 win98 win2000 winXP win7 win8 win10
企业:windowsserver 2003 2008 2012 2016 2019数据中心版
CentOS版本 系统版本: 选择版本尽量选择双号
5.x 2.4内核 6.x 2.6内核 7.x 学习 7.6 1810 3.10内核 8.x
4.红帽认证:
RHCSA 系统管理员
RHCE 工程师
RHCSS 安全员
RHCA 架构师
八、虚拟机的软件
1.意义:通过这款软件可以让你的电脑模拟出多台相对独立的虚拟PC设备,可以在这些PC设备上安装运行不同操作系统。
这些操作系统跟真实的操作系统没有太大的差别
利用到一种互联网技术,虚拟化技术
2.虚拟机的软件都有哪些:
VMware Workstations #工作站版虚拟化软件,简单,易用,适合学习linux的人员 windows版
VMware Fusion #适用于Mac的版电脑
Kvm/XEN #linux的虚拟化 到后期,会学习到
Virtual Box #开源的虚拟化软件 开放源代码的
3.为什么我们要用VMware去学习linux?
为了方便 简单 易用 没有太大的门槛
九、32位和64位操作系统的区别
1. 设计的定位不同
64位操作系统就是为了高科技人员使用设计的,而32位操作系统是为普通用户设计的
2.安装的要求配置不同
64位操作系统只能安装在64位的电脑上(CPU的处理器必须支持64位),32为操作系统可以安装在32位电脑上,也可以安装在64位电脑上
3.运算速度不同
64位是32位运算速度的一倍
4. 寻址能力不同
支持的最大内存不同
32位系统最大支持4G内存 3.5内存 2的32次方bit
64位操作系统 寻址空间为2的64次方bit 21亿内存
2020年07月03日下午(day01)
一、创建一个虚拟机
1.创建虚拟机的过程, === 购买一台电脑
2.网络类型的种类: 三种获取IP地址的方式
(1)NAT 网络地址转换
NAT模式中的虚拟机是通过宿主机(物理电脑)进行上网和交换数据的
使用到网卡是VMnet8 VMware NAT Service服务就充当了一个路由器,虚拟机上网的时候首先会找到这个路由器,进行了一个地址转换,伪装了一个跟宿主机一样的IP地址 进行上网, 网络上的数据将返回给VMnet8这个网卡,VMnet8这块网卡会把数据返回给虚拟机
好处: 外面的网络可以随便更换,虚拟机的网络不变,IP地址也不会跟宿主机的IP地址冲突,IP的地址范围也广,设置一个网段
坏处: 上网需要经过一个中介 代理
(2)桥接模式 Bridge
通过宿主机网卡架设了一座桥 网桥 直接进入到了实际的网络环境中
虚拟机的IP地址跟宿主机的IP地址在一个网段范围之内,容易跟宿主机IP发生冲突
IP地址会随着外面网络的改变而改变,不能使用一个固定的IP地址,IP少
优点: 上网不需要经过宿主机,只需要通过VMnet0 网卡
桥接模式中的虚拟机跟宿主机的层级是一样的
(3)仅主机模式 Host-only
仅能跟宿主机进行连接,没有办法上网的 VMnet1
3.分区:三个分区
/boot #引导分区 大小给500-1024M
swap #交换分区 虚拟内存 给物理内存的1-2倍 峰值 最大只能16G
/ #跟分区 系统分区 数据分区 剩余多少空间就给多少
4.虚拟网络编辑器,只需要配置一次就可以了,不是每一个虚拟机都要配置一次虚拟网络编辑器
二、创建虚拟机过程
1.打开vmvare workstation 点击新建虚拟机
2.虚拟机基础设置完成,开启此虚拟机,进行操作系统的安装
3.进行操作系统语言的设置,一般选择英文。
4.进行操作系统时间的设置
5.进行操作系统软件的相关安装
6.进行操作系统的分区配置
6.不开启内核崩溃转存技术
7.进行网络参数配置
8.相关参数配置完成,开始安装。
9.进行root密码设置
10.进行虚拟网络编辑器的配置
11.查看vmnet8网卡ip地址
12.安装完成,重启
2020年07月06日上午(day02)
一、虚拟机的快照
1.虚拟机的几种状态:
开机状态 === 运行状态
关机状态
挂起状态 === 虚拟机不关机,但是你使用不了 定身术
快照就是虚拟机的某种状态 === 月光宝盒
2.快照分类:
开机状态下的快照 占用资源多 拍摄快照速度慢
挂起状态的快照 占用资源稍多 拍摄快速度稍慢
关机状态的快照 占用资源少, 拍摄速度快
3.建议:
要利用好快照,每天上课之前拍摄一个快照,快照能提高你的学习。
快照不易过多,保留一部分快照,把一些不重要的快照删除 因为快照也是会占用资源的,大量占用你的磁盘空间
二、虚拟机的克隆
1.含义:克隆 通过宿主机创建一台跟宿主机一样的虚拟机
克隆可以基于宿主机当前状态或者某个快照进行克隆
不能针对于开机和挂起状态下的主机或者快照进行克隆
宿主机只能在关机状态才能进行克隆操作
只能针对于宿主机的关机状态下的快照进行克隆
2.克隆的方法:
链接克隆: 基于原始虚拟机的副本,占用磁盘空间少,克隆速度快,依赖于原始虚拟机,如果原始虚拟机出现问题,那么你的链接克隆的虚拟机也将不可用
完整克隆: 是原始虚拟机的完整副本,相对完全独立的,不依赖于原始虚拟机 ,占用资源多,克隆速度慢
注:链接克隆的时候,选择虚拟机当前状态进行克隆,会给你创建一个新的当前状态下的快照
三、远程连接介绍
1.连接小知识:
IP地址分为: 公网IP(全世界都可以访问,全网唯一) 私网IP(只能本地访问,本地网络唯一的)
192.168 本地电脑 本地网络
172.16-172.31 内网 IT技术人员使用
10.0-10.255 IT技术人员使用
端口 数字端口 表示一个软件所对应的功能 使用端口来表示 1-65535 2的16次方
SSHD == SSH 远程连接服务 22 80 HTTP服务 web界面提供访问的
协议 计算机之间互相通信要共同遵守的规则 协议 SSH协议
IP IP地址 找谁,在哪里
Port 端口 干什么,提供什么服务
Protocol 协议 什么语言 什么通信方式 遵守什么规则
2.需要用户和密码
四、远程连接工具介绍
1.Xshell
2.SecureCRT
3.Putty
4.Mac系统 iterm2
五、远程工具xshell连接虚拟机
1.对xshell工具进行相关配置:
2.下载xftp,解压将文件夹复制到该目录,就可以在xshell界面启动xftp。
3.进入虚拟机查看虚拟机ip,再进入xshell查看是否能ping通。
4.如果出现Telnet不是内部命令,运用下面方法解决问题。
5.进行虚拟机连接前xshell的准备
6.新建会话完成,开始连接。
7.完成连接。
六、远程连接不上主机
相关排错
1. 检查是否存在IP地址,IP地址是否输入错误
2. 检查网卡是否启动
3. 检查虚拟网络编辑器,是否配置正确
4. 检查VMnet8网卡IP是否正确,是否启用
5. 检查VMware服务是否运行
6. 重启虚拟机或者重新配置虚拟网络编辑器
相关内容:services.msc
七、bash shell 介绍
1.什么是bash shell?
是一个命令解释器 它在操作系统的最外面
负责用户与内核进行交互的一种接口 将用户输入的命令翻译给操作系统,并将处理后的结果输出到屏幕
2.bash shell作用:
实现对linux系统进行管理,包含:
文件管理 权限管理 用户管理 磁盘管理 网络管理 软件管理 等等
3.Bash shell的执行方式
命令方式 效率低 适合少量的工作
脚本方式 效率高 适合复杂的工作
4.远程连接之后的命令行:
Last login: Wed Jun 10 19:50:59 2020 from 10.0.0.1
[root@sh-BC ~]#
八、命令行提示符介绍
1.[root@sh-BC ~]# #超级管理员命令行提示符 #这一行字符表示什么意思
[] #没有什么特殊的含义 就是起到一个括号的作用 把里面的内容看做是一个整体
root #表示当前登录的用户 我是谁 root本身又是超级管理员 拥有最大的权限
@ #分隔符
sh-BC #主机名 系统主机名 可以修改,但是是唯一的 所有用户的主机名都是他
~ #表示当前的所在位置 我在哪里 目录 ~ 本身表示当前用户的家目录 /root /home/xx
# #命令行结尾提示符 # 表示是超级管理员的命令行提示符 $ 是普通用户命令行提示符
2.[user@sh-BC ~]$ #普通用户命令行提示符
注:Linux命令行提示符都是有PS1的变量所控制的
3.#给命令行加上颜色
[root@sh-BC ~]# echo \'PS1="\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\\$ \[\e[0m\]"\' >>/etc/profile
[root@sh-BC ~]# source /etc/profile
九、Linux命令组成结构
1.命令在命令行上面的操作语法:
命令 [选项] [参数/路径]
command options arguments
注:中括号中的内容是可有可无的,不是必须要有的
命令 #每个命令都有自己的功能 你要干什么 你要针对谁做些什么 最主要的,是整条命令的主体
选项 #表示命令的其他的扩展功能 单独指定的命令的其他功能 实现命令的具体功能
参数 #文件 目录 你要对谁操作 文件或者目录都是用路径来表示的
示例:
[root@sh-BC ~]# ls #命令 没有指定参数时,默认针对是当前所在目录
anaconda-ks.cfg
[root@sh-BC ~]# ls -l #命令+选项
total 4
-rw-------. 1 root root 1497 Jun 9 20:00 anaconda-ks.cfg
[root@sh-BC ~]# ls -l /root #命令+选项+参数
total 4
-rw-------. 1 root root 1497 Jun 9 20:00 anaconda-ks.cfg
[root@sh-BC ~]# ls /root #命令+参数
anaconda-ks.cfg
#选项:
以短横岗 “-” 短格式选项 单个字符 例如: -l
以长横岗 “--” 长格式选项 多个一组字符 例如: --all 这组字符串是一个整体 有些特殊含义
多个短横岗 指定多个功能 -a -l -i ==== -ali 使用一个短横岗
注意:
1. 中括号表示可选,命令的选项和参数是可选的,不是必须要有的
2. 选项表示的是命令的不同功能
3. 参数是命令要操作的对象,这个对象可以是文件或者目录
4. 命令、选项、参数两两之间至少要有一个空格,一个完整的命令或者选项和参数不能有空格的
5. 命令必须要放在开头,选项和参数在有些命令的时候,位置是可以发生变化的
2.执行命令的时候报错
[root@sh-BC ~]# l s
-bash: l: command not found #命令找不到
#命令写错了,根本没有这个命令
#系统中没有安装这个命令,需要安装才能使用
[root@sh-BC ~]# ls /roo
ls: cannot access /roo: No such file or directory #没有这个文件或者目录
#文件或者目录名写错了
#路径写错了
#相信电脑,电脑是不会出错的,如果电脑的出现结果跟你想象的不一样,那么一定是你错了,不要那么固执认为自己就是对的
2020年07月07日上午(day03)
一、bash shell特性
1. Tab键补全
#命令补全
[root@sh-BC ~]# user
useradd userdel usermod usernetctl users
[root@sh-BC ~]# s
Display all 220 possibilities? (y or n) #有很多命令,一页显示不全
#选项补全
yum install -y bash-completion #需要安装补全软件
[root@BC ~]# ls --
--all --indicator-style=
--almost-all --inode
--author --kibibytes
--block-size= --lcontext
[root@BC ~]# systemctl st
start status stop
#参数补全 路径补全
[root@sh-BC ~]# ls /r
root/run/
2.命令行常用快捷键
命令行常用快捷键 | 特殊含义 |
---|---|
Ctrl键 + c | #取消当前的操作 |
Ctrl键 + d | #退出当前用户的登录 |
Ctrl键 + a | #把光标从当前位置移动到命令行的行首 |
Ctrl键 + e | #把光标从当前位置移动到命令行的行尾 |
Ctrl键 + u | #把光标从当前位置到行首的内容进行剪切或者删除 |
Ctrl键 + k | #把光标从当前位置到行尾的内容进行剪切或者删除 |
Ctrl键 + y | #粘贴你所剪切的内容 |
delete键 | #从前往后删除一个字符 |
Ctrl键 + w | #删除当前位置至上一个空格的字符 删除一组字符串 |
Ctrl键 + 左方向键 | #向左移动一组单词 以空格或者特殊字符作为分隔符 |
Ctrl键 + 右方向键 | #向右移动一组单词 |
Ctrl键 + l | #清屏 clear 清除当前的窗口内容 |
Ctrl键 + r | #查找历史命令 搜索最近的一次命令 |
Ctrl键 + s | #锁屏 锁屏之后,也是可以继续输入命令和操作命令,只是你看不到 |
Ctrl键 + q | #解锁 |
Esc键 + . | #获取上一条命令最后的参数 或者最后面的内容 以空格分隔符 |
!! | #执行上一条执行过的命令 |
!ls | #执行最近一次以ls开头的命令 |
3. 历史记录
history #显示所有执行过的命令
!id #历史记录中某个命令的历史ID 执行这个id所对应的命令
选项:
-d ID #删除指定的ID信息
-w #将你当前shell窗口执行的命令保存到默认的文件 ~/.bash_history
-c #清除所有命令的历史记录
4. 命令别名
#系统自带的别名
[root@sh-BC ~]# alias
alias cp=\'cp -i\'
alias egrep=\'egrep --color=auto\'
alias fgrep=\'fgrep --color=auto\'
alias grep=\'grep --color=auto\'
alias l.=\'ls -d .* --color=auto\'
alias ll=\'ls -l --color=auto\'
alias ls=\'ls --color=auto\'
alias mv=\'mv -i\'
alias rm=\'rm -i\'
alias which=\'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde\'
ll == ls -l
#如何设置别名
别名的名称不能跟系统中命令名称有冲突
[root@sh-BC ~]# alias network=\'ping -c1 baidu.com\'
#检查别名
[root@sh-BC ~]# alias
alias cp=\'cp -i\'
alias egrep=\'egrep --color=auto\'
alias fgrep=\'fgrep --color=auto\'
alias grep=\'grep --color=auto\'
alias l.=\'ls -d .* --color=auto\'
alias ll=\'ls -l --color=auto\'
alias ls=\'ls --color=auto\'
alias mv=\'mv -i\'
alias network=\'ping -c1 baidu.com\'
alias rm=\'rm -i\'
alias which=\'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde\'
#验证别名
[root@sh-BC ~]# network
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=31.2 ms
--- baidu.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 31.235/31.235/31.235/0.000 ms
[root@sh-BC ~]#
#取消别名
[root@sh-BC ~]# unalias network
[root@BC ~]# alias
alias cp=\'cp -i\'
alias egrep=\'egrep --color=auto\'
alias fgrep=\'fgrep --color=auto\'
alias grep=\'grep --color=auto\'
alias l.=\'ls -d .* --color=auto\'
alias ll=\'ls -l --color=auto\'
alias ls=\'ls --color=auto\'
alias mv=\'mv -i\'
alias rm=\'rm -i\'
alias which=\'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde\'
#让别名永久生效
把设置别名的命令写入到下面的文件中
[root@BC ~]# ls /etc/bashrc
/etc/bashrc
[root@BC ~]# ls ~/.bashrc
/root/.bashrc
[root@BC ~]# alias network=\'cat /etc/sysconfig/network-scripts/ifcfg-eth0\'
[root@BC ~]# network
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
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=025bb6de-7ddd-41e5-87c5-16724d3c293e
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
IPV6_PRIVACY=no
#临时取消别名
\ #取消特殊字符的特殊含义 取消转义 撬棍
[root@BC ~]# \network
-bash: network: command not found
#实现永久生效
[root@BC ~]# echo "alias network=\'cat /etc/sysconfig/network-scripts/ifcfg-eth0\'" >>/etc/bashrc
#将其配置文件重新加载生效
[root@BC ~]# source /etc/bashrc
#退出重新登录测试 依然生效
#取消永久生效
[root@BC ~]# sed -i \'/network/d\' /etc/bashrc
#退出重新登录
二、获取命令的帮助
获取命令 | |
---|---|
man | 获取指定命令的帮助 |
help | 只能查看系统内置命令 |
命令 +‘--help\' | 获取命令选项的帮助 |
info |
三、互联网模式查找命令
1.https://man.linuxde.net/
2.https://liunx.web3.xin/
3.http://linux.51yip.com/
四、关机重启及注销命令
#更新时间
[root@BC ~]# yum install -y ntpdate
[root@BC ~]# ntpdate ntp.aliyun.com
#关机
[root@BC ~]# shutdown -h 10 #10分钟之后关机
[root@BC ~]# shutdown -h now #立刻关机
[root@BC ~]# shutdown -h 0 #立刻关机
[root@BC ~]# shutdown -h 11:00 #定时关机
[root@BC ~]# poweroff #立刻关机
[root@BC ~]# halt -p #立刻关机
[root@BC ~]# init 0 #立刻关机 通过系统的运行级别
#重启
[root@BC ~]# shutdown -r 10 #10分钟之后进行重启
[root@BC ~]# shutdown -r 0 #立刻重启
[root@BC ~]# shutdown -r now #立刻重启
[root@BC ~]# shutdown -r 11:00 #定时重启
[root@BC ~]# reboot #重启
#注销 退出当前登录的用户
[root@BC ~]# logout #退出当前登录的用户 只能退出登录式Shell,不能退出非登录式Shell
Ctrl键 + d #快捷键 退出当前登录的用户
[root@BC ~]# exit #退出当前登录的用户 既能退出登录式也能退出非登录式 主要用于脚本退出
[root@BC ~]# bash
[root@BC ~]# logout
bash: logout: not login shell: use `exit\'
[root@BC ~]# exit
exit
五、显示IP地址的命令
Centos7默认显示IP地址的命令
#获取所有网卡的IP地址
[root@BC ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
====
[root@BC ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#单独查看某个网卡的IP地址
[root@BC ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@BC ~]# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
ifconfig是Centos6默认显示IP地址的命令
[root@BC ~]# yum install -y net-tools
#所有的网卡的IP地址信息
[root@BC ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 669 bytes 367883 (359.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 376 bytes 48482 (47.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#获取某一个网卡的信息
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 699 bytes 370373 (361.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 394 bytes 51180 (49.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
hostname
#显示所有的IP地址,会显示IPv6的地址
[root@BC ~]# hostname -i
fe80::3310:9d15:9ee4:43e8%eth0 10.0.0.100
#只显示IPv4地址
[root@BC ~]# hostname -I
10.0.0.100
#如何获取到公网地址
[root@BC ~]# curl ifconfig.me
139.226.13.64
[root@BC ~]# curl cip.cc
IP : 139.226.13.64
地址 : 中国 上海
运营商 : 联通
数据二 : 上海市 | 联通
数据三 : 中国上海上海 | 联通
URL : http://www.cip.cc/139.226.13.64
六、命令总结
一、history #显示命令的历史记录
[root@BC ~]# history
1 hsitory
2 history
3 cat /root/.bash_history
4 history -w
5 cat /root/.bash_history
选项:
history -d #删除历史ID对应的命令
[root@BC ~]# history -d 1
[root@BC ~]# history
1 history
2 cat /root/.bash_history
3 history -w
4 cat /root/.bash_history
history -w #将当前历史记录保存到默认的文件中 ~/.bash_history
[root@BC ~]# history -w
[root@BC ~]# cat /root/.bash_history
history
cat /root/.bash_history
history -w
cat /root/.bash_history
history -w
history -c #清除所有的历史记录
[root@BC ~]# history -c
[root@BC ~]# history
1 history
[root@BC ~]#
二、alias #设置别名
用法: alias 别名=\'执行的命令’
[root@BC ~]# alias network=\'ping wwww.baidu.com\'
三、unalias #取消别名
用法: unalias 别名
[root@BC ~]# unalias network
四、shutdown #关机及重启的命令
选项:
shutdown -h #关机
shutdown -h 0 #立刻关机
shutdown -h now #立刻关机
shutdown -h 12:00 #定时关机
shutdown -r #重启
shutdown -r 0 #立刻重启
shutdown -r 12:00 #定时重启
shutdown -c # 取消定时的关机或者重启
举例:
[root@BC ~]# shutdown -h 12:00
Shutdown scheduled for Wed 2020-07-08 12:00:00 CST, use \'shutdown -c\' to cancel.
[root@BC ~]# shutdown -c
Broadcast message from root@BC (Tue 2020-07-07 15:16:37 CST):
The system shutdown has been cancelled at Tue 2020-07-07 15:17:37 CST!
[root@BC ~]# shutdown -r 10:00
Shutdown scheduled for Wed 2020-07-08 10:00:00 CST, use \'shutdown -c\' to cancel.
[root@BC ~]# shutdown -c
Broadcast message from root@BC (Tue 2020-07-07 15:17:35 CST):
The system shutdown has been cancelled at Tue 2020-07-07 15:18:35 CST!
五、poweroff #关机命令
六、halt #关机命令,本身只会关闭系统,不会关闭电源,需要手动关闭电源
选项:
halt -p #关闭电源及其系统
七、init #切换运行级别
init 0 #立刻关机 将运行级别切换为关机级别
init 6 #立刻重启 将运行级别切换为关机级别
八、reboot #立刻重启
九、logout #退出当前登录的用户,不能退出非登录式shell
[root@BC ~]# logout
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(Linux上海脱产10期-01-10.0.0.200) at 15:26:28.
Type `help\' to learn how to use Xshell prompt.
十、exit #退出当前登录的用户,主要用于脚本退出
十一、ip #显示网络IP信息
ip address #显示所有IP地址 简写ip a
[root@BC ~]# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5d:b7:af brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::97bc:9dec:7167:8229/64 scope link noprefixroute
valid_lft forever preferred_lft forever
ip address show eth0 #显示某块网卡的信息 j简写ip a s eth0
[root@BC ~]# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:5d:b7:af brd ff:ff:ff:ff:ff:ff
inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::97bc:9dec:7167:8229/64 scope link noprefixroute
valid_lft forever preferred_lft forever
十二、ifconfig #显示所有IP地址的信息
[root@BC ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.200 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::97bc:9dec:7167:8229 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:b7:af txqueuelen 1000 (Ethernet)
RX packets 4364 bytes 393641 (384.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3280 bytes 379305 (370.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig eth0 #显示某块网卡的信息
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.200 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::97bc:9dec:7167:8229 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:b7:af txqueuelen 1000 (Ethernet)
RX packets 4396 bytes 396297 (387.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3299 bytes 382093 (373.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
十三、hostname #显示系统主机名
选项:
hostname -i #显示所有IP地址的信息,包括ipv6地址
[root@BC ~]# hostname -i
fe80::97bc:9dec:7167:8229%eth0 10.0.0.200
hostname -I #只显示Ipv4地址的信息
[root@BC ~]# hostname -I
10.0.0.200
十四、man #显示命令的帮助信息
[root@BC ~]# man ls
LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alpha‐
betically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
十五、help #显示系统内置命令的帮助信息
[root@BC ~]# ll --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
\'--block-size=M\' prints sizes in units of
1,048,576 bytes; see SIZE format below
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information);
with -l: show ctime and sort by name;
otherwise: sort by ctime, newest first
十六、info #显示命令的说明信息
[root@BC ~]# info
File: dir Node: Top This is the top of the INFO tree
This (the Directory node) gives a menu of major topics.
Typing "q" exits, "?" lists all Info commands, "d" returns here,
"h" gives a primer for first-timers,
"mEmacs<Return>" visits the Emacs topic, etc.
In Emacs, you can click mouse button 2 on a menu item or cross reference
to select it.
* Menu:
Archiving
-----Info: (dir)Top, 2045 lines --Top--------------------------------------------------------------
Welcome to Info version 5.1. Type h for help, m for menu item.
2020年07月08日上午(day04)
一、文件管理概述
1.对文件做些什么
创建 复制 移动 查看 编辑 压缩 查找 删除
2.内容摘要
系统目录结构
文件路径定位
文件管理命令
文件类型
链接文件
文件编辑器
二、系统的目录结构
1.windows系统目录:
C:\
D:\
E:\
2.linux 系统目录
(1)linux系统一切是以根为顶点 / 起点
/etc/hosts /etc/hostname
Linux的目录结构就像是一个倒挂的树形结构
(2)linux中重要的相关文件或者目录
[root@BC ~]# ls -l /
/ #所有Linux系统的顶点目录
/boot #存放是系统启动相关文件 内核 引导程序 引导目录
/dev #设备目录文件
/dev/cdrom
== #系统光盘镜像
/dev/sr0
/dev/null #黑洞设备 类似于垃圾回收站 只进不出 只接受数据
/dev/random #生成随机数的设备 RANDOM 随机数的变量
/dev/zero #能够源源不断产生字符设备
/dev/pts #虚拟登录的终端目录
/dev/stderr -> /proc/self/fd/2 #错误输出 2>
/dev/stdin -> /proc/self/fd/0 #标准输入 <
/dev/stdout -> /proc/self/fd/1 #标准输出 >
/dev/pts/ #存放的是虚拟终端信息
#磁盘设备及分区
/dev/sda
/dev/sda1 /
/dev/sda2
/dev/sda3 /boot
/etc #非常重要,所有服务的配置目录 系统主要配置目录
/etc/sysconfig/network-scripts/ifcfg-eth0 #网卡配置文件
/etc/hostname #系统主机名配置文件
/etc/resolv.conf #系统DNS配置文件
/etc/hosts #IP地址和主机名的映射关系文件 本地域名解析配置文件
/etc/fstab #设备挂载目录配置文件 开机自启动挂载列表
/home #普通用户的家目录都在这个目录下面
/media #挂载目录 挂载一些可移动设备 CD 相机 了解
/mnt #提供临时挂载的目录
/opt #早期第三方厂商软件的安装目录
/proc #反映系统当前进程的实时状态
/root #超级管理员root的家目录
/run #存放程序运行后所产生的pid文件
/srv #物理设备产生的一些文件 了解
/sys #硬件设备的驱动程序信息 了解
/tmp #系统临时目录 类似于公共场所 系统会定时删除这个目录下长时间没有访问的文件
/usr #系统主要程序目录 相当于C盘的windows
/usr/local #系统默认软件安装目录 C:\Program
/usr/bin #系统中普通用户所能使用的命令
/usr/sbin #管理员所使用的命令
/usr/lib #库文件 32位
/usr/lib64 #库文件 64位
/var #存放系统可变的信息目录
/var/log #存放是系统日志目录
/var/log/messages #系统日志
/var/log/socure #系统用户登录日志
/var/run #进程产生的pid文件
/var/tmp #进程产生的临时文件
3.软链接文件
/bin === /usr/bin
/sbin === /usr/sbin
/lib === /usr/lib
/lib64 === /usr/lib64
三、路径的定位
1.文件名称及所在的位置,我们称之为路径 /etc/hosts 路径就是系统对文件进行定位的一种方式
不同的路径下,文件名是可以相同的
相同路径下,不能有相同名称的文件
linux中,一切皆文件
2.#每个目录下面都有一个.和.. 他们是干什么
. #一个点代表的是当前的目录
.. #两个点代表的是当前目录的上一级目录
[root@BC usr]# ./local/ #当前目录下的local目录 == /usr/local
[root@BC usr]# ../ #当前目录的上一级目录 / 根
./ #表示当前的目录
. #表示当前的目录
../ #从当前目录的上一级目录开始
.. #上一级目录
3.#什么是绝对路径,什么又是相对路径
只要是从/开始的路径或者以~为开始路径,就是绝对路径
不是以根为开始的路径或者~开始的路径就是相对路径
[root@BC ~]# ll /etc/hosts #绝对路径
[root@BC /etc]# ll hosts #相对路径
四、文件管理之基础命令-pwd
1.pwd #显示当前工作目录的绝对路径 ====告诉我,你在哪里
[root@BC ~]# cd /usr/
[root@BC usr]# pwd
/usr
[root@BC usr]# cd local/
[root@BC local]# pwd
/usr/local
五、文件管理之基础命令-cd
1.cd #切换工作目录 切换路径
[root@BC local]# cd #直接切换到当前用户的家目录
[root@BC ~]# pwd
/root
[root@BC ~]# cd ~ #切换当前用户的家目录 ==== cd /root
[root@BC ~]# cd . #保持当前目录不变
[root@BC ~]# cd ./ #保持当前目录不变
[root@BC ~]# cd .. #切换当前目录的上一级目录
[root@BC /]# cd
[root@BC ~]# cd ../ #切换当前目录的上一级目录
[root@BC /]#
[root@BC /]# cd usr/
[root@BC usr]# cd ./local/
[root@BC local]# pwd
/usr/local
[root@BC local]# cd ../etc/ #切换当前目录的上一级目录/usr下的etc目录
[root@BC etc]# pwd
/usr/etc
[root@BC usr]# cd ../etc/ #不同目录下,执行的相对路径操作,得到的结果是不同的
[root@BC etc]# pwd
/etc
[root@BC etc]# cd / #切换到根目录 根本身也是一个目录
[root@BC /]# cd - #切换到你上一次所在的目录 快速的到达上一次所在的路径
/etc
六、文件管理之基础命令-ls
1.ls #显示文件或者目录列表信息 打开目录 显示目录里面的内容
常用选项:
-l #以长格式形式显示文件或者目录的详细属性信息
-i #显示文件或者目录的inode信息 索引节点信息
-h #以字节大小显示文件大小 B KB MB GB
-a #显示所有文件,隐藏文件 所有以点开头的文件就是隐藏文件
-S #以文件大小进行排序 从大到小显示
-t #根据时间进行排序 最新的时间在最上面
-r #倒序排序
-F #给不同的文件加上不同的标识符
-d #显示目录本身信息
/ #目录
* #可执行文件
= #套接字文件 socker文件
| #管道文件
[root@BC ~]# ls #如果不加目录信息,默认针对的是当前目录操作
anaconda-ks.cfg day01.txt dead.letter oldboy qingshu_dir test.txt
[root@BC ~]# ls /root/
anaconda-ks.cfg day01.txt dead.letter oldboy qingshu_dir test.txt
[root@BC ~]# ls -l #系统自带别名相当于[root@BC ~]# ll
total 12
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
[root@BC ~]# ll -i #显示文件的inode信息
total 12
134317666 -rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
134380621 -rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
134915040 -rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
201533705 drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
202273667 drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
134380624 -rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
[root@BC ~]# ll -h #以字节大小显示文件信息
total 12K
-rw-------. 1 root root 1.4K Jul 8 12:26 anaconda-ks.cfg
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
-rw-------. 1 root root 2.3K Jul 3 14:31 dead.letter
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
10月24日 程序员日
[root@BC ~]# ll -a #显示所有的文件,隐藏文件
total 48
dr-xr-x---. 5 root root 272 Jul 8 12:29 .
dr-xr-xr-x. 18 root root 236 Jul 3 16:31 ..
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
-rw-------. 1 root root 3258 Jul 8 00:48 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x. 2 root root 68 Jul 6 12:20 .certs
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
-rw------- 1 root root 170 Jul 7 11:04 .mysql_history
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
-rw------- 1 root root 6003 Jul 7 18:40 .viminfo
[root@BC ~]# ll -aS #显示所有的文件,隐藏文件,并从大到小显示
total 48
-rw------- 1 root root 6003 Jul 7 18:40 .viminfo
-rw-------. 1 root root 3258 Jul 8 00:48 .bash_history
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
dr-xr-x---. 5 root root 272 Jul 8 12:29 .
dr-xr-xr-x. 18 root root 236 Jul 3 16:31 ..
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw------- 1 root root 170 Jul 7 11:04 .mysql_history
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x. 2 root root 68 Jul 6 12:20 .certs
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
[root@BC ~]# ll -at #显示所有文件,隐藏文件并根据时间进行排序
total 48
dr-xr-x---. 5 root root 272 Jul 8 12:29 .
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
-rw-------. 1 root root 3258 Jul 8 00:48 .bash_history
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
-rw------- 1 root root 6003 Jul 7 18:40 .viminfo
-rw------- 1 root root 170 Jul 7 11:04 .mysql_history
drwxr-xr-x. 2 root root 68 Jul 6 12:20 .certs
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
dr-xr-xr-x. 18 root root 236 Jul 3 16:31 ..
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
[root@BC ~]# ll -atr #显示所有文件,隐藏文件并根据时间顺序进行倒序排序
total 48
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
dr-xr-xr-x. 18 root root 236 Jul 3 16:31 ..
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
drwxr-xr-x. 2 root root 68 Jul 6 12:20 .certs
-rw------- 1 root root 170 Jul 7 11:04 .mysql_history
-rw------- 1 root root 6003 Jul 7 18:40 .viminfo
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
-rw-------. 1 root root 3258 Jul 8 00:48 .bash_history
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
dr-xr-x---. 5 root root 272 Jul 8 12:29 .
[root@BC ~]# ll -aSr #显示所有文件,隐藏文件并根据文件大小进行倒序排序
total 48
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir
drwxr-xr-x. 2 root root 68 Jul 6 12:20 .certs
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rw------- 1 root root 170 Jul 7 11:04 .mysql_history
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
dr-xr-xr-x. 18 root root 236 Jul 3 16:31 ..
dr-xr-x---. 5 root root 272 Jul 8 12:29 .
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
-rw-------. 1 root root 3258 Jul 8 00:48 .bash_history
-rw------- 1 root root 6003 Jul 7 18:40 .viminfo
[root@BC ~]# ll -aF #显示所有文件,隐藏文件并加上不同的标识符
total 48
dr-xr-x---. 5 root root 272 Jul 8 12:29 ./
dr-xr-xr-x. 18 root root 236 Jul 3 16:31 ../
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
-rw-------. 1 root root 3258 Jul 8 00:48 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x. 2 root root 68 Jul 6 12:20 .certs/
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r-- 1 root root 30 Jul 8 12:09 day01.txt
-rw-------. 1 root root 2276 Jul 3 14:31 dead.letter
-rw------- 1 root root 170 Jul 7 11:04 .mysql_history
drwxr-xr-x 12 root root 106 Jul 8 12:18 oldboy/
drwxr-xr-x 2 root root 46 Jul 6 12:20 qingshu_dir/
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
-rwxr-xr-x 1 root root 0 Jul 7 20:40 test.txt*
-rw------- 1 root root 6003 Jul 7 18:40 .viminfo
[root@BC ~]# ll -d /root/ #显示/root/目录本身信息
dr-xr-x---. 5 root root 272 Jul 8 12:29 /root/
[root@BC ~]# ls / #显示/目录下的文件
bin data etc lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
[root@BC ~]# ls -l / #以行的形式显示文件名称
total 20
lrwxrwxrwx. 1 root root 7 Jun 9 21:35 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jun 9 21:42 boot
drwxr-xr-x. 3 root root 17 Jul 3 16:32 data
drwxr-xr-x 19 root root 3180 Jul 8 09:02 dev
drwxr-xr-x. 85 root root 8192 Jul 8 09:02 etc
drwxr-xr-x. 3 root root 16 Jul 7 20:41 home
lrwxrwxrwx. 1 root root 7 Jun 9 21:35 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jun 9 21:35 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
dr-xr-xr-x 110 root root 0 Jul 8 09:02 proc
dr-xr-x---. 5 root root 272 Jul 8 12:29 root
drwxr-xr-x 27 root root 780 Jul 8 11:36 run
lrwxrwxrwx. 1 root root 8 Jun 9 21:35 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Jul 8 10:32 sys
drwxrwxrwt. 19 root root 4096 Jul 8 15:32 tmp
drwxr-xr-x. 13 root root 155 Jun 9 21:35 usr
drwxr-xr-x. 19 root root 267 Jun 9 21:44 var
七、文件管理之基础命令-tree
1.tree #以树状形式显示目录列表
安装:
[root@BC ~]# yum -y install tree
选项:
-a #显示所有文件或者目录 隐藏文件
-d #只显示目录及目录的数量
-f #以绝对路径显示目录列表
-h #显示文件的大小
-F #给不同类型的文件加上不同的标识符
/ #目录
* #可执行文件
= #套接字文件 socker文件
| #管道文件
-L #根据目录的基本显示
[root@BC ~]# tree #显示当前目录的目录列表
.
├── anaconda-ks.cfg
├── day01.txt
├── dead.letter
├── qingshu_dir
│ ├── qingshu1.txt
│ └── qingshu2.txt
└── test.txt
1 directory, 6 files
[root@BC ~]# tree -a #显示当前目录的全部文件。隐藏文件列表
.
├── anaconda-ks.cfg
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .certs
│ ├── cert8.db
│ ├── key3.db
│ ├── qq.crt
│ └── secmod.db
├── .cshrc
├── day01.txt
├── dead.letter
├── .mysql_history
├── qingshu_dir
│ ├── qingshu1.txt
│ └── qingshu2.txt
├── .tcshrc
├── test.txt
└── .viminfo
2 directories, 18 files
[root@BC ~]# tree -d /var/log #只显示目录及目录的数量
/var/log
├── anaconda
├── audit
├── mariadb
├── nginx
├── ntpstats
├── rhsm
├── sa
└── tuned
8 directories
[root@BC ~]# tree -h /var/log/ #显示文件的大小
/var/log/
├── [ 176] anaconda
│ ├── [ 41K] anaconda.log
│ ├── [3.9K] ifcfg.log
│ ├── [1.9M] journal.log
│ ├── [ 0] ks-script-gg9B9N.log
│ ├── [200K] packaging.log
[root@BC ~]# tree -L 2 /root/ #显示家目录下2级的文件或者目录
/root/
├── anaconda-ks.cfg
├── day01.txt
├── dead.letter
├── qingshu_dir
│ ├── qingshu1.txt
│ └── qingshu2.txt
└── test.txt
1 directory, 6 files
[root@sh-BC ~]# tree -f /root #以绝对路径的形式显示文件列表
/root
├── /root/10.txt
├── /root/1.txt
├── /root/2.txt
├── /root/3.txt
├── /root/4.txt
├── /root/5.txt
├── /root/6.txt
├── /root/7.txt
├── /root/8.txt
└── /root/9.txt
八、文件管理之基础命令-mkdir
1.mkdir #创建目录
选项:
-p #创建多级目录 递归创建 当目录已经存在时,再次创建不会提示报错
-v #显示创建的过程
-m #创建的时候,给目录设置一个权限
{} #生成序列 有规律和无规律 有规律使用..分割 无规律的使用逗号分割
* #通配符 所有的意思
在相同的路径下,不能存在相同的文件名称
在不同的路径下,可以存在相同的文件名称
[root@BC ~]# mkdir /data #使用绝对路径进行创建
[root@BC ~]# mkdir data #使用相对路径进行创建
[root@BC ~]# ll
total 4
-rw-------. 1 root root 1429 Jul 6 02:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data
[root@BC ~]# ll /
total 20
lrwxrwxrwx. 1 root root 7 Jul 6 02:13 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Jul 6 02:17 boot
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data
[root@BC ~]# mkdir /root/data
mkdir: cannot create directory ‘/root/data’: File exists
File exists #文件已经存在
解决:
1. 你要创建的目录已经存在,无需再次进行创建
2. 你要创建的目录路径书写错误
[root@BC ~]# mkdir -p /root/data
[root@BC ~]# mkdir test/oldboy
mkdir: cannot create directory ‘test/oldboy’: No such file or directory
[root@BC ~]# mkdir -p test/oldboy
[root@BC ~]# ll
total 4
-rw-------. 1 root root 1429 Jul 6 02:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data
drwxr-xr-x. 3 root root 20 Jul 8 19:57 test
[root@BC ~]# ll test/
total 0
drwxr-xr-x. 2 root root 6 Jul 8 19:57 oldboy
[root@BC ~]# mkdir oldboy
[root@BC ~]# mkdir \'oldboy \'
[root@BC ~]#
[root@BC ~]# ll
total 4
-rw-------. 1 root root 1429 Jul 6 02:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data
drwxr-xr-x. 2 root root 6 Jul 8 20:00 oldboy
drwxr-xr-x. 2 root root 6 Jul 8 20:00 oldboy
drwxr-xr-x. 3 root root 20 Jul 8 19:57 test
[root@BC ~]# ll -F
total 4
-rw-------. 1 root root 1429 Jul 6 02:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data/
drwxr-xr-x. 2 root root 6 Jul 8 20:00 oldboy/
drwxr-xr-x. 2 root root 6 Jul 8 20:00 oldboy /
drwxr-xr-x. 3 root root 20 Jul 8 19:57 test/
[root@BC ~]# root 6 Jul 8 20:00 oldboy/
[root@BC ~]# mkdir -v data01
mkdir: created directory ‘data01’
[root@BC ~]# mkdir -m 700 data02
[root@BC ~]# ll
total 4
-rw-------. 1 root root 1429 Jul 6 02:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data
drwxr-xr-x. 2 root root 6 Jul 8 20:02 data01
drwx------. 2 root root 6 Jul 8 20:04 data02
drwxr-xr-x. 2 root root 6 Jul 8 20:00 oldboy
drwxr-xr-x. 2 root root 6 Jul 8 20:00 oldboy
drwxr-xr-x. 3 root root 20 Jul 8 19:57 test
[root@BC ~]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@BC ~]# mkdir test/data{01..10} #批量创建10个目录
[root@BC ~]# ll test/
total 0
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data01
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data02
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data03
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data04
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data05
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data06
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data07
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data08
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data09
drwxr-xr-x. 2 root root 6 Jul 8 20:09 data10
[root@BC ~]# 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@BC ~]# echo {a..g}
a b c d e f g
[root@BC ~]# 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@BC ~]# mkdir test/oldboy-{a..g}
[root@BC ~]# ll -d test/oldboy-*
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-a
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-b
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-c
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-d
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-e
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-f
drwxr-xr-x. 2 root root 6 Jul 8 20:11 test/oldboy-g
[root@BC ~]# mkdir data-{a,c,d,h}
[root@BC ~]# ll
total 4
-rw-------. 1 root root 1429 Jul 6 02:17 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 8 19:51 data
drwxr-xr-x. 2 root root 6 Jul 8 20:02 data01
drwx------. 2 root root 6 Jul 8 20:04 data02
drwxr-xr-x. 2 root root 6 Jul 8 20:12 data-a
drwxr-xr-x. 2 root root 6 Jul 8 20:12 data-c
drwxr-xr-x. 2 root root 6 Jul 8 20:12 data-d
drwxr-xr-x. 2 root root 6 Jul 8 20:12 data-h
[root@BC ~]# mkdir -p oldboy/{01..10}/data{01..10}/test{01..10}
#在Linux系统中,是区分大小写的
[root@BC ~]# mkdir a
[root@BC ~]# mkdir A
[root@BC ~]# ll
total 4
drwxr-xr-x. 2 root root 6 Jul 8 12:25 a
drwxr-xr-x. 2 root root 6 Jul 8 12:25 A
九、文件管理之基础命令-touch
1.touch #创建文件 创建空文件 当文件已经存在时,创建的时候不会报错,但是会改变文件的时间戳
{} #生成序列 有规律和无规律 有规律使用..分割 无规律的使用逗号分割
[root@BC ~]# touch test.txt
[root@BC ~]# touch data.{txt,sh,log,xml,tar,py,js}
[root@BC ~]# ll
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.js
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.log
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.py
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.sh
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.tar
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.txt
-rw-r--r--. 1 root root 0 Jul 8 12:27 data.xml
[root@BC ~]# touch data{01..10}.txt
[root@BC ~]# ll
-rw-r--r--. 1 root root 0 Jul 8 12:28 data01.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data02.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data03.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data04.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data05.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data06.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data07.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data08.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data09.txt
-rw-r--r--. 1 root root 0 Jul 8 12:28 data10.txt
2020年07月09日上午(dsy05)
一、文件管理之基础命令-cp
1.cp复制或者拷贝文件
语法:
命令 源文件 目标目录
选项:
-r #递归复制 复制目录时所使用的
-p #保持源文件属性
-d #复制的时候保持软连接
-a === -pdr
-t #把源文件的位置根目标目录的位置进行调换 在批量拷贝文件时使用
-i #当拷贝的文件在目标目录已经存在时,提示是否覆盖 系统自带的别名
[root@BC ~]# cp /etc/hosts /root
[root@BC ~]# cp /etc/passwd ./
[root@BC ~]# cp /etc/resolv.conf .
[root@BC ~]# ll
total 12
-rw-r--r--. 1 root root 158 Jul 9 09:11 hosts
-rw-r--r--. 1 root root 873 Jul 9 09:11 passwd
-rw-r--r--. 1 root root 51 Jul 9 09:11 resolv.conf
[root@BC ~]# cp /opt/ ./
cp: omitting directory ‘/opt/’
[root@BC ~]# cp -r /opt/ ./
[root@BC ~]# ll
total 12
-rw-r--r--. 1 root root 158 Jul 9 09:11 hosts
drwxr-xr-x. 2 root root 6 Jul 9 09:14 opt
-rw-r--r--. 1 root root 873 Jul 9 09:11 passwd
-rw-r--r--. 1 root root 51 Jul 9 09:11 resolv.conf
[root@BC ~]# ll /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Jul 6 02:14 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
[root@BC ~]# cp /etc/grub2.cfg ./
[root@BC ~]# ll
total 20
-rw-r--r--. 1 root root 4229 Jul 9 09:16 grub2.cfg
-rw-r--r--. 1 root root 158 Jul 9 09:11 hosts
drwxr-xr-x. 2 root root 6 Jul 9 09:14 opt
-rw-r--r--. 1 root root 873 Jul 9 09:11 passwd
-rw-r--r--. 1 root root 51 Jul 9 09:11 resolv.conf
[root@BC ~]# rm -f grub2.cfg
[root@BC ~]# cp -d /etc/grub2.cfg ./
[root@BC ~]# ll
total 12
lrwxrwxrwx. 1 root root 22 Jul 9 09:16 grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 158 Jul 9 09:11 hosts
drwxr-xr-x. 2 root root 6 Jul 9 09:14 opt
-rw-r--r--. 1 root root 873 Jul 9 09:11 passwd
-rw-r--r--. 1 root root 51 Jul 9 09:11 resolv.conf
[root@BC ~]# cp -t ./ /etc/fstab
[root@BC ~]# ll
total 16
lrwxrwxrwx. 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r--. 1 root root 501 Jul 9 09:21 fstab
lrwxrwxrwx. 1 root root 22 Jul 9 09:16 grub2.cfg -> ../boot/grub2/grub.cfg
-rw-r--r--. 1 root root 158 Jul 9 09:11 hosts
drwxr-xr-x. 2 root root 6 Jul 9 09:14 opt
-rw-r--r--. 1 root root 873 Jul 9 09:11 passwd
-rw-r--r--. 1 root root 51 Jul 9 09:11 resolv.conf
[root@BC ~]# cp /etc/hosts ./
cp: overwrite ‘./hosts’? n
[root@BC ~]# alias
alias cp=\'cp -i\'
#强制覆盖不提示 临时取消别名
[root@BC ~]# \cp /etc/hosts ./
cp基础命令选项 | 含义 |
---|---|
-r | #递归复制 复制目录 |
-d | #保持软链接 |
-p | #保持属性不变 |
-a | === -pdr |
-i | #如果文件存在,提示是否覆盖 系统自带别名 |
-t | #把原位置和目标位置的位置进行调换 |
二。文件管理之基础命令-mv
1. mv #移动或者重命名文件
语法:
命令 源文件 目标目录
选项:
-i #当文件已经存在时,移动的时候,提示是否覆盖目标文件 系统自带别名
-f #强制覆盖,不提示
-t #把源文件的位置跟目标目录的位置进行调换
\ #临时取消别名的含义
[root@sh-BC ~]# mv --help
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
[root@sh-BC ~]# mv hosts /opt #移动文件 ,原位置的文件已经存在
[root@sh-BC ~]# ll
total 12
-rw-r--r--. 1 root root 4201 Jun 15 12:24 grub2.cfg
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 15 12:27 passwd
drwxr-xr-x. 2 root root 23 Jun 15 12:22 test
[root@sh-BC ~]# ll /opt/
total 4
-rw-r--r--. 1 root root 158 Jun 15 12:15 hosts
[root@sh-BC ~]# mv test/ /opt/ #移动目录 不需要加任何选项
[root@sh-BC ~]# ll
total 12
-rw-r--r--. 1 root root 4201 Jun 15 12:24 grub2.cfg
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 15 12:27 passwd
[root@sh-BC ~]# ll /opt/
total 4
-rw-r--r--. 1 root root 158 Jun 15 12:15 hosts
drwxr-xr-x. 2 root root 23 Jun 15 12:22 test
[root@sh-BC ~]# cp /etc/hosts ./
[root@sh-BC ~]# ll
total 16
-rw-r--r--. 1 root root 4201 Jun 15 12:24 grub2.cfg
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 15 12:27 passwd
[root@sh-BC ~]# mv hosts /opt/ #文件已经存在时,提示是否覆盖
mv: overwrite ‘/opt/hosts’? n
[root@sh-BC ~]# mv -i hosts /opt/
mv: overwrite ‘/opt/hosts’? n
[root@sh-BC ~]# alias
alias cp=\'cp -i\'
alias egrep=\'egrep --color=auto\'
alias fgrep=\'fgrep --color=auto\'
alias grep=\'grep --color=auto\'
alias l.=\'ls -d .* --color=auto\'
alias ll=\'ls -l --color=auto\'
alias ls=\'ls --color=auto\'
alias mv=\'mv -i\' #系统自带的别名
[root@sh-BC ~]# mv -f hosts /opt/ #强制覆盖
[root@sh-BC ~]# ll
total 12
-rw-r--r--. 1 root root 4201 Jun 15 12:24 grub2.cfg
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 15 12:27 passwd
[root@sh-BC ~]# ll /opt/
total 4
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
drwxr-xr-x. 2 root root 23 Jun 15 12:22 test
[root@sh-BC ~]# cp /etc/passwd ./
cp: overwrite ‘./passwd’? n
[root@sh-BC ~]# \cp /etc/passwd ./ #临时取消别名的作用
[root@sh-BC ~]# ll
total 12
-rw-r--r--. 1 root root 4201 Jun 15 12:24 grub2.cfg
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 16 09:09 passwd
[root@sh-BC ~]# mv -t ./ /opt/hosts #把原位置跟目标位置进行调换
[root@sh-BC ~]# ll
total 16
-rw-r--r--. 1 root root 4201 Jun 15 12:24 grub2.cfg
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 16 09:09 passwd
[root@sh-BC ~]# ll /opt/
total 0
drwxr-xr-x. 2 root root 23 Jun 15 12:22 test
#重命名
[root@sh-BC ~]# mv grub2.cfg 123.txt
[root@sh-BC ~]# ll
total 16
-rw-r--r--. 1 root root 4201 Jun 15 12:24 123.txt
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-rw-r--r--. 1 root root 1013 Jun 16 09:09 passwd
[root@sh-BC ~]# mv opt/ test
[root@sh-BC ~]# ll
total 16
-rw-r--r--. 1 root root 4201 Jun 15 12:24 123.txt
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
-rw-r--r--. 1 root root 1013 Jun 16 09:09 passwd
drwxr-xr-x. 2 root root 6 Apr 11 2018 test
三、文件管理之基础命令-rename
1.rename #利用替换字符串的方式进行重命名
[root@BC ~]# rename test oldboy test.txt
[root@BC ~]# ll
total 4
-rw-r--r--. 1 root root 158 Jul 9 10:00 host
drwxr-xr-x. 2 root root 6 Jul 9 09:59 mot
-rw-r--r--. 1 root root 0 Jul 9 10:08 oldboy.txt
四、文件管理之基础命令-rm
1. rm #删除文件或者目录
选项:
-i #在删除文件的时候,提示你是否确认删除 系统别名
-f #强制删除不提示
-r #删除目录使用 递归删除
[root@sh-BC ~]# rm 123.txt #提示你是否确认删除
rm: remove regular file ‘123.txt’? n
[root@sh-BC ~]# alias
alias cp=\'cp -i\'
alias egrep=\'egrep --color=auto\'
alias fgrep=\'fgrep --color=auto\'
alias grep=\'grep --color=auto\'
alias l.=\'ls -d .* --color=auto\'
alias ll=\'ls -l --color=auto\'
alias ls=\'ls --color=auto\'
alias mv=\'mv -i\'
alias rm=\'rm -i\' #提示是否删除文件
[root@sh-BC ~]# rm -f 123.txt #强制删除不提示
[root@sh-BC ~]# ll
total 8
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
-rw-r--r--. 1 root root 1013 Jun 16 09:09 passwd
drwxr-xr-x. 2 root root 6 Apr 11 2018 test
[root@sh-BC ~]# rm -f test/
rm: cannot remove ‘test/’: Is a directory #这是个目录
[root@sh-BC ~]# rm -rf test/ #递归目录
[root@sh-BC ~]# ll
total 8
-rw-r--r--. 1 root root 158 Jun 16 09:05 hosts
-rw-r--r--. 1 root root 1013 Jun 16 09:09 passwd
[root@sh-BC ~]# rm -rf ./ #删除当前所在位置的目录
[root@sh-BC ~]# rm -rf ./* #删除一个目录下的所有内容 排除隐藏文件 确认好自己在那里
==
[root@sh-BC ~]# rm -rf *
[root@sh-BC ~]# rm -rf /* #禁止执行此命令
五、查看文件内容命令-echo
1. echo #打印你所要输出的内容 打印变量的值 创建新文件 修改文件 输出加上颜色 脚本中使用的多
选项:
-n #不自动换行
-e #支持一些特殊字符的使用
\n #换行符
\t #tab键
#所见即所得
[root@sh-BC ~]# echo hello
hello
[root@sh-BC ~]# echo hello world
hello world
[root@sh-BC ~]# echo \'hello world\'
hello world
[root@sh-BC ~]# echo hello
hello
[root@sh-BC ~]# echo -n hello #输出的时候不自动换行
hello[root@sh-BC ~]#
[root@sh-BC ~]# echo -e \'hello\nworld\' #-e 支持一些特殊字符 \n 换行符
hello
world
[root@sh-BC ~]# echo -e \'hello\tworld\' #\t tab键
hello world
[root@sh-BC ~]# name=BC
[root@sh-BC ~]# echo $name #打印变量
BC
[root@sh-BC ~]# echo "hello world" > test.txt #创建一个非空文件
[root@sh-BC ~]# ll
total 8
-rw-------. 1 root root 1497 Jun 9 20:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 12 Jun 16 10:11 test.txt
[root@sh-BC ~]# cat test.txt
hello world
[root@sh-BC ~]#
#字体颜色
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
#字背景颜色
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
#最后的控制选项
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m — \33[37m 设置前景色
\33[40m — \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
[root@sh-BC ~]# echo -e "\033[31mHello world\033[0m"
Hello world
[root@sh-BC ~]# echo -e "\033[43;32m 红底白字 \033[0m"
红底白字
六、查看文件内容命令-cat
1. cat #显示文件内容 把文件内容全部显示出来 创建新文件 修改文件 合并文件
选项:
-n #显示文件时,显示文件的行号
-A #给显示的文件内容的每行结尾加上一个标识符
[root@sh-BC ~]# cat test.txt #显示文件的所有内容
hello world
[root@sh-BC ~]# cat -n test.txt #显示文件内容时,并显示行号
1 hello world
[root@sh-BC ~]# cat -A test.txt #给文件每一行的结尾加上标识符 主要是查看每行的最后面是否存在空格或者tab键
hello world$
[root@sh-BC ~]# cat test.txt > test.log #创建一个非空文件 根据一个文件内容进行创建一个新文件
[root@sh-BC ~]# ll
total 12
-rw-------. 1 root root 1497 Jun 9 20:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 12 Jun 16 10:34 test.log
-rw-r--r--. 1 root root 12 Jun 16 10:11 test.txt
[root@sh-BC ~]# cat test.log
hello world
#同时查看多个文件
[root@sh-BC ~]# cat hosts test.txt
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
hello world
[root@sh-BC ~]# cat hosts test.txt > 123.txt #将两个文件合并成一个文件
[root@sh-BC ~]# cat 123.txt
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
hello world
> #先清空文件内容
>> #追加
[root@sh-BC ~]# cat >BC.txt<<EOF #从命令行读取输入,直到一个与EOF相同的行结束。标识符限定输入重定向
> hello world
> EOF
[root@sh-BC ~]# ll
total 24
-rw-r--r--. 1 root root 170 Jun 16 10:36 123.txt
-rw-------. 1 root root 1497 Jun 9 20:00 anaconda-ks.cfg
-rw-r--r--. 1 root root 158 Jun 16 10:35 hosts
-rw-r--r--. 1 root root 12 Jun 16 10:38 BC.txt
-rw-r--r--. 1 root root 12 Jun 16 10:34 test.log
-rw-r--r--. 1 root root 12 Jun 16 10:11 test.txt
[root@sh-BC ~]# cat BC.txt
hello world
七、查看文件内容命令-more
1. more #分页显示文件内容 文件显示完成之后,退出
[root@sh-BC ~]# more services
选项:
-num #num是数字 指定一页显示多少行
+num #num是数字 指定从第几行开始显示文件内容
空格或者f键 #向下翻页
b键 #向上翻页
回车 #向下一行
h #帮助信息
q #退出
/xxx #搜索你要搜索的内容 搜索出来的内容不会高亮显示
n #向下查找 不能向上查找
= #显示当前光标所在的行号
[root@sh-BC ~]# more -5 services #指定一页显示多少行
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
--More--(0%)
[root@sh-BC ~]# more +5 services #从第几行开始显示
八、查看文件内容命令-less
1. less #分页显示文件内容 退出之后会把显示的内容收回 文件显示完成之后,不会自动退出,要手动
选项:
-N #显示文件内容的时候,加上行号
-i #在搜索的时候,忽略大小写
空格或者f键 #向下翻页
b键 #向上翻页
回车 #向下一行
q #退出
h #显示帮助
/xxxx #搜索指定的内容 会把搜索出来的内容高亮显示
n #向下查找
N #向上查找
= #显示当前页是第几行到第几行 总行数 总字节 显示已经显示多少字节 显示已经查看文件内容的比例
[root@sh-BC ~]# less -i services #忽略大小写 搜索的时候
[root@sh-BC ~]# less -N services #显示文件内容的时候,显示行号
2020年07月10日上午(day06)
一、查看文件内容命令-head
1.head #显示文件的头部信息,默认显示文件的前十行内容
选项:
-n #取消默认输出
-c #显示文件的最前面的字符
[root@BC ~]# head 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
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
[root@BC ~]# head -n 2 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
===
[root@BC ~]# head -2 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@BC ~]# head -20 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# head -c5 passwd
root:[root@BC ~]#
二、查看文件内容命令-tail
1.tail #显示文件的尾部信息,默认显示文件最后10行
选项:
-n #取消默认输出
-c #显示最后几个字符
-f #实时显示文件的尾部变化信息
-F #实时更新文件的内容,当文件不存在,不会退出,会一直尝试读取这个文件,直到文件存在
[root@BC ~]# tail passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# tail -n 1 passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
===
[root@BC ~]# tail -1 passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# tail -c5 passwd #显示最后5个字符,只能看见4个,另外一个是换行符
ogin
[root@BC ~]#
[root@BC ~]# tail -f passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#另外一个窗口进行测试
[root@BC ~]# echo \'hello\' >> passwd
[root@BC ~]# tail -f test.log
tail: cannot open ‘test.log’ for reading: No such file or directory
tail: no files remaining
[root@BC ~]# tail -F test.log
tail: cannot open ‘test.log’ for reading: No such file or directory
tail: ‘test.log’ has appeared; following end of new file
test
三、查看文件内容命令-tailf
1.tailf #实时更新文件的内容
tailf ==== tail -f
当文件内容没有发生变化时,tailf不会去读取磁盘中的信息,减少磁盘的读写 ,tail -f 当文件内容没有发生变化时,会一直向磁盘进行读取
选项:
-n #取消默认输出
四、文件或者命令查找-locate
1. locate #查找文件或者目录的路径 用到了本地的数据库 文件名称的数据库 根据本地的数据库进行查找文件,不会查找到最新的文件
[root@BC ~]# yum install -y mlocate
选项:
-i #不区分大小写
-r #简单使用正则表达式 $ 结尾
/var/lib/mlocate/mlocate.db
[root@BC ~]# updatedb #更新数据库
#把系统中所有文件名称包含passwd的文件全部查找出来
[root@BC ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/root/passwd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/passwd
/usr/lib/firewalld/services/kpasswd.xml
[root@BC ~]# locate hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl
[root@BC ~]# touch hostnamectl
[root@BC ~]# updatedb
[root@BC ~]# locate hostnamectl
/root/hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl
[root@BC ~]# updatedb
[root@BC ~]# locate hostnamectl
/root/hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl
[root@BC ~]# locate -i hostnamectl
/opt/HOSTNAMEctl
/root/hostnamectl
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/zsh/site-functions/_hostnamectl
[root@BC ~]# locate -r hostname$
/etc/hostname
/etc/selinux/targeted/active/modules/100/hostname
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname
五、文件或者命令查找-which
1.which #查找命令的绝对路径
[root@BC ~]# which ping
/usr/bin/ping
#查找命令的绝对路径时,是通过PATH环境变量中的路径进行查找
[root@BC ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#不使用which的别名进行查找命令的绝对路径
[root@BC ~]# \which cp
/usr/bin/cp
[root@BC ~]# rpm -qf `which ping`
iputils-20160308-10.el7.x86_64
[root@BC ~]# rpm -qf /usr/bin/ping
iputils-20160308-10.el7.x86_64
六、文件或者命令查找-whereis
1.whereis #查找系统二进制程序、man帮助文件、源代码文件 查找不到自己创建的文件
选项:
-b #只查找二进制程序文件
-m #查找man帮助文件
-s #查找源代码文件
[root@BC ~]# whereis ping
ping: /usr/bin/ping /usr/share/man/man8/ping.8.gz
[root@BC ~]# whereis -b ping
ping: /usr/bin/ping
[root@BC ~]# whereis -m ping
ping: /usr/share/man/man8/ping.8.gz
七、文件或者命令查找-type
1. type命令 #显示指定命令的类型 判断你的命令是内部命令还是外部命令
选项:
-a #显示内置命令的绝对路径
-p #只显示命令的绝对路径
help命令可以显示系统中所有的内置命令
[root@sh-BC ~]# type cd #cd是一个内置命令
cd is a shell builtin
[root@sh-BC ~]# type -a cd #查看内部命令的路径
cd is a shell builtin
cd is /usr/bin/cd
[root@sh-BC ~]# type ip #外部命令是不需要加-a的
ip is /usr/sbin/ip
#查看系统中的内置命令
[root@sh-BC ~]# help
#只显示命令的绝对路径
[root@sh-BC ~]# type -p ip
/usr/sbin/ip
[root@sh-BC ~]# type -p cd
[root@sh-BC ~]# type -pa cd #内置命令需要加-a
/usr/bin/cd
八、文件或者命令查找-find
1. find #文件查找命令 指定路径查找 根据名称 大小 权限 时间等查找
选项:
-type #根据文件类型进行查找
f #普通文件
d #目录
l #软连接文件
s #socket文件 套接字文件
p #管道文件
-name #根据名称进行查找
-iname #查找的时候忽略大小写
* #特殊符号 通配符 不是正则 所有的意思
命令 目录 类型 普通文件 根据名称 叫什么名字
[root@sh-BC ~]# find /etc -type f -name "hostname" #精确查找
/etc/hostname
[root@sh-BC ~]# find /etc -type f -name "hostname*"
/etc/hostname
[root@sh-BC ~]# find /etc -type f -name "*hostname*"
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/hostname
#全局查找 * 所有的意思
[root@sh-BC ~]# find / -type f -name "*hostname*"
/proc/sys/kernel/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/hostname
/root/hostname{html.php}
/root/hostname.html
/root/hostname.php
/root/hostname
/usr/bin/hostname
/usr/bin/hostnamectl
#查找以hostname为结尾的文件
[root@sh-BC ~]# find / -type f -name "*hostname"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname
#以hostname为开头的文件
[root@sh-BC ~]# find / -type f -name "hostname*"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname{html.php}
/root/hostname.html
/root/hostname.php
/root/hostname
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/lib64/gettext/hostname
/usr/share/man/man1/hostname.1.gz
/usr/share/man/man1/hostnamectl.1.gz
#精确查找,名称只能为hostname
[root@sh-BC ~]# find / -type f -name "hostname"
/proc/sys/kernel/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname
#查找名称为hostname的目录
[root@sh-BC ~]# find / -type d -name "hostname"
/etc/selinux/targeted/active/modules/100/hostname
[root@sh-BC ~]# ll -d /etc/selinux/targeted/active/modules/100/hostname
drwx------. 2 root root 44 Jun 9 19:57 /etc/selinux/targeted/active/modules/100/hostname
[root@sh-BC ~]#
#查找名称的时候忽略大小写
[root@sh-BC ~]# find / -type d -iname "hostname"
/etc/selinux/targeted/active/modules/100/hostname
/usr/lib64/perl5/auto/Sys/Hostname
#根据目录的层级查找
[root@sh-BC ~]# find / -maxdepth 2 -type d -name "hostname"
/root/hostname
[root@sh-BC ~]#
九、文件上传或者下载命令-rz
1.rz #将本地的文件上传到Linux操作系统
#不能上传目录,需要将目录打成一个压缩包进行上传 只能上传 4G以下的文件
[root@BC ~]# yum install lrzsz -y
选项:
-E #当上传的文件已经存在时,系统会进行重命名 会在原来的文件名称后面加上.数字 从0开始
#执行命令,会跳出一个Windows界面的窗口,选择你要上传的文件
[root@BC ~]# rz
[root@BC ~]# ll
total 16
-rw-r--r--. 1 root root 13140 Jul 7 12:23 day03.md
[root@BC ~]# rz -E
[root@BC ~]# ll
total 32
-rw-r--r--. 1 root root 13140 Jul 7 12:23 day03.md
-rw-r--r--. 1 root root 13140 Jul 7 12:23 day03.md.0
2. sz #下载命令
[root@sh-BC ~]# sz /etc/passwd #选择你要下载的文件
#联网下载
十、文件上传或者下载命令-wget
[root@BC ~]# yum install -y wget
#联网下载软件包
选项:
-O #指定下载的路径和名称
-q #静默输出
--limit-rate=10k #限制下载的速率 k ===KB m == MB
[root@BC ~]# wget http://www.baidu.com
--2020-07-10 11:57:50-- http://www.baidu.com/
Resolving www.baidu.com (www.baidu.com)... 112.80.248.75, 112.80.248.76
Connecting to www.baidu.com (www.baidu.com)|112.80.248.75|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2381 (2.3K) [text/html]
Saving to: ‘index.html’
100%[===============================================================================>] 2,381 --.-K/s in 0.008s
2020-07-10 11:57:51 (290 KB/s) - ‘index.html’ saved [2381/2381]
[root@BC ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
--2020-07-10 12:00:16-- http://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 95.211.80.227, 62.210.92.35, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|95.211.80.227|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: ‘nginx-1.18.0.tar.gz’
100%[===============================================================================>] 1,039,530 282KB/s in 3.6s
2020-07-10 12:00:20 (282 KB/s) - ‘nginx-1.18.0.tar.gz’ saved [1039530/1039530]
[root@BC ~]# ll
total 1020
-rw-r--r--. 1 root root 2381 Jul 10 11:57 index.html
-rw-r--r--. 1 root root 1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
[root@BC ~]# wget -O /opt/nginx.tar.gz http://nginx.org/download/nginx-1.18.0.tar.gz
--2020-07-10 12:01:41-- http://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|62.210.92.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: ‘/opt/nginx.tar.gz’
100%[===============================================================================>] 1,039,530 272KB/s in 3.7s
2020-07-10 12:01:46 (272 KB/s) - ‘/opt/nginx.tar.gz’ saved [1039530/1039530]
[root@BC ~]# ll /opt/
total 1016
-rw-r--r--. 1 root root 0 Jul 10 10:32 hostname
-rw-r--r--. 1 root root 0 Jul 10 10:32 hostnamectl
drwxr-xr-x. 2 root root 6 Jul 10 10:39 HOSTNAMECTL
-rw-r--r--. 1 root root 1039530 Apr 21 22:33 nginx.tar.gz
[root@BC ~]# wget -q http://nginx.org/download/nginx-1.19.1.tar.gz
[root@BC ~]# ll
total 2100
-rw-r--r--. 1 root root 41240 Mar 23 00:20 032220_1620_Zabbix1.png
-rw-r--r--. 1 root root 9810 Jul 8 00:06 download.html
-rw-r--r--. 1 root root 2381 Jul 10 11:57 index.html
-rw-r--r--. 1 root root 1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
-rw-r--r--. 1 root root 1047223 Jul 7 23:59 nginx-1.19.1.tar.gz
[root@BC ~]# wget --limit-rate=10k http://nginx.org/download/nginx-1.18.0.tar.gz ^C
[root@BC ~]# rm -rf ./*
[root@BC ~]# wget --limit-rate=10k http://nginx.org/download/nginx-1.18.0.tar.gz
--2020-07-10 12:11:13-- http://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|62.210.92.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: ‘nginx-1.18.0.tar.gz’
32% [========================> ] 335,872 10.0KB/s eta 70s
十一、文件上传或者下载命令-curl
1.curl #通过url规则进行文件传输工具
#测试网站使用的命令
选项:
-o #将访问的数据内容写入到指定的文件中
-s #静默输出
[root@BC ~]# curl -o ./baidu.html www.baidu.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2381 100 2381 0 0 311 0 0:00:07 0:00:07 --:--:-- 657
[root@BC ~]# ll
total 1356
-rw-r--r--. 1 root root 2381 Jul 10 12:15 baidu.html
[root@BC ~]# curl -s -o ./nginx.tar.gz http://nginx.org/download/nginx-1.18.0.tar.gz
2020年07月13日上午(day07)
一、文件字符串处理命令-sort
1.sort #排序 将不相同的行进行排序在一起 默认是根据第一列进行排序 默认是以空白字符为分割符
#默认以字母进行排序
选项:
-k #指定哪一列为分隔符
-n #以数值大小的方式进行排序
-r #倒叙排序
-t #指定分割符
cat>sort.txt<<EOF
b 5
c 3
a 11
f 2
d 9
EOF
[root@BC ~]# cat sort.txt
b 5
c 3
a 11
f 2
d 9
[root@BC ~]# sort sort.txt
a 11
b 5
c 3
d 9
f 2
[root@BC ~]# sort -k2 sort.txt
a 11
f 2
c 3
b 5
d 9
[root@BC ~]# sort -nk2 sort.txt
f 2
c 3
b 5
d 9
a 11
[root@BC ~]# sort -rnk2 sort.txt
a 11
d 9
b 5
c 3
f 2
[root@BC ~]# cp /etc/passwd ./
[root@BC ~]# cat 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# sort -t ":" -nk3 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
cat>file.txt<<EOF
123
abc
123
edf
456
123
abc
EOF
[root@BC ~]# cat file.txt
123
abc
123
edf
456
123
abc
[root@BC ~]# sort file.txt
123
123
123
456
abc
abc
edf
二、文件字符串处理命令-uniq
1.uniq #去重 去除重复的行 只能去除相同相邻的行 统计 将重复的行的次数统计出来 跟sort结合使用
| #管道 将前面命令的执行结果交给后面的命令继续执行 操作的是数据
选项:
-c #统计重复的行的次数
[root@BC ~]# sort file.txt
123
123
123
456
abc
abc
edf
[root@BC ~]# sort file.txt | uniq
123
456
abc
edf
[root@BC ~]# sort file.txt | uniq -c
3 123
1 456
2 abc
1 edf
[root@BC ~]# sort file.txt | uniq -c | sort
1 456
1 edf
2 abc
3 123
[root@BC ~]# sort file.txt | uniq -c | sort -n
1 456
1 edf
2 abc
3 123
[root@BC ~]# sort file.txt | uniq -c | sort -rn
3 123
2 abc
1 edf
1 456
三、文件字符串处理命令-cut
1.cut #取列 awk命令的小弟 默认的分隔符为tab键
选项:
-d #指定分隔符
-f #取出指定的列
-c #取出指定的字符 按照行进行处理的
[root@BC ~]# echo "root:x:0:0:root:/root:/bin/bash" >test.txt
[root@BC ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
#取出第七列
[root@BC ~]# cut -d ":" -f7 test.txt
/bin/bash
#取出第一列和第七列
[root@BC ~]# cut -d ":" -f1,7 test.txt
root:/bin/bash
#取出第五列到第七列
[root@BC ~]# cut -d ":" -f5-7 test.txt
root:/root:/bin/bash
[root@BC ~]# cut -d ":" -f7 passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
[root@BC ~]# cut -d ":" -f7 passwd | sort
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/shutdown
[root@BC ~]# cut -d ":" -f7 passwd | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@BC ~]# cut -d ":" -f7 passwd | sort | uniq -c
1 /bin/bash
1 /bin/sync
1 /sbin/halt
14 /sbin/nologin
1 /sbin/shutdown
[root@BC ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -n
1 /bin/bash
1 /bin/sync
1 /sbin/halt
1 /sbin/shutdown
14 /sbin/nologin
[root@BC ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -rn
14 /sbin/nologin
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
1 /bin/bash
[root@BC ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
[root@BC ~]# cut -c 6 test.txt
x
[root@BC ~]# cut -c 6 passwd
x
:
n
:
4
x
o
x
x
t
#取出不同的字符
[root@BC ~]# cut -c 6,8 test.txt
x0
#取出连续的字符
[root@BC ~]# cut -c 1-4 test.txt
root
#取出系统eth0的IP地址
[root@BC ~]# yum install -y net-tools
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 1634 bytes 464970 (454.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1033 bytes 114568 (111.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | head -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | head -2 | tail -1
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | head -2 | tail -1 | cut -d " " -f10
10.0.0.100
[root@BC ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@BC ~]# ip a s eth0 | head -3
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | head -3 | tail -1 | cut -c 10-19
10.0.0.100
[root@BC ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6
10.0.0.100/24
[root@BC ~]# ip a s eth0 | head -3 | tail -1 | cut -d " " -f6 | cut -d "/" -f1
10.0.0.100
四、文件字符串处理命令-tr
1.tr #替换 删除 sed的小弟 只能单对单的替换
选项:
-d #删除指定的字符
语法:
tr old new < file
< #标准输入重定向
[root@BC ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
[root@BC ~]# tr "0" "9" < test.txt
root:x:9:9:root:/root:/bin/bash
[root@BC ~]# tr -d "o" < test.txt
rt:x:0:0:rt:/rt:/bin/bash
[root@BC ~]#
[root@BC ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@BC ~]# ip a s eth0 | head -3 | tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | head -3 | tail -1 | tr \'/\' \' \'
inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | head -3 | tail -1 | tr \'/\' \' \' | cut -d " " -f6
10.0.0.100
五、文件字符串处理命令-wc
1.wc #统计 行数 字节数 列数 行的长度
选项:
-l #统计行数
-w #统计列数,默认以空白字符为分隔符
-c #统计字节数
-L #统计文件中最长的行的长度
[root@BC ~]# wc passwd
18 26 798 passwd
[root@BC ~]# wc -l passwd
18 passwd
[root@BC ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@BC ~]# wc /etc/hosts
2 10 158 /etc/hosts
[root@BC ~]# wc -w /etc/hosts
10 /etc/hosts
[root@BC ~]# ll passwd
-rw-r--r--. 1 root root 798 Jul 13 16:49 passwd
[root@BC ~]# ll /etc/hosts
-rw-r--r--. 1 root root 158 Jun 7 2013 /etc/hosts
[root@BC ~]# wc -c /etc/hosts
158 /etc/hosts
[root@BC ~]# wc -c passwd
798 passwd
[root@BC ~]#
[root@BC ~]# wc -L passwd
68 passwd
[root@BC ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@BC ~]# wc -L /etc/hosts
78 /etc/hosts
[root@BC ~]# name=ewuighrtuighwiorteugh
[root@BC ~]# echo $name
ewuighrtuighwiorteugh
[root@BC ~]# echo $name | wc -L
21
六、Linux三剑客之老三-grep
1.grep #过滤 给过滤出来的内容加上颜色 按照行进行处理的
[root@BC ~]# alias
alias cp=\'cp -i\'
alias egrep=\'egrep --color=auto\'
alias fgrep=\'fgrep --color=auto\'
alias grep=\'grep --color=auto\'
alias l.=\'ls -d .* --color=auto\'
alias ll=\'ls -l --color=auto\'
alias ls=\'ls --color=auto\'
alias mv=\'mv -i\'
alias rm=\'rm -i\'
#选项:
-n #显示出过滤出来的所在文件的行号
-v #排除,取反
-c #统计过滤出来的内容的总行数
-i #过滤的时候忽略大小写
-o #只显示你要过滤的内容
-w #精确匹配 只过滤你要过滤的单词,而不是包含这个单词的字符串
-r #递归过滤 针对目录进行操作
-A #显示出你要过滤的内容及向下多少行的内容
-B #显示出你要过滤的内容及向上多少行的内容
-C #显示出你要过滤的内容向上向下各多少行
^ #以什么开头
$ #以什么为结尾
| # 或者 扩展正则
-E #支持扩展正则 ==== egrep
. #任意一个字符 排除换行符
* #前面的字符出现0次或者0次以上
.* #所有
[root@BC ~]# grep \'root\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# grep -n \'root\' passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# grep -v \'root\' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# grep \'root\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# grep -c \'root\' passwd
2
[root@BC ~]# echo "ROOT" >> passwd
[root@BC ~]# grep "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# grep -i "root" passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT
[root@BC ~]# grep -o \'root\' passwd
root
root
root
root
[root@BC ~]# echo "roottttt" >>passwd
[root@BC ~]# grep \'root\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roottttt
[root@BC ~]# grep -w \'root\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 3778 bytes 648285 (633.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2329 bytes 260396 (254.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | grep inet
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
[root@BC ~]# ifconfig eth0 | grep -w inet
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]#
#针对一个目录进行操作
[root@BC ~]# grep -r \'root\' ./
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roottttt
./test.txt:root:x:0:0:root:/root:/bin/bash
./data/test.txt:root
./test/test.txt:root
./backup/test.txt:root
[root@BC ~]# grep -R \'root\' ./
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roottttt
./test.txt:root:x:0:0:root:/root:/bin/bash
./data/test.txt:root
./test/test.txt:root
./backup/test.txt:root
[root@BC ~]# grep -A 4 \'sync\' passwd
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
[root@BC ~]# grep -B 4 \'sync\' passwd
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
[root@BC ~]# grep -C 4 \'sync\' passwd
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
[root@BC ~]# grep \'root\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roottttt
[root@BC ~]# grep \'^root\' passwd
root:x:0:0:root:/root:/bin/bash
roottttt
[root@BC ~]# grep \'t$\' passwd
halt:x:7:0:halt:/sbin:/sbin/halt
roottttt
[root@BC ~]# grep \'adm|mail\' passwd
[root@BC ~]# grep -E \'adm|mail\' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[root@BC ~]# egrep \'adm|mail\' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#取出文件中的第5行到第15行
[root@BC ~]# head -15 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@BC ~]# head -15 passwd | tail -11
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@BC ~]# grep \'r*\' 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
roottttt
[root@BC ~]# grep -n \'.*\' passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19:ROOT
20:roottttt
[root@BC ~]#
[root@BC ~]# grep -n \'.*\' passwd | grep \'^5\'
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@BC ~]# grep -n \'.*\' passwd | grep -w \'^5\'
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@BC ~]# grep -n \'.*\' passwd | grep -wA 10 \'^5\'
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
[root@BC ~]#
[root@BC ~]# grep -n \'.*\' passwd | grep -Ew \'^8|^10\'
8:halt:x:7:0:halt:/sbin:/sbin/halt
10:operator:x:11:0:operator:/root:/sbin/nologin
七、总结
1. sort #排序 将相同的行排序在一起 指定某一列进行排序 默认以第一列进行排序
选项:
-t #指定分隔符 默认分隔符为空白字符
-k #指定以哪一列进行排序
-n #以数值大小进行排序
-r #倒叙排序
2. uniq #去重 统计 把相邻相同的行进行去重 统计重复的次数
选项:
-c #统计重复的次数
3.cut #取列
选项:
-d #指定分隔符 ,m默认分隔符为tab键
-f #取出指定的列,取出不连续的列使用逗号分割,取出连续的列使用短横杠进行分割
-c #取出你指定的字符 取出不连续的列使用逗号分割,取出连续的列使用短横杠进行分割 取出的每一行
4. tr #替换和删除的命令 只能单对单的进行替换
选项:
-d #删除指定的字符
语法:
tr 旧的字符 新的字符 < 文件名
5. wc #统计
选项:
-l #统计行数
-w #统计列数 默认以空白字符为分隔符
-c #统计字节的大小
-L #统计文件中最长的行的长度 字符的数量
6. grep #过滤 给过滤出来的内容加上颜色
选项:
-n #给过滤出来的内容显示所在文件的行号
-v #排除,取反
-i #过滤的时候,忽略大小写
-c #统计过滤出来的内容的行数
-o #只显示过滤出来的内容
-w #精确匹配,之过滤你要过滤的字符串,而不是包含这个字符串的字符串
-r #递归过滤 针对目录进行操作
-E #支持扩展正则使用
-A #显示过滤出来的内容及向下多少行
-B #显示过滤出来的内容及向上多少行
-C #显示过滤出来的内容向上向下各多少行
^ #以什么为开头
$ #以什么为结尾
| #或者 扩展正则
. #除换行符以外的任意一个字符
* #匹配前面的字符出现0次或者0次以上
.* #所有 包括空行
2020年07月14日上午(day08)
一、Linux三剑客之老二-sed
1.sed #擅长增删改查 替换
选项:
-n #取消默认输出
-r #支持扩展正则使用
-i #改变文件内容
-e #允许多项编辑
内部指令:
p #print 打印
d # 删除 排除
a #追加 将内容追加指定内容的后面
i #插入 将内容插入到指定的内容的前面
s #替换
g #全局
i #忽略大小写
查 过滤
[root@BC ~]# sed -n \'/root/p\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roottttt
[root@BC ~]# sed -n \'/^root/p\' passwd
root:x:0:0:root:/root:/bin/bash
roottttt
[root@BC ~]# sed -nr \'/root|sshd/p\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
roottttt
#打印不连续的内容
[root@BC ~]# sed -n \'/sync/p;/mail/p\' passwd
sync:x:5:0:sync:/sbin:/bin/sync
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#打印某个字符串到某个字符串的所有内容
[root@BC ~]# sed -n \'/sync/,/mail/p\' passwd
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
#打印单行
[root@BC ~]# sed -n \'1p\' passwd
root:x:0:0:root:/root:/bin/bash
#打印连续的行
[root@BC ~]# sed -n \'1,3p\' 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
#打印不连续的行
[root@BC ~]# sed -n \'1p;3p\' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@BC ~]# sed -n \'5,15p\' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
删 排除
#删除包含root字符串的行
[root@BC ~]# sed \'/root/d\' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
#删除不连续的字符串 删除多个字符串
[root@BC ~]# sed \'/root/d;/lp/d\' passwd
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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
#删除连续的字符串
[root@BC ~]# sed \'/adm/,/games/d\' 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
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
roottttt
#删除单行
[root@BC ~]# sed \'1d\' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
roottttt
#删除连续的行
[root@BC ~]# sed \'1,10d\' passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
roottttt
#删除不连续的行
[root@BC ~]# sed \'1d;10d\' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
roottttt
[root@BC ~]#
#删除第一行到最后一行 $ 表示结尾
[root@BC ~]# sed \'1,$d\' passwd
[root@BC ~]#
#真正改变了文件的内容
[root@BC ~]# sed -i \'1,10d\' passwd
[root@BC ~]# cat passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ROOT
roottttt
增 添加内容到文件中
a 追加
#将内容追加第五行的后面
[root@BC ~]# sed \'5aoldboy\' 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
oldboy
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#将内容追加到文件的底部
[root@BC ~]# sed \'$aoldboy\' 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
#追加多行内容到文件中 \n 换行符 \t tab键
[root@BC ~]# sed \'10aoldboy\noldgirl\' 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
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
oldboy
oldgirl
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# sed -i \'$aoldboy\' passwd
[root@BC ~]# tail -1 passwd
oldboy
#根据字符串进行追加内容
[root@BC ~]# sed \'/sshd/aoldboy\' 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oldboy
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
i 插入
#在第一行的前面插入内容
[root@BC ~]# sed \'1ioldboy\' passwd
oldboy
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
#在最后一行的前面插入内容
[root@BC ~]# sed \'$iold\' 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
old
oldboy
#插入多行内容
[root@BC ~]# sed \'1ioldboy\noldgirl\' passwd
oldboy
oldgirl
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
[root@BC ~]# sed \'/root/inew\' passwd
new
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
new
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
[root@BC ~]# sed \'/root/aold\' passwd | sed \'/sshd/illl\'
root:x:0:0:root:/root:/bin/bash
old
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
old
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
lll
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
[root@BC ~]# sed -e \'/root/aold\' -e \'/sshd/illl\' passwd
root:x:0:0:root:/root:/bin/bash
old
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
old
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
lll
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
改 替换
s 替换 g 全局 i 忽略大小写
#全局替换
[root@BC ~]# sed \'s#root#admin#g\' passwd
admin:x:0:0:admin:/admin:/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:/admin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
#针对某一行进行替换
[root@BC ~]# sed \'1s#root#admin#g\' passwd
admin:x:0:0:admin:/admin:/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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
#替换多行内容
[root@BC ~]# sed \'1,10s#root#admin#g\' passwd
admin:x:0:0:admin:/admin:/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:/admin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
#替换的时候,忽略大小写
[root@BC ~]# echo "ROOT" >>passwd
[root@BC ~]#
[root@BC ~]# cat 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
[root@BC ~]# sed \'s#root#admin#g\' passwd
admin:x:0:0:admin:/admin:/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:/admin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
[root@BC ~]# sed \'s#root#admin#gi\' passwd
admin:x:0:0:admin:/admin:/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:/admin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
admin
[root@BC ~]#
#替换第10行到最后一行的内容
[root@BC ~]# sed \'10,$s#root#admin#gi\' 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
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:/admin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
admin
#满足包含root字符串行,再进行替换操作
[root@BC ~]# sed \'/root/s#bin#oldboy#g\' passwd
root:x:0:0:root:/root:/oldboy/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:/soldboy/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#满足以root开头的行 再进行替换操作
[root@BC ~]# sed \'/^root/s#bin#oldboy#g\' passwd
root:x:0:0:root:/root:/oldboy/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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#在每个root后面加上一个abc
[root@BC ~]# sed \'s#root#rootabc#g\' passwd
rootabc:x:0:0:rootabc:/rootabc:/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:/rootabc:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#给文件的每一行前面加上注释 #
[root@BC ~]# sed \'s#^#\##g\' 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
#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
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#nobody:x:99:99:Nobody:/:/sbin/nologin
#systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
#dbus:x:81:81:System message bus:/:/sbin/nologin
#polkitd:x:999:998:User for polkitd:/:/sbin/nologin
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#oldboy
#ROOT
#把所有的#删除掉
[root@BC ~]# sed \'s#\###g\' 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#将某个字符串全部删除
[root@BC ~]# sed \'s#root##g\' passwd
:x:0:0::/:/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:/:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#排除空行 删除空行
[root@BC ~]# cp /etc/ssh/sshd_config ./
^ #以什么开头
$ #以什么为结尾
^$ #空行 排除有空格或者tab键的空行
[root@BC ~]# grep -v \'^$\' sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# If you want to change the port on a SELinux system,
[root@BC ~]# sed \'/^$/d\' sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
#后向引用 () 扩展正则
前期定义 后期调用 \1 \2 第一个括号里面的内容 用 \1 第二个括号就是\2
[root@BC ~]# sed -r \'8s#(.*)#\1 oldboy#g\' 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt oldboy
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#取IP地址
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 12703 bytes 1441173 (1.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8645 bytes 925660 (903.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | sed -n \'2p\'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | sed -n \'2p\' | sed -r \'s#(^.*et )(.*)( n.*$)#\2#g\'
10.0.0.100
[root@BC ~]# ifconfig eth0 | sed -n \'2p\' | sed -r \'s#(^.*et )(.*)( n.*$)#\1#g\'
inet
[root@BC ~]# ifconfig eth0 | sed -n \'2p\' | sed -r \'s#(^.*et )(.*)( n.*$)#\3#g\'
netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | sed -nr \'2s#(^.*et )(.*)( n.*$)#\2#gp\'
10.0.0.100
[root@BC ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@BC ~]# ip a s eth0 | sed -n \'3p\'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | sed -n \'3p\' | sed -r \'s#(^.*t )(.*)(/.*$)#\2#g\'
10.0.0.100
[root@BC ~]# ip a s eth0 | sed -nr \'3s#(^.*t )(.*)(/.*$)#\2#gp\'
10.0.0.100
#将passwd文件中的第一列与第七列的位置进行调换
[root@BC ~]# sed -nr \'s#(.*)(:x.*:)(.*)#\3\2\1#gp\' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
/sbin/nologin:x:12:100:games:/usr/games:games
/sbin/nologin:x:14:50:FTP User:/var/ftp:ftp
/sbin/nologin:x:99:99:Nobody:/:nobody
/sbin/nologin:x:192:192:systemd Network Management:/:systemd-network
/sbin/nologin:x:81:81:System message bus:/:dbus
/sbin/nologin:x:999:998:User for polkitd:/:polkitd
/sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
/sbin/nologin:x:89:89::/var/spool/postfix:postfix
#打印行号
[root@BC ~]# sed = passwd
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
二、Linux三剑客之老大-awk
1.awk # 擅长取列 计算 数组 函数 编程语言
内部命令 内部变量
NR #行号
$0 #完整的一行内容
$n # n 是数字 表示取出第几列 多列用逗号分割
-F #FS 分隔符的变量
NF #最后一列 为第几列
$NF #显示最后一列的内容
查 过滤
[root@BC ~]# awk \'/root/\' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# awk \'/root/;/adm/\' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# awk \'/root|adm/\' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# awk \'/adm/,/mail/\' passwd
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
[root@BC ~]# awk \'NR==1\' passwd
root:x:0:0:root:/root:/bin/bash
[root@BC ~]# awk \'NR==1,NR==3\' 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
[root@BC ~]# awk \'NR==1;NR==3\' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@BC ~]# awk \'NR>10\' passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@BC ~]# awk \'NR<10\' 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
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
[root@BC ~]# awk \'NR<=2\' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@BC ~]# awk \'NR>=15\' passwd
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
&& #并且
[root@BC ~]# awk \'NR>10 && NR<16\' passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
|| #或者
[root@BC ~]# awk \'NR<3 || NR>15\' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#打印整个文件内容
[root@BC ~]# awk \'{print $0}\' 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
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#给文件内容加上行号
[root@BC ~]# awk \'{print NR,$0}\' passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin
12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13 nobody:x:99:99:Nobody:/:/sbin/nologin
14 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15 dbus:x:81:81:System message bus:/:/sbin/nologin
16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#取反 排除
! 取反 排除
[root@BC ~]# awk \'!/sbin/\' passwd
root:x:0:0:root:/root:/bin/bash
[root@BC ~]# awk \'NR!=1\' passwd
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#排除了第5行到第15行
[root@BC ~]# awk \'NR<5 || NR >15\' 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
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
# 取列
[root@BC ~]# awk -F: \'{print $1}\' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
[root@BC ~]# awk -F: \'{print $1,$2}\' passwd
root x
bin x
daemon x
adm x
lp x
sync x
shutdown x
halt x
mail x
operator x
games x
ftp x
nobody x
systemd-network x
dbus x
polkitd x
sshd x
postfix x
[root@BC ~]# awk -F: \'{print $NF}\' passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
$(NF-1) 倒数第二列
[root@BC ~]# awk -F: \'{print $(NF-1)}\' passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
/sbin
/sbin
/sbin
/var/spool/mail
/root
/usr/games
/var/ftp
/
/
/
/
/var/empty/sshd
/var/spool/postfix
[root@BC ~]# awk -F \'[:]\' \'{print $1}\' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
#默认分隔符为 空白字符
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 15508 bytes 1698801 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10471 bytes 1145384 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | awk \'NR==2\'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | awk \'NR==2\' | awk \'{print $2}\'
10.0.0.100
[root@BC ~]# ifconfig eth0 | awk \'NR==2{print $2}\'
10.0.0.100
#指定多个分隔符
[root@BC ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@BC ~]# ip a s eth0 | awk \'NR==3\'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# ip a s eth0 | awk \'NR==3\' | awk -F \'[ /]\' \'{print $6}\'
10.0.0.100
[root@BC ~]# ip a s eth0 | awk \'NR==3\' | awk -F \'[ /]*\' \'{print $3}\'
10.0.0.100
[root@BC ~]# echo " // inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0" >ip.txt
[root@BC ~]# cat ip.txt
// inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@BC ~]# awk -F \'[ /]\' \'{print $11}\' ip.txt
10.0.0.100
[root@BC ~]# awk -F \'[ /]*\' \'{print $3}\' ip.txt
10.0.0.100
#指定分隔符 使用双引号引起来
[root@BC ~]# awk -F: \'{print $1":"$2}\' passwd
root:x
bin:x
daemon:x
adm:x
lp:x
sync:x
shutdown:x
halt:x
mail:x
operator:x
games:x
ftp:x
nobody:x
systemd-network:x
dbus:x
polkitd:x
sshd:x
postfix:x
[root@BC ~]# awk -F: \'{print $1"脱产10期"$2}\' passwd
root脱产10期x
bin脱产10期x
daemon脱产10期x
adm脱产10期x
lp脱产10期x
sync脱产10期x
shutdown脱产10期x
halt脱产10期x
mail脱产10期x
operator脱产10期x
games脱产10期x
ftp脱产10期x
nobody脱产10期x
systemd-network脱产10期x
dbus脱产10期x
polkitd脱产10期x
sshd脱产10期x
postfix脱产10期x
[root@BC ~]# awk -F: \'{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}\' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
/sbin/nologin:x:12:100:games:/usr/games:games
/sbin/nologin:x:14:50:FTP User:/var/ftp:ftp
/sbin/nologin:x:99:99:Nobody:/:nobody
/sbin/nologin:x:192:192:systemd Network Management:/:systemd-network
/sbin/nologin:x:81:81:System message bus:/:dbus
/sbin/nologin:x:999:998:User for polkitd:/:polkitd
/sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
/sbin/nologin:x:89:89::/var/spool/postfix:postfix
2.排除正常空行
[root@BC ~]#grep -v \'^$\' sshd_config
[root@BC ~]#sed \'/^$/d\' sshd_config
[root@BC ~]#awk \'!/^$/\' sshd_config
2020年07月15日上午(day09)
一、回顾三剑客
1. grep #过滤 给过滤出来的内容加上颜色
选项:
-n #给过滤出来的内容加上此行所在文件的行号
-i #忽略大小写
-c #统计的是行数 包含过滤字符串的行数
-v #排除 删除 取反
-o #只显示过滤出来的内容
-w #精确匹配 只匹配你要过滤的字符串,而不是过滤包含此字符串的字符串
-r #递归过滤 过滤多个文件 针对目录操作
-A #匹配过滤出来的内容向下多少行 后面加正整数
-B #匹配过滤出来的内容向上多少行
-C #匹配过滤出来的内容各向上向下多少行
-E #支持扩展正则使用 === egrep
^ #以什么开头
$ #以什么为结尾
^$ #空行 排除存在空格或者tab键的空行
. #匹配除换行符以外的任意一个字符
* #匹配前面的字符出现0次或者0次以上
.* #所有
| #或者 扩展正则
2. sed #擅长替换 增删改查 后向引用
选项:
-n #取消默认输出
-r #支持扩展正则
-i #真正的改变文件内容
-e #允许多项编辑 了解
内部命令:
p #打印
d #删除 排除 取反
s #替换
g #全局
i #忽略大小写
a #追加
i #插入
\n #换行符
\t #tab键
= #显示行号
后向引用:
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 19648 bytes 2074525 (1.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13896 bytes 1420434 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | sed -n \'3p\' | sed -r \'s#(.*6 )(.*)( pr.*)#\2#g\'
fe80::3310:9d15:9ee4:43e8
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 19930 bytes 2100423 (2.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14078 bytes 1441164 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | sed -n \'2p\'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | sed -n \'2p\' | sed -r \'s#(^.*et )(.*)( n.*$)#\2#g\'
10.0.0.100
[root@BC ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@BC ~]# ip a s eth0 | sed -n \'3p\'|sed -r \'s#(^.*t )(.*)(/.*)#\2#g\'
10.0.0.100
灵活 思路 方法
[root@BC ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67125348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:net_conf_t:s0
Access: 2020-07-14 17:30:04.678582732 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-06 02:13:36.028996182 +0800
Birth: -
[root@BC ~]# stat /etc/hosts | sed -nr \'4s#.*: \((.*)/.*#\1#gp\'
0
[root@BC ~]# stat /etc/hosts | sed -nr \'4s#.*: \((.*)/-r.*#\1#gp\'
0644
[root@BC ~]# stat /etc/hosts | sed -nr \'4s#.*\((.*)/-r.*#\1#gp\'
0644
多种方法 多种选择
3. awk #擅长取列
选项:
-F #指定分隔符 默认的为空白字符为分隔符 FS
-v #指定内部变量
! #取反 排除
内部变量:
FS #指定输入分隔符
OFS #指定输出分隔符
NR #行号
NF #最后一列
$NF #显示最后一列
$0 #完整的一行内容
$n #n数字 指定取出的某一列
了解
1. 排除空行 存在空格和tab键的空行
[root@BC ~]# cat sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::
[root@BC ~]# grep -v \'^$\' sshd_config
[root@BC ~]# sed \'/^$/d\' sshd_config
[root@BC ~]# awk \'!/^$/\' sshd_config
# -P 支持tab键
[root@BC ~]# grep -Pv \'^[ \t]*$\' sshd_config
[root@BC ~]# sed \'/^[ \t]*$/d\' sshd_config
[root@BC ~]# awk \'!/^[ \t]*$/\' sshd_config
# \s 空白字符
[root@BC ~]# grep -v \'^\s*$\' sshd_config
[root@BC ~]# sed \'/^\s*$/d\' sshd_config
[root@BC ~]# awk \'!/^\s*$/\' sshd_config
2. 排除空行和注释行 #号开头的
[root@BC ~]# grep -Ev \'^$|^#\' sshd_config
[root@BC ~]# grep -Ev \'^\s*$|^#\' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@BC ~]# sed -r \'/^\s*$|^#/d\' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@BC ~]# sed -r \'/^[ \t]*$|^#/d\' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@BC ~]# awk \'!/^[ \t]*$|^#/\' sshd_config
Port 22
ListenAddress 0.0.0.0
[root@BC ~]# awk \'!/^\s*$|^#/\' sshd_config
Port 22
ListenAddress 0.0.0.0
3. 将/etc/passwd文件中的第一列和第七列位置进行调换 awk 等值替换
[root@BC ~]# awk -F \'[:]\' \'{a=$1;$1=$NF;$NF=a;print}\' passwd | tr \' \' \':\'
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
[root@BC ~]# awk -F \'[:]\' -vOFS=":" \'{a=$1;$1=$NF;$NF=a;print}\' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
二、文件的类型及其属性
1.举例引用
[root@BC ~]# ls -li
total 24
134317708 drwxr-xr-x. 2 root root 22 Jul 13 19:06 backup
16346 drwxr-xr-x. 2 root root 22 Jul 13 19:06 data
134317704 -rw-r--r--. 1 root root 28 Jul 13 16:53 file.txt
134317705 -rw-r--r--. 1 root root 75 Jul 14 20:17 ip.txt
134317678 -rw-r--r--. 1 root root 798 Jul 14 19:13 passwd
第一列: 134317708 #inode号 索引节点
第二列: -rw-r--r--. #文件的类型和权限
第三列: 2 #文件的硬链接的数量
第四列: root #文件的所有者 属主
第五列: root #文件的所属组 属组
第六列: 798 #文件的大小
第七八九列 Jul 13 19:06 #文件创建时间或最后的修改时间
第十列: passwd #文件的名称 不属于文件的属性
2.du #查看目录的大小
-s #显示大小
-h #以B MB GB的格式显示大小
[root@BC ~]# du -sh /etc
31M /etc
3.文件类型
drwxr-xr-x.
-rw-r--r--.
lrwxrwxrwx
crw-rw-rw-
srw-rw-rw-
prw-------.
第一个字符为文件的类型信息
第二个到第10个 文件权限
4.文件类型的种类:
- #普通文件 二进制 日志 文本 脚本
d #目录
l #软链接文件
b #块设备 磁盘 硬盘 磁盘分区 镜像 光盘
c #字符设备
s #套接字文件 socket文件
p #管道文件
5.stat #详细显示文件的属性信息
[root@BC ~]# stat passwd
File: ‘passwd’
Size: 798 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 134317678 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-07-14 19:13:16.904691535 +0800
Modify: 2020-07-14 19:13:12.935691465 +0800
Change: 2020-07-14 19:13:12.935691465 +0800
Birth: -
# -c 指定格式输出 %a 以8进制显示文件的权限
[root@BC ~]# stat -c %a passwd
644
6.file #详细显示文件的信息
[root@BC ~]# file passwd
passwd: ASCII text
[root@BC ~]# file /opt/
/opt/: directory
[root@BC ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
[root@BC ~]# ll /bin/ls
-rwxr-xr-x. 1 root root 117680 Oct 31 2018 /bin/ls
[root@BC ~]# file /etc/grub2.cfg
/etc/grub2.cfg: symbolic link to `../boot/grub2/grub.cfg\'
[root@BC ~]# file /dev/log
/dev/log: socket
[root@BC ~]# file /run/systemd/initctl/fifo
/run/systemd/initctl/fifo: fifo (named pipe)
7.后缀名:
Linux中对后缀没有任何的要求, 系统存在一些带后缀名的文件,只是为了方便程序人员的使用
Linux中是区分大小写的
.txt
.log
.xml
.conf
.cnf
.html
.php
.sh
.py
.mp3
.jpg
.png
.tar
.tar.gz
.gz
.zip
三、链接文件
1.文件的组成:
元数据: metadata 属性信息 大小 时间 属主 属组 权限 inode 索引节点
用户数据: user data 数据块 硬盘存放真实数据的地方 block
文件分为硬链接文件 hard link 和软链接文件或者符号链接 symbolic link == soft link
2.软链接文件:
当我们访问这个软链接文件时,其实就是在访问源文件的本身。就是相当于Windows上面的快捷方式 里面存放的是文件的路径 及可以执行这个文件
1)软链接文件和源文件属于不同的文件 inode是不一样 那么当我们对一个文件创建多个软链接时,其实就是多个inode指向同一个block。
2)那么当我们删除软链接文件时,其实只是删除了一个inode的指向,并不会对源文件造成影响。
3)如果我们删除的是源文件,那么该文件的所有软链接文件都会失效。
[root@BC ~]# ll -i /etc/sysconfig/selinux
134477906 lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /etc/sysconfig/selinux -> ../selinux/config
[root@BC ~]# ll -i /etc/selinux/config
223842 -rw-r--r--. 1 root root 543 Jul 6 02:14 /etc/selinux/config
3.应用场景:
1)软件升级
2) 企业的代码发布 Jenkins 秒级发布
3)不方便移动的目录
4)数据回滚
5)程序读取
4.ln #创建软链接
选项:
-s #创建软链接
&& #前面的命令执行成功 才会执行后面的命令
|| #前面的命令执行失败,才会执行后面的命令
用法:
ln -s 源文件 链接文件
[root@BC ~]# ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /root/eth0
[root@BC ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
[root@BC ~]# mkdir nginx-1.17.0
[root@BC ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
[root@BC ~]# mkdir nginx-1.18.0
[root@BC ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@BC ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@BC ~]# ln -s nginx-1.17.0/ nginx
[root@BC ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
lrwxrwxrwx. 1 root root 13 Jul 15 20:04 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@BC ~]# rm -f nginx && ln -s nginx-1.18.0/ nginx #版本升级
[root@BC ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
lrwxrwxrwx. 1 root root 13 Jul 15 20:04 nginx -> nginx-1.18.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@BC ~]# rm -f nginx && ln -s nginx-1.17.0/ nginx #版本回退
[root@BC ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
lrwxrwxrwx. 1 root root 13 Jul 15 20:07 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
5.软链接的特点:
概念
创建
跟源文件是不同类型的文件,inode是不一样的
软链接可以对目录创建 也可以跨文件系统
rm -f
删除软链接文件对源文件没有任何影响
删除源文件,软链接存在,但是会失效 出现 红底白字闪烁状
6.硬链接
概念: 多个文件的数据指向同一个数据块,多个不同的入口,inode是相同的,这样的文件互为硬链接
防止文件被误删除
7.创建硬链接
ln命令直接创建 只能对文件创建 不能对目录创建
用法:
ln 源文件 硬链接文件
[root@BC ~]# cp /etc/hosts ./
[root@BC ~]# ll
total 4
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
-rw-r--r--. 1 root root 158 Jul 15 20:18 hosts
lrwxrwxrwx. 1 root root 13 Jul 15 20:07 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@BC ~]# ln hosts hosts_hard
[root@BC ~]# ll
total 8
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
-rw-r--r--. 2 root root 158 Jul 15 20:18 hosts
-rw-r--r--. 2 root root 158 Jul 15 20:18 hosts_hard
lrwxrwxrwx. 1 root root 13 Jul 15 20:07 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@BC ~]# ll -i
total 8
134317677 lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
134317704 -rw-r--r--. 2 root root 158 Jul 15 20:18 hosts
134317704 -rw-r--r--. 2 root root 158 Jul 15 20:18 hosts_hard
[root@BC ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@BC ~]# cat hosts_hard
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@BC ~]# echo "123" >>hosts_hard
[root@BC ~]# cat hosts_hard
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
[root@BC ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
删除源文件或者硬链接文件都没有什么影响 只有硬链接为0时,这个文件才会被真正的删除
8.企业面试题:软链接和硬链接的区别?
1) 从概念
硬链接文件与源文件inode相同,软链接文件与源文件inode不同
2)从创建方式
创建命令不同:
软链接:ln -s
硬链接:ln
3)从创建对象
目录不能创建硬链接,并且硬链接不可以跨越系统的分区,软链接可以
4)从删除
删除软链接文件,对源文件无影响,但是删除软链接源文件对软链接文件有影响
删除硬链接文件,对源文件也无影响,并且删除源文件,对硬链接文件也无影响
2020年07月16日上午(day10)
一、文件的执行过程
1. 系统会判断你输入的命令是否绝对路径,是直接执行
2. 如果是相对路径,系统会判断命令是否存在别名,如果存在,执行别名
3. 如果命令不存在别名,系统会判断输入的命令是否内置命令,如果是,直接执行
4. 如果不是内置命令,系统会查询内存的hash缓存表,如果命令存在缓存,则按照缓存执行
5. 如果hash缓存表中没有命令的缓存,系统会从环境变量PATH中的命令路径查询命令的路径进行执行
6. 如果PATH变量没有命令的路径,就会报错 command not found
#查询命令是否为内置命令
[root@BC ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
[root@BC ~]# type -a ls
ls is aliased to `ls --color=auto\'
ls is /usr/bin/ls
#查看系统中所有的内置命令
[root@BC ~]# help
#查看当前窗口下所有外部命令的缓存表
[root@BC ~]# hash
hits command
53 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/tail
6 /usr/bin/file
[root@BC ~]# /usr/bin/wc /etc/hosts
2 10 158 /etc/hosts
[root@BC ~]# ll /usr/bin/wc
-rwxr-xr-x. 1 root root 41688 Oct 31 2018 /usr/bin/wc
[root@BC ~]# mv /usr/bin/wc /usr/bin/gl
[root@BC ~]# wc /etc/hosts
-bash: /usr/bin/wc: No such file or directory
[root@BC ~]# gl /etc/hosts
2 10 158 /etc/hosts
[root@BC ~]# hash
hits command
53 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/tail
1 /usr/bin/gl
#从缓存中删除一个命令的缓存
[root@BC ~]# hash -d wc
[root@BC ~]# wc /etc/hosts
-bash: wc: command not found
[root@BC ~]# mv /usr/bin/gl /usr/bin/wc
[root@BC ~]# wc /etc/hosts
2 10 158 /etc/hosts
[root@BC ~]# mv /usr/bin/wc /usr/sbin/
[root@BC ~]# wc /etc/hosts
-bash: /usr/bin/wc: No such file or directory
[root@BC ~]# hash -d wc
[root@BC ~]# wc /etc/hosts
2 10 158 /etc/hosts
#清空hash缓存表中的所有缓存
[root@BC ~]# hash -r
[root@BC ~]# hash
hash: hash table empty
#里面存放的是系统中的命令的路径,每个路径用:号分割
[root@BC ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
二、vi/vim文本编辑器介绍
vi就是一个文本编辑器
为什么学习:
系统配置
编写脚本
vim就是vi的升级版 高级版
[root@BC ~]#
[root@BC ~]# yum install -y vim
区别:
vim有高亮显示 vi没有
视图模式 批量操作 vi没有vim的好
复制有格式的内容到文件中 使用vim格式会乱 vi不会
如何学习好vim
里面都是通过命令来执行
三种模式:
命令模式
打开文件,默认进入的就是命令模式,可以从命令模式到编辑模式或者底行模式
光标移动 复制 粘贴 删除 简单的替换 撤销
编辑模式
编辑模式需要从命令模式输入编辑模式的命令才能进入,进入编辑模式之后,左下角会出现 INSERT字样 就可以使用键盘输入内容,输入完成之后 按Esc键回到命令模式
修改 删除 添加
底行模式
底行模式需要从命令模式输入:或者/进入底行模式,如果要退出底行模式,按Esc键 回到命令模式
保存文件 退出 显示行号 移动行号 搜索文件内容 导入文件内容 导出文件内容
视图模式 扩展
批量添加
批量删除
可视块
可视行
三、命令模式
#光标移动
[root@BC ~]# cp /etc/services ./
G #光标移动行尾 当前文件的最后一行
gg #光标移动到第一行
1G #光标移动到第一行
10G #光标移动到第十行
10gg #光标移动到第十行
ngg #光标移动到指定的行
nG #光标移动到指定的行
^ #光标移动到当前行行首
$ #光标移动到当前行的行尾
h #向左 5h 向左移动5个字符
l #向右 5l
j #向下 5j
k #向上 5k
w #移动到下一个字符串的首字母 短跳 以空格或者特殊符号为分隔符
W #移动到下一个字符串的首字母 长跳 以空白字符为分隔符
e #移动到下一个字符串的尾字母 短跳 以空格或者特殊符号为分隔符
E #移动到下一个字符串的尾字母 长跳 以空白字符为分隔符
b #移动到上一个字符串的首字母 短跳 以空格或者特殊符号为分隔符
B #移动到上一个字符串的首字母 长跳 以空白字符为分隔符
ctrl键 + f #向下翻页
ctrl键 + b #向上翻页
ctrl键 + u #向上翻半页
ctrl键 + d #向下翻半页
#复制 粘贴
yy #复制当前行
nyy #复制多行 包含当前行
p #在当前行的下一行进行粘贴
P #在当前行的上一行进行粘贴
np #粘贴多次
nP #粘贴多次
#删除==剪切 粘贴
dd #删除当前行 剪切当前行
ndd #删除多行 包含当前行
dG #删除当前行到文件的结尾
delete #从前往后删除一个字符
x #从前往后删除一个字符
X #从后往前删除一个字符
de/dw #删除当前一组字符串 以特殊符号或者空白字符为分割
D #删除当前光标所在字符及当前行向后的所有的内容
#撤销 简单替换
u #撤销
ctrl键 + r #回滚你的撤销
r #在当前光标上面进行替换 没有进入编辑模式
R #连续替换
~ #把当前光标所在字符替换为大小写
>> #将当前行向后进行缩进
<< #将缩进取消
fi #将光标快速移动到当前行的第一个i字符 ; 跳转到下一个
* #高亮显示当前光标所在的字符串 向下跳转
# #向上跳转
#保存退出
ZZ #保存退出
四、编辑模式
# 编辑模式需要从命令模式进入
a #在当前光标后进入编辑模式
i #在当前光标前进入编辑模式
o #在当前光标下另起一行,进入编辑模式
A #在当前光标所在行的行尾进入编辑模式
I #在当前光标所在行的行首进入编辑模式
O #在当前光标所在行的上方另起一行,进入编辑模式
s #删除当前光标所在的字符,并进入编辑模式
S #删除当前行,并进入编辑模式
cc #删除当前行,并进入编辑模式
C #删除当前光标所在的字符及向后的所有内容,并进入编辑模式 针对当前行操作
ce #删除当前所在的字符,并进入编辑模式
cw #删除当前所在的字符,并进入编辑模式
五、底行模式(末行模式)
#只能从命令模式进入底行模式
#保存退出
:q #退出
:q! #强制退出
:w #保存
:wq #保存退出
:wq! #强制保存退出
:x #保存退出
#光标移动 移动的行 删除
:n #n 数字 跳转到指定的行
:1d #删除第一行
:1,10d #删除多行
#替换 跟sed一样
:%s#old#new#g #全局替换
:1s#admin#root#g #替换指定的行
:1,5s#bin#oldboy#g #替换多行
# 文件另存为
:w new1.txt #将文件的内容另存为一个新文件
:1,10w new2.txt #将文件的第一行到第十行内容另存为一个新文件
#导入其他文件内容进入这个文件
:$r /etc/hosts #导入/etc/hosts文件中的内容到此文件的结尾
:0r /etc/hosts #导入/etc/hosts文件中的内容到此文件的行首
#搜索
/root #搜索root的字符串
n #向下查找
N #向上查找
/root\c #搜索的时候,忽略大小写
:noh #取消高亮
六、视图模式
1.用于批量操作
2.可视块
#添加内容
光标先移动到你要操作的行的 首行或者尾行 的具体某个字符
ctrl键 + v #进入可视块模式
通过移动光标将要操作的行选中
按shift键 + i键 进入insert模式
输入你要添加的内容
输入完成之后 按Esc就可以
#删除
光标先移动到要删除的行的首行或者尾行 到达具体某个字符
ctrl键 + v #进入可视块模式
通过光标选中你要删除的内容
按d删除
3.可视行
#添加 复制 粘贴
光标移动到要复制的行的首行或者尾行
按shift键 + v #进入可视行模式
选中你要复制的行 按y复制
光标移动到你要粘贴的位置 输入 p粘贴
#删除
光标移动到要删除的行的首行或者尾行
按shift键 + v #进入可视行模式
选中你要删除的行
按d删除
七、vim执行过程
1. vim打开一个文件进行编辑
2. 系统会生成一个临时文件 ,以点开头的临时文件 后缀名为.swp
3. 刚进入文件的模式的命令模式
4. 通过命令模式可以进入编辑模式,进行编辑文件
5. 编辑文件完成之后需要输入Esc键,退出编辑模式进入命令模式
6. 从命令模式进入底行模式,进行保存退出
7. 保存退出之后,系统会将临时文件的内容覆盖到源文件,之后删除临时文件
八、vim故障
E325: ATTENTION
Found a swap file by the name ".passwd.swp"
owned by: root dated: Thu Jul 16 20:14:27 2020
file name: ~root/passwd
modified: YES
user name: root host name: BC
process ID: 81955
While opening file "passwd"
dated: Thu Jul 16 19:11:50 2020
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r passwd"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".passwd.swp"
to avoid this message.
Swap file ".passwd.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
#故障
vim非正常退出导致的
按照提示 进行恢复 保存退出之后
在手动的删除这个文件
[root@BC ~]# rm -f .passwd.swp
2020年07月17日上午(day11)
一、vim的变量
:set nu #显示行号
:set nonu #取消行号
:set list #给每一行的结尾加上制表符 $
:set nolist #取消制表符的显示
:noh #取消高亮显示
:set ic #搜索的忽略大小写
vim环境变量的配置文件
~/.vimrc #个人用户的配置文件 优先级高
/etc/vimrc #全局环境变量配置文件
set nu #写在文件中
[root@BC ~]# cat ~/.vimrc
set ic
二、vim文件比对
[root@BC ~]# diff passwd passwd.bak #了解
2d1
< ROOT
13c12
< vfgbvgnftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
---
> ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@BC ~]# vimdiff passwd passwd.bak #把不同之处进行高亮显示
三、vim多开文件
#水平打开两个文件进行编辑 切换窗口使用 ctrl键 + ww
[root@BC ~]# vim -o old.txt new.txt
#垂直分割两个文件
[root@BC ~]# vim -O old.txt new.txt
#快速的到达指定的行
[root@BC ~]# vim +10 passwd.bak
四、2020年07月08日作业
1.超级用户(管理员用户)提示符是__#__,普通用户提示符是__$__。
2.linux关机重启的命令有哪些 ?
关机:
shutdown
halt
init 0
poweroff
重启
reboot
shutdown
init 6
3.bash是什么?
命令解释器
4.bash特性, 常见的bash特性有哪些?
1. tab键补全
2. 快捷键
3. 历史命令 history
4. 命令别名 alias
5.网卡的配置文件路径什么?
/etc/sysconfig/network-scripts/ifcfg-eth0
6.[root@qiudao ~]# 已知这个是linux命令行,那么请问root表示什么?
当前登录的用户 管理员用户
7.接第上题,qiudao表示什么?
主机名
8.接上题,~的位置表示什么?而~本身又代表了什么?
当前所在的目录
当前用户的家目录
[root@qiudao ~]# yum install -y net-tools 已知命令行内容,下面几道练习题根据此命令行内容作答。
9.已知当前光标所在位置在最后面,我如果要删除命令行的内容,该怎样操作呢?
ctrl + u
10.已知当前光标所在位置在最前面,我如果要删除命令行的内容,该怎样操作呢?
ctrl + k
11.已知当前光标所在位置在最后面,我想只删除net-tools,该怎样操作呢?
ctrl + w
12.磁盘分区安装系统的时候,你是怎么分区的?
/boot #引导分区 500-1024M
swap #临时交换分区 虚拟内存分区 物理内存 1-2倍 峰值 16G
/ #系统分区 剩余多少给多少
13.网络类型都有哪几种?这几种模式,各个意思你是怎么理解的?
(1)NAT 网络地址转换
NAT模式中的虚拟机是通过宿主机(物理电脑)进行上网和交换数据的
使用到网卡是VMnet8 VMware NAT Service服务就充当了一个路由器,虚拟机上网的时候首先会找到这个路由器,进行了一个地址转换,伪装了一个跟宿主机一样的IP地址 进行上网, 网络上的数据将返回给VMnet8这个网卡,VMnet8这块网卡会把数据返回给虚拟机
好处: 外面的网络可以随便更换,虚拟机的网络不变,IP地址也不会跟宿主机的IP地址冲突,IP的地址范围也广,设置一个网段
坏处: 上网需要经过一个中介 代理
(2)桥接模式 Bridge
通过宿主机网卡架设了一座桥 网桥 直接进入到了实际的网络环境中
虚拟机的IP地址跟宿主机的IP地址在一个网段范围之内,容易跟宿主机IP发生冲突
IP地址会随着外面网络的改变而改变,不能使用一个固定的IP地址,IP少
优点: 上网不需要经过宿主机,只需要通过VMnet0 网卡
桥接模式中的虚拟机跟宿主机的层级是一样的
(3)仅主机模式 Host-only
仅能跟宿主机进行连接,没有办法上网的 VMnet1
14.快照有什么作用?
可以恢复到指定的某种快照的状态下
15.克隆分哪几种?各表示什么含义?
链接克隆 基于原实际的副本,占用资源少,依赖于宿主机,一旦宿主机出现问题,克隆机也会出现问题
完整克隆 是原始虚拟机的副本,占用资源多,不依赖于宿主机,是个完整的主体。
16.GNU是什么,介绍一下都有哪些内容?
Emacs #编辑器
gcc #编译器
bash #命令解释器
gawk #编程语言
hurd #内核 研发中
17.GPL是什么,内容是什么?
通用公共许可协议
18.Linux的发行版本都有哪些?
Redhat
CentOS
Fedora
suse
Debian
Ubuntu
freebsd
19.创建一个目录,shanghai。
mkdir shanghai
20.创建一个文件,test.txt
touch test.txt
21.进入到shanghai这个目录。
cd shanghai
22.显示你当前所在的位置。
pwd
23.如何快速从当前目录切换到家目录?
cd
24.用ls -a随便查看一个目录,发现每个目录下都会有两个名为“.”和“..”的目录,解释它们分别代表的含义
. 当前目录
.. 当前目录的上一级目录
25.解释linux系统下“绝对路径”和“相对路径”的区别?
绝对路径都是以/或者以~开头的
不以/或者~开头的都是相对路径
26.使用创建文件的命令一次性在oldboy目录下批量创建(oldboy1,oldboy2,oldboy3,oldboy4,oldboy5)这几个文件
touch oldboy/oldboy{1..5}
27.如何检查当前登录的是什么用户?
whoami
28.如何快速返回上一次所在的目录?
cd -
29. 假设超级用户root当前所在目录为:/usr/local,键入cd命令后,用户当前所在目录为?
家目录 /root
30. 在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是?
-p
31. 在linux中,下面()命令不是针对目录操作的。 A
A. ps
B. cd
C.pwd
D. ls
32. 建立一个新文件可以使用的命令为?
touch
cat
echo
33. 如果要列出一个目录下的所有文件需要使用命令为?
ls -la
tree -a
34.Linux系统习惯将许多设备驱动存储在什么目录中?
/dev
35.包含了域名与IP地址的映射关系的文件是?
/etc/hosts
36.用什么命令来显示当前目录?
pwd
37.在类linux操作系统中,哪个用户默认对整个操作系统拥有完全控制权?
root
38.linux系统管理员创建一个普通oldboy用户,默认会在哪个目录下创建一个用户的主目录
/home/oldboy
39.使用cd命令进入到/usr/local目录下,然后又执行了cd .. 请问,当前你所在的位置是哪里?
/usr
40.已知你在/etc/sysconfig/network-scripts/目录下,你执行了cd /etc/systemd/命令,怎样才能快速的到达/etc/sysconfig/network-scripts/目录下?
cd -
41.已知当前位置为/opt,请问,执行cd . ,写出你所在的位置?
/opt
42.创建/oldboy目录?
mkdir /oldboy
43.创建/data/test目录,已知/data目录不存在,请给出命令?
mkdir -p /data/test
44.创建/root/user /root/logs /root/conf /root/html目录,请用一条命令实现
mkdir /root/{user,logs,conf,html}
45.创建文件oldboy.txt
touch oldboy.txt
46.在/root/目录下创建文件test.txt test.log test.sh test.conf 请用一条命令创建。
touch /root/test.{txt,log,sh,conf}
47.显示/root目录下的目录结构。
tree /root
48.只显示/目录的两层目录结构。
tree -L 2 /
49.只显示/etc目录下的目录。
tree -d /etc
50.如果我在当前在/目录下,之后执行了以下操作,请告诉我,最后我所在的目录位置
cd /etc/sysconfig/
cd ..
cd ..
cd -
cd ~
cd ..
/ 或者 /home
51.当前用户是root用户,当前所在位置是/usr/local ,输入cd命令后,当前所在目录是哪里?
/root
52.显示当前所在位置信息
pwd
53.显示/oldboy 下面所有文件(包含隐藏文件)的详细信息
ls -la /oldboy
54.在/oldboy目录下创建以你名字的目录。(已知oldboy目录不存在,请用一条命令实现)
mkdir -p /oldboy/BC
55.在你名字的目录下面创建两个文件,分别为test.txt,test.log
touch /oldboy/BC/test.{txt,log}
五、2020年07月09日作业
1. 欲把当前目录下的file1.txt复制为file2.txt 命令是?
[root@BC ~]# touch file1.txt
[root@BC ~]# cp file1.txt file2.txt
2.批量创建oldboy01,oldboy02,...oldoby05这几个目录
[root@BC ~]# mkdir oldboy{01..05}
3.显示/oldboy 下面所有文件(包含隐藏文件)的详细信息
[root@BC ~]# ll -a /oldboy
4.在/oldboy目录下创建以你名字的目录。(已知oldboy目录不存在,请用一条命令实现)
[root@BC ~]# mkdir -p /oldboy/jh
5.在你名字的目录下面创建两个文件,分别为test.txt,test.log
[root@BC ~]# touch /oldboy/jh/test.{txt,log}
6.把test.txt文件移动到/tmp目录下面
[root@BC ~]# mv /oldboy/jh/test.txt /tmp/
7.把test.log文件重命名为test.sh
[root@BC jh]# mv test.log test.sh
8.删除test.sh这个文件
[root@BC jh]# rm -f test.sh
9.删除oldboy这个目录
[root@BC jh]# rm -rf /oldboy/
10.切换到/tmp目录下,查看当前的工作位置,同时创建data1、data2、data3、共三个目录。
[root@BC ~]# cd /tmp
[root@BC tmp]# pwd
/tmp
[root@BC tmp]# mkdir /data{1..3}
11.接上一题,分别在data1、data2、data3三个目录下创建3个文件,名字为oldboy1、oldboy2、oldboy3.然后查看/tmp目录的整个目录结构情况,最后检查下data1和oldboy1两个对象的属性。
[root@BC tmp]# touch data{1..3}/oldboy{1..3}
[root@BC tmp]# tree /tmp
/tmp
├── data1
│ ├── oldboy1
│ ├── oldboy2
│ └── oldboy3
├── data2
│ ├── oldboy1
│ ├── oldboy2
│ └── oldboy3
└── data3
├── oldboy1
├── oldboy2
└── oldboy3
3 directories, 9 files
[root@BC tmp]# ll -d data1
drwxr-xr-x 2 root root 51 Jul 17 15:52 data1
[root@BC tmp]# ll data*/oldboy1
-rw-r--r-- 1 root root 0 Jul 17 15:52 data1/oldboy1
-rw-r--r-- 1 root root 0 Jul 17 15:52 data2/oldboy1
-rw-r--r-- 1 root root 0 Jul 17 15:52 data3/oldboy1
12.把/etc/hosts文件复制到/tmp/data1目录下,然后把data1目录复制到/opt/目录下。
[root@BC tmp]#cp /etc/hosts /tmp/data1
[root@BC tmp]#cp -r data1/ /opt/
13.将/tmp/data1目录移动到/root目录下,然后删除/opt/data1目录下的hosts文件,最后删除/opt目录下的data1目录。
[root@BC tmp]# mv /tmp/data1/ /root/
[root@BC tmp]# rm -f /opt/data1/hosts
[root@BC tmp]# rm -rf /opt/data1/
14.查看oldboy.txt文件中的内容,并显示行号(请使用cat命令)。
[root@BC tmp]# cat -n oldboy.txt
15.使用cat命令把oldboy oldgirl student三行内容(每个字符串是一行内容)写入到test.txt文件中
[root@BC tmp]# cat >test.txt<<eof
> oldboy
> oldgirl
> student
> eof
16.查看系统中/etc/services文件中的内容(使用more和less命令,进行上下页查看,并搜索关键字‘ssh’,之后退出。)
more /etc/services b上一页 空格下一页 /ssh q退出
less /etc/services b上一页 空格下一页 /ssh q退出
17.使用cat命令查看文本文件的内容时要对所有的输出行进行显示行号,怎么实现?
cat -n 文件名
18.使用mv命令,下列说法错误的是? CD
A.mv命令可以重命名文件
B.mv命令可以移动文件
C.mv命令可以复制文件
D.mv命令可以删除文件
19.删除文件的命令为?
rm -f 文件名
20.显示"I\'m a student"到屏幕上面
[root@BC tmp]# echo "I\'m a student"
I\'m a student
21.将"I\'m a student"追加到hello.txt文件中
[root@BC tmp]# echo "I\'m a student" >>hello.txt
22.将/etc/passwd文件复制到/opt目录中
[root@BC tmp]# cp /etc/passwd /opt
23.将/tmp目录复制到当前用户的家目录下
[root@BC ~]# cp -r /tmp ./
24.将/opt目录下的hosts文件移动到/root目录下,并将其改名为ip.txt
[root@BC ~]# mv /opt/hosts /root/ip.txt
25.把/var/log/目录下的所有文件拷贝到/opt目录下
[root@BC ~]# cp -r /var/log/* /opt/
26.使用echo命令创建一个非空文件
[root@BC ~]# echo \'2\' >jh
27.使用echo命令把oldboy oldgirl student三行内容(每个字符串是一行内容)写入到test.txt文件中
[root@BC ~]# echo -e "oldboy\noldgirl\nstudent" >test.txt
28.将/etc/hosts和/etc/passwd两个文件合并为一个新文件,文件名称为test.log
[root@BC ~]# cat /etc/hosts /etc/passwd >>test.log
29.将/etc/services文件拷贝到/root目录下
[root@BC ~]# cp /etc/services /root/
30.分页查看/root/services文件,要求从第10行开始显示
[root@BC ~]# more +10 services
六、2020年07月10日作业
1.打开这个网站http://nginx.org/download/,下载一个结尾为tar.gz的软件包
[root@BC ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
2.同样打开上面的网站,下载一个结尾为tar.gz的软件包,要求下载之后的软件包名为nginx.tar.gz
[root@BC ~]# wget -O ./nginx.tar.gz http://nginx.org/download/nginx-1.18.0.tar.gz
--2020-07-10 16:00:12-- http://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 95.211.80.227, 62.210.92.35, 2001:1af8:4060:a004:21::e3
Connecting to nginx.org (nginx.org)|95.211.80.227|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: ‘./nginx.tar.gz’
100%[=================================================>] 1,039,530 69.4KB/s in 15s
2020-07-10 16:00:28 (65.6 KB/s) - ‘./nginx.tar.gz’ saved [1039530/1039530]
3.打开此网站https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/ 下载一个结尾为rpm的软件包
[root@BC ~]# wget https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-server-pgsql-4.0.9-2.el7.x86_64.rpm
--2020-07-10 16:02:18-- https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-server-pgsql-4.0.9-2.el7.x86_64.rpm
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 116.153.35.243, 116.153.35.245, 116.153.35.248, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|116.153.35.243|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2208004 (2.1M) [application/x-redhat-package-manager]
Saving to: ‘zabbix-server-pgsql-4.0.9-2.el7.x86_64.rpm’
100%[=================================================>] 2,208,004 2.14MB/s in 1.0s
2020-07-10 16:02:20 (2.14 MB/s) - ‘zabbix-server-pgsql-4.0.9-2.el7.x86_64.rpm’ saved [2208004/2208004]
4.同样打开上面这个网站,下载一个结尾为rpm的软件包,要求下载之后的软件包名为zabbix.rpm
[root@BC ~]# wget -O ./zabbix.rpm https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-web-4.0.20-1.el7.noarch.rpm
--2020-07-10 16:03:29-- https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-web-4.0.20-1.el7.noarch.rpm
Resolving mirrors.aliyun.com (mirrors.aliyun.com)... 218.98.31.240, 116.153.35.249, 218.98.31.242, ...
Connecting to mirrors.aliyun.com (mirrors.aliyun.com)|218.98.31.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2959992 (2.8M) [application/x-redhat-package-manager]
Saving to: ‘./zabbix.rpm’
100%[=================================================>] 2,959,992 2.68MB/s in 1.1s
2020-07-10 16:03:31 (2.68 MB/s) - ‘./zabbix.rpm’ saved [2959992/2959992]
5.在linux中访问BC的博客网站,访问主页就可以
[root@BC ~]# curl -L https://www.increase93.com/
6.在linux中访问BC的博客网站,要求把主页的内容保存到BC.html文件中。\
[root@BC ~]# curl -o BC.html https://www.increase93.com/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 44971 0 44971 0 0 21236 0 --:--:-- 0:00:02 --:--:-- 21242
7.在linux中访问百度的首页
[root@BC ~]# curl https://www.baidu.com
8.在linux中访问百度的首页,要求把主页的内容保存到baidu.html文件中
[root@BC ~]# curl -o baidu.html www.bidu.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 169 100 169 0 0 99 0 0:00:01 0:00:01 --:--:-- 99
[root@BC ~]# ll
total 9104
-rw-r--r-- 1 root root 82874 Jul 10 11:24 001849-15912011295e8a.jpg
-rw-r--r-- 1 root root 102690 Mar 29 2018 112234-1517109754fad1.jpg
-rw-r--r-- 1 root root 9 Jul 9 11:59 1.txt
-rw-r--r-- 1 root root 34 Jul 9 12:00 2,txt
-rw-------. 1 root root 1350 Jul 8 12:26 anaconda-ks.cfg
-rw-r--r-- 1 root root 169 Jul 10 16:08 baidu.html
9.把/etc/hosts文件下载到本地电脑桌面
sz /etc/hosts
10.把/etc/services文件下载到本地电脑D盘中
sz /etc/hosts
11.把你的课堂笔记上传到linux系统中
rz
12.把你的习题笔记上传到linux系统中的/opt目录下面
cd /opt
rz
13.如果我要把本地电脑中的目录上传到linux系统,请问怎么上传?
打包压缩上传
xftp上传
14.查找ifconfig命令的绝对路径在哪里?你能使用几种方法实现?
[root@BC ~]# which ifconfig
/usr/sbin/ifconfig
[root@BC ~]# type -p ifconfig
/usr/sbin/ifconfig
[root@BC ~]# whereis -b ifconfig
ifconfig: /usr/sbin/ifconfig
[root@BC ~]# locate ifconfig
/usr/sbin/ifconfig
15.查找netstat命令的绝对路径在哪里?你能使用几种方法实现?
[root@BC ~]# which netstat
/usr/bin/netstat
[root@BC ~]# type -p netstat
/usr/bin/netstat
[root@BC ~]# whereis -b netstat
netstat: /usr/bin/netstat
[root@BC ~]# locate netstat
/usr/bin/netstat
16.统计文件/etc/hosts的行数?你能使用几种方法实现?
[root@BC ~]# wc -l hosts
2 hosts
[root@BC ~]# cat -n hosts |tail -1
2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@BC ~]# grep -c \'.*\' hosts
2
17.改变bash的提示符实际上就是改变变量?
PS1
18.显示/etc/passwd文件的前5行内容。
[root@BC ~]# head -5 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
19.显示/etc/passwd文件的最后5行内容。
[root@BC ~]# tail -5 passwd
ntp:x:38:38::/etc/ntp:/sbin/nologin
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
jh:x:1000:1000::/home/jh:/bin/bash
jindaa:x:1001:1001::/home/jindaa:/bin/bash
20.显示/etc/services文件的第11行到第20行的内容
[root@BC ~]# sed -n \'11,20p\' passwd
[root@BC ~]# head -20 |tail passwd
[root@BC ~]# more +11 /etc/services | more -10
21.查看系统中的cd命令是不是内嵌命令
[root@BC ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
22.找出系统中文件名为oldboy.txt的所有文件。
[root@BC ~]# find / -type f -name "oldboy.txt"
23.找出系统中名为oldboy的所有目录。
[root@BC ~]# find / -type d -name "oldboy"
24.找出系统中文件名以oldboy开头的所有文件。
[root@BC ~]# find / -type f -name "oldboy*"
25.rm是个危险的命令,要求用命令rm删除文件时提示“rm command no bny”,怎么实现?
[root@BC ~]# alias rm=\'echo rm command no bny\'
26.设置rm命令存在别名之后,要删除/oldboy这个目录,怎么实现?
[root@BC ~]# \rm -rf oldboy
[root@BC ~]# /usr/bin/rm -rf oldboy
27.实时查看系统日志/var/log/message的更新
[root@BC ~]# tail -f /var/log/messages
28.查找出系统中为s类型的文件
[root@BC ~]# find / -type s
/dev/log
/run/vmware/guestServicePipe
29.查找出系统中为p类型的文件
[root@BC ~]# find / -type p
/run/systemd/inhibit/1.ref
/run/systemd/sessions/104.ref
/run/systemd/sessions/78.ref
/run/systemd/initctl/fifo
30.只显示出/etc/passwd文件的第五行
[root@BC ~]# head -5 passwd |tail -1
七、2020年07月13日作业
1.已知sort.log文件内容如下,请根据文件内容的第二列进行倒序排序。
cat >>sort.log<<\'EOF\'
218.65.30.25 68652
218.65.30.53 34326
218.87.109.154 21201
112.85.42.103 18065
112.85.42.99 17164
218.87.109.151 17163
218.87.109.150 17163
218.65.30.61 17163
218.65.30.126 17163
218.65.30.124 17163
EOF
[root@BC ~]# sort -rnk2 sort.log
218.65.30.25 68652
218.65.30.53 34326
218.87.109.154 21201
112.85.42.103 18065
112.85.42.99 17164
218.87.109.151 17163
218.87.109.150 17163
218.65.30.61 17163
218.65.30.126 17163
218.65.30.124 17163
2.统计系统文件/etc/services有多少行。
[root@BC ~]# wc -l services
11176 services
3.已知文件内容如下,请对该文件的字符串出现的次数进行统计,并从小到大的进行排序出来。
cat>>uniq.txt<<\'EOF\'
oldboy
oldgirl
oldboy
egon
student
oldgirl
oldboy
EOF
[root@BC ~]# sort uniq.txt |uniq -c |sort -n
1 egon
1 student
2 oldgirl
3 oldboy
4.取出系统中的文件/etc/passwd的第七列(以:为分隔符)。
[root@BC ~]# cut -d \':\' -f7 passwd
5.已知文件test.txt内容如下,请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
test
qiudao
oldboy
[root@BC ~]# head -2 test.txt
test
qiudao
[root@BC ~]# grep -v \'oldboy\' test.txt
test
qiudao
[root@BC ~]# sed \'/oldboy/d\' test.txt
test
qiudao
[root@BC ~]# awk \'!/oldboy/\' test.txt
test
qiudao
6.只查看/etc/passwd文件内第5到第15行的内容
[root@BC ~]# head -15 passwd |tail -11
[root@BC ~]# sed -n \'5,15p\' passwd
[root@BC ~]# awk \'NR>4&&NR<16\' passwd
[root@BC ~]# awk \'NR==5,NR==15\' passwd
7.test.txt 的内容如下,要求过滤出不包含oldgirl的行。
oldboy
oldgirl
qiudao
[root@BC ~]# grep -v \'oldgirl\' test.txt
oldboy
qiudao
[root@BC ~]# sed \'/oldgirl/d\' test.txt
oldboy
qiudao
[root@BC ~]# awk \'!/oldboy/\' test.txt
oldgirl
qiudao
8.请执行命令取出linux中eth0的IP地址分别是ip和ifconfig的命令(请用cut,有能力者也可分别用awk,sed命令答)。
[root@BC ~]# ip a s eth0 | head -3 |tail -1 | tr \'/\' \' \' |cut -d " " -f6
10.0.0.100
[root@BC ~]# ip a s eth0 | awk -F \'[ /]\' \'NR==3{print $6}\'
10.0.0.100
[root@BC ~]# ip a s eth0 | awk -F \'[ /]*\' \'NR==3{print $3}\'
10.0.0.100
[root@BC ~]# ip a s eth0 |sed -nr \'3s#(^.*t )(.*)(/.*$)#\2#gp\'
10.0.0.100
[root@BC ~]# ifconfig eth0 |head -2 |tail -1 |cut -d \' \' -f10
10.0.0.200
[root@BC ~]# ip a s eth0 |head -3|tail -1 |cut -d \' \' -f6 |cut -d \' /\' -f1
10.0.0.200
9.删除/etc/passwd文件的前三行内容。
[root@BC ~]# grep -n \'.*\' passwd | grep -wv \'^[123]\'
[root@BC ~]# grep -n \'.*\' passwd | grep -Ewv \'^1|^2|^3\'
[root@BC ~]# sed \'1,3d\' passwd
[root@BC ~]# awk \'NR>3\' passwd
10.统计文件/etc/hosts的行数?你能使用几种方法实现?
[root@BC ~]# wc -l hosts
2 hosts
[root@BC ~]# cat -n hosts|tail -1
2 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@BC ~]# grep -c \'.*\' hosts
2
11.统计文件/etc/services的字节数。你能使用几种方法实现?
[root@BC ~]# ll /etc/services
-rw-r--r--. 1 root root 670293 Jun 7 2013 /etc/services
[root@BC ~]# wc -c /etc/services
670293 /etc/services
[root@BC ~]# du -sh /etc/services
656K /etc/services
[root@BC ~]# stat /etc/services
File: ‘/etc/services’
Size: 670293 Blocks: 1312 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67125358 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:etc_t:s0
Access: 2020-07-17 18:40:51.792211723 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-06 02:13:36.049996181 +0800
Birth: -
12.执行下面的命令echo "Im BC , is QQ 1176494252" >file.txt,要求取出该文件中的姓名和QQ号。
[root@BC ~]# cut -d " " -f2,6 file.txt
BC 1176494252
[root@BC ~]# awk \'{print $2,$6}\' file.txt
BC 1176494252
13.执行如下命令
cat > file.txt <<EOF
abc
123
abc
123
def
EOF
要求去除重复的行
[root@BC ~]# sort file.txt | uniq
123
abc
def
14.接上题,取出每行出现的次数
[root@BC ~]# sort file.txt | uniq -c
2 123
2 abc
1 def
15.统计/var/log下的文件个数,不统计下级目录。
[root@BC ~]# ll /var/log/ | grep \'^-\' | wc -l
33
[root@BC ~]# ll /var/log/ | grep -c \'^-\'
33
[root@BC ~]# tree -fL 1 /var/log | tail -1
4 directories, 33 files
[root@BC ~]# tree -fL 1 /var/log | tail -1 | cut -d " " -f3
33
16.统计/var/log下的所有文件和目录个数,不包含隐藏文件。
[root@BC ~]# tree /var/log | tail -1 | cut -d " " -f1,3
4 44
17.以“:”为分隔符,取出/etc/passwd第一行的最后一列的内容
[root@BC ~]# cut -d ":" -f7 passwd | head -1
/bin/bash
[root@BC ~]# awk -F: \'NR==1{print $NF}\' passwd
/bin/bash
[root@BC ~]# sed -n \'1s#^.*:##gp\' passwd
/bin/bash
18.过滤出/etc/passwd以nologin结尾的内容,并统计行数
[root@BC ~]# grep -c \'nologin$\' passwd
14
[root@BC ~]# grep \'nologin$\' passwd |cat -n
1 bin:x:1:1:bin:/bin:/sbin/nologin
2 daemon:x:2:2:daemon:/sbin:/sbin/nologin
3 adm:x:3:4:adm:/var/adm:/sbin/nologin
4 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
5 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
6 operator:x:11:0:operator:/root:/sbin/nologin
7 games:x:12:100:games:/usr/games:/sbin/nologin
8 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
9 nobody:x:99:99:Nobody:/:/sbin/nologin
10 systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
11 dbus:x:81:81:System message bus:/:/sbin/nologin
12 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
13 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
14 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19.分析如下日志内容,每个域名被访问次数
cat>web.log <<EOF
http://www.oldboy.com/index.html
http://www.oldboy.com/1.html
http://post.oldboy.com/index.html
http://mp3.oldboy.com/index.html
http://www.oldboy.com/3.html
http://post.oldboy.com/2.html
EOF
[root@BC ~]# cut -d "/" -f3 web.log
www.oldboy.com
www.oldboy.com
post.oldboy.com
mp3.oldboy.com
www.oldboy.com
post.oldboy.com
[root@BC ~]# cut -d "/" -f3 web.log |sort
mp3.oldboy.com
post.oldboy.com
post.oldboy.com
www.oldboy.com
www.oldboy.com
www.oldboy.com
[root@BC ~]# cut -d "/" -f3 web.log |sort |uniq -c
1 mp3.oldboy.com
2 post.oldboy.com
3 www.oldboy.com
[root@BC ~]# awk -F \'[:/]*\' \'{print $2}\' web.log |sort |uniq -c 1 mp3.oldboy.com
2 post.oldboy.com
3 www.oldboy.com
20.显示/etc/services文件的第11行到第20行的内容
[root@BC ~]# sed -n \'11,20p\' services
[root@BC ~]# awk \'NR==11,NR==20\' services
[root@BC ~]# cat -n services |head -20 |tail
[root@BC ~]# grep -n \'.*\' services |grep -wA 9 \'^11\'
21.已知文件123.txt内容如下,请过滤出包含oldboy字符串的命令
test
OLDBOY
online
oldboy
oldboyoldboy
[root@BC ~]# grep \'oldboy\' 123.txt
oldboy
oldboyoldboy
[root@BC ~]# sed -n \'/oldboy/p\' 123.txt
oldboy
oldboyoldboy
[root@BC ~]# awk \'/oldboy/\' 123.txt
oldboy
oldboyoldboy
22.过滤出文件123.txt中不包含test的行,并给其过滤出来的内容加上行号
[root@BC ~]# grep -nv \'test\' 123.txt
2:OLDBOY
3:online
4:oldboy
5:oldboyoldboy
[root@BC ~]# awk \'!/test/{print NR,$0}\' 123.txt
2 OLDBOY
3 online
4 oldboy
5 oldboyoldboy
23.要求过滤出文件123.txt中包含oldboy的字符串,忽略大小写。
[root@BC ~]# grep -i \'oldboy\' 123.txt
OLDBOY
oldboy
oldboyoldboy
[root@BC ~]# sed -nr \'/oldboy|OLDBOY/p\' 123.txt
OLDBOY
oldboy
oldboyoldboy
[root@BC ~]# awk \'/oldboy|OLDBOY/\' 123.txt
OLDBOY
oldboy
oldboyoldboy
24.要求过滤出文件123.txt中包含online字符串的行,并统计共有多少行。
[root@BC ~]# grep -c \'online\' 123.txt
1
25.要求过滤出文件123.txt中oldboy的单词。
[root@BC ~]# grep -w \'oldboy\' 123.txt
oldboy
写一个文件,文件内容如下,下面几题请用该文件作答?
cat >>test.txt<<EOF
server {
lisTEN 80;
server_nAme www.oldboy.com;
root /code/dOcs
index INDEX.html;
}
EOF
26.过滤www.oldboy.com这段关键字
[root@BC ~]# grep \'www.oldboy.com\' test.txt
server_nAme www.oldboy.com;
[root@BC ~]# sed -n \'/www.oldboy.com/p\' test.txt
server_nAme www.oldboy.com;
[root@BC ~]# awk \'/www.oldboy.com/\' test.txt
server_nAme www.oldboy.com;
27.同时过滤出root和index的行,不区分大小写
[root@BC ~]# grep -Ei \'root|index\' test.txt
root /code/dOcs
index INDEX.html;
[root@BC ~]# sed -nr \'/root|ROOT|index|INDEX/p\' test.txt
root /code/dOcs
index INDEX.html;
[root@BC ~]# awk \'/root|ROOT|index|INDEX/\' test.txt
root /code/dOcs
index INDEX.html;
28.过滤index,区分大小写
[root@BC ~]# grep \'index\' test.txt
index INDEX.html;
[root@BC ~]# awk \'/index/\' test.txt
index INDEX.html;
[root@BC ~]# sed -n \'/index/p\' test.txt
index INDEX.html;
29.过滤出带"O"的行,不区分大小写
[root@BC ~]# grep -i \'o\' test.txt
server_nAme www.oldboy.com;
root /code/dOcs
[root@BC ~]# sed -nr \'/o|O/p\' test.txt
server_nAme www.oldboy.com;
root /code/dOcs
[root@BC ~]#
[root@BC ~]# awk \'/o|O/\' test.txt
server_nAme www.oldboy.com;
root /code/dOcs
30.过滤出不带";"的行
[root@BC ~]# grep -v \';\' test.txt
server {
root /code/dOcs
}
[root@BC ~]# sed \'/;/d\' test.txt
server {
root /code/dOcs
}
[root@BC ~]# awk \'!/;/\' test.txt
server {
root /code/dOcs
}
31.过滤出以s开头的行
[root@BC ~]# grep \'^s\' test.txt
server {
server_nAme www.oldboy.com;
[root@BC ~]# sed -n \'/^s/p\' test.txt
server {
server_nAme www.oldboy.com;
[root@BC ~]# awk \'/^s/\' test.txt
server {
server_nAme www.oldboy.com;
32.统计该文件的行数
wc -l
33.如果某一天你误操作了"rm -rf *",会发生哪些情况
看目录
删除当前目录下的所有
34.已知123.txt文件内容如下:
linlaoshi
qiulaoshi
oldboy
要求过滤出oldboy这一行的内容?你有几种方法?
[root@BC ~]# grep \'oldboy\' 456.txt
oldboy
[root@BC ~]# sed -n \'/oldboy/p\' 456.txt
oldboy
[root@BC ~]# awk \'/oldboy/\' 456.txt
oldboy
35.接上题,要求不显示oldboy这行内容,怎么实现?你有几种方法?
[root@BC ~]# grep -v \'oldboy\' 456.txt
linlaoshi
qiulaoshi
[root@BC ~]# sed \'/oldboy/d\' 456.txt
linlaoshi
qiulaoshi
[root@BC ~]# awk \'!/oldboy/\' 456.txt
linlaoshi
qiulaoshi
八、2020年07月14日作业
1.取出系统中的文件/etc/passwd的第七列(以:为分隔符)。
[root@BC ~]# cut -d \':\' -f7 passwd
[root@BC ~]# awk -F: \'{print $7}\' passwd
2.已知文件test.txt内容如下,请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
test
qiudao
oldboy
[root@BC ~]# grep -v \'oldboy\' 789.txt
test
qiudao
[root@BC ~]# sed \'/oldboy/d\' 789.txt
test
qiudao
[root@BC ~]# awk \'!/oldboy/\' 789.txt
test
qiudao
3.只查看/etc/passwd文件内第5到第15行的内容
root@BC ~]# cat -n passwd |head -15 |tail
[root@BC ~]# grep -n \'.*\' passwd | grep -wA 10 \'^5\'
[root@BC ~]# sed -n \'2,15p\' passwd
[root@BC ~]# awk \'NR>4&&NR<16\' passwd
4.把test.txt文件中的oldboy替换为oldgirl,给出命令
[root@BC ~]# sed \'s#oldboy#oldgirl#g\' 789.txt
test
qiudao
oldgirl
5.test.txt 的内容如下,要求过滤出不包含qiudao的行。有几种方法可以实现
oldboy
oldgirl
qiudao
[root@BC ~]# grep -v \'qiudao\' 1.txt
oldboy
oldgirl
[root@BC ~]# sed \'/qiudao/d\' 1.txt
oldboy
oldgirl
[root@BC ~]# awk \'!/qiudao/\' 1.txt
oldboy
oldgirl
6.把文件/etc/passwd文件中的/sbin/nologin替换为/bin/bash
[root@BC ~]# sed \'s#/sbin/nologin#/bin/bash#g\' passwd
7.把/etc/selinux/config文件中的SELINUX=enforcing行中的enforcing替换成disabled
[root@BC ~]# sed -i \'/^S/s#enforcing#disabled#g\' /etc/selinux/config
8.现将文件b.txt 中的所有123 替换成def,请问如何实现?
[root@BC ~]# sed -i \'s#123#def#g\' b.txt
9.将文件的test.txt中的第10行的oldboy改为oldgirl
[root@BC ~]# sed -i \'10s#oldboy#oldgirl#g\' b.txt
10.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。
[root@BC ~]# ifconfig eth0 |head -2 |tail -1 |cut -d \' \' -f10
10.0.0.200
[root@BC ~]# ifconfig eth0 |sed -n \'2p\' |sed -r \'s#(^.*et )(.*)( n.*$)#\2#g\'
10.0.0.200
[root@BC ~]# ifconfig eth0 |awk -F \'[ /]*\' \'NR==2{print $3}\'
10.0.0.200
11.使用命令调换/etc/passwd文件里 root 位置和/bin/bash 位置? 即将所有的第一列和最后一列位置调换?
[root@BC ~]# sed -r \'s#(^.*)(:x.*:)(.*)#\3\2\1#g\' passwd
[root@BC ~]# awk -F: \'{print $7":"$2":"$3":"$4":"$5":"$6":"$1}\' passwd
[root@BC ~]# awk -F: -vOFS=":" \'{a=$1;$1=$NF;$NF=a;print}\' passwd
12.先拷贝,再删除/etc/passwd文件的前三行内容。
[root@BC ~]# sed \'1,3d\' passwd
13.使用sed命令打印出/etc/passwd文件的第一行到第三行
[root@BC ~]# sed -n \'1,3p\' passwd
14.过滤出/etc/services 文件包含3306或1521两数字所在的行的内容。(三种方法)
[root@BC ~]# grep -E \'3306|1521\' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@BC ~]# sed -nr \'/3306|1521/p\' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@BC ~]# awk \'/3306|1521/\' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
DNS1=xxxx
DNS2=xxxx
DNS配置文件
/etc/resolv.conf 立即生效
nameserver xxxxx
nameserver xxxxx
生效的方式的不一样
书写的方式不一样
17.若要将鼠标从VM中释放出来,可按()键完成。
ctrl + alt
18.如何统计/etc下有多少个目录,不包括隐藏目录,只显示目录个数。
[root@BC ~]# tree -d /etc | tail -1
605 directories
19.统计secure.log文件中每个ip地址破解你用户密码的次数(包含Failed password字符串的行属于破解密码的,日志群里有,文件很大,建议不要使用cat打开)。
[root@BC ~]# awk \'/Failed password/{print $(NF-3)}\' secure.log |sort | uniq -c | sort -rn | head
68652 218.65.30.25
34326 218.65.30.53
21201 218.87.109.154
18065 112.85.42.103
17164 112.85.42.99
17163 218.87.109.151
17163 218.87.109.150
17163 218.65.30.61
17163 218.65.30.126
17163 218.65.30.124
20.输入last,统计当前连接本机的每个远程终端IP的连接总次数
[root@BC ~]# last | grep \'pts\' |awk \'{print $3}\' | sort | uniq -c | sort -rn
8 10.0.0.1
21.输入lscpu,取出当前系统的cpu核心数
[root@BC ~]# lscpu | grep \'^Core\'
Core(s) per socket: 1
[root@BC ~]# lscpu | grep \'^Core\' | awk \'{print $NF}\'
1
22.输入df -h,取出当前系统根分区剩余可用磁盘空间
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 1.2G 97G 2% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
[root@BC ~]# df -h | awk \'NR==2{print $4}\'
97G
[root@BC ~]# df -h | awk \'/\/$/\'
/dev/sda3 98G 1.2G 97G 2% /
[root@BC ~]# df -h | awk \'/\/$/{print $4}\'
97G
23.显示/proc/meminfo文件中以s开头的行(忽略大小写)
[root@BC ~]# grep -i \'^s\' /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 9732 kB
Slab: 154764 kB
SReclaimable: 104372 kB
SUnreclaim: 50392 kB
[root@BC ~]# sed -nr \'/^s|^S/p\' /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 9732 kB
Slab: 154764 kB
SReclaimable: 104372 kB
SUnreclaim: 50392 kB
[root@BC ~]# awk \'/^s|^S/\' /proc/meminfo
SwapCached: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Shmem: 9732 kB
Slab: 154764 kB
SReclaimable: 104372 kB
SUnreclaim: 50392 kB
24.执行命令echo "I am BC,myqq is 1176494252">oldboy.txt,
现在需要从文件中过滤出“BC”和“1176494252”字符串,请给出命令?(最少三种方法)
[root@BC ~]# echo "I am BC,myqq is 1176494252">oldboy.txt
[root@BC ~]# cat oldboy.txt
I am BC,myqq is 1176494252
[root@BC ~]# awk -F \'[ ,]\' \'{print $3,$6}\' oldboy.txt
BC 1176494252
[root@BC ~]# tr \',\' \' \' < oldboy.txt
I am BC myqq is 1176494252
[root@BC ~]# tr \',\' \' \' < oldboy.txt |cut -d " " -f3,6
BC 1176494252
[root@BC ~]# sed \'s#^.*m ##g\' oldboy.txt | sed \'s#,.* # #g\'
BC 1176494252
25.接上题,如果需要从文件中过滤出“BC,1176494252”字符串,请再给出命令?
[root@BC ~]# sed \'s#^.*m ##g\' oldboy.txt | sed \'s#,.* #,#g\'
BC,1176494252
[root@BC ~]# tr \',\' \' \' < oldboy.txt |cut -d " " -f3,6 | tr \' \' \',\'
BC,1176494252
[root@BC ~]# awk -F \'[ ,]\' \'{print $3","$6}\' oldboy.txt
BC,1176494252
26.我想在/data/oldboyedu目录下面创建 一个oldboy.txt文件,出现了如下报错。
[root@qiudao ~]# touch /data/oldboyedu/oldboy.txt
touch: cannot touch ‘/data/oldboyedu/oldboy.txt’: No such file or directory
问:为何出现这样的错误?该怎么解决?
/data/oldboyedu/ 目录不存在
mkdir -p /data/oldboyedu/
touch /data/oldboyedu/oldboy.txt
27.翻译题
01).command not found #命令找不到
02).No such file or directory #没有这个文件或者目录
03).File exists #文件已经存在
04).Is a directory #这是个目录
05).Not a directory #不是一个目录
28.在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件
touch /backup/{01..10}.txt
ll /backup/*.txt
29.显示/etc/services文件的第10行到第20行的内容?
[root@BC ~]# sed -n \'10,20p\' services
30.显示文件/etc/services的大小?
[root@BC ~]# wc -c services
[root@BC ~]# ll services
-rw-r--r-- 1 root root 670293 Jul 17 16:48 services
[root@BC ~]# stat services
File: ‘services’
Size: 670293 Blocks: 1312 IO Block: 4096 regular file
Device: 803h/2051d Inode: 134380615 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-17 16:48:08.524679627 +0800
Modify: 2020-07-17 16:48:01.909679477 +0800
Change: 2020-07-17 16:48:01.909679477 +0800
Birth: -
[root@BC ~]#
31.以“:”为分隔符,取出/etc/passwd第一行的第七列也就是最后一列的内容?(两种方法)
[root@BC ~]# sed -nr \'1s#(.*)(:.*:)(/.*)#\3#gp\' passwd
/bin/bash
[root@BC ~]# awk -F: \'NR==1{print $NF}\' passwd
/bin/bash
32.找出/var/log目录中以.log结尾的文件,并显示这些文件的属性信息。
[root@BC ~]# ll /var/log/*.log
33.寻找名称为mytest.log的文件
[root@BC ~]#find / -type f -name "mytest.log"
34.用命令行更改config.txt文件,把里面的“name”更改为“address”
[root@BC ~]#sed -i \'s#name#address#g\' config.txt
35.把/etc/passwd文件中的:替换成#
[root@BC ~]#tr \':\' \'#\' < /etc/passwd
36.说明下面这几个文件的作用:
/etc/hostname、 #主机名
/etc/resolv.conf、 #本地DNS文件
/etc/hosts #本地域名解析文件
37.尝试使用sed命令的后向引用和awk命令取出ip地址,请分别使用ip和ifconfig命令取出。
38.在123.txt文件末尾插入‘test’。(两种方法)
sed \'$atest\' 123.txt
echo \'test\' >> 123.txt
cat >>123.txt<<EOF
test
EOF
39.将/etc/passwd文件中第一行到第五行的root替换为admin?
sed -i \'1,5s#root#admin#g\' passwd
40.统计nginx访问日志access.log中每个访问ip出现次数最多的10个。(已知ip在第一列,日志群里有)
[root@BC ~]# awk \'{print $1}\' access.log |sort | uniq -c |sort -rn | head
16033 139.226.172.217
1041 47.102.42.79
994 180.95.238.82
727 113.140.249.33
647 223.166.74.124
525 112.87.125.55
429 182.138.163.167
373 112.87.125.53
352 223.166.74.198
308 182.138.158.169
41.取出下列文件的权限如:0644 ?(两种方法)
[root@BC ~]# stat BC.txt
File: ‘123.txt’
Size: 44 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67160518 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-27 16:55:57.055131412 +0800
Modify: 2019-07-27 16:55:50.098131214 +0800
Change: 2019-07-27 16:55:50.101131214 +0800
[root@BC ~]# stat -c %a passwd
644
[root@BC ~]# stat passwd | awk -F \'[(/]\' \'NR==4{print $2}\'
0644
42.删除BC.txt文件中的第10行到20行。(两种方法)
sed \'10,20d\' BC.txt
awk \'NR<10 || NR>20\' BC.txt
九、2020年07月16日作业
#准备文件
[root@BC ~]# cat file.txt
server {
listen 80;
server_name test.oldboy.com;
index index.html;
}
1.跳转到某行时使用
nG #跳到n行
ngg #跳到n行
2.复制server{ 到 }结尾的这一行, 粘贴到 } 结尾的下一行
光标在第一行,命令模式下yy然后光标移到}这一行,p粘贴
3.删除listen相关的所有行
:2d
4.将server_name 替换为SERVER_NAME
:3s#server_name#SERVER_NAME#g
5.删除oldboy.com,boy删除
:3s#boy##g
6.撤销一次
u
7.在编辑模式下修改 test.oldboy.com为test.ett.com
i进入编辑模式,光标移到old处,回车删除old,输入ett,ESC返回命令模式
8.在index 最后面,添加index.php
i进入编辑模式,光标移到index 后面,输入index.php,ESC返回命令模式
9.在index行下面插入一行内容为:root html;。
o进入编辑模式 输入root html
10.退出编辑模式。
ESC返回命令模式
11.将/etc/passwd 复制到/root/目录下,并重命名为test.txt
[root@BC ~]# cp /etc/passwd /root/test.txt
12.分别向下、向右、向左、向右移动5个字符,分别向下、向上翻两页
向下5j、向右5k、向左5h、向右5l
向下翻两页ctrl +f ctrl+f
向上翻两页ctrl +b ctrl +b
13.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行
移动到行尾 $
移动到行首 ^
移动到test.txt文件的最后一行G
移动到文件的首行1G
14.搜索文件中出现的 root 并数一下一共出现多少个
命令模式/root搜索 总共4个
15.把从第一行到第三行出现的root 替换成admin,然后还原上一步操作
命令模式:1,3s#root#damin#g
还原操作u
16.把整个文件中所有的root替换成admin
命令模式:%s#root#damin#g
17.把光标移动到20行,删除本行,还原上一步操作
命令模式:20d
还原操作u
18.删除从5行到10行的所有内容,还原上一步操作
命令模式:5,10d
还原操作u
19.复制2行并粘贴到11行下面,还原上一步操作(按两次u)
复制2行2yy
粘贴到11行p
还原操作uu
20.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作(按两次u)
11gg,5yy
粘贴到8行p
还原操作uu
21.把13行到18行的内容移动文件的尾部,还原上一步操作(按两次u)
13gg,6dd
复制2行2yy
粘贴到尾部p
还原操作uu
22.将文件中所有的/sbin/nologin为/bin/bash
命令模式:%s#/sbin/nologin#/bin/bash#g
23.在第一行下面插入新的一行,并输入"# Hello!"
1gg,o进入编辑模式,大输入# Hello!
24.保存文档并退出
:wq
:x
zz
#根据文件回答下列习题
[root@BC ~]# cat proxy.conf
server {
Listen 8080;
Server_Name vim.OldboyEDU.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 = /proxy_error.html;
}
location = /proxy_error.html {
root /code/proxy;
}
}
25.使用vim打开proxy.conf文件
vim proxy.conf
26.修改Listen为listen小写,并将8080修改为80
:2s#Listen 8080#listen 8080#g
27.修改Server_Name为server_name小写。
:3s#Server_Name#server_name#g
28.修改vim.OldboyEDU.com为vim.oldboy.com
:3s#vim.OldboyEDU.com#vim.oldboy.com#g
29.在server_name行下插入一行 root /code;
2gg,o进入编辑模式,输入root /code
30.复制5-14行的内容,然后将其粘贴到14行下面
5gg
10yy
粘贴到14行p
31.删除与proxy_set_header相关的两行全部删除
6G, 2dd
32.如上操作完成后,在13-20行前面加上#号
:13,20s#^#\##g
33.删除21-23的行,然后保存当前文件
21gg
3dd
:wq
2020年07月20日上午(day12)
一、什么是用户
1.定义:能够正常登录系统的就是用户
Linux系统支持多用户同时登陆 互相管理不冲突
Windows不支持多用户同时登陆
2.为什么要有用户?
1)系统的程序进程需要指定的用户进行运行
2)root管理系统权限太大,需要普通用户进行管理
3.id #查看用户的基本信息
[root@BC ~]# id #默认查看当前登录的用户的信息
uid=0(root) gid=0(root) groups=0(root)
[root@BC ~]# id nginx
uid=998(nginx) gid=996(nginx) groups=996(nginx)
二、用户跟系统的约定
CentOS-7
UID
0 --- 超级管理员用户 权限最大
1-200 --- 系统用户,系统默认创建好的 不能登录系统的用户 用来运行系统中的程序和进程
201-1000 --- 系统用户 用户自定义的 运行一些软件程序
1000+ --- 普通用户 可以正常登录系统 但是权限很低
CentOS-6
1-500 系统用户
500+ 普通用户
三、用户相关的文件
#用户的基本信息存放在这个文件里面
[root@BC ~]# ll /etc/passwd
-rw-r--r-- 1 root root 860 Jul 20 19:50 /etc/passwd
#以冒号为分隔符,分为7列
[root@BC ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列: root #用户的名称
第二列: x #用户的密码占位符
第三列: 0 #用户的UID信息
第四列: 0 #用户的GID信息
第五列: root #用户的注释信息
第六列: /root #用户的家目录
第七列: /bin/bash #用户的命令解释器 能够登录系统的 /sbin/nologin 禁止登录系统
#用户的密码信息及账号信息
[root@BC ~]# ll /etc/shadow
---------- 1 root root 584 Jul 20 19:50 /etc/shadow
#以冒号为分隔符,分为9列
[root@BC ~]# head -2 /etc/shadow
root:$6$SoTZ3L8.5rI4::0:99999:7:::
bin:*:17834:0:99999:7:::
第一列: root #用户的名称
第二列: * 或者 !! #加密后的密码信息, * 和 !! 表示的是没有密码
第三列: 17834 #密码最后一次修改距离1970年1月1日过了多少天
第四列: 0 #密码最短有效期 0没有限制
第五列: 99999 #密码最长有效期 99999 没有限制
第六列: 7 #密码到期前的预警时间
第七列: 10 #密码到期后的宽恕时间
第八列: 20391231 #账号过期时间
第九列: 空 #没有使用
2020年07月21日上午(day13)
一、用户管理命令
1. useradd == adduser #创建用户
选项:
-u #指定uid
-g #指定组 gid 前提需存在
-G #指定附加组 多个用逗号分割
-d #指定家目录
-c #注释信息
-s #指定命令解释器
-r #创建系统用户,默认不创建家目录 命令解释器是允许登录的
-M #不创建家目录
[root@BC ~]# useradd user01
[root@BC ~]# tail -1 /etc/passwd
user01:x:1000:1000::/home/user01:/bin/bash
[root@BC ~]# tail -1 /etc/shadow
user01:!!:18464:0:99999:7:::
[root@BC ~]# useradd -u666 -d /opt/user02 -c "test" user02
[root@BC ~]# tail -1 /etc/passwd
user02:x:666:1001:test:/opt/user02:/bin/bash
[root@BC ~]# ll /opt/
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
[root@BC ~]# useradd -r user03
[root@BC ~]# tail -1 /etc/passwd
user03:x:665:665::/home/user03:/bin/bash
[root@BC ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
[root@BC ~]# useradd -r -s /sbin/nologin user04
[root@BC ~]# tail -1 /etc/passwd
user04:x:664:664::/home/user04:/sbin/nologin
[root@BC ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
[root@BC ~]# useradd -M -s /sbin/nologin user05
[root@BC ~]# tail -1 /etc/passwd
user05:x:1001:1002::/home/user05:/sbin/nologin
[root@BC ~]# ll /home/
total 0
drwx------ 2 user01 user01 62 Jul 21 16:40 user01
2. usermod #修改用户信息的
选项:
-u #修改用户的uid
-g #修改用户的gid
-a #追加 添加附加组 需跟-G配合使用
-G #修改附加组,默认会覆盖原来的所有附加组 -aG 追加
-m #迁移家目录
-d #修改家目录
-c #修改注释信息
-s #修改命令解释器
-l #修改用户的名称
-L #锁定用户
-U #解锁用户
[root@BC ~]# usermod -u6666 -g 1001 -aG 665,664 -md /opt/user01 -c "123" -l user123 user01
[root@BC ~]# grep \'user01\' /etc/passwd
user123:x:6666:1001:123:/opt/user01:/bin/bash
[root@BC ~]# id user123
uid=6666(user123) gid=1001(user02) groups=1001(user02),665(user03),664(user04)
[root@BC ~]# usermod -s /bin/bash user05
[root@BC ~]# grep \'user05\' /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
[root@BC ~]# usermod -L user02
[root@BC ~]# usermod -U user02
#修改密码
[root@BC ~]# passwd user02
Changing password for user user02.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
#远程登录
[C:\~]$ ssh user02@10.0.0.100
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
Last failed login: Tue Jul 21 17:22:10 CST 2020 from 10.0.0.1 on ssh:notty
There were 4 failed login attempts since the last successful login.
Last login: Tue Jul 21 17:20:45 2020 from 10.0.0.1
[user02@BC ~]$
3. userdel #删除用户 默认不删除家目录及邮件信息
选项:
-r #删除用户的时候,删除家目录及邮件相关信息
[root@BC ~]# ll /opt/
total 1016
drwx------ 2 user123 user02 62 Jul 21 16:40 user01
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
[root@BC ~]# userdel user123
[root@BC ~]# ll /opt/
total 1016
drwx------ 2 6666 user02 62 Jul 21 16:40 user01
drwx------ 2 user02 user02 62 Jul 21 16:47 user02
[root@BC ~]# useradd user06
[root@BC ~]# ll /home/
total 0
drwx------ 2 user06 user06 62 Jul 21 17:45 user06
[root@BC ~]# ll /var/mail/
total 0
-rw-rw---- 1 user02 mail 0 Jul 21 16:47 user02
-rw-rw---- 1 user05 mail 0 Jul 21 16:55 user05
-rw-rw---- 1 user06 mail 0 Jul 21 17:45 user06
-rw-rw---- 1 6666 mail 0 Jul 21 16:40 user123
[root@BC ~]# userdel -r user06
[root@BC ~]# ll /home/
total 0
[root@BC ~]# ll /var/mail/
total 0
-rw-rw---- 1 user02 mail 0 Jul 21 16:47 user02
-rw-rw---- 1 user05 mail 0 Jul 21 16:55 user05
-rw-rw---- 1 6666 mail 0 Jul 21 16:40 user123
[root@BC ~]# userdel user02
userdel: user user02 is currently used by process 8333 #用户正在使用
[root@BC ~]# ps aux |grep 8333
user02 8333 0.0 0.1 161364 2348 ? S 17:42 0:00 sshd: user02@pts/1
root 8389 0.0 0.0 112708 976 pts/0 R+ 17:46 0:00 grep --color=auto 8333
[root@BC ~]# userdel user02
4. 查看用户的命令
#查看用忽的id及组的相关信息
[root@BC ~]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@BC ~]# yum install -y finger
[root@BC ~]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Tue Jul 21 17:49 (CST) on pts/0 from 10.0.0.1
7 seconds idle
No mail.
No Plan.
[root@BC ~]# who
root pts/0 2020-07-21 17:49 (10.0.0.1)
[root@BC ~]# whoami
root
[root@BC ~]# w
09:59:15 up 22:14, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 17:49 ? 0.02s 0.00s w
[root@BC ~]# uptime
09:59:49 up 22:14, 1 user, load average: 0.00, 0.01, 0.05
二、用户创建的相关文件
创建用户的时候,没有指定相关信息,系统创建用户是根据两个文件进行创建的
[root@BC ~]# ll /etc/login.defs
-rw-r--r--. 1 root root 2028 Oct 30 2018 /etc/login.defs
[root@BC ~]# ll /etc/default/useradd
-rw-r--r--. 1 root root 119 Oct 30 2018 /etc/default/useradd
[root@BC ~]# grep -Ev \'^$|^#\' /etc/login.defs
MAIL_DIR /var/spool/mail #接收邮件的目录
PASS_MAX_DAYS 99999 #密码最大的有效期天数
PASS_MIN_DAYS 0 #密码最小的有效期
PASS_MIN_LEN 5 #密码最小的长度 不起作用 root用户限制不了 普通用户最少8位
PASS_WARN_AGE 7 #密码到期前的告警时间
UID_MIN 1000 #普通用户最小的UID
UID_MAX 60000 #普通用户最大的UID
SYS_UID_MIN 201 #系统用户的最小UID
SYS_UID_MAX 999 #系统用户的最大UID
GID_MIN 1000 #普通用户的组的最小GID
GID_MAX 60000 #普通用户的组的最大GID
SYS_GID_MIN 201 #系统用户的组的最小GID
SYS_GID_MAX 999 #系统用户的组的最大GID
CREATE_HOME yes #创建用户的时候默认创建家目录
UMASK 077 #默认创建用户的家目录的权限 umask为077 777-077=700
USERGROUPS_ENAB yes #创建或删除用户的时候,没有指定组,默认创建或删除跟用户相同名称的组
ENCRYPT_METHOD SHA512 #密码的加密规则
[root@BC ~]# cat /etc/default/useradd
GROUP=100 #当创建用户没有指定组,并且USERGROUPS_ENAB为no的时候,这个选项生效
HOME=/home #创建用户的家目录的位置
INACTIVE=-1 #跟shadow文件的第七列 密码到期后的宽恕时间 -1 密码永不失效 不启用
EXPIRE= #跟shadow文件第八列 账号密码的失效时间 时间戳 空则表示没有失效时间
SHELL=/bin/bash #默认的命令解释器
SKEL=/etc/skel #默认创建家目录的模板
CREATE_MAIL_SPOOL=yes #创建邮件相关信息
三、用户命令行故障
[root@BC ~]# passwd test
Changing password for user test.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@BC ~]# rm -f /home/test/.bash*
#家目录里面的环境变量配置文件不存在
-bash-4.2$
-bash-4.2$
#解决
-bash-4.2$ pwd
/home/test
-bash-4.2$ cp -a /etc/skel/.bash* ./
Permission denied #权限不足
[root@BC ~]# mkdir -m 700 /home/test
[root@BC ~]# ll -d /home/test
drwx------ 2 root root 6 Jul 21 10:53 /home/test
[root@BC ~]# chown -R test.test /home/test
-bash-4.2$ cd /home/test
-bash-4.2$ pwd
/home/test
-bash-4.2$ cp -a /etc/skel/.bash* ./
-bash-4.2$ logout
四、用户的密码信息
#如何设置密码
管理员可以给任何用户设置密码 密码的长度没有限制
普通用户只能给自己设置密码 且是无规律的8位以上的密码
[root@BC ~]# useradd BC01
[root@BC ~]# passwd #默认给当前用户设置密码
Changing password for user root.
New password:
[root@BC ~]# passwd BC01 #给指定的用户设置密码
Changing password for user BC01.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@BC ~]#
非交互式设置密码
--stdin
[root@BC ~]# echo \'2\' | passwd --stdin BC01
Changing password for user BC01.
passwd: all authentication tokens updated successfully.
#如何设置随机密码
#如何获得随机数
[root@BC ~]# echo $RANDOM
28241
[root@BC ~]# echo $RANDOM | md5sum
6c8a1df9e12e9c553d0f9a397b860f4e -
[root@BC ~]# echo $RANDOM | md5sum | cut -c 1-10
64091f6823
[root@BC ~]# echo $RANDOM | md5sum | cut -c 1-10
df0676f775
#密码设置成功,但是不知道密码
[root@BC ~]# echo $RANDOM | md5sum | cut -c 1-10 | passwd --stdin BC01
Changing password for user BC01.
passwd: all authentication tokens updated successfully.
[root@BC ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt
b676039b3f
[root@BC ~]# echo $RANDOM | md5sum | cut -c 1-10 |tee pass.txt | passwd --stdin BC01
Changing password for user BC01.
passwd: all authentication tokens updated successfully.
[root@BC ~]# cat pass.txt
7d53328b61
tee #重定向的命令 将数据重定向到指定的文件中,并输出在屏幕上面一份
-a #追加
#设置更复杂的密码
[root@BC ~]# yum install -y expect
选项:
-l #指定的密码位数
-d #指定数字位数
-c #小写字母位数
-C #大小字母位数
-s #特殊字符位数
[root@BC ~]# mkpasswd
gC}2atTf9
[root@BC ~]# mkpasswd -l 24 -d 6 -c 6 -C 6 -s 6
sv_^WF85J@DF5Ng5|3{f3/ng
[root@BC ~]# mkpasswd -l 24
9px3Sesrx[ybtbvElubxxltj
[root@BC ~]# mkpasswd -l 24
uimYw\Z4amzffhti0eljucgg
[root@BC ~]# mkpasswd -l 24 -s 24
impossible to generate 24-character password with 2 numbers, 2 lowercase letters, 2 uppercase letters and 24 special characters.
[root@BC ~]# mkpasswd -l 24 -s 24 -d 0 -c 0 -C 0
$.$}+?;-~]|)>(#_),[)!#@$
[root@BC ~]# mkpasswd -l 24 -s 24 -d 0 -c 0 -C 0 | tee pass.txt | passwd --stdin BC01
Changing password for user BC01.
passwd: all authentication tokens updated successfully.
[root@BC ~]# cat pass.txt
:{]~"/\'%[,+"^*%??%,\'?}~$
五、用户组的管理
什么是用户组
组分为两类
基本组 #一个用户只能拥有一个基本组
附加组 #当基本组的权限不够用户使用的,就出现了附加组 一个用户允许拥有多个附加组
跟组相关的文件
[root@BC ~]# ll /etc/group
-rw-r--r-- 1 root root 573 Jul 21 11:04 /etc/group
[root@BC ~]# ll /etc/gshadow
---------- 1 root root 449 Jul 21 11:04 /etc/gshadow
[root@BC ~]#
#以冒号为分隔符 分为4列
[root@BC ~]# cat /etc/group #用户组的基本信息文件
root:x:0:
bin:x:1:
daemon:x:2:
mail:x:12:postfix
第一列: root #组的名称
第二列: x #组的密码占位符
第三列: 0 #组的GID
第四列: #用户名 哪些用户使用此组作为附加组 多个用逗号分割
#用户组的组密码文件
#以冒号为分隔符 分为四列
[root@BC ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
mail:::postfix
第一列: root #组的名称
第二列: !或者空 #用户组的密码信息 空或者!是没有密码
第三列: 空 #用户组的管理者
第四列: 空 #用户名 哪些用户使用此组作为附加组 多个用逗号分割
[root@BC ~]# usermod -aG user05,user03,user01 BC01
[root@BC ~]# grep \'BC01\' /etc/group
user01:x:1000:BC01
user03:x:665:BC01
user05:x:1002:BC01
BC01:x:1006:
[root@BC ~]# grep \'BC01\' /etc/gshadow
user01:!::BC01
user03:!::BC01
user05:!::BC01
BC01:!::
六、用户组的相关命令
1. 创建用户组的命令 groupadd
选项:
-g #指定组的ID GID
-r #创建系统组
[root@BC ~]# groupadd user_group01
[root@BC ~]# tail -1 /etc/group
user_group01:x:1007:
[root@BC ~]# groupadd -g 666 user_group02
[root@BC ~]# tail -1 /etc/group
user_group02:x:666:
[root@BC ~]# groupadd -r user_group03
[root@BC ~]# tail -1 /etc/group
user_group03:x:664:
2. 修改用户组的命令 groupmod
选项:
-g #修改用户组的ID GID
-n #修改组的名称
[root@BC ~]# groupmod -g 6666 user_group01
[root@BC ~]# grep \'user_group01\' /etc/group
user_group01:x:6666:
[root@BC ~]# groupmod -n new_group user_group01
[root@BC ~]# grep \'new_group\' /etc/group
new_group:x:6666:
3. 删除用户组的命令 groupdel
[root@BC ~]# groupdel new_group
[root@BC ~]# grep \'new_group\' /etc/group
#删除作为某个用户的附加组的用户组 删除没有影响
[root@BC ~]# groupdel user01
[root@BC ~]# grep \'1002\' /etc/group
user05:x:1002:BC01
[root@BC ~]# grep \'1002\' /etc/passwd
user05:x:1001:1002::/home/user05:/bin/bash
test:x:1002:1003::/home/test:/bin/bash
[root@BC ~]# id user05
uid=1001(user05) gid=1002(user05) groups=1002(user05)
#删除一个组作为某个用户的基本组 是不能删除的
解决:
给这里面的用户重新找个基本组
把用户也一并删除掉
[root@BC ~]# groupdel user05
groupdel: cannot remove the primary group of user \'user05\'
[root@BC ~]# usermod -g 1003 user05
[root@BC ~]# id user05
uid=1001(user05) gid=1003(test) groups=1003(test)
[root@BC ~]# groupdel user05
2020年07月22日上午(day14)
一、用户提权
1. su 使用普通用户登录,然后执行su命令切换到root用户 优点:简单 缺点:需要知道root密码
2. sudo 使用普通用户管理,当需要使用root的权限的时候,进行提权 优点:安全、方便 缺点:复杂
shell的分类及执行的过程
交互式shell #终端操作 输入一条指令,需要等待系统的处理及返回结果
非交互式shell #脚本的执行方式就是 用户执行完指令 不需要跟系统进行交互
登录式shell #通过用户名和密码的方式进行登录的
非登录式shell #不是通过用户名和密码的方式进行登录的 执行一个bash,就是一个非登录式shell
[root@BC ~]# yum install -y psmisc
[root@BC ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─master─┬─pickup
│ └─qmgr
├─nginx───nginx
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash───pstree
│ └─sshd───bash───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
用户的工作环境相关文件
二、用户的工作环境相关文件
#个人配置文件
/root/.bash_profile
/root/.bashrc
#全局配置文件
/etc/bashrc
/etc/profile
/etc/profile.d/*.sh
profile #环境变量配置文件 系统登录前执行的一些命令或者脚本
bashrc # 本地变量 别名
执行顺序
#在5个文件的第二行加入echo输出
[root@BC ~]# vim .bashrc
[root@BC ~]# vim .bash_profile
[root@BC ~]# vim /etc/bashrc
[root@BC ~]#
[root@BC ~]# vim /etc/profile
[root@BC ~]# vim /etc/profile.d/test.sh
#登录式Shell执行顺序
/etc/profile ---》 /etc/profile.d/*.sh ---》 .bash_profile ---》 .bashrc ---》 /etc/bashrc
#非登录式shell执行顺序
.bashrc ---》 /etc/bashrc ---》 /etc/profile.d/*.sh
三、su命令用户提权
su username #非登录式shell
su - username #登录式shell
区别就是加载的配置文件不一样
root用户切换到普通用户是不需要密码的,而普通用户切换到root用户是需要密码的
[root@BC ~]# useradd test10
[root@BC ~]# echo "1" |passwd --stdin test10
Changing password for user test10.
passwd: all authentication tokens updated successfully.
[root@BC ~]# su test10
/etc/bashrc
/etc/profile.d/*.sh
[test10@BC root]$
[test10@BC root]$ pwd
/root
su username在切换用户的时候,只执行了
/etc/bashrc
/etc/profile.d/*.sh
切换之后所在的目录是在从哪个用户切换过来的就是谁的家目录
[root@BC ~]# su - test10
Last login: Wed Jul 22 09:09:58 CST 2020 on pts/0
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
[test10@BC ~]$ pwd
/home/test10
su - username 在切换用户的时候属于一种登录式shell 跟su命令直接切换的区别就是是否加载了/etc/profile文件,切换之后,工作环境也已经改变了,是在自己的家目录下面
[root@BC ~]# su - test10
Last login: Wed Jul 22 09:13:03 CST 2020 on pts/0
[test10@BC ~]$ su -
Password:
Last login: Wed Jul 22 09:13:25 CST 2020 from 10.0.0.1 on pts/2
[root@BC ~]# su - test10
Last login: Wed Jul 22 09:16:33 CST 2020 on pts/0
[test10@BC ~]$ su - root
Password:
Last login: Wed Jul 22 09:16:59 CST 2020 on pts/0
[root@BC ~]#
四、sudo用户提权
#日志审计
[root@BC ~]# grep \'wheel\' /etc/group
wheel:x:10:
[root@BC ~]# usermod -aG wheel test10
[root@BC ~]# id test10
uid=1007(test10) gid=1007(test10) groups=1007(test10),10(wheel)
[test10@BC ~]$ sudo -l
[sudo] password for test10:
Matching Defaults entries for test10 on BC:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test10 may run the following commands on BC:
(ALL) ALL
[test10@BC ~]$ sudo tail -f /var/log/messages
Jul 22 09:19:49 BC systemd-logind: Removed session 65.
Jul 22 09:19:56 BC systemd: Created slice User Slice of test10.
Jul 22 09:19:56 BC systemd: Started Session 66 of user test10.
Jul 22 09:19:56 BC systemd-logind: New session 66 of user test10.
Jul 22 09:20:11 BC su: (to root) test10 on pts/2
Jul 22 09:47:08 BC systemd-logind: Removed session 66.
Jul 22 09:47:08 BC systemd: Removed slice User Slice of test10.
Jul 22 09:47:12 BC systemd: Created slice User Slice of test10.
Jul 22 09:47:12 BC systemd: Started Session 67 of user test10.
Jul 22 09:47:12 BC systemd-logind: New session 67 of user test10.
^C
[test10@BC ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/hostname’: Permission denied
rm: cannot remove ‘/opt/hostnamectl’: Permission denied
rm: cannot remove ‘/opt/test_hostname’: Permission denied
rm: cannot remove ‘/opt/test_hostname.txt’: Permission denied
rm: cannot remove ‘/opt/.hostname.log’: Permission denied
rm: cannot remove ‘/opt/HOSTNAMECTL’: Permission denied
rm: cannot remove ‘/opt/user02’: Permission denied
rm: cannot remove ‘/opt/user01’: Permission denied
[test10@BC ~]$ sudo rm -rf /opt/
[test10@BC ~]$ ll /opt
ls: cannot access /opt: No such file or directory
#权限太大 怎么限制权限
visudo #进行设置 默认只能root用户使用sudo命令 普通用户是使用不了的 需要root用户设置
#只给开发人员只读权限
[root@BC ~]# visudo #简单 有语法检查功能
====
[root@BC ~]# vi /etc/sudoers
#在100行左右添加此行
test11 ALL=(ALL) /usr/bin/cat,/usr/bin/tail
用户 主机 角色 命令
ALL 所有命令
/usr/bin/cat #单个命令
/usr/bin/cat,/usr/bin/tail #多个用逗号分割
/usr/bin/* #目录下的所有命令
NOPASSWD: #免密执行
test11 ALL=(ALL) NOPASSWD: /usr/bin/tail /var/log/messages #限制某个文件操作
#检查语法
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
#普通用户测试
[sudo] password for test11:
Matching Defaults entries for test11 on BC:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test11 may run the following commands on BC:
(ALL) /usr/bin/cat, /usr/bin/tail
[test11@BC ~]$ tail -f /var/log/messages
tail: cannot open ‘/var/log/messages’ for reading: Permission denied
tail: no files remaining
[test11@BC ~]$ sudo tail -f /var/log/messages
Jul 22 09:47:12 BC systemd: Started Session 67 of user test10.
Jul 22 09:47:12 BC systemd-logind: New session 67 of user test10.
Jul 22 09:52:16 BC systemd: Created slice User Slice of test11.
Jul 22 09:52:16 BC systemd: Started Session 68 of user test11.
Jul 22 09:52:16 BC systemd-logind: New session 68 of user test11.
Jul 22 09:57:26 BC systemd-logind: Removed session 68.
Jul 22 09:57:26 BC systemd: Removed slice User Slice of test11.
Jul 22 09:57:35 BC systemd: Created slice User Slice of test11.
Jul 22 09:57:35 BC systemd: Started Session 69 of user test11.
Jul 22 09:57:35 BC systemd-logind: New session 69 of user test11.
^C
[test11@BC ~]$ rm -rf /mnt/
rm: cannot remove ‘/mnt/’: Permission denied
[test11@BC ~]$ sudo rm -rf /mnt/
Sorry, user test11 is not allowed to execute \'/bin/rm -rf /mnt/\' as root on BC.
#执行sodu命令的时候,不提示输入密码
[root@BC ~]# visudo
test11 ALL=(ALL) NOPASSWD:/usr/bin/cat,/usr/bin/tail
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
[test11@BC ~]$ sudo -l
Matching Defaults entries for test11 on BC:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test11 may run the following commands on BC:
(ALL) NOPASSWD: /usr/bin/cat, /usr/bin/tail
[test11@BC ~]$
注意:设置命令权限的时候,多个可以使用逗号分割 也可以是/usr/bin/* ALL
五、sudo设置组
两种方法:
利用sudo的自己的组 只在sudo里面生效
利用系统组 是一个真实存在的组
#利用sudo的自己的组
[root@BC ~]# useradd dev01
[root@BC ~]# useradd dev02
[root@BC ~]# echo "1" | passwd --stdin dev01
Changing password for user dev01.
passwd: all authentication tokens updated successfully.
[root@BC ~]# echo "1" | passwd --stdin dev02
Changing password for user dev02.
passwd: all authentication tokens updated successfully.
#用户别名组
User_Alias DEV = dev01,dev02
#命令别名组
Cmnd_Alias READ = /bin/cat,/bin/head,/bin/tail
#调用
DEV ALL=(ALL) NOPASSWD: READ
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
#测试
[dev01@BC ~]$ sudo -l
Matching Defaults entries for dev01 on BC:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User dev01 may run the following commands on BC:
(ALL) NOPASSWD: /bin/cat, /bin/head, /bin/tail
[dev01@BC ~]$ sudo head -1 /etc/shadow
root:$6$SoTZ3L8.5rI4l25X$WAqOKpP8BwpL/evQNV2RfaJnXn6AZepgQcwUjHTUoDSJz7InZPGUZbanfzCVtLUeSX1q6gbPTiP.vnKIVcW1t0::0:99999:7:::
[dev01@BC ~]$ sudo tail -1 /etc/shadow
dev02:$6$iZSmy0at$iDnyU7dcY1saiseJHT40Qw00.LildePgoG2j3ShODj1s69Z.aVpaj9vvoZLtCcMakQ0BDFdA5Lh3FstbnAKcf1:18465:0:99999:7:::
系统的组 真实组
[root@BC ~]# groupadd dev_group
[root@BC ~]# useradd -g dev_group dev11
[root@BC ~]# useradd -g dev_group dev12
[root@BC ~]# echo "1" | passwd --stdin dev11
Changing password for user dev11.
passwd: all authentication tokens updated successfully.
[root@BC ~]# echo "1" | passwd --stdin dev12
Changing password for user dev12.
passwd: all authentication tokens updated successfully.
[root@BC ~]# visudo
%dev_group ALL=(ALL) NOPASSWD: READ
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
#测试
[dev11@BC ~]$ sudo -l
Matching Defaults entries for dev11 on BC:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User dev11 may run the following commands on BC:
(ALL) NOPASSWD: /bin/cat, /bin/head, /bin/tail
[dev11@BC ~]$ head -1 /var/log/messages
head: cannot open ‘/var/log/messages’ for reading: Permission denied
[dev11@BC ~]$ sudo head -1 /var/log/messages
Jul 16 04:01:01 BC systemd: Started Session 61 of user root.
[dev11@BC ~]$ sudo tail -1 /var/log/messages
Jul 22 10:54:33 BC systemd-logind: New session 79 of user dev11.
六、sudo设置案列
禁止root用户登录,使用普通用户登录,并且普通用户能够免密的切换到root用户
#禁止root登录
[root@BC ~]# ll /etc/ssh/sshd_config
-rw-------. 1 root root 3907 Apr 11 2018 /etc/ssh/sshd_config
[root@BC ~]# grep -i \'rootlogin\' /etc/ssh/sshd_config
#PermitRootLogin yes
# the setting of "PermitRootLogin without-password".
[root@BC ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@BC ~]# sed -i \'/^#PermitRootLogin/s#.*#PermitRootLogin no#g\' /etc/ssh/sshd_config
[root@BC ~]# grep -i \'rootlogin\' /etc/ssh/sshd_config
PermitRootLogin no
# the setting of "PermitRootLogin without-password".
[root@BC ~]# systemctl restart sshd
[root@BC ~]# useradd qiudao
[root@BC ~]# echo "1" | passwd --stdin qiudao
Changing password for user qiudao.
passwd: all authentication tokens updated successfully.
[C:\~]$ ssh qiudao@10.0.0.100
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
Last login: Wed Jul 22 09:47:12 2020 from 10.0.0.1
[qiudao@BC ~]$
[root@BC ~]# visudo
qiudao ALL=(ALL) NOPASSWD: /bin/su
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
#测试
[qiudao@BC ~]$ sudo su -
Last login: Wed Jul 22 11:08:51 CST 2020 on pts/1
Last failed login: Wed Jul 22 11:09:55 CST 2020 from 10.0.0.1 on ssh:notty
There were 2 failed login attempts since the last successful login.
[root@BC ~]#
sudo 执行流程
1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存
2.如果存在则不需要输入密码, 否则需要输入用户与密码
3.输入密码会检测是否该用户是否拥有该权限
4.如果有则执行,否则报错退出
七、day10作业
#准备文件
[root@BC ~]# cat file.txt
server {
listen 80;
server_name test.oldboy.com;
index index.html;
}
1.跳转到某行时使用
gg G
2.复制server{ 到 }结尾的这一行, 粘贴到 } 结尾的下一行
gg 5yy G p
3.删除listen相关的所有行
/listen dd
4.将server_name 替换为SERVER_NAME
2gg R
5.删除oldboy.com,boy删除
2gg dw
6.撤销一次
u
7.在编辑模式下修改 test.oldboy.com为test.ett.com
2gg cw ett
8.在index 最后面,添加index.php
3gg index.php
9.在index行下面插入一行内容为:root html;。
3gg o root html;
10.退出编辑模式。
Esc
11.将/etc/passwd 复制到/root/目录下,并重命名为test.txt
cp /etc/passwd /root/test.txt
12.分别向下、向右、向左、向右移动5个字符,分别向下、向上翻两页
5h 5j 5k 5l
13.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行
10gg $ ^ G gg
14.搜索文件中出现的 root 并数一下一共出现多少个
/root
15.把从第一行到第三行出现的root 替换成admin,然后还原上一步操作
:1,3s#root#admin#g
16.把整个文件中所有的root替换成admin
:%s#root#admin#g
17.把光标移动到20行,删除本行,还原上一步操作
20gg dd u
18.删除从5行到10行的所有内容,还原上一步操作
:5,10d u
19.复制2行并粘贴到11行下面,还原上一步操作(按两次u)
2gg yy 11gg p u u
20.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作(按两次u)
11gg 5yy 8gg P u u
21.把13行到18行的内容移动文件的尾部,还原上一步操作(按两次u)
13gg 6dd G p u u
22.将文件中所有的/sbin/nologin为/bin/bash
:%s#/sbin/nologin#/bin/bash#g
23.在第一行下面插入新的一行,并输入"# Hello!"
gg o # Hello!
24.保存文档并退出
ZZ :x :wq
#根据文件回答下列习题
[root@BC ~]# cat proxy.conf
server {
Listen 8080;
Server_Name vim.OldboyEDU.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 = /proxy_error.html;
}
location = /proxy_error.html {
root /code/proxy;
}
}
25.使用vim打开proxy.conf文件
vim proxy.conf
26.修改Listen为listen小写,并将8080修改为80
2gg ~ xx
27.修改Server_Name为server_name小写。
3gg ~ ~
28.修改vim.OldboyEDU.com为vim.oldboy.com
3gg ~ ~ ~ ~
29.在server_name行下插入一行 root /code;
3gg o root /code;
30.复制5-14行的内容,然后将其粘贴到14行下面
5gg 10yy 14gg p
31.删除与proxy_set_header相关的两行全部删除
/proxy_set_header dd
32.如上操作完成后,在13-20行前面加上#号
视图模式
13gg
33.删除21-23的行,然后保存当前文件
:21,23d :wq
八、day13作业
1.什么是用户?
能够登录系统的就是用户
2.Linux与windows系统的用户有什么区别?
Linux支持多用户同时登录
Windows默认不支持同时多用户登录的
3.使用什么命令可以查看用户是否存在?
id user
grep \'user\' /etc/passwd
4.跟用户相关的配置文件都有哪些?分别存放的是什么?
/etc/passwd 用户基本信息 /etc/shadow 用户密码信息
5./etc/passwd文件以\':\' 为分割符, 分为7个字段,请说明一下每个字段的具体含义?
6./etc/shadow文件以\':\' 为分割符, 分为9个字段,请说明一下每个字段的具体含义?
7.什么是用户的UID?
用户自己独有的ID号码 编号
8.不同的用户对应UID号范围是多少?
约定
9.新建用户user1、user2,用户user2不允许登陆到系统中。
useradd user1
useradd -M -s /sbin/nologin
10.创建普通用户oldboy,其ID号为789.
useradd -u789 oldboy
11.创建虚拟用户test,其ID号为666
useradd -u666 -M -s /sbin/nologin test
12.修改oldboy用户的ID号,修改为777.
usermod -u 777 oldboy
13.修改用户test的命令解释器,使其可以登录到系统。
usermod -s /bin/bash test
14.删除用户user1.不删除其家目录。
userdel user1
15.删除用户user2,不保留其家目录。
userdel -r user2
16.给oldboy用户创建一个密码为123,并尝试登录。
echo "123" | passwd --stdin oldboy
17.默认情况下管理员创建了一个用户,就会在()目录下创建一个用户主目录
/home
18.如何检查系统中存在oldboy用户,并且显示用户id信息
id oldboy
grep oldboy /etc/passwd
19.创建gid为1666,名字为www的用户组
groupadd -g1666 www
20.创建uid为1666,gid为1666,名字为www的用户
useradd -u1666 -g1666 www
21.创建uid为1888,注释信息为"虚拟用户",不创建家目录,不能登录系统,名字为oldboyedu的用户
useradd -u1888 -c "虚拟用户" -M -s /sbin/nologin oldboyedu
22.批量创建10个用户,用户名为oldboy1 oldboy2 oldboy3 .... oldboy10.
[root@BC ~]# echo {1..10} |xargs -n1
1
2
3
4
5
6
7
8
9
10
[root@BC ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@BC ~]# seq 10 | awk \'{print "oldboy"$1}\'
oldboy1
oldboy2
oldboy3
oldboy4
oldboy5
oldboy6
oldboy7
oldboy8
oldboy9
oldboy10
[root@BC ~]# seq 10 | awk \'{print "useradd oldboy"$1}\'
useradd oldboy1
useradd oldboy2
useradd oldboy3
useradd oldboy4
useradd oldboy5
useradd oldboy6
useradd oldboy7
useradd oldboy8
useradd oldboy9
useradd oldboy10
[root@BC ~]# seq 10 | awk \'{print "useradd oldboy"$1}\' | bash
[root@BC ~]# tail /etc/passwd
oldboy1:x:1014:1014::/home/oldboy1:/bin/bash
oldboy2:x:1015:1015::/home/oldboy2:/bin/bash
oldboy3:x:1016:1016::/home/oldboy3:/bin/bash
oldboy4:x:1017:1017::/home/oldboy4:/bin/bash
oldboy5:x:1018:1018::/home/oldboy5:/bin/bash
oldboy6:x:1019:1019::/home/oldboy6:/bin/bash
oldboy7:x:1020:1020::/home/oldboy7:/bin/bash
oldboy8:x:1021:1021::/home/oldboy8:/bin/bash
oldboy9:x:1022:1022::/home/oldboy9:/bin/bash
oldboy10:x:1023:1023::/home/oldboy10:/bin/bash
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd \1#gp\'
useradd 1
useradd 2
useradd 3
useradd 4
useradd 5
useradd 6
useradd 7
useradd 8
useradd 9
useradd 10
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd oldboy\1#gp\'
useradd oldboy1
useradd oldboy2
useradd oldboy3
useradd oldboy4
useradd oldboy5
useradd oldboy6
useradd oldboy7
useradd oldboy8
useradd oldboy9
useradd oldboy10
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd oldboy\1#gp\' |bash
23.迁移oldboy8用户的家目录到/tmp/oldboy8
usermod -md /tmp/olsboy8 oldboy8
24.oldboy8用户的用户名修改成oldboy888
usermod -l oldboy888 oldboy8
25.锁定oldboy888用户,解锁oldboy888用户
usermod -L oldboy888
usermod -U oldboy888
26.创建普通用户test01、test02、test03,要求UID为2888,2999,2998
[root@BC ~]# echo -e "01 2888\n02 2999\n03 2998"
01 2888
02 2999
03 2998
[root@BC ~]# echo -e "01 2888\n02 2999\n03 2998" |awk \'{print "test"$1}\'
test01
test02
test03
[root@BC ~]# echo -e "01 2888\n02 2999\n03 2998" |awk \'{print $2"test"$1}\'
2888test01
2999test02
2998test03
[root@BC ~]# echo -e "01 2888\n02 2999\n03 2998" |awk \'{print $2" test"$1}\'
2888 test01
2999 test02
2998 test03
[root@BC ~]# echo -e "01 2888\n02 2999\n03 2998" |awk \'{print "useradd -u"$2" test"$1}\'
useradd -u2888 test01
useradd -u2999 test02
useradd -u2998 test03
[root@BC ~]# echo -e "01 2888\n02 2999\n03 2998" |awk \'{print "useradd -u"$2" test"$1}\' | bash
27.给test01用户使用交互式设置密码为123456
passwd test01
28.使用test01用户进行登录。
ssh test01@10.0.0.100
29.使用非交互式给test01设置密码为oldboy123
echo "oldboy123" | passwd --stdin test01
30.使用修改之后的密码进行登录。
ssh test01@10.0.0.100
31.有哪些命令可以查看当前用户的登录情况?
w who
32.删除用户test02,要求连家目录一起删除。
userdel -r test02
33.请问,我删除了test02用户,哪个文件会发生变化?
/etc/passwd /etc/shadow /etc/group /etc/gshadow
34.创建一个虚拟用户oldboy01,要求UID为555,不创建家目录。
useradd -u555 -M -s /sbin/nologin
35.创建用户时,不指定选项设置参数了,系统创建之后的默认参数是根据什么文件来定义的?
/etc/login.defs
/etc/default/useradd
36.切换普通用户时,出现这样的命令行"-bash-4.1$",这是什么原因造成的,该怎么解决?
家目录不存在
家目录里面配置文件不存在
cp -a /etc/skel/.bash* ./
37.登录到test01用户,给其用户test03设置密码,发现报错,请问是什么原因?该怎么解决?
普通用户只能给自己设置密码
38.登录到test01用户,给其本用户设置密码为123,报错,请问是什么原因?该怎么解决?
普通用户设置密码至少要8位 并且不能有规律
39.使用root用户给test01用户设置一个18位的随机密码,并进行登录。
echo $RANDOM | md5sum | cut -c 1-18 | tee pass.txt | passwd --stdin test01
mkpasswd -l 18
40.创建10个用户,前缀是你的姓,后缀为数字序列,比如qiu1等,并设置随机密码,一条命令实现(能否使用多种方法实现)。
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd oldboy\1#gp\'
useradd oldboy1
useradd oldboy2
useradd oldboy3
useradd oldboy4
useradd oldboy5
useradd oldboy6
useradd oldboy7
useradd oldboy8
useradd oldboy9
useradd oldboy10
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd oldboy\1 && mkpasswd -l 18 |tee pass\1\.txt | passwd --stdin oldboy\1#gp\'
useradd oldboy1 11 mkpasswd -l 18 |tee pass1.txt | passwd --stdin oldboy1
useradd oldboy2 22 mkpasswd -l 18 |tee pass2.txt | passwd --stdin oldboy2
useradd oldboy3 33 mkpasswd -l 18 |tee pass3.txt | passwd --stdin oldboy3
useradd oldboy4 44 mkpasswd -l 18 |tee pass4.txt | passwd --stdin oldboy4
useradd oldboy5 55 mkpasswd -l 18 |tee pass5.txt | passwd --stdin oldboy5
useradd oldboy6 66 mkpasswd -l 18 |tee pass6.txt | passwd --stdin oldboy6
useradd oldboy7 77 mkpasswd -l 18 |tee pass7.txt | passwd --stdin oldboy7
useradd oldboy8 88 mkpasswd -l 18 |tee pass8.txt | passwd --stdin oldboy8
useradd oldboy9 99 mkpasswd -l 18 |tee pass9.txt | passwd --stdin oldboy9
useradd oldboy10 1010 mkpasswd -l 18 |tee pass10.txt | passwd --stdin oldboy10
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd oldboy\1 \&\& mkpasswd -l 18 |tee pass\1\.txt | passwd --stdin oldboy\1#gp\'
useradd oldboy1 && mkpasswd -l 18 |tee pass1.txt | passwd --stdin oldboy1
useradd oldboy2 && mkpasswd -l 18 |tee pass2.txt | passwd --stdin oldboy2
useradd oldboy3 && mkpasswd -l 18 |tee pass3.txt | passwd --stdin oldboy3
useradd oldboy4 && mkpasswd -l 18 |tee pass4.txt | passwd --stdin oldboy4
useradd oldboy5 && mkpasswd -l 18 |tee pass5.txt | passwd --stdin oldboy5
useradd oldboy6 && mkpasswd -l 18 |tee pass6.txt | passwd --stdin oldboy6
useradd oldboy7 && mkpasswd -l 18 |tee pass7.txt | passwd --stdin oldboy7
useradd oldboy8 && mkpasswd -l 18 |tee pass8.txt | passwd --stdin oldboy8
useradd oldboy9 && mkpasswd -l 18 |tee pass9.txt | passwd --stdin oldboy9
useradd oldboy10 && mkpasswd -l 18 |tee pass10.txt | passwd --stdin oldboy10
[root@BC ~]# seq 10 | sed -nr \'s#(.*)#useradd old\1 \&\& mkpasswd -l 18 |tee pass\1\.txt | passwd --stdin oldboy\1#gp\' |bash
Changing password for user oldboy1.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy2.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy3.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy4.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy5.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy6.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy7.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy8.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy9.
passwd: all authentication tokens updated successfully.
Changing password for user oldboy10.
passwd: all authentication tokens updated successfully.
[root@BC ~]# ll
total 61148
-rw-r--r--. 1 root root 39 Jul 17 19:16 123.txt
-rw-r--r--. 1 root root 9272936 Jul 17 12:01 access.log
-rw-r--r--. 1 root root 28 Jul 17 20:12 oldboy.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass10.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass1.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass2.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass3.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass4.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass5.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass6.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass7.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass8.txt
-rw-r--r-- 1 root root 19 Jul 22 12:20 pass9.txt
[root@BC ~]# seq 10 | awk \'{print "useradd boy"$1" && mkpasswd -l 18 |tee -a pass.log | passwd --stdin boy"$1}\' |bash
Changing password for user boy1.
passwd: all authentication tokens updated successfully.
Changing password for user boy2.
passwd: all authentication tokens updated successfully.
Changing password for user boy3.
passwd: all authentication tokens updated successfully.
Changing password for user boy4.
passwd: all authentication tokens updated successfully.
Changing password for user boy5.
passwd: all authentication tokens updated successfully.
Changing password for user boy6.
passwd: all authentication tokens updated successfully.
Changing password for user boy7.
passwd: all authentication tokens updated successfully.
Changing password for user boy8.
passwd: all authentication tokens updated successfully.
Changing password for user boy9.
passwd: all authentication tokens updated successfully.
Changing password for user boy10.
passwd: all authentication tokens updated successfully.
[root@BC ~]# cat pass.log
yekvpfdmF+3anweKd0
4nyyrwkUM>u3jlcgvi
jw5vczapnuplG5vVv<
mJaebjb9cxapL+1yjf
vvdyshXNkzc1qq4wg*
lmlGubcwrs9(Whq6wf
rbm/kwxbwdufAU55cx
g=mzhdgY6osysgLnf5
nany5srVjnf9emFpi*
fV5sn0qzm}kaMzgsux
41.创建10个用户,前缀是你的名,后缀为数字序列,比如BC1等,并给其10个用户设置统一密码为123456,最后尝试是否可以登录。
[root@BC ~]# seq 10 | awk \'{print "useradd boy"$1" && echo \'123456\' | passwd --stdin boy"$1}\' |bash
Changing password for user boy1.
passwd: all authentication tokens updated successfully.
Changing password for user boy2.
passwd: all authentication tokens updated successfully.
Changing password for user boy3.
passwd: all authentication tokens updated successfully.
Changing password for user boy4.
passwd: all authentication tokens updated successfully.
Changing password for user boy5.
passwd: all authentication tokens updated successfully.
Changing password for user boy6.
passwd: all authentication tokens updated successfully.
Changing password for user boy7.
passwd: all authentication tokens updated successfully.
Changing password for user boy8.
passwd: all authentication tokens updated successfully.
Changing password for user boy9.
passwd: all authentication tokens updated successfully.
Changing password for user boy10.
passwd: all authentication tokens updated successfully.
42.创建用户qiudao,并给其用户设置一个24位的随机密码,要求密码包含数字,大小写字母及特殊符号,最后查看是否可以登录。
useradd qiudao
mkpasswd -l 24 -d 6 -c 6 -C 6 -s 6 | tee pass.txt | passwd --stdin qiudao
43.跟组相关的两个配置文件是?
/etc/group
/etc/gshadow
44.创建一个用户基本组,shanghai01.
groupadd shanghai01
45.创建一个用户基本组,shanghai02,指定GID为1099.
groupadd -g1099 shanghai02
46.创建一个用户系统组,shanghai03.
groupadd -r shanghai03
47.修改用户基本组shanghai02的GID号为1033.
groupmod -g 1033 shanghai02
2020年07月23日上午(day15)
一、权限的基本概述
1.什么是权限
系统对用户所能执行的功能的限制
2.为什么要有权限~
为了保护每个用户的自己的工作环境和隐私
3.权限跟用户有什么关系
属主 User u
属组 Group g
其他人 others o
a 所有
对应了三个基础权限
r 可读 readable 4
w 可写 writable 2
x 可执行 executable 1
- 没有权限 权限位占位符 0
[root@jh ~]# ls -l
total 61152
-rw-r--r--. 1 root root 39 Jul 17 19:16 123.txt
-rw-r--r--. 1 root root 9272936 Jul 17 12:01 access.log
- rw- r-- r-- 644
文件的类型 属主 属组 匿名
每三个为一组
第一个对应 可读 r
第二个对应 可写 w
第三个对应 可执行 x
没有此权限则用-代替
4.为什么要设置权限,如何设置权限
设置某个用户对于系统的某个资源拥有什么样管理权力
chmod #设置权限的命令
选项:
-R #针对目录设置权限 赋予目录及目录以下所有文件的权限
只有root管理员才可以修改任何人的权限 普通用户只能修改自己的权限
二、权限的设置案列
-rwxrw-r-- test01 dev file.txt
test01 user01属于dev组 jh01属于jh01组
三个用户分别对这个文件拥有什么权限
test01是文件的所有者 可读 可写 可执行权限
user01属于dev组,dev组所拥有的权限,user01同样拥有 可读 可写 权限
jh01不属于dev组,对于此文件来说,就是一个陌生人 拥有匿名用户的权限 可读
判断一个用户对一个文件拥有什么权限
1. 系统会判断该用户是否为所有者,如果是,则按照属主的权限进行访问
2. 如果不是所有者,则判断该用户是否为所属组,如果是,则按照所属组的权限进行访问
3. 如果此用户不是所有者,也不是所属组,则按照匿名用户进行访问
修改权限的两种方法:
字母进行修改
u 属主
g 属组
o 匿名用户
a 所有用户
权限字母
r 可读
w 可写
x 可执行
- 没有权限
赋予的方式
+ #添加权限
- #收回某个权限
= #覆盖之前的权限
#添加权限
[root@jh ~]# ll
total 4
-rw-r--r-- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod u+x hosts
[root@jh ~]# ll
total 4
-rwxr--r-- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod g+wx hosts
[root@jh ~]# ll
total 4
-rwxrwxr-- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod o+w hosts
[root@jh ~]# ll
total 4
-rwxrwxrw- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod a+x hosts
[root@jh ~]# ll
total 4
-rwxrwxrwx 1 root root 158 Jul 23 09:06 hosts
#收回权限
#a可以省略
[root@jh ~]# chmod -x hosts
[root@jh ~]# ll
total 4
-rw-rw-rw- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod u-w hosts
[root@jh ~]# ll
total 4
-r--rw-rw- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod g-w,o-rw hosts
[root@jh ~]# ll
total 4
-r--r----- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]#
#覆盖之前的所有权限
[root@jh ~]# chmod a=rw hosts
[root@jh ~]# ll
total 4
-rw-rw-rw- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# chmod o=- hosts
[root@jh ~]# ll
total 4
-rw-rw---- 1 root root 158 Jul 23 09:06 hosts
根据数字进行修改 会把原来的权限全部覆盖掉
-R #给目录的权限及目录以下的所有文件或者子目录都设置统一权限
[root@jh ~]# chmod 644 hosts
[root@jh ~]# ll
total 4
-rw-r--r-- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# mkdir data
[root@jh ~]# ll
total 4
drwxr-xr-x 2 root root 6 Jul 23 09:35 data
-rw-r--r-- 1 root root 158 Jul 23 09:06 hosts
[root@jh ~]# cp /etc/hosts data/
[root@jh ~]# ll data/
total 4
-rw-r--r-- 1 root root 158 Jul 23 09:35 hosts
[root@jh ~]# ll -d data/
drwxr-xr-x 2 root root 19 Jul 23 09:35 data/
[root@jh ~]# chmod 700 data/
[root@jh ~]# ll -d data/
drwx------ 2 root root 19 Jul 23 09:35 data/
[root@jh ~]# ll data/
total 4
-rw-r--r-- 1 root root 158 Jul 23 09:35 hosts
[root@jh ~]# chmod -R 755 data/
[root@jh ~]# ll -d data/
drwxr-xr-x 2 root root 19 Jul 23 09:35 data/
[root@jh ~]# ll data/
total 4
-rwxr-xr-x 1 root root 158 Jul 23 09:35 hosts
#权限设置案例
/opt/test 针对于此目录
属主为root 属组为dev dev01 dev02
属主拥有所有权限
属组拥有可读 可写权限
其他人没有任何权限
[root@jh ~]# mkdir /opt/test
[root@jh ~]# ll /opt/
total 0
drwxr-xr-x 2 root root 6 Jul 23 09:40 test
[root@jh ~]# groupadd dev
[root@jh ~]# chgrp dev /opt/test/
[root@jh ~]# ll /opt/
total 0
drwxr-xr-x 2 root dev 6 Jul 23 09:40 test
[root@jh ~]# chmod 760 /opt/test/
[root@jh ~]# ll /opt/
total 0
drwxrw---- 2 root dev 6 Jul 23 09:40 test
三、权限的文件或者目录的影响
权限对文件或者目录的影响
权限 文件 目录
r 可以查看文件内容 cat head tail 浏览目录及子目录的列表 ls tree
w 可以新增,修改文件内容的权利 vim echo > >> 可以新建或者删除,移动目录中的文件的权利
x 可以执行文件的权利 脚本 可以进入目录 cd
四、文件权限设置案列
r权限
[root@jh ~]# echo "hostname" >> /opt/file.txt
[root@jh ~]# ll /opt/
total 4
-rw-r--r-- 1 root root 9 Jul 23 09:57 file.txt
[root@jh ~]# useradd jh01
[root@jh ~]#
[root@jh ~]# echo "1" | passwd --stdin jh01
Changing password for user jh01.
passwd: all authentication tokens updated successfully.
[root@jh ~]# su - jh01
Last login: Thu Jul 23 09:59:14 CST 2020 on pts/0
[jh01@jh ~]$ ll /opt/
total 4
-rw-r--r-- 1 root root 9 Jul 23 09:57 file.txt
drwxrw---- 2 root dev 6 Jul 23 09:40 test
[jh01@jh ~]$ cat /opt/file.txt
hostname
[jh01@jh ~]$ head /opt/file.txt
hostname
[jh01@jh ~]$ tail /opt/file.txt
hostname
[jh01@jh ~]$ vim /opt/file.txt
[jh01@jh ~]$ echo "123" >> /opt/file.txt
-bash: /opt/file.txt: Permission denied
[jh01@jh ~]$ /opt/file.txt
-bash: /opt/file.txt: Permission denied
#文件只有r权限时,是可以正常查看文件内容的,不可以修改或者执行文件的权限
w权限
[root@jh ~]# chmod o=w /opt/file.txt
[root@jh ~]# ll /opt/file.txt
-rw-r---w- 1 root root 9 Jul 23 09:57 /opt/file.txt
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:00:14 CST 2020 on pts/0
[jh01@jh ~]$ cat /opt/file.txt
cat: /opt/file.txt: Permission denied
[jh01@jh ~]$ vim /opt/file.txt
[jh01@jh ~]$ cat /opt/file.txt
cat: /opt/file.txt: Permission denied
[jh01@jh ~]$ /opt/file.txt
-bash: /opt/file.txt: Permission denied
[root@jh ~]# cat /opt/file.txt
uirethruie
[jh01@jh ~]$ echo "test" >> /opt/file.txt
[jh01@jh ~]$ echo "test" > /opt/file.txt
[root@jh ~]# cat /opt/file.txt
uirethruie
test
[root@jh ~]# cat /opt/file.txt
test
#只有w权限时, 无法查看和执行文件的权限 使用vim编辑文件文件时,无法查看里面的内容,可以进行编辑,但是需要强制保存,但是保存之后,原来的内容被覆盖了 可以使用echo命令进行追加或者重定向内容进去
x权限
[root@jh ~]# chmod o=x /opt/file.txt
[root@jh ~]# ll /opt/file.txt
-rw-r----x 1 root root 5 Jul 23 10:09 /opt/file.txt
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:08:38 CST 2020 on pts/0
[jh01@jh ~]$ ll /opt/file.txt
-rw-r----x 1 root root 5 Jul 23 10:09 /opt/file.txt
[jh01@jh ~]$ cat /opt/file.txt
cat: /opt/file.txt: Permission denied
[jh01@jh ~]$ echo "123" >> /opt/file.txt
-bash: /opt/file.txt: Permission denied
[jh01@jh ~]$ /opt/file.txt
bash: /opt/file.txt: Permission denied
#文件只有x权限 什么都干不了
rw权限
[root@jh ~]# chmod o=rw /opt/file.txt
[root@jh ~]# ll /opt/file.txt
-rw-r--rw- 1 root root 5 Jul 23 10:09 /opt/file.txt
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:11:27 CST 2020 on pts/0
[jh01@jh ~]$ cat /opt/file.txt
test
[jh01@jh ~]$ echo "hostname" > /opt/file.txt
[jh01@jh ~]$ vim /opt/file.txt
[jh01@jh ~]$ cat /opt/file.txt
hostname
pwd
[jh01@jh ~]$ /opt/file.txt
-bash: /opt/file.txt: Permission denied
#经过测试,文件w权限需要r权限的配合 才能正常的修改文件内容
rx权限
[root@jh ~]# chmod o=rx /opt/file.txt
[root@jh ~]# ll /opt/file.txt
-rw-r--r-x 1 root root 13 Jul 23 10:14 /opt/file.txt
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:14:16 CST 2020 on pts/0
[jh01@jh ~]$ cat /opt/file.txt
hostname
pwd
[jh01@jh ~]$ echo "123" > /opt/file.txt
-bash: /opt/file.txt: Permission denied
[jh01@jh ~]$ vim /opt/file.txt
[jh01@jh ~]$ /opt/file.txt
jh
/home/jh01
#经过测试,文件的x权限需要r权限的配合
wx权限 没有什么用处
rwx权限 权限太大
Permission denied #权限不足 没有权限
总结: 权限对文件的影响
1)#当文件只有r权限时,是可以正常查看文件内容的,不可以修改或者执行文件的权限
2)#只有w权限时, 无法查看和执行文件的权限 使用vim编辑文件文件时,无法查看里面的内容,可以进行编辑,但是需要强制保存,但是保存之后,原来的内容被覆盖了 可以使用echo命令进行追加或者重定向内容进去
3)#文件只有x权限 什么都干不了
4)#经过测试,文件w权限需要r权限的配合 才能正常的修改文件内容
5)#经过测试,文件的x权限需要r权限的配合
6)#wx权限 没有什么用处
6)#rwx权限 权限太大
五、目录权限设置案列
权限对目录的影响
r权限 具有可以浏览目录及其子目录下的列表 属性信息
[root@jh ~]# chmod o=r /opt/test/
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw-r-- 2 root root 6 Jul 23 09:40 test
[root@jh ~]# touch /opt/test/data.{txt,log,sh}
[root@jh ~]# mkdir /opt/test/oldboy{01..03}
[root@jh ~]# ll /opt/test/
total 0
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.log
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.sh
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.txt
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy01
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy02
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy03
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:51:09 CST 2020 on pts/0
[jh01@jh ~]$ ls /opt/test/
ls: cannot access /opt/test/data.txt: Permission denied
ls: cannot access /opt/test/data.log: Permission denied
ls: cannot access /opt/test/data.sh: Permission denied
ls: cannot access /opt/test/oldboy01: Permission denied
ls: cannot access /opt/test/oldboy02: Permission denied
ls: cannot access /opt/test/oldboy03: Permission denied
data.log data.sh data.txt oldboy01 oldboy02 oldboy03
[jh01@jh ~]$ ls -l /opt/test/
ls: cannot access /opt/test/data.txt: Permission denied
ls: cannot access /opt/test/data.log: Permission denied
ls: cannot access /opt/test/data.sh: Permission denied
ls: cannot access /opt/test/oldboy01: Permission denied
ls: cannot access /opt/test/oldboy02: Permission denied
ls: cannot access /opt/test/oldboy03: Permission denied
total 0
-????????? ? ? ? ? ? data.log
-????????? ? ? ? ? ? data.sh
-????????? ? ? ? ? ? data.txt
d????????? ? ? ? ? ? oldboy01
d????????? ? ? ? ? ? oldboy02
d????????? ? ? ? ? ? oldboy03
[jh01@jh ~]$ rm -f /opt/test/data.log
rm: cannot remove ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ touch /opt/test/data.conf
touch: cannot touch ‘/opt/test/data.conf’: Permission denied
[jh01@jh ~]$ mv /opt/test/data.log /tmp
mv: cannot stat ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ cd /opt/test/
-bash: cd: /opt/test/: Permission denied
[jh01@jh ~]$ tree /opt/test/ #没有任何统计
/opt/test/
0 directories, 0 files
#目录只有r权限,使用ls -l命令查看目录下的列表,会出现一堆的权限不足,但是文件名和文件类型显示出来了,其他的属性信息都是问号 不能对此目录下的文件进行新建或者删除及其移动的操作 也不能切换到这个目录
w权限
[root@jh ~]# chmod o=w /opt/test/
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw--w- 5 root root 101 Jul 23 10:51 test
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:52:22 CST 2020 on pts/0
[jh01@jh ~]$ ls /opt/test/
ls: cannot open directory /opt/test/: Permission denied
[jh01@jh ~]$ ls -l /opt/test/
ls: cannot open directory /opt/test/: Permission denied
[jh01@jh ~]$ cd /opt/test/
-bash: cd: /opt/test/: Permission denied
[jh01@jh ~]$ touch /opt/test/123.txt
touch: cannot touch ‘/opt/test/123.txt’: Permission denied
[jh01@jh ~]$ rm -f /opt/test/data.log
rm: cannot remove ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ mv /opt/test/data.log /tmp/
mv: cannot stat ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ cp /opt/test/data.log /tmp
cp: cannot stat ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ cp /opt/test/data.log /tmp
cp: cannot stat ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ mv /opt/test/data.log /tmp/
mv: cannot stat ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ rm -f /opt/test/data.log
rm: cannot remove ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ ll -d /opt/
drwxrwxrwx 3 root root 34 Jul 23 09:57 /opt/
#只有w权限时,目录什么都做不了
x权限 进入目录
[root@jh ~]# su - jh01
Last login: Thu Jul 23 10:57:51 CST 2020 on pts/0
[jh01@jh ~]$ cd /opt/test/
[jh01@jh test]$ ls
ls: cannot open directory .: Permission denied
[jh01@jh test]$ ls -l
ls: cannot open directory .: Permission denied
[jh01@jh test]$ rm -f data.log
rm: cannot remove ‘data.log’: Permission denied
[jh01@jh test]$ touch data.conf
touch: cannot touch ‘data.conf’: Permission denied
[jh01@jh test]$ mv data.log /tmp/
mv: cannot move ‘data.log’ to ‘/tmp/data.log’: Permission denied
[jh01@jh test]$ cp data.log /tmp/
[jh01@jh test]$ ll /tmp/
total 4
drwxr-xr-x. 2 root root 51 Jul 17 17:59 data1
drwxr-xr-x. 2 root root 51 Jul 17 17:59 data2
drwxr-xr-x. 2 root root 51 Jul 17 17:59 data3
-rw-r--r-- 1 jh01 jh01 0 Jul 23 11:03 data.log
#目录只有x权限时,可以切换到目录中,无法查看目录列表信息 也无法进行删除、新建、移动等操作 可以进行复制操作
rw权限
[root@jh ~]# chmod o=rw /opt/test/
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw-rw- 5 root root 101 Jul 23 10:51 test
[root@jh ~]# su - jh01
Last login: Thu Jul 23 11:06:21 CST 2020 on pts/0
[jh01@jh ~]$ cd /opt/test/
-bash: cd: /opt/test/: Permission denied
[jh01@jh ~]$ ls /opt/test/
ls: cannot access /opt/test/data.txt: Permission denied
ls: cannot access /opt/test/data.log: Permission denied
ls: cannot access /opt/test/data.sh: Permission denied
ls: cannot access /opt/test/oldboy01: Permission denied
ls: cannot access /opt/test/oldboy02: Permission denied
ls: cannot access /opt/test/oldboy03: Permission denied
data.log data.sh data.txt oldboy01 oldboy02 oldboy03
[jh01@jh ~]$ ls -l /opt/test/
ls: cannot access /opt/test/data.txt: Permission denied
ls: cannot access /opt/test/data.log: Permission denied
ls: cannot access /opt/test/data.sh: Permission denied
ls: cannot access /opt/test/oldboy01: Permission denied
ls: cannot access /opt/test/oldboy02: Permission denied
ls: cannot access /opt/test/oldboy03: Permission denied
total 0
-????????? ? ? ? ? ? data.log
-????????? ? ? ? ? ? data.sh
-????????? ? ? ? ? ? data.txt
d????????? ? ? ? ? ? oldboy01
d????????? ? ? ? ? ? oldboy02
d????????? ? ? ? ? ? oldboy03
[jh01@jh ~]$ touch /opt/test/data.conf
touch: cannot touch ‘/opt/test/data.conf’: Permission denied
[jh01@jh ~]$ rm -f /opt/test/data.log
rm: cannot remove ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ mv /opt/test/data.log /tmp/
mv: cannot stat ‘/opt/test/data.log’: Permission denied
[jh01@jh ~]$ cp /opt/test/data.txt /tmp/
cp: cannot stat ‘/opt/test/data.txt’: Permission denied
#rw权限 跟只有r权限作用是一样的
rx权限
[root@jh ~]# chmod o=rx /opt/test/
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw-r-x 5 root root 101 Jul 23 10:51 test
[root@jh ~]# su - jh01
Last login: Thu Jul 23 11:10:14 CST 2020 on pts/0
[jh01@jh ~]$ cd /opt/test/
[jh01@jh test]$ ls
data.log data.sh data.txt oldboy01 oldboy02 oldboy03
[jh01@jh test]$ ls -l
total 0
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.log
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.sh
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.txt
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy01
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy02
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy03
[jh01@jh test]$ touch data.conf
touch: cannot touch ‘data.conf’: Permission denied
[jh01@jh test]$ rm -f data.log
rm: cannot remove ‘data.log’: Permission denied
[jh01@jh test]$ mv data.txt /tmp/
mv: cannot move ‘data.txt’ to ‘/tmp/data.txt’: Permission denied
[jh01@jh test]$ cp data.txt /tmp/
[jh01@jh test]$ ll /tmp/
total 4
drwxr-xr-x. 2 root root 51 Jul 17 17:59 data1
drwxr-xr-x. 2 root root 51 Jul 17 17:59 data2
drwxr-xr-x. 2 root root 51 Jul 17 17:59 data3
-rw-r--r-- 1 jh01 jh01 0 Jul 23 11:03 data.log
-rw-r--r-- 1 jh01 jh01 0 Jul 23 11:13 data.txt
#目录拥有rx权限时,可以正常的查看目录列表信息,属性信息,也可以进入目录,可以复制文件到其他目录,但是不能执行新建、删除、移动等操作
wx权限
[root@jh ~]# chmod o=wx /opt/test/
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw--wx 5 root root 101 Jul 23 10:51 test
[root@jh ~]# su - jh01
Last login: Thu Jul 23 11:12:31 CST 2020 on pts/0
[jh01@jh ~]$ cd /opt/test/
[jh01@jh test]$ ls
ls: cannot open directory .: Permission denied
[jh01@jh test]$ touch 123.txt
[jh01@jh test]$ ls
ls: cannot open directory .: Permission denied
[jh01@jh test]$ rm -f data.log
[jh01@jh test]$ mv data.txt /tmp/
[jh01@jh test]$ ls
ls: cannot open directory .: Permission denied
#目录拥有wx权限时,可以进入目录,可以新建,删除、移动文件的权利 但是查看不了目录的列表及属性信息
总结: 权限对目录的影响
1)#r权限 具有可以浏览目录及其子目录下的列表 属性信息
2)#只有w权限时,目录什么都做不了
3)#目录只有x权限时,可以切换到目录中,无法查看目录列表信息 也无法进行删除、新建、移动等操作 可以进行复制操作
4)#rw权限 跟只有r权限作用是一样的
5)#目录拥有rx权限时,可以正常的查看目录列表信息,属性信息,也可以进入目录,可以复制文件到其他目录,但是不能执行新建、删除、移动等操作
6)#目录拥有wx权限时,可以进入目录,可以新建,删除、移动文件的权利 但是查看不了目录的列表及属性信息
ps:对目录设置权限时,不能离开x权限
对文件设置权限时,不能离开r权限
六、属主属组设置
chown #设置属主属组 只有root管理员才可以进行设置
选项:
-R #递归设置 设置目录及其目录以下的所有文件
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw--wx 5 root root 84 Jul 23 11:17 test
[root@jh ~]# chown jh01 /opt/file.txt #默认设置的是属主
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 jh01 root 13 Jul 23 10:14 file.txt
drwxrw--wx 5 root root 84 Jul 23 11:17 test
[root@jh ~]# chown .jh01 /opt/file.txt #设置属组
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 jh01 jh01 13 Jul 23 10:14 file.txt
drwxrw--wx 5 root root 84 Jul 23 11:17 test
[root@jh ~]# chown root.root /opt/file.txt #同时设置属主属组
[root@jh ~]# ll /opt/
total 4
-rw-r--r-x 1 root root 13 Jul 23 10:14 file.txt
drwxrw--wx 5 root root 84 Jul 23 11:17 test
[root@jh ~]# chown jh01.jh01 /opt/test/ #只设置目录
[root@jh ~]# ll -d /opt/test/
drwxrw--wx 5 jh01 jh01 84 Jul 23 11:17 /opt/test/
[root@jh ~]# ll /opt/test/
total 0
-rw-rw-r-- 1 jh01 jh01 0 Jul 23 11:17 123.txt
-rw-r--r-- 1 root root 0 Jul 23 10:51 data.sh
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy01
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy02
drwxr-xr-x 2 root root 6 Jul 23 10:51 oldboy03
[root@jh ~]# chown -R jh01.jh01 /opt/test/ #递归设置
[root@jh ~]# ll /opt/test/
total 0
-rw-rw-r-- 1 jh01 jh01 0 Jul 23 11:17 123.txt
-rw-r--r-- 1 jh01 jh01 0 Jul 23 10:51 data.sh
drwxr-xr-x 2 jh01 jh01 6 Jul 23 10:51 oldboy01
drwxr-xr-x 2 jh01 jh01 6 Jul 23 10:51 oldboy02
drwxr-xr-x 2 jh01 jh01 6 Jul 23 10:51 oldboy03
chgrp #设置属组
[root@jh ~]# chgrp root /opt/test/
[root@jh ~]# ll -d /opt/test/
drwxrw--wx 5 jh01 root 84 Jul 23 11:17 /opt/test/
七、Umask权限控制
[root@jh ~]# ll
total 4
drwxr-xr-x 2 root root 6 Jul 23 11:21 123
-rw-r--r-- 1 root root 0 Jul 23 11:21 123.txt
系统中为什么新创建的目录的权限为755,文件的权限为644
都是由系统的控制权限所控制的
umask #控制权限的命令
[root@jh ~]# umask
0022
系统中是如何计算权限
系统新创建的目录的权限由最大权限777减去umask控制权限022得到的就是755,所以说新创建的目录的权限为755,新创建文件的权限由文件最大权限666减去umask控制权限022,得到644权限,所以说新创建的文件的权限为644,当文件权限遇到奇数时,在奇数为加一
[root@jh ~]# umask
0022
[root@jh ~]# umask 033
[root@jh ~]# umask
0033
[root@jh ~]# mkdir oldboy
[root@jh ~]# ll
total 4
drwxr-xr-x 2 root root 6 Jul 23 11:21 123
-rw-r--r-- 1 root root 0 Jul 23 11:21 123.txt
drwxr--r-- 2 root root 6 Jul 23 12:02 oldboy
[root@jh ~]# touch oldboy.txt
[root@jh ~]# ll
total 4
drwxr-xr-x 2 root root 6 Jul 23 11:21 123
-rw-r--r-- 1 root root 0 Jul 23 11:21 123.txt
drwxr--r-- 2 root root 6 Jul 23 12:02 oldboy
-rw-r--r-- 1 root root 0 Jul 23 12:02 oldboy.txt
八、day14作业详解
1.删除用户基本组shanghai03。发现无法正常删除,怎样才能将其删除掉,不能删除用户。
把当前所属该基本组的用户转到另外基本组就可以删除了
2.打开多个xshell窗口连接登录同一虚拟机,使用不同的用户登录多次,分别使用w和who命令显示当前系统上的所有已经登录的用户,取出用户名这一列,注意:同一个用户登录多次,则只显示一次即可。
[root@BC ~]# who |awk \'{print $1}\' |sort |uniq
jhno1
root
[root@BC ~]# w |sed \'1,2d\' |awk \'{print $1}\' |sort|uniq
jhno1
root
3.创建用户olddir,其ID号为1005,基本组为old
[root@BC ~]# groupadd old
[root@BC ~]# useradd -u 1005 -g old olddir
4.显示当前登录的用户的UID号,你有几种方法实现?
[root@BC ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@BC ~]# grep \'^root\' /etc/passwd
root:x:0:0:root:/root:/bin/bash
5.对于用户来说,组有几种类别?有什么区别?
基本组 #一个用户只能拥有一个基本组
附加组 #当基本组的权限不够用户使用的,就出现了附加组 一个用户允许拥有多个附加组
6./etc/group文件以:为分隔符,分为四列,解释其每列的含义?
第一列:组的名称
第二列:组的密码占位符
第三列:组的GID
第四列:用户名,哪些用户名使用此组作为附属组
7./etc/gshadow文件以:为分隔符,分为四列,解释其每列的含义?
第一列:组的名称
第二列:用户组的密码信息
第三列:用户组的管理者
第四列:用户名,哪些用户名使用此组作为附属组
8.如果想从root用户切换到普通用户,使用什么命令?
[root@BC ~]# su - 用户名
[root@BC ~]# sudo su - 用户名
9.切换到普通用户后,想返回到root用户,怎么做?有几种方法,有什么区别?
[jhno1@BC ~]$ sudo su - 切换回root用户,所在位置为root的家目录
[jhno1@BC ~]$ su - 切换回root用户,所在位置为普通用户的家目录
10.Shell主要分为哪几类?
交互式shell #终端操作 输入一条指令,需要等待系统的处理及返回结果
非交互式shell #脚本的执行方式就是 用户执行完指令 不需要跟系统进行交互
登录式shell #通过用户名和密码的方式进行登录的
非登录式shell #不是通过用户名和密码的方式进行登录的 执行一个bash,就是一个非登录式shell
11.Bash Shell的个人及全局配置文件有哪些?哪个优先级别高?
个人配置文件:/etc/profile 、/etc/bashrc、/etc/profile.d/*.sh
全局配置文件:/root/.bashrc、/root/.bash_profile
个人配置文件优先级最高
12.登录式Shell配置文件执行顺序?
/etc/profile>/etc/profile.d/*.sh>.bash_profile>.bashrc>/etc/bashrc
13.非登录式shell配置文件执行顺序?
.bashrc >/etc/bashrc>/etc/profile.d/*.sh
14.在root用户下,以普通用户身份执行"pwd"命令。
[root@jh ~]# su - jh01 -c "pwd"
/home/jh01
15.什么是sudo?
用来提权 给普通用户提权
16.可以根据哪个文件对sudo提权?
/etc/sudoers
17.登录到普通用户,查看/etc/shadow文件的内容,发现查看不了,怎么办?
[root@BC ~]# visudo
BC ALL=(ALL) /bin/cat /etc/shadow
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
[root@BC ~]# su - BC
Last login: Wed Jul 22 16:10:13 CST 2020 on pts/2
[BC@BC ~]$ sudo cat /etc/shadow 就可以查看了
18.登录到普通用户,删除/opt目录,若无法删除,该怎么解决?
[root@BC ~]# visudo
BC ALL=(ALL) /bin//bin/rm
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
[root@BC ~]# su - BC
Last login: Wed Jul 22 16:10:13 CST 2020 on pts/2
[BC@BC ~]$sudo rm -rf /opt 就可以删除了
19.登录到普通用户,使用sudo命令时,不想输出密码,怎么解决?
[root@BC ~]# visudo
BC ALL=(ALL) NOPASSWD:/bin//bin/rm
[root@BC ~]# visudo -c
/etc/sudoers: parsed OK
[root@BC ~]# su - BC
Last login: Wed Jul 22 16:10:13 CST 2020 on pts/2
[BC@BC ~]$sudo rm -rf /opt
20.怎样查看普通用户的sudo权限?
[BC@BC ~]$ sudo -l
21.配置好了sudo授权,怎么检查语法是否正确?
[root@BC ~]# visudo -c
22.禁止root用户远程登录,怎么实现?
[root@BC ~]# vim /etc/ssh/sshd_config
38gg
进入编辑模式改成
PermitRootLogin no
:wq保存退出
[root@BC ~]# systemctl restart sshd
23.修改远程连接端口号为2222,然后进行登录?
[root@BC ~]# vim /etc/ssh/sshd_config
17gg
进入编辑模式改成
Port 2222
:wq保存退出
[root@BC ~]# systemctl restart sshd
24.把对sshd的设置修改成原来的设置。
[root@BC ~]# vim /etc/ssh/sshd_config
进入编辑模式改成
#PermitRootLogin yes
#Port 22
:wq保存退出
[root@BC ~]# systemctl restart sshd
25.说出下面几个特殊符号的含义 * > >> # .. . ^ $ `` !
* #所有
> #标准输出重定向 会清空文件的内容之后再将你的内容重定向进去
>> #标准输出追加重定向 不会清空文件的内容,将文件内容追加到文件的底部
# #注释 管理员命令行提示符
.. #当前目录的上一级目录
. #当前目录
^ #逻辑概念 开头
$ #结尾 最后一行
`` #优先执行反引号里面的命令,把命令的执行结果交给外面的命令 里面必须是命令 跟 $()
! #非 取反
2020年07月24日上午(day16)
一、特殊权限
1. setuid
权限位作用于属主的位置 可执行的权限位 执行这条命令的时候,相当于这条命令的所有者 root
s 表示
[root@BC ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@BC ~]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm
[root@BC ~]# su - BC01
Last login: Thu Jul 23 12:24:52 CST 2020 from 10.0.0.1 on pts/4
[BC01@BC ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/’: Permission denied
[BC01@BC ~]$ ll -d /
dr-xr-xr-x. 17 root root 224 Jul 22 10:21 /
[BC01@BC ~]$ logout
[root@BC ~]# rm -rf /opt/
[root@BC ~]# ll /opt/
ls: cannot access /opt/: No such file or directory
[root@BC ~]# mkdir /opt/
[root@BC ~]# chmod 557 /
[root@BC ~]# ll -d /
dr-xr-xrwx. 17 root root 224 Jul 24 08:38 /
[root@BC ~]# su - BC01
Last login: Fri Jul 24 08:37:21 CST 2020 on pts/0
[BC01@BC ~]$ rm -rf /opt/
[BC01@BC ~]$ logout
[root@BC ~]# chmod -w /
chmod: /: new permissions are r-xr-xrwx, not r-xr-xr-x
[root@BC ~]# chmod o-w /
[root@BC ~]# ll -d /
dr-xr-xr-x. 16 root root 213 Jul 24 08:39 /
[root@BC ~]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm
[root@BC ~]# chmod u+s /usr/bin/rm
[root@BC ~]# ll /usr/bin/rm
-rwsr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm
[root@BC ~]# mkdir /opt
[root@BC ~]# su - BC01
Last login: Fri Jul 24 08:39:42 CST 2020 on pts/0
[BC01@BC ~]$ rm -rf /opt/
[BC01@BC ~]$ logout
[root@BC ~]# mkdir /opt
[root@BC ~]# chmod u-s /usr/bin/rm
[root@BC ~]# ll /usr/bin/yum
-rwxr-xr-x. 1 root root 801 Nov 5 2018 /usr/bin/yum
[root@BC ~]# su - BC01
Last login: Fri Jul 24 08:42:10 CST 2020 on pts/0
[BC01@BC ~]$ yum install -y sl
Loaded plugins: fastestmirror
You need to be root to perform this command.
[BC01@BC ~]$ yum install -y mysql-server
Loaded plugins: fastestmirror
You need to be root to perform this command.
[BC01@BC ~]$ logout
[root@BC ~]# ll /usr/bin/yum
-rwxr-xr-x. 1 root root 801 Nov 5 2018 /usr/bin/yum
[root@BC ~]# chmod u+s /usr/bin/yum
[root@BC ~]# ll /usr/bin/yum
-rwsr-xr-x. 1 root root 801 Nov 5 2018 /usr/bin/yum
[root@BC ~]# su - BC01
Last login: Fri Jul 24 08:45:28 CST 2020 on pts/0
[BC01@BC ~]$ yum install -y mysql-server
Loaded plugins: fastestmirror
You need to be root to perform this command.
#普通用户不能使用yum,命令,即使添加了setuid的权限也不行
#此权限不能乱给 知道就行
[root@BC ~]# ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31 2018 /usr/bin/cat
[root@BC ~]# stat /usr/bin/cat
File: ‘/usr/bin/cat’
Size: 54160 Blocks: 112 IO Block: 4096 regular file
Device: 803h/2051d Inode: 201349408 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-24 08:52:48.370831557 +0800
Modify: 2018-10-31 03:16:01.000000000 +0800
Change: 2020-07-24 08:52:58.961832157 +0800
Birth: -
[root@BC ~]# stat /usr/bin/passwd
File: ‘/usr/bin/passwd’
Size: 27832 Blocks: 56 IO Block: 4096 regular file
Device: 803h/2051d Inode: 201636086 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-23 09:58:46.365163401 +0800
Modify: 2014-06-10 14:27:56.000000000 +0800
Change: 2020-07-06 02:14:21.159994247 +0800
Birth: -
setuid的权限是4开头的
[root@BC ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@BC ~]# chmod -x /usr/bin/cat
[root@BC ~]# ll /usr/bin/cat
-rw-r--r--. 1 root root 54160 Oct 31 2018 /usr/bin/cat
[root@BC ~]# chmod u+s /usr/bin/cat
[root@BC ~]# ll /usr/bin/cat
-rwSr--r--. 1 root root 54160 Oct 31 2018 /usr/bin/cat
[root@BC ~]# chmod +x /usr/bin/cat
[root@BC ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54160 Oct 31 2018 /usr/bin/cat
[root@BC ~]# chmod u-s /usr/bin/cat
[root@BC ~]#
大S 和 小s的区别
拥有执行权限,设置setuid之后是小s
没有执行权限,设置setuid之后是大S
2. setgid
权限为作用在属组的x为 使用 s表示 有大S 和小s
用户在某个目录下新创建的目录或者文件,默认的所属组是自己的基本组
当设置setgid之后,用户新创建的目录或者文件的默认所属组不在是自己的组了
默认的组就是这个目录的所属组 让多个用户能够共享一个目录
[root@BC ~]# mkdir /data
[root@BC ~]# ll -d /data
drwxr-xr-x 2 root root 6 Jul 24 09:06 /data
[root@BC ~]# chmod 770 /data
[root@BC ~]# ll -d /data
drwxrwx--- 2 root root 6 Jul 24 09:06 /data
[root@BC ~]# groupadd ops_group
[root@BC ~]# chgrp ops_group /data/
[root@BC ~]# ll -d /data/
drwxrwx--- 2 root ops_group 6 Jul 24 09:06 /data/
[root@BC ~]# useradd ops01
[root@BC ~]# useradd ops02
[root@BC ~]# useradd ops03
[root@BC ~]# id ops03
uid=1046(ops03) gid=1048(ops03) groups=1048(ops03)
[root@BC ~]# usermod -aG ops_group ops01
[root@BC ~]# usermod -aG ops_group ops02
[root@BC ~]# usermod -aG ops_group ops03
[root@BC ~]# su - ops01
[ops01@BC ~]$ touch /data/ops01.txt
[ops01@BC ~]$ ll /data/ops01.txt
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 /data/ops01.txt
[ops01@BC ~]$ logout
[root@BC ~]# su - ops02
[ops02@BC ~]$ touch /data/ops02.txt
[ops02@BC ~]$ ll /data/ops02.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 /data/ops02.txt
[ops02@BC ~]$ logout
[root@BC ~]# su - ops03
[ops03@BC ~]$ touch /data/ops03.txt
[ops03@BC ~]$ ll /data/ops03.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 /data/ops03.txt
[ops03@BC ~]$ logout
[root@BC ~]# ll /data/
total 0
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt
[root@BC ~]# chmod g+s /data/
[root@BC ~]# ll -d /data/
drwxrws--- 2 root ops_group 57 Jul 24 09:11 /data/
[root@BC ~]# stat /data/
File: ‘/data/’
Size: 57 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 818813 Links: 2
Access: (2770/drwxrws---) Uid: ( 0/ root) Gid: ( 1045/ops_group)
Access: 2020-07-24 09:11:26.981894897 +0800
Modify: 2020-07-24 09:11:17.173894341 +0800
Change: 2020-07-24 09:13:03.894900384 +0800
Birth: -
[root@BC ~]# ll /data/
total 0
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt
[root@BC ~]# echo "root" > /data/root.log
[root@BC ~]# ll /data/
total 4
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root ops_group 5 Jul 24 09:14 root.log
[root@BC ~]# su - ops01
Last login: Fri Jul 24 09:10:22 CST 2020 on pts/0
[ops01@BC ~]$ echo "ops01" > /data/ops01.log
[ops01@BC ~]$ logout
[root@BC ~]# su - ops02
Last login: Fri Jul 24 09:10:52 CST 2020 on pts/0
[ops02@BC ~]$ echo "ops02" > /data/ops02.log
[ops02@BC ~]$ ll /data/
total 12
-rw-rw-r-- 1 ops01 ops_group 6 Jul 24 09:15 ops01.log
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops_group 6 Jul 24 09:15 ops02.log
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root ops_group 5 Jul 24 09:14 root.log
[ops02@BC ~]$ vim /data/ops01.log
[ops02@BC ~]$ cat /data/ops01.log
ops01
ops02
[ops02@BC ~]$ umask
0002
[ops02@BC ~]$ ll /data/
total 12
-rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 ops01.log
-rw-rw-r-- 1 ops01 ops01 0 Jul 24 09:10 ops01.txt
-rw-rw-r-- 1 ops02 ops_group 6 Jul 24 09:15 ops02.log
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root ops_group 5 Jul 24 09:14 root.log
[ops02@BC ~]$ rm -f /data/ops01.txt
[ops02@BC ~]$ ll -d /data/
drwxrws--- 2 root ops_group 90 Jul 24 09:20 /data/
[ops02@BC ~]$ mkdir /data/test
[ops02@BC ~]$ ll /data/test
total 0
[ops02@BC ~]$ ll /data/
total 12
-rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 ops01.log
-rw-rw-r-- 1 ops02 ops_group 6 Jul 24 09:15 ops02.log
-rw-rw-r-- 1 ops02 ops02 0 Jul 24 09:11 ops02.txt
-rw-rw-r-- 1 ops03 ops03 0 Jul 24 09:11 ops03.txt
-rw-r--r-- 1 root ops_group 5 Jul 24 09:14 root.log
drwxrwsr-x 2 ops02 ops_group 6 Jul 24 09:21 test
3. sticky 粘滞位
权限作用于 others 的x为 使用 t 表示 小t 大T
给目录设置, 一个目录所有用户都拥有管理的权限 777 针对此目录设置一个粘滞位
所有用户都可以在这个目录进行创建、删除文件的权利 但是只能管理自己的文件 或者管理员拥有管理所有文件的权限 root
[root@BC ~]# ll -d /tmp/
drwxrwxrwt. 15 root root 4096 Jul 24 09:02 /tmp/
[root@BC ~]# stat /tmp/
File: ‘/tmp/’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 803h/2051d Inode: 67108936 Links: 15
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-24 09:49:40.026024737 +0800
Modify: 2020-07-24 09:02:34.229864730 +0800
Change: 2020-07-24 09:02:34.229864730 +0800
Birth: -
[root@BC ~]# mkdir /test
[root@BC ~]# chmod 777 /test
[root@BC ~]# ll -d /test
drwxrwxrwx 2 root root 6 Jul 24 09:50 /test
[root@BC ~]# echo "root" /test/root.txt
root /test/root.txt
[root@BC ~]# echo "root" > /test/root.txt
[root@BC ~]# su - ops01
Last login: Fri Jul 24 09:14:53 CST 2020 on pts/0
[ops01@BC ~]$ echo "ops01" > /test/ops01.txt
[ops01@BC ~]$ logout
[root@BC ~]# su - dev01
Last login: Wed Jul 22 10:49:56 CST 2020 from 10.0.0.1 on pts/1
[dev01@BC ~]$ echo "dev01" > /test/dev01.txt
[dev01@BC ~]$ logout
[root@BC ~]# ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:51 ops01.txt
-rw-r--r-- 1 root root 5 Jul 24 09:51 root.txt
[root@BC ~]# su - dev01
Last login: Fri Jul 24 09:51:51 CST 2020 on pts/0
[dev01@BC ~]$ ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:51 ops01.txt
-rw-r--r-- 1 root root 5 Jul 24 09:51 root.txt
[dev01@BC ~]$ rm -f /test/ops01.txt
[dev01@BC ~]$ ll /test/
total 8
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-r--r-- 1 root root 5 Jul 24 09:51 root.txt
[root@BC ~]# chmod o+t /test/
[root@BC ~]# stat /test/
File: ‘/test/’
Size: 39 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 67588796 Links: 2
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-24 09:53:31.177037826 +0800
Modify: 2020-07-24 09:53:25.993037532 +0800
Change: 2020-07-24 09:55:02.412042992 +0800
Birth: -
[root@BC ~]# su - ops01
Last login: Fri Jul 24 09:51:32 CST 2020 on pts/0
[ops01@BC ~]$ echo "ops01" > /test/ops.txt
[ops01@BC ~]$ ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:55 ops.txt
-rw-r--r-- 1 root root 5 Jul 24 09:51 root.txt
[root@BC ~]# su - dev01
Last login: Fri Jul 24 09:52:59 CST 2020 on pts/0
[dev01@BC ~]$ ll /test/
total 12
-rw-rw-r-- 1 dev01 dev01 6 Jul 24 09:52 dev01.txt
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:55 ops.txt
-rw-r--r-- 1 root root 5 Jul 24 09:51 root.txt
[dev01@BC ~]$ rm -f /test/ops.txt
rm: cannot remove ‘/test/ops.txt’: Operation not permitted
[dev01@BC ~]$ rm -f /test/dev01.txt
[dev01@BC ~]$ ll /test/
total 8
-rw-rw-r-- 1 ops01 ops01 6 Jul 24 09:55 ops.txt
-rw-r--r-- 1 root root 5 Jul 24 09:51 root.txt
[dev01@BC ~]$ logout
[root@BC ~]# rm -f /test/ops.txt
[root@BC ~]#
二、特殊属性
特殊属性不受普通权限的限制
lsattr #显示特殊属性
chattr #设置特殊属性
a #这个文件只能追加内容和查看 别的什么都做不了 删除 移动 复制可以
i #什么都操作不了
[root@BC ~]# touch test.txt
[root@BC ~]# touch test.log
[root@BC ~]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 24 10:08 test.log
-rw-r--r-- 1 root root 0 Jul 24 10:08 test.txt
[root@BC ~]# lsattr test.log
---------------- test.log
[root@BC ~]# lsattr test.txt
---------------- test.txt
[root@BC ~]# echo "test" > test.log
[root@BC ~]# echo "test" > test.txt
[root@BC ~]# ll
total 8
-rw-r--r-- 1 root root 5 Jul 24 10:09 test.log
-rw-r--r-- 1 root root 5 Jul 24 10:09 test.txt
[root@BC ~]# chattr +a test.log
[root@BC ~]# ll test.log
-rw-r--r-- 1 root root 5 Jul 24 10:09 test.log
[root@BC ~]# lsattr test.log
-----a---------- test.log
[root@BC ~]# cat test.log
test
[root@BC ~]# vim test.log
[root@BC ~]# vim test.log
[root@BC ~]# echo "hello" > test.log
-bash: test.log: Operation not permitted
[root@BC ~]# echo "hello" >> test.log
[root@BC ~]# cat test.log
test
hello
[root@BC ~]# rm -f test.log
rm: cannot remove ‘test.log’: Operation not permitted
[root@BC ~]# mv test.log /tmp/
mv: cannot move ‘test.log’ to ‘/tmp/test.log’: Operation not permitted
[root@BC ~]# cp test.log /tmp/
[root@BC ~]# chattr +i test.txt
[root@BC ~]# lsattr test.txt
----i----------- test.txt
[root@BC ~]# cat test.txt
test
[root@BC ~]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@BC ~]# mv test.txt /tmp/
mv: cannot move ‘test.txt’ to ‘/tmp/test.txt’: Operation not permitted
[root@BC ~]# cp test.txt /tmp/
[root@BC ~]# echo "hello" > test.txt
-bash: test.txt: Permission denied
[root@BC ~]# echo "hello" >> test.txt
-bash: test.txt: Permission denied
三、重定向概述
将原本要输出到屏幕上面的内容,重定向到一个指定的文件中
将原本从键盘上面输入的内容,改为从命令或者文件当中读取
为什么要用重定向
1. 数据非常重要,需要保存
2. 后台程序的输出重定向到一个文件中
3. 定时任务的执行结果
4. 把一些错误的输出定向到空
5. 把正确和错误的信息都需要保存
stdin #标准输入 0 #从键盘上面读取输入的内容,或者从命令及文件中读取输入的内容
stdout #标准输出 1 #默认将正确的信息标准输出到屏幕上方
stderr #错误输出 2 #默认将错误的信息标准输出到屏幕上方
[root@BC ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 Jul 20 19:44 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Jul 20 19:44 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Jul 20 19:44 /dev/stdout -> /proc/self/fd/1
[root@BC ~]# cat
hello #标准输入
hello #标准输出
[root@BC ~]# tail -f 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
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
^Z
[1]+ Stopped tail -f passwd
[root@BC ~]# ps
PID TTY TIME CMD
10861 pts/0 00:00:00 bash
10879 pts/0 00:00:00 bash
10958 pts/0 00:00:00 su
10980 pts/0 00:00:00 su
10981 pts/0 00:00:00 bash
10998 pts/0 00:00:00 su
11020 pts/0 00:00:00 su
11021 pts/0 00:00:00 bash
11039 pts/0 00:00:00 su
11040 pts/0 00:00:00 bash
14928 pts/0 00:00:00 tail
14930 pts/0 00:00:00 ps
[root@BC ~]# ll /proc/14928/fd
total 0
lrwx------ 1 root root 64 Jul 24 10:51 0 -> /dev/pts/0
lrwx------ 1 root root 64 Jul 24 10:51 1 -> /dev/pts/0
lrwx------ 1 root root 64 Jul 24 10:51 2 -> /dev/pts/0
lr-x------ 1 root root 64 Jul 24 10:51 3 -> /root/passwd
lr-x------ 1 root root 64 Jul 24 10:51 4 -> anon_inode:inotify
[root@BC ~]# jobs
[1]+ Stopped tail -f passwd
[root@BC ~]# fg %1
tail -f passwd
^C
[root@BC ~]# jobs
[root@BC ~]# ll /proc/14928/fd
ls: cannot access /proc/14928/fd: No such file or directory
[root@BC ~]# ps
PID TTY TIME CMD
10861 pts/0 00:00:00 bash
10879 pts/0 00:00:00 bash
10958 pts/0 00:00:00 su
10980 pts/0 00:00:00 su
10981 pts/0 00:00:00 bash
10998 pts/0 00:00:00 su
11020 pts/0 00:00:00 su
11021 pts/0 00:00:00 bash
11039 pts/0 00:00:00 su
11040 pts/0 00:00:00 bash
14933 pts/0 00:00:00 ps
四、输出重定向
将原本要输出到屏幕上面的内容,重定向到一个指定的文件中
符号
> #标准覆盖正确输出重定向 #将正确的内容覆盖源文件的 当文件不存在时,会自动创建
>> #标准追加正确输出重定向 #将正确的内容追加到指定文件的底部 当文件不存在时,会自动创建
2> #标准覆盖错误输出重定向 #将错误的信息覆盖到指定的文件中
2>> #标准追加错误输出重定向 #将错误的信息追加到文件的底部
案例:
[root@BC ~]# echo "hello" > 123.txt
[root@BC ~]# ip a s eth0 > ip.txt
[root@BC ~]# cat ip.txt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#合并文件
[root@BC ~]# cat /etc/hosts /etc/resolv.conf > new.txt
[root@BC ~]# cat new.txt
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# Generated by NetworkManager
nameserver 223.5.5.5
[root@BC ~]# cat 123.txt
hello
[root@BC ~]# echo "test" >> 123.txt
[root@BC ~]# cat 123.txt
hello
test
[root@BC ~]# ls /roott
ls: cannot access /roott: No such file or directory
[root@BC ~]# ls /roott 2>err.txt
[root@BC ~]# cat err.txt
ls: cannot access /roott: No such file or directory
[root@BC ~]# ls /roott 2>>err.txt
[root@BC ~]# ls /roott 2>>err.txt
[root@BC ~]# ls /roott 2>>err.txt
[root@BC ~]# cat err.txt
ls: cannot access /roott: No such file or directory
ls: cannot access /roott: No such file or directory
ls: cannot access /roott: No such file or directory
ls: cannot access /roott: No such file or directory
#把正确的和错误的信息都保存到一个文件中
[root@BC ~]# ls /roott > file.txt 2>&1 #不推荐
[root@BC ~]# cat file.txt
ls: cannot access /roott: No such file or directory
[root@BC ~]# mkdir /roott
[root@BC ~]# ls /roott > file.txt 2>&1
[root@BC ~]# cat file.txt
[root@BC ~]# ls /roott &>file.txt
[root@BC ~]# ls /roottt &>file.txt
[root@BC ~]# cat file.txt
ls: cannot access /roottt: No such file or directory
#将正确的信息和错误的信息重定向到空
[root@BC ~]# ls /roottt &> /dev/null
#把正确的和错误的放在不同的文件中
[root@BC ~]# ls /rooot >> file1.txt 2>> file2.txt
[root@BC ~]# ll
total 4
-rw-r--r-- 1 root root 0 Jul 24 11:14 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
[root@BC ~]# cat file1.txt
[root@BC ~]# cat file2.txt
ls: cannot access /rooot: No such file or directory
[root@BC ~]# ls /root >> file1.txt 2>> file2.txt
[root@BC ~]# ll
total 8
-rw-r--r-- 1 root root 20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
[root@BC ~]# cat file1.txt
file1.txt
file2.txt
[root@BC ~]# cat file2.txt
ls: cannot access /rooot: No such file or directory
五、输入重定向
将原本从键盘上面输入的内容,改为从命令或者文件当中读取
符号
< #标准输入重定向 #将原本从默认的键盘中读取数据改为由命令或者文件中读取
<< #标识符限定输入重定向 #从键盘中读取内容,直到遇到标识符的分解符为止
案例:
[root@BC ~]# grep \'root\' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# grep \'root\' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# grep root
oldboy
root
root
rottttroot
rottttroot
[root@BC ~]# dd if=/dev/zero of=/root/test.log bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.0362247 s, 1.4 GB/s
[root@BC ~]# ll
total 51208
-rw-r--r-- 1 root root 20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
-rw-r--r-- 1 root root 52428800 Jul 24 11:45 test.log
[root@BC ~]# ll -h
total 51M
-rw-r--r-- 1 root root 20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
-rw-r--r-- 1 root root 50M Jul 24 11:45 test.log
[root@BC ~]# dd </dev/zero >/root/oldboy.log bs=10M count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 21.3836 s, 49.0 MB/s
[root@BC ~]# ll -h
total 1.1G
-rw-r--r-- 1 root root 20 Jul 24 11:15 file1.txt
-rw-r--r-- 1 root root 52 Jul 24 11:14 file2.txt
-rw-r--r-- 1 root root 1000M Jul 24 11:48 oldboy.log
-rw-r--r-- 1 root root 50M Jul 24 11:45 test.log
[root@BC ~]# cat file1.txt
file1.txt
file2.txt
[root@BC ~]# tr \'t\' \'T\' < file1.txt
file1.TxT
file2.TxT
数据库导入表
[root@BC ~]# mysql -uroot -p123 < all.sql
[root@BC ~]# cat >>file3.txt
123
345
678
456
EOF
123
^C
[root@BC ~]# cat file3.txt
123
345
678
456
EOF
123
[root@BC ~]# cat >>file4.txt<<EOF
> 123
> dfer
> rghrt
> gergrtg
> EOF
[root@BC ~]# cat file4.txt
123
dfer
rghrt
gergrtg
[root@BC ~]# cat 123.sh
cat<<EOF
1. rge
2. fgo
3. jfrio
4. hfoih
EOF
[root@BC ~]# sh 123.sh
1. rge
2. fgo
3. jfrio
4. hfoih
六、管道技术
| 管道
连接左右两个命令的使用 把前面的命令作为标准输出通过管道交给后面的命令 作为标准输入
只能把正确的信息交给后面的命令,错误的信息的不会传递
[root@BC ~]# head 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
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
[root@BC ~]# head passwd | cat -n
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
[root@BC ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 99054 bytes 61039138 (58.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55989 bytes 5452694 (5.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@BC ~]# ifconfig eth0 | awk \'NR==2\'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@BC ~]# ifconfig eth0 | awk \'NR==2\' | awk \'{print $2}\'
10.0.0.100
[root@BC ~]# awk -F: \'{print $3}\' passwd | sort -rn | head
1046
1045
1044
1043
1042
1041
1040
1039
1038
1037
#管道技术中的tee技术
需要保存一些标准输出的内容
[root@BC ~]# echo $RANDOM | md5sum | cut -c 1-8 | tee pass.txt |passwd --stdin BC01
Changing password for user BC01.
passwd: all authentication tokens updated successfully.
[root@BC ~]# cat pass.txt
100ada15
-a #追加
tee 和 重定向的区别
重定向 #把要输出到屏幕上面的内容重定向到指定的文件中
tee #把要输出到屏幕上面的内容重定向到指定的文件中 ,并且可以继续输出一份到屏幕上面
#管道中xargs技术
让一些不支持管道的命令支持管道 把前面命令的执行结果以文件的参数传递方式传递给后面的命令
[root@BC ~]# ls | xargs sed -i \'s#root#oldboy#g\'
[root@BC ~]# find /var/log/ -type f -name "*.log" |xargs cp -t /opt
[root@BC ~]# find /var/log/ -type f -name "*.log" |xargs -I {} cp {} /mnt/
2020年07月27日上午(day17)
一、find概述
可以根据文件的名称、文件大小、文件的修改时间、文件的类型、文件的权限、文件的属主属组、文件的目录层级进行查找
Find的语法:
命令 路径 选项 表达式 动作
查找 地区 妹子 18-25 约
二、根据文件名称查找
选项:
-name #根据名称查找
-i #忽略大小写 -iname
通配符
* #所有
? #匹配任意一个字符 只能匹配一个
[] #匹配中括号中的任意一个字符
[^] #排除中括号中的字符
#精确查找
[root@BC ~]# find / -name "hostnamectl"
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
#查找以什么开头的
[root@BC ~]# find / -name "hostnamectl*"
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
#以什么为结尾的
[root@BC ~]# find / -name "*hostnamectl"
/usr/bin/hostnamectl
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
#查找包含某个字符串的查找
[root@BC ~]# touch /tmp/rrhostnamectlfg
[root@BC ~]# find / -name "*hostnamectl*"
/tmp/rrhostnamectlfg
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
#忽略大小写
[root@BC ~]# touch Hostnamectl
[root@BC ~]# find / -name "*hostnamectl*"
/tmp/rrhostnamectlfg
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
[root@BC ~]# find / -iname "*hostnamectl*"
/root/Hostnamectl
/tmp/rrhostnamectlfg
/usr/bin/hostnamectl
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/zsh/site-functions/_hostnamectl
[root@BC ~]# mkdir test
[root@BC ~]# touch test/hostnamectl{a..g}
[root@BC ~]# touch test/hostnamectl{o..t}
[root@BC ~]# touch test/hostnamectl{o..t}123
[root@BC ~]# ll test/
total 0
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectla
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlb
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlc
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectld
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectle
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlf
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlg
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlo
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlo123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlp
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlp123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlq
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlq123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlr
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlr123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectls
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectls123
-rw-r--r-- 1 root root 0 Jul 27 17:02 hostnamectlt
-rw-r--r-- 1 root root 0 Jul 27 17:03 hostnamectlt123
[root@BC ~]# find /root -name "hostnamectl*"
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
/root/test/hostnamectle
/root/test/hostnamectlf
/root/test/hostnamectlg
/root/test/hostnamectlo
/root/test/hostnamectlp
/root/test/hostnamectlq
/root/test/hostnamectlr
/root/test/hostnamectls
/root/test/hostnamectlt
/root/test/hostnamectlo123
/root/test/hostnamectlp123
/root/test/hostnamectlq123
/root/test/hostnamectlr123
/root/test/hostnamectls123
/root/test/hostnamectlt123
[root@BC ~]# find /root -name "hostnamectl?"
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
/root/test/hostnamectle
/root/test/hostnamectlf
/root/test/hostnamectlg
/root/test/hostnamectlo
/root/test/hostnamectlp
/root/test/hostnamectlq
/root/test/hostnamectlr
/root/test/hostnamectls
/root/test/hostnamectlt
[root@BC ~]# find /root -name "hostnamectl[abcd]"
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
[root@BC ~]# find /root -name "hostnamectl[^b]"
/root/test/hostnamectla
/root/test/hostnamectlc
/root/test/hostnamectld
/root/test/hostnamectle
/root/test/hostnamectlf
/root/test/hostnamectlg
/root/test/hostnamectlo
/root/test/hostnamectlp
/root/test/hostnamectlq
/root/test/hostnamectlr
/root/test/hostnamectls
/root/test/hostnamectlt
三、根据文件类型查找
选项:
-type #根据类型进行查找
f #普通文件
d #目录
l #软链接
s #套接字 socket文件
p #管道文件
b #块设备 硬盘 硬盘分区 镜像光盘
c #字符设备
#查找所有的普通文件,包括隐藏文件
[root@BC ~]# find /root -type f
/root/.bash_logout
/root/.bash_profile
/root/.cshrc
/root/.tcshrc
/root/.bash_history
/root/.lesshst
/root/.viminfo
/root/Hostname
/root/Hostnamectl
/root/test/hostnamectla
/root/test/hostnamectlb
/root/test/hostnamectlc
/root/test/hostnamectld
#所有的目录 包括隐藏目录 也包含自己的本身
[root@BC ~]# find /root -type d
/root
/root/test
/root/.pki
/root/.pki/nssdb
#tree命令会把软链接也统计成目录 软链接的源文件是目录 find不会
[root@BC ~]# tree -ad /root
/root
├── opt -> /opt/
├── .pki
│ └── nssdb
└── test
4 directories
[root@BC ~]# find /dev -type s
/dev/log
[root@BC ~]# find /run -type p
/run/systemd/inhibit/1.ref
/run/systemd/sessions/1.ref
/run/systemd/initctl/fifo
[root@BC ~]# find /root -type l
/root/opt
[root@BC ~]# find /dev -type b
/dev/sda3
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0
[root@BC ~]# find /dev -type c
/dev/vsock
/dev/vcsa6
/dev/vcs6
/dev/vcsa5
[root@BC ~]# find / -type d -name "hostnamectl"
/root/hostnamectl
四、根据文件大小查找
选项:
-size #根据文件大小查找
+n #大于
-n #小于
n #精确匹配
b k M G #单位
#查找空文件
[root@BC ~]# find /var/log/ -size 0b
/var/log/tallylog
/var/log/anaconda/ks-script-3PCKae.log
/var/log/boot.log
/var/log/firewalld
/var/log/maillog-20200726
/var/log/spooler-20200726
/var/log/spooler
/var/log/spooler-20200716
/var/log/nginx/error.log
/var/log/nginx/access.log
/var/log/spooler-20200723
[root@BC ~]# ll /var/log/tallylog
-rw-------. 1 root root 0 Jul 6 02:13 /var/log/tallylog
[root@BC ~]# find /var/log/ -size -1k -ls
67159586 0 -rw------- 1 root root 0 Jul 6 02:13 /var/log/tallylog
67563450 0 -rw------- 1 root root 0 Jul 6 02:17 /var/log/anaconda/ks-script-3PCKae.log
67563454 0 -rw------- 1 root root 0 Jul 27 17:35 /var/log/boot.log
67563460 0 -rw-r--r-- 1 root root 0 Jul 6 02:17 /var/log/firewalld
67588777 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/maillog-20200726
67588781 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/spooler-20200726
67588808 0 -rw------- 1 root root 0 Jul 26 03:33 /var/log/spooler
67528019 0 -rw------- 1 root root 0 Jul 6 02:14 /var/log/spooler-20200716
134348936 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/error.log
134348938 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/access.log
67113674 0 -rw------- 1 root root 0 Jul 16 03:25 /var/log/spooler-20200723
[root@BC ~]# find /var/log/ -size 1k -ls #字节的大小在find中四舍五入
67160720 4 -rw-r--r-- 1 root root 193 Jul 6 02:13 /var/log/grubby_prune_debug
681834 0 drwxr-xr-x 2 root root 23 Jul 6 02:17 /var/log/tuned
714023 0 drwx------ 2 root root 23 Jul 6 02:17 /var/log/audit
67284924 0 drwxr-xr-x 2 root root 176 Jul 6 02:17 /var/log/anaconda
134317666 0 drwxr-xr-x 2 root root 6 Jul 6 02:17 /var/log/rhsm
67112876 4 -rw-r--r-- 1 root root 696 Jul 6 09:06 /var/log/vmware-network.5.log
67112867 4 -rw-r--r-- 1 root root 678 Jul 13 16:29 /var/log/vmware-network.2.log
67112878 4 -rw-r--r-- 1 root root 674 Jul 6 17:07 /var/log/vmware-network.4.log
67112882 4 -rw-r--r-- 1 root root 678 Jul 20 19:45 /var/log/vmware-network.1.log
67528018 4 -rw------- 1 root root 558 Jul 13 16:29 /var/log/maillog-20200716
134348871 0 drwxrwx--- 2 nginx root 41 Jul 20 19:50 /var/log/nginx
67588805 4 -rw------- 1 root root 186 Jul 27 16:30 /var/log/maillog
67588807 4 -rw------- 1 root root 679 Jul 27 16:30 /var/log/secure
67112916 4 -rw-r--r-- 1 root root 678 Jul 27 16:29 /var/log/vmware-network.log
[root@BC ~]# find /var/log/ -type f -size 20k
/var/log/cron-20200726
[root@BC ~]# find /var/log/ -type f -size 20k -ls
67588776 20 -rw------- 1 root root 19815 Jul 26 03:33 /var/log/cron-20200726
[root@BC ~]# find /var/log/ -type f -size 6k -ls
75 8 -rw-r--r-- 1 root root 6085 Jul 27 16:29 /var/log/tuned/tuned.log
67113677 8 -rw------- 1 root root 6005 Jul 27 18:01 /var/log/cron
67528017 8 -rw------- 1 root root 5865 Jul 13 16:29 /var/log/secure-20200716
67112870 8 -rw-r--r-- 1 root root 5650 Jul 6 08:52 /var/log/vmware-network.9.log
67112865 8 -rw-r--r-- 1 root root 5650 Jul 9 10:36 /var/log/vmware-network.3.log
#根据范围进行查找
[root@BC ~]# find /var/log/ -type f -size +100k -size -1000k
/var/log/anaconda/syslog
/var/log/anaconda/packaging.log
/var/log/anaconda/storage.log
/var/log/dmesg.old
/var/log/messages-20200716
/var/log/messages-20200723
/var/log/messages
/var/log/dmesg
[root@BC ~]# find /var/log/ -type f -size +100k -size -1000k -ls
67496291 276 -rw------- 1 root root 281510 Jul 6 02:17 /var/log/anaconda/syslog
67563447 112 -rw------- 1 root root 110647 Jul 6 02:17 /var/log/anaconda/packaging.log
67563448 124 -rw------- 1 root root 124184 Jul 6 02:17 /var/log/anaconda/storage.log
67112877 120 -rw-r--r-- 1 root root 122832 Jul 20 19:45 /var/log/dmesg.old
67528016 388 -rw------- 1 root root 395555 Jul 16 03:25 /var/log/messages-20200716
67113672 148 -rw------- 1 root root 148158 Jul 23 03:13 /var/log/messages-20200723
67588806 120 -rw------- 1 root root 122869 Jul 27 18:01 /var/log/messages
67112864 120 -rw-r--r-- 1 root root 122838 Jul 27 16:29 /var/log/dmesg
#四舍五入 1k
[root@BC ~]# find /var/log/ -type f -size 5k
/var/log/vmware-network.8.log
[root@BC ~]# find /var/log/ -type f -size 5k -ls
67112873 8 -rw-r--r-- 1 root root 4127 Jul 6 09:05 /var/log/vmware-network.8.log
#以M为单位查找时,所有小于1M的文件都四舍五入到1M
[root@BC ~]# find /var/log/ -type f -size 1M -ls
67160720 4 -rw-r--r-- 1 root root 193 Jul 6 02:13 /var/log/grubby_prune_debug
67284922 48 -rw-rw-r-- 1 root utmp 45696 Jul 27 16:30 /var/log/wtmp
67284923 8 -rw------- 1 root utmp 6912 Jul 23 12:09 /var/log/btmp
75 8 -rw-r--r-- 1 root root 6085 Jul 27 16:29 /var/log/tuned/tuned.log
67495714 28 -rw------- 1 root root 26591 Jul 6 02:17 /var/log/anaconda/anaconda.log
67496291 276 -rw------- 1 root root 281510 Jul 6 02:17 /var/log/anaconda/syslog
67563444 24 -rw------- 1 root root 21872 Jul 6 02:17 /var/log/anaconda/X.log
67563445 32 -rw------- 1 root root 29721 Jul 6 02:17 /var/log/anaconda/program.log
67563447 112 -rw------- 1 root root 110647 Jul 6 02:17 /var/log/anaconda/packaging.log
67563448 124 -rw------- 1 root root 124184 Jul 6 02:17 /var/log/anaconda/storage.log
67563449 4 -rw------- 1 root root 4017 Jul 6 02:17 /var/log/anaconda/ifcfg.log
67563456 12 -rw-r--r-- 1 root root 10054 Jul 27 16:29 /var/log/vmware-vmsvc.log
67563457 8 -rw-r--r-- 1 root root 6934 Jul 27 16:29 /var/log/vmware-vgauthsvc.log.0
67113677 8 -rw------- 1 root root 6005 Jul 27 18:01 /var/log/cron
67588778 12 -rw------- 1 root root 9327 Jul 26 03:33 /var/log/messages-20200726
67588779 16 -rw------- 1 root root 13606 Jul 24 12:11 /var/log/secure-20200726
67112873 8 -rw-r--r-- 1 root root 4127 Jul 6 09:05 /var/log/vmware-network.8.log
67112876 4 -rw-r--r-- 1 root root 696 Jul 6 09:06 /var/log/vmware-network.5.log
67112867 4 -rw-r--r-- 1 root root 678 Jul 13 16:29 /var/log/vmware-network.2.log
67588799 8 -rw------- 1 root root 8015 Jul 27 17:35 /var/log/boot.log-20200727
67112877 120 -rw-r--r-- 1 root root 122832 Jul 20 19:45 /var/log/dmesg.old
67112871 4 -rw-r--r-- 1 root root 3986 Jul 6 09:05 /var/log/vmware-network.7.log
67112878 4 -rw-r--r-- 1 root root 674 Jul 6 17:07 /var/log/vmware-network.4.log
67112882 4 -rw-r--r-- 1 root root 678 Jul 20 19:45 /var/log/vmware-network.1.log
67112913 20 -rw------- 1 root root 16395 Jul 10 03:20 /var/log/boot.log-20200710
67112924 4 -rw------- 1 root root 3925 Jul 22 08:51 /var/log/yum.log
67112866 8 -rw------- 1 root root 7969 Jul 13 17:29 /var/log/boot.log-20200713
67112869 32 -rw------- 1 root root 32040 Jul 16 03:25 /var/log/cron-20200716
67528018 4 -rw------- 1 root root 558 Jul 13 16:29 /var/log/maillog-20200716
67528016 388 -rw------- 1 root root 395555 Jul 16 03:25 /var/log/messages-20200716
67528017 8 -rw------- 1 root root 5865 Jul 13 16:29 /var/log/secure-20200716
67112870 8 -rw-r--r-- 1 root root 5650 Jul 6 08:52 /var/log/vmware-network.9.log
67491686 8 -rw------- 1 root root 8015 Jul 20 20:25 /var/log/boot.log-20200720
67113669 40 -rw------- 1 root root 37990 Jul 23 03:13 /var/log/cron-20200723
67113670 4 -rw------- 1 root root 1856 Jul 22 11:11 /var/log/maillog-20200723
67113672 148 -rw------- 1 root root 148158 Jul 23 03:13 /var/log/messages-20200723
67113673 48 -rw------- 1 root root 48914 Jul 22 12:22 /var/log/secure-20200723
67588776 20 -rw------- 1 root root 19815 Jul 26 03:33 /var/log/cron-20200726
67588805 4 -rw------- 1 root root 186 Jul 27 16:30 /var/log/maillog
67588806 120 -rw------- 1 root root 122869 Jul 27 18:01 /var/log/messages
67588807 4 -rw------- 1 root root 679 Jul 27 16:30 /var/log/secure
67112864 120 -rw-r--r-- 1 root root 122838 Jul 27 16:29 /var/log/dmesg
67112875 4 -rw-r--r-- 1 root root 3986 Jul 6 09:06 /var/log/vmware-network.6.log
67112865 8 -rw-r--r-- 1 root root 5650 Jul 9 10:36 /var/log/vmware-network.3.log
67112916 4 -rw-r--r-- 1 root root 678 Jul 27 16:29 /var/log/vmware-network.log
[root@BC ~]# find /var/log/ -type f -size -1M -ls
67159586 0 -rw------- 1 root root 0 Jul 6 02:13 /var/log/tallylog
67563450 0 -rw------- 1 root root 0 Jul 6 02:17 /var/log/anaconda/ks-script-3PCKae.log
67563454 0 -rw------- 1 root root 0 Jul 27 17:35 /var/log/boot.log
67563460 0 -rw-r--r-- 1 root root 0 Jul 6 02:17 /var/log/firewalld
67588777 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/maillog-20200726
67588781 0 -rw------- 1 root root 0 Jul 23 03:13 /var/log/spooler-20200726
67588808 0 -rw------- 1 root root 0 Jul 26 03:33 /var/log/spooler
67528019 0 -rw------- 1 root root 0 Jul 6 02:14 /var/log/spooler-20200716
134348936 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/error.log
134348938 0 -rw-r--r-- 1 root root 0 Jul 20 19:50 /var/log/nginx/access.log
67113674 0 -rw------- 1 root root 0 Jul 16 03:25 /var/log/spooler-20200723
[root@BC ~]# find /var/log/ -type f -size 2M -ls
67263633 40 -rw-r--r-- 1 root root 1946764 Jul 27 16:30 /var/log/lastlog
714345 1436 -rw------- 1 root root 1468869 Jul 27 18:01 /var/log/audit/audit.log
67563451 1520 -rw------- 1 root root 1552657 Jul 6 02:17 /var/log/anaconda/journal.log
[root@BC ~]# ll -h /var/log/lastlog
-rw-r--r--. 1 root root 1.9M Jul 27 16:30 /var/log/lastlog
[root@BC ~]# ll -h /var/log/audit/audit.log
-rw-------. 1 root root 1.5M Jul 27 18:01 /var/log/audit/audit.log
[root@BC ~]# find /var/log/ -type f -size +2M -ls
67113676 5704 -rw-r--r-- 1 root root 5840292 Jul 27 17:56 /var/log/test.log
[root@BC ~]# find /var/log/ -type f -size 6M -ls
67113676 5704 -rw-r--r-- 1 root root 5840292 Jul 27 17:56 /var/log/test.log
[root@BC ~]# find /var/log/ -type f -size +2M -size -7M
/var/log/test.log
[root@BC ~]# dd </dev/zero >/var/log/123.log bs=100M count=13
13+0 records in
13+0 records out
1363148800 bytes (1.4 GB) copied, 28.178 s, 48.4 MB/s
[root@BC ~]# ll /var/log/123.log
-rw-r--r-- 1 root root 1363148800 Jul 27 18:17 /var/log/123.log
[root@BC ~]# ll /var/log/123.log -h
-rw-r--r-- 1 root root 1.3G Jul 27 18:17 /var/log/123.log
[root@BC ~]# find /var/log/ -type f -size +1G -ls
67588811 1331200 -rw-r--r-- 1 root root 1363148800 Jul 27 18:17 /var/log/123.log
[root@BC ~]# find /var/log/ -type f -size 2G -ls
67588811 1331200 -rw-r--r-- 1 root root 1363148800 Jul 27 18:17 /var/log/123.log
五、根据文件时间查找
选项:
-mtime #最后修改时间
+n #多少天以前
-n #多少天以内
n #具体某一天
[root@BC ~]# for i in {01..27};do date -s 2020/07/$i && touch data/file-${i}.txt;done
[root@BC ~]#
[root@BC ~]# ntpdate ntp.aliyun.com
[root@BC ~]# ll data/
total 0
-rw-r--r-- 1 root root 0 Jul 10 00:00 file-10.txt
-rw-r--r-- 1 root root 0 Jul 11 00:00 file-11.txt
-rw-r--r-- 1 root root 0 Jul 12 00:00 file-12.txt
-rw-r--r-- 1 root root 0 Jul 13 00:00 file-13.txt
-rw-r--r-- 1 root root 0 Jul 14 00:00 file-14.txt
-rw-r--r-- 1 root root 0 Jul 15 00:00 file-15.txt
-rw-r--r-- 1 root root 0 Jul 16 00:00 file-16.txt
-rw-r--r-- 1 root root 0 Jul 17 00:00 file-17.txt
-rw-r--r-- 1 root root 0 Jul 18 00:00 file-18.txt
-rw-r--r-- 1 root root 0 Jul 19 00:00 file-19.txt
-rw-r--r-- 1 root root 0 Jul 1 00:00 file-1.txt
-rw-r--r-- 1 root root 0 Jul 20 00:00 file-20.txt
-rw-r--r-- 1 root root 0 Jul 21 00:00 file-21.txt
-rw-r--r-- 1 root root 0 Jul 22 00:00 file-22.txt
-rw-r--r-- 1 root root 0 Jul 23 00:00 file-23.txt
-rw-r--r-- 1 root root 0 Jul 24 00:00 file-24.txt
-rw-r--r-- 1 root root 0 Jul 25 00:00 file-25.txt
-rw-r--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
-rw-r--r-- 1 root root 0 Jul 2 00:00 file-2.txt
-rw-r--r-- 1 root root 0 Jul 3 00:00 file-3.txt
-rw-r--r-- 1 root root 0 Jul 4 00:00 file-4.txt
-rw-r--r-- 1 root root 0 Jul 5 00:00 file-5.txt
-rw-r--r-- 1 root root 0 Jul 6 00:00 file-6.txt
-rw-r--r-- 1 root root 0 Jul 7 00:00 file-7.txt
-rw-r--r-- 1 root root 0 Jul 8 00:00 file-8.txt
-rw-r--r-- 1 root root 0 Jul 9 00:00 file-9.txt
[root@BC ~]#
[root@BC ~]# find /root -type f -mtime +7 #查找7天以前的
/root/.bash_logout
/root/.cshrc
/root/.tcshrc
/root/.lesshst
/root/.vimrc
/root/data/file-1.txt
/root/data/file-2.txt
/root/data/file-3.txt
/root/data/file-4.txt
/root/data/file-5.txt
/root/data/file-6.txt
/root/data/file-7.txt
/root/data/file-8.txt
/root/data/file-9.txt
/root/data/file-10.txt
/root/data/file-11.txt
/root/data/file-12.txt
/root/data/file-13.txt
/root/data/file-14.txt
/root/data/file-15.txt
/root/data/file-16.txt
/root/data/file-17.txt
/root/data/file-18.txt
/root/data/file-19.txt
[root@BC ~]# find /root -type f -mtime 7 #查找第七天
/root/data/file-20.txt
[root@BC ~]# find /root -type f -mtime -7 #查找七天以内
/root/.bash_profile
/root/.bash_history
/root/.viminfo
/root/.bashrc
/root/data/file-21.txt
/root/data/file-22.txt
/root/data/file-23.txt
/root/data/file-24.txt
/root/data/file-25.txt
/root/data/file-26.txt
/root/data/file-27.txt
[root@BC ~]# find /root -type f -mtime +3 |xargs rm -f
[root@BC ~]# find /var/log/ -type f -size +1G -mtime -1 | xargs rm -f
六、根据文件权限查找
选项:
-perm #根据权限查找
-421 #包含这些权限
421 #精确匹配
/421 #包含其中的某个权限 三个身份中满足一个则匹配
! #取反
[root@BC ~]# find /root -type f
/root/.bash_history
/root/.viminfo
/root/data/file-24.txt
/root/data/file-25.txt
/root/data/file-26.txt
/root/data/file-27.txt
[root@BC ~]# find /root ! -type f #排除普通的文件的其他所有类型文件
/root
/root/.pki
/root/.pki/nssdb
/root/data
#精确匹配
[root@BC ~]# chmod 633 data/file-24.txt
[root@BC ~]# ll data/
total 0
-rw--wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-rw-r--r-- 1 root root 0 Jul 25 00:00 file-25.txt
-rw-r--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@BC ~]# find data/ -type f -perm 644
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@BC ~]# find data/ -type f -perm 633
data/file-24.txt
#满足查找最低权限 每个身份都有满足
[root@BC ~]# find data/ -type f -perm -644
data/file-26.txt
data/file-27.txt
[root@BC ~]# ll data/
total 0
-rw--wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-r--r--r-- 1 root root 0 Jul 25 00:00 file-25.txt
-rw-r--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@BC ~]# chmod 666 data/file-25.txt
[root@BC ~]# find data/ -type f -perm -644
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@BC ~]# chmod 744 data/file-26.txt
[root@BC ~]# find data/ -type f -perm -644
data/file-25.txt
data/file-26.txt
data/file-27.txt
#满足一个身份的某个权限就可以
[root@BC ~]# ll data/
total 0
-rw--wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-rw-rw-rw- 1 root root 0 Jul 25 00:00 file-25.txt
-rwxr--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@BC ~]# find data/ -type f -perm /644
data/file-24.txt
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@BC ~]# chmod 333 data/file-24.txt
[root@BC ~]# find data/ -type f -perm /644
data/file-24.txt
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@BC ~]# ll data/
total 0
--wx-wx-wx 1 root root 0 Jul 24 00:00 file-24.txt
-rw-rw-rw- 1 root root 0 Jul 25 00:00 file-25.txt
-rwxr--r-- 1 root root 0 Jul 26 00:00 file-26.txt
-rw-r--r-- 1 root root 0 Jul 27 00:00 file-27.txt
[root@BC ~]# find data/ -type f -perm /444
data/file-25.txt
data/file-26.txt
data/file-27.txt
[root@BC ~]# find / -perm -4000 -ls
201418870 24 -rws--x--x 1 root root 24048 Oct 31 2018 /usr/bin/chfn
201418873 24 -rws--x--x 1 root root 23960 Oct 31 2018 /usr/bin/chsh
201369302 32 -rwsr-xr-x 1 root root 32096 Oct 31 2018 /usr/bin/fusermount
201418745 80 -rwsr-xr-x 1 root root 78272 Oct 31 2018 /usr/bin/gpasswd
[root@BC ~]# find / -perm -2000 -ls
201368725 16 -r-xr-sr-x 1 root tty 15344 Jun 10 2014 /usr/bin/wall
201418931 20 -rwxr-sr-x 1 root tty 19624 Oct 31 2018 /usr/bin/write
201614897 376 ---x--s--x 1 root nobody 382240 Apr 11 2018 /usr/bin/ssh-agent
201682585 40 -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
682454 216 -rwxr-sr-x 1 root postdrop 218632 Oct 31 2018 /usr/sbin/postdrop
[root@BC ~]# find / -perm -1000 -ls
67108936 4 drwxrwxrwt 16 root root 4096 Jul 27 2020 /tmp
187047 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.font-unix
67284921 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.XIM-unix
134469085 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.ICE-unix
201458049 0 drwxrwxrwt 2 root root 6 Jul 6 02:14 /tmp/.X11-unix
七、根据文件属主属组查找
选项:
-user #根据属主
-group #根据属组
-nouser #没有属主
-nogroup #没有属组
#查找属主为ops01
[root@BC ~]# find / -user ops01 -ls
201696842 0 -rw-rw---- 1 ops01 mail 0 Jul 24 09:08 /var/spool/mail/ops01
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
820161 4 -rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 /data/ops01.log
#查找属主为ops01并且 属组为ops01
[root@BC ~]# find / -user ops01 -group ops01 -ls
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
# -a 并且
[root@BC ~]# find / -user ops01 -a -group ops01 -ls
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
[root@BC ~]# find / -user ops01 -a -group ops_group -ls
67495942 0 --wx-wx-wx 1 ops01 ops_group 0 Jul 24 00:00 /root/data/file-24.txt
820161 4 -rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 /data/ops01.log
#括号前后要有空格 也需要使用转义字符进行转义 -o 或者
[root@BC ~]# find / \( -user ops01 -o -group ops_group \) -ls
67495942 0 --wx-wx-wx 1 ops01 ops_group 0 Jul 24 00:00 /root/data/file-24.txt
201696842 0 -rw-rw---- 1 ops01 mail 0 Jul 24 09:08 /var/spool/mail/ops01
67588770 0 drwx------ 2 ops01 ops01 83 Jul 24 09:10 /home/ops01
67588774 4 -rw-r--r-- 1 ops01 ops01 18 Oct 31 2018 /home/ops01/.bash_logout
67588780 4 -rw-r--r-- 1 ops01 ops01 193 Oct 31 2018 /home/ops01/.bash_profile
67588782 4 -rw-r--r-- 1 ops01 ops01 231 Oct 31 2018 /home/ops01/.bashrc
67588795 4 -rw------- 1 ops01 ops01 145 Jul 24 09:55 /home/ops01/.bash_history
818813 0 drwxrws--- 3 root ops_group 121 Jul 20 10:48 /data
820160 4 -rw-r--r-- 1 root ops_group 5 Jul 24 09:14 /data/root.log
820161 4 -rw-rw-r-- 1 ops01 ops_group 12 Jul 24 09:16 /data/ops01.log
820162 4 -rw-rw-r-- 1 ops02 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 ops02 ops_group 6 Jul 24 09:21 /data/test
820215 0 -rw-r--r-- 1 root ops_group 0 Jul 20 10:48 /data/file-20.log
#没有属主
[root@BC ~]# find / -nouser -ls
201729427 0 -rw-rw---- 1 666 mail 0 Jul 21 16:47 /var/spool/mail/user02
201685422 0 -rw-rw---- 1 6666 mail 0 Jul 21 16:40 /var/spool/mail/user123
#没有属组的
[root@BC ~]# find / -nogroup -ls
134355712 0 -rw------- 1 root 1013 0 Jul 22 11:11 /var/db/sudo/lectured/qiudao
#没有属主也没有属组的
[root@BC ~]# userdel ops02
[root@BC ~]# ll data/file-26.txt
67255910 0 -rwxr--r-- 1 1045 1047 0 Jul 26 00:00 /root/data/file-26.txt
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
134356977 4 -rw-r--r-- 1 1045 1047 18 Oct 31 2018 /home/ops02/.bash_logout
134356978 4 -rw-r--r-- 1 1045 1047 193 Oct 31 2018 /home/ops02/.bash_profile
134356979 4 -rw-r--r-- 1 1045 1047 231 Oct 31 2018 /home/ops02/.bashrc
134356980 4 -rw------- 1 1045 1047 276 Jul 24 09:49 /home/ops02/.bash_history
134356968 4 -rw------- 1 1045 1047 637 Jul 24 09:16 /home/ops02/.viminfo
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
[root@BC ~]# find / \( -nouser -o -nogroup \) -ls
67255910 0 -rwxr--r-- 1 1045 1047 0 Jul 26 00:00 /root/data/file-26.txt
134355712 0 -rw------- 1 root 1013 0 Jul 22 11:11 /var/db/sudo/lectured/qiudao
201729427 0 -rw-rw---- 1 666 mail 0 Jul 21 16:47 /var/spool/mail/user02
201685422 0 -rw-rw---- 1 6666 mail 0 Jul 21 16:40 /var/spool/mail/user123
201696843 0 -rw-rw---- 1 1045 mail 0 Jul 24 09:08 /var/spool/mail/ops02
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
134356977 4 -rw-r--r-- 1 1045 1047 18 Oct 31 2018 /home/ops02/.bash_logout
134356978 4 -rw-r--r-- 1 1045 1047 193 Oct 31 2018 /home/ops02/.bash_profile
134356979 4 -rw-r--r-- 1 1045 1047 231 Oct 31 2018 /home/ops02/.bashrc
134356980 4 -rw------- 1 1045 1047 276 Jul 24 09:49 /home/ops02/.bash_history
134356968 4 -rw------- 1 1045 1047 637 Jul 24 09:16 /home/ops02/.viminfo
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
基础很重要
八、根据目录层级查找
选项:
-maxdepth #最大的目录层级 tree -L
[root@BC ~]# find / -maxdepth 2 \( -nouser -o -nogroup \) -ls
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
[root@BC ~]# find / -maxdepth 3 \( -nouser -o -nogroup \) -ls
67255910 0 -rwxr--r-- 1 1045 1047 0 Jul 26 00:00 /root/data/file-26.txt
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
134356977 4 -rw-r--r-- 1 1045 1047 18 Oct 31 2018 /home/ops02/.bash_logout
134356978 4 -rw-r--r-- 1 1045 1047 193 Oct 31 2018 /home/ops02/.bash_profile
134356979 4 -rw-r--r-- 1 1045 1047 231 Oct 31 2018 /home/ops02/.bashrc
134356980 4 -rw------- 1 1045 1047 276 Jul 24 09:49 /home/ops02/.bash_history
134356968 4 -rw------- 1 1045 1047 637 Jul 24 09:16 /home/ops02/.viminfo
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
九、find执行的动作
-print #默认的动作 打印你所查找出来的文件的名称
-ls #把查找出来的文件以长格形式显示出来文件的详细信息
-delete #把查找出来的文件进行删除 只能删除空目录
-exec #后面加自定义的shell命令
[root@BC ~]# find / -maxdepth 2 \( -nouser -o -nogroup \)
/home/ops02
/data/ops02.txt
/data/ops02.log
/data/test
[root@BC ~]# find / -maxdepth 2 \( -nouser -o -nogroup \) -print
/home/ops02
/data/ops02.txt
/data/ops02.log
/data/test
[root@BC ~]# find / -maxdepth 2 \( -nouser -o -nogroup \) -ls
134356976 0 drwx------ 2 1045 1047 99 Jul 24 09:16 /home/ops02
818815 0 -rw-rw-r-- 1 1045 1047 0 Jul 24 09:11 /data/ops02.txt
820162 4 -rw-rw-r-- 1 1045 ops_group 6 Jul 24 09:15 /data/ops02.log
818814 0 drwxrwsr-x 2 1045 ops_group 6 Jul 24 09:21 /data/test
[root@BC ~]# find /opt/ -type d -name "opt"
/opt/
[root@BC ~]# ll /opt/
total 0
[root@BC ~]# cp /etc/hosts /opt/
[root@BC ~]# find /opt/ -type d -name "opt" -delete
find: cannot delete ‘/opt/’: Directory not empty
[root@BC ~]# ll /opt/
total 4
-rw-r--r-- 1 root root 158 Jul 27 12:11 hosts
[root@BC ~]# find /opt/ -type f -name "hosts" -delete
[root@BC ~]# ll /opt/
total 0
[root@BC ~]# find /opt/ -type d -name "opt" -delete
[root@BC ~]# find /root/data/ -type f
/root/data/file-24.txt
/root/data/file-25.txt
/root/data/file-26.txt
/root/data/file-27.txt
[root@BC ~]# find /root/data/ -type f -delete
[root@BC ~]# ll data/
total 0
#把某个目录下七天以前的数据删除
[root@BC ~]# find /backup -type f -mtime +7 -delete
[root@BC ~]# find /var/log/ -type f -name "*.log" -exec cp {} /opt/ \;
[root@BC ~]# ll /opt/
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:17 access.log
-rw------- 1 root root 26591 Jul 27 12:17 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:17 audit.log
-rw------- 1 root root 0 Jul 27 12:17 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:17 error.log
-rw------- 1 root root 4017 Jul 27 12:17 ifcfg.log
-rw------- 1 root root 1552657 Jul 27 12:17 journal.log
-rw------- 1 root root 0 Jul 27 12:17 ks-script-3PCKae.log
-rw------- 1 root root 110647 Jul 27 12:17 packaging.log
-rw------- 1 root root 29721 Jul 27 12:17 program.log
-rw------- 1 root root 124184 Jul 27 12:17 storage.log
-rw-r--r-- 1 root root 5840292 Jul 27 12:17 test.log
十、find和xargs命令的配合
[root@BC ~]# find /var/log/ -type f -name "*.log" | xargs cp -t /opt/a
[root@BC ~]# ll /opt/a
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:22 access.log
-rw------- 1 root root 26591 Jul 27 12:22 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:22 audit.log
-rw------- 1 root root 0 Jul 27 12:22 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:22 error.log
-rw------- 1 root root 4017 Jul 27 12:22 ifcfg.log
-rw------- 1 root root 1552657 Jul 27 12:22 journal.log
[root@BC ~]# find /var/log/ -type f -name "*.log" | xargs -I {} cp {} /opt/b
[root@BC ~]# ll /opt/b
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:23 access.log
-rw------- 1 root root 26591 Jul 27 12:23 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:23 audit.log
-rw------- 1 root root 0 Jul 27 12:23 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:23 error.log
-rw------- 1 root root 4017 Jul 27 12:23 ifcfg.log
[root@BC ~]# cp `find /var/log/ -type f -name "*.log"` /opt/c
[root@BC ~]# ll /opt/c
total 9076
-rw-r--r-- 1 root root 0 Jul 27 12:24 access.log
-rw------- 1 root root 26591 Jul 27 12:24 anaconda.log
-rw------- 1 root root 1485709 Jul 27 12:24 audit.log
-rw------- 1 root root 0 Jul 27 12:24 boot.log
-rw-r--r-- 1 root root 0 Jul 27 12:24 error.log
-rw------- 1 root root 4017 Jul 27 12:24 ifcfg.log
-rw------- 1 root root 1552657 Jul 27 12:24 journal.log
[root@BC ~]# \cp $(find /var/log/ -type f -name "*.log") /opt/c
$() == `` #优先执行里面的命令 把命令执行的结果交给外面的命令
[root@BC ~]# find /var/log/ -type f -name "*.log" |xargs ls -l
-rw-------. 1 root root 26591 Jul 6 02:17 /var/log/anaconda/anaconda.log
-rw-------. 1 root root 4017 Jul 6 02:17 /var/log/anaconda/ifcfg.log
-rw-------. 1 root root 1552657 Jul 6 02:17 /var/log/anaconda/journal.log
-rw-------. 1 root root 0 Jul 6 02:17 /var/log/anaconda/ks-script-3PCKae.log
-rw-------. 1 root root 110647 Jul 6 02:17 /var/log/anaconda/packaging.log
-rw-------. 1 root root 29721 Jul 6 02:17 /var/log/anaconda/program.log
[root@BC ~]# find /opt/a -type f -name "*.log" |xargs rm -f
[root@BC ~]# ll /opt/a
total 0
场景1:服务器磁盘满,一般由大的日志文件导致,需找到大文件并删除。
解决1: find / -size +500M -print0|xargs -0 du -m|sort -nr
find指令为找出500M以上的文件,print0和xargs -0配合使用,用来解决文件名中有空格或特殊字符问题。du -m是查看这些文件的大小,并以m为单位显示。最后sort -nr是按照数字反向排序(大的文件在前)
解决2:上述方法从根路径查找,可能列出一些系统文件。可以在这个查找之前先进行一下过滤。
使用du -m -d 1 /|sort -nr 先看看根路径下,哪个文件夹比较大,并且有嫌疑是导致磁盘满的罪魁祸首。然后再基于那个目录进行find。
场景2: 记得写过一个xxx.c的文件,但是忘了放哪里了
解决: find / -name *xxx*.c 模糊查找下这个文件
2020年07月28日上午(day18)
一、day15作业
1.用户基础权限为9位,每三位为一组,每组代表着谁的权限?
属主 属组 其他用户
2.权限中的rwx-,每个字符所代表什么意思?对应的数字是什么?
r 可读 4
w 可写 2
x 可执行 1
- 没有权限 0
3.-rwxr-xr-x,写出对应数字权限
755
4.-rwxr--r--,写出对应数字权限
744
5.-r-xr-x--x,写出对应数字权限
551
6.-rw-r-xr-x,写出对应数字权限
655
7.-r--r--r--,写出对应数字权限
444
8.-r-xr-----,写出对应数字权限
540
9.---x-w-r--,写出对应数字权限
124
10.-rwxr--rw-,写出对应数字权限
746
11.-rw-r--r--,写出对应数字权限
644
12.---xr--rwx,写出对应数字权限
147
13.777,写出对应字母权限
-rwxrwxrwx
14.545,写出对应字母权限
-r-xr--r-x
15.744,写出对应字母权限
-rwxr--r--
16.600,写出对应字母权限
-rw-------
17.641,写出对应字母权限
-rw-r----x
18.711,写出对应字母权限
-rwx--x--x
19.700,写出对应字母权限
-rwx------
20.555,写出对应字母权限
-r-xr-xr-x
21.733,写出对应字母权限
-rwx-wx-wx
22.713,写出对应字母权限
-rwx--x-wx
23.建一个目录/test,查看这个目录的默认权限是?
755
24.进入/test目录中,建一个文件abc,查看其默认的权限为?
644
25.创建一个文件test.txt,并其将权限改为600.
[root@BC ~]#chmod 600 test.txt
26.将test.txt文件的权限改为755.
[root@BC ~]#chmod 755 test.txt
27.将test.txt文件的权限改为000.
[root@BC ~]#chmod 000 test.txt
28.修改test.txt文件的权限为644.
[root@BC ~]#chmod 644 test.txt
29.给test.txt文件的属主加上x权限。
[root@BC ~]#chmod u+x test.txt
30.给test.txt文件的其他用户加上x权限。
[root@BC ~]#chmod o+x test.txt
31.去除test.txt文件的所有执行权限。
[root@BC ~]#chmod -x test.txt
32.给/test目录及目录下的所有文件或目录的权限统一改为744。
[root@BC ~]#chmod -R 744 /test
33.给/test目录及目录下的所有文件或目录加上x权限(属主、属组、其他用户都执行权限)。
[root@BC ~]#chmod -R +x /test
34.使用stat命令查看test.txt文件的权限,并使用awk将权限取出来,比如:755
[root@BC ~]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67125348 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-27 16:29:57.708000982 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-06 02:13:36.028996182 +0800
Birth: -
[root@BC ~]# stat /etc/hosts | awk -F \'[(/]\' \'NR==4{print $2}\'
0644
35.使用stat命令查看test.txt文件的权限,并使用sed将权限取出来,比如:755
[root@BC ~]# stat /etc/hosts | sed -nr \'4s#(^.*\()(.*)(/[-d].*$)#\2#gp\'
0644
[root@BC ~]# stat /etc | sed -nr \'4s#(^.*\()(.*)(/[-d].*$)#\2#gp\'
0755
二、day16作业
1.创建目录/web01,所有者是user01,所属组是user02;创建目录/web02,所有者是user02,所属组是user01。
[root@BC ~]#useradd user01
[root@BC ~]#useradd user02
[root@BC ~]#mkdir /web01 /web02
[root@BC ~]#chown user01.user02 /web01
[root@BC ~]#chown user02.user01 /web02
2.复制/etc/fstab文件到/opt下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限
[root@BC ~]#cp /etc/fstab /opt
[root@BC ~]#groupadd apps
[root@BC ~]#useradd tomcat
[root@BC ~]#chown tomcat.apps /opt/fstab
[root@BC ~]#chmod 660 /opt/fstab
3.将以下权限翻译成数字,将数字权限用字母表示
rw-r-xr-- 654
rw-r--r-- 644
rwx--x--x 711
rw------- 600
rwxr--r-- 744
rw-rw-r-- 664
rwxrwxrwx 777
751 rwxr-x--x
771 rwxrwx--x
632 rw--wx-w-
551 r-xr-x--x
622 rw--w--w-
746 rwxr--rw-
644 rw-r--r--
755 rwxr-xr-x
4.假设公司研发部的用户david和peter属于组A,财务部的用户life和laowang属于组B,根据要求创建用户及组。
[root@BC ~]#groupadd A
[root@BC ~]#groupadd B
[root@BC ~]#useradd -g A david
[root@BC ~]#useradd -g A peter
[root@BC ~]#useradd -g B life
[root@BC ~]#useradd -g B laowang
5.接第4题,建立目录file1,该目录里面的文件只能由研发部人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何操作
[root@BC ~]#mkdir -m 770 file1
[root@BC ~]#chown .A file1
或
[root@BC ~]#chgrp A file1
6.接第4题,建立目录file2,该目录里面的文件只能由财务部人员读取、增加、删除、修改以及执行,其他用户不能对该目录进行任何操作
[root@BC ~]#mkdir file2
[root@BC ~]#chown .B file2
[root@BC ~]#chmod 770 file2
7.接第4题,建立目录file3,该目录里面的文件研发部人员可以读取、增加、删除、修改以及执行,其他部门只能做查看操作
[root@BC ~]#mkdir -m 775 file3
[root@BC ~]#chgrp A file3
8.接第4题,建立目录file4,该目录里面的文件只有研发部的经理David拥有所有操作权限,研发部的其他人只有查看权限,其他部门不能进行任何操作
[root@BC ~]#mkdir -m 750 file4
[root@BC ~]#chown David.A file4
9.新建用户组,shengchan,demo,要求如下:
01、tom是shengchan组的附加成员
02、leo是demo组的附加成员
03、新建用户admin不属于以上任何一个组
[root@BC ~]#groupadd shengchan
[root@BC ~]#groupadd demo
[root@BC ~]#useradd -g shengchan tom
[root@BC ~]#useradd -g demo leo
[root@BC ~]#useradd admin
10.新建目录要求如下:
01、/pub/目录为公共存储目录,所有用户可以读写执行
02、/sc目录是生产部的目录,生产部的成员读写执行,并且生产部人员建立的文件自动归属到
shengchan组中
03、admin用户可以在/sc目录中可以读
[root@BC ~]#mkdir -m 777 /pub
[root@BC ~]#mkdir -m 2770 /sc
[root@BC ~]#chgrp shengchan /sc
[root@BC ~]#chmod o=rx /sc
11.新建目录/www01,/www02,/www03
[root@BC ~]#mkdir /www{01..03}
12.接第11题,更改/www01目录的权限,使其他用户对它没有任何权限;
[root@BC ~]#chmod o=- /www01
13.接第11题,更改/www02目录的权限,使所属组对它拥有读写执行权限;
[root@BC ~]#chmod g=rwx /www02
14.接第11题,更改/www03目录的权限,任何用户都可以读写,但是在/www03目录中创建的任何文件都属于grp1组
[root@BC ~]#chmod 2777 /www03
[root@BC ~]#groupadd grp1
[root@BC ~]#chgrp -R grp1 /www03
15.新建用户zhangsan,lisi,wangergou,三个用户都属于同一个用户组f4,密码都为oldboy
[root@BC ~]#groupadd f4
[root@BC ~]#useradd -g f4 zhangsan
[root@BC ~]#useradd -g f4 lisi
[root@BC ~]#useradd -g f4 wangergou
[root@BC ~]#echo "oldboy" |passwd --stdin zhangsan
[root@BC ~]#echo "oldboy" |passwd --stdin lisi
[root@BC ~]#echo "oldboy" |passwd --stdin wangergou
16.接15题,上述用户和组都能在/data/code目录,访问,创建,删除文件,其他用户无法访问该目录
[root@BC ~]#mkdir -p -m 770 /data/code
[root@BC ~]#chown -R .f4 /data/code
17.接15题,/data/code目录下创建的所有文件自动归属于f4组所有
[root@BC ~]#chmod g+s /data/code
18.接15题,现在新增了一批用户,属于默认组,需要开放其他用户在code目录的读权限
[root@BC ~]#chmod o=rx /data/code
19.接15题,新增的所有其他用户在code目录下创建的文件自动归属f4组
[root@BC ~]#chmod o=rwx /data/code
20.有两个用户组,分别为python组、linux组,python组的人可以修改读取python组的文件,但不能让linux组的人读取;linux组的人可以修改读取linux组的文件,但不能让python组的人读取。
[root@BC ~]#groupadd linux
[root@BC ~]#grouadd python
[root@BC ~]#touch python.txt
[root@BC ~]#chmod 770 python.txt
[root@BC ~]#chgrp python python.txt
[root@BC ~]#touch linux.txt
[root@BC ~]#chmod 770 linux.txt
[root@BC ~]#chgrp python linux.txt
21.在当前目录中新建文件text,假设该文件的权限为614。现要求设置该文件属主(u)增加执行权限,属组(g)增加写权限,其他用户(o)删除读权限,应该如何操作,另外修改后的权限用字母应该如何表示
[root@BC ~]#touch text
[root@BC ~]#chmod 614 text
[root@BC ~]#chmod 730 text
-rwx-wx---
22.在当前目录中创建目录aaa,并把该目录的权限设置为只有文件主有读、写和执行权限
[root@BC ~]#mkdir -m 700 aaa
23.设某文件myfile的权限为-rw-r--r--,若要增加所有人可执行的权限,应该怎么做
[root@BC ~]#chmod +x myfile
24.登录到普通用户user01,删除/opt这个目录,提示权限不足,如果要删除/opt这个目录,不使用root用户删除的话,你该怎么解决?
sudo提权
[root@BC ~]#chmod u+s /usr/bin/rm
25.创建目录/test,要求所有用户对这个目录有所有权限,现在只想让每个用户在这个目录只能对属于自己的文件进行操作,怎么实现?
[root@BC ~]#mkdir -m 1777 /test
26.创建一个文件/opt/file.txt,这个文件很重要,现要求所有人只能查看和追加内容进去,不允许有其他的操作,怎么实现?
[root@BC ~]#chattr +a /opt/file.txt
27.取消上题的设置,现要求所有人只能查看此文件,不允许有其他的操作,怎么实现?
[root@BC ~]#chattr -a /opt/file.txt
[root@BC ~]#chattr -i /opt/file.txt
28.请问在当前系统中新创建的目录和文件,权限各是多少,为什么?
目录755
文件644
因umask 控制权限
29.如果我想要在系统中新创建的目录权限为555,文件为444,怎么实现?
umask 222
30.umask怎么计算目录及文件权限的?
目录最大777 减去umask权限
文件最大666 减去umask 文件权限遇到奇数时,在奇数为加1
31.在你修改了test.txt文件之后,如何知道在你下次要修改这个文件时,这个文件有没有被别人修改过?
[root@BC ~]# cp /etc/hosts ./
[root@BC ~]# ll
total 4
drwxr-xr-x 2 root root 6 Jul 27 12:12 data
-rw-r--r-- 1 root root 158 Jul 28 10:29 hosts
[root@BC ~]# md5sum hosts > figer.txt
[root@BC ~]# cat figer.txt
54fb6627dbaa37721048e4549db3224d hosts
[root@BC ~]# md5sum -c figer.txt
hosts: OK
[root@BC ~]# echo "1" >> hosts
[root@BC ~]# md5sum -c figer.txt
hosts: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
32.输入时间命令"date"将当前系统时间输出到/data/1.txt
[root@BC ~]# date
Tue Jul 28 10:31:47 CST 2020
[root@BC ~]# mkdir -p /data
[root@BC ~]# date > /data/1.txt
[root@BC ~]# cat /data/1.txt
Tue Jul 28 10:32:22 CST 2020
33.输入时间命令"date"将当前系统时间追加到/data/1.txt
[root@BC ~]# date >> /data/1.txt
34.在当前系统能ping通百度的情况下,使用" ping -c3 baidu.com "将返回的信息输出到/data/1.txt
[root@BC ~]# ping -c3 baidu.com >/data/1.txt
[root@BC ~]# cat /data/1.txt
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=31.7 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=33.6 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=128 time=30.9 ms
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 30.939/32.112/33.623/1.140 ms
35.使用“ls /ta”将错误的信息输出到/data/1.txt
[root@BC ~]# ls /ta 2>/data/1.txt
[root@BC ~]# cat /data/1.txt
ls: cannot access /ta: No such file or directory
36.将/data/1.txt的文件内容,标准输出到/data/2.txt
[root@BC ~]# cat /data/1.txt > /data/2.txt
[root@BC ~]# cat /data/2.txt
ls: cannot access /ta: No such file or directory
37.使用"seq 10 50"将以0结尾的行标准输出到3.txt
[root@BC ~]# seq 10 50 | grep \'0$\' > 3.txt
[root@BC ~]# cat 3.txt
10
20
30
40
50
[root@BC ~]# seq 10 50 | sed -n \'/0$/p\'
10
20
30
40
50
[root@BC ~]# seq 10 50 | awk \'/0$/\'
10
20
30
40
50
38.把/etc/fstab文件内容重定向到/tmp目录下文件名为fstab.out
[root@BC ~]# cat /etc/fstab > /tmp/fstab.out
[root@BC ~]# cat /tmp/fstab.out
#
# /etc/fstab
# Created by anaconda on Mon Jul 6 02:13:15 2020
#
# Accessible filesystems, by reference, are maintained under \'/dev/disk\'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=4aa02e85-ffe1-4783-9886-a328f923bee8 / xfs defaults 0 0
UUID=70df4a5b-091c-4aaa-9cc7-d745201ec394 /boot xfs defaults 0 0
UUID=6aefd444-30dc-4c0e-9a8d-75a8b1d9856b swap swap defaults 0 0
39.把字符"hello world"追加到/tmp/fstab.out文件尾部
[root@BC ~]# echo "hello world" >> /tmp/fstab.out
40.输入df -h,取出当前系统根分区已用磁盘空间的百分比,并将取出来的数值输出到/data/1.txt
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 1.4G 97G 2% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
[root@BC ~]# df -h | awk \'/\/$/\'
/dev/sda3 98G 1.4G 97G 2% /
[root@BC ~]# df -h | awk \'/\/$/{print $5}\'
2%
[root@BC ~]# df -h | awk \'/\/$/{print $(NF-1)}\' >/data/1.txt
41.使用命令ping测试10.0.0.100是否通畅,把输出的结果不管是正确的还是错误的都追加到/data/1.txt
[root@BC ~]# ping -c4 10.0.0.100 &> /data/1.txt
[root@BC ~]# cat /data/1.txt
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
64 bytes from 10.0.0.100: icmp_seq=1 ttl=64 time=0.134 ms
64 bytes from 10.0.0.100: icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from 10.0.0.100: icmp_seq=3 ttl=64 time=0.038 ms
64 bytes from 10.0.0.100: icmp_seq=4 ttl=64 time=0.034 ms
--- 10.0.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.034/0.061/0.134/0.042 ms
42.使用重定向从文件/etc/passwd中读取数据。
[root@BC ~]# cat < /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
43.用 << 举个命令的使用例子。
[root@BC ~]# cat >123.txt<<EOF
> 12
> EOF
[root@BC ~]# cat 123.txt
12
44.改变文件所有者的命令是?
[root@BC ~]#chown
45.新建用户oldboy,oldgirl,属同一用户组edu
[root@BC ~]#groupadd edu
[root@BC ~]#useradd -g edu oldboy
[root@BC ~]#useradd -g edu oldgirl
46.修改文件1.txt的所有者为oldboy,属组为edu
[root@BC ~]#chown oldboy.edu 1.txt
47.除所有者以外,属组和其他用户均没有任何权限(要求普通用户进行验证)
[root@BC ~]# ll -d 1.txt
-rwx------ 1 oldboy edu 422 Jul 24 18:44 1.txt
[root@BC ~]# cp -a 1.txt /
[root@BC ~]# su - jh
Last login: Fri Jul 24 18:45:08 CST 2020 on pts/2
[jh@BC ~]$ cd /
[jh@BC /]$ echo \'1\' >1.txt
-bash: 1.txt: Permission denied
48.复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他人无权限
[root@BC ~]#cp /etc/fstab /var/tmp
[root@BC ~]#useradd wangcai
[root@BC ~]#groupadd sysadmins
[root@BC ~]#chmod 660 /var/tmp/fstab
49.创建下面的用户、组和组成员关系,用户natasha,使用admins作为附属组,用户harry,也使用admins作为附属组,用户sh,不可以登录系统,natasha,harry,sh密码都是centos
[root@BC ~]#groupadd admins
[root@BC ~]#useradd -G admins natasha
[root@BC ~]#useradd -G admins harry
[root@BC ~]#useradd -M -s /sbin/nologin
[root@BC ~]#echo "centos" | passwd --stdin natasha
[root@BC ~]#echo "centos" | passwd --stdin harry
[root@BC ~]#echo "centos" | passwd --stdin sh
50.新建一个用户rose,uid为555,gid为500,注释信息为:linux,家目录在/rose
[root@BC ~]#groupadd -g 500 rose
[root@BC ~]#useradd -u 555 -g 500 -c "linux" -d /rose rose
51.翻译题
01).command not found #没有这个命令
02).No such file or directory #没有这个文件或者目录
03).Permission denied #权限不足
04).overwrite #覆盖
05).File exists #文件已存在
06).Is a directory #这是个目录
07).Not a directory #这不是个目录
08).Warning: Changing a readonly file #警告:改变了一个只读文件
09).Found a swap file by the name ".1.swp" #找到一个交换文件,他的名字是.1.swp
10).unrecognized option \'--oldboy\' #未知的选项 --oldboy
11).Operation not permitted #操作不允许
12).invalid option #无效的选项
三、day17作业
1.找出/tmp目录下,属主不是root,且文件名不以f开头的文件
[root@BC ~]#find /tmp -type f ! -user root -name "[^f]*"
2.查找/etc/目录下,所有.conf后缀的文件
[root@BC ~]#find /etc/ -type f -name "*.conf"
3.查找/var目录下属主为root,且属组为mail的所有文件
[root@BC ~]#find /var -user root -a -group mail
[root@BC ~]# find /var -user root -a -group mail -ls
201345345 4 drwxrwxr-x 2 root mail 4096 Jul 24 09:08 /var/spool/mail
201696091 4 -rw------- 1 root mail 1857 Jul 22 11:11 /var/spool/mail/root
4.查找/var目录下7天以前,同时属主不为root,也不是postfix的文件
[root@BC ~]#find /var -type f -mtime +7 ! -user root -a ! -user postfix
[root@BC ~]# find /var -type f -mtime +7 ! \( -user root -o -user postfix \) -ls
5.查找/etc目录下大于1M且类型为普通文件的所有文件
[root@BC ~]#find /etc -type f -size +1M
6.查找/etc目录下所有用户都没有写权限的文件
[root@BC ~]#find /etc/ ! -perm /222 -ls
7.查找/目录下最后创建时间是3天前,后缀是*.log的文件
[root@BC ~]#find / -type f -mtime +3 -name "*.log"
8.查找/目录下文件名包含txt的文件
[root@BC ~]#find / -type -name "*txt*"
9.查找/目录下属主是oldboy并且属组是oldboy的文件
[root@BC ~]#find / -user oldboy -group oldboy
10.查找/目录下属主是oldboy但是属组不是oldboy的文件
[root@BC ~]#find / -user oldboy ! -group oldboy
11.查找/目录下属主是oldboy或者属主是oldgirl的文件
[root@BC ~]#find / \( -user oldboy -o -user oldgirl \)
12.查找/tmp目录下属主既不是oldboy,也不是oldgirl的文件
[root@BC ~]#find /tmp -type f ! -user oldboy -a ! -user oldgirl
[root@BC ~]# find /tmp -type f ! \( -user oldboy -o -user oldgirl \) -ls
13.查找/var/log目录下7天以前的文件
[root@BC ~]#find /var/log -type f -mtime +7
14.查找/tmp目录下15天以前的文件删除
[root@BC ~]#find /tmp -type f -mtime +15 -delete
[root@BC ~]#find /tmp -type f -mtime +15 | xargs rm -f
[root@BC ~]#find /tmp -type f -mtime +15 -exec rm -f {} \;
[root@BC ~]#rm -f $(find /tmp -type f -mtime +15 )
[root@BC ~]#rm -f `find /tmp -type f -mtime +15 `
15.查找/home目录下,类型是目录的,并且属主是oldboy的目录
[root@BC ~]#find /home -type d -user oldboy
16.查找/var/log下大于100kb且以log结尾的所有文件
[root@BC ~]#find /var/log -type f -size +100k -name "*log"
17.查找tmp目录下所属组group1,所属主user1的目录
[root@BC ~]#find /tmp -type d -user user1 -a -group group1
18.同时查找根目录下名为1.txt,2.txt的文件和名字带a的目录
[root@BC ~]# find /data -type f -name "[12].txt" -o -type d -name "*a*"
/data
/data/1.txt
/data/2.txt
[root@BC ~]# find /data \( -type f -name "[12].txt" -o -type d -name "*a*" \) -ls
818813 0 drwxrws--- 3 root ops_group 147 Jul 28 10:35 /data
818804 4 -rw-r--r-- 1 root ops_group 432 Jul 28 10:44 /data/1.txt
818807 4 -rw-r--r-- 1 root ops_group 49 Jul 28 10:35 /data/2.txt
19.查找/tmp目录下所有文件并删除
[root@BC ~]#find /tmp -type f -delete
20.查找/etc目录下至少有一类用户没有写权限的文件
[root@BC ~]#find /etc -type f ! -perm -222
[root@BC ~]# find /etc -type f ! -perm -222 -ls
21.查找/var目录下不属于root、lp、gdm的所有文件
[root@BC ~]#find /var -type f ! \( -user root -o -user lp -o -user gdm \)
[root@BC ~]# find /var -type f ! \( -user root -o -user lp -o -user gdm \) -ls
22.将/etc/中的所有目录(仅目录)复制到/tmp下,目录结构不变
[root@BC ~]# find /etc -type d | xargs -I {} mkdir -p /tmp/{}
[root@BC ~]# find /etc/ -type d -exec mkdir -p /opt/{} \;
23.将/etc目录复制到/var/tmp/,/var/tmp/etc的所有目录权限777 /var/tmp/etc目录中所有文件权限666
[root@BC ~]#cp -a /etc /var/tmp/
[root@BC ~]#find /var/tmp/etc/ -type d -exec chmod 777 {} \;
[root@BC ~]#find /var/tmp/etc/ -type f -exec chmod 666 {} \;
24.保留/var/log/下最近7天的日志文件,其他全部删除
[root@BC ~]#find /var/log ! -mtime -7 -delete
25.创建touch file{1..10}10个文件, 保留file9,其他一次全部删除
[root@BC opt]# find ./ -type f ! -name "file9" -delete
[root@BC opt]# find ./ -type f -name "file[^9]*" -delete
26.解释如下每条命令含义
mkdir /root/dir1 #创建目录
touch /root/dir1/file{1..10} #创建文件
find /root/dir1 -type f -name "file5" #查找文件名为file5的文件
find /root/dir1 ! -name "file5" #查找文件名不是file5的文件
find /root/dir1 -name "file5" -o -name "file9" #查找文件名是file5或者是file9的文件
#错误写法
find /root/dir1 -name "file5" -o -name "file9" -ls #查找文件名是file5或者是file9的文件并显示详细信息
find /root/dir1 \( -name "file5" -o -name "file9" \) -ls #查找文件名是file5或者是file9的文件并显示详细信息
find /root/dir1 \( -name "file5" -o -name "file9" \) -exec rm -rvf {} \;
#删除file5或者file9
find /root/dir1 ! \( -name "file4" -o -name "file8" \) -exec rm -vf {} \;
#删除文件名不叫file4或者file8的文件
2020年07月29日上午(day19)
一、压缩的概念
什么是压缩包?
就是一个特殊的文件,将多个文件或者目录压缩成一个特殊的文件
为什么要用压缩包?
减少占用的空间
加快传输的速度
windows:
.zip .rar
linux:
.zip .gz .tar.gz
如果要想Windows和linux中的压缩包互相使用,建议使用.zip种类的压缩包
在Linux中压缩包的类型
.zip #根据zip命令进行打包压缩的
.gz #通过gzip命令进行压缩 只压缩文件,也会删除源文件
.bz2 #通过bzip进行压缩, 只压缩文件,也会删除源文件
.tar.gz #使用tar命令归档打包,然后使用gzip命令进行压缩
.tar.bz2 #使用tar命令归档打包,然后使用bzip命令进行压缩
二、zip命令
可以对文件和目录进行打包,需要指定压缩包的名称
[root@BC ~]# yum install -y zip unzip
zip #压缩的命令
选项:
-r #压缩目录
-q #静默输出,不显示压缩的过程
unzip #解压zip格式的压缩包
选项:
-l #查看压缩包中的列表信息
-q #静默输出,不显示解压的过程
-d #指定解压的目录
[root@BC ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
#针对文件进行压缩打包
[root@BC ~]# zip services.zip services
adding: services (deflated 80%)
[root@BC ~]# ll
total 792
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
#压缩目录时不加选项,只压缩目录本身
[root@BC ~]# zip etc.zip /etc
adding: etc/ (stored 0%)
[root@BC ~]# ll
total 796
-rw-r--r-- 1 root root 158 Jul 29 09:07 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[root@BC ~]# unzip -l etc.zip
Archive: etc.zip
Length Date Time Name
--------- ---------- ----- ----
0 07-29-2020 08:56 etc/
--------- -------
0 1 file
[root@BC ~]# unzip etc.zip
Archive: etc.zip
creating: etc/
[root@BC ~]# ll
total 796
drwxr-xr-x 2 root root 6 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 09:07 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[root@BC ~]# ll etc
total 0
[root@BC ~]# zip -r etc.zip /etc
[root@BC ~]# ll -h
total 13M
-rw-r--r-- 1 root root 12M Jul 29 09:10 etc.zip
-rw-r--r-- 1 root root 655K Jul 29 08:45 services
-rw-r--r-- 1 root root 134K Jul 29 09:06 services.zip
[root@BC ~]# du -sh /etc
31M /etc
#查看压缩包里面的文件
[root@BC ~]# unzip -l etc.zip
#静默输出
[root@BC ~]# zip -rq etc1.zip /etc
[root@BC ~]# ll
total 24976
-rw-r--r-- 1 root root 12380952 Jul 29 09:13 etc1.zip
-rw-r--r-- 1 root root 12380952 Jul 29 09:10 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
#解压
[root@BC ~]# unzip etc.zip
#静默解压文件,将文件解压到指定的目录下面
[root@BC ~]# unzip -q etc.zip -d /opt/
[root@BC ~]# ll /opt/
total 12
drwxr-xr-x 85 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 0 Jul 28 12:09 file9
三、gzip命令
gzip #只能压缩文件,压缩文件的同时,会删除源文件,解压的时候,会删除压缩文件
选项:
-d #解压
-r #递归操作
[root@BC ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
[root@BC ~]# gzip services
[root@BC ~]# ll
total 136
-rw-r--r-- 1 root root 136088 Jul 29 08:45 services.gz
#使用zcat命令查看gzip压缩的文件
[root@BC ~]# zcat services.gz
#解压
[root@BC ~]# gzip -d services.gz
[root@BC ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
#将目录下的所有都进行压缩处理
[root@BC ~]# gzip -r /etc
#解压目录下的所有压缩包
[root@BC ~]# gzip -rd /etc
[root@BC ~]# yum install -y bzip2
#压缩
[root@BC ~]# bzip2 services
[root@BC ~]# ll
total 124
-rw-r--r-- 1 root root 123932 Jul 29 08:45 services.bz2
#解压
[root@BC ~]# bzip2 -d services.bz2
[root@BC ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
#查看bzip2压缩的文件
[root@BC ~]# bzcat services.bz2
四、tar命令
不负责压缩,只负责归档打包
选项:
z #使用gzip格式进行压缩
j # 使用bzip2格式进行压缩 了解
J #使用xz格式进行压缩 了解
c #创建压缩包
v #显示过程
f #指定压缩包的名称
czf #打包压缩 tar.gz格式的压缩包
cjf #打包压缩 tar.bz2格式的压缩包 了解
cJf #打包压缩 tar.xz格式的压缩包 了解
t #查看压缩中的内容
tf #指定要查看的压缩包名称
x #解压
xf #解压指定的压缩包
-C #解压到指定的目录
h #打包软连接的真实路径
P #使用绝对路径打包
X #指定排除文件的列表文件
--exclude= #指定排除的文件
--exclude-from= #指定排除文件的列表
[root@BC ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
[root@BC ~]# tar czf services.tar.gz services
[root@BC ~]# ll
total 792
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
[root@BC ~]# tar cjf services.tar.bz2 services
[root@BC ~]# ll
total 916
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
[root@BC ~]# tar cJf services.tar.xz services
[root@BC ~]# ll
total 1016
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@BC ~]# tar czf etc.tar.gz /etc
tar: Removing leading `/\' from member names #删根的操作是正常的
[root@BC ~]# ll
total 10952
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
[root@BC ~]# tar tf services.tar.gz
services
[root@BC ~]# tar xf services.tar.gz
[root@BC ~]# ll
total 10952
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@BC ~]# tar xf etc.tar.gz
[root@BC ~]# ll
total 10964
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@BC ~]# tar cjf etc.tar.bz2 /etc
tar: Removing leading `/\' from member names
[root@BC ~]# tar cJf etc.tar.xz /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 26808
-rw-r--r-- 1 root root 8994047 Jul 29 10:01 etc.tar.bz2
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 7238084 Jul 29 10:01 etc.tar.xz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@BC ~]# tar xf etc.tar.bz2 #解压的时候,自动识别压缩包的格式
[root@BC ~]# ll
total 26820
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 8994047 Jul 29 10:01 etc.tar.bz2
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 7238084 Jul 29 10:01 etc.tar.xz
[root@BC ~]# tar xf etc.tar.gz -C /opt/
[root@BC ~]# ll /opt/
total 668
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
[root@BC ~]# tar czvf etc.tar.gz /etc
[root@BC ~]# tar xvf etc.tar.gz
[root@BC ~]# ll /bin -d
lrwxrwxrwx. 1 root root 7 Jul 6 02:13 /bin -> usr/bin
[root@BC ~]# tar czf bin.tar.gz /bin
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 9952
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
[root@BC ~]# tar xf bin.tar.gz
[root@BC ~]# ll
total 9952
lrwxrwxrwx 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
[root@BC ~]# tar czhf bin1.tar.gz /bin
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from hard link targets
[root@BC ~]# ll
total 36880
lrwxrwxrwx 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
#打包的时候有个删根的操作 怎么避免这个删根的操作
#第一种 使用相对路径打包
[root@BC ~]# cd /
[root@BC /]# tar czf /root/etc1.tar.gz etc
[root@BC /]# ll /root
total 46852
dr-xr-xr-x 2 root root 20480 Jul 29 08:58 bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:19 etc1.tar.gz
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
#真实打包场景
[root@BC ~]# cd / && tar czf /root/etc3.tar.gz etc && cd -
/root
[root@BC ~]# ll
total 581012
dr-xr-xr-x 2 root root 20480 Jul 29 08:58 bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:19 etc1.tar.gz
-rw-r--r-- 1 root root 347209728 Jul 29 10:22 etc2.tar.gz
-rw-r--r-- 1 root root 10171684 Jul 29 10:22 etc3.tar.gz
#第二种方法 使用绝对路径打包 告诉系统不要删根
#使用绝对路径打包
[root@BC ~]# tar czPf etc4.tar.gz /etc
#使用绝对路经解压
[root@BC ~]# tar xPf etc4.tar.gz
[root@BC ~]# cat /etc/services >> /opt/services
[root@BC ~]# ll /opt/
total 1744
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 10:28 hosts
-rw-r--r-- 1 root root 1340586 Jul 29 10:29 services
[root@BC ~]# tar xPf opt.tar.gz
[root@BC ~]# ll /opt/
total 672
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 10:28 hosts
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
#排除不需要打包的文件
[root@BC ~]# tar czf etc1.tar.gz /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 9936
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
[root@BC ~]# ll /etc/services
-rw-r--r-- 1 root root 670293 Jun 7 2013 /etc/services
[root@BC ~]# tar czf etc2.tar.gz --exclude=/etc/services /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 19740
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
[root@BC ~]# tar tf etc2.tar.gz | grep services
etc/firewalld/services/
#排除多个文件
[root@BC ~]# tar czf etc3.tar.gz --exclude=/etc/services --exclude=/etc/passwd /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 29544
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
[root@BC ~]# tar tf etc3.tar.gz | grep -E \'services|passwd\'
etc/security/opasswd
etc/passwd-
etc/pam.d/passwd
etc/firewalld/services/
[root@BC ~]# tar czf etc4.tar.gz --exclude=/etc/{services,passwd} /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 39348
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
[root@BC ~]# cat paichu.list
/etc/fstab
/etc/group
/etc/hosts
/etc/passwd
/etc/services
[root@BC ~]# tar czfX etc5.tar.gz paichu.list /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 49152
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 10:58 etc5.tar.gz
-rw-r--r-- 1 root root 59 Jul 29 10:57 paichu.list
[root@BC ~]# tar tf etc5.tar.gz | grep -Ew \'fstab|group|hosts|passwd|services\'
etc/security/group.conf
etc/group-
etc/passwd-
etc/hosts.allow
etc/hosts.deny
etc/pam.d/passwd
etc/iproute2/group
etc/firewalld/services/
[root@BC ~]# tar czf etc6.tar.gz --exclude-from=paichu.list /etc
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 58952
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 10:58 etc5.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 11:01 etc6.tar.gz
-rw-r--r-- 1 root root 59 Jul 29 10:57 paichu.list
五、tar命令与find命令结合
[root@BC ~]# tar czf log1.tar.gz `find /var/log/ -type f -name "*.log"`
tar: Removing leading `/\' from member names
[root@BC ~]# tar czf log2.tar.gz $(find /var/log/ -type f -name "*.log")
tar: Removing leading `/\' from member names
[root@BC ~]# find /var/log/ -type f -name "*.log" -exec tar czf log3.tar.gz {} \;
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from member names
[root@BC ~]#
[root@BC ~]# find /var/log/ -type f -name "*.log" | xargs tar czf log4.tar.gz
tar: Removing leading `/\' from member names
[root@BC ~]# ll
total 916
-rw-r--r-- 1 root root 309155 Jul 29 11:09 log1.tar.gz
-rw-r--r-- 1 root root 309155 Jul 29 11:09 log2.tar.gz
-rw-r--r-- 1 root root 356 Jul 29 11:10 log3.tar.gz
-rw-r--r-- 1 root root 309155 Jul 29 11:10 log4.tar.gz
[root@BC ~]# tar tf log1.tar.gz
var/log/tuned/tuned.log
var/log/audit/audit.log
var/log/anaconda/anaconda.log
var/log/anaconda/X.log
var/log/anaconda/program.log
var/log/anaconda/packaging.log
var/log/anaconda/storage.log
var/log/anaconda/ifcfg.log
var/log/anaconda/ks-script-3PCKae.log
var/log/anaconda/journal.log
var/log/boot.log
var/log/vmware-vmsvc.log
var/log/vmware-network.8.log
var/log/vmware-network.5.log
var/log/vmware-network.2.log
var/log/vmware-network.7.log
var/log/vmware-network.4.log
var/log/vmware-network.1.log
var/log/test.log
var/log/yum.log
var/log/vmware-network.9.log
var/log/nginx/error.log
var/log/nginx/access.log
var/log/vmware-network.6.log
var/log/vmware-network.3.log
var/log/vmware-network.log
[root@BC ~]# tar tf log3.tar.gz
var/log/vmware-network.log
当使用-exec时, 把find查找的文件是进行一个个赋值给{}的
xargs 把find命令查找出来的文件统一的赋值给了后面
六、date命令
#显示系统时间
[root@BC ~]# date
Wed Jul 29 11:19:19 CST 2020
[root@BC ~]# date +%Y #世纪
2020
[root@BC ~]# date +%y #年代
20
[root@BC ~]# date +%m #月份
07
[root@BC ~]# date +%d #日期
29
[root@BC ~]# date +%Y-%m-%d
2020-07-29
[root@BC ~]# date +%F #显示日期
2020-07-29
[root@BC ~]# date +%y-%m-%d
20-07-29
[root@BC ~]# date +%H #时
11
[root@BC ~]# date +%M #分
23
[root@BC ~]# date +%S #秒
24
[root@BC ~]# date
Wed Jul 29 11:23:28 CST 2020
[root@BC ~]# date +%H:%M:%S
11:23:43
[root@BC ~]# date +%T #显示时间
11:24:08
[root@BC ~]# date +%F-%T
2020-07-29-11:24:34
[root@BC ~]# date +%w #周几
3
[root@BC ~]# date +%W #今年第几周
30
[root@BC ~]# date +%s #距离1970年1月1日0分0秒过来多少秒
1595993167
选项:
-d #自定义日期
-s #修改日期 时间
[root@BC ~]# date +%F
2020-07-29
[root@BC ~]# date -d "-1 day" +%F
2020-07-28
[root@BC ~]# date -d "+1 day" +%F
2020-07-30
[root@BC ~]# date -d "+1 month" +%F
2020-08-29
[root@BC ~]# date -d "-1 month" +%F
2020-06-29
[root@BC ~]# date -d "-1 year" +%F
2019-07-29
[root@BC ~]# date -d "+1 year" +%F
2021-07-29
[root@BC ~]# date
Wed Jul 29 11:31:42 CST 2020
[root@BC ~]# date -s 20200730
Thu Jul 30 00:00:00 CST 2020
[root@BC ~]# date
Thu Jul 30 00:00:08 CST 2020
[root@BC ~]# date -s 2020/07/29
Wed Jul 29 00:00:00 CST 2020
[root@BC ~]# date
Wed Jul 29 00:00:02 CST 2020
[root@BC ~]# date -s 11:32:30
Wed Jul 29 11:32:30 CST 2020
[root@BC ~]# date
Wed Jul 29 11:32:31 CST 2020
[root@BC ~]# date -s "20200730 11:00:00"
Thu Jul 30 11:00:00 CST 2020
#时间同步
ntpdate
[root@BC ~]# yum install ntpdate -y
向时间服务器进行同步时间
ntp.aliyun.com
ntp1.aliyun.com .... ntp7.aliyun.com
[root@BC ~]# ntpdate ntp.aliyun.com
29 Jul 11:36:33 ntpdate[31370]: step time server 203.107.6.88 offset -84415.000442 sec
[root@BC ~]# date
Wed Jul 29 11:36:35 CST 2020
[root@BC ~]# date -s 20200730
Thu Jul 30 00:00:00 CST 2020
[root@BC ~]# ntpdate ntp.aliyun.com
29 Jul 11:36:56 ntpdate[31392]: step time server 203.107.6.88 offset -44591.413933 sec
[root@BC ~]# date
Wed Jul 29 11:37:02 CST 2020
七、第一次考试题讲解
基础阶段-第一次考试题
1. 创建/root/user /root/logs /root/conf /root/html目录,请用一条命令实现。
[root@BC ~]#mkdir /root/{user,logs,conf,html}
2. Linux关机重启及注销的命令有哪些 (每种至少两个)?
关机:
shutdown -h now
poweroff
重启:
reboot
shutdown -r
注销:
logout
exit
3. Linux中系统网卡的配置文件路径什么?
[root@BC ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
4. 你知道哪些bash的快捷键呢?请把他写出来,并解释一下他的作用?(至少8个)
ctrl+a 从当前光标位置跳到行首
ctrl+e 从当前光标位置跳到行尾
ctrl+u 删除从当前光标位置到行首的内容
ctrl+k 删除从当前光标位置到行首的内容
ctrl+l 清屏
ctrl+w 删除当前光标往前的一串字符
ctrl+方向键 光标从当前位置向左或者向右移动一串字符
5. 网络类型都有哪几种?这几种模式,每个的含义你是怎么理解的?
(1)NAT 网络地址转换
NAT模式中的虚拟机是通过宿主机(物理电脑)进行上网和交换数据的
使用到网卡是VMnet8 VMware NAT Service服务就充当了一个路由器,虚拟机上网的时候首先会找到这个路由器,进行了一个地址转换,伪装了一个跟宿主机一样的IP地址 进行上网, 网络上的数据将返回给VMnet8这个网卡,VMnet8这块网卡会把数据返回给虚拟机
好处: 外面的网络可以随便更换,虚拟机的网络不变,IP地址也不会跟宿主机的IP地址冲突,IP的地址范围也广,设置一个网段
坏处: 上网需要经过一个中介 代理
(2)桥接模式 Bridge
通过宿主机网卡架设了一座桥 网桥 直接进入到了实际的网络环境中
虚拟机的IP地址跟宿主机的IP地址在一个网段范围之内,容易跟宿主机IP发生冲突
IP地址会随着外面网络的改变而改变,不能使用一个固定的IP地址,IP少
优点: 上网不需要经过宿主机,只需要通过VMnet0 网卡
桥接模式中的虚拟机跟宿主机的层级是一样的
(3)仅主机模式 Host-only
仅能跟宿主机进行连接,没有办法上网的 VMnet1
6. 找出系统中文件名以oldboy开头的所有文件,要求只能查找到/目录的前三级目录。
[root@BC ~]#find / -type f -maxdepth 3 -name "oldboy*"
7. Linux的发行版本都有哪些?(至少6个)
Redhat 红帽 开源但是收费
CentOS 学习使用 去掉了Redhat的收费和logo部分编译而成的系统 开源 免费 企业 首选
Fedora 新功能 想使用新功能 是Redhat的测试版本 预发布版
Ubuntu 乌班图 桌面系统 开发人员使用的多
SUSE 数据库高级服务及电子邮件 德国使用的多 收费 OpenSUSE
Debian、FreeBSD 对安全性要求比较高 中文 麒麟 红旗
8. 怎样清除你所执行过的命令记录?
[root@BC~]#history -c
[root@BC~]#history -w
9. 说明下面这几个文件的作用:
/etc/resolv.conf、 #本地DNS配置文件
/etc/hosts、 #域名跟IP地址的映射关系
/var/log/messages、 #系统日志
/var/log/secure。 #用户登录日志
10. 如何快速返回上一次所在的目录?
[root@BC~]#cd -
11. 欲把当前目录下的file1.txt复制为file2.txt 命令是,如果已存在该名称的文件名,怎么执行不会提示是否覆盖?
[root@BC~]#\cp file1.txt file2.txt
12. 假设超级用户root当前所在目录为:/usr/local,键入cd命令后,用户当前所在目录为?
/root
13. 创建/data/test目录,已知/data目录不存在,请给出命令?
[root@BC~]#mkdir -p /data/test
14. 在/root/目录下创建文件test.txt test.log test.sh test.conf 请用一条命令创建。
[root@BC~]#touch test{txt,log,sh,conf}
15.将/etc/passwd文件中的第一列和第七列的位置进行调换,以:号为分隔符。
[root@web01 ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@BC ~]# awk -F: \'{a=$1;$1=$NF;$NF=a;print}\' passwd | tr \' \' ":"
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
[root@BC ~]# sed -r \'s#(.*)(:x.*:)(.*)#\3\2\1#g\' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
16. 如果我在当前在/目录下,之后执行了以下操作,请告诉我,最后我所在的目录位置?
cd /etc/sysconfig/
cd ..
cd ..
cd -
cd ~
cd .. / /home
cd -
/home/xx /root 当前用户的家目录
17. 查看oldboy.txt文件中的内容,并显示行号。(至少两种方法)
[root@BC~]#cat -n oldboy.txt
[root@BC~]#grep -n \'.*\' oldboy.xt
18. 显示/etc/services文件的第11行到第20行的内容(至少两种方法)?
[root@BC~]#head 20 /etc/services |tail
[root@BC~]#grep -n \'.*\' /etc/services |grep -wA 9 \'^11\'
19. 已知文件123.txt内容如下,请过滤出不包含oldboy字符串的命令
test
OLDBOY
online
oldboy
online
oldboyoldboy
[root@BC~]#grep -v \'oldboy\' 123.txt
20. 接上题,要求过滤出文件123.txt中包含online字符串的行,并统计过滤出来的内容共有多少行。
[root@BC~]#grep -c \'online\' 123.txt
21. 调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?
[root@BC~]#tail -f /var/log/messages
22. 如何删除一个非空目录/opt?
[root@BC~]#rm -rf /opt
23. 统计/etc/passwd文件一共有多少行?(两种方法)
[root@BC~]#grep -c \'.*\' /etc/passswd
[root@BC~]#wc -l /etc/passwd
24. 已知软件包的链接地址为http://nginx.org/download/nginx-1.16.0.tar.gz,要求将其下载且下载之后的软件包名为nginx.tar.gz,如何执行命令。
[root@BC~]#wget -O nginx.tar.gz http://nginx.org/download/nginx-1.16.0.tar.gz
[root@BC~]#curl -o nginx.tar.gz http://nginx.org/download/nginx-1.16.0.tar.gz
25. 查找ifconfig命令的绝对路径在哪里?(两种方法)
[root@BC~]#which ifconfig
[root@BC~]#type -ap ifconfig
26. 统计文件/etc/services的字节数?(两种方法)
[root@BC~]#wc -c /etc/services
[root@BC~]#ll /etc/services
[root@BC~]#du -sh /etc/services
27. 执行下面的命令echo "Im qiuzengjia , is QQ 1176494252" >file.txt,要求取出该文件中的姓名和QQ号。(注意逗号前面有一个空格)(两种方法)。
[root@BC~]#cut -d " " -f2,6 file.txt
28.执行如下命令,要求去除重复的行,并统计出现的次数?
cat > file.txt <<EOF
abc
123
abc
123
def
EOF
[root@BC~]#sort file.txt | uniq -c
29. 过滤出/etc/passwd以nologin结尾的内容,并统计行数。
[root@BC~]#grep -c \'nologin$\' /etc/passwd
[root@BC~]#sed -n \'/nologin$/p\' /etc/passwd | wc -l
30. 使用cat和echo命令把oldboy oldgirl student三行内容(每个字符串是一行内容)写入到test.txt文件中
[root@BC~]#echo -e "oldboy\noldgirl\nstudent" >>test.txt
31. 以“:”为分隔符,取出/etc/passwd第一行的最后一列的内容?(两种方法)
[root@BC~]#awk -F: \'NR==1{print $NF}\' /etc/passwd
32.已知执行ifconfig eth0 结果如下:要求取出IP地址
[root@qiudao ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.19.186.20 netmask 255.255.240.0 broadcast 172.19.191.255 #前面有8个空格
ether 00:16:3e:1a:18:44 txqueuelen 1000 (Ethernet)
[root@BC~]#ifconfig eth0 | awk \'NR==2{print $2}\'
33. 删除test.txt文件中的第10行到20行的内容。(两种方法)
[root@BC~]#sed \'10,20d\' test.txt
[root@BC~]#awk \'NR < 10 || NR > 20 \' test.txt
34. 取出test.txt文件中的第9行和第11行的内容(两种方法)
[root@BC~]#sed -n \'9p;11p\' test.txt
[root@BC~]#awk \'NR==9;NR=11\' test.txt
35.统计nginx访问日志access.log中每个访问ip出现次数,显示最多的10个。(已知ip在第一列)
[root@BC~]#awk \'{print $1}\' access.log | sort | uniq -c | sort -rn | head
36.过滤出/etc/services 文件包含3306或1521两数字所在的行的内容。(两种方法)
[root@BC~]#grep -E \'3306|1521\' /etc/services
[root@BC~]#sed -nr \'/3306|1521/p\' /etc/services
[root@BC~]#awk \'/3306|1521/\' /etc/services
37. 排除/etc/ssh/sshd_config文件中的空行和注释行(以#开头的就是注释行)(两种方法)
[root@BC~]#grep -Ev \'^$|^#\' /etc/ssh/sshd_config
[root@BC~]#sed -r \'/^$|^#/d\' /etc/ssh/sshd_config
[root@BC~]#awk \'!/^$|^#/\' /etc/ssh/sshd_config
38. 将/etc/passwd文件中第一行到第五行的root替换为admin?
[root@BC~]#sed -i \'1,5s#root#admin#g\' /etc/passwd
39. 在test.txt文件末尾插入test。(两种方法)
[root@BC~]#echo "test" >> test.txt
[root@BC~]#sed \'$atest\' test.txt
40. 写出redhat 中,配置网卡及dns 的配置文件是什么?并说明区别?
配置文件:
网卡 /etc/sysconfig/network-scripts/ifcfg-eth0
dns /etc/resolv.conf
区别:配置网卡文件可以配置dns,但dns配置文件不可以配置网卡
配置网卡配置dns需要重启网卡,dns配置完成立即生效。
41. 已知sort.log文件内容如下,请根据文件内容的第二列进行倒序排序。?
cat >>sort.log<<\'EOF\'
218.65.30.25 68652
218.65.30.53 34326
218.87.109.154 21201
112.85.42.103 18065
112.85.42.99 17164
218.87.109.151 17163
218.87.109.150 17163
218.65.30.61 17163
218.65.30.126 17163
218.65.30.124 17163
EOF
[root@BC~]#sort -rnk2 sort.log
42. 已知文件test.txt内容如下,请给出输出test.txt文件内容时,不包含oldboy字符串的命令。
test
qiudao
oldboy
[root@BC~]#grep -v \'oldboy\' test.txt
43. 找到/backup目录下所有后缀名为.txt的文件?
[root@BC~]#find /backup -type f -name "*.txt"
44. 把/etc/passwd文件中的:替换成# (两种方法)
[root@BC~]#tr \':\' \'#\' < /etc/passwd
[root@BC~]#sed \'s/:/#/g\' /etc/passwd
45. rm是个危险的命令,要求使用命令rm删除文件时提示“rm command no bny”,怎么实现?
[root@BC~]#alias rm=\'echo rm command no bny\'
46. 取出下列文件的权限如:0644 ?(两种方法)
[root@BC ~]# stat 123.txt
File: ‘123.txt’
Size: 44 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67160518 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-27 16:55:57.055131412 +0800
Modify: 2019-07-27 16:55:50.098131214 +0800
Change: 2019-07-27 16:55:50.101131214 +0800
[root@BC~]#stat -c %a 123.txt
[root@BC~]#stat 123.txt |sed -nr \'4s#(.*: \()(.*)(/-.*$)#\2#gp\'
[root@BC~]#stat 123.txt | awk -F \'[(/]\' \'NR==4{print $2}\'
47. 分别写出GNU和GPL是什么?
GPL
通用公共许可协议 开源许可协议
*的,可任意传播的
可任意修改的,但是必须将修改之后的源代码发布出来
GNU
是FSF下面的一个项目 全称 GNU is not Unix
优秀的软件: Emacs编辑器 gcc编译软件 bash命令解释器 gawk开发语言 hurd内核 还在研发
48. 把/etc/passwd文件中的oldboy替换成oldgirl。
[root@BC~]#sed \'s#oldboy#oldgirl#g\' /etc/passwd
49.显示/proc/meminfo文件中以s开头的行(忽略大小写)(两种方法)
[root@BC~]#grep -i \'^s\' /proc/meminfo
[root@BC~]#sed -nr \'/^s|^S/p\' /proc/meminfo
[root@BC~]#awk \'/^s|^S/\' /proc/meminfo
50.翻译题
01).command not found #命令找不到
02).No such file or directory #没有这个文件或者目录
03).File exists #文件已经存在
04).Is a directory #这是个目录
2020年07月30日上午(day20)
一、RPM软件包概述
Redhat Package Manager 软件包管理
windows .exe
Linux .rpm
软件包的含义
ant-antunit-1.2-10.el7.noarch.rpm
antlr-C++-2.7.7-30.el7.x86_64.rpm
ant-antunit #软件包名称
1.2 #软件的版本
10 #软件包编译发布的次数
el7 #适用于7系列的操作系统
el6 #适用于6系列操作系统
noarch #适用于任何cpu架构
x86_64 #硬件平台 位数
.rpm #包的后缀名
软件包的安装方式
rpm包 预先编译好的,安装简单 版本过低
源码包 手动编译,安装繁琐 版本随意
二进制包 绿色软件 解压即用 无法修改源代码
软件包的获取方式
本地的ISO镜像 需要挂载使用
联网下载
仓库获取 yum源
二、rpm软件包管理工具
命令 管理软件包
#挂载镜像
[root@BC ~]# ll /dev/sr0
brw-rw---- 1 root cdrom 11, 0 Jul 27 16:29 /dev/sr0
[root@BC ~]# ll /dev/cdrom
lrwxrwxrwx 1 root root 3 Jul 27 16:29 /dev/cdrom -> sr0
[root@BC ~]# mount /dev/sr0 /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 1.5G 97G 2% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /mnt
[root@BC ~]# ll /mnt/Packages/ | wc -l
4023
#安装
-i #安装
-v #显示安装的过程
-h #显示安装的进度条
-ivh
[root@BC ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]
#删除 移除一个软件包
[root@BC ~]# rpm -e tree
#rpm安装太需要依赖了,不会自动寻找依赖,需要手动下载依赖 不建议使用
#安装httpd 报错
[root@BC ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
error: Failed dependencies:
/etc/mime.types is needed by httpd-2.4.6-88.el7.centos.x86_64
httpd-tools = 2.4.6-88.el7.centos is needed by httpd-2.4.6-88.el7.centos.x86_64
libapr-1.so.0()(64bit) is needed by httpd-2.4.6-88.el7.centos.x86_64
libaprutil-1.so.0()(64bit) is needed by httpd-2.4.6-88.el7.centos.x86_64
#根据提示安装相关依赖 报错
[root@BC ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
error: Failed dependencies:
libapr-1.so.0()(64bit) is needed by httpd-tools-2.4.6-88.el7.centos.x86_64
libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.4.6-88.el7.centos.x86_64
#查找相关依赖包
[root@BC ~]# ll /mnt/Packages/ | grep apr
-rw-rw-r-- 1 root root 105728 Nov 29 2017 apr-1.4.8-3.el7_4.1.x86_64.rpm
-rw-rw-r-- 1 root root 192652 Nov 29 2017 apr-devel-1.4.8-3.el7_4.1.x86_64.rpm
-rw-rw-r-- 1 root root 94132 Jul 4 2014 apr-util-1.5.2-6.el7.x86_64.rpm
-rw-rw-r-- 1 root root 78072 Jul 4 2014 apr-util-devel-1.5.2-6.el7.x86_64.rpm
-rw-rw-r-- 1 root root 854420 Nov 12 2018 haproxy-1.5.18-8.el7.x86_64.rpm
#安装相关依赖
[root@BC ~]# rpm -ivh /mnt/Packages/apr-1.4.8-3.el7_4.1.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:apr-1.4.8-3.el7_4.1 ################################# [100%]
[root@BC ~]# rpm -ivh /mnt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:apr-util-1.5.2-6.el7 ################################# [100%]
#尝试安装httpd-tools
[root@BC ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:httpd-tools-2.4.6-88.el7.centos ################################# [100%]
#再次安装httpd 报错
[root@BC ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
error: Failed dependencies:
/etc/mime.types is needed by httpd-2.4.6-88.el7.centos.x86_64
#搜索相关文件的依赖包
[root@BC ~]# yum provides /etc/mime.types
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* epel: fedora.cs.nctu.edu.tw
* extras: mirrors.aliyun.com
* updates: mirrors.ustc.edu.cn
mailcap-2.1.41-2.el7.noarch : Helper application and MIME type associations for file types
Repo : base
Matched from:
Filename : /etc/mime.types
#安装依赖包
[root@BC ~]# rpm -ivh /mnt/Packages/mailcap-2.1.41-2.el7.noarch.rpm
Preparing... ################################# [100%]
Updating / installing...
1:mailcap-2.1.41-2.el7 ################################# [100%]
#最终安装成功
[root@BC ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:httpd-2.4.6-88.el7.centos ################################# [100%]
[root@BC ~]#
#联网安装软件包
[root@BC ~]# rpm -ivh https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]
#升级安装
-U #升级
[root@BC ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
warning: /var/tmp/rpm-tmp.jseg5b: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-4.0.0-2.el7 ################################# [100%]
[root@BC ~]# zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 4.0.0
Revision 85308 1 October 2018, compilation time: Oct 1 2018 08:41:36
Copyright (C) 2018 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
#升级安装
[root@BC ~]# rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.0-1.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.0-1.el7.x86_64.rpm
warning: /var/tmp/rpm-tmp.e9rZWk: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-4.4.0-1.el7 ################################# [ 50%]
Cleaning up / removing...
2:zabbix-agent-4.0.0-2.el7 ################################# [100%]
[root@BC ~]# zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 4.4.0
Revision cfac660b25 7 October 2019, compilation time: Oct 7 2019 11:26:17
Copyright (C) 2019 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).
Compiled with OpenSSL 1.0.1e-fips 11 Feb 2013
Running with OpenSSL 1.0.1e-fips 11 Feb 2013
#查询指定的软件包是否安装
[root@BC ~]# rpm -q tree
tree-1.6.0-10.el7.x86_64
[root@BC ~]# rpm -q ifconfig
package ifconfig is not installed
[root@BC ~]# rpm -q net-tools
net-tools-2.0-0.25.20131004git.el7.x86_64
#显示所有已经安装的软件包
[root@BC ~]# rpm -qa | grep tree
tree-1.6.0-10.el7.x86_64
#查询软件包列表信息
[root@BC ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
#查询相关配置文件信息
[root@BC ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
#查询软件包本身信息
[root@BC ~]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 88.el7.centos
Architecture: x86_64
Install Date: Thu 30 Jul 2020 09:03:08 AM CST
Group : System Environment/Daemons
Size : 9817309
License : ASL 2.0
Signature : RSA/SHA256, Mon 12 Nov 2018 10:28:53 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : httpd-2.4.6-88.el7.centos.src.rpm
Build Date : Mon 05 Nov 2018 09:48:57 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
#使用绝对路径查询命令属于哪个软件包 前提系统已经安装这个软件
[root@BC ~]# rpm -qf `which ping`
iputils-20160308-10.el7.x86_64
[root@BC ~]# which ping
/usr/bin/ping
[root@BC ~]# rpm -qf /usr/bin/ping
iputils-20160308-10.el7.x86_64
总结:
-ivh #安装
-Uvh #升级
-e #卸载
-q #查询指定软件包
-qa #查询所有已经安装的软件包
-qi #查询软件包本身相关信息
-ql #查询软件包列表信息
-qc #查询软件包相关文件
-qf #查询命令属于哪个软件包 必须是绝对路径 前提本地要已经存在这个软件包
三、yum管理工具
yum源 yum仓库
[root@BC ~]# ll /etc/yum.repos.d/
total 40
-rw-r--r-- 1 root root 1664 Nov 23 2018 CentOS-Base.repo
-rw-r--r-- 1 root root 1309 Nov 23 2018 CentOS-CR.repo
-rw-r--r-- 1 root root 649 Nov 23 2018 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 314 Nov 23 2018 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 630 Nov 23 2018 CentOS-Media.repo
-rw-r--r-- 1 root root 1331 Nov 23 2018 CentOS-Sources.repo
-rw-r--r-- 1 root root 5701 Nov 23 2018 CentOS-Vault.repo
-rw-r--r-- 1 root root 951 Oct 3 2017 epel.repo
-rw-r--r-- 1 root root 1050 Oct 3 2017 epel-testing.repo
怎么获取yum源
本地的ISO镜像
yum源仓库
联网的方式下载
本地yum仓库
yum的种类
base #基础源
epel #扩展源
软件官方源 # nginx zabbix docker
阿里源
清华源
中科大
163源
#更新源
[root@BC ~]# rm -rf /etc/yum.repos.d/*
[root@BC ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@BC ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@BC ~]# ll /etc/yum.repos.d/
total 8
-rw-r--r-- 1 root root 2523 Jul 30 09:51 CentOS-Base.repo
-rw-r--r-- 1 root root 664 May 11 2018 epel.repo
#显示可用的yum仓库
[root@BC ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
repo id repo name status
!base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,070
!epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,422
!extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 412
!updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 900
repolist: 24,804
#显示所有的
[root@BC ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
repo id repo name status
!base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com enabled: 10,070
centosplus/7/x86_64 CentOS-7 - Plus - mirrors.aliyun.com disabled
contrib/7/x86_64 CentOS-7 - Contrib - mirrors.aliyun.com disabled
!epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 enabled: 13,422
epel-debuginfo/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 - Debug disabled
epel-source Extra Packages for Enterprise Linux 7 - x86_64 - Source disabled
!extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com enabled: 412
!updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com enabled: 900
repolist: 24,804
[root@BC ~]# yum install -y yum-utils
[root@BC ~]# yum-config-manager --disable epel
[root@BC ~]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
repo id repo name status
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com enabled: 10,070
centosplus/7/x86_64 CentOS-7 - Plus - mirrors.aliyun.com disabled
contrib/7/x86_64 CentOS-7 - Contrib - mirrors.aliyun.com disabled
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 disabled
epel-debuginfo/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 - Debug disabled
epel-source Extra Packages for Enterprise Linux 7 - x86_64 - Source disabled
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com enabled: 412
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com enabled: 900
repolist: 11,382
[root@BC ~]# yum-config-manager --enable epel
#软件包管理
#显示所有可安装的包
[root@BC ~]# yum list
#显示系统中已经安装的包
[root@BC ~]# yum list installed
[root@BC ~]# yum list | grep ^tree
tree.x86_64 1.6.0-10.el7 @base
treelayout.noarch 1.0.3-4.el7 epel
treelayout-demo.noarch 1.0.3-4.el7 epel
treelayout-javadoc.noarch 1.0.3-4.el7 epel
#显示可更新的包
[root@BC ~]# yum check-update
[root@BC ~]# yum list updates
[root@BC ~]# rpm -qa httpd
httpd-2.4.6-88.el7.centos.x86_64
#更新某个软件包
[root@BC ~]# yum update httpd -y
[root@BC ~]# rpm -qa httpd
httpd-2.4.6-93.el7.centos.x86_64
#安装软件包
[root@BC ~]# yum install tree #交互式 麻烦
[root@BC ~]# yum install tree -y #免交互
#卸载
[root@BC ~]# yum remove tree -y
[root@BC ~]# yum erase tree -y
#联网安装软件包
[root@BC ~]# yum install -y https://mirrors.aliyun.com/centos/7.8.2003/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
#本地安装
[root@BC ~]# yum localinstall -y /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
[root@BC ~]# systemctl start httpd
[root@BC ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2020-07-30 10:36:26 CST; 6s ago
[root@BC ~]# rm -f /etc/httpd/conf/httpd.conf
[root@BC ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
#重新安装
[root@BC ~]# yum reinstall -y httpd
#搜索
[root@BC ~]# yum search ifconfig
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
================================================= N/S matched: ifconfig =================================================
python36-ifcfg.noarch : Python cross-platform network interface discovery (ifconfig/ipconfig/ip)
Name and summary matches only, use "search all" for everything.
#联网搜索命令属于哪个软件包
[root@BC ~]# yum provides ifconfig
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
epel/x86_64/filelists_db | 12 MB 00:00:04
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
Repo : @base
Matched from:
Filename : /usr/sbin/ifconfig
#查看软件包相关信息
[root@BC ~]# yum info tree
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Installed Packages
Name : tree
Arch : x86_64
Version : 1.6.0
Release : 10.el7
Size : 87 k
Repo : installed
Summary : File system tree viewer
URL : http://mama.indstate.edu/users/ice/tree/
License : GPLv2+
Description : The tree utility recursively displays the contents of directories in a
: tree-like format. Tree is basically a UNIX port of the DOS tree
: utility.
#组包的安装
[root@BC ~]# yum groups install Python
#组包的卸载
[root@BC ~]# yum groups remove Python
#yum缓存
#清除包的缓存
[root@BC ~]# yum clean packages
Loaded plugins: fastestmirror
Cleaning repos: base epel extras updates
0 package files removed
#清除插件的缓存
[root@BC ~]# yum clean plugins
Loaded plugins: fastestmirror
Cleaning repos: base epel extras updates
Cleaning up list of fastest mirrors
#清除所有缓存
[root@BC ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel extras updates
#生成缓存
[root@BC ~]# yum makecache
#yum 历史记录
[root@BC ~]# yum history
Loaded plugins: fastestmirror
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
27 | reinstall -y httpd | 2020-07-30 10:37 | Reinstall | 1
26 | localinstall -y /mnt/Pac | 2020-07-30 10:11 | Install | 1
25 | erase tree -y | 2020-07-30 10:10 | Erase | 1
24 | install -y https://mirro | 2020-07-30 10:09 | Install | 1
#显示所有历史记录
[root@BC ~]# yum history list all
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
27 | root <root> | 2020-07-30 10:37 | Reinstall | 1
26 | root <root> | 2020-07-30 10:11 | Install | 1
25 | root <root> | 2020-07-30 10:10 | Erase | 1
24 | root <root> | 2020-07-30 10:09 | Install | 1
23 | root <root> | 2020-07-30 10:08 | Erase | 1
22 | root <root> | 2020-07-30 10:08 | Install | 1
#查看某个ID的历史信息
[root@BC ~]# yum history info 15
Loaded plugins: fastestmirror
Transaction ID : 15
Begin time : Wed Jul 22 08:51:56 2020
Begin rpmdb : 372:6b59857cbbb441dc1cf9e1a96ab23013fd830365
End time : (0 seconds)
End rpmdb : 373:c16ad60498e5079097783959293418aeedfc68b5
User : root <root>
Return-Code : Success
Command Line : install -y psmisc
Transaction performed with:
Installed rpm-4.11.3-35.el7.x86_64 @anaconda
Installed yum-3.4.3-161.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-50.el7.noarch @anaconda
Packages Altered:
Install psmisc-22.20-16.el7.x86_64 @base
history info
#回滚历史ID为10的操作
[root@BC ~]# yum history undo 10 -y
[root@BC ~]# yum --setopt=history_list_view=commands history list all
Loaded plugins: fastestmirror
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
28 | history undo 10 | 2020-07-30 10:49 | Erase | 21
27 | reinstall -y httpd | 2020-07-30 10:37 | Reinstall | 1
26 | localinstall -y /mnt/Pac | 2020-07-30 10:11 | Install | 1
25 | erase tree -y | 2020-07-30 10:10 | Erase | 1
24 | install -y https://mirro | 2020-07-30 10:09 | Install | 1
23 | erase tree -y | 2020-07-30 10:08 | Erase | 1
22 | install tree -y | 2020-07-30 10:08 | Install | 1
21 | remove tree -y | 2020-07-30 10:08 | Erase | 1
[root@BC ~]# ll /etc/yum.conf
#只下载 不安装 指定下载的路径
[root@BC ~]# yum install -y --downloadonly --downloaddir=/opt nginx
[root@BC ~]# ll /opt/
total 4380
-rw-r--r-- 1 root root 93872 Jul 4 2014 centos-indexhtml-7-9.el7.centos.noarch.rpm
-rw-r--r-- 1 root root 65788 Jul 4 2014 dejavu-fonts-common-2.33-6.el7.noarch.rpm
-rw-r--r-- 1 root root 1482820 Jul 4 2014 dejavu-sans-fonts-2.33-6.el7.noarch.rpm
-rw-r--r-- 1 root root 260512 Nov 12 2018 fontconfig-2.13.0-4.3.el7.x86_64.rpm
-rw-r--r-- 1 root root 10116 Jul 4 2014 fontpackages-filesystem-1.44-8.el7.noarch.rpm
-rw-r--r-- 1 root root 149492 Jul 4 2014 gd-2.0.35-26.el7.x86_64.rpm
-rw-r--r-- 1 root root 278636 Apr 25 2018 gperftools-libs-2.6.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 137752 Aug 23 2019 libjpeg-turbo-1.2.90-8.el7.x86_64.rpm
-rw-r--r-- 1 root root 621364 Aug 23 2019 libX11-1.6.7-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 168172 Aug 23 2019 libX11-common-1.6.7-2.el7.noarch.rpm
-rw-r--r-- 1 root root 29784 Jul 4 2014 libXau-1.0.8-2.1.el7.x86_64.rpm
-rw-r--r-- 1 root root 218900 Nov 12 2018 libxcb-1.13-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 56800 Aug 11 2017 libXpm-3.5.12-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 575413 Oct 4 2019 nginx-1.16.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 19857 Oct 4 2019 nginx-all-modules-1.16.1-1.el7.noarch.rpm
-rw-r--r-- 1 root root 21089 Oct 4 2019 nginx-filesystem-1.16.1-1.el7.noarch.rpm
-rw-r--r-- 1 root root 30445 Oct 4 2019 nginx-mod-http-image-filter-1.16.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 39849 Oct 4 2019 nginx-mod-http-perl-1.16.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 29613 Oct 4 2019 nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 58301 Oct 4 2019 nginx-mod-mail-1.16.1-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 86465 Oct 4 2019 nginx-mod-stream-1.16.1-1.el7.x86_64.rpm
[root@BC ~]# cat /etc/yum.conf
[main]
#cachedir=/var/cache/yum/$basearch/$releasever
cachedir=/opt #指定下载保存路径
keepcache=1 #开启缓存
[root@BC ~]# yum install -y nginx
[root@BC ~]# ll /opt/
total 12
drwxr-xr-x 4 root root 256 Jul 30 11:03 base
drwxr-xr-x 4 root root 4096 Jul 30 11:03 epel
drwxr-xr-x 4 root root 161 Jul 30 11:03 extras
-rw-r--r-- 1 root root 117 Jul 30 11:04 timedhosts
-rw-r--r-- 1 root root 107 Jul 30 11:03 timedhosts.txt
drwxr-xr-x 4 root root 161 Jul 30 11:03 updates
[root@BC ~]# find /opt/ -name "*.rpm"
/opt/base/packages/centos-indexhtml-7-9.el7.centos.noarch.rpm
/opt/base/packages/dejavu-fonts-common-2.33-6.el7.noarch.rpm
/opt/base/packages/fontconfig-2.13.0-4.3.el7.x86_64.rpm
/opt/base/packages/dejavu-sans-fonts-2.33-6.el7.noarch.rpm
/opt/base/packages/fontpackages-filesystem-1.44-8.el7.noarch.rpm
/opt/base/packages/gd-2.0.35-26.el7.x86_64.rpm
/opt/base/packages/gperftools-libs-2.6.1-1.el7.x86_64.rpm
/opt/base/packages/libX11-1.6.7-2.el7.x86_64.rpm
/opt/base/packages/libX11-common-1.6.7-2.el7.noarch.rpm
/opt/base/packages/libXau-1.0.8-2.1.el7.x86_64.rpm
/opt/base/packages/libXpm-3.5.12-1.el7.x86_64.rpm
/opt/base/packages/libjpeg-turbo-1.2.90-8.el7.x86_64.rpm
/opt/base/packages/libxcb-1.13-1.el7.x86_64.rpm
/opt/epel/packages/nginx-all-modules-1.16.1-1.el7.noarch.rpm
/opt/epel/packages/nginx-1.16.1-1.el7.x86_64.rpm
/opt/epel/packages/nginx-filesystem-1.16.1-1.el7.noarch.rpm
/opt/epel/packages/nginx-mod-http-image-filter-1.16.1-1.el7.x86_64.rpm
/opt/epel/packages/nginx-mod-http-perl-1.16.1-1.el7.x86_64.rpm
/opt/epel/packages/nginx-mod-http-xslt-filter-1.16.1-1.el7.x86_64.rpm
/opt/epel/packages/nginx-mod-mail-1.16.1-1.el7.x86_64.rpm
/opt/epel/packages/nginx-mod-stream-1.16.1-1.el7.x86_64.rpm
yum总结:
repolist #针对仓库操作
all #显示所有
list #显示所有可安装的软件包
installed #显示已经安装的
updates #显示可更新的
check-update #显示可更新的
update #更新
install #安装
localinstall #本地安装
reinstall #重新安装
remove #卸载
erase #卸载
info #显示软件包信息
search #搜索
provides #查询命令属于哪个软件包
groups #组包管理
install #安装
remove #移除
clean #清空
all #清空所有
packages #清空软件包
plugins #清空插件
makecahce #生成缓存
history #历史记录
list all #显示所有
info ID #显示某次记录的信息
undo ID #回滚这次的操作
yum-config-manager #yum仓库管理工具
--disable #禁用仓库
--enable #启用仓库
四、搭建本地yum仓库
#把之前的仓库全部将其失效
[root@BC ~]# ll /etc/yum.repos.d/
total 8
-rw-r--r-- 1 root root 2523 Jul 30 09:51 CentOS-Base.repo
-rw-r--r-- 1 root root 664 Jul 30 09:57 epel.repo
[root@BC ~]# gzip /etc/yum.repos.d/*
[root@BC ~]# ll /etc/yum.repos.d/
total 8
-rw-r--r-- 1 root root 601 Jul 30 09:51 CentOS-Base.repo.gz
-rw-r--r-- 1 root root 254 Jul 30 09:57 epel.repo.gz
#挂载镜像源
[root@BC ~]# mount /dev/sr0 /mnt/
[root@BC ~]# df -h | grep mnt
/dev/sr0 4.3G 4.3G 0 100% /mnt
file:// #本地
ftp:// #文件传输地址
http:// #网络协议地址
https:// #网络协议地址
#编写yum源文件
[root@BC ~]# cat /etc/yum.repos.d/lcoal.repo
[BC] #仓库名称 不能有空格
name=this is local repo #仓库说明信息
baseurl=file:///mnt #仓库地址
enabled=1 #启用仓库
gpgcheck=0 #不检查其合法性
#测试是否可用
[root@BC ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: BC
Cleaning up list of fastest mirrors
Other repos take up 309 M of disk space (use --verbose for details)
[root@BC ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
BC | 3.6 kB 00:00:00
(1/4): BC/group_gz | 166 kB 00:00:00
(2/4): BC/filelists_db | 3.2 MB 00:00:00
(3/4): BC/primary_db | 3.1 MB 00:00:00
(4/4): BC/other_db | 1.3 MB 00:00:00
Metadata Cache Created
[root@BC ~]# yum install -y tree
五、将本地仓库共享给其他主机
10.0.0.100 #本地仓库地址 服务端
10.0.0.101 #客户端
#客户端修改主机名
[root@BC ~]# hostnamectl set-hostname client
# 在10.0.0.100 主机上面操作
[root@BC ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
[root@BC ~]# df -h | grep mnt
/dev/sr0 4.3G 4.3G 0 100% /mnt
#安装文件传输工具
[root@BC ~]# yum install -y vsftpd
#启动
[root@BC ~]# systemctl start vsftpd
[root@BC ~]# systemctl enable vsftpd
#关闭防火墙
[root@BC ~]# systemctl stop firewalld
#关闭Selinux
[root@BC ~]# setenforce 0
#测试
#浏览器输出
ftp://10.0.0.100/
#访问的是这个目录
[root@BC ~]# ll /var/ftp/
total 0
drwxr-xr-x 2 root root 6 Oct 31 2018 pub
[root@BC ~]# mkdir /var/ftp/local-base
[root@BC ~]# ll /var/ftp/
total 0
drwxr-xr-x 2 root root 6 Jul 30 19:55 local-base
drwxr-xr-x 2 root root 6 Oct 31 2018 pub
[root@BC ~]# cp -rp /mnt/Packages/* /var/ftp/local-base/
#下载管理工具
[root@BC ~]# yum install -y createrepo
#告诉系统,这是个镜像yum源仓库
[root@BC ~]# createrepo /var/ftp/local-base/
Spawning worker 0 with 4021 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
#修改yum配置文件
[root@BC ~]# cat /etc/yum.repos.d/lcoal.repo
[BC]
name=this is local repo
baseurl=ftp://10.0.0.100/local-base/
enabled=1
gpgcheck=0
[root@BC ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
BC this is local repo 4,021
repolist: 4,021
#让其他主机使用这个仓库
在10.0.0.101主机上面操作
[root@client ~]# systemctl stop firewalld
[root@client ~]# setenforce 0
[root@client ~]# gzip /etc/yum.repos.d/*
[root@client ~]# ll /etc/yum.repos.d/
total 28
-rw-r--r--. 1 root root 549 Nov 23 2018 CentOS-Base.repo.gz
-rw-r--r--. 1 root root 735 Nov 23 2018 CentOS-CR.repo.gz
-rw-r--r--. 1 root root 426 Nov 23 2018 CentOS-Debuginfo.repo.gz
-rw-r--r--. 1 root root 232 Nov 23 2018 CentOS-fasttrack.repo.gz
-rw-r--r--. 1 root root 381 Nov 23 2018 CentOS-Media.repo.gz
-rw-r--r--. 1 root root 506 Nov 23 2018 CentOS-Sources.repo.gz
-rw-r--r--. 1 root root 633 Nov 23 2018 CentOS-Vault.repo.gz
#编写yum源配置文件
[root@client ~]# cat /etc/yum.repos.d/lcoal.repo
[BC]
name=this is local repo
baseurl=ftp://10.0.0.100/local-base/
enabled=1
gpgcheck=0
#测试
[root@client ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: BC
[root@client ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
BC | 2.9 kB 00:00:00
(1/3): BC/filelists_db | 3.2 MB 00:00:00
(2/3): BC/primary_db | 3.2 MB 00:00:00
(3/3): BC/other_db | 1.3 MB 00:00:00
Metadata Cache Created
[root@client ~]# yum install vim -y
2020年07月31日上午(day21)
一、源码包管理
1. 要有源码包 下载源码包
[root@BC ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@BC ~]# ll
total 1016
-rw-r--r-- 1 root root 1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
2. 解压软件包
[root@BC ~]# tar xf nginx-1.18.0.tar.gz
[root@BC ~]# ll
total 1016
drwxr-xr-x 8 user05 1001 158 Apr 21 22:09 nginx-1.18.0
-rw-r--r-- 1 root root 1039530 Apr 21 22:33 nginx-1.18.0.tar.gz
3. 进入这个目录,进行预编译操作 编译设置
[root@BC nginx-1.18.0]# ./configure --prefix=/opt/nginx-1.18.0 --with-http_ssl_module
checking for OS
+ Linux 3.10.0-957.el7.x86_64 x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not found #报错 缺少编译软件 gcc
#按照依赖
[root@BC nginx-1.18.0]# yum install -y gcc
#再次执行报错
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
#解决:
[root@BC nginx-1.18.0]# yum install -y pcre pcre-devel
#再次执行报错
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
#解决:
[root@BC nginx-1.18.0]# yum install -y openssl openssl-devel
#4. 编译
[root@BC nginx-1.18.0]# make
5. 将编译的结果拷贝到指定的位置
[root@BC nginx-1.18.0]# make install
[root@BC nginx-1.18.0]# ll /opt/
drwxr-xr-x 6 root root 54 Jul 31 16:54 nginx-1.18.0
6. 做个软链接
[root@BC ~]# ln -s /opt/nginx-1.18.0/ /opt/nginx
7. 启动
[root@BC ~]# /opt/nginx/sbin/nginx
二、定时任务的概念
设定指定的时间周期性执行你的计划或者任务
crond # 守护进程 分钟级别
两种:
系统级别定时任务: 定时清理文件 收集系统信息 定时切割日志
用户级别定时任务: 同步时间 定时备份数据
三、定时任务相关介绍
[root@BC ~]# ll /etc/cron* -d
drwxr-xr-x. 2 root root 21 Jul 29 08:56 /etc/cron.d #定时任务的统一存放目录
drwxr-xr-x. 2 root root 57 Jul 29 08:56 /etc/cron.daily #系统每天执行的定时任务
-rw------- 1 root root 0 Apr 11 2018 /etc/cron.deny #定时任务的黑名单
drwxr-xr-x. 2 root root 22 Jul 29 08:56 /etc/cron.hourly #系统每小时执行的定时任务
drwxr-xr-x. 2 root root 6 Jun 10 2014 /etc/cron.monthly #系统每月执行的定时任务
-rw-r--r-- 1 root root 451 Jun 10 2014 /etc/crontab #定时任务主配置文件
drwxr-xr-x. 2 root root 6 Jun 10 2014 /etc/cron.weekly #系统每周执行的定时任务
[root@BC ~]# cat /etc/crontab
SHELL=/bin/bash #定时任务所使用的命令解释器
PATH=/sbin:/bin:/usr/sbin:/usr/bin #定时任务所能用到的命令路径
MAILTO=root #接收邮件
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59) #分钟
# | .------------- hour (0 - 23) #小时
# | | .---------- day of month (1 - 31) #日期
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... #月份
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | | # 周
# * * * * * user-name command to be executed
分时日月周 用户 命令
#跟定时任务相关的文件
[root@BC ~]# ll /var/spool/cron/root #存放定时任务的配置文件
total 0
[root@BC ~]# ll /var/log/cron #定时任务执行的过程 日志
[root@BC ~]# ll /var/spool/mail/ #用户的邮件
怎样书写定时任务
crontab #书写定时任务的命令
选项:
-e #编辑定时任务 === vi /var/spool/cron/root
-l #查看定时任务 === cat /var/spool/cron/root
1. 语法检查
2. 方便简单
#定时任务的规则
* # 每(分时日月周)都执行
*/5 # 每 5 (分时日月周)执行 每隔多长时间
/5
1-3 #时间范围 1-3 连续的时间 1点到3点
1,3 #不连续的时间 1点和3点
00 02 * * * #每天的凌晨2点整
00 02 1 * * #每个月的1号凌晨2点整
00 02 14 2 * #每年的2月14日凌晨2点整
00 02 * * 7 #每周日的凌晨2点整
00 02 * 6 5 #每年的6月份的每周五的凌晨2点整
00 02 14 * 7 #每个月的14号或者周日的凌晨2点整
00 02 14 2 7 #每年的2月份的14号或者周日的凌晨2点整
*/10 02 * * * #每天的凌晨2点每隔10分钟
* * * * * #每分钟
00 00 14 2 * #每年的2月份14号的凌晨0点整
*/5 * * * * #每隔5分钟
00 02 * 1,5,8 * #每年的1和5和8月的每天的凌晨2点整
00 02 1-8 * * #每个月的1到8号的凌晨2点整
00 21 * * * #每天晚上21点整
45 4 1,10,22 * * #每个月的1,10,22号 的凌晨4点45分
45 4 1-10 * * #每个月的1到10号的凌晨4点45分
3,15 8-11 */2 * * #每个月每隔两天的8到11点的3分和15分的时候
0 23-7/2 * * * #每天的23点到7点的每隔2个小时的整点
15 21 * * 1-5 #每周一到周五的晚上21点15分
四、定时任务与案例
1. 定时同步系统时间 每分钟同步
[root@BC ~]# ntpdate ntp.aliyun.com
31 Jul 10:27:12 ntpdate[13673]: step time server 203.107.6.88 offset -28797.933639 sec
[root@BC ~]# date
Fri Jul 31 10:27:18 CST 2020
定时任务最好加上注释 作者 时间
[root@BC ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@BC ~]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * ntpdate ntp.aliyun.com
#修改时间
[root@BC ~]# date -s 20200730
Thu Jul 30 00:00:00 CST 2020
[root@BC ~]# date
Thu Jul 30 00:00:02 CST 2020
#查看定时任务的执行过程
[root@BC ~]# tailf /var/log/cron
Jul 31 17:01:01 BC run-parts(/etc/cron.hourly)[13622]: finished 0anacron
Jul 31 17:52:01 BC crontab[13651]: (root) LIST (root)
Jul 31 18:01:01 BC CROND[13656]: (root) CMD (run-parts /etc/cron.hourly)
Jul 31 18:01:01 BC run-parts(/etc/cron.hourly)[13656]: starting 0anacron
Jul 31 18:01:01 BC run-parts(/etc/cron.hourly)[13665]: finished 0anacron
Jul 31 10:27:49 BC crontab[13675]: (root) BEGIN EDIT (root)
Jul 31 10:30:30 BC crontab[13675]: (root) REPLACE (root)
Jul 31 10:30:30 BC crontab[13675]: (root) END EDIT (root)
Jul 31 10:30:36 BC crontab[13677]: (root) LIST (root)
Jul 30 00:00:03 BC CROND[13682]: (root) CMD (ntpdate ntp.aliyun.com)
#查看接收的邮件发现了报错 说命令找不到
[root@BC ~]# ll /var/spool/mail/root
-rw------- 1 root mail 3541 Jul 30 00:01 /var/spool/mail/root
[root@BC ~]# tailf /var/spool/mail/root
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20200729160201.064E8802C9EE@BC.localdomain>
Date: Thu, 30 Jul 2020 00:02:01 +0800 (CST)
/bin/sh: ntpdate: command not found
#重新编写定时任务
[root@BC ~]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * /usr/sbin/ntpdate ntp.aliyun.com
[root@BC ~]# tailf /var/log/cron
Jul 30 00:01:01 BC run-parts(/etc/cron.hourly)[13694]: starting 0anacron
Jul 30 00:01:02 BC anacron[13707]: Anacron started on 2020-07-30
Jul 30 00:01:02 BC anacron[13707]: Normal exit (0 jobs run)
Jul 30 00:01:02 BC run-parts(/etc/cron.hourly)[13709]: finished 0anacron
Jul 30 00:02:01 BC CROND[13714]: (root) CMD (ntpdate ntp.aliyun.com)
Jul 30 00:03:01 BC CROND[13722]: (root) CMD (ntpdate ntp.aliyun.com)
Jul 30 00:03:31 BC crontab[13728]: (root) BEGIN EDIT (root)
Jul 30 00:03:38 BC crontab[13728]: (root) REPLACE (root)
Jul 30 00:03:38 BC crontab[13728]: (root) END EDIT (root)
Jul 30 00:03:43 BC crontab[13730]: (root) LIST (root)
Jul 30 00:04:01 BC crond[6003]: (root) RELOAD (/var/spool/cron/root)
Jul 30 00:04:01 BC CROND[13734]: (root) CMD (/usr/sbin/ntpdate ntp.aliyun.com)
Jul 31 10:35:04 BC CROND[13741]: (root) CMD (/usr/sbin/ntpdate ntp.aliyun.com)
#邮件正在一直接收信息 导致邮件过大
[root@BC ~]# ll /var/spool/mail/root
-rw------- 1 root mail 7028 Jul 31 10:35 /var/spool/mail/root
[root@BC ~]# ll /var/spool/mail/root
-rw------- 1 root mail 7929 Jul 31 10:36 /var/spool/mail/root
#停掉邮件服务 日志不在发生变化
[root@BC ~]# systemctl stop postfix
[root@BC ~]# ll /var/spool/mail/root
-rw------- 1 root mail 8829 Jul 31 10:37 /var/spool/mail/root
#但是会一直生成小文件
[root@BC ~]# ll /var/spool/postfix/maildrop/
total 12
-rwxr--r-- 1 root postdrop 601 Jul 31 10:38 7FF40C0CD48D
-rwxr--r-- 1 root postdrop 600 Jul 31 10:39 A8919C0CD48E
-rwxr--r-- 1 root postdrop 601 Jul 31 10:40 CD943C0CD48F
#重新编写定时任务
[root@BC ~]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
[root@BC ~]# systemctl start postfix
[root@BC ~]# ll /var/spool/mail/root
-rw------- 1 root mail 13469 Jul 31 10:43 /var/spool/mail/root
总结:
1. 定时任务要有注释 作者 时间
2. 定时任务的命令一定要在命令行上面执行成功
3. 定时任务要使用绝对路径
4. 定时任务写命令的时候,尽量复制之前执行成功的命令 减少出错率
5. 定时任务的执行结果定向到指定的文件中或者定向到空
2. 把系统的时间追加到一个文件中
[root@BC ~]# date +%F_%T >> /root/time.txt
[root@BC ~]# cat /root/time.txt
2020-07-31_10:51:45
[root@BC ~]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
#xxxxxxxxxx
* * * * * /usr/bin/date +%F_%T >> /root/time.txt
[root@BC ~]# tailf /var/log/cron
Jul 31 10:54:01 BC crond[6003]: (root) RELOAD (/var/spool/cron/root)
Jul 31 10:54:01 BC CROND[14046]: (root) CMD (/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null)
Jul 31 10:54:01 BC CROND[14047]: (root) CMD (/usr/bin/date +)
#修改定时任务
[root@BC ~]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
#xxxxxxxxxx
* * * * * /usr/bin/date +\%F_\%T >> /root/time.txt
[root@BC ~]# tailf /var/log/cron
Jul 31 10:56:01 BC crond[6003]: (root) RELOAD (/var/spool/cron/root)
Jul 31 10:56:01 BC CROND[14074]: (root) CMD (/usr/bin/date +%F_%T >> /root/time.txt )
[root@BC ~]# cat time.txt
2020-07-31_10:56:01
总结:
定时任务中,有些特殊字符不识别,需要转义
3. 备份/etc/目录 压缩包名带有时间戳 保留最近的3天数据
[root@BC ~]# cat backup.sh
#!/bin/bash
#重新定义环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin
#1.创建备份目录
mkdir -p /backup
#2.开始备份
cd /
tar czf /backup/etc_$(date +%F_%M).tar.gz etc/
#3.删除3天以前的数据
find /backup -type f -mtime +3 -name "*.tar.gz" -delete
[root@BC ~]# sh backup.sh
[root@BC ~]# ll /backup/
total 9972
-rw-r--r-- 1 root root 10210944 Jul 31 11:05 etc_2020-07-31_05.tar.gz
#批量执行
[root@BC ~]# for i in {20..31};do date -s 2020/07/$i && sh /root/backup.sh ;done
#编写定时任务
[root@BC ~]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
#xxxxxxxxxx
* * * * * /usr/bin/date +\%F_\%T >> /root/time.txt
#备份
* * * * * /bin/bash /root/backup.sh &>/dev/null
[root@BC ~]# tailf /var/log/cron
Jul 31 11:10:01 BC crond[6003]: (root) RELOAD (/var/spool/cron/root)
Jul 31 11:10:01 BC CROND[14327]: (root) CMD (/usr/bin/date +%F_%T >> /root/time.txt )
Jul 31 11:10:01 BC CROND[14328]: (root) CMD (/bin/bash /root/backup.sh &>/dev/null)
Jul 31 11:10:01 BC CROND[14329]: (root) CMD (/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null)
[root@BC ~]# ll /backup/
total 59832
-rw-r--r-- 1 root root 10210944 Jul 28 00:00 etc_2020-07-28_00.tar.gz
-rw-r--r-- 1 root root 10210944 Jul 29 00:00 etc_2020-07-29_00.tar.gz
-rw-r--r-- 1 root root 10210944 Jul 30 00:00 etc_2020-07-30_00.tar.gz
-rw-r--r-- 1 root root 10210944 Jul 31 00:00 etc_2020-07-31_00.tar.gz
-rw-r--r-- 1 root root 10210944 Jul 31 11:05 etc_2020-07-31_05.tar.gz
-rw-r--r-- 1 root root 10210944 Jul 31 11:10 etc_2020-07-31_10.tar.gz
五、定时发邮件
[root@BC ~]# yum install -y mailx
[root@BC ~]# vim /etc/mail.rc
#发件人
set from=xxx@qq.com
#邮件服务器
set smtp=smtp.qq.com
#发件人用户名
set smtp-auth-user=xxx@qq.com
#发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
set smtp-auth-password=xxx
#登录方式
set smtp-auth=login
#邮件服务器协议及端口
set smtp=smtps://smtp.qq.com:465
#忽略证书
set ssl-verify=ignore
#指定证书位置
set nss-config-dir=/etc/pki/nssdb/
#或者指定别的证书位置,创建证书目录
#放到最后
set from=xxx@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxx #客户端的授权码
set smtp-auth=login
set smtp=smtps://smtp.qq.com:465
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
[root@BC ~]# echo "test" | mail -s "hello" xxxx@qq.com
[root@BC ~]# Error in certificate: Peer\'s certificate issuer has been marked as not trusted by the. #忽略这个错误
[root@BC ~]# mkdir qingshu
[root@BC ~]# cd qingshu
[root@BC qingshu]# vim qingshu1.txt
[root@BC qingshu]# mail -s "致亲爱的小姐姐" xxx@qq.com < qingshu1.txt
[root@BC qingshu]# Error in certificate: Peer\'s certificate issuer has been marked as not trusted by the.
#编写自动化脚本
[root@BC qingshu]# cat /root/send_mail.sh
#!/bin/bash
Qingshu=$(ls -1 /root/qingshu/ |head -1)
mail -s "致亲爱的小姐姐" xxxx@qq.com < /root/qingshu/$Qingshu
mail -s "致亲爱的小姐姐" xxxx@qq.com < /root/qingshu/$Qingshu
if [ $? -eq 0 ];then
rm -f /root/qingshu/$Qingshu
fi
[root@BC qingshu]# ll
total 20
-rw-r--r-- 1 root root 85 Jul 31 11:49 qingshu1.txt
-rw-r--r-- 1 root root 184 Jul 31 11:51 qingshu2.txt
-rw-r--r-- 1 root root 121 Jul 31 11:51 qingshu3.txt
-rw-r--r-- 1 root root 155 Jul 31 11:51 qingshu4.txt
-rw-r--r-- 1 root root 70 Jul 31 11:52 qingshu5.txt
#编写定时任务
[root@BC qingshu]# crontab -l
#同步系统时间 BC 20200731_10
* * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
#xxxxxxxxxx
#* * * * * /usr/bin/date +\%F_\%T >> /root/time.txt
#备份
#* * * * * /bin/bash /root/backup.sh &>/dev/null
#xxxxxxxxx
* * * * * /bin/bash /root/send_mail.sh &>/dev/null
六、定时任务总结
思路:
1.手动执行命令,然后保留执行成功的结果。
2.编写脚本
脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
3.执行脚本
使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash /bin/bash)
执行脚本成功后,复制该执行的命令,以便写入cron
4.编写定时任务
加上必要的注释信息, 人、时间、任务
设定定时任务执行的周期
粘贴执行脚本的命令(不要手敲)
5.调试定时任务
增加任务频率测试
检查环境变量问题(最好在脚本中重新定义环境变量PATH)
检查crond服务日志
总结:
1.定时任务规则之前加注释
2.使用脚本执行定时任务(只有一条简单命令的可以直接使用命令执行)
3.运行脚本一定要用绝对路径执行,统一脚本位置。
4.定时任务中date命令的百分号需转义才能使用。
5.命令或脚本结果(正确及错误)定向到空(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1
6.避免不必要的程序及命令输出,如打包命令,tar -v的显示过程的选项。
7.打包压缩使用相对路径(切到目标目录的上一级打包目标)
8.定时任务脚本中的程序文件 ,尽量用绝对路径,用户的定时任务中的文件默认存放在当前用户的家目录
9.系统与命令位置有关的环境变量问题,建议脚本中重新定义环境变量PATH。
七、day19作业讲解
1.linux下常见的压缩包类型有哪些
.zip #根据zip命令进行打包压缩的
.gz #通过gzip命令进行压缩 只压缩文件,也会删除源文件
.bz2 #通过bzip进行压缩, 只压缩文件,也会删除源文件
.tar.gz #使用tar命令归档打包,然后使用gzip命令进行压缩
.tar.bz2 #使用tar命令归档打包,然后使用bzip命令进行压缩
2.将/etc/hosts文件用tar格式打包。
[root@BC ~]#tar czf hosts.tar.gz /etc/hosts
3.查看打包之后的/etc/hosts的文件内容,在不解压的情况下查看。
[root@BC ~]#tar tf hosts.tar.gz
4.使用tar打包/var/log/目录。
[root@BC ~]#tar czf log.tar.gz /var/log/
5.使用zip打包/etc目录。
[root@BC ~]#zip -r etc.zip /etc
6.查看/var/log/目录的压缩包中有哪些内容。
[root@BC ~]#tar tf log.tar.gz
7.将/var/log/目录解压到/opt目录中。
[root@BC ~]#tar xf log.tar.gz -C /opt
10.解压/etc/目录到/opt目录中。
[root@BC ~]#unzip etc.zip -d /opt
11.用zip打包/opt目录,要求不显示打包过程。
[root@BC ~]#zip -rq opt.zip /opt
12.打包/etc/目录,要求是.bz2格式
[root@BC ~]#tar cjf etc.tar.bz2 /etc/
13.打包/var/log目录,要求是.xz格式
[root@BC ~]#tar cJf log.tar.xz /var/log
14.使用tar命令打包/etc/时,会出现一个删根的操作,怎样打包不会进行删根的操作
[root@BC ~]#tar czPf etc.tar.gz /etc
[root@BC ~]#cd / && tar czf /root/etc.tar.gz etc && cd -
15.打包/etc/目录,要求不打包/etc/hosts这个文件。
[root@BC ~]#tar czf etc.tar.gz --exclude=/etc/hosts /etc/
16.打包/etc/目录,要求不打包/etc/hosts和/etc/hostname这两个文件。
[root@BC ~]#tar czf etc.tar.gz --exclude=/etc/{hosts,hostname} /etc/
17.打包/etc/目录,但要排除passwd,shadow,group,gshadow,hosts,hostname这些文件。(你能用两种方法实现吗)
vim paichu.list
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/hosts
/etc/hostname
[root@BC ~]#tar czfX etc.tar.gz paichu.list /etc
18.已知/etc/grub2.cfg文件是个软连接文件,在你不知道的情况下,请问怎么打包该文件的真实文件。
[root@BC ~]#tar czhf grub.tar.gz /etc/grub2.cfg
19.把/var/log/目录中所有.log的文件进行打包成一个压缩包,名称定义为log.tar.gz的压缩包。
[root@BC ~]#find /var/log -type f -name "*.log" | xrags tar czf log.tar.gz
20.已知文件oldboy.gz,请问在不解压的情况下,怎样查看该文件的内容。
[root@BC ~]#zcat oldboy.gz
21.打包/etc/目录,命令以ip地址+当前时间方式的压缩包:比如: 10.0.0.100_2019-12-24_etc.tar.gz
[root@BC ~]#tar czf $(ifconfig eth0 | awk \'NR==2{print $2}\')_$(date +%F)_etc.tar.gz /etc
22.创建/data/bak目录,然后复制如下文件到/data/bak目录下
/etc/hosts
/etc/resolv.conf
/etc/fstab
/etc/bashrc
/etc/profile
/etc/rc.local
/etc/sudoers
[root@BC ~]# mkdir -p /data/bak && echo -e "hosts\nresolv.conf\nfstab\nbashrc\nprofile\nrc.local\nsudoers" |sed -nr \'s#(.*)#cp /etc/\1 /data/bak#gp\' |bash
[root@BC ~]# mkdir -p /data/bak && echo -e "hosts\nresolv.conf\nfstab\nbashrc\nprofile\nrc.local\nsudoers" |awk \'{print "cp /etc/"$1" /data/bak"}\'|bash
23.接22题,使用tar命令对/data/bak目录下的文件及目录以gzip的格式进行归档压缩到/data目录下(压缩包的名字以自己名字命名)
[root@BC ~]#tar czf /data/BC.tar.gz /data/bak
24.使用tar命令查看上题/data目录下压缩包内的内容。
[root@BC ~]#tar tf /data/BC.tar.gz
25.把第23题/data目录下的压缩包,解压到/backup目录下
[root@BC ~]#mkdir /backup
[root@BC ~]#tar xf /data/BC.tar.gz -C /backup
26.再次使用tar命令把/data/bak目录下的文件及目录以gzip的格式进行归档压缩到/data目录下,但是在进行归档压缩时,排除文件“sudoers”,然后查看该压缩包内容是否存在文件“sudoers”(压缩包名自行拟定)
[root@BC ~]#tar czf /data/BC.tar.gz --exclude=/data/bak/sudoers /data/bak
27.打包/etc目录下所有普通文件到root用户家目录。
[root@BC ~]#find /etc/ -type f | xargs tar czf /root/file.tar.gz
28.打包/etc/目录到/opt/目录下,名称要求以当前主机名和ip地址命名,例:oldboy_10.0.0.100.tar.gz
[root@BC ~]#tar czf /opt/$(hostname)_$(date +%F)_etc.tar.gz /etc
29.如何使用gzip命令对文件进行压缩、解压
gzip file.txt
gzip -d file.txt.gz
30.如何用zip命令对文件以及目录进行压缩、解压
zip file.txt.zip file.txt
zip -r etc.zip /etc
unzip etc.zip
unzip etc.zip -d /opt
31.创建一个自己名字的文件至/opt目录
[root@BC ~]#mkdir /opt/jh
32.打包opt整个目录,并命名test_opt.tar.gz
[root@BC ~]#tar czf test_opt.tar.gz /opt
33.查看打包好的test_opt.tar.gz里的文件
[root@BC ~]#tar tf test_opt.tar.gz
34.将打包好的test_opt.tar.gz内容指定解压至/tmp目录
[root@BC ~]#tar xf test_opt.tar.gz -C /tmp
35.打包etc目录下的所有文件,不要目录只要文件
[root@BC ~]#find /etc ! -type d -exec cp {} /opt/ \;
[root@BC ~]#tar czf opt.tar.gz /opt
[root@BC ~]#find /etc ! -type d | xargs tar czf file.tar.gz
36.打包etc目录下的所有文件,排除passwd,shadow
[root@BC ~]#tar czf etc.tar.gz --exclude=/etc/{passwd,shadow} /etc
37.打包etc目录下的所有以p开头的文件
[root@BC ~]#find /etc/ -type f -name "p*" | xargs tar czf p.tar.gz
38.打包etc目录下所有大于1M的文件
[root@BC ~]#find /etc/ -type f -size +1M | xargs tar czf big_file.tar.gz
2020年08月03日上午(day22)
一、磁盘基础介绍
1.什么是磁盘?
磁盘是指利用磁记录技术存储数据的存储器,是所有硬式存储的统称,如最早出现的软盘,现在的硬盘,都是磁盘中的一部分。
2.什么是软盘?
磁盘开始指的是1.44MB的3.5英寸磁盘,这是很早时候的电脑储存盘,也叫软盘。
软盘在如今已经很少被使用了,使用软盘需要安装软盘驱动。软盘容量小,容易损坏。随着数据的大量增长,软盘已经不满足日益所需的数据存储需求,所以,硬盘便被研发了出来。
3.什么是硬盘?
硬盘就是一种最为常见的外存储器,它好比是数据的外部仓库一样。电脑除了要有"工作间",还要有专门存储东西的仓库。是计算机中的最大的存储装置了,我们会将磁盘的储存片装到硬质金属盒子里,这样就可以得到更好的保护,而且在使用寿命上也比软盘优越得多,只有低格的时候才会对硬盘有很大的伤害。
4.磁盘与软盘硬盘的关系
磁盘是一种统称,即是一开始的软盘,又是现如今的硬盘,但是在现在,说起磁盘,都指的是硬盘。
二、磁盘的根本结构
1.盘片
盘片是硬盘中承载数据存储的介质。硬盘盘片是以坚固耐用的材料为盘基,将磁粉附着在铝合金(新材料也有用玻璃)圆盘片的表面上,表面被加工的相当平滑。这些磁粉被划分成为磁道的若干个同心圆,在每个同心圆的磁道上就好像有无数的任意排列的小磁铁,它们分别代表着0和1的状态。当这些小磁铁受到来自磁头的磁力影响时,其排列的方向会随之改变。
利用磁头的磁力控制指定的一些小磁铁方向,使每个小磁铁都可以用来储存信息。硬盘是由多个盘片叠加在一起,互相之间由垫圈隔开。
硬盘中一般会有多个盘片,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头(Head,简写为H)。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
2.磁道
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
每个盘片的盘面在出厂的时候被划分出了多个同心圆环,数据就存储在这样的同心圆环上面,每个盘面可以划分多个磁道,但是肉眼不可见。通常一块盘面有成千上万个磁道。
磁盘上的磁道是一组记录密度不同的同心圆。磁表面存储器是在不同形状(如盘状、带状等)的载体上。
3.扇区
在硬盘出厂时会对磁盘进行一次低级格式化,其实就是再将每个磁道划分为若干个弧段,每个弧段就是一个扇区(Sector)。若干个扇区就组成整个盘片,硬盘的读写以扇区为基本单位。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易。现在每个扇区可存储512字节数据,已经成了业界的约定。
低级格式化就是将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。
硬盘低级格式化的功用:硬盘低级格式化是对硬盘最彻底的初始化方式,经过低格后的硬盘,原来保存的数据将会全部丢失,所以一般来说低格硬盘是非常不可取的,只有非常必要的时候才能低格硬盘。而这个所谓的必要时候有两种,一是硬盘出厂前,硬盘厂会对硬盘进行一次低级格式化;另一个是当硬盘出现某种类型的坏道时,使用低级格式化能起到一定的缓解或者屏蔽作用。
4.柱面
柱面实际上就是我们抽象出来的一个逻辑概念,简单来说就是处于同一个垂直区域的磁道称为柱面,即各盘面上面相同位置的集合,这样数据如果存储到相同半径磁道上的同一扇区,这样可以实现并行读取,主要是减少磁头寻道时间。
5.磁头
磁头是硬盘中最昂贵的部件,也是硬盘技术中最重要和最关键的一环。主要作用是读取磁盘磁道上面的金属块,负责读或写入数据。
三、磁盘的相关概念
1.磁盘的接口
IDE SCSI #淘汰了
SATA III SAS #企业级
SSD( SATA III PCIE )
M2 超极本的接口标准 MSATA
2.机械硬盘和固态硬盘的区别
机械硬盘 HDD 固态硬盘 SSD
容量大价格低 容量小价格贵
抗击打能力弱 抗击打能力强
读写速度慢 读写速度快
数据损坏恢复易 数据恢复难
寿命一直使用 使用期限有一定限制
3.磁盘的命名方式:
/dev/sda1 #第一块物理硬盘的第一个分区
/dev/sdb3 #第二块物理硬盘的第三个分区
/dev/vdc5 #第三块虚拟硬盘的第5个分区
sd #物理硬盘
vd #虚拟硬盘
4.磁盘的相关单位和术语
尺寸: 2.5英寸 3.5英寸
数据大小: bit B KB MB GB TB PB EB
单位换算: 1024 1B=8b
转速: RPM 转/每分钟 5400 7200 10k 15k
IOPS 衡量磁盘读写 IO的单位 每秒的输入输出
5.两个分区表:
MBR 适用于2TB 只能有4个主分区 扩展分区(逻辑分区 )
3个主分区 + 1个扩展分区( 逻辑分区...... )
MBR的位置: 0磁头0磁道1扇区 512字节
446字节 MBR引导记录
64字节4个主分区
2字节分区结束标识符
GPT 适用于2TB 128个主分区
6.分区工具:
fdisk #适用于2TB的分区
gdisk #适用于2TB以上
四、Fdisk分区
[root@BC ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug 3 09:34 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 3 09:34 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 3 09:34 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 3 09:34 /dev/sda3
[root@BC ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sr0 11:0 1 4.3G 0 rom /mnt
[root@BC ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@BC ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug 3 17:38 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 3 17:38 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 3 17:38 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 3 17:38 /dev/sda3
brw-rw---- 1 root disk 8, 16 Aug 3 17:38 /dev/sdb
brw-rw---- 1 root disk 8, 32 Aug 3 17:38 /dev/sdc
#显示某块磁盘的分区信息
[root@BC ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@BC ~]# fdisk -l /dev/sda
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ae9a7
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 5220351 2097152 82 Linux swap / Solaris
/dev/sda3 5220352 209715199 102247424 83 Linux
[root@BC ~]#
#1. 进行分区 创建分区
[root@BC ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5b8d3e75.
Command (m for help): m
Command action
a toggle a bootable flag #切换分区启动标记
b edit bsd disklabel #编辑sdb磁盘标签
c toggle the dos compatibility flag #切换dos兼容模式
d delete a partition #删除分区
l list known partition types #显示分区类型
m print this menu #显示帮助菜单
n add a new partition #新建分区
o create a new empty DOS partition table #创建新的空白分区表
p print the partition table #显示分区表的信息
q quit without saving changes #不保存退出
s create a new empty Sun disklabel #创建新的Sun磁盘标签
t change a partitions system id #修改分区ID,可以通过l查看id
u change display/entry units #修改容量单位,磁柱或扇区
v verify the partition table #检验分区表
w write table to disk and exit #保存退出
x extra functionality (experts only) #拓展功能
Command (m for help):
Command (m for help): 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-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Ext\'d (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Command (m for help): n #创建分区 #主分区的编号是1-4 逻辑分区从5开始
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #创建主分区
Partition number (1-4, default 1): 1 #主分区的编号
First sector (2048-209715199, default 2048): #扇区的起始位置
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): +10G #扇区的结束位置
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
Command (m for help): n #再次创建一个分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (20973568-209715199, default 20973568):
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-209715199, default 209715199): +10G
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 41945087 10485760 83 Linux
Command (m for help): d #删除分区
Partition number (1,2, default 2): 2 #指定分区编号
Partition 2 is deleted
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
#创建扩展分区
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
Partition number (2-4, default 2):
First sector (20973568-209715199, default 20973568):
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-209715199, default 209715199): +50G
Partition 2 of type Extended and of size 50 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
#创建一个逻辑分区
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (20975616-125831167, default 20975616):
Using default value 20975616
Last sector, +sectors or +size{K,M,G} (20975616-125831167, default 125831167): +20G
Partition 5 of type Linux and of size 20 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
/dev/sdb5 20975616 62918655 20971520 83 Linux
Command (m for help): w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#检查
[root@BC ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@BC ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Aug 3 2020 /dev/sda
brw-rw---- 1 root disk 8, 1 Aug 3 2020 /dev/sda1
brw-rw---- 1 root disk 8, 2 Aug 3 2020 /dev/sda2
brw-rw---- 1 root disk 8, 3 Aug 3 2020 /dev/sda3
brw-rw---- 1 root disk 8, 16 Aug 3 09:53 /dev/sdb
brw-rw---- 1 root disk 8, 17 Aug 3 09:53 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Aug 3 09:53 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Aug 3 09:53 /dev/sdb5
brw-rw---- 1 root disk 8, 32 Aug 3 2020 /dev/sdc
#2. 创建文件系统 格式化
[root@BC ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#3. 创建挂载点
[root@BC ~]# mkdir /fdisk01
#4. 挂载使用
[root@BC ~]# mount /dev/sdb1 /fdisk01
[root@BC ~]# df -h | grep \'/fdisk01\'
/dev/sdb1 10G 33M 10G 1% /fdisk01
#测试是否可用
[root@BC ~]# dd if=/dev/zero of=/fdisk01/test.log bs=10M count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 10.8088 s, 97.0 MB/s
[root@BC ~]# df -h | grep \'/fdisk01\'
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
#5. 实现永久挂载
[root@BC ~]# tail -1 /etc/fstab
/dev/sdb1 /fdisk01 xfs defaults 0 0
[root@BC ~]#
[root@BC ~]# mount -a #重新挂载/etc/fstab文件中的挂载列表
[root@BC ~]#
#数据是跟着设备走的 目录只是一个挂载点 就是入口
[root@BC ~]# ll /fdisk01/
total 1024000
-rw-r--r-- 1 root root 1048576000 Aug 3 09:59 test.log
[root@BC ~]# umount /dev/sdb1
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 5.5G 92G 6% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
[root@BC ~]# ll /fdisk01/
total 0
[root@BC ~]# mount -a
[root@BC ~]# ll /fdisk01/
total 1024000
-rw-r--r-- 1 root root 1048576000 Aug 3 09:59 test.log
五、Gdisk分区
[root@BC ~]# yum install -y gdisk
[root@BC ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part /fdisk01
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
[root@BC ~]# gdisk -l /dev/sdc
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2BF39D49-315B-42C3-9C9C-C5A98D1EBB71
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 6442450877 sectors (3.0 TiB)
Number Start (sector) End (sector) Size Code Name
#2. 创建分区
[root@BC ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): m
b back up GPT data to a file #将GPT数据备份到文件中
c change a partition\'s name #更改分区的名称
d delete a partition #删除分区
i show detailed information on a partition #显示分区的详细信息
l list known partition types #列出已知的分区类型
n add a new partition #添加一个新的分区
o create a new empty GUID partition table (GPT) #创建一个新的空GUID分区表(GPT)
p print the partition table #打印分区表
q quit without saving changes #没有保存更改就退出
r recovery and transformation options (experts only) #恢复和转换选项(仅限专家使用)
s sort partitions #年代分类分区
t change a partition\'s type code #不要更改分区的类型代码
v verify disk #验证磁盘
w write table to disk and exit #将表写入磁盘并退出
x extra functionality (experts only) #额外功能(仅限专家使用)
? print this menu #打印菜单
Command (? for help):
Command (? for help): n #创建分区
Partition number (1-128, default 1): #分区编号
First sector (34-6442450910, default = 2048) or {+-}size{KMGTP}: #扇区起始位置
Last sector (2048-6442450910, default = 6442450910) or {+-}size{KMGTP}: #扇区结束位置
Current type is \'Linux filesystem\'
Hex code or GUID (L to show codes, Enter = 8300): #选择分区类型
Changed type of partition to \'Linux filesystem\'
Command (? for help): p #打印分区表信息
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2E58E6D9-4971-4B2F-A455-16D3A5115002
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6442450910 3.0 TiB 8300 Linux filesystem
Command (? for help):
Command (? for help): w #保存退出
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y #是否确认
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[root@BC ~]#
#3. 格式化,创建文件系统
[root@BC ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part /fdisk01
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
└─sdc1 8:33 0 3T 0 part
sr0 11:0 1 4.3G 0 rom
[root@BC ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=201326527 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=805306107, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=393215, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#4. 创建挂载点,进行挂载
[root@BC ~]# mkdir /gdisk01
[root@BC ~]# mount /dev/sdc1 /gdisk01
[root@BC ~]# df -h | grep \'/gdisk01\'
/dev/sdc1 3.0T 33M 3.0T 1% /gdisk01
[root@BC ~]# cp /fdisk01/test.log /gdisk01/
[root@BC ~]# df -h | grep \'/gdisk01\'
/dev/sdc1 3.0T 1.1G 3.0T 1% /gdisk01
[root@BC ~]#
#5. 永久挂载
[root@BC ~]# tail -1 /etc/fstab
/dev/sdc1 /gdisk01 xfs defaults 0 0
[root@BC ~]# mount -a
[root@BC ~]#
六、磁盘的挂载方式
在Linux系统中,所有的设备必须挂载才能使用
mount #挂载的命令
选项:
-t #指定文件系统 网络协议 nfs
-o #指定挂载的参数
-a #重新挂载/etc/fstab文件中的挂载列表
[root@BC ~]# mount -t xfs /dev/sdb1 /fdisk01/
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 5.5G 92G 6% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
[root@BC ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 97.5G 0 part /
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 10G 0 part /fdisk01
├─sdb2 8:18 0 1K 0 part
└─sdb5 8:21 0 20G 0 part
sdc 8:32 0 3T 0 disk
└─sdc1 8:33 0 3T 0 part
sr0 11:0 1 4.3G 0 rom
[root@BC ~]# blkid
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="70df4a5b-091c-4aaa-9cc7-d745201ec394" TYPE="xfs"
/dev/sda2: UUID="6aefd444-30dc-4c0e-9a8d-75a8b1d9856b" TYPE="swap"
/dev/sda3: UUID="4aa02e85-ffe1-4783-9886-a328f923bee8" TYPE="xfs"
/dev/sdb1: UUID="0668e9f1-7d37-42eb-9e79-980f6352c342" TYPE="xfs"
/dev/sdc1: UUID="60d9a87f-fa86-4fdc-a1c9-2a88df756a24" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="71869797-d467-4293-807e-7c6f917c7422"
[root@BC ~]#
[root@BC ~]# mount -o ro /dev/sdb1 /fdisk01/
[root@BC ~]# cp /etc/hosts /fdisk01/
cp: cannot create regular file ‘/fdisk01/hosts’: Read-only file system
umount #卸载
选项:
-l #强制卸载
[root@BC ~]# umount /dev/sdb1
[root@BC ~]# df -h | grep \'/dev/sdb1\'
[root@BC ~]# mount /dev/sdb1 /fdisk01/
[root@BC ~]# cd /fdisk01/
[root@BC fdisk01]# umount /fdisk01 #不能在挂载的目录中进行卸载
umount: /fdisk01: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@BC fdisk01]# umount /dev/sdb1
umount: /fdisk01: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@BC fdisk01]# umount -l /dev/sdb1
[root@BC fdisk01]# cd
[root@BC ~]# mount /dev/sdb1 /fdisk01/
[root@BC ~]# umount /fdisk01/
[root@BC ~]# df -h | grep \'/dev/sdb1\'
[root@BC ~]#
#通过UUID进行挂载
[root@BC ~]# blkid
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda1: UUID="70df4a5b-091c-4aaa-9cc7-d745201ec394" TYPE="xfs"
/dev/sda2: UUID="6aefd444-30dc-4c0e-9a8d-75a8b1d9856b" TYPE="swap"
/dev/sda3: UUID="4aa02e85-ffe1-4783-9886-a328f923bee8" TYPE="xfs"
/dev/sdb1: UUID="0668e9f1-7d37-42eb-9e79-980f6352c342" TYPE="xfs"
/dev/sdc1: UUID="60d9a87f-fa86-4fdc-a1c9-2a88df756a24" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="71869797-d467-4293-807e-7c6f917c7422"
[root@BC ~]# mount UUID="0668e9f1-7d37-42eb-9e79-980f6352c342" /fdisk01/
[root@BC ~]# df -h | grep \'fdisk\'
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
[root@BC ~]#
[root@BC ~]# tail -1 /etc/fstab
UUID=0668e9f1-7d37-42eb-9e79-980f6352c342 /fdisk01/ xfs defaults 0 0
[root@BC ~]# mount -a
[root@BC ~]# tail -4 /etc/fstab
UUID=4aa02e85-ffe1-4783-9886-a328f923bee8 / xfs defaults 0 0
UUID=70df4a5b-091c-4aaa-9cc7-d745201ec394 /boot xfs defaults 0 0
UUID=6aefd444-30dc-4c0e-9a8d-75a8b1d9856b swap swap defaults 0 0
UUID=0668e9f1-7d37-42eb-9e79-980f6352c342 /fdisk01/ xfs defaults 0 0
#以空白字符为分隔符,分为6列:
[root@BC ~]# cat /etc/fstab
#设备名称 挂载的位置 文件系统类型 挂载的参数 是否备份 是否检查
/dev/sdb1 /data xfs defaults 0 0
第一列: 挂载的设备 挂载的地址 网络设备地址
第二列: 挂载点 挂载的目录 空目录
第三列: 文件系统的类型 xfs 7默认的 ext4 6默认的 nfs gfs
第四列: 挂载的参数 defaults
第五列: 是否允许dump进行备份
0 #不备份
1 #每天备份
2 #不定期备份
第六列: 是否通过fsck命令检查磁盘
0 #不检查
1 #检查 检查顺序 先检查 /
2 #检查顺序
#建议挂载时使用UUID
#1.怎样获取磁盘分区的UUID,使用blkid命令获取
[root@BC ~]# blkid|grep sdc1
/dev/sdc1: UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b"
#2.手动测试是否能正常的挂载
[root@BC ~]# mount UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac
#3.将信息写入到/etc/fstab文件中,保证下次启动系统自动挂载
UUID="c7c940b3-277b-49fa-960b-eef5ed6e9b1b" /datac xfs defaults 0 0
#4.卸载/datac挂载信息, 然后使用mount -a检查/etc/fstab文件是否ok
[root@BC ~]# mount -a
PS: 如果不检查写错了直接重启, 会导致系统无法启动.
七、Swap虚拟内存
Out of memory
OOM #内存溢出 内存不足
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 133 1625 9 221 1672
Swap: 2047 0 2047
[root@BC ~]# swapoff -a
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 132 1627 9 220 1673
Swap: 0 0 0
虚拟内存
#添加一个swap分区
#创建一个1G的分区
[root@BC ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): p
Partition number (3,4, default 3):
First sector (125831168-209715199, default 125831168):
Using default value 125831168
Last sector, +sectors or +size{K,M,G} (125831168-209715199, default 209715199): +1G
Partition 3 of type Linux and of size 1 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
/dev/sdb3 125831168 127928319 1048576 83 Linux
/dev/sdb5 20975616 62918655 20971520 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@BC ~]# partprobe #通知内核,系统分区表发生变化
#将这个分区变为swap分区
[root@BC ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=8a9c926b-de0d-4b49-bcb8-39a9c0b834a8
#把这个分区加入到swap
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 77 1819 0 84 1774
Swap: 2047 69 1978
[root@BC ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 2097148 71168 -2
[root@BC ~]# swapon /dev/sdb3
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 78 1818 0 84 1773
Swap: 3071 69 3002
[root@BC ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 2097148 70912 -2
/dev/sdb3 partition 1048572 0 -3
#移除swap
[root@BC ~]# swapoff /dev/sdb3
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 78 1818 0 84 1773
Swap: 2047 69 1978
#禁用swap
[root@BC ~]# swapoff -a
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 128 1759 9 92 1715
Swap: 0 0 0
#启用swap
[root@BC ~]# swapon -a
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 129 1758 9 92 1713
Swap: 2047 0 2047
#生成一个大文件 作为swap
[root@BC ~]# dd if=/dev/zero of=/root/swap.txt bs=100M count=10
10+0 records in
10+0 records out
1048576000 bytes (1.0 GB) copied, 8.33166 s, 126 MB/s
[root@BC ~]# ll
total 1024000
-rw-r--r-- 1 root root 1048576000 Aug 3 11:21 swap.txt
[root@BC ~]# mkswap swap.txt
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=51e07b8a-971a-47ec-972e-36f8273ec3cd
[root@BC ~]# ll
total 1024000
-rw-r--r-- 1 root root 1048576000 Aug 3 11:22 swap.txt
[root@BC ~]# file swap.txt
swap.txt: Linux/i386 swap file (new style), version 1 (4K pages), size 255999 pages, no label, UUID=51e07b8a-971a-47ec-972e-36f8273ec3cd
[root@BC ~]# chmod 600 swap.txt
[root@BC ~]# swapon /root/swap.txt
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 132 727 9 1120 1663
Swap: 3047 0 3047
[root@BC ~]# swapoff swap.txt
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 130 729 9 1120 1665
Swap: 2047 0 2047
八、RAID基本介绍
磁盘阵列技术
做磁盘阵列的好处:
1. 获得更高的容量
2. 获得更高的性能
3. 让数据更安全 冗余
如何做RAID:
软件实现 软RAID 不推荐 mdadm
硬件RAID RAID卡实现的 推荐
做RAID什么时候做:
在装系统之前做
RAID的级别:
级别 别名 硬盘数量 容量 性能 容错性
RAID0 条带卷 至少两块 N*单块 读写最快 0
RAID1 镜像卷 只能两块 损失一半 写慢 读一般 50%
RAID5 校验卷 至少3块 浪费一块 读写一般 N分之一 只能坏一块
RAID10 镜像阵列条带卷 至少4块 浪费一半 读写很快 50%
九、LVM概述
1. 什么是LVM?
LVM是Logical Volume Manager (逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。
最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个 Linux 版本的逻辑卷管理器。
2. LVM解决了什么问题
当我们刚开始安装Linux操作系统是遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。
普通的磁盘分区好之后就无法改变其大小,而遇到出现某个分区空间耗尽时,解决的方法可以是符号链接,或者调整分区大小的工具,但这只是暂时解决方法,没有从根本上解决问题。
随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户可以在无需停机的请款下可以方便的调整各个分区大小。
3. LVM基本概念
物理卷(PV):(physical volume),把常规的磁盘设备通过pvcreate命令对其进行初始化,形成了物理卷。其实就是硬盘或分区。(面粉)
卷组(VG):(volume group),把多个物理卷组成一个逻辑的整体,这样卷组的大小就是多个硬盘之和。或者理解就是由一个或多个PV组成的整体。(面团)
逻辑卷(LV):(logical volume),从卷组中划分需要的空间大小出来。用户仅需对其格式化然后即可挂载使用。从VG中切割出的空间用于创建文件系统。(切成馒头)
基本单元(PE):(physical extend),分配的逻辑大小的最小单元,默认为4MB的基本块。(假设分配100MB逻辑空间,则需要创建25个PE)
4. 逻辑卷实践
1)创建物理卷,将普通磁盘转换为物理卷。
2)创建卷组,将物理卷加入到卷组中。
3)在卷组中划分逻辑卷,然后挂载使用。
1. 准备物理磁盘,如果是虚拟机需要关闭添加磁盘,以便更好的实验
[root@BC ~]# lsblk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
2. 将磁盘转换为物理卷
#下载安装软件包
[root@BC ~]# yum install -y lvm2
[root@BC ~]# pvcreate /dev/sdb
3. 将/dev/sdb物理卷加入卷组(资源池)-->名字lvm_test
[root@BC ~]# vgcreate lvm_test /dev/sdb
#检查卷组
[root@BC ~]# vgs
4. 创建逻辑卷,分配名称,以及大小,指定卷组
选项:
-L #逻辑卷大小
-n #逻辑卷名字
[root@BC ~]# lvcreate -L 100M -n lv1 lvm_test ##将lvm_test分配給lv1
5. 格式化逻辑卷
[root@BC ~]# mkfs.xfs /dev/lvm_test/lv1
6. 挂载使用
[root@BC ~]# mkdir /lv1
[root@BC ~]# mount /dev/lvm_test/lv1 /lv1/
[root@BC ~]# cp /etc/services /lv1/
02. 卷组管理,如何扩展卷组大小,如何删除卷组
1. 如何扩大VG卷组
#1.新硬盘加入pv
[root@BC ~]# pvcreate /dev/sdc
#2.先检查当前的vg卷组大小
[root@oldboyedu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- 1020.00m 920.00m
#3.使用vgextend扩展卷组
[root@BC ~]# vgextend lvm_test /dev/sdc
Volume group "lvm_test" successfully extended
#4.再次检查,发现卷组已经扩大
[root@oldboyedu ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 2 1 0 wz--n- 1.99g 1.89g
2. 假设想移除/dev/sdb磁盘,建议先将sdb磁盘数据先迁移到sdc磁盘,然后在移除。(同一卷组的磁盘才可以进行在线迁移),(注意卷组的名称---)
#1.检查当前逻辑卷VG中PV使用情况
[root@BC ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 1.76g
/dev/sdc vg1 lvm2 a -- 2.00g 2.00g
#2.pvmove在线数据迁移,将sdb的数据迁移至sdc
[root@BC ~]# pvmove /dev/sdb
/dev/sdb: Moved: 100.00%
#3.检查是否将sdb数据迁移至sdc
[root@BC ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 2.00g
/dev/sdc vg1 lvm2 a -- 2.00g 1.76g
#4.从卷组中移除sdb磁盘
[root@BC ~]# vgreduce lvm_test /dev/sdb
Removed "/dev/sdb" from volume group "lvm_test"
3. 逻辑卷管理,动态的调整逻辑卷大小
01. 逻辑卷的扩展,是取决于vg卷中是否还有剩余的容量,注意扩展逻辑卷不能超过卷组VG的总大小
[root@BC ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 1 1 0 wz--n- 1020.00m 920.00m
#1.扩展lv逻辑卷,增加800M分配给逻辑卷 {注意: 800M +800M 不一样}
[root@BC ~]# lvextend -L +800M /dev/lvm_test/lv1
#或者可以选择分配磁盘池中多少百分比给逻辑卷
[root@BC ~]# lvextend -l +50%FREE /dev/lvm_test/lv1
#2.扩展逻辑卷后需要更新fs文件系统
[root@BC ~]# xfs_growfs /dev/lvm_testvg/lv1 #xfs文件格式扩容
02. 缩小逻辑卷,不要去操作,因为线上在使用的磁盘真的敢操作吗?
03. 删除逻辑卷,如果不想使用逻辑卷可以选择删除。
[root@BC ~]# umount /dev/lvm_test/lv1
[root@BC ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1?
Logical volume "lv1" successfully removed
注意:LVM如果有一个磁盘损坏,整个lvm都坏了, lvm只有动态扩展作用,底层用RAID + 上层LVM = 既有冗余又有动态扩展
十、硬盘故障
01. 磁盘block满故障
[root@BC ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type:
p primary (2 primary, 1 extended, 1 free)
l logical (numbered from 5)
Select (default p):
Using default response p
Selected partition 4
First sector (127928320-209715199, default 127928320):
Using default value 127928320
Last sector, +sectors or +size{K,M,G} (127928320-209715199, default 209715199): +2G
Partition 4 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b8d3e75
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 125831167 52428800 5 Extended
/dev/sdb3 125831168 127928319 1048576 83 Linux
/dev/sdb4 127928320 132122623 2097152 83 Linux
/dev/sdb5 20975616 62918655 20971520 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@BC ~]#
#准备2G的分区
[root@BC ~]# dd if=/dev/zero of=/opt/test.log bs=100M count=21
dd: error writing ‘/opt/test.log’: No space left on device
21+0 records in
20+0 records out
2099183616 bytes (2.1 GB) copied, 3.34918 s, 627 MB/s
[root@BC ~]# echo "123" >> /opt/file.txt
-bash: echo: write error: No space left on device #磁盘空间不足
#解决:
检查磁盘空间
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 6.4G 92G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
/dev/sdb4 2.0G 2.0G 20K 100% /opt
#找到这个大文件 确认好之后在删
[root@BC ~]# du -sh /opt/* | grep \'G\'
2.0G /opt/test.log
一级一级往下找
注意:如果该文件存在硬链接,一定要把硬链接文件删除。
02. 磁盘inode满故障
[root@BC ~]# echo "123" >>/opt/test.txt
-bash: /opt/test.txt: No space left on device
[root@BC ~]#
[root@BC ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 98G 6.4G 92G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sdb1 10G 1.1G 9.0G 11% /fdisk01
/dev/sdb4 2.0G 582M 1.5G 29% /opt
[root@BC ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 51123712 46093 51077619 1% /
devtmpfs 250786 417 250369 1% /dev
tmpfs 253511 1 253510 1% /dev/shm
tmpfs 253511 774 252737 1% /run
tmpfs 253511 16 253495 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 253511 1 253510 1% /run/user/0
/dev/sdb1 5242880 4 5242876 1% /fdisk01
/dev/sdb4 1048576 1048576 0 100% /opt
[root@BC ~]# find /opt/ -type d -size +2M | xargs ls -lhd
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test01
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test02
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test03
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test04
drwxr-xr-x 2 root root 3.7M Aug 3 12:27 /opt/test/test05
[root@BC ~]# find /opt/ -type d -size +1M | xargs ls -lhd
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data01
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data02
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data03
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data04
drwxr-xr-x 2 root root 1.2M Aug 3 12:25 /opt/test/data05
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test01
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test02
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test03
drwxr-xr-x 2 root root 3.8M Aug 3 12:27 /opt/test/test04
drwxr-xr-x 2 root root 3.7M Aug 3 12:27 /opt/test/test05
[root@BC ~]# ll /opt/test/data01 | wc -l
50001
#找到之后,确认在删除
[root@BC ~]# find /opt/test/data01 -type f -delete
[root@BC ~]# rm -f /opt/test/test01/*
-bash: /usr/bin/rm: Argument list too long
[root@BC ~]# ll /opt/test/test01/ | wc -l
150001
2020年08月04日上午(day23)
一、进程的概述
1.什么是进程?
言简意赅总结:当我们运行一个程序,那么我们将该程序称之为进程。
注意:
当程序运行为进程后,系统会为该进程分配内存,以及运行的身份和权限。
分配了系统的资源 文件描述符 进程描述符 网络端口 ID号 PID PPID
系统会记录进程的运行中的状态 STATAE
在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息。
2.进程和程序的区别
程序是指令和数据的有序集合 静态的概念 永久存在的
进程是程序在主机上面运行的一个过程 动态的概念 会随着程序的创建,运行,终止,消除而终止 临时
3.进程的生命周期
每一个进程都有其生命周期,例如创建、运行、终止和消除。这些阶段会在系统启动和运行中重复无数次。因此,进程的生命周期对于其性能的分析是非常重要的。
进程的运行过程:
用户运行了一个程序,系统会给进程分配任务,进程会通过fork一个子进程,子进程会继承父进程的衣钵,子进程处理具体的任务,父进程就会进入等待状态,子进程任务结束,回来向父进程交任务,子进程正常退出
子进程在执行任务时,父进程因为意外原因退出了,那么子进程就会变成无人管理,就是僵尸进程
每个进程都有自己的代号 ID号 子进程 PID 父进程 PPID
二、进程的状态
1.使用ps命令查看当前的进程状态
ps aux是常用组合,查看进程用户、PID、占用CPU百分比、占用内存百分比、状态、执行的命令等。
ps #显示进程的命令 静态显示
a #显示所有进程
u #显示有效的用户或者uid
x #显示没有终端
aux
-e #显示所有进程
-f #显示用户PPID
-ef #显示所有的进程及进程的PPID
[root@BC ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125420 2112 ? Ss Aug03 0:03 /usr/lib/systemd/systemd --switched-root --system --des
root 2 0.0 0.0 0 0 ? S Aug03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Aug03 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Aug03 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Aug03 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Aug03 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R Aug03 0:07 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< Aug03 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S Aug03 0:00 [watchdog/0]
USER #进程运行的身份 用户
PID #进程的ID号
PPID #父进程的ID号
%CPU #进程占用CPU的百分比
%MEM #进程占用内存的百分比
VSZ #虚拟内存集 进程占用虚拟内存的大小
RSS #物理内存集 进程占用物理内存的大小
TTY #终端
? #没有终端 内核运行的程序
tty1 #机器的终端 服务器的本地
pts/0 #虚拟远程终端
STAT #进程的状态
S #休眠的状态
R #正在运行的状态
D #无法中断的休眠状态
T #暂停或被追踪的状态
Z #僵尸状态
s #父进程
< #优先级高
N #优先级低
l #多线程
+ #在前台运行
START #进程的启动时间
TIME #进程占用CPU的时间
COMMAND #执行的指令或者命令
[] #内核运行的
无[] #用户运行的
[root@BC ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug03 ? 00:00:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 Aug03 ? 00:00:00 [kthreadd]
root 3 2 0 Aug03 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 Aug03 ? 00:00:00 [kworker/0:0H]
root 7 2 0 Aug03 ? 00:00:00 [migration/0]
root 8 2 0 Aug03 ? 00:00:00 [rcu_bh]
root 9 2 0 Aug03 ? 00:00:07 [rcu_sched]
root 10 2 0 Aug03 ? 00:00:00 [lru-add-drain]
案例1
[root@BC ~]# vim test.log
#另外一个窗口
[root@BC ~]# ps aux |grep -v grep | grep vim
root 12592 0.2 0.2 149168 4996 pts/0 S+ 09:04 0:00 vim test.log
[root@BC ~]# ps aux | grep [v]im
root 12592 0.1 0.2 149168 4996 pts/0 S+ 09:04 0:00 vim test.log
[root@BC ~]# vim test.log #ctrl + z 放入到后台
[1]+ Stopped vim test.log
[root@BC ~]# ps aux | grep [v]im
root 12592 0.0 0.2 149168 4996 pts/0 T 09:04 0:00 vim test.log
案例二
[root@BC ~]# tar czf etc.tar.gz /usr /etc/ /var
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from hard link targets
[root@BC ~]# ps aux | grep [t]ar
root 12617 7.0 0.0 123408 1352 pts/0 R+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 6.0 0.0 123408 1352 pts/0 D+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 6.2 0.0 123540 1352 pts/0 R+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 5.8 0.0 123540 1352 pts/0 D+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 5.5 0.0 123540 1352 pts/0 D+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 6.5 0.0 123540 1352 pts/0 S+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 5.8 0.0 123540 1352 pts/0 S+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [t]ar
root 12617 6.1 0.0 123540 1352 pts/0 R+ 09:08 0:00 tar czf etc.tar.gz /usr /etc/ /var
[root@BC ~]# ps aux | grep [b]ash
root 7193 0.0 5.4 225028 111152 pts/0 Ss Aug03 0:04 -bash
root 12575 0.0 0.1 115572 2120 pts/1 Ss+ 09:04 0:00 -bash
root 12641 0.0 5.4 225028 110280 pts/0 R+ 09:09 0:00 -bash
案例三
[root@BC ~]# vim test.c
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
pid_t pid;
pid = fork();
if (pid == 0) {
int iPid = (int)getpid();
fprintf(stderr,"I am child,%d\n",iPid);
sleep(1);
fprintf(stderr, "Child exits\n");
return EXIT_SUCCESS;
}
int iPid = (int)getpid();
fprintf(stderr,"I am parent,%d\n",iPid);
fprintf(stderr, "sleep....\n");
sleep(600);
fprintf(stderr, "parent exits\n");
return EXIT_SUCCESS;
}
[root@BC ~]# gcc test.c
[root@BC ~]# ll
total 1218672
-rwxr-xr-x 1 root root 8696 Aug 4 09:11 a.out
-rw-r--r-- 1 root root 199327744 Aug 4 09:09 etc.tar.gz
-rw------- 1 root root 1048576000 Aug 3 11:22 swap.txt
-rw-r--r-- 1 root root 547 Aug 4 09:10 test.c
[root@BC ~]# ./a.out
I am parent,12655
sleep....
I am child,12656
Child exits
^C
[root@BC ~]# ps aux | grep [a.]out
root 12655 0.0 0.0 4208 352 pts/0 S+ 09:11 0:00 ./a.out
root 12656 0.0 0.0 0 0 pts/0 Z+ 09:11 0:00 [a.out] <defunct>
2.使用top命令查看当前的进程状态(动态)
top htop #动态显示进程状态
[root@BC ~]# yum install -y htop
[root@BC ~]# top
top - 09:33:58 up 23:31, 2 users, load average: 0.24, 0.10, 0.07
Tasks: 113 total, 1 running, 112 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2028088 total, 155648 free, 363844 used, 1508596 buff/cache
KiB Swap: 2097148 total, 2069756 free, 27392 used. 974036 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
top - 09:33:58 up 23:31, 2 users, load average: 0.24, 0.10, 0.07
09:33:58 #当前系统时间
up 23:31 #系统运行时间
2 users #登录用户的数量 连接终端的数量
load average: 0.24, 0.10, 0.07 #系统平均负载时间 1 5 15 分钟的平均负载
Tasks: 113 total, 1 running, 112 sleeping, 0 stopped, 0 zombie
任务:
113 total, #总共有113个任务
1 running #一个在运行状态
112 sleeping #112休眠状态 S
0 stopped #0个停止状态
0 zombie #0个在僵尸状态
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
系统各个状态所占用CPU的时间百分比
0.0 us #用户态 用户所占用的CPU的时间百分比
0.0 sy #系统态 系统所占用的CPU的时间百分比
0.0 ni #使用优先级的程序所占用的CPU的时间百分比
100.0 id #空闲状态所占用的CPU的时间百分比
0.0 wa #IO等待所占用的CPU的时间百分比
0.0 hi #硬中断所占用的CPU的时间百分比
0.0 si #软中断所占用的CPU的时间百分比
0.0 st #宿主机的监控程序所窃取的虚拟机的CPU的时间百分比
KiB Mem : 2028088 total, 155648 free, 363844 used, 1508596 buff/cache
物理内存 总的 剩余的 已使用的 缓存和缓冲中的内存
KiB Swap: 2097148 total, 2069756 free, 27392 used. 974036 avail Mem
虚拟内存
PID #进程的ID号
USER #运行的身份 用户
PR #优先级 20
NI #nice值 跟PR 相差 20个数 值越低,优先级就越高
VIRT #所占用的虚拟内存的大小
RES #所占用的物理内存的大小
SHR #共享内存
S #进程的状态
%CPU #占用CPU的百分比
%MEM #占用内存的百分比
TIME+ #CPU的运行时间
COMMAND #运行的指令或者命令
top命令的内部指令
h #查看帮出
z #高亮显示
1 #显示所有CPU的负载
s #设置刷新时间
b #高亮显示处于R状态的进程
M #按内存使用百分比排序输出
P #按CPU使用百分比排序输出
R #对排序进行反转
f #自定义显示字段
k #kill掉指定PID进程
W #保存top环境设置 ~/.toprc
q #退出
top选项:
[root@BC ~]# top -d 1 #设置刷新时间
[root@BC ~]# top -d 1 -p 1 #查看某个进程ID的进程状态
[root@BC ~]# top -d 1 -u postfix #显示指定运行用户的进程状态
[root@BC ~]# free -m
total used free shared buff/cache available
Mem: 1980 265 907 12 807 1114
Swap: 2047 29 2018
[root@BC ~]# yum install -y glances
[root@BC ~]# glances
三、终止进程
1.使用kill -l 列出当前系统所支持的信号
kill #管理系统中的信号输出
[root@BC ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
1 #重新加载配置 进程pid的不变
2 #终止信号 ctrl + c
9 #终止进程 强制终止
15 #默认信号 终止进程 可加可不加
18 #让暂停的进程继续运行
20 #ctrl + z 将进程暂停
[root@BC ~]# yum install -y nginx
[root@BC ~]# systemctl start nginx
[root@BC ~]# ps aux | grep nginx
root 13063 0.0 0.1 120796 2096 ? Ss 10:36 0:00 nginx: master process /usr/sbin/nginx
nginx 13064 0.2 0.1 121180 3128 ? S 10:36 0:00 nginx: worker process
[root@BC ~]# kill -1 13063
[root@BC ~]# ps aux | grep nginx
root 13063 0.0 0.2 121452 5248 ? Ss 10:36 0:00 nginx: master process /usr/sbin/nginx
nginx 13070 0.0 0.1 121876 3836 ? S 10:37 0:00 nginx: worker process
[root@BC ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13063/nginx: master
[root@BC ~]# kill -1 13063
[root@BC ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 13063/nginx: master
[root@BC ~]# top
[root@BC ~]# ps aux |grep [t]op
root 13115 0.0 0.1 161988 2212 pts/1 S+ 10:41 0:00 top
[root@BC ~]# kill -2 13115
[root@BC ~]# ps aux |grep [t]op
[root@BC ~]#
[root@BC ~]# kill -9 13063
[root@BC ~]# kill 13141
[root@BC ~]# ps aux |grep [t]op
root 13144 0.0 0.1 161984 2212 pts/1 S+ 10:44 0:00 top
[root@BC ~]# kill -15 13144
kill #根据进程ID去终止进程的 进程不存在时,会进行提示
#根据名称终止进程 精确匹配
[root@BC ~]# killall top
[root@BC ~]# killall nginx
[root@BC ~]# killall nginx #进程不存在时,会提示
nginx: no process found
[root@BC ~]# ps aux | grep [v]im
root 13264 0.0 0.2 149168 4972 pts/0 S+ 10:53 0:00 vim 123.txt
root 13265 0.1 0.2 149168 4972 pts/1 S+ 10:53 0:00 vim 123.log
[root@BC ~]# killall vim
pkill #根据进程名称终止 终止进程不会提示 模糊杀手
[root@BC ~]# ps aux | grep [t]op
root 13278 0.0 0.1 161988 2216 pts/0 S+ 10:56 0:00 top
root 13279 0.1 0.1 122396 2112 pts/1 S+ 10:56 0:00 htop
[root@BC ~]# pkill top
[root@BC ~]# ps aux | grep [t]op
[root@BC ~]#
[root@BC ~]# ps aux |grep sh
root 6935 0.0 0.0 112756 1276 ? Ss Aug03 0:00 /usr/sbin/sshd -D
root 7191 0.0 0.0 161364 1616 ? Ss Aug03 0:00 sshd: root@pts/0
root 7193 0.0 5.4 225028 111168 pts/0 Ss+ Aug03 0:05 -bash
root 12573 0.0 0.2 161364 5936 ? Ss 09:04 0:00 sshd: root@pts/1
root 12575 0.0 0.1 115572 2196 pts/1 Ss 09:04 0:00 -bash
root 13215 0.0 0.2 161364 6056 ? Ss 10:50 0:00 sshd: root@pts/2
root 13217 0.0 0.1 115572 2184 pts/2 Ss 10:50 0:00 -bash
root 13296 0.0 0.0 113176 1196 pts/2 S+ 10:59 0:00 sh 123.txt
root 13299 0.0 0.0 113176 1216 ? Ss 10:59 0:00 /bin/sh -c /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null
root 13302 0.0 0.0 112708 976 pts/1 R+ 10:59 0:00 grep --color=auto sh
[root@BC ~]# pkill sh
#以树形结构显示进程状态
[root@BC ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─auditd───{auditd}
├─crond───crond───sh───ntpdate
├─dbus-daemon
├─firewalld───{firewalld}
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─ping
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─vmtoolsd
└─vsftpd
四、管理进程的后台
1. 什么是后台进程
通常进程都会在终端前台运行,但是一旦关闭终端,进程也会随着结束,那么此时我们就希望进程能在后台运行,就是将在前台运行的进程放到后台运行,这样即使我们关闭了终端也不影响进程的正常运行。
2. 为什么要把进程放到后台运行
企业中很多时候会有一些需求:
比如:我们此前在国内服务器往国外服务器传输大文件时,由于网络问题需要传输很久,如果在传输的过程中出现网络抖动或者不小心关闭了终端则会导致传输失败,如果能将传输的进程放入后台,是不是就能解决此类问题了。
3. 使用什么工具可以把进程放到后台
早期的时候,大家都选择使用&符号将进程放到后台运行,然后再使用jobs、bg、fg等方式查看进程状态,但太麻烦了,也不直观,所以我们推荐使用screen。
1)jobs、bg、fg的使用(不推荐,了解即可)
[root@BC ~]# sleep 3000 & #运行程序(时),让其在后台执行
[root@BC ~]# sleep 4000 #^Z,将前台的程序挂起(暂停)到后台
[2]+ Stopped sleep 4000
[root@BC ~]# ps aux |grep sleep
[root@BC ~]# jobs #查看后台作业
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000
[root@BC ~]# bg %2 #让作业 2 在后台运行
[root@BC ~]# fg %1 #将作业 1 调回到前台
[root@BC ~]# kill %1 #kill 1,终止 PID 为 1 的进程
#进程在后台运行,但输出依然在当前终端
[root@BC ~]# (while :; do date; sleep 2; done) &
[root@BC ~]# (while :; do date; sleep 2; done) &>/dev/null &
2)screen的使用(强烈推荐,生产必用)
使用screen时会开启一个子bash窗口,关闭父bash并不影响子bash。
#1.安装
[root@BC ~]# yum install screen -y
#2.开启一个screen窗口,指定名称
[root@BC ~]# screen -S wget_mysql
#3.在screen窗口中执行任务即可。
#4.平滑的退出screen,但不会终止screen中的任务。注意: 如果使用exit才算真的关闭screen窗口
ctrl+a+d
#5.查看当前正在运行的screen有哪些
[root@BC ~]# screen -list
There is a screen on:
22058.wget_mysql (Detached)
1 Socket in /var/run/screen/S-root.
#6.进入正在运行的screen
[root@BC ~]# screen -r wget_mysql
[root@BC ~]# screen -r 22058
[root@BC ~]# tar czf etc.tar.gz /usr/ /etc/ /var
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from hard link targets
Connection closed.
Disconnected from remote host(虚拟机-10.0.0.100) at 11:13:33.
Type `help\' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
Last login: Tue Aug 4 11:12:44 2020 from 10.0.0.1
[root@BC ~]# ll
total 35408
-rw-r--r-- 1 root root 36257792 Aug 4 11:13 etc.tar.gz
[root@BC ~]# ll -h
total 35M
-rw-r--r-- 1 root root 35M Aug 4 11:13 etc.tar.gz
[root@BC ~]# tar czf etc.tar.gz /usr/ /etc/ /var
tar: Removing leading `/\' from member names
tar: Removing leading `/\' from hard link targets
^C
[root@BC ~]# ll -h
total 128M
-rw-r--r-- 1 root root 104M Aug 4 11:14 etc.tar.gz
[root@BC ~]#
#将程序放入到后台运行
1. nohup &
[root@BC ~]# nohup ping www.baidu.com &
[1] 13517
[root@BC ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@BC ~]#
[root@BC ~]# nohup ping www.baidu.com &
[1] 13592
[root@BC ~]# nohup: ignoring input and appending output to ‘nohup.out’
[root@BC ~]#
[root@BC ~]#
[root@BC ~]# ps aux |grep 13592
root 13592 0.0 0.0 149968 1988 pts/1 S 11:17 0:00 ping www.baidu.com
root 13594 0.0 0.0 112708 976 pts/1 R+ 11:17 0:00 grep --color=auto 13592
[root@BC ~]# jobs #显示当前窗口的后台进程
[1]+ Running nohup ping www.baidu.com &
[root@BC ~]# vim test.log
[2]+ Stopped vim test.log
[root@BC ~]# jobs
[1]- Running nohup ping www.baidu.com &
[2]+ Stopped vim test.log
#将后台程序放入到前台运行
[root@BC ~]# fg %2
#将暂停在后台的程序继续在后台运行 输出还是输出到屏幕上面
[root@BC ~]# bg %2
[2]+ ping www.baidu.com &
[root@BC ~]# ping www.baidu.com
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=128 time=16.5 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=128 time=13.7 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=3 ttl=128 time=13.8 ms
^Z
[1]+ Stopped ping www.baidu.com
[root@BC ~]# jobs
[1]+ Stopped ping www.baidu.com
[root@BC ~]# fg %1
ping www.baidu.com
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=4 ttl=128 time=14.2 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=5 ttl=128 time=14.5 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=6 ttl=128 time=14.7 ms
^C
--- www.a.shifen.com ping statistics ---
7 packets transmitted, 6 received, 14% packet loss, time 48609ms
rtt min/avg/max/mdev = 13.700/14.604/16.559/0.955 ms
2. screen #后台管理程序
#列出screen后台运行的程序
[root@BC ~]# screen -list
No Sockets found in /var/run/screen/S-root.
[root@BC ~]#
[root@BC ~]# screen -S vim #打开一个新的窗口 并指定窗口名称
[detached from 13659.vim]
[root@BC ~]# screen -list
There is a screen on:
13659.vim (Detached)
1 Socket in /var/run/screen/S-root.
[root@BC ~]# screen -r vim #或者通过id号
[root@BC ~]# screen -xr vim #实时监控窗口的操作
[detached from 13659.vim]
ctrl + a + d #临时退出
exit #真正退出
五、系统平均负载
[root@BC ~]# top
top - 11:54:48 up 1 day, 1:52, 3 users, load average: 0.00, 0.01, 0.05
[root@BC ~]# w
11:54:59 up 1 day, 1:52, 3 users, load average: 0.00, 0.01, 0.05
[root@BC ~]# uptime
11:55:09 up 1 day, 1:53, 3 users, load average: 0.00, 0.01, 0.05
1分钟 5分钟 15分钟 系统的平均负载
平均负载跟系统CPU的使用率没有太大关系
在单位时间内,系统正在运行中的进程数或者不可中断的进程数量 进程的活跃数量
跟CPU的核心数有关系
当负载为2的时候
核心数为4 50%
核心数为2 100%
核心数为1 200%
当1分钟的值小于5分钟和15分钟的时候 说明你之前的平均负载过高,当前正在降低
当1分钟跟5分钟和15分钟的值很近的时候,平均负载很稳定
当1分钟的值大于5分钟和15分钟的时候,说明现在的负载正在慢慢的变大
当值达到70% 就要开始分析问题
六、day21作业
1.某系统管理员需要每天做一定的重复工作,编制一个解决方案:
(1).从下午4:50删除/abc目录下的全部子目录和全部文件;
[root@BC ~]#crontab -e
50 16 * * * /bin/rm -rf /abc/* &>/dev/null
(2).每逢周一下午5:50将/data目录下的所有目录和文件归档并压缩为文件backup.tar.gz;
[root@BC ~]#crontab -e
50 17 * * 1 /bin/tar czf $(date +\%F)_backup.tar.gz /data &>/dev/null
2.在每个月的第一天压缩/etc目录下的所有内容,存放在/root/backup目录里,且文件名为当前系统时间?
[root@BC ~]#crontab -e
00 00 1 * * /bin/tar czf /root/backup/$(date +\%F)_etc.tar.gz /etc &>/dev/null
3.每周三01:00~04:00每3分钟执行一次/home/data/demo.sh
[root@BC ~]#crontab -e
*/3 1-4 * * 3 /bin/bash /home/data/demo.sh &>/dev/null
4.每周一到周六的凌晨3点20分,运行tar命令对/etc/目录进行存档另存,存储位置为/data/bak,文件名为“system_+当前系统时间”
[root@BC ~]#crontab -e
20 3 * * 1-6 /bin/tar czf /data/bak/system_$(date +\%F).tar.gz /etc/ &>/dev/null
5.每日凌晨2点30分,运行cp命令对/etc/fstab文件拷贝到/tmp下
[root@BC ~]#crontab -e
30 2 * * * /bin/cp /etc/fstab /tmp/fstab_$(date +\%F) &>/dev/null
6.每月每天凌晨3点30分和中午12点20分执行test.sh脚本
[root@BC ~]#crontab -e
30 3 * * * /bin/bash test.sh &>/dev/null
[root@BC ~]#crontab -e
20 12 * * * /bin/bash test.sh &>/dev/null
7.每月每天每隔6小时的每30分钟执行test.sh脚本
[root@BC ~]#crontab -e
*/30 */6 * * * /bin/bash test.sh &>/dev/null
8.每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
[root@BC ~]#crontab -e
*/30 8-18/2 * * * /bin/bash test.sh &>/dev/null
9.每月每天晚上21点30分执行test.sh脚本
[root@BC ~]#crontab -e
30 21 * * * /bin/bash test.sh &>/dev/null
10.每月1号、10号、22号凌晨4点45分执行test.sh脚本
[root@BC ~]#crontab -e
45 4 1,10,22 * * /bin/bash test.sh &>/dev/null
11.8月份周一、周日凌晨1点10分执行test.sh脚本
[root@BC ~]#crontab -e
10 1 * 8 1,7 /bin/bash test.sh &>/dev/null
12.每月每天每小时整点执行test.sh脚本
[root@BC ~]#crontab -e
00 * * * * /bin/bash test.sh &>/dev/null
13.每月的4号或每周一到周三的11点重启vsftpd服务
[root@BC ~]#crontab -e
00 11 4 * 1-3 /usr/bin/systemctl restart vsftpd &>/dev/null
14.解释如下命令的含义
30 3,12 * * * /bin/sh /scripts/oldboy.sh #每天的3点或者12点的30分执行/scripts/oldboy.sh
30 */6 * * * /bin/sh /scripts/oldboy.sh #每天每隔6隔小时的30分执行/scripts/oldboy.sh
30 8-18/2 * * * /bin/sh /scripts/oldboy.sh #每天的8点到18点每隔2隔的30分执行/scripts/oldboy.sh
30 21 * * * /usr/sbin/nginx -s reload #每天晚上21点30分重载nginx服务
45 4 1,10,22 * * /usr/sbin/nginx -s reload #每个月的1号 10号 2号的凌晨4点45分 重载nginx服务
10 1 * * 6,0 /usr/sbin/nginx -s reload #每周六或者周日的凌晨1点10分重载nginx服务
0,30 18-23 * * * /usr/sbin/nginx -s reload #每天的18点到23点的0分和30分执行重载nginx服务
00 11 * 4 1-3 /usr/sbin/nginx -s reload #每年的4月份的每周一到周三的上午11点整重载nginx服务
15.写一条计划任务,在每天晚上的3:05分执行脚本/usr/script/tongji.sh
[root@BC ~]#crontab -e
05 3 * * * /bin/bash /usr/script/tongji.sh &>/dev/null
16.在每周6的凌晨3:15执行/home/shell/collect.pl,并将标准输出和标准错误输出到/dev/null设备,请写出crontab中的语句
[root@BC ~]#crontab -e
15 3 * * 6 /bin/bash /home/shell/collect.pl &>/dev/null
2020年08月05日上午(day24)
一、开机启动流程
1.按下电源
2.BIOS自检
3.MBR引导
4.进入GRUB菜单
5.加载内核kernel
6.systemd init进程
7.读取运行级别
[root@BC ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx 1 root root 37 Jul 6 02:16 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
[root@BC ~]# ll /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 Jul 6 02:14 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Jul 6 02:14 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Jul 6 02:14 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Jul 6 02:14 /usr/lib/systemd/system/runlevel6.target -> reboot.target
8.初始化系统
[root@BC ~]# ll /usr/lib/systemd/system/sysinit.target
-rw-r--r--. 1 root root 518 Oct 31 2018 /usr/lib/systemd/system/sysinit.target
9.并行启动开机自启动的服务
10.运行getty文件,显示登陆界面
[root@BC ~]# ll /usr/lib/systemd/system/getty.target
-rw-r--r--. 1 root root 460 Oct 31 2018 /usr/lib/systemd/system/getty.target
Centos-6 和 Centos-7的区别
init管理进程 systemd管理进程
串行启动服务 并行启动服务
启动效率慢,容易故障 启动效率高,不容易出现故障
二、系统运行级别
[root@BC ~]# ll /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 Jul 6 02:14 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Jul 6 02:14 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Jul 6 02:14 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Jul 6 02:14 /usr/lib/systemd/system/runlevel6.target -> reboot.target
0 poweroff #关机
1 rescue #单用户模式
2 multi-user #多用户模式
3 multi-user #多用户模式
4 multi-user #多用户模式
5 graphical #图形界面模式 桌面模式
6 reboot #重启
#如何查看系统运行级别
Centos-6
[root@BC ~]# runlevel
N 3
[root@BC ~]# init 5
[root@BC ~]# runlevel
3 5
[root@BC ~]# init 3
Centos-7
[root@BC ~]# systemctl get-default
multi-user.target
#修改运行级别
[root@BC ~]# systemctl set-default graphical.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/graphical.target.
[root@BC ~]# systemctl get-default
graphical.target
[root@BC ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@BC ~]# systemctl get-default
multi-user.target
三、system介绍
systemd system daemon
#主配置文件目录
[root@BC ~]# ll /etc/systemd/system/ -d
drwxr-xr-x. 12 root root 4096 Aug 5 09:05 /etc/systemd/system/
#系统服务配置文件
[root@BC ~]# ll /usr/lib/systemd/system/ -d
drwxr-xr-x. 26 root root 12288 Jul 30 19:51 /usr/lib/systemd/system/
#程序,进程运行时产生的一些文件
[root@BC ~]# ll /run/systemd/system/ -d
drwxr-xr-x 5 root root 160 Aug 5 09:30 /run/systemd/system/
#启动
[root@BC ~]# systemctl start nginx
#停止
[root@BC ~]# systemctl stop nginx
#状态
[root@BC ~]# systemctl status nginx
#重启
[root@BC ~]# systemctl restart nginx
#平滑重启
[root@BC ~]# systemctl reload nginx
#禁用某个服务
[root@BC ~]# systemctl mask nginx
#解除禁用
[root@BC ~]# systemctl unmask nginx
#开机自启动
[root@BC ~]# systemctl enable nginx
#取消开机自启动
[root@BC ~]# systemctl disable nginx
status状态
active (running) #运行
Active: inactive (dead) #不在运行
disabled #开机不自启
enabled #开机自启
failed #失败
#显示当前运行级别下开机自启动的服务
[root@BC ~]# systemctl list-unit-files
四、system设置
#使用system进行管理关机重启操作
[root@BC ~]# systemctl reboot
[root@BC ~]# systemctl poweroff
#如何设置主机名
[root@BC ~]# hostname
BC
[root@BC ~]# hostnamectl
Static hostname: BC
Icon name: computer-vm
Chassis: vm
Machine ID: 6b11e94f1fe04eb89579c1c41f6f5307
Boot ID: 783be43c5a44420ead4bd26792a6d22c
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-957.el7.x86_64
Architecture: x86-64
[root@BC ~]# hostnamectl set-hostname web01
[root@BC ~]# logout
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(虚拟机-10.0.0.100) at 09:54:12.
Type `help\' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
Last login: Wed Aug 5 17:51:59 2020 from 10.0.0.1
[root@web01 ~]#
[root@web01 ~]# cat /etc/hostname
web01
Centos-6修改 临时生效
[root@web01 ~]# hostname BC
[root@web01 ~]# logout
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(虚拟机-10.0.0.100) at 09:55:10.
Type `help\' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
Last login: Wed Aug 5 09:54:16 2020 from 10.0.0.1
[root@BC ~]# cat /etc/hostname
web01
#如何修改字符集
[root@BC ~]# echo $LANG
en_US.UTF-8
[root@BC ~]# localectl set-locale LANG=zh_CN.UTF-8
[root@BC ~]# logout
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(虚拟机-10.0.0.100) at 09:57:21.
Type `help\' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press \'Ctrl+Alt+]\'.
Last login: Wed Aug 5 09:55:13 2020 from 10.0.0.1
[root@BC ~]#
[root@BC ~]# cat /etc/locale.conf
LANG=zh_CN.UTF-8
[root@BC ~]# yum install -y sl
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 sl-5.02-1.el7.x86_64 已安装并且是最新版本
无须任何处理
#临时修改变量
[root@BC ~]# export LANG=en_US.UTF-8
[root@BC ~]# echo $LANG
en_US.UTF-8
#系统日志管理
[root@BC ~]# journalctl -xe #查看当前服务的日志
[root@BC ~]# tail /var/log/messages
Aug 5 10:01:32 BC systemd: Stopped The nginx HTTP and reverse proxy server.
Aug 5 10:01:32 BC systemd: Starting The nginx HTTP and reverse proxy server...
Aug 5 10:01:32 BC nginx: nginx: [emerg] unknown directive "isten" in /etc/nginx/nginx.conf:39
Aug 5 10:01:32 BC nginx: nginx: configuration file /etc/nginx/nginx.conf test failed
Aug 5 10:01:32 BC systemd: nginx.service: control process exited, code=exited status=1
Aug 5 10:01:32 BC systemd: Failed to start The nginx HTTP and reverse proxy server.
Aug 5 10:01:32 BC systemd: Unit nginx.service entered failed state.
Aug 5 10:01:32 BC systemd: nginx.service failed.
Aug 5 10:02:01 BC systemd: Started Session 19 of user root.
Aug 5 10:03:01 BC systemd: Started Session 20 of user root.
#查看日志的最后20行内容
[root@BC ~]# journalctl -n 20
#实时查看日志的输出
[root@BC ~]# journalctl -f
#显示日志的级别日志
[root@BC ~]# journalctl -p
alert crit debug emerg err info notice warning
[root@BC ~]# journalctl -p err
-- Logs begin at Wed 2020-08-05 17:51:37 CST, end at Wed 2020-08-05 10:05:01 CST. --
Aug 05 17:51:41 BC kernel: sd 2:0:0:0: [sda] Assuming drive cache: write through
Aug 05 17:51:41 BC kernel: sd 2:0:1:0: [sdb] Assuming drive cache: write through
Aug 05 17:51:41 BC kernel: sd 2:0:2:0: [sdc] Assuming drive cache: write through
Aug 05 17:51:44 BC kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
Aug 05 09:54:13 web01 sshd[7162]: error: Received disconnect from 10.0.0.1 port 50011:0:
Aug 05 09:55:11 BC sshd[7333]: error: Received disconnect from 10.0.0.1 port 50033:0:
Aug 05 09:57:22 BC sshd[7369]: error: Received disconnect from 10.0.0.1 port 50041:0:
Aug 05 09:59:29 BC sshd[7419]: error: Received disconnect from 10.0.0.1 port 50067:0:
Aug 05 10:00:51 BC sshd[7473]: error: Received disconnect from 10.0.0.1 port 50097:0:
Aug 05 10:01:32 BC systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
#只查看某个服务的日志
[root@BC ~]# journalctl -u sshd
-- Logs begin at Wed 2020-08-05 17:51:37 CST, end at Wed 2020-08-05 10:06:01 CST. --
Aug 05 17:51:56 BC systemd[1]: Starting OpenSSH server daemon...
Aug 05 17:51:56 BC sshd[6981]: Server listening on 0.0.0.0 port 22.
Aug 05 17:51:56 BC sshd[6981]: Server listening on :: port 22.
Aug 05 17:51:56 BC systemd[1]: Started OpenSSH server daemon.
Aug 05 17:51:59 BC sshd[7162]: Accepted password for root from 10.0.0.1 port 50011 ssh2
Aug 05 09:54:16 web01 sshd[7333]: Accepted password for root from 10.0.0.1 port 50033 ssh2
Aug 05 09:55:12 BC sshd[7369]: Accepted password for root from 10.0.0.1 port 50041 ssh2
Aug 05 09:57:26 BC sshd[7419]: Accepted password for root from 10.0.0.1 port 50067 ssh2
Aug 05 09:59:31 BC sshd[7473]: Accepted password for root from 10.0.0.1 port 50097 ssh2
Aug 05 10:00:52 BC sshd[7525]: Accepted password for root from 10.0.0.1 port 50111 ssh2
五、单用户模式
1.忘记root密码
开机在grub界面输入 e
在linux16开头的行的最后面输入 init=/bin/bash enforcing=0
按 ctrl键 + x
重新挂载根分区 mount -o rw,remount /
修改密码
、
重启 exec /sbin/init
2.运行级别被设置为重启
[root@web01 ~]# systemctl set-default reboot.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/reboot.target.
[root@web01 ~]# systemctl get-default
reboot.target
开机在grub界面输入 e
在linux16开头的行的最后面输入 rd.break
按 ctrl键 + x
重新挂载根分区 mount -o rw,remount /sysroot
赋予权限 chroot /sysroot
修改运行级别
exit
reboot
六、救援模式
1.系统损坏了,数据很重要 需要把数据拷贝出来
先挂载光盘,然后选择光盘引导为第一位,如下图所示。
进入故障排除模式,然后选择救援模式,如下图所示。
挂载真实系统后,发现数据都还存在,之后就可以挂在磁盘,将数据备份出来。
2.MBR引导坏掉,修复MBR,主要出现在安装双系统的时候,后安装的系统把原来的MBR删除了,需要修复
破坏硬盘的前446字节,模拟MBR引导损坏,会发现重启无法启动系统
dd if=/dev/zero of=/dev/sda bs=1 count=446
重启,查看系统状态
进入救援模式,分配一个shell,进行修复系统
\#修复grub
bash-4.2# grub2-install /dev/sda
\#退出
bash-4.2# exit
\#重启进入系统
bash-4.2# reboot
3.CentOS-7 误删除grub文件,进行修复
模拟故障
\#删除grub2
rm -rf /boot/grub2/
\#重启
reboot
查看系统状态
进入救援模式,分配一个shell,进行修复系统
bash-4.2# grub2-install /dev/sda
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
bash-4.2# ls /boot/grub2
bash-4.2# exit
sh-4.2# reboot
七、网卡命名规则
1.概述
CentOS6之前基于传统的命名方式如:eth1,eth0....
Centos7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名是全自动的、可预知的,缺点是比eth0更难读。比如ens33
2.网卡命名的策略
规则1:如果Firmware或者BIOS提供的设备索引信息可用就用此命名。比如eno1。否则使用规则2
规则2:如果Firmware或Bios的PCI-E扩展插槽可用就用此命名。比如ens1,否则使用规则3
规则3:如果硬件接口的位置信息可用就用此命名。比如enp2s0
规则4:根据MAC地址命名,比如enx7d3e9f。默认不开启。
规则5:上述均不可用时回归传统命名方式
上面的所有命名规则需要依赖于一个安装包:biosdevname
biosdevname和net.ifnames属于两种不同的命名规范
CentOS-7中默认biosdevname的值为0,net.ifnames的值为1。
#命令行修改网卡命名规则
mv /etc/sysconfig/network-scripts/ifcfg-ens33 ifcfg-eth0
#修改网卡配置文件设备名称
sed -i "s#ens33#eth0#g" ifcfg-eth0
#GRUB添加kernel参数
vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="...net.ifnames=0 biosdevname=0 quiet"
#加载到引导分区
grub2-mkconfig -o /boot/grub2/grub.cfg
#重启系统生效
reboot
2020年08月06日上午(day25)
一、更改Yum源添加epel源
默认国外的yum源(软件仓库)比较慢,所以换成国内的。
#1、备份
[root@qls ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
[root@qls ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#3.添加epel源
[root@qls ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
二、关闭SELinux
SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的。
#临时关闭
[root@qls ~]# setenforce 0
#永久关闭
[root@qls ~]# sed \'s#SELINUX=enforcing#SELINUX=disabled#g\' /etc/selinux/config
#检查结果
[root@qls ~]# grep "disabled" /etc/selinux/config
三、关闭防火墙(Firewalld)
关闭防火墙的目的是为了让初学者学习更方便,将来在学了Firewalld技术后可再统一开启。 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了。
#临时关闭
[root@qls ~]# systemctl stop firewalld
#永久关闭
[root@qls ~]# systemctl disable firewalld
四、关闭NetworkManager
在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添加上去。
network:对网卡的配置
NetworkManager:这个服务由几个部分组成;一个是管理系统网络连接;一个是允许用户管理网络连接的客户端程序,使用它可以更好的管理网络
#添加网卡
[root@BC ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
[root@BC ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=172.16.1.100
PREFIX=24
[root@BC ~]# ifconfig eth1 172.16.1.100/24
#临时关闭
[root@qls ~]# systemctl stop NetworkManager
#永久关闭
[root@qls ~]# systemctl disable NetworkManager
五、同步系统时间
#给定时任务加上注释
[root@qls ~]# echo \'#Timing synchronization time\' >>/var/spool/cron/root
#定时任务
[root@qls ~]# echo \'*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null\' >>/var/spool/cron/root
#检查结果
[root@qls ~]# crontab -l
六、 加大文件描述
#配置文件介绍
<domain> <type> <item> <value>
<domain>表示要限制的用户
<type>设定类型
<item>表示可选的资源
<value>表示要限制的值
#加大文件描述符
[root@qls ~]# echo \'* - nofile 65535 \' >>/etc/security/limits.conf
#检查结果
[root@qls ~]# tail -1 /etc/security/limits.conf
七、别名及环境变量优化
#设置
[root@qls ~]# cat>>/etc/profile.d/color.sh<<\'EOF\'
alias ll=\'ls -l --color=auto --time-style=long-iso\'
PS1="\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\\$ \[\e[0m\]"
export HISTTIMEFORMAT=\'%F-%T \'
EOF
#生效
[root@qls ~]# source /etc/profile
八、内核优化
#设置
[root@qls ~]# cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
net.ipv4.ip_forward = 1
EOF
#生效
[root@qls ~]# sysctl -p
九、配置SSH远程管理服务
#禁止DNS进行反向解析
[root@qls ~]# sed -i \'s/#UseDNS yes/UseDNS no/g\' /etc/ssh/sshd_config
#检查结果
[root@qls ~]# grep \'UseDNS no\' /etc/ssh/sshd_config
#禁止GSS认证,减少连接时产生的延迟
[root@qls ~]# sed -i \'s/GSSAPIAuthentication yes/GSSAPIAuthentication no/g\' /etc/ssh/sshd_config
#检查结果
[root@qls ~]# grep \'GSSAPIAuthentication no\' /etc/ssh/sshd_config
#生效
[root@qls ~]# systemctl restart sshd
十、修改主机名和IP脚本
#脚本如下
[root@qls ~]# cat>/root/hostname_ip.sh<<\'EOF\'
#!/usr/bin/sh
source /etc/init.d/functions
if [ $# -ne 2 ];then
echo "/bin/sh $0 New hostname New IP address"
exit 1
fi
hostnamectl set-hostname $1
if [ $? -eq 0 ];then
action "hostname update Successfull." /bin/true
else
action "hostname update Failed." /bin/false
fi
sed -ri "/^IPA/s#(.*\.).*#\1$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
if [ $? -eq 0 ];then
action "IP update Successfull." /bin/true
systemctl restart network
else
action "IP update Failed!" /bin/false
fi
EOF
十一、安装常用软件
[root@qls ~]# yum -y install tree nmap sysstat lrzsz telnet bash-completion bash-completion-extras vim lsof net-tools rsync ntpdate nfs-utils
十二、Linux基础优化及安全小结
1)禁止root用户远程连接,不用root登录管理系统,而以普通用户登录通过sudo授权管理。
2)更改默认的远程连接SSH服务端口,甚至要更改SSH服务只监听内网IP。
3)定时自动更新服务器的时间,使其和互联网时间同步。
4)配置yum更新源,从国内更新源下载安装软件包。
5)关闭SELinux及Firewalld(在工作场景中,如果有外部IP一般要打开Firewalld,高并发高流量的服务器可能无法开启)。
6)调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。
7)定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满。
8)Linux内核参数优化。
9)更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。
10)锁定系统主要文件,处理后把chattr、lsattr改名,转移走,这样就安全多了。
11)清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。
12)清除多余的系统虚拟用户账号。
13)为grub引导菜单加密码。
14)禁止主机被ping。echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
15)打补丁并升级有已知漏洞的软件。