运维课程第二周小结
第四天:系统管理和用户管理
4.1 openeuler的安装
- 版本使用Red Hat Enterprise Linux 9 64位
- 网络配置:ipv4中的地址,子网掩码,网关和DNS
- 选择最小安装
- 密码需要长密码,因此需要先设长密码后在root中更改
4.2 Ubuntu环境部署Nginx
- 禁用防火墙
systemctl disable firewalld.service -- 移除防火墙服务
4.2.1 Rocky系统和Ubuntu环境的Nginx差异

- 这几个都是导入的文件,可以用
grep include /etc/nginx/nginx.conf进行查看
4.2.2 Nginx核心配置文件
-
本目录中所有的操作都以Ubuntu为例
-

-
每个server配置段都负责一个站点,在Nginx中可以承接很多个不同的网站
-
服务器中有很多文件,它们都属于web资源,而每个资源都有自己的url(e.g. https://eclick.baidu.com/se.jpg)
- url由协议 + 地址(省略了:80)+ 文件组成
-
url的请求交给server后,由location来承载
-
我们主要负责管理server配置段和location配置段
-

- server配置段有listen,用来控制端口
- root中存放的文件,用来给网站用
-
root属性默认可以直接用不用改,除非要用自己的
-
查看location中的内容:
cat /etc/nginx/sites-enabled/default -
最精简的server:直接listen就可以,别的默认不用管
-
每条有效命令后都有;
4.2.3 Nginx网站交互逻辑
提出问题:当我访问一个站点的时候,它的完整逻辑是什么?(客户端与服务端怎么交互?)
解决问题:

-
- 客户端输入网站域名:www.a.com
- DNS服务将域名解析为ip地址 e.g. 10.0.0.13
- 与暴露的80端口建立TCP/IP级别的连接,以进入应用程序
- 端口里面的web软件进行http请求处理,并且3步走
- 3 - 1 发送请求头,发现末尾/自动补充了
curl -v www.a.com- 原因:
curl -v 10.0.13发现GET / , /是向10.0.0.13发送的请求的默认资源
- 原因:
- 端口上通过server的listen进行监听,ip进入server中的location,web站点目录用server - root进行定制
- 站点目录中的文件有很多,默认提供index.html 因此index用来定制默认文件名,一般我们不修改
如果index后有三个文件,按顺序通过优先级依次返回 - 3 - 2 处理请求, location / 的 / 就是待处理的请求关键字,匹配url的请求
- $uri 是环境变量,其值为www.a.com/abc中的abc的值
- 3 - 3 返回内容
- 返回默认返回root目录中的同名文件
- 以root /var/www/html为例
- 如果目录下有名为abc的文件,则直接返回(在例子中是/目录)
- 如果找不到同名文件,则去同名文件的目录下找index.html的文件(默认root目录下有一个abc/index.html的文件)(在例子中是/目录,所以返回了/var/www/html/目录下的index.html文件)
- 如果前两种处理方式都不管用,返回404;
- 以root /var/www/html为例
- 返回默认返回root目录中的同名文件
- 3 - 1 发送请求头,发现末尾/自动补充了
4.3 openeuler的初始设置
- 同ubuntu,此处不进行重复回顾
4.4 Nginx web实践
-
删除默认的目录
rm -f /etc/nginx/sites-enabled/default -
定制应用界面(创建新目录 + 定制index.html的内容)
cd /tmp rm -rf ./* -- 把目录下的所有文件和目录清空 mkdir -p /data/server/nginx/web{1..3} 接下来对于这三个文件定制站点目录 在定制配置的时候需要定制root属性,因为是自己创建的 echo "nginx web1" > /data/server/nginx/web1/index.html echo "nginx web2" > /data/server/nginx/web2/index.html echo "nginx web3" > /data/server/nginx/web3/index.html -
找到用来定制的include文件在哪里
grep include /etc/nginx/nginx.conf cat /etc/nginx/nginx.conf -- 去http中找,发现可以创建.conf文件(include /etc/nginx/conf.d/*.conf) vim /etc/nginx/conf.d/vhost.conf -- 用来在http配置段中定制server配置段 其中: server { listen 80; root /data/server/nginx/web1; } server { listen 81; -- 端口不能共用一个 root /data/server/nginx/web2; } server { listen 82; root /data/server/nginx/web3; } netstat -tnulp -- 查看端口
4.5 Nodejs项目了解

-
npm主要是用来维护下载的第三方模块之间的关联关系
-
Nodejs可以让html等运行在服务端
-
部署环境
systemctl stop nginx.service --解除nginx对于80端口的占用 netstat -tnulp -- 检查端口 apt install nodejs nodejs -v -- 查看nodejs版本 小项目参考第三天 网络基础与网络搭建pdf中的1.5.3.2.3
4.6 文件系统

-
了解性内容
-
常见目录
用户相关: /root/home -- 用户的家目录 设备相关: /dev 命令相关: /bin/sbin /usr/bin /usr/sbin -- binary目录存放最常使用的命令,/usr/bin系统用户使用的应用程序 系统相关: /var -- 经常变动的文件 /usr -- 和共享有关的文件 /etc -- 和配置有关的文件 /proc -- 和进程有关的文件 -
linux中的文件系统是ext4(主要)和XFS
-
Windows中的文件系统主要是ntfs
-
其他fat、swap、iso9660(光盘)
-
文件颜色
蓝色:目录文件 白色:普通文件 浅蓝色:链接文件 绿色:可执行文件 红色:压缩文件 黄色:设备文件 红色闪烁:链接文件有问题 -
确认文件属性信息
精简的属性: ls -l 或 ll 文件的元数据属性信息:file 文件的状态信息:stat 命令别名:alias -
环境变量
PATH -- 系统上的命令路径 LANG -- 系统语言 LANG=EN -- 英文 -
文件存储

- 磁盘区域有多个分区
- 前端放属性信息
- 中段标识区域inode
- 后端数据区域block
- 每个inode和data block一一对应
- 磁盘区域有多个分区
-
Linux下一切皆文件:
找文件方法:stat命令找到inode信息,inode中存放着数据块所在的位置,从而找到数据

目录 -> inode ->找到文件 -> 拼接 -> inode…
-
数据符号:
* -- 匹配字符 {a..z} -- 表示范围内所有内容 [0-9] -- 匹配字符 [^0-9] -- 上述命令的补集 ls a* ls [a-d]* -- 显示所有a-d的内容 -
链接文件
- 硬链接 + 软链接

-
硬链接文件指向同一inode,数据不变,硬链接数增加
-
ln 源文件 目标文件 -- 创建硬链接 ln -s 源文件 目标文件 -- 创建软链接,不仅可以在目录上操作,还可以在硬链接上操作 -

-
磁盘满了 可能是inode用完了或者空间满了
4.7 IO实践
重定向符号:
> -- 覆盖式重定向(把文件内的东西覆盖了)
>> -- 追加式重定向(在文件后面追加)
/dev/null 垃圾桶,放进去就再也拿不回来了
2>&1 -- 所有信息内容,采集所有程序运行的正确和错误输出
0 -- 输入
1 -- 标准正确输出
2 -- 标准错误输出
eof ... eof -- 内容范围边界
cat << eof
...
...
eof
cat > /path/to/file << eof
...
...
eof -- 通过eof把多行文件重定向到file里
cat > /path/to/file <<-eof -- 横杠考虑到最下面的eof前面有tab键导致文件错误
...
...
eof -- 通过eof把多行文件重定向到file里
4.8 Linux命令
systemctl start -- 仅限于当前OS运行的时候,OS重启后,需要再次执行
systemctl enable -- 仅限于当前OS运行的时候不生效,OS重启后才生效
systemctl disable firewalld.service -- 移除防火墙服务
touch file{1..4}.txt -- 大括号作用:创建连续的内容(此处从1到4)
echo "文件内容" > /path/to/file.txt -- 把文件放到>右边的文件里,无论文件存在与否都可以(如果不在就直接创建)
nginx -t -- 检测配置文件
systemctl restart 服务 -- 所有修改完成后都要重启(现阶段)
dos2unix -- 把文件从windows格式转换为Linux格式
4.9 vim快捷键
3yy -- 复制三行
第五天:系统管理和用户管理
5.1 rocky10的安装
- 显示器中的加速3D图形一定要取消勾选
- 内存8GB,处理器4
5.2 read的应用
-
大规模自动化脚本 - 接受用户输入数据
read -p "请输入用户名:" username -- 提示符:请输入登录用户名: echo $username
5.3 高级重定向
tr "a-z" "A-Z" <<< "jkhdasfjklahlh" -- 把内容全部大写
5.4 用户管理
-
假设有一个公司,门禁卡是用户管理,保安室对标权限管理,保安室内的规章制度对标准入控制(access control)
-
rocky的SELinux会阻止用户自己编写的服务,因此需要禁用
getenforce -- 查看SELinux的运行情况 setenforce 0 -- 临时禁用 永久禁用方法: vim /etc/selinux/config中把SELINUX=disabled reboot -
对于用户本身:
- 用户操作 | 增删改查
- 用户管理文件
cat /etc/passwd -- 我们只需要关心用户名和登录后的shell环境
5.4.1 用户组管理
groupadd -r group1 -- 创建group1并且加入随机的组中,但是建议不要乱用
groupadd -g 10086 group2 -- 创建group2并且赋予其10086的GID(只要记这个)
grep group /etc/group -- 查看组
groupdel group4 -- 删除group4
gpasswd -a lisi group1 -- 把lisi加入到group1组中
gpasswd -d lisi group1 -- 把lisi从group1组中移除
groupmems-g group1 -a rxliang -- 把rxliang添加到group1组
5.4.2 id命令
id rxliang -- 查看id等信息
5.4.3 用户创建
useradd -m xxx -- 创建用户家目录(为了保证在rocky和ubuntu主机上都有家目录创建)此命令重点记忆
useraded -g 1001 -m lisi1 -- 创建用户家目录的同时将用户加入指定的组里
useradd -u 10088 -- 指定创建用户的id
5.4.4 密码更改
echo 密码|passwd 用户名
echo 密码|passwd --stdin -- 仅限于rocky系列的os
echo "用户名;密码"| chpasswd
5.4.5 用户删除
userdel -r -- 删除的时候强制带着-r就行了
5.5 权限管理
需要知道,我们将权限管理分为两部分:文件的用户属性和文件的操作权限
5.5.1 文件的用户属性
- 文件所有者 owner 简称u
- 文件归属组 group 简称g
- 其他人 others 简称o
他们通过看,写,执行来操作文件,由此引出文件的操作权限
5.5.2 文件的操作权限

如图所示,输入ll linux.txt后,-rw-r--r--中:第一个- 表示文件类型,之后以---为一组,共三组
- 第一组表示所有者u的权限
- 第二组表示归属组g的权限
- 第三组表示其他用户o的权限
以rwx为例,r表示该文件可读(read),w表示该文件可写(write),x表示该文件可执行(execute),没有权限在各个位置上用 - 表示
- 用二进制对
rwx进行表示- 22 21 20 当各个位置没有权限时,用0表示;反之用1表示
rwx的二进制表示为4 + 2 + 1 = 7- 由于掩码022的存在:
- 普通目录的默认权限为755,即
rwxrwxrwx的777减去022所得的值 - 普通目录的默认权限为644,即
rw-rw-rw-的666减去022所得的值
- 普通目录的默认权限为755,即
5.5.3 权限命令
前置准备:
cd
mkdir chown
cd chown/
mkdir dir{1..5}
echo file-a > a.txt
echo file-b > b.txt
echo file-c > c.txt
echo file-d > d.txt
echo file-e > e.txt
最最最核心的两条命令
chown即 change owner 的简称
chown 所有者:用户组 file
chown 所有者:用户组 -R file -- 把目录和目录内的所有文件全部改变权限
e.g.
chown rxliang a.txt
ll -- 发现所有者变为rxliang
有些人喜欢用 chown 所有者.用户组 file ,但非常不推荐
-
chmod即 change mode 的简称已知共有u,g,o三个组
chmod mode file
局部权限修改:
chmod +x a.txt -- 为a.txt中的u,g,o全部添加x权限
chmod u-x,g-x,o-x a.txt -- 为a.txt中的u,g,o分别减去x权限
chmod u=rwx e.txt -- 把e.txt中u的权限改为rwx
整体权限修改:
chmod 600 a.txt -- 把a.txt的总权限改成600,即rw-------

5.5.4 特殊权限(了解)

- 特殊权限分为SUID,SGID和Sticky bit
- SUID:表现为所有者u的rws,让所有普通用户在执行文件时拥有root用户的权限(要保证文件非敏感)
- SGID:表现为归属组g的rws,假设目录是wubai,则普通用户在该目录下创建的文件,所属组是wubai,所有者是普通用户自己
- Stick bit(粘滞位):表现为其他用户o的rwt,任何用户都可以对目录内自己的文件进行任何操作,但不可以动别人的
5.5.5 特殊属性
chattr -- 用于改变文件目录或目录的扩展属性
chattr +a file -- 只允许追加数据,不能删除或修改文件内容
chattr +i file -- 设置文件为不可修改,即不能删除、重命名、修改内容或添加链接
lsattr -- 查看文件或目录的扩展属性
5.6 文本(vim)管理

共有三个模式:默认模式,编辑模式,命令模式
-
进入vim:
vim nihao.txt +k -- 进入nihao.txt的第三行 -
进入编辑模式:
a -- 在光标所在处后面输入 o -- 在当前光标所在行的下方打开一个新行 -
查找关键字:
/关键字 -- 会用黄色高亮 -
扩展命令:
:wq -- 写入并退出 :q! -- 强制退出 -
文件内容编辑

```powershell
:2d -- 删除第二行
:2,4d -- 删除第2行到第4行
:2;+3y -- 复制第2行到第5行,总共4行
```
-
重要:内容替换方法
:s/要查找的内容/替换为的内容/修饰符 -- 一般修饰符是g,表示范围内所有的都替换;不加表示只替换一个 :%s -- 表示全文替换 % -- 全文 $ -- 最后一行 起始,结束 ,结束 -- 光标所在行,到 结束位置行 常用示例: :%s/原内容/替换后内容/g -- 从全文替换 :,$s/原内容/替换后内容/g -- 从当前行到最后一行进行替换 :/关键字/,$s/原内容/替换后内容/g -- 正则匹配内容进行全文替换 :3,6s/原内容/替换后内容/g -- 从第三行到第六行内容进行替换 -
行光标跳转
^ -- 跳转至行首的第一个非空白字符 $ -- 跳转至行尾 -
其他操作
yy -- 复制 3yy -- 复制三行 p -- 复制一次 3p -- 粘贴三次 u -- 撤销编辑
5.7 Linux命令
ll -d 列出目录本身的详细信息
第六天:文本管理和文件查找
6.1 vim高阶
6.1.1 常用属性
查看行号:
:set nu -- 显示行号 (用的最多)
:set nonu -- 取消显示行号
下面的这些都可以放在vimrc中,作为自动化程序保存
复制保留格式:
:set paste
Tab用空格代替:
:set et
6.1.2 可视化模式
v(小写) -- 面向字符
V(大写) -- 面向整行
多行同时编辑:
ctrl-v(小写) -- 面向块 (用的最多)
shift + i
输入字符
esc
6.1.3 内容处理
6.1.3.1 切割替换
cut命令:
-d+符号表示内容以什么形式分割,-f表示要切割后的哪一块
-d:
-d" "
cut -d: -f1 1.txt -- 以:冒号分割,截取第一列内容 (用的最多)
cut -d: -f1,6,7 1.txt -- 以:冒号分割,截取第1,6,7列内容
cut -c4 1.txt -- 截取文件中每行第4个字符
cut -c5- 1.txt -- 从第五个字符开始截取后面所有字符
tr命令:
tr -s " " -- 把空号内的东西聚合成一个
tr "A" "B" < test.txt -- 把test.txt中A的内容替换成B
6.1.3.2 信息排序
sort命令:
sort -n file -- 以数字排序
sort -r file -- 降序排序
sort -nr file -- 以上两条命令结合
uniq命令:
连续信息的去重
uniq -- 把重复的内容只保留一个
uniq -c -- 去重。并统计重复行次数(count)
uniq -i -- 忽略大小写(AA和aa看成一个东西)
uniq -d -- 只显示重复的内容
6.1.3.3 内容合并
paste命令:
paste a.txt b.txt -- 把a.txt和b.txt中的内容进行合并
paste -d"@" a.txt b.txt -- 把a.txt和b.txt中的内容用@连接并进行合并
xargs命令:
xargs -a num.txt -n1 -I {} echo {}--bak
其中:
-a num.txt -- 读取num.txt内容
-n1 -- 逐行读取
-I {} -- 将读取的内容放到临时空间中
echo{}--bak -- 对临时空间内的内容进行处理
输出:9--hello
6.2 kylin desktop安装
- kylin desktop属于ubuntu系列
- 选择现成的盘进行全盘安装
- 格式化磁盘
- 剩余步骤一样
6.3 三剑客
6.3.1 grep命令
grep 关键字 文件名 -- 从文件中获取关键字
命令 | grep 关键字 -- 从文件中获取关键字
常见命令:
grep -i -- 不区分大小写提取 (ignore)
grep -n -- 提取并显示行号
grep -nir -- 不知道范围时,直接输入这个命令,可以直接找到在哪里(小技巧,很重要) r代表一层一层搜索
grep -E -- 同时搜索多个内容 (grep -E "error|warn" log.txt)
其他命令:
grep '^root' file -- 提取以root为开头的行
grep -A -- 显示匹配行后面多少行 (包含关键字所在行) A3显示4行
grep -B -- 显示匹配行前面多少行 (包含关键字所在行) B3显示4行
grep -B -- 显示匹配行前后多少行 (包含关键字所在行)
grep -v -- 匹配需求内容的补集
6.3.2 sed命令(Stream EDitor)
- 非常强大的文本编辑工具,不需要进入到文本内部就可以修改
- 把文件内的行内容逐行读取,并放到缓存空间
- vim内文件的编辑思路可以直接平移
sed '2s/bin/BIN' passwd -- 把passwd中的bin全部替换为BIN
sed '2i\xxxxxxxx' file -- 在第二行开启空行并插入xxxxxxxx
sed '2a\xxxxxxxx' file -- 在第二行后的第三行开启空行并插入xxxxxxxx
sed -i -- 表示真正对文本进行编辑,不加的话就是纯逗你玩玩的
vim sed.txt -- 导入演示文本
nihao sed1 sed2 sed3
nihao sed4 sed5 sed6
nihao sed7 sed8 sed9
sed '2p' sed.txt -- 如果只是2p,不仅打印第二行,还会打印别的所有行
sed -n '2p' sed.txt -- 如果只想输出第二行,加一个-n(-n和p搭配在一起使用)
对于2p: 2是内容范围,p是动作
sed -n '/sed6/p' sed.txt -- 匹配关键字
sed -n -e '2p' -e '1p' sed.txt -- -e代表进行多个动作
最重要
替换动作:
替换部分内容
sed -i '行号(如果不写代表所有行)s#原内容#替换后内容#列号(如果不写代表第一列)' 文件名
替换全部内容
sed -i '行号s#原内容#替换后内容#g' 文件名
vim中替换:/原内容/替换后内容/
但是如果///内还有/,则我们需要换别的符号,最好用###
- 有两种方法进行替换:指定行号(数字)或指定关键字(/ /)
追加动作:
sed -i '行号i\增加的内容' 文件名 -- 在指定行号处增加内容

注意:4i表示在原内容基础上的第四行里面插入,即原来的第四行往下移动变成第五行
总结一下sed的增删改查:
- 增:
sed -i '行号i\增加的内容' 文件名,表示在原内容的当前行增加 - 删:
sed -i '行号d' 文件名, 表示删除第n行的内容 - 改:
sed -i '行号s#原内容#修改后内容#列号' 文件名, 表示修改相应内容 - 查:
- 按行号查询:
sed -n '2p' 文件名 - 按关键字查询:
sed -n '/需要查找的内容/p' 文件名
- 按行号查询:
6.3.3 awk命令
awd功能强大,不仅可以行编辑,还可以列编辑
读取原理:
awk的命令格式:awk 参数 动作 文件名
其中参数主要表示-F(自定义列分隔符)
动作主要表示{print $n}

$0 整列
$1 第一列
$NF 最后一列
前置准备:
vim awk.txt
nihao awk1 awk2 awk3
nihao awk4 awk5 awk6
nihao awk7 awk8 awk9
awk '{print $n}' awk.txt -- 输出第n列
awk '{print $(NF-1)}' awk.txt -- 打印倒数第二列
awk '{print $1,$3}' awk.txt -- 打印第一,三列
其中“,”表示默认的列分隔符 -- 空格
awk -F':' '{print $n}' 文件名 -- 把默认分隔符从空格改为':',并输出第n列内容
环境变量:
NF 最后一行
NR 显示行号 e.g. awk '{print NR,$1}' 文件名 -- 输出第一列的内容,并显示行号
OFS 输出格式的列分隔符,缺省的是空格
awk 'NR==1 {print $1}' 文件名 -- 输出第一行第一列的内容
特殊案例:
总结一下awk命令
最主要记住的就是:
awk -F':' '{print $n}' 文件名
6.4 正则表达式
正则表达式,即REGEXP,接受大量数据来源,借助通配符等来标识数据流的信息,将匹配成功的数据留存下来以供使用
配合三剑客一起使用
6.4.1 通配符
-
单字符匹配
. -- 匹配任意单个字符 [] -- 匹配范围内的任意一个符号 [^] -- 上述取反 grep 'st..d' 文件名 -- 表示匹配st..d,中间任意两个字符 -
锚定匹配
^ -- 行首锚定 $ -- 行尾锚定 ^$ -- 空行 {} -- 表示里面的所有范围 -
其他匹配
.* -- 单个字符重复n次 () -- 分组匹配
6.4.2 限定符号
* -- 匹配前面的字符任意次
.* -- 任意长度的任意字符
? 匹配前面出现的单个字符0次或1次 e.g. hello hllo == he?llo
+ 匹配前面的字符至少出现一次
前置准备:
vim file.txt
ac
abbcd
abbbce
abbbbbc
abcf
egrep '^ab.*c$' file.txt -- 查找以ab开头c结尾的内容
6.5 文件查找

locate快而粗,find慢而准
-
locate:从数据库里找
apt install plocate locate conf -- 找数据库 updatedb -
find:实时查找
find -name 文件名 -- 指定文件名查找 find -iname 文件名 -- 忽略大小写指定文件名查找 find 路径 -name 文件名 -- 指定目录文件名查找 grep 'st..d' 文件名 -- 表示匹配st..d,中间任意两个字符 -
锚定匹配
^ -- 行首锚定 $ -- 行尾锚定 ^$ -- 空行 {} -- 表示里面的所有范围 -
其他匹配
.* -- 单个字符重复n次 () -- 分组匹配
6.4.2 限定符号
* -- 匹配前面的字符任意次
.* -- 任意长度的任意字符
? 匹配前面出现的单个字符0次或1次 e.g. hello hllo == he?llo
+ 匹配前面的字符至少出现一次
前置准备:
vim file.txt
ac
abbcd
abbbce
abbbbbc
abcf
egrep '^ab.*c$' file.txt -- 查找以ab开头c结尾的内容
6.5 文件查找

locate快而粗,find慢而准
-
locate:从数据库里找
apt install plocate locate conf -- 找数据库 updatedb -
find:实时查找
find -name 文件名 -- 指定文件名查找 find -iname 文件名 -- 忽略大小写指定文件名查找 find 路径 -name 文件名 -- 指定目录文件名查找


897

被折叠的 条评论
为什么被折叠?



