linux命令(vim编辑器,yum仓库,权限)

220 阅读13分钟

1.vim三个模式

1.输入模式

2.命令模式

3.末行模式

QQ截图20220727161216.png

输入模式:对文本进行编辑

命令跳转到输入模式 i 当前光标处插入

QQ截图20220727155822.png o 光标处下一行 O(大写)光标处上一行

QQ截图20220727155910.png

命令跳转到输入模式:
i (insert)在光标所在处输入
I 在当前光标所在行的行首输入
a (append)在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O(大写) 在当前光标所在行的上方打开一个新行

末行模式

1. 显示所有的命令选项: set all
2. 显示行号: set nu
3. 关闭行号: set nonu
4. 显示下划线:set cul
5. 关闭下划线:set nocul
6. 显示隐藏字符:set list
7. 加密:set key=你设置的密码
8. 接触密码:set key= (什么都不要输入,直接回车)
9. 自动缩进:set ai
10. 指定空格代替:tab set ts=n 一个tab=n个空格 ts=tabstop
11. 保存:w
12. 退出:q
13. 强制:!
14. 另存为: w 加上路径 w /opt/123
15. 把另一个文件加入到当前文件编辑: r或e 文件路径 r /etc/shadow
16. 读取命令结果,写入当前文件中: .!命令 .!date
17. 取消高亮 nohl

末行模式下查找替换(通式)

范围 s/旧的字符/新的字符/修饰符

范围

  1. 不写默认光标处当前行
  2. #,#某一行到某一行 #(数字) 2,20 2到20行
  3. % 代表全文

