Linux---基础部分
笔记
文章目录
- 笔记
- 1.linux系统优化、linux介绍
- 2.linux发展史
- 3.linux发现版本
- 4.虚拟机介绍
- 5.虚拟机软件
- 6.系统网络优化
- 7.linux系统优化 步骤
- 7.1修改系统下载源
- shell
- 什么是shell:链接Linux的桥梁 是一个应用程序 是一个解释器最常用的bash和sh
- shell的种类
- 。Liunx中的一些特殊路径
- bash解析器中的快捷键
- history
- 修改主机名
- # 方式一:
- #方式二:
- 查看系统IP
- 系统时间
- 格式化时间
- 设置时间
- 同步互联网时间
- 系统硬件时钟
- 系统软件时钟
- 获取硬件时间
- 将硬件时间同步到系统时间
- 查看时区状态
- 系统时间
- #格式化时间
- #设置时间
- #同步互联网时间
- #系统硬件时钟
- #系统软件时钟
- 重启和关机机器
- 目录结构
- 文件管理
- 创建文件
- 文件查询
- 绝对路径:从根路径到目标路径
- 相对路径:从当前位置到目标文件
- 关机
- shell 快捷键
- 时间
- 基础命令
- 移动文件
- 删除
- 获取命令的帮助信息
- find文件查找
- find命令介绍
- find指令
- 根据名称查找一个文件
- 根据文件大小查找
- 按照时间进行查找
- 按照属性查找(-type)
- 所属组查询
- -print :打印结果集
- -ls : 打印结果集详情
- -delete : 删除结果集
- -exec : 对结果集进行下一步处理
- -ok : 对结果集进行下一步处理(交互)
- find和xargs命令配合
- 上传于下载
- 从互联网上下载
- wget
- curl
- curl 与 wget的区别
- 从服务器上上传下载文件到本地
- 字符处理命令
- sort命令
- uniq
- cut
- tr
- WC
- 打包和压缩
- zip
- zip压缩一个文件
- zip压缩文件夹
- zip的静默输出
- zip解压命令(unzip)
- tar
- gzip
- gzip压缩一个目录
- gzip解压(-d)
- bzip2
- bzip2解压(-d)
- tar
- 用户管理
- linux中用户介绍
- 手动创建用户
- 用户与组相关的文件
- 修改用户信息(usermod)
- 密码(passwd)
- 用户组
- 创建组
- 修改组
- 删除组
- 组成员管理
- 文件的输入与输出
- 追加和覆盖
- 文件权限
- 权限的设置
- 权限对⽂件or⽬录的意义
- 探讨权限对目录下文件可读的影响
- 探讨权限对目录下文件可编辑的影响
- 探讨权限对目录下的文件的可执行的影响
- SUDO
- SU
- ⽂件权限管理四:ACL
- acl权限归属
- mask
- default 继承
- 软件包rpm
- yum
- yum仓库
- yum网络仓库同步到本地仓库 并且把yum源共享给另外一台机
- 简便方法:一
- 简便方法:二
- 简便方法:二
- 源码包安装
- 进程
- ps 查看进程
- top(动态查看)
- top快捷键
- top的参数
- 设置进程的nice值(优先级)
- Linux系统信号
- netstat(查看网络状态)
- proc文件系统
- 管道
- 管道之tee
- 分区
- 使用文件系统的流程
- MBR分区
- GPT分区
- 硬盘自动挂载
- 制作SWAP分区
- dd命令
- 模拟文件系统出问题
- 文件系统的备份与恢复
- LVM
- 动态扩容
- 动态缩容
- 快照
- 计划任务
- Crontab表达式
- 系统级别的计划任务
- 用户级别的计划任务
- crontab语法
- 编写脚本
- 思路
- 系统优化
- yum源处理与常用软件包安装
- ssh密钥
- 添加hosts⽂件实现集群主机之间相互⽤主机名解析
- 配置ntp服务,同步系统时间
1.linux系统优化、linux介绍
主要介绍企业中常用的服务器操作系统
什么是Linux?
类似于windows,是一个服务器上使用的操作系统,Linux支持多用户,多进程,多CPU,多任务等能,而且Linux是开源的,支持嵌入式等。
2.linux发展史
1969年,美国贝尔实验室开发,Unix
- 优点:性能好
- 缺点:消耗资源大
1987年,谭宁邦开发微内核unix,主要用来教学
1991年,芬兰 林纳斯-托瓦丝 在大学期间基于unix微内核开发了第一款Linux内核,并且开源,并且很快加入FSF基金会,
3.linux发现版本
- RedHat/CentOS
- Ubuntu
- Debian
4.虚拟机介绍
网络类型
仅主机
只能跟宿主主机进行连接
桥接
共享宿主主机网卡,跟宿主主机处于同一个局域网
NAT
使用自己的虚拟网卡,有自己的一套网络
5.虚拟机软件
一般用来虚拟化一台主机的
- 虚拟机软件分类
- vmware workstation(个人使用,或者开发者使用)
- KVM一般用在云服务平台上
- ESXI部署在物理主机上
安装linux系统、连接x-shell
6.系统网络优化
- 解决网络下载软件慢的问题
- 解决系统软件升级的问题
- 安装一些常用的计算机软件
- 关闭一些不必要软件
- 防火墙
- selinux
7.linux系统优化 步骤
7.1修改系统下载源
https://developer.aliyun.com/mirror/
# 第一步:备份原来源
mkdir /etc/yum.repos.d/backup/
mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/# 第二步:下载新的源
cd /etc/yum.repos.d
[root@localhost yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 2523 100 2523 0 0 235 0 0:00:10 0:00:10 --:--:-- 601
[root@localhost yum.repos.d]# ls -l
total 4
drwxr-xr-x. 2 root root 187 Mar 3 16:14 backup
-rw-r--r--. 1 root root 2523 Mar 3 16:16 CentOS-Base.repo# 第三步:生成新的源的缓存
[root@localhost yum.repos.d]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors* base: mirrors.aliyun.com* extras: mirrors.aliyun.com* updates: mirrors.aliyun.com# 第四步:更新系统
[root@localhost yum.repos.d]# yum update -y# 第五步:安装常用的计算机软件
[root@localhost yum.repos.d]# yum install vim lrzsz net-tools tree -y# 第六步:关闭防火墙和Selinux
[root@localhost ~]# systemctl disable --now firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config # 第七步:拍摄快照
shell
什么是shell:链接Linux的桥梁 是一个应用程序 是一个解释器最常用的bash和sh
。什么是软件?
。 什么是进程?
shell的种类
。bash
是自由软件基金会(GNU)开发的一个shell,它是liunx系统中一个默认的shell。Bash不但与Bourneshell兼容,还继承C shell,K欧润shell等优点
。sh
BourneShell(sh):是由AT&Bell实验室的Steven Bourne为AT&Unix开发的,它是Unix的默认Shell,也是其他Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其他几种 Shell。
。zsh
。ash
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BDjAuctJ-1617772434059)(file://\192.168.13.93\linux12期\基础部分\day03\笔记\assets\image-20210304114721972.png?lastModify=1614927648)]
。Liunx中的一些特殊路径
- : 上一步
~ :# 创建一个用户
[root@localhost ~]# useradd oldboy
# 切换用户
[root@localhost ~]# su - oldboy
bash解析器中的快捷键
```bash
Ctrl + C : 终止当前命令的操作
ctrl + d : 退出,相当于exit
ctrl + z : 杀死当前进程
ctrl + l : 清屏
ctrl + a : 跳转到行首
ctrl + e : 跳转到行尾
ctrl + r : 搜索历史
esc(alt) + . : 上一条命令最后一个参数
!$ 也是获取上一条命令最后一个参数
```
history
查看系统执行的命令历史。# 家目录下.bash_histroy文件是保存执行命令历史的文件。
# 清空文件:>.bash_histroy
[root@localhost ~]# >.bash_history
[root@localhost ~]# cat .bash_history
[root@localhost ~]#
修改主机名
# 方式一:
[root@local-work ~]# hostnamectl set-hostname local-work# 需要重新登录或者执行一个解析器
#方式二:
[root@local-work ~]# echo "string" > /etc/hostname
[root@local-work ~]# cat /etc/hostname
string
#直接修改文件,不会立即生效,需要重启。
查看系统IP
#方式1:
[root@string ~]# ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:20:7e:96 brd ff:ff:ff:ff:ff:ffinet 192.168.15.100/24 brd 192.168.15.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::962c:f186:8d31:5eec/64 scope link noprefixroute valid_lft forever preferred_lft forever
#方式2:
[root@string ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.15.100 netmask 255.255.255.0 broadcast 192.168.15.255inet6 fe80::962c:f186:8d31:5eec prefixlen 64 scopeid 0x20<link>ether 00:0c:29:20:7e:96 txqueuelen 1000 (Ethernet)RX packets 119 bytes 11208 (10.9 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 102 bytes 14496 (14.1 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#查看某一个网卡的信息
[root@string ~]# ifconfig eth0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.15.100 netmask 255.255.255.0 broadcast 192.168.15.255inet6 fe80::962c:f186:8d31:5eec prefixlen 64 scopeid 0x20<link>ether 00:0c:29:20:7e:96 txqueuelen 1000 (Ethernet)RX packets 119 bytes 11208 (10.9 KiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 102 bytes 14496 (14.1 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
系统时间
[root@string ~]# date
Fri Mar 5 09:50:27 CST 2021
[root@string ~]# date +%Y-%m-%d
2021-03-05
格式化时间
[root@string ~]# # 09:58:30
[root@string ~]# date +%H:%M:%S
10:01:44
[root@string ~]# date +%Y-%m-%d_%H:%M:%S
2021-03-05_10:02:05
设置时间
###### [root@string ~]# date -s "2029-03-05 10:02:44"Mon Mar 5 10:02:44 CST 2029
[root@string ~]# date +%Y-%m-%d_%H:%M:%S
2029-03-05_10:03:03
同步互联网时间
[root@string ~]# yum install -y ntpdate
[root@string ~]# ntpdate ntp.aliyun.com
系统硬件时钟
[root@string ~]# hwclock -r
Fri 05 Mar 2021 10:10:40 AM CST -0.271305 seconds
系统软件时钟
[root@string ~]# date
Mon Mar 5 10:03:30 CST 2029
获取硬件时间
[root@string ~]# hwclock -r
Fri 05 Mar 2021 10:13:19 AM CST -0.473926 seconds
将硬件时间同步到系统时间
[root@string ~]# hwclock -r
Fri 05 Mar 2021 10:13:19 AM CST -0.473926 seconds
[root@string ~]# date
Mon Mar 5 10:06:20 CST 2029
[root@string ~]# hwclock -s
[root@string ~]# date
Fri Mar 5 10:14:19 CST 2021
查看时区状态
[root@string ~]# timedatectl status
Local time: Fri 2021-03-05 10:26:39 CST
Universal time: Fri 2021-03-05 02:26:39 UTC
RTC time: Fri 2021-03-05 02:26:33
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
系统时间
[root@string ~]# date
Fri Mar 5 09:50:27 CST 2021
[root@string ~]# date +%Y-%m-%d
2021-03-05
#格式化时间
[root@string ~]# # 09:58:30
[root@string ~]# date +%H:%M:%S
10:01:44
[root@string ~]# date +%Y-%m-%d_%H:%M:%S
2021-03-05_10:02:05
#设置时间
[root@string ~]# date -s "2029-03-05 10:02:44"
Mon Mar 5 10:02:44 CST 2029
[root@string ~]# date +%Y-%m-%d_%H:%M:%S
2029-03-05_10:03:03
#同步互联网时间
[root@string ~]# yum install -y ntpdate
[root@string ~]# ntpdate ntp.aliyun.com
#系统硬件时钟
[root@string ~]# hwclock -r
Fri 05 Mar 2021 10:10:40 AM CST -0.271305 seconds
#系统软件时钟
[root@string ~]# date
Mon Mar 5 10:03:30 CST 2029# 获取硬件时间
[root@string ~]# hwclock -r
Fri 05 Mar 2021 10:13:19 AM CST -0.473926 seconds# 将硬件时间同步到系统时间
[root@string ~]# hwclock -r
Fri 05 Mar 2021 10:13:19 AM CST -0.473926 seconds
[root@string ~]# date
Mon Mar 5 10:06:20 CST 2029
[root@string ~]# hwclock -s
[root@string ~]# date
Fri Mar 5 10:14:19 CST 2021# 查看时区状态
[root@string ~]# timedatectl statusLocal time: Fri 2021-03-05 10:26:39 CSTUniversal time: Fri 2021-03-05 02:26:39 UTCRTC time: Fri 2021-03-05 02:26:33Time zone: Asia/Shanghai (CST, +0800)NTP enabled: n/a
NTP synchronized: noRTC in local TZ: noDST active: n/a# 设置时区
[root@string ~]# timedatectl set-timezone Asia/Shanghai
重启和关机机器
[root@string ~]# reboot
[root@string ~]# init 6
[root@string ~]# shutdown -r 0
[root@string ~]# halt # 重启
reboot# 关机
shutdown -h 0
目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLAay3dB-1617772434067)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305110444128.png?lastModify=1614926955)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dftatG9E-1617772434068)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305110744377.png?lastModify=1614926975)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BtCCIGd8-1617772434070)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305110839136.png?lastModify=1614926989)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xWwcIQ4X-1617772434071)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305110938363.png?lastModify=1614926999)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBT2qiKt-1617772434072)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305111053112.png?lastModify=1614927005)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E1L0IoU3-1617772434072)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305111245291.png?lastModify=1614927023)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-51Uu0cEp-1617772434073)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305111553973.png?lastModify=1614927031)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slDdFaTC-1617772434073)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305114431177.png?lastModify=1614927041)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-go1Jq1VE-1617772434074)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305114609772.png?lastModify=1614927053)]
文件管理
- 创建
- 查询
- 修改
- 删除
- 移动
- 权限
创建文件
目录(mkdir)
格式:mkdir [参数] [目录路径]
[root@string /]# mkdir dir [root@string /]# ls -l total 20 drwxr-xr-x 2 root root 6 Mar 5 12:18 dir
参数:
-p : 当上级目录不存在时,自动创建上级目录。一般称之为:递归创建
[root@string ~]# mkdir -p abc/bcd/cde/def [root@string ~]# tree abc/ abc/ └── bcd└── cde└── def
-v : 打印出整个目录的创建过程
```bash
[root@string ~]# mkdir -pv one/two/treee/four
mkdir: created directory ‘one/two’
mkdir: created directory ‘one/two/treee’
mkdir: created directory ‘one/two/treee/four’
```
-m : 设置创建文件夹的权限
。文件(touch)
。格式:touch [参数] [文件路径]
# 创建单个文件
[root@string test]# touch 1.txt
[root@string test]# ls
1.txt# 创建多个文件
[root@string test]# touch 3.txt 2.txt
[root@string test]# ls
1.txt 2.txt 3.txt# 匹配创建多个文件
[root@string test]# touch {a..z}.txt
[root@string test]# ls
1.txt 3.txt b.txt d.txt f.txt h.txt j.txt l.txt n.txt p.txt r.txt t.txt v.txt x.txt z.txt
2.txt a.txt c.txt e.txt g.txt i.txt k.txt m.txt o.txt q.txt s.txt u.txt w.txt y.txt
[root@string ~]# touch {abc,bcd,fgh}.txt
[root@string ~]# ls
abc.txt bcd.txt fgh.txt
文件查询
查看文件夹内有哪些文件(ls)
。格式:ls [参数] [路径]
[root@string ~]# ls
abc abc.txt {a...c}.txt bcd.txt dir fgh.txt one test 系统优化.md
。参数:
-a : 查看隐藏文件
[root@string ~]# ls -a
. abc {a...c}.txt .bash_logout .bashrc .cshrc fgh.txt one .ssh test 系统优化.md
.. abc.txt .bash_history .bash_profile bcd.txt dir
-l : 显示文件详情
[root@string ~]# ls -l
total 8
drwxr-xr-x 3 root root 17 Mar 5 12:21 abc
-rw-r--r-- 1 root root 0 Mar 5 12:35 abc.txt
-rw-r--r-- 1 root root 0 Mar 5 12:35 {a...c}.txt
-rw-r--r-- 1 root root 0 Mar 5 12:35 bcd.txt# 说明
- : 普通文件
d : 目录文件
l : 链接文件
s : 套接字文件
c : 设备文件
b : 设备文件
p : 管道文件
-i : 打印文件的索引号
[root@string ~]# ls -il
total 8
17307582 drwxr-xr-x 3 root root 17 Mar 5 12:21 abc
33574993 -rw-r--r-- 1 root root 0 Mar 5 12:35 abc.txt
-h : 显示可读文件大小
[root@string ~]# ls -lh
total 8.0K
drwxr-xr-x 2 root root 4.0K Mar 5 12:34 test
-rw-r--r--. 1 root root 2.3K Mar 4 10:46 系统优化.md
-d : 显示目录本身,而不是显示目录内容
[root@string ~]# ls -d /etc/sysconfig/
/etc/sysconfig/
[root@string ~]#
-F : 给文件添加一个标识符
[root@string ~]# ls -F /root/
abc/ abc.txt {a...c}.txt bcd.txt dir/ fgh.txt one/ test/ 系统优化.md
[root@string ~]# ls /root/
abc abc.txt {a...c}.txt bcd.txt dir fgh.txt one test 系统优化.md
[root@string ~]# /bin/ls -F /root/
abc/ abc.txt {a...c}.txt bcd.txt dir/ fgh.txt one/ test/ 系统优化.md
[root@string ~]#
查看一个文件的内容(cat)
。格式:cat [参数] [查看路径]
[root@string ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
查看文件开头(head:从头打印文件,默认打印前10行)
。格式 :head [参数] [路径]
[root@string ~]# head /etc/sysconfig/network-scripts/ifcfg-eth0
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
参数:
。-n : 打印出前n行
[root@string ~]# head -n 2 /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
。-c : 打印出前n个字节内容
[root@string ~]# head -c 100 /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rd71d8Ke-1617772434074)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305161245264.png?lastModify=1614950166)]
查看文件结尾(tail 从尾部开始打印文件,默认打印10行)
- 格式:tail [参数] [路径]
[root@string ~]# tail /etc/sysconfig/network-scripts/ifcfg-eth0
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=40fd9db3-b150-435d-a610-32285fc596d2
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.15.100
PREFIX=24
GATEWAY=192.168.15.2
DNS1=114.114.114.114
IPV6_PRIVACY=no
参数:
。-n : 打印出文件最后n行的内容。
[root@string ~]# tail -n 2 /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=114.114.114.114
IPV6_PRIVACY=no
。-c :从文件底部开始输出n个字节的内容
[root@string ~]# tail -c 50 /etc/sysconfig/network-scripts/ifcfg-eth0
192.168.15.2
DNS1=114.114.114.114
IPV6_PRIVACY=no
。-f : 实时打印出文件新增内容
[root@string ~]# echo "string1" >> abc.txt
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7jOMdlM-1617772434075)(file://\192.168.13.93\linux12期\基础部分\day04\笔记\assets\image-20210305162333208.png?lastModify=1614950306)]
绝对路径:从根路径到目标路径
相对路径:从当前位置到目标文件
关机
- shutdown -h:关机- 格式:shutdown -h 时间- 数字:多少分钟后关机- 单词:now 立即关机,shutdown -h 0
- shutdown -r :重启
- reboot
- shutdown -c : 取消关机
shell 快捷键
- ^c : 结束当前进程
- ^d : 退出登录 (exit、logout)
- ^l : 清屏
- ^a :跳到行首
- ^e : 跳到行尾
- ^r : 搜索历史
- ^z : 杀掉当前进程
- ESC + . : 上一条命令的最后一个参数
时间
时区:UTC
date :
- 显示年份的字符:%Y %y
[root@string ~]# date +%Y
2021
[root@string ~]# date +%y
21
显示月份:%m %B %b
[root@string ~]# date +%m
03
[root@string ~]# date +%b
Mar
[root@string ~]# date +%B
March
显示日:%d
时间戳
[root@string ~]# # 打印出1970年1月1日0时0分0秒到现在的秒数(时间戳)
[root@string ~]# date +%s
1615210936
其他:
打印时分
[root@string ~]# date && date +%R
Mon Mar 8 21:44:27 CST 2021
21:44
# 打印星期
[root@string ~]# date +%u
1
# 打印月日时
[root@string ~]# date +%D
03/08/21
# 区分上下午时间(AM:上午,PM:下午)
[root@string ~]# date +%X
09:09:19 AM
date -s
# 仅仅修改了系统时间
[root@string ~]# date -s "2021-03-08 09:09:09"
Mon Mar 8 09:09:09 CST 2021
ntpdate
[root@string ~]# ntpdate ntp.aliyun.com8 Mar 09:45:04 ntpdate[3200]: step time server 203.107.6.88 offset 1801.973121 sec
[root@string ~]# date
Mon Mar 8 09:45:13 CST 2021
同步硬件时钟
查看系统硬件时钟
[root@string ~]# hwclock -r
Mon 08 Mar 2021 09:46:34 AM CST -0.490310 seconds
# 将硬件时间同步到系统时间
[root@string ~]# date -s "2021-09-09"
Thu Sep 9 00:00:00 CST 2021
[root@string ~]# date
Thu Sep 9 00:00:01 CST 2021
[root@string ~]# hwclock -s
[root@string ~]# date
Mon Mar 8 09:49:46 CST 2021
[root@string ~]#
时区
[root@string ~]# timedatectl statusLocal time: Mon 2021-03-08 09:50:49 CSTUniversal time: Mon 2021-03-08 01:50:49 UTCRTC time: Mon 2021-03-08 01:50:49Time zone: Asia/Shanghai (CST, +0800)NTP enabled: n/a
NTP synchronized: noRTC in local TZ: noDST active: n/a
[root@string ~]# # 时区列表
[root@string ~]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara# 设置时区
[root@string ~]# timedatectl set-timezone UTC
[root@string ~]# timedatectl statusLocal time: Mon 2021-03-08 01:55:26 UTCUniversal time: Mon 2021-03-08 01:55:26 UTCRTC time: Mon 2021-03-08 01:55:26Time zone: UTC (UTC, +0000)NTP enabled: n/a
NTP synchronized: noRTC in local TZ: noDST active: n/a
基础命令
切换目录的路径:cd
- 特殊:
- . : 当前目录
- … : 上级目录
- ~ : 家目录
- - : 上一步的目录
- 特殊:
创建
- 文件
- touch
- touch [参数] 操作对象路径
- touch
- 目录
- mkdir
- 格式:mkdir [参数] 操作对象路径
- 参数:
- -p : 递归创建目录
- -v : 打印出目录的创建过程
- mkdir
- 文件
查找(普通)
- ls
- 格式:ls [参数] [操作对象路径]
- 参数:
- -a : 查看隐藏文件
- -l : 查看文件详细属性信息
- -h : 显示文件可读大小
- -i :显示文件索引号
- -d : 只显示目录本身
- cat : 查看文件内容
- cat [参数] [操作对象路径]
- 参数:
- -n : 显示行号
- head:从文件头部开始查询
- 格式:head [参数] [操作对象路径]
- 参数:
- -n : 显示多少行(从文件头部开始)
- -c : 打印出前n个字节的内容 (数字前加- :去掉后n个字节 )
- tail : 从文件结尾开始查询
- 格式:tail [参数] [路径]
- 参数:
- -n : 从文件结尾开始,打印n行
- -c : 从文件底部开始输出n个字节内容
- -f : 实时打印出文件新增的内容
- tree : 查看文件层级
- pwd : 查看当前目录绝对路径
- ls
修改(编辑)
- vi/vim编辑器:vi/vim是Linux常用文本编辑工具,具有很强大的编辑功能。vim相当于vi升级版。
vi/vim编辑器的编辑流程
① :vi 打开文件
② :创建swp文件,用于临时存储文件修改内容。
③ :选择输入模式进行修改内容
④ :进入末行模式,使用指令进行操作
⑤ :退出
- 输入模式
①:需要指定输入模式的方法
i : 在光标处之前插入内容
a : 在光标处之后插入内容
o : 在光标下一行输入内容
A :在光标所在行的行尾输入内容
- 保存
①:按键盘上的ESC键
②:按冒号键进入末行模式
③:执行命令,对文本进行操作
w : 保存编写的内容
q : 退出当前编辑器
- 命令模式
# 光标跳转到行尾
Shift + a(A) 和 Shift + 4($)# 光标跳转到行首
0键 # 删除一行
dd : 删除一行
# 删除多行
ndd : 删除n行# 复制一行
yy : 复制一行
# 复制多行
nyy : 复制多行# 粘贴
p : 粘贴(粘贴在光标的下一行)
P : 粘贴(粘贴在光标的上一行)# 撤销
u : 每按一次撤销一步# 强制
! :强制退出(修改内容不保存):q!# 跳转到页尾
Shift + g(G) # 跳转到页首
gg : 跳转发页首# 跳转到指定行
n Shift + g(G)# 上下左右跳转
h : 左
j : 下
k : 上
l : 右
- 末行模式
:set nu : 显示行号
:set nonu : 取消显示行号
- 批量修改
①:ctrl + v : 设置选择多行
②:shift + i/a : 进入编辑模式
③:编辑内容
④:按ESC键(自动变)
- 选择多行: :开始行,结束行 操作模式(y,d)
移动文件
格式:mv [目标文件路径] [目的文件路径]
[root@string ~]# mv abc.txt /opt/
[root@string ~]# ls
abc {a...c}.txt dir one 系统优化.md
abc.rpm bcd.txt fgh.txt test
[root@string ~]# ls /opt/
abc.txt# 重命名:移动到当前文件夹中
[root@string ~]# mv abc.rpm abcd.rpm
[root@string ~]# ls
abc {a...c}.txt dir one 系统优化.md
abcd.rpm bcd.txt fgh.txt test
[root@string ~]# mv /root/abcd.rpm /root/abc.rpm
[root@string ~]# ls
abc {a...c}.txt dir one 系统优化.md
abc.rpm bcd.txt fgh.txt test
删除
格式:rm [参数] [操作对象路径]
[root@string ~]# ls
abc {a...c}.txt dir one 系统优化.md
abc.rpm bcd.txt fgh.txt test
[root@string ~]# rm fgh.txt
rm: remove regular empty file ‘fgh.txt’? y
[root@string ~]# ls
abc abc.rpm {a...c}.txt bcd.txt dir one test 系统优化.md
[root@string ~]#
- 免交互
[root@string ~]# touch oldboy
[root@string ~]# ls
abc {a...c}.txt dir one 系统优化.md
abc.rpm bcd.txt oldboy test
[root@string ~]# rm oldboy
rm: remove regular empty file ‘oldboy’?
[root@string ~]# ls
abc {a...c}.txt dir one 系统优化.md
abc.rpm bcd.txt oldboy test
[root@string ~]# rm -f oldboy
[root@string ~]# ls
abc abc.rpm {a...c}.txt bcd.txt dir one test 系统优化.md
获取命令的帮助信息
1.man(帮助的意思) #详细的显示一个命令的使用方法(***)
[root@localhost ~]# man ls2.help #查看一个命令的帮助信息 只能查看系统的内置命令
[root@localhost ~]# help cd 不推荐使用3.使用选项help查看命令的帮助信息,有的命令不支持
[root@localhost ~]# ls --help #显示命令的选项帮助信息4.info #显示命令的一些基本信息,不推荐使用[root@localhost ~]# info ls5.通过互联网的方式获取命令帮助的信息http://linux.51yip.com/search/lshttps://man.linuxde.net/man
find文件查找
find命令介绍
格式:find 搜索路径 参数 参数相关匹配值 指令(-print)
find指令
- -print (输出结果,默认)
- -ls 类似于
ls -lhi
根据名称查找一个文件
我记得,Linux系统中有一个文件叫redhat-release,我怎查找到它的位置。
[root@localhost ~]# find / -name "redhat-release"
/etc/redhat-release
/usr/share/doc/redhat-release
/usr/share/redhat-release
-i : 忽略大小写
[root@localhost ~]# find /root/ -iname "abc*"
/root/abc1
/root/abc2
/root/abc6
/root/Abc1
/root/Abc2
*:匹配所有(可以匹配空字符)
[root@localhost ~]# find /etc/ -name "ifcfg-*"
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1# 查询以eth0开头的文件
[root@localhost ~]# find / -name "eth0*"
/root/eth0xxx# 查询以eth0结尾的文件
[root@localhost ~]# find / -name "*eth0"
/etc/sysconfig/network-scripts/ifcfg-eth0
/root/xxxeth0# 查询文件名称包含eth0的文件
[root@localhost ~]# find / -name "*eth0*"
/etc/sysconfig/network-scripts/ifcfg-eth0
/root/eth0xxx
/root/xxxeth0
/root/xxxeth0xxx
[] : 匹配中括号中的任意一个字符
[root@localhost ~]# touch abc{1..9}
[root@localhost ~]# find /root/ -name "abc[359]"
/root/abc3
/root/abc5
/root/abc9
[root@localhost ~]# find /root/ -name "oldboy[tsdgh]"
/root/oldboyd
/root/oldboyg
/root/oldboyh
/root/oldboys
/root/oldboyt
[^] : 匹配除掉中括号中的内容之外的跟前面匹配的上的所有文件
[root@localhost ~]# find /root/ -name "abc[^359]"
/root/abc1
/root/abc2
/root/abc4
/root/abc6
/root/abc7
/root/abc8
[root@localhost ~]# ls
abc1 abc8 oldboyc oldboyj oldboyq oldboyx
abc2 abc9 oldboyd oldboyk oldboyr oldboyy
abc3 anaconda-ks.cfg oldboye oldboyl ol
! : 对整个搜索结果进行取反
[root@localhost ~]# find /root/ -name "abc[^359]"
/root/abc1
/root/abc2
/root/abc4
/root/abc6
/root/abc7
/root/abc8
[root@localhost ~]# find /root/ -name "abc[359]"
/root/abc3
/root/abc5
/root/abc9
[root@localhost ~]# find /root/ ! -name "abc[359]"
/root/
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.bash_history
?:匹配任意一个字符(该字符不能为空)
[root@localhost ~]# find /root/ -name "abc*"
/root/abc1
/root/abc2
/root/abc3
/root/abc4
/root/abc5
/root/abc6
[root@localhost ~]# find /root/ -name "abc?"
/root/abc1
/root/abc2
/root/abc3
/root/abc4
/root/abc5
/root/abc6
根据文件大小查找
根据文件的体积查询出我们所需要的文件,find会自动四舍五入
-a :并且(默认使用-a)
[root@localhost ~]# find /var/log -size +2k -size -10k
/var/log
/var/log/secure
/var/log/vmware-vgauthsvc.log.0
/var/log/vmware-vmsvc.log
/var/log/cron
/var/log/vmware-network.3.log
[root@localhost ~]# find /var/log -size +2k -a -size -10k
/var/log
/var/log/secure
/var/log/vmware-vgauthsvc.log.0
/var/log/vmware-vmsvc.log
/var/log/cron
/var/log/vmware-network.3.log
-o : 或者
[root@localhost ~]# find /var/log -size -2k -o -size +10k
/var/log/tallylog
/var/log/grubby_prune_debug
/var/log/lastlog
/var/log/wtmp
/var/log/btmp
-size
# b(默认) c w K M G-size n (单位)+n : 大于n个单位
-n : 小于n个单位
n : 等于n个单位# 注:find查找同时打印出隐藏文件
# 注:n必须是整数,不能是小数
[root@localhost log]# find /root/ -size 8.8k
find: Invalid argument `8.8k' to -size
c : 字节
[root@localhost log]# find /var/log -size 674c
/var/log/vmware-network.5.log
/var/log/vmware-network.4.log
/var/log/vmware-network.2.log[root@localhost log]# find /var/log/ -size -300c -ls
33771984 0 -rw------- 1 root root 0 Mar 3 10:45 /var/log/tallylog
33852252 0 -rw------- 1 root utmp 0 Mar 4 10:38 /var/log/btmp
34126340 0 -rw------- 1 root root 0 Mar 3 10:47 /var/log/spooler
34126393 0 drwxr-xr-x 2 root root 23 Feb 3 00:30 /var/log/tuned
17662708 0 drwx------ 2 root root 23 Aug 8 2019 /var/log/audit
51428521 0 drwxr-xr-x 2 root root 176 Mar 3 10:51 /var/log/anaconda
51428529 0 -rw------- 1 root root 0 Mar 3 10:51 /var/log/anaconda/ks-script-NeF0lj.log70 0 drwxr-xr-x 2 root root 6 Mar 3 10:51 /var/log/rhsm
33574980 0 -rw------- 1 root root 0 Mar 9 10:28 /var/log/boot.log
33574994 4 -rw-r----- 1 root root 253 Mar 4 10:41 /var/log/firewalld
按照时间进行查找
按照文件的创建时间、修改时间以及访问时间进行筛选查找。
-ctime: 文件变更时间(修改了位置(mv)、所属组、所属用户)
[root@localhost test]# for i in 1 2 3 4 5 6 7 8 9;do date -s "2021-03-0$i 11:30:30";touch 2021-03-0$i.txt; done && ntpdate ntp.aliyun.com[root@localhost test]#
[root@localhost test]# # 1、查询文件变更时间在3天以前
[root@localhost test]# # 2、查询文件变更时间在3天以内
[root@localhost test]# # 3、查询文件变更时间在3天这个时候的
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# find ./ -ctime +3
./2021-03-01.txt
./2021-03-02.txt
./2021-03-03.txt
./2021-03-04.txt
./2021-03-05.txt
[root@localhost test]# find ./ -ctime -3
./
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
[root@localhost test]# find ./ -ctime 3
./2021-03-06.txt
[root@localhost test]# [root@localhost test]# mkdir backup
[root@localhost test]# mv 2021-03-01.txt backup/
[root@localhost test]# stat backup/2021-03-01.txtFile: ‘backup/2021-03-01.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 17307574 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-01 11:30:30.000000000 +0800
Modify: 2021-03-01 11:30:30.000000000 +0800
Change: 2021-03-09 11:58:06.369682903 +0800Birth: -
[root@localhost test]# find ./ -ctime ^C
[root@localhost test]# mv 2021-03-01.txt backup/^C
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# find ./ -ctime -3
./
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
./backup
./backup/2021-03-01.txt
[root@localhost test]#
atime : 访问时间(cat)
[root@localhost test]# rm -rf ./* && for i in 1 2 3 4 5 6 7 8 9;do date -s "2021-03-0$i 11:30:30";touch 2021-03-0$i.txt; done
Mon Mar 1 11:30:30 CST 2021
Tue Mar 2 11:30:30 CST 2021
Wed Mar 3 11:30:30 CST 2021
Thu Mar 4 11:30:30 CST 2021
Fri Mar 5 11:30:30 CST 2021
Sat Mar 6 11:30:30 CST 2021
Sun Mar 7 11:30:30 CST 2021
Mon Mar 8 11:30:30 CST 2021
Tue Mar 9 11:30:30 CST 2021
[root@localhost test]# ntpdate ntp.aliyun.com9 Mar 12:03:08 ntpdate[22696]: step time server 203.107.6.88 offset 1938.313235 sec
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# find ./ -atime +3
./2021-03-01.txt
./2021-03-02.txt
./2021-03-03.txt
./2021-03-04.txt
./2021-03-05.txt
[root@localhost test]# find ./ -atime -3
./
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
[root@localhost test]# find ./ -atime 3
./2021-03-06.txt
[root@localhost test]# cat 2021-03-03.txt
[root@localhost test]# find ./ -atime +3
./2021-03-01.txt
./2021-03-02.txt
./2021-03-04.txt
./2021-03-05.txt
[root@localhost test]# find ./ -atime -3
./
./2021-03-03.txt
./2021-03-07.txt
./2021-03-08.txt
./2021-03-09.txt
[root@localhost test]# stat 2021-03-03.txt File: ‘2021-03-03.txt’Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 17307576 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-03-09 12:03:59.906083902 +0800
Modify: 2021-03-03 11:30:30.000000000 +0800
Change: 2021-03-03 11:30:30.000000000 +0800Birth: -
[root@localhost test]#
-mtime: 内容修改时间(包含创建时间)
# 正好3天前,这一天创建的文件
[root@localhost test]# find /root/test/ -mtime 3
/root/test/2021-03-06.txt# 正好3天以内,创建的文件
[root@localhost test]# find /root/test/ -mtime -3
/root/test/
/root/test/2021-03-07.txt
/root/test/2021-03-08.txt# 正好3天以前创建的文件
[root@localhost test]# find /root/test/ -mtime +3
/root/test/
/root/test/2021-03-05.txt
/root/test/2021-03-04.txt
[root@localhost test]#
按照属性查找(-type)
find 路径 -type 文件类型 指令f(-) : 普通文件
d : 目录文件
l : 连接文件(快捷方式)
b : 设备文件
c : 字符设备文件
s : 套接字文件
p : 管道文件[root@localhost dev]# find ./ -type b
./dm-1
./dm-0
./sda2
./sda1
./sda
./sr0
[root@localhost dev]# find ./ -type b -ls10766 0 brw-rw---- 1 root disk 253, 1 Mar 9 09:11 ./dm-110706 0 brw-rw---- 1 root disk 253, 0 Mar 9 09:11 ./dm-010562 0 brw-rw---- 1 root disk 8, 2 Mar 9 09:11 ./sda210561 0 brw-rw---- 1 root disk 8, 1 Mar 9 09:11 ./sda110560 0 brw-rw---- 1 root disk 8, 0 Mar 9 09:11 ./sda10557 0 brw-rw---- 1 root cdrom 11, 0 Mar 9 09:11 ./sr0
[root@localhost dev]# find / -type s -ls328 0 srw-rw-rw- 1 root root 0 Mar 9 09:11 /dev/log20775 0 srw-rw-rw- 1 root root 0 Mar 9 09:11 /run/abrt/abrt.socket20753 0 srw-rw-rw- 1 root root 0 Mar 9 09:11 /run/vmware/guestServicePipe19525 0 srw-rw-rw- 1 root root 0 Mar 9 09:11 /run/dbus/system_bus_socket11833 0 srw------- 1 root root 0 Mar 9 09:11 /run/lvm/lvmpolld.socket11777 0 srw------- 1 root root 0 Mar 9 09:11 /run/lvm/lvmetad.socket11884 0 srw------- 1 root root 0 Mar 9 09:11 /run/udev/control11831 0 srw------- 1 root root 0 Mar 9 09:11 /run/systemd/shutdownd# 查询出/root目录下,3天前创建的文件[root@localhost dev]# find /root/ -type f -ctime +3
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.viminfo
/root/系统优化.md
[root@localhost dev]# find /root/ -type f -a -ctime +3
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/anaconda-ks.cfg
/root/.viminfo
/root/系统优化.md# 查询系统三天以内[root@localhost dev]# find / -type s -ctime -3
/dev/log
/run/abrt/abrt.socket
/run/vmware/guestServicePipe
/run/dbus/system_bus_socket
/run/lvm/lvmpolld.socket
/run/lvm/lvmetad.socket
/run/udev/control创建的套接字文件有哪些?
[root@localhost dev]# find / -type s -ctime -3
/dev/log
/run/abrt/abrt.socket
/run/vmware/guestServicePipe
/run/dbus/system_bus_socket
/run/lvm/lvmpolld.socket
/run/lvm/lvmetad.socket
/run/udev/control
所属组查询
-print :打印结果集
-ls : 打印结果集详情
[root@localhost dev]# find / -type s -ctime -3 -ls328 0 srw-rw-rw- 1 root root 0 Mar 9 09:11 /dev/log20775 0 srw-rw-rw- 1 root root 0 Mar 9 09:11 /run/abrt/abrt.socket20753 0 srw-rw-rw- 1 root root 0
-delete : 删除结果集
[root@localhost test]# ls
Abc abc1 Abc1 abc10 abc2 abc23 abc3 abc4 abc5
[root@localhost test]# find ./ -iname "abc?" -delete
[root@localhost test]# ls
Abc abc10 abc23
-exec : 对结果集进行下一步处理
# 格式find 路径 参数 参数表达式 -exec 命令 {} \;[root@localhost test]# find ./ -iname "abc"
./Abc
[root@localhost test]# find ./ -iname "abc" -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Mar 10 09:44 ./Abc
[root@localhost test]#
[root@localhost test]# find ./ -iname "abc"
./Abc
[root@localhost test]# find ./ -iname "abc" -exec rm -rf {} \;
[root@localhost test]# ls
abc10 abc23
[root@localhost test]#
-ok : 对结果集进行下一步处理(交互)
# 格式find 路径 参数 参数表达式 -ok 命令 {} \;[root@localhost test]# find ./ -iname "abc10"
./abc10
[root@localhost test]# find ./ -iname "abc10" -ok rm {} \;
< rm ... ./abc10 > ? n
[root@localhost test]# ls
abc10 abc23
[root@localhost test]# find ./ -iname "abc10" -ok rm {} \;
< rm ... ./abc10 > ? y
[root@localhost test]# ls
abc23
[root@localhost test]#
find和xargs命令配合
# 格式find 路径 参数 参数表达式 | xargs ...(其他命令做处理)[root@localhost ~]# find ./test/ -type f | xargs -I {} ls -l {}
-rw-r--r-- 1 root root 0 Mar 10 09:24 ./test/abc23
[root@localhost ~]# ls -l
total 640
-rw-r--r-- 1 root root 646165 Mar 9 10:31 123.log
-rw-------. 1 root root 1757 Mar 3 10:51 anaconda-ks.cfg
drwxr-xr-x. 3 root root 17 Mar 4 10:51 dir
-rw-r--r-- 1 root root 0 Mar 9 09:28 eth0xxx
drwxr-xr-x 2 root root 19 Mar 10 11:08 test
-rw-r--r-- 1 root root 0 Mar 9 09:28 xxxeth0
-rw-r--r-- 1 root root 0 Mar 9 09:28 xxxeth0xxx
-rw-r--r--. 1 root root 2344 Mar 4 10:46 系统优化.md
[root@localhost ~]# find ./test/ -type f
./test/abc23
[root@localhost ~]# find ./test/ -type f | xargs -I {} ls {}
./test/abc23
[root@localhost ~]# [root@localhost ~]# find ./test/ -type f
./test/abc23
[root@localhost ~]# find ./test/ -type f | xargs -I {} cp {} /opt/
[root@localhost ~]# ls -l /opt/
total 0
-rw-r--r-- 1 root root 0 Mar 10 11:04 Abc
-rw-r--r-- 1 root root 0 Mar 10 11:23 abc23[root@localhost ~]# find ./test/ -type f -exec cp {} /opt/ \;
[root@localhost ~]# ls -l /opt/
total 0
-rw-r--r-- 1 root root 0 Mar 10 11:24 abc23
[root@localhost ~]#
上传于下载
从互联网上下载
https://mirrors.huaweicloud.com/
wget
格式:wget 需要被下载的连接# --no-check-certificate : 不再验证ssl证书(当ssl连接不安全情况下使用)# 如果机器出现-bash: wget: command not found, 执行yum install wget -y# 默认下载到当前目录
[root@localhost test]# wget https://repo.huaweicloud.com/nginx/nginx-0.1.23.tar.gz--2021-03-10 12:02:11-- https://repo.huaweicloud.com/nginx/nginx-0.1.23.tar.gz
Resolving repo.huaweicloud.com (repo.huaweicloud.com)... 119.188.36.137
Connecting to repo.huaweicloud.com (repo.huaweicloud.com)|119.188.36.137|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 285255 (279K) [application/octet-stream]
Saving to: ‘nginx-0.1.23.tar.gz’100%[========================================>] 285,255 537KB/s in 0.5s 2021-03-10 12:02:12 (537 KB/s) - ‘nginx-0.1.23.tar.gz’ saved [285255/285255][root@localhost test]# ls
nginx-0.1.23.tar.gz
[root@localhost test]# # 指定下载目录
[root@localhost ~]# wget -O /opt/nginx-0.1.22.tar.gz https://repo.huaweicloud.com/nginx/nginx-0.1.22.tar.gz
--2021-03-10 12:04:37-- https://repo.huaweicloud.com/nginx/nginx-0.1.22.tar.gz
Resolving repo.huaweicloud.com (repo.huaweicloud.com)... 119.188.36.137
Connecting to repo.huaweicloud.com (repo.huaweicloud.com)|119.188.36.137|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 280145 (274K) [application/octet-stream]
Saving to: ‘/opt/nginx-0.1.22.tar.gz’100%[========================================>] 280,145 1.04MB/s in 0.3s 2021-03-10 12:04:38 (1.04 MB/s) - ‘/opt/nginx-0.1.22.tar.gz’ saved [280145/280145][root@localhost ~]# ls
] 123.log anaconda-ks.cfg dir eth0xxx test xxxeth0 xxxeth0xxx 系统优化.md
[root@localhost ~]# ls /opt/
abc23 nginx-0.1.22.tar.gz
[root@localhost ~]#
curl
格式:curl 需要被访问的连接# 参数
-o : 指定下载目录
[root@localhost ~]# curl -o /opt/nginx-.tar.gz https://repo.huaweicloud.com/nginx/nginx-0.1.25.tar.gz% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed
100 284k 100 284k 0 0 538k 0 --:--:-- --:--:-- --:--:-- 537k
[root@localhost ~]#-k : 不再验证ssl证书
curl 与 wget的区别
wget 是下载文件-O : 指定保存的路径curl 是访问链接-o指定文件路径,从而达到下载文件的功能# 取消ssl证书认证(不再验证SSL证书是否安全)
wget 的参数:--no-check-certificate
curl 的参数:-k
从服务器上上传下载文件到本地
上传下载文件到主机和个人电脑。
需要安装:lrzsz
# 安装命令: yum install lrzsz -y
- 上传
[root@localhost ~]# rz -E# 格式rz调出上传窗口,选择需要被上传的文件。
- 下载
[root@localhost ~]# sz nginx-0.1.22.tar.gz # 格式:sz 服务器中的文件路径
字符处理命令
字符处理命令:sort, uniq, cut
sort命令
对字符进行排序。
sort 需要排序的对象[root@localhost ~]# cat test.txt
s 5
d 6
e 1
h 2
j 9
s 5
h 2
h 2
p 11
o 12
[root@localhost ~]# sort test.txt
d 6
e 1
h 2
h 2
h 2
j 9
o 12
p 11
s 5
s 5# 注:经过对比得出,sort命令默认情况下对需要排序的对象的第一列进行排序。
-k(n) :指定列进行排序,默认情况下是以空格进行分割
[root@localhost ~]# sort test.txt
d 6
e 1
h 2
h 2
h 2
j 9
o 12
p 11
s 5
s 5
[root@localhost ~]# sort -k2 test.txt
e 1
p 11
o 12
h 2
h 2
h 2
s 5
s 5
d 6
j 9# 注:-k参数只对第一个字符进行排序
-n : 按照数值的大小进行排序
[root@localhost ~]# sort -k2 test.txt
e 1
p 11
o 12
h 2
h 2
h 2
s 5
s 5
d 6
j 9
[root@localhost ~]# sort -nk2 test.txt
e 1
h 2
h 2
h 2
s 5
s 5
d 6
j 9
p 11
-r : 按照倒叙进行排序
[root@localhost ~]# sort -nk2 test.txt
e 1
h 2
h 2
h 2
s 5
s 5
d 6
j 9
p 11
o 12
[root@localhost ~]# sort -rnk2 test.txt
o 12
p 11
j 9
d 6
s 5
s 5
h 2
h 2
h 2
e 1
-t : 指定分隔符, 后面的排序按照分割符分割的列进行排序
[root@localhost ~]# sort -t ":" -rnk3 test.txt
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
uniq
对结果集进行去重。
uniq [参数] 需要去重的对象[root@localhost ~]# sort test.txt
d 6
e 1
h 2
h 2
h 2
j 9
o 12
p 11
s 5
s 5
[root@localhost ~]# sort test.txt | uniq
d 6
e 1
h 2
j 9
o 12
p 11
s 5
-c : 显示重复的次数
[root@localhost ~]# sort test.txt
d 6
e 1
h 2
h 2
h 2
j 9
o 12
p 11
s 5
s 5
[root@localhost ~]# sort test.txt | uniq
d 6
e 1
h 2
j 9
o 12
p 11
s 5
[root@localhost ~]# sort test.txt | uniq -c1 d 61 e 13 h 21 j 91 o 121 p 112 s 5
# 注: -c参数主要用来显示重复的次数
-d : 只显示重复的列
[root@localhost ~]# sort test.txt | uniq -c1 d 61 e 13 h 21 j 91 o 121 p 112 s 5
[root@localhost ~]# sort test.txt | uniq -c -d3 h 22 s 5
[root@localhost ~]#
-u: 只显示不重复的列
[root@localhost ~]# sort test.txt | uniq -c1 d 61 e 13 h 21 j 91 o 121 p 112 s 5
[root@localhost ~]# sort test.txt | uniq -c -u1 d 61 e 11 j 91 o 121 p 11
[root@localhost ~]#
cut
剪切文件
cut [参数] [操作对象][root@localhost ~]# sort -t ":" -nk3 /etc/passwd | cut -d ":" -f1,7
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown
halt:/sbin/halt
mail:/sbin/nologin
-d : 指定分割符
root@localhost ~]# sort -t ":" -nk3 /etc/passwd | cut -d ":" -f1,7
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown
-f : 指定显示的列
[root@localhost ~]# sort -t ":" -nk3 /etc/passwd | cut -d ":" -f1,7
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown
tr
删除或替换结果集
tr [参数] [操作对象][root@localhost ~]# cat /etc/passwd | tr "root" "ROOT"
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
-d : 删除结果集中的某个字符
[root@localhost ~]# cat /etc/passwd | tr -d "root"
:x:0:0::/:/bin/bash
WC
统计,计算数字
wc [参数] [操作对象]
[root@localhost ~]# cat /etc/passwd | wc -l
21
[root@localhost ~]#
-l : 统计行数
[root@localhost ~]# cat /etc/passwd | wc -l
21
[root@localhost ~]#
-c : 统计字节数
[root@localhost ~]# cat demo.txt | wc -c
6
[root@localhost ~]#
-w : 统计单词数
[root@localhost ~]# cat demo.txt | wc -w
3
[root@localhost ~]# [root@localhost ~]# cat demo.txt | wc -w
1
[root@localhost ~]# vim demo.txt
[root@localhost ~]# cat demo.txt | wc -w
3
[root@localhost ~]#
打包和压缩
将文件或文件夹合并成一个包,然后通过压缩算法进行数据压缩,减小包的体积,方便网络传输。
windows:
zip
rar
linux:
zip
tar
gz
bz2
tar.gz
tar.bz2
压缩算法:
gzip
bzip2
zip
是一个Windows和Linux中常用打包压缩工具,支持的压缩算法是zip。
zip工具需要安装yum install zip unzip -y
zip压缩一个文件
# 格式zip [参数] 压缩包名称 文件路径[root@abc ~]# zip 123.zip 123.log adding: 123.log (deflated 87%)
[root@abc ~]# ls -l
total 4732
-rw-r--r-- 1 root root 646165 Mar 9 10:31 123.log
-rw-r--r-- 1 root root 85296 Mar 11 11:58 123.zip
zip压缩文件夹
# 需要一个-r参数去递归压缩文件夹下的所有内容
[root@abc ~]# zip -r dir.zip dir/adding: dir/ (stored 0%)adding: dir/one/ (stored 0%)adding: dir/123.log (deflated 87%)
zip的静默输出
# -q:参数就是不输出任何打包信息
[root@abc opt]# zip -r -q etc.zip /etc/
[root@abc opt]# ls -l
total 14200
-rw-r--r-- 1 root root 13674457 Mar 11 12:15 etc.zip
zip解压命令(unzip)
# 格式unzip [参数] 压缩包路径# unzip解压命令只能解压由zip打包的压缩文件
[root@abc ~]# unzip dir.zip
Archive: dir.zipinflating: dir/123.log
[root@abc ~]# # 其他压缩包由unzip解压时随即报错。
[root@abc opt]# unzip nginx-.tar.gz
Archive: nginx-.tar.gzEnd-of-central-directory signature not found. Either this file is nota zipfile, or it constitutes one disk of a multi-part archive. In thelatter case the central directory and zipfile comment will be found onthe last disk(s) of this archive.
unzip: cannot find zipfile directory in one of nginx-.tar.gz ornginx-.tar.gz.zip, and cannot find nginx-.tar.gz.ZIP, period.# 查看压缩包中压缩那些内容,不解压?
# 只查看压缩包内容不解压需要使用 -l 参数
[root@abc opt]# unzip -l dir.zip
Archive: dir.zipLength Date Time Name
--------- ---------- ----- ----0 03-11-2021 12:04 dir/
--------- -------0 1 file# 解压到指定目录(-d)
[root@abc ~]# unzip -d /root/ etc.zip
[root@abc opt]# cd /root/
[root@abc ~]# ls
] anaconda-ks.cfg dir.zip index.html test.pdf.gz xxxeth0xxx 系统优化.md
123.log demo.txt etc nginx-0.1.22.tar.gz test.txt 上传与下载.md
123.zip dir eth0xxx test xxxeth0 文件管理_(高级).pdf# 静默输出(-q)
[root@abc ~]# rm -rf etc
[root@abc ~]# unzip -q -d /root/ /opt/etc.zip
[root@abc ~]# ls -l
total 4828
drwxr-xr-x 91 root root 8192 Mar 11 11:16 etc
tar
tar压缩支持多种压缩算法
tar.gz gzip (用的最多)
tar.bz2 bzip2
gzip
通过gzip压缩算法,将文件压缩一定体积,有利于传输, 不支持打包
[root@abc ~]# ls -l
total 4828
-rw-r--r-- 1 root root 244977 Mar 10 12:12 index.html
[root@abc ~]# gzip index.html
[root@abc ~]# ls -l
total 4612
-rw-r--r-- 1 root root 22652 Mar 10 12:12 index.html.gz
gzip压缩一个目录
[root@abc etc]# gzip -r /etc
[root@abc etc]# ls
abrt GREP_COLORS.gz my.cnf.d security
adjtime.gz groff my.cnf.gz selinux
aliases.db.gz group-.gz NetworkManager services.gz
aliases.gz group.gz networks.gz sestatus.conf.gz
alternatives grub2.cfg nsswitch.conf.bak.gz sgml
anacrontab.gz grub.d nsswitch.conf.gz shadow
gzip解压(-d)
[root@abc ~]# ls -l
-rw-r--r-- 1 0 0 22652 Mar 10 12:12 index.html.gz
[root@abc ~]# gzip -d index.html.gz
[root@abc ~]# ls -l
total 4828
-rw-r--r-- 1 0 0 244977 Mar 10 12:12 index.html
bzip2
使用bzip2 压缩算法来压缩一定体积的文件。
[root@abc ~]# ls -l
total 4828
-rw-r--r-- 1 root root 646165 Mar 9 10:31 123.log
[root@abc ~]# bzip2 123.log
[root@abc ~]# ls -l
total 4240
-rw-r--r-- 1 root root 0 Mar 10 12:04 ]
-rw-r--r-- 1 root root 42210 Mar 9 10:31 123.log.bz2
bzip2解压(-d)
bzip2解压是针对于bzip2压缩的压缩包来进行解压。
[root@abc ~]# ls -l
total 4240
-rw-r--r-- 1 root root 42210 Mar 9 10:31 123.log.bz2
[root@abc ~]# bzip2 -d 123.log.bz2
[root@abc ~]# ls -l
total 4828
-rw-r--r-- 1 root root 646165 Mar 9 10:31 123.log
tar
tar其实是一个打包工具,不具备压缩功能,但是可以使用参数调用压缩工具来进行解压。
-c : 创建压缩包
-f : 指定压缩包名称
[root@abc ~]# tar -c -f test.tar 123.log
[root@abc ~]# ls -l
total 5468
-rw-r--r-- 1 root root 655360 Mar 11 15:49 test.tar
-z : 指定使用gzip压缩工具进行压缩
[root@abc ~]# tar -c -z -f test-one.tar 123.log
[root@abc ~]# ls -l
total 5084
-rw-r--r-- 1 root root 85279 Mar 11 15:56 test-one.tar# 注:使用-z参数,不会自动添加.gz后缀[root@abc ~]# tar -c -z -f anaconda.tar.gz anaconda-ks.cfg
[root@abc ~]# ls -l
total 5084
-rw-r--r-- 1 root root 1010 Mar 11 15:58 anaconda.tar.gz
-j : 指定使用bzip2压缩工具进行压缩
[root@abc ~]# tar -c -j -f 123-bask-one.tar 123.log
[root@abc ~]# ls -l
total 5172
-rw-r--r-- 1 root root 42328 Mar 11 16:00 123-bak.tar.bz2
-rw-r--r-- 1 root root 42328 Mar 11 16:01 123-bask-one.tar
-J : 指定使用xz压缩工具进行压缩
[root@abc test-tar]# tar -c -J -f etc.tar.xz /etc/
[root@abc ~]# ls -l
-rw-r--r-- 1 root root 9493376 Mar 11 17:00 etc.tar.xz
-t : 查看压缩包内容
[root@abc ~]# tar -t -f 123-bak.tar.bz2
123.log
[root@abc ~]#
-v : 显示压缩包压缩过程
[root@abc ~]# tar -x -v -f etc.tar -C /opt/
/etc/centos-release
/etc/DIR_COLORS.lightbgcolor
/etc/libaudit.conf
/etc/mail.rc
-P : 允许使用绝对路径进行打包
[root@abc ~]# tar -c -P -f 123-three.tar /etc/passwd
[root@abc ~]# tar -c -f 123-three.tar /etc/passwd
tar: Removing leading `/' from member names
[root@abc ~]#
-x : 解压
# tar解压是按照原来的路径进行解压
[root@abc test]# tar -x -f etc.tar # tar会自动识别压缩功能
-C : 指定解压路径
[root@abc ~]# tar -x -f etc.tar -C /opt/
tar: Removing leading `/' from member names
[root@abc ~]# cd /opt/
[root@abc opt]# ls
abc23 dir dir.zip etc nginx-0.1.22.tar.gz nginx-.tar.gz xxx
[root@abc opt]#
–exclude : 排除某些文件
[root@abc test-tar]# tar -c -f abc.tar ./* --exclude=abc7 --exclude=abc5 --exclude=abc1
[root@abc test-tar]# tar -t -f abc.tar
./abc2
./abc3
./abc4
./abc6
./abc8
./abc9
[root@abc test-tar]#
–exclude-from : 根据某个文件列表排除多个文件
[root@abc test-tar]# cat list.txt
abc995
abc996
abc997
abc998
abc999
[root@abc test-tar]# tar -c -f abc.tar ./* --exclude-from=list.txt
-h : 打包软连接
[root@abc test-tar]# tar -c -h -f bin-h.tar /bin
tar参数-c : 创建压缩-f ; 指定压缩包名称-z : 使用gzip压缩工具进行压缩-j : 使用bzip2压缩工具进行压缩-J : 使用xz压缩工具进行压缩-t : 显示压缩包内容,不解压-v : 显示压缩过程-P : 允许使用绝对路径进行压缩-x : 解压-C : 指定解压路径-h : 打包软连接--exclude : 排除某些文件--exclude-from : 根据文件列表排除多个文件
用户管理
linux中用户介绍
什么是用户?
用户其实就是相当于权限的化身,
处于安全考虑
所以,我们在进入系统之前都需要登录,根据用户给相应权限
Linux系统中用户角色
uid : Linux系统当中用户ID(相当于身份证号)
gid : ANTA20163307
用户组其实是统一某一类用户权限
需求:
大项目 :
开发者:a b c d
运维 : e f
测试:g
共同的权限:
超级用户
linux当中的老大(皇帝): root
Windows当中的老大:administrator
手动创建用户
vim/etc/passwd
vim/etc/shadow
vim/etc/group
vim/etc/gshadow/etc/skel/ ⽤户⽼家的模板
/home/xxx 创建用户家⽬录
/var/spool/mail/xxx ⽤户邮箱⽂件
用户与组相关的文件
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名称 是否存在密码 uid gid 组名称/注释信息 家目录 默认解析器
linux系统中⽤户⻆⾊划分
在linux系统中的⽤户分为管理员⽤户与其他⽤户
管理员⽤户拥有最⾼权限
其他⽤户根据管理员的分配拥有不同的权限
# 需要强调的是:
对于linux系统来说,⽤户的⻆⾊是通过UID和GID识别的;⽤户系统帐号的名称(如egon)其实给
⼈(管理员)看的,linux系统能够识别的仅仅是UID和GID这样的数字。
# uid与gid
1. UID (User Identify)⽤户ID,唯⼀标识⼀个系统⽤户的帐号,uid在系统中是唯⼀的。uid
相当于⼀个⼈的身份证,⽤户名就相当于这个⼈的名字
2. GID (Group Identify)组ID,如果把⼀个操作系统当成⼀家公司,uid相当于这个⼈的员⼯
号,gid相当于他的部⻔编号。
centos7系统之前约定
uid: 0 由超级⽤户或具备超级⽤户权限的⽤户创建的⽤户(贫⺠⽼百姓,⼤⾂,布
⾐/bin/bash)
uid: 1~499 系统虚拟⽤户:UID范围1-499,存在满⾜⽂件或服务启动的需要。⼀般不能登录,
只是傀儡
uid: 500-65535 普通⽤户
centos7系统约定:
0 超级管理员,最⾼权限,有着极强的破坏能⼒
1~200 系统⽤户,⽤来运⾏系统⾃带的进程,默认已创建
201~999 系统⽤户,⽤来运⾏安装的程序,所以此类⽤户⽆需登录系统
1000+ 普通⽤户,正常可以登录系统的⽤户,权限⽐较⼩,能执⾏的任务有限
# ⽤户和组的关系:
⼀对⼀,多对⼀,⼀对多,多对多
修改用户信息(usermod)
修改用户信息最主要的命令是usermod命令,其参数跟useradd基本一致。
- 修改UID
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2002:2002::/home/xiaoyu:/bin/bash
[root@localhost ~]# usermod -u 2302 xiaoyu
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2302:2002::/home/xiaoyu:/bin/bash
- 修改基本组及附加组
# 基本组 : 一个用户必须拥有的哪个组
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2302:2002::/home/xiaoyu:/bin/bash
[root@localhost ~]# id xiaoyu
uid=2302(xiaoyu) gid=2002(xiaoyu) groups=2002(xiaoyu)
[root@localhost ~]# usermod -g group1 xiaoyu
[root@localhost ~]# id xiaoyu
uid=2302(xiaoyu) gid=2003(group1) groups=2003(group1)
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2302:2003::/home/xiaoyu:/bin/bash
[root@localhost ~]# # 附加组 : 用户加入的其他用户组
[root@localhost ~]# groupadd group1
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root),1000(oldboy),1001(sssssssssssssssssssssss),1002(test)
[root@localhost ~]# usermod -G group1 root
[root@localhost ~]# vim /etc/group
[root@localhost ~]# tail -1 /etc/group
group1:x:2003:root
- 修改家目录
[root@localhost ~]# usermod -d /home/xiaoyu123 xiaoyu# 注:修改家目录仅仅修改了配置,而原来的家目录文件没有迁移
- 修改用户描述信息
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2302:2003::/home/xiaoyu123:/bin/bash
[root@localhost ~]# usermod -c "这是一个甩锅" xiaoyu
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2302:2003:这是一个甩锅:/home/xiaoyu123:/bin/bash
- 修改用户默认解析器
[root@localhost ~]# usermod -s /bin/sh xiaoyu
[root@localhost ~]# tail -1 /etc/passwd
xiaoyu:x:2302:2003:这是一个甩锅:/home/xiaoyu123:/bin/sh
- 锁定与解锁
[root@localhost home]# usermod -L xiaoyu
[root@localhost home]# usermod -U xiaoyu
- 修改登录名称
[root@localhost home]# usermod -l dayu xiaoyu
[root@localhost home]# tail -1 /etc/passwd
dayu:x:2302:2003:这是一个甩锅:/home/xiaoyu123:/bin/bas
- 追加
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),1000(oldboy)
[root@localhost home]# usermod -G root dayu
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),0(root)
[root@localhost home]# usermod -G oldboy dayu
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),1000(oldboy)
[root@localhost home]# usermod -a -G root dayu
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),0(root),1000(oldboy)
密码(passwd)
修改或添加Linux普通用户的密码。直接影响的文件是/etc/shadow
增加或修改密码
当用户密码不存在的时候即为增加密码,当用户密码存在时即为修改密码。
[root@localhost home]# useradd password
[root@localhost home]# tail -1 /etc/passwd
password:x:2303:2303::/home/password:/bin/bash
[root@localhost home]# tail -1 /etc/shadow
password:!!:18701:0:99999:7:::
[root@localhost home]# passwd password
Changing password for user password.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost home]# tail -1 /etc/passwd
password:x:2303:2303::/home/password:/bin/bash
[root@localhost home]# tail -1 /etc/shadow
password:$6$.EmM.4Bl$f.LimfvMsxxFZq6yFklfyk08JKQORdQovlk2a2dtrpkP31lAMLQpezFqLheBYOTm4Sur9aAqZlC/6MN6wHFBM1:18701:0:99999:7:::
[root@localhost home]#
- 免交互修改密码
[root@localhost home]# echo "123" | passwd --stdin dayu
Changing password for user dayu.
passwd: all authentication tokens updated successfully.
用户组
就类似于班级,是某个同权限用户的集合。
创建组
[root@localhost home]# groupadd group2
[root@localhost home]# tail -1 /etc/group
group2:x:2304:
[root@localhost home]#
- 指定gid
[root@localhost home]# groupadd -g 2204 group3
[root@localhost home]# tail -1 /etc/group
group3:x:2204:
- 创建系统组
[root@localhost home]# groupadd -r group4
[root@localhost home]# tail -1 /etc/group
group4:x:996:
修改组
- 修改名称
[root@localhost home]# tail -8 /etc/group
girl:x:2001:
[root@localhost home]# groupmod -n boy girl
[root@localhost home]# tail -8 /etc/group
boy:x:2001:
- 修改gid
[root@localhost home]# groupmod -g 2021 boy
[root@localhost home]# tail -8 /etc/group
boy:x:2021:
删除组
用户组在系统中删除,如果一个组被用户占用则不能删除。
[root@localhost home]# groupdel group4
[root@localhost home]# tail -8 /etc/group
dajige:x:1003:
abc:x:2000:
xiaoyu:x:2002:
group1:x:2003:root
password:x:2303:
group2:x:2304:
group3:x:2204:
boy:x:2021:
[root@localhost home]# # 注:用户被删除,用户基本组也会被删除
[root@localhost home]# useradd test-group-del
[root@localhost home]# tail -1 /etc/passwd
test-group-del:x:2304:2305::/home/test-group-del:/bin/bash
[root@localhost home]# tail -1 /etc/group
test-group-del:x:2305:
[root@localhost home]# userdel -r test-group-del
[root@localhost home]# tail -1 /etc/passwd
password:x:2303:2303::/home/password:/bin/bash
[root@localhost home]# tail -1 /etc/group
boy:x:2021:
[root@localhost home]#
组成员管理
# 添加一个组到用户
[root@localhost home]# useradd gtest
[root@localhost home]# vim /etc/group
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2204(group3)
[root@localhost home]# gpasswd -a gtest group2
Adding user gtest to group group2
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2304(group2),2204(group3)# 添加多个组到用户
[root@localhost home]# gpasswd -M gtest,root,dayu group
gpasswd: group 'group' does not exist in /etc/group
[root@localhost home]# gpasswd -M gtest,root,dayu group3
[root@localhost home]# id root
uid=0(root) gid=0(root) groups=0(root),2000(abc),2003(group1),2204(group3)
[root@localhost home]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),0(root),1000(oldboy),2204(group3)
[root@localhost home]# id gtest
uid=2304(gtest) gid=2305(gtest) groups=2305(gtest),2304(group2),2204(group3)# 为一个组添加组长(组长有权限向组内添加用户,其他用户[除root外]没有权限添加用户到该组)
[root@localhost ~]# gpasswd -A dayu group3
[root@localhost ~]# cat /etc/gshadow
group3:!:dayu:gtest,dayu,oldboy# 组权限
[root@localhost ~]# id dayu
uid=2302(dayu) gid=2003(group1) groups=2003(group1),1000(oldboy),2204(group3)
[root@localhost ~]# chown .group3 /tmp/12.txt
[root@localhost ~]# ls -l /tmp/12.txt
-rw-r--r-- 1 root group3 4 Mar 15 11:35 /tmp/12.txt
[root@localhost ~]# chmod g+w /tmp/12.txt
[root@localhost ~]# ls -l /tmp/12.txt
-rw-rw-r-- 1 root group3 4 Mar 15 11:35 /tmp/12.txt
[root@localhost ~]# su - dayu
Last login: Mon Mar 15 11:37:05 CST 2021 on pts/3
[dayu@localhost ~]$ echo "456" > /tmp/12.txt
[dayu@localhost ~]$ cat /tmp/12.txt
456
[dayu@localhost ~]$
文件的输入与输出
输入内容到文件和输出内容到文件
追加和覆盖
- > :覆盖内容
- >> :追加内容
[root@localhost ~]# echo "String" >> abc.txt
[root@localhost ~]# cat abc.txt
String
[root@localhost ~]# echo "String" >> abc.txt
[root@localhost ~]# cat abc.txt
String
String
文件权限
rw- r-- r-- abc.txt所属用户权限 所属组权限 其他用户权限三个权限位
r(4) : 读
w(2) : 写
x(1) : 可执行
s(4) : 临时提权 chmod 4755 xxx权限的归属u : 代表着自己g : 代表着组o : 代表着其他人
权限的设置
chmod:# 自己和所属组拥有可读可写权限,其他人拥有可读权限。
rw- rw- r--rw-rw-r-- 7 = 4 + 2 + 1chmod 664 文件名称-R递归修改
mkdir -p /a/b/c
touch /a/b/c/d.txt
chmod -R 777 /achown:设置用户和组
ot@yum01 ~]# useradd lili
[root@yum01 ~]# groupadd oldgril
[root@yum01 ~]# ll /root/a.txt
-rw-r--r-- 1 root root 0 Mar 21 20:16 /root/a.txt
[root@yum01 ~]# chown lili.oldgril /root/a.txt
[root@yum01 ~]# ll /root/a.txt
-rw-r--r-- 1 lili oldgril 0 Mar 21 20:16 /root/a.txt
权限对⽂件or⽬录的意义
探讨权限对文件及目录的意义
探讨权限对目录下文件可读的影响
# 1、在目录下,只有可读权限,无法查看文件内容
# 2、在目录下,只有可读可写权限,无法查看文件内容# 1、要想查看文件夹下的文件,文件夹必须至少拥有可执行权限;同时文件必须拥有可读权限.文件夹至少是 1
文件也至少是 4
探讨权限对目录下文件可编辑的影响
# vim mv rm# 要想目录下的文件可以被编辑,目录必须拥有可执行权限同时目录下的文件必须拥有可读可写权限。文件夹至少是 1
文件至少是 6
探讨权限对目录下的文件的可执行的影响
# 要想目录下的文件可以被执行,目录及文件都必须拥有可执行权限且文件同时还要有可读权限。文件夹和文件至少是 1
SUDO
用于普通用提升权限的。
相关的文件:
/etc/sudoers
检查
/etc/sudoers
是否修改正确:visudo -csudoers文件格式
tom ALL= (ALL) ALL
用户名称 所有机器可登陆 所有IP或主机名 所有的指令
- 指令编写格式
# 必须写全路径:which查看命令全路径## 只支持vim命令提权
xianchen ALL=(ALL) /usr/bin/vim## 支持所有的命令提权
tom ALL=(ALL) ALL## 不支持某个命令提权
tom ALL=(ALL) ALL, !/usr/bin/vim## 不支持某个命令的部分功能
xiaochen ALL=(ALL) ALL, !/usr/bin/vim /root/123.txt
SU
- su - xxx 和 su xxx之间区别
1、su - xxx :相当于切换一个窗口,su xxx 仅仅切换了用户2、su - xxx : 切换用户执行的系统文件要多于 su xxx3、su - xxx 是登录su xxx 切换用户
⽂件权限管理四:ACL
⽤命令setfacl设置的ACL(Access Control List) 权限是UGO权限的扩展,ACL可以针对单⼀⽤户、单⼀⽂件或⽬录来进⾏r,w,x的权限控制,对于需要特殊权限的使⽤状况有⼀定帮助。
ps:UGO中的O即其他⼈,涵盖了⾮常⼤的范围,我们使⽤setfacl可以将⽤户对⽂件的权限进⾏进⼀步细化
acl权限归属
- u : 指定用户
- g : 指定组
- o : 修改其他用户权限
- m : 指定mask权限
注:默认情况下,ACL权限跟普通权限保持一致。
⽂件⼀旦设置了acl权限后,查看信息会出现⼀个加号,以后包括UGO在内的权限都可以⽤setfacl来设置
修改属主的权限setfacl -m u::权限 a.txt修改属组的权限setfacl -m g::权限 a.txt修改其他⼈的权限setfacl -m o::权限 a.txt修改具体某⼀个⽤户的权限setfacl -m u:⽤户名:权限 a.txt修改具体某⼀个组的权限setfacl -m g:组名:权限 a.txt # 组必须存在# 也可以给⽬录设置,都⼀样
查看与删除
# 查看
getfacl /opt/a.txt
# 删除
setfacl -x g:group1 /opt/a.txt # 删除组hr的权限
setfacl -b /opt/a.txt #删除所有acl权限
应⽤:当前⽤户如果检索不到对应的acl权限或者检索到后发现权限为空,都会对应到other权限上
# 应⽤场景1: 其他⼈对⽂件没有任何权限,然后单独设置其他⼈⾥的egon01对⽂件有r权限、
egon02对⽂件有w权限setfacl -b b.txt # 可以先清理掉所有的acl权限,保证实验环境⼲净setfacl -m o::- b.txtsetfacl -m u:egon01:r b.txtsetfacl -m u:egon02:w b.txt# egon01 对 b.txt的权限为r# egon02 对 b.txt的权限为w# 剩余的其他⼈中:# 例如egon03 对 b.txt的权限为-# 应⽤场景2:其他⼈对⽂件有rw权限,然后单独设置其他⼈⾥的egon01对⽂件有r权限、egon02对
⽂件有w权限setfacl -b b.txt # 可以先清理掉所有的acl权限,保证实验环境⼲净setfacl -m o::rw b.txtsetfacl -m u:egon01:r b.txtsetfacl -m u:egon02:w b.txt# egon01 对 b.txt的权限为r# egon02 对 b.txt的权限为w# 剩余的其他⼈中:# 例如egon03 对 b.txt的权限为rw
mask
设置mask命令如 : setfacl -m m:rw /opt/a.txt
mask值就像⼀个筛⼦,⽂件属主和other之外的所有权限都需要被它筛⼀遍,如果mask值为rw-则代表该筛⼦只放⾏rw权限。本质原理是权限A需要与mask值B进⾏按位与运算,得到的结果才是effective有效权限
default 继承
用法:setfacl -m d:u:egon:rwx /test
⽂件属性(权限)
[root@localhost ~]# touch /opt/{1..3}.txt
[root@localhost ~]# chmod 000 /opt/*
[root@localhost ~]# lsattr /opt/
---------------- /opt/1.txt
---------------- /opt/2.txt
---------------- /opt/3.txt
[root@localhost ~]# [root@localhost ~]# chattr +a /opt/1.txt # 允许追加内容
[root@localhost ~]# chattr +i /opt/2.txt # 禁⽌任何修改,有些病毒程序会对⽂件加
上该权限
[root@localhost ~]# chattr +A /opt/3.txt # 不更改⽂件访问时间
[root@localhost ~]# [root@localhost ~]# lsattr /opt/
-----a---------- /opt/1.txt
----i----------- /opt/2.txt
-------A-------- /opt/3.txt
# 验证
[root@localhost ~]# echo 111 >> /opt/1.txt
[root@localhost ~]# cat /opt/1.txt
111
[root@localhost ~]# rm -rf /opt/1.txt
rm: ⽆法删除"/opt/1.txt": 不允许的操作# 去掉
[root@localhost ~]# chattr -a /opt/1.txt
[root@localhost ~]# chattr -i /opt/2.txt
[root@localhost ~]# chattr -A /opt/3.txt
软件包rpm
- rpm包来源
1、来源网络下载
2、来源本地:自己的镜像自带的rpm包
- rpm命令
# 安装rpm -ivh xxx.rpm# http://nginx.org/packages/centos/7/x86_64/RPMS/-v : 显示安装过程
-i :显示安装包的详细信息
-h : 安装包哈希标记# 下载Nginx rpm安装包的全名
[root@localhost ~]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
--2021-03-17 12:16:47-- http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
Resolving nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:edb:5702::6, ...
Connecting to nginx.org (nginx.org)|52.58.199.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 790284 (772K) [application/x-redhat-package-manager]
Saving to: ‘nginx-1.18.0-1.el7.ngx.x86_64.rpm’100%[====================================================>] 790,284 339KB/s in 2.3s 2021-03-17 12:16:51 (339 KB/s) - ‘nginx-1.18.0-1.el7.ngx.x86_64.rpm’ saved [790284/790284]# 安装rpm安装包
[root@localhost ~]# rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm
warning: nginx-1.18.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing... ################################# [100%]
Updating / installing...1:nginx-1:1.18.0-1.el7.ngx ################################# [100%]
----------------------------------------------------------------------Thanks for using nginx!Please find the official documentation for nginx here:
* http://nginx.org/en/docs/Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* http://nginx.org/en/support.htmlCommercial subscriptions for nginx are available on:
* http://nginx.com/products/----------------------------------------------------------------------# 验证nginx是否安装成功
[root@localhost ~]# nginx -v
nginx version: nginx/1.18.0# 卸载
[root@localhost ~]# rpm -e nginx (软件包名称)
[root@localhost ~]# nginx -v
-bash: /usr/sbin/nginx: No such file or directory
[root@localhost ~]# # 查看系统当中安装了哪些rpm软件包
rpm -qa# 查看系统当中是否安装了某个rpm软件包
[root@localhost ~]# rpm -q nginx(软件包名)
nginx-1.18.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -q safsdgsfdgfd
package safsdgsfdgfd is not installed# 显示已经安装过的rpm包详细信息。
[root@localhost ~]# rpm -qi nginx
Name : nginx
Epoch : 1
Version : 1.18.0
Release : 1.el7.ngx
Architecture: x86_64
Install Date: Wed 17 Mar 2021 04:18:55 PM CST
Group : System Environment/Daemons
Size : 2830028
License : 2-clause BSD-like license
Signature : RSA/SHA1, Tue 21 Apr 2020 11:19:18 PM CST, Key ID abf5bd827bd9bf62
Source RPM : nginx-1.18.0-1.el7.ngx.src.rpm
Build Date : Tue 21 Apr 2020 11:07:33 PM CST
Build Host : ip-10-1-17-101.eu-central-1.compute.internal
Relocations : (not relocatable)
Vendor : Nginx, Inc.
URL : http://nginx.org/
Summary : High performance web server
Description :
nginx [engine x] is an HTTP and reverse proxy server, as well as
a mail proxy server.# 查看安装包的内容
[root@localhost nginx]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.18.0
/usr/share/doc/nginx-1.18.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx# 查看配置信息
[root@localhost nginx]# rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug# 查看文件帮助信息
[root@localhost nginx]# rpm -qd zlib
/usr/share/doc/zlib-1.2.7/ChangeLog
/usr/share/doc/zlib-1.2.7/FAQ
/usr/share/doc/zlib-1.2.7/README#
[root@localhost ~]# rpm -qf /usr/sbin/nginx
nginx-1.18.0-1.el7.ngx.x86_64# 用 -p 可以查看未安装软件包的详细信息
[root@localhost ~]# rpm -qip nginx-1.18.0-1.el7.ngx.x86_64.rpm
warning: nginx-1.18.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Name : nginx
Epoch : 1
Version : 1.18.0
Release : 1.el7.ngx
Architecture: x86_64
Install Date: (not installed)
Group : System Environment/Daemons
Size : 2830028
License : 2-clause BSD-like license
Signature : RSA/SHA1, Tue 21 Apr 2020 11:19:18 PM CST, Key ID abf5bd827bd9bf62
Source RPM : nginx-1.18.0-1.el7.ngx.src.rpm
Build Date : Tue 21 Apr 2020 11:07:33 PM CST
Build Host : ip-10-1-17-101.eu-central-1.compute.internal
Relocations : (not relocatable)
Vendor : Nginx, Inc.
URL : http://nginx.org/
Summary : High performance web server
Description :
nginx [engine x] is an HTTP and reverse proxy server, as well as
a mail proxy server.# 升级软件包
[root@localhost ~]# rpm -Uvh nginx-1.18.0-1.el7.ngx.x86_64.rpm
warning: nginx-1.18.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing... ################################# [100%]
Updating / installing...1:nginx-1:1.18.0-1.el7.ngx ################################# [ 50%]
Cleaning up / removing...2:nginx-1:1.14.0-1.el7_4.ngx ################################# [100%]
[root@localhost ~]# nginx -v
nginx version: nginx/1.18.0# 强制删除软件包--nodeps
[root@localhost ~]# rpm -e zlib --nodeps
yum
yum是CentOS的软件包管理工具,自动为我们解决软件依赖问题。yum包管理工具必须使用yum源指定软件下载地址去下载需要安装的软件包。配置的路径是:/etc/yum.repos.d
- yum源的执行原理
1、需要在/etc/yum.repos.d/目录下配置yum源地址
2、清空缓存建立新的缓存
3、安装软件(自动解决依赖关系)
- yum常用的基础命令
# 安装软件包的命令
yum install 软件包名称-y : 免交互安装# 卸载软件(直接将软件的依赖包一起删除)
yum remove 软件包名称
[root@www yum.repos.d]# yum remove httpd-y : 免交互移除# 查看当前系统需要更新软件
yum check-update# 更新所有的需要更新的软件
yum update -y : 免交互# 更新某一个软件
yum update (软件包名称)# 重装软件
yum reinstall (软件包名称)# 搜索软件包
[root@www httpd]# yum search (软件包名称)#建立依赖关系 yum crearepo 仓库名称(不知道可以用yum repolist 查看)# 查看yum执行历史
yum history
[root@www httpd]# yum history info (历史ID号)
[root@www httpd]# yum history undo (历史ID号)
# 查看当前系统当中可更新的软件包
[root@www yum.repos.d]# yum check-update
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfilepostfix.x86_64 2:2.10.1-9.0.1.el7.centos.plus centosplus
python-perf.x86_64 3.10.0-1160.15.2.el7.centos.plus centosplus
[root@www yum.repos.d]# # 查看系统中有哪些仓库地址
yum repolist # 正在启用的yum仓库
[root@www yum.repos.d]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base/7/x86_64 CentOS-7 - Base - repo.huaweicloud.com 10,072
extras/7/x86_64 CentOS-7 - Extras - repo.huaweicloud.com 453
updates/7/x86_64 CentOS-7 - Updates - repo.huaweicloud.com 1,729yum repolist all # 查看系统中所有的yum仓库
[root@www yum.repos.d]# yum repolist all
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base/7/x86_64 CentOS-7 - Base - repo.huaweicloud.com enabled: 10,072
centosplus/7/x86_64 CentOS-7 - Plus - repo.huaweicloud.com disabled
extras/7/x86_64 CentOS-7 - Extras - repo.huaweicloud.com enabled: 453
updates/7/x86_64 CentOS-7 - Updates - repo.huaweicloud.com enabled: 1,72# 启用repo仓库
yum install yum-utils -y启用一个yum仓库:yum-config-manager --enable (仓库名称)
关闭一个yum仓库:yum-config-manager --disable (仓库名称)# 查看一个仓库中的软件包列表
[root@www yum.repos.d]# yum list# 查看软件包组
[root@www yum.repos.d]# yum grouplist# 安装软件包组
[root@www yum.repos.d]# yum groupinstall "Development Tools"
yum仓库
1、克隆两台主机
yum仓库主机外网地址:192.168.15.30内网地址:172.16.1.30yum测试主机外网地址:192.168.15.31内网地址:172.16.1.31修改的命令:vim /etc/sysconfig/network-scripts/ifcfg-eth0vim /etc/sysconfig/network-scripts/ifcfg-eth1重启网卡:systemctl restart network修改主机名:yum仓库主机:hostnamectl set-hostname warehouseyum测试主机:hostnamectl set-hostname yum-test执行bash
2、配置yum仓库
1、需要有一个软件包目录,存放软件包的
[root@warehouse ~]# mkdir /backup1.1、缓存yum安装下载的软件包[root@warehouse 7]# vim /etc/yum.conf[main]cachedir=/var/cache/yum/$basearch/$releaseverkeepcache=1[root@warehouse ~]# yum install mariadb -y1.2、将缓存的软件包复制到yum仓库目录[root@warehouse ~]# cd /var/cache/yum/x86_64/7/base/packages/[root@warehouse packages]# cp -rp ./* /backup/[root@warehouse packages]# cd /backup/[root@warehouse backup]# lltotal 8964-rw-r--r-- 1 root root 9175948 Oct 15 02:55 mariadb-5.5.68-1.el7.x86_64.rpm2、建立软件包依赖关系[root@warehouse backup]# yum install createrepo -y[root@warehouse backup]# createrepo /backup/Spawning worker 0 with 1 pkgsSpawning worker 1 with 0 pkgsWorkers FinishedSaving Primary metadataSaving file lists metadataSaving other metadataGenerating sqlite DBsSqlite DBs complete[root@warehouse backup]# lltotal 8968-rw-r--r-- 1 root root 9175948 Oct 15 02:55 mariadb-5.5.68-1.el7.x86_64.rpmdrwxr-xr-x 2 root root 4096 Mar 18 08:54 repodata[root@warehouse backup]# ll repodata/total 28-rw-r--r-- 1 root root 1970 Mar 18 08:54 5d54624b2aa7a1fe974ff5553a9a78289683189c6a7b60c8c1421ecf011d270f-other.sqlite.bz2-rw-r--r-- 1 root root 3449 Mar 18 08:54 5e68ee34f7e8f1a11a039f55c990bcc044f16bceb6af7f4486b55d518ad91346-primary.sqlite.bz2-rw-r--r-- 1 root root 539 Mar 18 08:54 6e94b0fa1d98955542fb8238348ea171be7a130ba97573eb3ac756e1aadcec50-filelists.xml.gz-rw-r--r-- 1 root root 1291 Mar 18 08:54 a9afb0b2457f41f5c2d64744a07d5d12599e6c2588c870ae73568cf345a0abca-other.xml.gz-rw-r--r-- 1 root root 1333 Mar 18 08:54 cf41627875b17ef4bea5f0ea566ac63a5c83adc606d3ca730a74944ceb969028-primary.xml.gz-rw-r--r-- 1 root root 1158 Mar 18 08:54 f34cbfd9e5608e8402041e98100f853e913f3df04d6946874c73ba31a78969ba-filelists.sqlite.bz2-rw-r--r-- 1 root root 2969 Mar 18 08:54 repomd.xml[root@warehouse backup]#
3、测试连接(本地版本)
1、备份系统所有的yum源
[root@warehouse yum.repos.d]# cd /etc/yum.repos.d/
[root@warehouse yum.repos.d]# mkdir backup1
[root@warehouse yum.repos.d]# mv *.repo backup1
[root@warehouse yum.repos.d]# vim local.repo
[local]
name="This is xxx"
baseurl=file:///backup
gpgcheck=0
enabled=1# 清理yum缓存
[root@warehouse ~]# yum clean all
[root@warehouse ~]# rm -rf /var/cache/yum/x86_64/7/*# 生成新的yum缓存
[root@warehouse ~]# yum makecache# 测试连接
[root@warehouse yum.repos.d]# rpm -e mariadb
[root@warehouse yum.repos.d]# rpm -ql mariadb
package mariadb is not installed
[root@warehouse yum.repos.d]# yum install mariadb
4、测试连接(远程版本)
######################### yum仓库机器上执行 ###################################
1、备份系统所有的yum源
[root@warehouse yum.repos.d]# cd /etc/yum.repos.d/
[root@warehouse yum.repos.d]# mkdir local
[root@warehouse yum.repos.d]# mv *.repo local2、安装远程访问软件
[root@warehouse yum.repos.d]# cd /etc/yum.repos.d/
[root@warehouse yum.repos.d]# mv backup1/* .
[root@warehouse yum.repos.d]# yum install vsftpd -y
[root@warehouse yum.repos.d]# systemctl enable --now vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.3、配置系统yum仓库
[root@warehouse yum.repos.d]# cd /var/ftp
[root@warehouse ftp]# mkdir yum_warehouse4、将软件包复制到yum仓库目录
[root@warehouse ftp]# cp -rp /backup/* /var/ftp/yum_warehouse/
[root@warehouse ftp]# ll yum_warehouse/
total 8968
-rw-r--r-- 1 root root 9175948 Oct 15 02:55 mariadb-5.5.68-1.el7.x86_64.rpm
drwxr-xr-x 2 root root 4096 Mar 18 08:54 repodata5、建立yum软件包依赖关系
[root@warehouse ftp]# createrepo /var/ftp/yum_warehouse/######################### yum测试机器上执行 ###################################
1、本机测试网络连接1、备份系统所有的yum源[root@warehouse ftp]# cd /etc/yum.repos.d/[root@warehouse yum.repos.d]# mv *.repo backup1[root@warehouse yum.repos.d]# vim local.repo[root@warehouse yum.repos.d]# cat local.repo [local-ftp]name="This is ftp server"baseurl=ftp://172.16.1.30/yum_warehousegpgcheck=0enabled=1# 清理yum缓存[root@warehouse ~]# yum clean all[root@warehouse ~]# rm -rf /var/cache/yum/x86_64/7/*# 生成新的yum缓存[root@warehouse ~]# yum makecache# 测试连接[root@warehouse yum.repos.d]# rpm -e mariadb[root@warehouse yum.repos.d]# rpm -ql mariadbpackage mariadb is not installed[root@warehouse yum.repos.d]# yum install mariadb2、yum测试机器执行1、备份yum仓库内容[root@yum-test ~]# cd /etc/yum.repos.d/[root@yum-test yum.repos.d]# mkdir backup1[root@yum-test yum.repos.d]# mv *.repo backup1[root@yum-test yum.repos.d]# lltotal 0drwxr-xr-x. 2 root root 187 Mar 4 09:55 backupdrwxr-xr-x 2 root root 220 Mar 18 09:20 backup1[root@yum-test yum.repos.d]# 2、编写本地yum源配置文件[root@yum-test yum.repos.d]# vim local.repo[root@yum-test yum.repos.d]# cat local.repo [loacl-ftp-30]name="This is 30 ftp server"baseurl=ftp://172.16.1.30/yum_warehousegpgcheck=0enabled=13、清理yum缓存[root@yum-test yum.repos.d]# yum clean all[root@yum-test yum.repos.d]# rm -rf /var/cache/yum/x86_64/7/*4、生成yum缓存[root@yum-test yum.repos.d]# yum makecache5、测试安装[root@yum-test yum.repos.d]# yum install mariadb
4、同步远程yum仓库内容到本机
1、安装华为云镜像仓库
[root@warehouse yum.repos.d]# rm -rf /etc/yum.repos.d/*
[root@warehouse yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo2、生成yum缓存
[root@warehouse yum.repos.d]# yum clean all
[root@warehouse yum.repos.d]# rm -rf /var/cache/yum/x86_64/7/*
[root@warehouse yum.repos.d]# yum makecache3、同步华为云镜像站软件包到本地yum仓库
[root@warehouse ftp]# yum install yum-utils -y
[root@warehouse ftp]# reposync -r (仓库名称:yum repolist)4、建立依赖关系
[root@warehouse ftp]# createrepo base5、测试[loacl-ftp-30]name="This is 30 ftp server"baseurl=ftp://172.16.1.30/basegpgcheck=0enabled=1
yum网络仓库同步到本地仓库 并且把yum源共享给另外一台机
yum是一个软件包管理工具,配置yum源路径/etc/yum.repos.d
简便方法:一
一、两台机(建立如上)保证机器可以联网
二、在本地仓库机器上按照如下步骤操作vim /etc/yum.conf
将下图的0改为1(默认为0,意为安装成功后立即删除安装包)[root@warehouse 7]# vim /etc/yum.conf[main]cachedir=/var/cache/yum/$basearch/$releaseverkeepcache=11、在命令行中输入:
yum install createrepo vsftpd wget -y #这三个软件下面要用到,没有请自行安装
2、安装成功后: 输入:systemctl enable --now vsftpd #立即启用ftp
3、rm -rf /etc/yum.repos.d/* #删除本地源
4、wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo #将华为源同步到本地(也可采用其他源,阿里云、163自行更改)
5、cd /var/ftp #此处一定要切换目录
6、yum install yum-utils -y
7、reposync -r (仓库名称,不知道的可以用yum repolist查看) #将网络仓库保存到本地
8、同步好以后输入:createrepo base #建立依赖关系
9、输入vim /etc/yum.repos.d/local.repo将以下内容粘贴即可:[loacl-ftp-30] #仓库名,可自定义name="This is 30 ftp server" #描述信息baseurl=ftp://172.16.1.30(自己的内网地址或外网地址)/base #yum源地址gpgcheck=0 #0不检查秘钥,1为检查秘钥enabled=1 #1为启用,0为不启用2.在远程测试机上输入
vim /etc/yum.conf
将下图的0改为1(默认为0,意为安装成功后立即删除安装包)[root@warehouse 7]# vim /etc/yum.conf[main]cachedir=/var/cache/yum/$basearch/$releaseverkeepcache=1rm -rf /etc/yum.repos.d/*
输入vim /etc/yum.repos.d/local.repo将以下内容粘贴即可:[loacl-ftp-30] #仓库名,可自定义name="This is 30 ftp server" #描述信息baseurl=ftp://172.16.1.30(与本地仓库机的配置文件地址相同即可)/base #yum源地址gpgcheck=0 #0不检查秘钥,1为检查秘钥enabled=1 #1为启用,0为不启用#测试环境
yum clean all #清除缓存
yum makecache #生成新缓存
yum install zsh #安装zsh软件
yum repolist #查看本地下载源仓库,此时应该只有一个ftp源#安装vsftpd、createrepo、yum-utils#b、在vsftpd管理目录创建仓库#c、存放软件到仓库的目录#d、创建软件包依赖关系#e、编写yum源文件(必须放在/etc/yum.repos.d并且要以.repo结尾)#f、清除缓存并测试
简便方法:二
1.建立本地源挂载镜像安装命令 yum install -y createrepo vsftpd wget 在/etc/yum.repo.d/ 把以 .repo 结尾的所有源移动到新文件夹里在/etc/yum.conf/里 修改成1查看自己的仓库 yum repolist在/etc/yum.repos.d/ 建立自己的本地源(只要以 .repo结尾就可以) vim mm.repobaseurl=file:///mnt (镜像)查看仓库 yum repolist清空缓存 clean 生成新缓存2.ftp源(网络原)挂载镜像mount /mnt/sr0 /opt在/etc/yum.repos.d/里 mkdir xxx mv * .repo /etc/yum.repos.d/xxx把/etc/yum.conf 改为一systemctl start vsftpd systemctl status vsfpd (running 开启) 在/var/ftp/ 下新建文件夹 (mkdir aaa)cp -rp /mnt/prckages/* /var/ftp/aaa在/var/ftp/下 createrepo /var/ftp/aaa在/etc/yum.repos.d/下 新建ftp源 5行 baseurl=ftp://ip地址/aaa (ftp下的文件夹以 .repo 结尾)清空缓存 生成新缓存3.测试机在/etc/yum.conf 里查看是否为1在/etc/yum.repos.d/新建文件夹 把所有的源移动到新建文件夹里编辑连接ftp源 vim bbb.repo 5行 baseurl=ftp://ip地址/aaa (ftp下的文件夹以 .repo 结尾) 查看yum仓库 yum repolist清空缓存 生成新缓存测试 yum remove tree yum install tree -y
简便方法:二
1.建立本地源挂载镜像安装命令 yum install -y createrepo vsftpd wget 在/etc/yum.repo.d/ 把以 .repo 结尾的所有源移动到新文件夹里在/etc/yum.conf/里 修改成1查看自己的仓库 yum repolist在/etc/yum.repos.d/ 建立自己的本地源(只要以 .repo结尾就可以) vim mm.repobaseurl=file:///mnt (镜像)查看仓库 yum repolist清空缓存 clean 生成新缓存2.ftp源(网络原)挂载镜像mount /mnt/sr0 /opt在/etc/yum.repos.d/里 mkdir xxx mv * .repo /etc/yum.repos.d/xxx把/etc/yum.conf 改为一systemctl start vsftpd systemctl status vsfpd (running 开启) 在/var/ftp/ 下新建文件夹 (mkdir aaa)cp -rp /mnt/prckages/* /var/ftp/aaa在/var/ftp/下 createrepo /var/ftp/aaa在/etc/yum.repos.d/下 新建ftp源 5行 baseurl=ftp://ip地址/aaa (ftp下的文件夹以 .repo 结尾)清空缓存 生成新缓存3.测试机在/etc/yum.conf 里查看是否为1在/etc/yum.repos.d/新建文件夹 把所有的源移动到新建文件夹里编辑连接ftp源 vim bbb.repo 5行 baseurl=ftp://ip地址/aaa (ftp下的文件夹以 .repo 结尾) 查看yum仓库 yum repolist清空缓存 生成新缓存测试 yum remove tree yum install tree -y
源码包安装
三种:rpm、yum、源码包安装
1、源码安装nginx
- 下载源码包
wget http://nginx.org/download/nginx-1.18.0.tar.gztar -xf nginx-1.18.0.tar.gz -C /optcd /opt/nginx-1.18.0# 就可以看到nginx源代码# 第二种方式:https://repo.huaweicloud.com/epel/7/x86_64/Packages/n/wget https://repo.huaweicloud.com/epel/7/x86_64/Packages/n/nginx-1.16.1-3.el7.x86_64.rpm
- 直接编译
# 编译前,系统检测
[root@www nginx-1.18.0]# ./configure# 如果出现对应的错误,则执行下面命令
[root@www nginx-1.18.0]# yum install pcre pcre-devel -y
[root@www nginx-1.18.0]# yum install zlib zlib-devel -y# 开始编译
make -j : 使用多核编译# 安装
make install PROFIX=/usr/local# 测试
[root@www ~]# /usr/local/nginx/sbin/nginx # 环境变量## 添加环境变量
/etc/profile # 所用用户的环境变量
/root/.bash_profile # 当前用户的环境变量NGINX_HOME=/usr/local/nginx/sbin
PATH=$PATH:$NGINX_HOME
export PATH/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/.local/bin
/root/bin
/root/.local/bin
/root/bin
/usr/local/nginx/sbin习题:
# 源码包编译 PHP
https://www.php.net/distributions/php-7.4.16.tar.gz第一步 :下载安装PHP
wget -O /opt/ php.tar.gz https://www.php.net/distributions/php-7.4.16.tar.gz或者
cd/opt
wget php.tar.gz https://www.php.net/distributions/php-7.4.16.tar.gz第二步 解压
tar xvf php.tar.gz 第三步 直接编译1. #编译测试 . - 在cd /opt/php-7.4.16/ 目录下测试输入 ./configure2.# 如果出现对应的错误,则执行下面命令#报错#解决yum install libxml2 ibxml2-devel **# libxml2安装包有的话无需添加**#报错
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:No package 'sqlite3' found
#解决yum install sqlite sqlite-devel **# sqlite安装包有的话无需添加**# 开始编译 make -j : 使用多核编译 > 这里是引用# 安装 make install PROFIX=/usr/local3. #执行 ./configure 命令时,可能会因为 Linux 尚未安装某些库而报错,
安装即可解决。
配置成功后会看到授权信息Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+4.#HP 源码的 ext 目录中,有大量的扩展 ls[root@mm_centos php-7.2.12]# ls
acinclude.m4 configure.ac libtool modules README.NEW-OUTPUT-API scripts
aclocal.m4 CONTRIBUTING.md LICENSE NEWS README.PARAMETER_PARSING_API server-tests-config.php
appveyor CREDITS ltmain.sh pear README.REDIST.BINS server-tests.php
build ext main php7.spec README.RELEASE_PROCESS snapshot
buildconf EXTENSIONS makedist php7.spec.in README.SELF-CONTAINED-EXTENSIONS stamp-h.in
buildconf.bat footer Makefile php.gif README.STREAMS tests
CODING_STANDARDS generated_lists Makefile.frag php.ini-development README.SUBMITTING_PATCH travis
config.guess genfiles Makefile.fragments php.ini-production README.TESTING TSRM
config.log header Makefile.gcov README.EXT_SKEL README.TESTING2 UPGRADING
config.nice include Makefile.global README.GIT-RULES README.UNIX-BUILD-SYSTEM UPGRADING.INTERNALS
config.status INSTALL Makefile.objects README.input_filter README.WIN32-BUILD-SYSTEM vcsclean
config.sub install-sh missing README.MAILINGLIST_RULES run-tests.php win32
configure libs mkinstalldirs README.md sapi Zend
[root@VM_139_38_centos php-7.2.12]# ls ext/
bcmath dba filter imap mysqli pcre pdo_pgsql recode soap sysvsem xmlrpc
bz2 dom ftp interbase mysqlnd pdo pdo_sqlite reflection sockets sysvshm xmlwriter
calendar enchant gd intl oci8 pdo_dblib pgsql session sodium tidy xsl
com_dotnet exif gettext json odbc pdo_firebird phar shmop spl tokenizer zend_test
ctype ext_skel gmp ldap opcache pdo_mysql posix simplexml sqlite3 wddx zip
curl ext_skel_win32.php hash libxml openssl pdo_oci pspell skeleton standard xml zlib
date fileinfo iconv mbstring pcntl pdo_odbc readline snmp sysvmsg xmlreader默认路径 /usr/bin/php# 测试[root@2021~]# /usr/bin/php# 环境变量5. # 添加环境变量/etc/profile # 所用用户的环境变量/root/.bash_profile # 当前用户的环境变量phg_mm=/usr/bin/PATH=$PATH:$phg_mmexport PATH6. #加载生效source /root/.bash_profile
7.正常安装使用php -m
进程
程序:存放代码的文件 静态
进程:正在运行的程序 动态
CPU:中央处理器 运算
内存:存储CPU计算使用的临时数据
存储:用来存放文件的
进程和线程
僵尸进程和孤儿进程
僵尸进程:进程生命周期结束了,但是PID未被回收
孤儿进程:父进程生命周期结束了,但是子进程未结束,子进程被系统进程接收
进程的状态:运行态 就绪态 阻塞态
ps 查看进程
# 命令:ps, 默认查看当前进程# 参数
-a : 查询所有进程
-x : 查看后台所有的进程
-u : 查看进程的用户USER : 开启当前进程的用户
PID : 当前进程的ID号
%CPU : CPU的使用率
%MEM : 内存使用率
VSZ : 进程启动时默认向计算机申请的内存
RSS : 进程运行时实际使用的内存
TTY : 进程运行的终端?: 后台运行(没有终端)tty:使用系统终端pts:使用虚拟终端
STAT :进程运行状态R : 正在运行中的进程+ : 在前台运行S : 睡眠中状态D : 不可中断睡眠T : 停止状态Z : 僵尸状态X : 死掉的进程< : 优先级较高的进程N :优先级较低的进程s : 包含子进程 yum install psmisc -y l : 已线程的方式运行| : 代表管道
START : 进程的启动时间
TIME : 占用CPU的时间
COMMAND : 进程执行的命令-e : 显示所有的进程
-f : 格式化输出同时显示PPID查看进程树
[root@egon ~]# rpm -qf `which pstree`
psmisc-22.20-16.el7.x86_64
[root@egon ~]# pstree
[root@egon ~]# pstree 104239
bash───bash───bash───bash───pstree查看ppid
[root@egon ~]# ps -ef | head -10
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11⽉01 ? 00:00:07 /usr/lib/systemd/systemd - -system --deserialize 20
root 2 0 0 11⽉01 ? 00:00:00 [kthreadd]
root 4 2 0 11⽉01 ? 00:00:00 [kworker/0:0H]
top(动态查看)
# 根据一定频率的去监控系统up前是系统时间
up后是开启的时间load average: 0.01, 0.42, 0.73
0.01 : 一分钟平均负载
0.42 : 五分钟平均负载
0.73 : 十五分钟平均负载平均负载:单位时间内,系统处于可运⾏状态和不可中断状态的平均进程数(一般核心数4 平均负载2 属于正常状态 )# CPU加压工具
stress --cpu [需要加压的系统核心数] --timeout [加压的时间]# CPU 性能加压工具
## 添加epel源(epel源主要用来安装红帽系列操作系统附加软件)
yum install stress -y# CPU 性能分析工具
yum install sysstat -ympstat -P ALL 3 # 进程性能分析⼯具
pidstat -u 1 5 Tasks
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombietotal : 当前系统一共运行的是125个进程
running : 正在运行的是1个
sleeping : 124个处于睡眠状态
stopped : 停止运行的进程数
zombie :僵尸进程数%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stus :在单位时间进程使用CPU所占用的时间百分比
sy : 在单位时间内系统进程占用CPU时间百分比
ni : 在单位时间内优先使用CPU所占时间百分比
id :在单位时间内CPU空闲所占时间百分比
wa : 在单位时间内CPU阻塞态所占CPU时间的百分比
hi : 硬件中断
si : 软件中断
st : 其他占用CPU时间百分比KiB Mem : 2027892 total, 1234180 free, 176352 used, 617360 buff/cachetotal :系统总内存
free :系统空闲内存
used : 系统使用内存
buff/cache : 缓存使用内存
avail Mem :总共剩余可用的内存(交换内存和物理内存都算在内)PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND PID : 进程编号
USER : 启动进程的用户
PR : 优先级
NI :nice值
VIRT : 虚拟内存
RES : 使用内存
SHR : 共享内存
%CPU : cpu使用率
%MEM :内存使用率
top快捷键
按1 : 展示所有的CPU的详情
按s : 设置top监控频率(默认3秒)
按M : 按照内存排序
按z : 添加颜色
按p : 按照CPU排序
按l : 展示CPU总负载(默认显示)
top的参数
-d : 设置top的刷新频率
-p : 设置查看的进程PIDtop -d 1 -p `pgrep nginx | head -1`-u : 查询指定用户的经常的进程top -u oldboy-n : 表示查询n次top -d 0.1 -u oldboy -n 20
设置进程的nice值(优先级)
# 设置进程的优先级
nice -n -11 bash test.sh-n : 设置优先级普通用户:(0~19)超级用户:(-20~19)# 给指定进程设置优先级
renice [设置优先级] pid
Linux系统信号
kill -l # 列出所有⽀持的信号中断信号ctrl + cctrl + zINT(2) : kill -[信号名称|信号ID] pidkill -SIGINT PIDkill -INT PIDkill -2 PID 退出信号:ctrl + d暂停信号:将进程暂停SIGTSTP(20)kill -20 PID kill -SIGTSTP PID kill -TSTP PID杀死进程信号SIGKILLkill -9 PID kill -SIGKILL PIDkill -KILL PID
注:不能够被捕捉终止信号SIGTREMkill -15 PID kill -SIGTERM PIDkill -TERM PID注:优雅终止进程暂停和恢复信号kill -19 SIGSTOP :暂停
kill -18 SIGCONT : 恢复
重载信号SIGHUP(1)
# 1、启动vsftpd服务
[root@egon ~]# systemctl start vsftpd # 默认匿名⽤户共享根⽬录为/var/ftp
[root@egon ~]# ls /var/ftp/
centos7 pub
[root@egon ~]#
# 2、打开浏览器,输⼊ftp://192.168.100.40/,看到的是/var/ftp下的内容#开启 systemctl start nginx
#查看 systemctl status nginx
#关闭 systemctl stop nginx如果我们想让我们的进程在后台⼀直运⾏,不要因为⽤户注销(logout)或者⽹络断开或者终端关闭⽽
⼀起被⼲掉,那么我们有两种解决⽅案
⽅案1:让进程忽略Linux HUP信号
⽅案2:让进程运⾏在新的会话⾥,从⽽成为不属于此终端的⼦进程,就不会在当前终端挂掉的情
况下⼀起被带走1、nohup [执行的命令] &
后台启动,会在当前目录生成一个nohub.out文件,用于执行的命令的输出。
2、setsid : 实际上开了一个孤儿进程
3、(执行的命令&) echo $$ 查看当前的pid
4、screen 开启一个子窗口
# 1、安装
[root@egon ~]# yum install screen -y
# 2、运⾏命令
⽅式⼀:开启⼀个窗⼝并⽤-S指定窗⼝名,也可以不指定
[root@egon ~]# screen -S egon_dsb
netstat(查看网络状态)
netstat主要用来查询系统端口相关问题注:要使用netstat,需要安装yum install -y net-tools# netstat常用参数
-t : 打印tcp链接的进程
-u : 打印UDP链接的进程
-l : 监听
-p : 打印进程的PID
-n : 不反解,不将ip地址解析成域名同时不将端口解析成对应的协议名称netstat -nutlp # 查看正在监听的,且使⽤tcp协议的进程
proc文件系统
查看cpu信息:/proc/cpuinfo
root@localhost ~]# cat /proc/cpuinfo
==flags
lm(64位)
vmx ⽀持虚拟化 Intel
svm ⽀持虚拟化 AMD
[root@localhost ~]# egrep --color 'lm|vmx|svm' /proc/cpuinfo
[root@localhost ~]# lscpu查看内核uname -a 查看内存 proc meminfo
[root@egon ~]# less /proc/meminfo
[root@egon ~]# free -wm内核启动参数:/proc/cmdline
[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1127.13.1.el7.x86_64 root=UUID=84b5cfa6-b0dc- 4d7a-a8fd-0302f0eb2f04 ro rhgb quiet LANG=zh_CN.UTF-8 [root@localhost ~]# uptime
17:42:40 up 1 day, 1:33, 2 users, load average: 0.00, 0.01, 0.05
12345注意:当我们卸载/proc后
root@localhost ~]# umount /proc -l
# 下述命令都不可⽤
free -m
uptime
lscpu
toop
# 重新挂在
[root@localhost ~]# mount -t proc proc /proc/
-t proc 指定⽂件系统的类型
proc ⽂件系统,虚拟⽂件系统
/proc 挂载点
管道
管道⽤于进程间通信
详细地说,管道操作符号 "|" ,主要⽤来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的
标准输⼊
PS: ⽆法传递标准错误输出⾄后者命令
格式: cmd1 | cmd2 [...|cmdn][root@localhost ~]# ps aux |grep "httpd"
[root@localhost ~]# yum list |grep nginx
管道之tee
-a 追加
重定向与 tee 他们在使⽤过程中有什么区别
[root@egon ~]# date > date.txt #直接将内容写⼊date.txt⽂件中
[root@egon ~]# date |tee date.txt #命令执⾏会输出⾄屏幕,但会同时保存⼀份⾄date.txt⽂件中
分区
#1、逻辑分区属于扩展分区,扩展分区属于主分区
#2、主分区⼜叫做引导分区,是可以安装系统的分区
MBR 分区,MBR 的意思是 "主引导记录"。MBR 最⼤⽀持 2TB 容量,在容量⽅⾯存在着极⼤的瓶
颈。
GPT 分区,GPT 意为 GUID 分区表,它⽀持的磁盘容量⽐ MBR ⼤得多。这是⼀个正逐渐取代 MBR
的新标准,它是由 UEFI 辅住⽽形成的,将来 UEFI ⽤于取代⽼旧的 BIOS,⽽ GPT 则取代⽼旧的
MBR。fdisk ⼯具⽤于 MBR 格式
gdisk ⼯具⽤于 GPT 格式
# 查看系统磁盘
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 18G 0 lvm /└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
sdc 8:32 0 3.9T 0 disk # 分区
[root@localhost ~]# fdisk /dev/sdb n : 新建一个分区
p : 查看分区情况
m :查看帮助
d : 删除分区
w ;保存分区修改内容
使用文件系统的流程
1、装硬盘2、查看当前系统硬盘
[root@localhost a]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 18G 0 lvm /└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
sdc 8:32 0 3.9T 0 disk
sr0 11:0 1 4.3G 0 rom 3、分区2TB 以下的硬盘,使用MBR分区2TB 以上的硬盘,使用GPT分区fdisk /dev/sdb4、格式化分区(将分区做成文件系统)mkfs.xfs /dev/sdb15、挂载分区mount /dev/sdb1 /a6、检测df-h : 显示硬盘大小单位# 注:挂载哪个硬盘则显示对应硬盘里面的内容
MBR分区
1、安装新的硬盘2、查看硬盘 lsblk
#fdisk -l /dev/sdb1 查看单个分区信息
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 18G 0 lvm /└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 40G 0 disk
sdc 8:32 0 3.9T 0 disk 3、开始分区
[root@localhost ~]# fdisk /dev/sdb
n : 新建一个分区
p : 查看分区情况
m :查看帮助
d : 删除分区
w ;保存分区修改内容4、创建文件系统
mkfs.xfs /dev/sdb1 # 注:-f : 覆盖5、挂载
mount /dev/sdb1 /a
GPT分区
1、GPT和MBR之间的区别?
MBR分区格式支持2TB以下硬盘分区,GPT分区格式支持2TB以上硬盘分区。2、准备一块2TB以上硬盘
# 注:分2TB以上硬盘,fdisk可以使用但是不推荐。3、GPT分区步骤
[root@localhost ~]# gdisk /dev/sdb n : 创建一个新的分区d : 删除一个分区p : 查看分区列表w : 保存分区?: 查看帮助4、格式化文件系统mkfs.xfs /dev/sdc15、挂载目录mount /dev/sdc /a
硬盘自动挂载
1、开机自动挂载开机自动执行:/etc/rc.localchmod +x /etc/ec.localecho "mount /dev/sdc1 /root/test" >> /etc/rc.local2、修改配置文件 /etc/fstab
/dev/sdc100 /opt xfs defaults 0 0
设备 挂载点 文件系统类型 挂载类型 是否备份 是否检测
UUID=1327e665-44b3-4223-a93b-69c36ec602f9 /root/oldboy xfs defaults 0 0/dev/sdc100 等价于 UUID3、查询设备UUID[root@localhost ~]# blkid
/dev/sdc1: UUID="b5797ad6-9b98-452c-8962-fa12f6590fa6" TYPE="xfs" PARTLABEL="Linux filesystem"#mount -a 挂载文件不用重启
#partprobe 更新分区表
制作SWAP分区
#free -m 查看swap分区
1、创建一个硬盘分区
fdisk 2、制作swap分区
mkswap /dev/sdb33、激活swap
swapon /dev/sdb34、关闭swap
swapoff #free -m 查看
#swapon -s 查看所有swap挂载
5、自动挂载5.1、echo "mkswap /dev/sdb3" >> /etc/rc.localecho "swapon /dev/sdb3" >> /etc/rc.local5.2、echo "/dev/sdb3 swap swap defaults 0 0" >> /etc/fstab
dd命令
dd if=/dev/zero of=/dev/sdb bs=500M count=1 if : 从哪里读文件
of : 写入到哪里
bs : 写入500M
count : 写一块
模拟文件系统出问题
1、直接向硬盘中写数据,不能测试向分区写数据
2、卸载之后重新挂载
[root@localhost ~]# mount /dev/sdc1 /root/test
mount: mount /dev/sdc1 on /root/test failed: Structure needs cleaning3、对文件系统进行修复
xfs_repair [磁盘或分区路径]注: xfs_repair修改硬盘之后,硬盘数据丢失,所以对重要的数据要进行数据备份
文件系统的备份与恢复
备份:另外在保存一份
恢复:将以前保存的数据进行还原touch 1.txt
echo aaaa > 1.txt
cp 1.txt 2.txtrm 1.txtcp 2.txt 1.txt1.log 1T = 1024G全量备份和增量备份
全量备份:将需要备份的文件全部复制一份
增量备份:在原来备份基础上,把新增数据重新备份一份备份与恢复的命令
xfsdump : 备份的命令
xfsrestore : 恢复的命令# 备份的步骤
1、安装备份命令
[root@localhost test]# yum install xfsdump -y2、备份的等级
0 全量备份1 ~ 9 增量备份(等级)3、备份的参数
-L :记录每次备份的地方
-M :注释,此次备份的注释
-l :指定备份的等级
-f :备份的文件名称
-I :查看备份信息4、备份的条件(限制)1、必须使用root权限2、只能备份已经挂载的内容3、只能备份xfs文件系统4、只能够用xfsrestore来恢复5、备份的命令格式
xfsdump [参数] 备份路径
xfsdump -L sdb1_bak -M "sbd1_from_xxx" -l 0 -f sdb1_from_bak_1 /root/oldboy
#xfsdump -L sdb1_bak -M "sdb1_from_qlbf" -l 0 -f sdb1_from_bak /root/test1 (自己做的)
6、数据恢复
xfsrestore7、恢复数据的参数
-f : 指定备份的文件路径8、恢复的格式
xfsrestore [参数] 恢复的路径
[root@localhost oldboy]# xfsrestore -f /root/sdb1_from_bak_3 /root/oldboy/
LVM
1、什么是lvm你如何保证你的硬盘空间恰好够用?
如果你的硬盘你够用了怎么扩容?LVM是文件系统管理工具/root/oldboy ---> lv[5G]
/root/oldboy ---> lv[3G]2、LVM的优点1、可以动态扩容与缩容2、可以将新增加的硬盘添加到VG存储池3、可以突破物理存储卷的限制3、使用lvm1、安装lvm软件包yum install lvm2 -y2、将磁盘交给pvpvcreate [磁盘|磁盘分区]3、查看pvpvspvscan4、创建vgvgcreate [vg名称] [pv路径]5、查看vg6、创建lvm逻辑卷(lv)-L : 创建逻辑卷的大小-n : 逻辑卷的名字lvcreate [参数] 逻辑卷名称7、制作文件系统mkfs.xfs /dev/vg1/xxx8、挂载文件系统mount [lv的路径] [挂载点的路径]
动态扩容
1、挂载一块硬盘2、创建pvpvcreate /dev/sdd3、直接扩容给VGvgextend [vg的名称] [pv]4、扩容给LVlvextend -L [+100G] [lv路径]5、刷新xfs_growfs /dev/vg1/vg1_test01
动态缩容
1、卸载lv
[root@www ~]# umount /root/vg022、删除lv
[root@www ~]# lvremove /dev/vg1/vg1_test01
Do you really want to remove active logical volume vg1/vg1_test01? [y/n]: yLogical volume "vg1_test01" successfully removed3、删除vg
[root@www ~]# vgremove vg1Volume group "vg1" successfully removed4、删除PV
[root@www ~]# pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped.
[root@www ~]# pvremove /dev/sdc Labels on physical volume "/dev/sdc" successfully wiped.
[root@www ~]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <19.00g 0 /dev/sdb2 vg2 lvm2 a-- <40.00g <40.00g/dev/sdd vg2 lvm2 a-- <100.00g <100.00g
快照
1、挂载硬盘2、创建PV3、创建VG4、创建LV5、格式化文件系统6、挂载7、造数据
[root@www ~]# echo 111 >> /vg/1.txt8、拍摄快照
[root@www ~]# lvcreate -L +1G -s -n vg_from_vg100_bak /dev/vg100/vg_from_vg100 Logical volume "vg_from_vg100_bak" created.lvcreate -L [快照大小] -s(创建快照) -n [快照的名字] [拍摄快照的目标]9、查看快照
[root@www ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Conver vg_from_vg100 vg100 owi-aos--- 1.00t vg_from_vg100_bak vg100 swi-a-s--- 1.00g vg_from_vg100 0.01
10、恢复数据
[root@www ~]# mount -o nouuid /dev/vg100/vg_from_vg100_bak /vg_bak
# 备注:同一个UUID只能挂载一次,如果需要挂载多次,则需要使用(-o nouuid)快照恢复相当于重新挂载,优点是占用空间小
计划任务
Crontab表达式
* * * * *
分 时 日 月 周每天的凌晨2点 02:00 00 02 * * *
每月执行一次 00 00 01 * *
每个月的一号零点零时零分同时这一天时星期六 00 00 01 * 6
系统级别的计划任务
[root@yum01 ~]# vim /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* * * * * echo "hello world"#表示任意(分时日月周)都会执行# 2-3 表示一个时间范围# , 表示分割 2,4,6# /2 每隔多久用户级别的定时任务保存路径 /var/spool/cron2、如下的目录/etc/cron.hourly/ # 系统定时任务每个⼩时运⾏这个⽬录⾥的内容/etc/cron.daily/ # 系统定时任务每天运⾏这个⽬录⾥的内容/etc/cron.weekly/ # 系统定时任务每周运⾏这个⽬录⾥的内容/etc/cron.monthly/ # 系统定时任务每⽉运⾏这个⽬录⾥的内容
用户级别的计划任务
crontab -e-e : 编辑计划任务
-l : 查看计划任务[root@yum01 ~]# crontab -e
#* * * * * echo "hello world" >> /tmp/1.txt
#每5分钟执行一次时间同步
*/5 * * * * ntpdate ntp.aliyun.com5.查看定时任务
[root@yum01 ~]# crontab -l
#每5分钟执行一次时间同步
*/5 * * * * ntpdate ntp.aliyun.com# 注:用户级别的计划任务存放在/var/spool/cron/,不同的用户存放的计划任务是以其自己的名字命名的脚本
crontab语法
# 1 3 5
00 00 1,3,5 * *# 1到5号
00 00 1-5# 每几分钟,每几个小数,每几天
0/2 /2
00 0/2 00 /2
00 00 0/2 00 00 /2
编写脚本
#vim bei.sh
#!/bin/bash
mkdir -p /backup
tar zcf /backup/2018-02-20——hostname_etc.tar.gz /etc
find /backup/ type -f -mtime +3 | xargs rm -rf
思路
1.手动执行命令,然后保留执行成功的结果。
2.编写脚本脚本需要统一路径/scripts脚本内容复制执行成功的命令(减少每个环节出错几率)脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
3.执行脚本使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务加上必要的注释信息, 人、时间、任务设定计划任务执行的周期粘贴执行脚本的命令(不要手敲)
5.调试计划任务增加任务频率测试检查环境变量问题检查crond服务日志 tail -f /var/log/cron
系统优化
1、临时关闭
[root@oldboy ~]# setenforce 0
setenforce: SELinux is disabled2、永久关闭
[root@oldboy ~]# vim /etc/selinux/config
SELINUX=disabled# 设置开机不启动(关闭防火墙)
[root@egon ~]# systemctl disable --now firewalldhttps://mirrors.huaweicloud.com/
https://mirrors.tuna.tsinghua.edu.cn/
http://mirrors.163.com/http://mirrors.aliyun.com/# ⼀:先在测试环境,配置好yum源
默认国外的yum源(软件仓库)⽐较慢,所以换成国内的。
# 1.1、备份
[root@egon ~]# mv /etc/yum.repos.d/CentOS-Base.repo
/etc/yum.repos.d/CentOS-Base.repo.backup
# 1.2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
[root@egon ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
# 1.3.添加epel源 [root@egon ~]# curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
# ⼆:然后执⾏yum update -y,以及安装常⽤软件包,然后执⾏部署,将部署过程中安装的包缓
存本地
[root@egon ~]# yum update -y # 刚装完系统后就⽴即执⾏,⽇后就不要轻易更新了# 安装系统常用软件
[root@www yum.repos.d]# yum -y install tree nmap sysstat lrzsz telnet bash-completion vim lsof net-tools rsync ntpdate nfs-utils
yum源处理与常用软件包安装
vim /etc/yum.conf ===》更改keepcache=1 #开启rpm包安装缓存在测试环境配置好yum源(默认国外的yum源比较慢,所以换成国内的)在/etc/yum.repo.d/下
rm -rf ./* #删除所有的源## 重新安装新的源
163源 、华为源 、阿里云源 、清华大学源curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo#.安装基础软件包
yum install net-tools vim tree htop iftop gcc gcc-c++ glibc\
iotop lrzsz sl wget unzip telnet nmap nc psmisc \
dos2unix bash-completion bash-completion-extra sysstat \
rsync nfs-utils httpd-tools -yyum update -y # 全部更新系统,切记日后就不要轻易更新
ssh密钥
1、禁用SSH DNS解析
[root@web01 ~]# vim /etc/ssh/sshd_config
搜索:/UseDNS 把yes 改为no
[root@web01 ~]# systemctl status ssh2、创建公钥和私钥
# 虚拟机私钥不加密版ssh-kengen -t rsa(加密算法名称)
[root@web01 ~]# ssh-keygen
[root@web01 ~]# ls -la
[root@web01 ~]# cd .ssh
[root@web01 .ssh]# ll
total 8
-rw------- 1 root root 1679 Mar 31 19:31 id_rsa
-rw-r--r-- 1 root root 392 Mar 31 19:31 id_rsa.pub
3、将公钥复制到对方服务器上ssh-copy-id -i /root/.ssh/id_rsa.pub root@ip在服务端查看
[root@yum02 ~]# cd .ssh
[root@yum02 .ssh]# ll
total 4
-rw------- 1 root root 392 Mar 31 19:38 authorized_keys
[root@yum02 .ssh]# cat authorized_keys 4、免密登录
[root@web01 .ssh]# ssh root@192.168.100.50
Last login: Wed Mar 31 18:01:15 2021 from 192.168.100.1
[root@yum02 ~]# exit
logout
Connection to 192.168.100.50 closed.# x-shell秘钥版
工具==》新建用户密钥生成导向==》下一步生成密钥文件可导出桌面rz传入shell,
也可以创建vim /root/.ssh/authorized_keys 这个文件夹把拷到桌面的密码文件内容拷到这个文件里
验证是否创建成功===》用户身份验证:keygen root 主机名输入虚拟机1的IP地址===》登陆成功
ssh root@+虚拟机2IP地址===》可选择密码登陆还是密钥登陆禁用密码 使用ssh密钥登录
[root@yum02 ~]# vim /etc/ssh/sshd_config
[root@yum02 .ssh]# systemctl restart sshd
添加hosts⽂件实现集群主机之间相互⽤主机名解析
vim /etc/hosts # 编辑好之后,每台机器都发⼀份
172.16.10.11 nc1 ceph-deploy
172.16.10.12 nc2
172.16.10.13 nc3
172.16.10.14 cs1
172.16.10.15 cs2
172.16.10.16 cs3
配置ntp服务,同步系统时间
安装ntpdate软件包
crontab -l 查看定时任务
/etc/crontab 系统定时任务
/var/log/cron/ 用户定时任务
[root@2021 ~]# crontab -e 编辑#每天每隔三个小时时间同步一次
00 */3 * * * /usr/sbin/ntpdate ntp.aliyun.com
Linux---基础部分相关推荐
- 小猿圈Linux基础面试题,看看你能答对几道?
最近身边的很多朋友都在学习linux,从最开始的安装软件都需要百度一天的他们,现在已经成长为了,不需要百度就可以把自己弄懵圈的了,接下来的几天小猿圈linux老师会为大家准备一些实用的linux技巧分 ...
- linux基础知识-链接列表
linux基础知识-链接列表 1. 安装centos 7 1.1 Linux的初识 1.2 centOS 7安装教程 1.3 centOS 7配置ip和网络问题排查 1.4 PuTTY和Xshell远 ...
- linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp
linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...
本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
- linux基础概念和个人笔记总结(6)
防伪码:曾经梦想仗剑走天涯,回过头,却发现还是放不下家的牵挂 后续理论的验证图文详解,我会更新,希望大家可以参考 第十一章 FTP文件传输服务 1.FTP连接 控制连接:tcp21端口,用于发送ftp ...
- Linux基础第一周
Linux基础第一周 命令的格式 command(命令)option(选项)arguments(参数)三部分组成,之间需要空格间隔 options 选项 启用命令的某项功能,从而更改命令的功能 arg ...
- 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...
- 鸟哥的linux 实训教程,鸟哥的Linux基础学习实训教程
1.理想的Linux上机实践课程 每周一次.每次三小时的学与练 本书所有例题讲解,均经过鸟哥在大专院校实施多年来的测试,对于学生的理解具有相当满意的效果. 2. 提供一致性教学环境 让学习者不再有陌生 ...
- 第90节:Java中的Linux基础
第90节:Java中的Linux基础 linux是装载虚拟机上面的: JDK依赖包: yum install glibc.i686MYSQL依赖包: yum -y install libaio.so. ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础
本节书摘来异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
最新文章
- ASP,VBScript常用的内置函数,lbound(),ubound(),int(),fix(),rnd(),instr(),instrrec(),,
- 洛谷P3773 [CTSC2017]吉夫特(Lucas定理,dp)
- python出租车计费标准_用Python绘制出租车出发点的动态热力图
- rtx3090能组成超级计算机吗,「必看分析」技嘉rtx3090超级雕评测?功能真的不好吗...
- 在Qt for Python应用程序中使用Designer UI文件
- linux 传真 邮件,如何在Linux环境下架设一台传真服务器(2)
- android唯一机器码生成方案_分布式系统唯一ID生成方案汇总
- EL表达式判断条件要写在${}内
- [转帖]生成QQ/MSN/旺旺/SKYPE等在线状态图标(官方提供)
- Typora设置高亮
- 关于大学生如何进行编码规范的火拼
- 计算机英语派生词和复合词,英语派生词归纳
- 硬盘分区形式之MBR、GPT
- 汇川机器人视觉定位通讯程序
- JetBrains当选JCP执行委员会委员
- 苹果App Store强行收取30%手续费,终于被告垄断啦!
- php插入图片适应屏幕,PHPExcel:如何在首页页眉中插入图片并将其放大以适应其内容?...
- Ping Ping Ping—命令执行
- 为什么有必要开发一个APP?
- 德国计算机课程匹配度,匹配度对于德国留学有多重要
热门文章
- 基因结构显示服务器,科学网—宏基因组注释和可视化神器MEGAN入门 - 刘永鑫的博文...
- 校企合作,人才共育|岳阳开放大学校长乐艳华一行莅临云畅科技考察交流
- 关于GeForce Experience更新驱动显示图形驱动程序安装失败
- python分词考研英语真题词频(附结果)——读取word、nltk、有道智云API
- web service在java_java web Service的使用
- python爬虫数据分析毕业论文_Python 爬虫实操,顺便做了个数据分析
- 渲染TA实战:三方向映射 UE4
- Lua的浅拷贝和深拷贝
- 网络打印机计算机服务,打印机服务器与网络打印机的安装
- fopen打开文件名(文件路径含中文或韩语)方法测试