s 命令查找

  1. 分隔符(/ # @ )
  2. 旧字符 (你要找的或者你要替换的内容 (可以使用 * ^)
  3. 新的字符(你要替换旧字符的字符 (不可以 使用 *)
  4. 修饰符(i 不区分大小写 g 整行中所有命中的关键字都替换(如果不g 只替换整行中命中的第一个)
  5. 在配置文件当中 #号开头的行为注释不生效
在配置文件当中#号开头的行为注释不生效
给所有行的开头加上 #
% s/^/#/g
分隔符可以使用 / # @ 都可以
% s#/sbin/nologin#/zz/#g
把倒数第二行^换成#
$-1 s/^/#/
全文  s分隔符  
Linux 安装软件有 四种方式
源码编译安装 ( 二进制安装 )
源码编译安装: 程序是由开发人员 写代码一个一个单词 敲出来的 (windows打包好了)
源码: 编写好的 .c .java 文件
编译: 将人类写的 代码 翻译成二进制语言
安装: 将二进制保存在键盘上
缺点:
1. 如果编译出了问题,你看不懂源代码,无法解决
2. 安装过程复杂
3. 没有统一的管理人员
优点
1.契合系统兼容性强
2.如果你可以看懂源代码,修改新增功能
3.比较自由

Rpm安装 安装包管理工具 (约等于 360 软件管理家)

优点:
1统一的安装包格式
2.已经帮你编译完成
3.使用简单
缺点:
1.有依赖关系(安装 a 我需要先安) httpd
所以RPM 包根本不用

yum仓库 解决依赖关系而诞生的

1.安装简单

2.自动解决依赖关系

下载安装包: .rpm 结尾

挂载

linux 当中一切皆文件 无论硬件软件都要当成文件来使用,
硬件不能直接当成文件来使用的
再 加硬盘 只能在根分区下 进行操作
挂载: 将硬件和根分区下某一文件夹做关联, 相当于这个文件夹是进入硬盘的一个入口
光驱 挂载
硬盘章节会 详细讲解

mount 挂载

例子挂载光驱:
mount /dev/cdrom /mnt
命令 硬件设备 挂载点(系统内文件可以自定义)
例子:
[root@localhost Packages]#mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙
/dev/sr0 已经挂载到 /mnt 上

RPM

1.查询
对已安装程序查询
-qa 查看系统已安装的所有软件
[root@localhost Packages]#rpm -qa
-q 加上软件名字是否已安装了某软件
[root@localhost Packages]#rpm -q tree
tree-1.6.0-10.el7.x86_64
[root@localhost Packages]#rpm -q httpd
未安装软件包 httpd
-qi 软件包名 软件包的详细信息
[root@localhost Packages]#rpm -qi tree
-ql 软件名 该软件的所有文件列表
[root@localhost Packages]#rpm -ql tree
-qc 配置文件 更详细的分类
-qd 文档
-qf 软件名 该软件出自哪个安装包
[root@localhost Packages]#rpm -qf /bin/bash
bash-4.2.46-28.el7.x86_64
对未安装程序查询
1要知道包的全部名称
2rpm -qp i l c d

安装

[root@localhost Packages]#rpm -ivh tree-1.6.0-10.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:tree-1.6.0-10.el7 ####################### [100%]
i install 安装
v 显示详细过程
h 进度条 #######

会有依赖关系

[root@localhost Packages]#rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
错误:依赖检测失败:
httpd-tools = 2.4.6-67.el7.centos 被 httpd-2.4.6-67.el7.centos.x86_64 需要
[root@localhost Packages]#rpm -ivh httpd-tools-2.4.6-67.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-tools-2.4.6-67.el7.centos ################################# [100%]
[root@localhost Packages]#rpm -ivh httpd-2.4.6-67.el7.centos.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-67.el7.centos ################### [100%]
卸载
rpm -e 软件名 (缩写)
例子:
rpm -e httpd

升级
rpm -U 软件名 (要升级包)

辅助选项:
--force、 强制安装
--nodeps 不检测依赖关系

检测包的安全性,完整性
[root@localhost rpm-gpg]#rpm --import /mnt/RPM-GPG-KEY-CentOS-Testing-7
编译安装
三步
第一步 ./configure 软件作者写的脚本(安装包中会有)
1. 可以更改你的安装路径,
2. 选择你要安装软件的功能
3. 检测你的安装环境
第二步 make 将源代码 编译成二进制语言,让电脑可以看懂
常见的编译软件 gcc gcc-c++
分区 0731 的第 21 页
第三步 make install 将二进制 数据写入硬盘,安装进系统
mkdir /app #建立文件夹
cd /data
tar xf httpd-2.4.29.tar.bz2 #解压源码包
cd httpd-2.4.29/
yum install apr* gcc* pcre* -y #安装依赖环境需要的 工具包
./configure --prefix=/app #选择安装目录
make -j2 #编译 j2 带表使用2颗cpu编译
make install #写进硬盘
/app/bin/apachectl start 开启服务
ss -ntap |grep 80 有就没问题
/app/bin/apachectl stop 停止服务
绝对路径 别名 内部 hash 外部
命令执行过程
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
/app/bin/apachectl 绝对路径的方式去运行
ln -s /app/bin/apachectl /usr/local/ 软连接
[root@localhost httpd-2.4.29]#systemctl stop firewalld
[root@localhost httpd-2.4.29]#setenforce 0

如果make出错 要删除这个文件后再 make 不然一直报错

QQ截图20220731150726.png

yum客户端安装的过程

1.客户端第一次连接会将元数据文件下载下来

2.根据元数据中 的依赖关系和包的路径,将所需要的安装包全部下载下来,放到缓存目录

3.安装结束后,将缓存目录中的安装包全部删除

yum 是c/s 架构

c client

s server

服务端(Packages repodata)

需要一台服务器来提供服务

成为服务器一定要有以下两个文件夹Packages repodata
1.安装包(
Packages 不固定,但是同一都叫Packages )

2.元数据 (repodata 固定的)
A. 安装包的路径
B. 依赖关系
C. 权限

配置文件 不建议修改 保持默认

[root@localhost yum]#vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever #下载安装包的目录
keepcache=0
debuglevel=2
logfile=/var/log/yum.log #日志文件
exactarch=1
obsoletes=1
gpgcheck=1 #是否检测包的安全性
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23
&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
客户端

客户端需要配置一个文件指明服务器的路径
客户端的配置文件固定位置在 /etc/yum.repos.d/
注意: 客户端配置文件 必须以 .repo 结尾
[base] ##仓库的名字 无特殊需求,子定义
name=CentOS-$releasever - Base ###仓库的描述 自定义
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ ###仓库服务器的路径
gpgcheck=1 ####检验包的安全性完整性
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ###如果gpgcheck=1 需要指明 验证文件的位置
enabled=1 ###代表启用该仓库 enabled=0 代表停用该仓库不写默认开启

baseurl 有四种表示方式
file:// 本地的路径(当前系统的路径)
http:// 网页的形式
https:// 加密
ftp:// 文件共享服务来实现

默认的仓库路径 需要你可以访问互联网

很多公司 默认不让你连互联网

搭建一个本地仓库:

服务端需要以下内容:

安装包:1通过挂载 2复制

元信息:1自行生成 2复制

客户端需要:

手写配置文件

mount /dev/sr0 /mnt/ #挂载
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak/
vim local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1
yum clean all #清除缓存
yum makecache #重新建立元数据

报错

[root@localhost ~]#rm -rf /var/run/yum.pid

QQ截图20220731151515.png

ss 系统活动的状态
-n 以数字形式显示
t tcp 协议
u udp协议
a 所有的详细信息
p 端口

扩充:

光驱里的光盘有两种模式(涉密单位)

1.类似于usb模式 u盘

2.一次性写入模式

linux 当中使用命令的 修改的操作 基本上都是一次性的,重启会失效。

解挂载

umount /挂载的目录

注意 在挂载目录下 解挂载

安装软件需要 软件包

rpm *.rpm

编译需要什么 源码包 *.tar.gz *.tar.bz

RPM-GPG-KEY-CentOS-7 验rpm包完整性和安全性

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

rpm -K httpd-2.4.6-67.el7.centos.x86_64.rpm

httpd-2.4.6-67.el7.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 确定
查看系统的硬件信息:
1.查看内存:free -h友好显示
Swap: 当机器的内存不足 将硬盘上的空间当做内存使用。
2.查看硬盘 lsblk fdisk
A. 大小
B. 读性能
C. 写性能
查看磁盘的读写性能: iostat

3.查看cpulscpu

4.系统架构:arch

5.内核版本:uname -r
[root@localhost /]#uname -r
3.10.0-693.el7.x86_64
[root@localhost /]#cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 

权限

3A

认证方式:

A(Authentication): 验明正身 (A.账户密码一一对应,B.生物特征 C.短信验证)

A( Authorization): 授权 (什么用户拥有什么样的权限)

A(Accounting): 审计 (什么用户做了什么操作,导致什么后果)

1. 账户的种类:
2. 如何超级管理员:
3. 如何按要求添加用户(组)
4. 如何改密码
5. 如何对已有用户(组)修改基本信息
6. 用户权限

用户的种类:

1.超级管理员: 拥有最高权限的账户(默认叫做root)可以正常登录 人可以使用

2.普通用户: 权限受限的用户 可以正常登录 人可以使用

3.程序用户: 不可以正常登录,只给程序使用,人不能用

系统启动的时候, 没有登录用户,

程序用户,专门给程序使用的用户,无需登录,直接启动程序

程序用户是给程序使用 , 普通用户超级管理员用户是给人使用

不登录人使用的用户,只运行一些程序用户

只给运行的程序分配 程序用户

w命令看到当前登录的用户
[root@localhost data]#w
09:31:34 up 启动时间
9:23, 3 users, 当前有三个用户登录
load average: 0.00, 0.01, 0.05 cpu使用情况 5s 10s 15s
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
用户 登录方式 从哪里登录 登录时间 进程 进程 进程 当前运行的进程
root pts/0 192.168.91.1 08:53 6.00s 0.17s 0.00s w
root :0 :011 ?xdm? 2:39 0.17s /usr/libexec/gnome-session-binary --sessio
root pts/2 :011 22:27m 0.02s 0.02s bash
并没有rpc 这个用户
rpcuser 1064 0.0 0.0 44512 160 ? Ss 00:08 0:00 /usr/sbin/rpc.statd
组的种类 一个用户一定要有一个基本组

1.基本组: 一个用户一定要有一个基本组 ,且只有一个

2.附加组: 一个用户可以没有附加组,一个用户可以有多个附加组
分别基本组和 附加组
[root@localhost data]#id zhangsan
uid=1000(zhangsan) gid=1000(zhangsan) 组=1000(zhangsan),0(root)
用户排在第一个的组是基本组,后面的都是附加组
uid gid
uid :系统用来识别用户的唯一身份标识
gid: 系统用来识别组的唯一身份标识

uid 只能是整数 0-60000 不能重复

超级管理员 uid 一定是0

识别是否为超级管理员只看uid 是否为0
id + 用户名
[root@localhost data]#id root
uid=0(root) gid=0(root) 组=0(root)

uid 的范围centos7
超级管理员: uid为0
程序用户uid 范围 : 1-999
普通用户uid 范围 :1000 - 60000

修改uid 的范围(补充)

[root@localhost data]#vim /etc/login.defs

/etc/passwd 存放用户信息

每个字段用冒号隔开
ky22:x:1003:1003:nginx:/home/ky22:/sbin/nologin
第一字段:用户名
第二字段:密码占位符
第三字段:uid
第四字段:组id
第五字段:备注信息
第六字段:家目录位置
第七字段:默认shell程序

etc/shadow 存放密码信息

zhangsan:$6$3/O6NuAjdnApLp2F.V1n.::0:99999:7:::

第一字段:用户名
第二字段:加密后的密码 如果为 * !! 无法登录
第三字段:上一次修改密码时间,数字的含义为 从1970-1-1 到改密码的时间 一共经历多少天
第四字段:最小修改密码间隔时间 如果是0 可以随意修改, 7代表7 天后才可以修改
第五字段: 密码有效期 默认99999273年,设置为 7 代表7天要求你重新设置密码
第六字段:密码到期提醒时间 设置为7 代表密码到期前7天会提示你
第七字段:密码过期后的宽限天数 设置为10 表示密码到期后还可以使用10天
第八字段:用户失效时间 同第 3 个字段一样,使用自 197011 日以来的总天数作为账户的失效时间 到期后无法登录
第九字段:保留字段

useradd 添加用户

通式: useradd [选项].... 用户名
-u 指定uid
-g 指定基本组(组名和gid都可以)
-G 指定附加组(组名和gid都可以)
-d 指定家目录
-M 不建立家目录
-s 指定默认登录shel
-e 指定用户失效时间 可使用 YYYY-MM-DD 的日期格式。
-r 建立系统用户

当建立用户时不加选项
1.会按顺序使用uid号
2.会建立一个 和用户名同名的基本组
3.按顺序使用gid
4.会在/home 建立一个和用户名同名的家目录
5.会将用户信息保存在/etc/passwd  文件中
[root@localhost zhangsan]#useradd -M -s /sbin/nologin lijiu
[root@localhost zhangsan]#tail -n1 /etc/passwd

修改密码 passwd

passwd 用户名
改密码 交互
[root@localhost zhangsan]#passwd lisi
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

passwd [选项] 用户名

-l 锁定用户 不让登录
-u 解锁
-d 清空密码 无需使用密码直接登录
-S(大写) 查看锁定状态

[root@localhost ~]#passwd -u lisi
解锁用户 lisi 的密码。
passwd: 操作成功
[root@localhost ~]#passwd -d lisi
清除用户的密码 lisi。
passwd: 操作成功

usermod 修改已有用户的属性

-l(小写L) 修改用户登录名
-L (大写) 锁定用户
-U (大写) 解锁用户
-u(小写) 指定uid
-g 指定基本组(组名和gid都可以)
-G 指定附加组(组名和gid都可以)
-d 指定家目录
-M 不建立家目录
-s 指定默认登录shel
-e 指定用户失效时间 可使用 YYYY-MM-DD 的日期格式。
[root@localhost ~]#usermod -s /sbin/nologin lisi
[root@localhost ~]#tail -n1 /etc/passwd
lisi:x:1002:1002::/home/lisi:/sbin/nologin
[root@localhost ~]#usermod -u 10000 lisi
usermod: user lisi is currently used by process 16622
[root@localhost ~]#usermod -u 10000 lisi
[root@localhost ~]#tail -n1 /etc/passwd
lisi:x:10000:1002::/home/lisi:/sbin/nologin

删除用户 userdel

-r 连家目录一起删除
[root@localhost home]#userdel zhangsan
[root@localhost home]#ll
总用量 0
drwx------. 3 1002 lisi 78 8 26 2021 hehe
drwx------. 14 lisi lisi 271 7 31 11:10 lisi
drwx------. 3 mysql mysql 78 8 25 2021 mysql
drwx------. 5 1000 1000 128 8 27 2021 zhangsan
[root@localhost home]#userdel -r lisi
[root@localhost home]#ll
总用量 0
drwx------. 3 1002 1002 78 8 26 2021 hehe
drwx------. 3 mysql mysql 78 8 25 2021 mysql
drwx------. 5 1000 1000 128 8 27 2021 zhangsan
(1chown
作用:更改文档的所有者
语法:#chown  [-R]  username  文档路径
案例1:将刚才root用户创建的oo目录所有者更改为test
a. 切换到 root目录 su
b#chown test  oo/
读取r:允许查看文件内容、显示目录列表

写入w: 允许修改文件内容,允许在目录中新建、移动、删除文件或子目录

可执行x:允许运行程序、切换目录

u 属主(user);

g 属组(group);

o 其他人(other)。

a 所有人 all(u+g+o)

QQ截图20220804094338.png 微信图片_20220803231121.jpg

rw- 文件的主人 属主  4

r-- 文件所属的组 属组  2

r-- 其他人     1
注意:
1. 文件夹的最小权限 是 x 一定要带上否则无法 进行任何操作,超级管理员不受影响
2. 删除一个文件和所在文件夹权限有关和自身没关系。注意超级管理员

|权限 |  8进制|
|r    | 4 |
|w    | 2 |
|x    | 1 |

chown .chmod . chgrp

格式
chown 属主 文件或目录         //修改属主
chown :属组 文件或目录        //修改属组
chown 属主:属组  文件或目录    //修改属主和属组

[root@localhost jlx]# ll 1.txt ////查看文件1.txt的归属,属主为root,属组为root组
-rw-r--r--. 1 root root 0 81 13:35 1.txt
[root@localhost jlx]# ll 1.txt //查看归属,修改成功
-rw-r--r--. 1 jlx jlx 0 81 13:35 1.txt

chgrp  只能修改属组
[root@localhost ~]# ls -dl jlx     //查看jlx目录的归属,属主和属组为都root组
drwxr-xr-x. 2 root root 32 81 14:26 jlx
[root@localhost ~]# ll jlx        //jlx目录下的文件,属主和属组都为root
总用量 0
-rw-r--r--. 1 root  root  0 81 13:35 1.txt
-rw-r--r--. 1 root root 0 81 14:26 2.txt
[root@localhost ~]# chgrp -R jlx jlx      //将jlx目录的属组修改为jlx,同时递归修改目录下的所有文件
[root@localhost ~]# ls -dl jlx      //查看jlx目录的属组已变为jlx
drwxr-xr-x. 2 root jlx 32 81 14:26 jlx
[root@localhost ~]# ll jlx        //查看jlx目录下所有文件的属组也都变为jlx
总用量 0
-rw-r--r--. 1 jlx  jlx 0 81 13:35 1.txt
-rw-r--r--. 1 root jlx 0 81 14:26 2.txt

chmod
[root@localhost jlx]# ll 1.txt    //查看文权限,属主为读写,属组和其他人只有读权限
-rw-r--r--. 1 jlx jlx 0 81 13:35 1.txt 
[root@localhost jlx]# chmod 666 1.txt   //设置属主、属组、其他人的权限都为读和写 
[root@localhost jlx]# ll 1.txt   //查看文件权限,所有人都拥有读写权限    -rw-rw-rw-. 1 jlx jlx 0 8月 1 13:35 1.txt
[root@localhost jlx]# chmod 744 1.txt //设置属主拥有读写执行权限,属组和其他人只拥有读权限 
[root@localhost test]# ll 1.txt -rwxr--r--. 1 jlx jlx 0 8月 1 13:35 1.txt

chmod(更改模式)命令控制属主、组以及既不是属主也不属于与文件关联的组的所有其他用户的文件许可权。

chmod 命令可以以八进制(例如 755644 等)和符号(例如 u+rwxg-rwxo=rw)格式设置权限。

4个特殊权限

#suid
[root@localhost aa]#which passwd
/usr/bin/passwd
[root@localhost aa]#ll /usr/bin/passwd
#此处s表示当使用这个命令程序时,把当前用户当成文件的所属主
-rwsr-xr-x. 1 root root 27832 610 2014 /usr/bin/passwd
[root@localhost aa]#which vim
/usr/bin/vim
[root@localhost aa]#chmod u+s /usr/bin/vim
#给vim加上suid权限,代表所有用户可以使用vim打开并编辑所有文件
[root@localhost aa]#ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2289640 82 2017 /usr/bin/vim
#SGID
[root@localhost aa]#chmod g+s /usr/bin/vim
[root@localhost aa]#ll /usr/bin/vim
-rwxr-sr-x. 1 root root 2289640 82 2017 /usr/bin/vim
# Sticky 位
#具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
#在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
#sticky 设置在文件上无意义
#Sticky权限设定:
chmod 0+t DIR
chmod 0-t DIR
[root@localhost aa]#chmod o+t /opt/aa
# 添加Sticky 位
[root@localhost opt]#chmod o-t /opt/aa
#减少Sticky 位

总结 面试题:

面试题:

请说出你工作运维当中常用的 20个命令
find grep mount sed awk free fdisk lsblk iostat
面试题:
文件夹 一定要有执行权限
你去切知道文件夹的名字才能
执行 cp /etc/issue /data/dir 所需要的最小权限?
/bin/cp  需要x权限
/etc/    需要x权限
/etc/issue/   需要r权限
/data/     需要x权限
/data/dir    需要w,x权限