当前位置:   article > 正文

RHCE redhat学习笔记_linux rhce rhel知识点 笔记 note

linux rhce rhel知识点 笔记 note

RHRE redhat学习笔记,完善中----

第一章 Linux系统介绍及安装

1、Linux 介绍

1.1 linux 发展史

上世纪六十年代贝尔实验室(Bell)、麻省理工学院(MIT)以及通用电气(GE)联 合开发裸露信息计算系统 Multics

  • 1970 年 Ken Thompson 开发了 Unix
  • 项目11974 年贝尔实验室公开 Unix,广泛流行于各大高校
  • 1982 年 AT&T 分解后 Unix 开始商业收费
  • 1984 年 Richard Stallman 发起 GNU 源代码开发计划并制定了 GPL 许可协议
  • 1987 年 GNU 计划获得重大突破——gcc 编译器发布
  • 1991 年 10 月,芬兰赫尔辛基大学的在校生 Linus Torvalds 编写出 Linux 内 核雏形,该系统基于 GNU GPL 开源许可协议,迅速得到 GNU 计划支持
  • 1994 年 1 月,Bob Young 基于 linux 内核、GNU 工具发布红帽系统

1.2 开源许可证

  1. GUN GPL(GNU General Public License,GNU 通用公共许可证):只有软件中包 含了遵循 GPL 协议的代码,该软件就必须也遵循 GPL 许可协议且开源;GNU GPL 协议遵循自由、开源的原则。
  • 以任何目的运行此程序的自由;
  • 再发行复制件的自由;
  • 改进此程序,并公开发布改进的自由
  1. LGPL(GNU Lesser General Public License),LGPL 是 GPL 的一个为主要为类库 使用设计的开源协议。和 GPL 要求任何使用/修改/衍生之 GPL 类库的的软件必须 采用 GPL 协议不同。LGPL 允许商业软件通过类库引用(link)方式使用 LGPL 类库 而不需要开源商业软件的代码。

  2. BSD(Berkeley Software Distribution,伯克利软件),可以自由的使用,修改 源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD 协议的代码,或则以 BSD 协议代码为基础做二次开发自己的产品时,需要满 足三个条件:

    • 如果再发布的产品中包含源代码,则在源代码中须带有原代码中的 BSD 协议
    • 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明 中包含原来代码中的 BSD 协议。
    • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
  3. Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类 似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作 为开源或商业软件)。需要满足的条件也和 BSD 类似:

    • 需要给代码的用户一份 Apache Licence
    • 如果你修改了代码,需要再被修改的文件中说明。
    • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协 议,商标,专利声明和其他原来作者规定需要包含的说明。
    • 如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
  4. MIT 是和 BSD 一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就 是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还 是以源代码发布的。

  5. 红帽软件发行顺序:
    2019年之前:
    最先发布 Fedore-----红帽的实验田
    第二发布 RHEL------红帽的企业级操系统
    最后发布 CentOS Linux----社区的企业级操作系统
    2019年之后:
    Fedore-----红帽实验田
    CentOS Stream----第二次发行
    RHEL------最后发行

  6. linux运维岗位工作要求
    负责服务器的维护,平台和集群的维护
    参与新上线系统流程设定、系统需求。
    负责所维护系统事件、问题处理、上线变更评审及操作。
    根据系统运行情况、编写并根据实际情况进行维护。

1.3 关闭系统命令

  1. shutdown 安全地关闭计算机,使用权限是 root 用户
    -h:关机后关闭电源
    -r:关机后打开电源
    -t:指定执行命令的时间
    -k:发送警告信息给登录者
    -F:在重启时强迫 fsck
  2. halt 关闭系统,使用权限是 root 用户
    -f:强制关机,不调用 shutdown 命令
    -n:防止 sync 调用,关机前不将内存缓冲区数据写入硬盘
    -d:关闭系统,不留下记录
    -w:不关系统,留下/var/log/wtmp 记录
    -i:关机前关闭所有网络接口
  3. reboot 重启计算机,使用权限是 root 用户
    -n:防止 sync 调用,重启前不将内存缓冲区数据写入硬盘
    -d:重启系统,不留下记录
    -w:不重启系统,留下/var/log/wtmp 记录
    -i:重启前关闭所有网络接口

2 系统安装

安装准备:
用VMware 安装redhat
vmware workstation 下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
安装操作系统: 需要有安装介质(ISO镜像文件) RHEL8.4
rhel-8.4-x86_64.iso (官网下载
获取ISO的方式:

  1. 访问access.redhat.com 注册账号 (不要随便写 手机号、邮箱、地址)
  2. 访问https://developers.redhat.com/ 红帽的开发者中心 用你刚刚注册的账号登录一下 开发者中心 是为了激活红帽的开发者订阅 可以激活16个操作系统 可以无限次的下载红帽的ISO
    物理机的安装方式: 下载ISO的文件以后,将这个文件刻录到光盘或者是USB设备(U盘),然后将启动设备连接到你的机器,设置物理机通过这个启动介质来启动

2.1 系统分区

/boot 系统引导分区、内核及启动文件,内核100+M 算上升级也就300+M 500M足够
/swap 内存交换分区、物理内存8G以下,建议与物理内存同等大小
/ 根分区
KDMP: 是Linux 内核崩溃的保护机制(类似于飞机上的黑匣子) KDUMP会在内核崩溃之前将内核挂载起来,收集崩溃前的系统运行数据将其保存到文件,通过分析这个文件得出这次故障的原因,KDUMP 运行在独立的内存中

2.2 安装选项

2.2.1 安装模式选项

1、 安装(学习使用建议该选项)
2、 测试安装介质并安装系统(生产环境建议使用该选项,安装前先会先检测iso是否完整(按esc按键可跳出检测),避免安装一半报错而浪费时间)
3、 救援模式

2.2.2 语言选项

安装过程中使用的语言,建议保持默认,中文可能会出现乱码报错而无法排查

2.2.3 安装选项
  1. Keyboard:键盘布局 建议默认
  2. Connect to RedHat:连接到红帽,使用开发者账号连接红帽后可订阅激活系统(正版)
  • Authentication:连接类型,用户名密码/Key
  • Purpose:标记服务器使用类型学
  • Insights:连接到红帽先知平台
  • installation Destination:硬盘分区,
  • Automatic:自动分区
  • Custom:手动分区
  • Stadard Partition:标准分区(建议选项)
  1. boot:启动引导分区:内核引导文件 内核大小(1-200M左右)的2-3倍即可
  2. swap:内存交换分区:1-8g内存的2倍,16-32G建议8g以上即可,64G以上给32G即可
  3. / 根分区:所有文件的开始,分配所有剩余容量即可
  • LVM:逻辑卷分区
  • LVM Thin Provisioning 精简逻辑卷
  1. Language Support:安装后的操作系统语言,建议保持默认,中文可能会出现乱码报错而无法排查
  2. Installation Source:安装介质,一般保持默认(光盘)
  3. KDUMP: 内核崩溃日志收集,独立内存运行,类似飞机黑匣子,生产环境建议开启
  4. Time & Date:时区(默认纽约),建议更改为上海(即中国的时区)
  5. Software Selection:安装软件选项
  • Server with GUI:带图形化的操作系统界面
  • Server:服务版
  • Minimal Install:最小化安装
  • Workstation:工作站
  • Custom Operating System:定制化操作系统
  • Virtualization Host:虚拟化主机
  1. Netword & Hose:网络配置及主机名设置
  2. Secuity Policy:安全规则,选择规则后会按照规则策略自主配置防火墙/Selinux等(ANSSI(法国安全局))
  3. User settings:设置用户,设置root用户密码或者创建新普通用户
  • Make this user administrator:当前用户提升为管理员
  • Require a password to use this account :设置密码
  1. Licensing:许可协议
  2. System:注册到红帽

第二章 Linux的基本使用

1 系统初始化

语言:保持默认(English)
Typing:保持默认
Privacy:是否开启隐私位置:建议关闭
Online Accounts:绑定社交账号,跳过
Getting Starte:新手教程,Gnome桌面使用说明

2 登录方式

切换控制台:ctrl-alt+Fx(1-6)
切换图形界面:ctrl+alt+[1-2]
切换文本控制台:ctrl+alt+[3-6] 在文本控制执行startx可以切换到图形控制台(而是打开了GNOME的程序)

2.1 图像控制台

X Window System提供图形框架
KDE和GNOME提供桌面环境
gnome-terminal桌面工具

快捷键功能快捷键功能
ctrl+shift+t创建标签页ctrl+PgUp/PgDn在标签页之间切换
alt+[123…]在标签页之间切换ctrl+l清屏
ctrl+shift+c复制ctrl+shift+v粘贴

2.2 虚拟控制台(文本界面)

Welcome to Alibaba Cloud Elastic Compute Service !
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 25 18:29:11 2023 from 
[root@ycf02 ~]# 
  • 1
  • 2
  • 3
  • 4

2.3 cockpit控制台登录(web控制台)

CentOS8和redHat8后默认安装了cockpit
开启cockpit网页控制台:systemctl enable --now cockpit.socket
查看IP信息:ifconfig
访问网页控制台:https://ip地址:9090

3 系统激活与取消

1、激活

[root@hostneme ~]#subscription-manager register --username 红帽开发者账号 --password 红帽密码 --auto-attach
  • 1

2、取消激活

[root@hostneme ~]# subscription-manager unregister
  • 1

4 命令提示符/操作提示符

[root@hostneme ~]#
  • 1
root:当前登录的用户
@:分隔符
hostneme :主机名缩写
~:当前目录(~表示用户家目录,),及当在用户的家目录
#:特权提示符,#表示超级用户,$表示普通用户
su - 切换用户	[root@hostneme ~]# su - admin   su是仅切换用户,su - 登录到这个用户(完全登录到这个用户)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第三章 运行命令及获取帮助

Linux中存在无数个命令,当我们不知道这个命令有什么功能或者怎么用的时候可以查询帮助文档进行学习,linux中所有的命令语法遵循以下格式:

command options arguments
  • 1
Command(命令)   某个功能,列如ls命令
Options(选项)   对命令的修饰和功能的补充
 -  短格式:例如 ls 中的 -a
 -- 长格式:例如 ls 命令中的--all
  区别:
         通常短格式是长格式的缩写,但并非所有的短格式都有对应的长格式
         短格式可以缩写在一起,例如ls -a -s 等同于 ls -al 而 ls --all --szie 长格式不能缩写
Arguments(对象)   想要操作的对象,例如 ls -a /opt命令中的/opt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

项与项之间用空格分隔,多个命令用‘;’分隔

[root@hostneme ~]# ls -a;df -h
.               btmonitoragent.sh  out.txt
..              .cache             .pip
backup.tar.bz2  .config            .pydistutils.cfg
.bash_history   .cshrc             .ssh
.bash_logout    findfiles          .tcshrc
.bash_profile   .lesshst           .viminfo
.bashrc         .mozilla           .wget-hsts
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        820M     0  820M   0% /dev
tmpfs           838M  200K  838M   1% /dev/shm
tmpfs           838M  476K  838M   1% /run
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

1 获取帮助

1.1 Whatis command

显示命令的简短描述,注意,新系统需要先执行mandb收集索引信息后才可用

[root@hostneme ~]# mandb
Purging old database entries in /usr/share/man/overrides...
Processing manual pages under /usr/share/man/overrides...
Purging old database entries in /usr/share/man...
Processing manual pages under /usr/share/man...
Purging old database entries in /usr/share/man/overrides.......
.......

[root@hostneme ~]# whatis ls
ls (1)               - list directory contents
ls (1p)              - list directory contents
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

1.2 Command –help

passwd [OPTION...]  <accountName>
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
  • 1
  • 2
  • 3

命令本身的帮助,通常由编写该命令的作者提供,列出命令常见语法和参数,支持大部分命令,特殊符号解读如下:

  • 在[]中的参数是可选的,也可以省略。
  • 大写字母必选
  • <> 中表示变量的都是必选,但拥有默认值
  • 表示一个列表,(即可以接多个)
  • + 表示 固定格式,如果在命令出现了 + ,那后续内容一定有一段解释说明,列如:date +%F
  • a|b|c 表示a或b或c
  • - abc 表示任意-a,-b或者-c 的任意组合

1.3 man

man:查询轻量级帮助
使用方法:
man [章节] 命令或者配置文件

[root@hostneme ~]# man date
DATE(1)                                   User Commands                                  DATE(1)

NAME
      date - print or set the system date and time

SYNOPSIS
      date [OPTION]... [+FORMAT]
      date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

DESCRIPTION
      Display the current time in the given FORMAT, or set the system date.

      Mandatory arguments to long options are mandatory for short options too.

      -d, --date=STRING
             display time described by STRING, not 'now'

      --debug
             annotate the parsed date, and warn about questionable usage to stderr

      -f, --file=DATEFILE
             like --date; once for each line of DATEFILE

      -I[FMT], --iso-8601[=FMT]
             output  date/time  in  ISO  8601  format.  FMT='date' for date only (the default),
             'hours', 'minutes', 'seconds', or 'ns' for date and time to the  indicated  preci‐
             sion.  Example: 2006-08-14T02:34:56-06:00
···········
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

man -k 关键字 查询所有包含关键字的章节

[root@ycf01 ~]# man -k pass
jose-jwe-enc (1)     - Encrypts plaintext using one or more JWK/password
chage (1)            - change user password expiry information
chgpasswd (8)        - update group passwords in batch mode
chpasswd (8)         - update passwords in batch mode
clevis-luks-pass (1) - Extracts the passphrase used for binding a particular ...
cracklib-check (8)   - Check passwords using libcrack2
create-cracklib-dict (8) - Check passwords using libcrack2
crypt (5)            - storage format for hashed passphrases and available ha...
endpwent (3)         - get password file entry
endspent (3)         - get shadow password file entry
tpm2_policypassword (1) - Enables binding a policy to the authorization value...
fgetpwent (3)        - get password file entry
fgetpwent_r (3)      - get passwd file entry reentrantly
fgetspent (3)        - get shadow password file entry
fgetspent_r (3)      - get shadow password file en
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

手册结构

  • 结构名称 描述
  • name 名称及简要说明
  • synopsys 格式使用方法说明
  • description 详细说明
  • options 可用选项及其介绍说明
  • examples 示例,附带简单说明
  • files 相关文件
  • environment 环境变量
  • seealso 其他帮助参考
  • 产品文档位置:/usr/share/man/

章节 翻译 是否常用
1、user commands 用户命令:可执行的程式或是shell 指令 是
2、system calls 系统调用:核心所提供的函数
3、library functions 一般函数以及库
4、special files 系统设备。
5、fuke firmats 文件格式:档案格式与协定,如 /etc/passwd 是
6、games 游戏
7、conventions 各种软件包、杂项
8、maintenance commands 系统管理员命令:通常是管理者 root 专用的 是
9、linux kernel api 内核帮助信息

基本操作
操作 结果

  • 空格键 向下翻页
  • PagueUP/PagyeDown 向上/向下翻页
  • 向上向下箭头/回车键 向下滚动
  • g/G 回到开头/末尾
  • /string 搜索string关键字
  • n/N 在关键字之间向下向上查找
  • q 退出帮助手册

1.4 pinfo/info

查询重量级帮助,使用方式类似man
操作 结果

  • PagueUP/b 向上滚动一个屏幕
  • PagyeDown/空格 向下滚动一个屏幕
  • d 显示主题目录
  • u 显示主题的父节点
  • 向上向下箭头 向上向下滚动到下一个超链接
  • enter 打开光标处的主题
  • q 退出帮助手册

1.5 /usr/share/doc

安装软件包后在本地目录查找帮助文档
/usr/share/doc/[pachagename]

1.6 红帽官方产品文档

查询红帽解决方案知识库:/https://access.redhat.com

2 常见命令

2.1 cal 显示日历

2.2 passwd 修改密码

root密码执行passwd可以修改任意用户密码,不需要验证原来的密码且不受密码规约限制。普通用户只能修改自己的密码,需要验证旧密码且受密码规约限制

#passwd 修改当前用户密码
#passwd student 修改student的密码
#echo 12345|passwd --stdin bobo 明文修改bobo的密码为12345

2.3 id 查看用户信息

查看用户信息:id username

[root@ycf01 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
  • 1
  • 2

2.4 su切换用户

su 仅切换到用户本身,无法获取到用户变量
su – 登录到这个用户,可以获取到用户变量
  • 1
  • 2

2.5 vim 文本编辑

语法:vim fileName

  1. 按【i】进入编辑模式,然后可以输入编辑文字
  2. 按【esc】退出编辑模式
  3. 按【:】进入末行模式
  4. 输入【wq】回车保存并退出(如果文件不存在会自动创建),【q!】不保存并强制退出
    更多详情见【vim高级文本编辑器】

2.6 History 查看所有历史记录

  • !n调用第n条历史记录
  • !string调用最近一条以string开头的命令
  • !$ 调用最后一条命令的参数
  • ctrl+r 搜索历史记录
  • alt+. 调用上一条命令的最后一个参数
  • history -c 清除内存中的历史记录

2.7 Hostnamectl 修改主机名

hostnamectl set-hostname newname

2.8 tail 默认显示文件后 10 行

-n 指定显示文件后 n 行
-c 指定显示文件后 n 个字节
-q 隐藏文件名
-v 显示文件名
-f 循环读取,常用来查看动态日志 tail -50f filename 动态刷新显示文件最后50行
-n 3 显示文件后 3 行 tail -n -3 显示文件后 3 行
-n +3 显示文件除去前 3 行的所有内容

2.9 date

date +%s 1970-01-01 00:00:00到当前时间的秒速

2.10 bc

调用计算器

第四章 文件系统组成和基本操作

1 文件及目录权限

-rw-r–r–. 1 root root 29 Oct 31 17:55 ts.t
drwxr-xr-x. 4 root root 128 Feb 13 20:33 /opt

当系统中的进程去访问文件时会继承用户的UID和GID 
如果用户的UID匹配了文件的UID则 适配UID权限
如果用户的GID匹配了文件的GID 则 适配GID权限
如果用户的UID和GID都不能匹配文件的UID和GID则适用其他人的权限
root用户可以修改所有人的文件,但是普通用户只能修改自己的文件(无视权限)
因此我们通常将文件得UID称为文件的拥有人 文件的GID称为文件的拥有组

    -:文件类型,-表示普通文件,d表示目录,|表示连接文件
	rw-:拥有人的权限
	r--:拥有组的权限
	r--:其他人拥有的权限
	.:Selinux标签。.表示该文件/目录受到Selinux保护
	1:表示文件的硬链接数
	root:拥有人
	root:拥有组
	29:文件大小
    Oct 31 17:55:文件最后一次被修改的时间戳
	ts.t:文件名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2 创建/删除 文件/目录

mkdir 创目录:-p 递归创建目录(上级目录不存在会先创建上级目录)	
[root@ycf02 ~]# mkdir -p /tmp/dir
  • 1
  • 2

touch filename 创建文件:当文件不存在时创建,存在时刷新文件时间挫

stat filename  查看文件时间挫	
[root@ycf02 ~]# stat Desktop
  File: Desktop
  Size: 6               Blocks: 0          IO Block: 4096   directory
Device: fd03h/64771d    Inode: 20239092    Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-06-02 03:00:03.468115956 -0400
Modify: 2023-06-02 02:59:44.891116854 -0400
Change: 2023-06-02 02:59:44.891116854 -0400
 Birth: -
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

rmdir 可以删除空目录,非空目录不会被删除(安全的删除目录)

rm 删除文件及目录		
rm [options] <file>.

示例
[root@ycf02 ~]#rm -I file   (交互模式)
[root@ycf02 ~]#rm -r dir    (递归删除目录及目录内文件)
[root@ycf02 ~]#rm -f file   (强制删除,不提示)
[root@ycf02 ~]# rm -rf /tmp/* #强制递归删除/tmp的所有文件和目录

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3 目录

3.1 文件目录树

单根倒树形结构(有且只有一个根目录[/])
常见目录
在这里插入图片描述

目录说明
/根目录
/root超级用户家目录
/home/username普通用户家目录
/usr安装的软件,共享库等目录重要的子目录
/usr/bin用户命令 普通用户可以执行的命令
/usr/sbin系统管理员命令
/usr/local本地自定义软件安装目录
/etc系统配置文件
/avr系统服务的数据文件,例如数据库文件,日志文件及网站内容等
/tmp系统临时文件
/boot系统启动所需文件,内核文件(建议:不要放任何文件)
/dev设备文件,包含系统的硬件设备,(cpu、内存、键盘、硬盘等等)以文件的形式供内核调用
/proc和/sys易失性存储:系统当前运行状态,当前文件夹关机重启后会被清空,存放进程的目录,(请勿存放重要文件
说明:在Linux7或者更高版本中/bin和/usr/bin,/sbin和/usr/sbin,/lib和/usr/lib,lib64和/usr/lib64,中的目录是usr中对应的目录软连接
  • 1

3.2 列出目录内容

Linux中文件和目录大小写敏感
文件名最长255字符
所有字符要求是有效的,但”/”除外

  • 不要使用某些特殊符号在文件或者目录中
  • 但文件名中存在特殊符号时要用单引号保护起来
ls [options] [files or dirs]
-a 包含隐藏文件
-l  显示详细信息
-R  递归所有目录
-ld  显示目录和符号链接信息
  • 1
  • 2
  • 3
  • 4
  • 5

3.3 改变目录

文件的路径:
  	相对路径:
		相对路径就是不以根开头的路径
        相对路径是以当前目录作为基础路径
        相对路径可以引用到文件,但是仅限在指定的位置使用
		
  	绝对路径:
		绝对路径是以根开头的路径 
        绝对路径是文件的全路径
		绝对路径在任意的位置都可以使用

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
pwd:显示当前目录
cd 绝对路径/相对路径:切换到对应位置
cd .. :切换到当前目录的上一级目录
cd - :回到上一个工作目录
cd ~ :回到当前用户家目录
cd ~student:回到student家目录
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4 文件

4.1 文件类型查看

在windows中通过文件后缀名来识别文件类型,例如.mp3 音乐,.txt文本
Linux中文件后缀名没有意义,仅仅是文件名的一部分供人参考,实则用file命令查看文件类型
file filename

[root@ycf01 opt]# file passwd2
passwd2: ASCII tex
  • 1
  • 2

4.2 文件时间戳查看及更改

[root@ycf01 opt]# stat ts.t 
  File: ts.t
  Size: 29        	Blocks: 8          IO Block: 4096   regular file
Device: 10303h/66307d	Inode: 26446815    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:usr_t:s0
Access: 2023-02-13 20:33:23.422223015 +0800
Modify: 2022-10-31 17:55:21.356281774 +0800
Change: 2022-10-31 17:55:21.357281761 +0800
 Birth: -
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
   access:文件最后一次被访问的时间
   modify:文件最后一次被修改的时间(修改指的是内容改变)
   chage:文件最后一次被改变(属性(权限/大小/位置/时间戳))的时间
   birth:文件创建时间,8.6后增加内容
  • 1
  • 2
  • 3
  • 4
修改
	-a: 更新访问时间 access 
	-m: 更新修改时间 modify 
	d: 指定更新时间的格式 touch -md ‘2022-10-22 10:12:14’ file
  • 1
  • 2
  • 3
  • 4

5 拷贝文件或目录

cp [option] file destination
如果目标是一个目录,这可以一次拷贝多个文件到这个目录,
例如cp option] file1 file2 destination

如果目标是一个文件,改拷贝覆盖目标文件
-a 复制文件或目录的内容、权限、属性信息 
 -p 复制文件或目录的内容、权限信息 
 -r 递归拷贝,复制目录下所有子目录及文件 
 -f 如果有已存在的目标文件且无法打开,则将其删除并重试 
 -i 覆盖前询问 
 -v 显示过程
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6 移动或重命名文件

mv [option] file destination
如果目标是一个目录,这可以一次拷贝多个文件到这个目录,
例如mv [option] file1 file2 destination

如果目标是一个文件,改拷贝覆盖目标文件
如果目标与源文件在同一目录,则重命名
-f 强制覆盖 
-b 覆盖前备份 
-u 覆盖前先比较文件新旧,源文件新则覆盖 
-i 覆盖前询问 
-v 显示过程
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7 打包/压缩

主流压缩工具bzip2、gzip、xz压缩的格式
压缩文件 解压命令
bzip2 file bunzip2 file
gzip file gunzip file
xz file unxz file 消耗时间更长,压缩效果更好

7.1 tar

tar 先打包后压缩,打包也叫归档
打包 tar -cf 生成的包存放目录及文件名 需要打包的路径
拆包 tar -xf 需要拆包的文件
-c 打包
-x 解压
-v 显示过程
-C 拆包到指定目录
-tf 浏览包内容
-z 使用gzip压缩
-j 使用bzip2压缩
-J 使用xz压缩

8 文件系统访问

在linux中访问文件系统都需要挂载才可以访问,
df -h查看磁盘挂载点

[root@hostneme ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        820M     0  820M   0% /dev
tmpfs           838M  204K  838M   1% /dev/shm
tmpfs           838M  476K  838M   1% /run
tmpfs           838M     0  838M   0% /sys/fs/cgroup
/dev/vda3        40G  4.5G   36G  12% /
/dev/vda2       100M  7.3M   93M   8% /boot/efi
tmpfs           168M     0  168M   0% /run/user/0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8.1 mount:挂在工具

示例:mount /dev/sr0 /mnt/cdrom/

8.2 umount:卸载工具

示例:umount /dev/sr0 或者umount /mnt/cdrom

/etc/fstab:开机挂在路径文件

[root@hostneme ~]#vim  /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Apr 18 05:41:00 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.

UUID=7d4c4a4b-ccfb-4dd1-bbc7-bbe7e2ebf41c /    xfs   defaults    0 0
/dev/sr0  /mnt/cdrom    iso9960   defaults   0   0
[root@hostneme ~]#mount -a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

第五章 用户、组及权限管理

1 用户

任何用户被分配一个独特的用户id号(UID)
UID为0的用户为root用户
系统用户与普通用户的区分,系统用户uid<1000 <普通用户(红帽6是500开始)
用户账号通常从UID1000开始
用户名和UID信息通常存储在/etc/passwd文件中
当用户登录时它被分配一个主目录并运行一个程序(通常是一个shell程序)
没有权限许可用户不能读取、写入或者执行其它用户的文件

1.1 用户账号文件 /etc/passwd

每个用户独立一行,即有多少行就有多少个用户
在这里插入图片描述
字段1:用户名称
字段2:密码占位符“x”
字段3:用户的UID号
字段4:用户的私有组
字段5:用户的描述信息
字段6:用户的主目录(用户家目录)
字段7:登录Shell信息(/sbin/nogoin表示不能登录)

1.2 密码文件 /etc/shadow

1.2.1 文件解析

用于保存用户密码信息,可以使用chage命令进行维护

root:$6$LoeGCYVJYQyodlQd$JTwWTG7cbZ1y14KTai20Et/3TemClATkl.8gGDjVw5eEZt8sO.jkZOkp21uPfFnqXv.95X9GhIGsv.SEybfx11::0:99999:7:::
bin:*:18367:0:99999:7:::
daemon:*:18367:0:99999:7:::
adm:*:18367:0:99999:7:::
lp:*:18367:0:99999:7:::
sync:*:18367:0:99999:7:::
shutdown:*:18367:0:99999:7:::
halt:*:18367:0:99999:7:::
mail:*:18367:0:99999:7:::
operator:*:18367:0:99999:7:::
games:*:18367:0:99999:7:::
ftp:*:18367:0:99999:7:::
nobody:*:18367:0:99999:7:::
dbus:!!:19471::::::
systemd-coredump:!!:19471::::::
systemd-resolve:!!:19471::::::
tss:!!:19471::::::
polkitd:!!:19471::::::
geoclue:!!:19471::::::
rtkit:!!:19471::::::
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

① 用户名
② 加密的密码,如果是!!/*/?表示没有设置过密码, 6 6 6:两个$符号之间的符号表示加密规则,机体查看openssl passwd –help 【openssl passwd -6 redhat 表示使用openssl passwd中的6类型加密 redhat字符串】
锁定密码原理:在密码加密规则前加!,使密码验证失败,
解锁用户原理:删除添加的感叹号
因此,锁定用户只能适用需要验证密码的场景
③ 最近一次修改密码的时间 从1970-01-01到改密码那天的天数
④ 密码最短适用天数 0表示无限制
⑤ 密码最大有效期,
⑥ 密码到期前的警告天数
⑦ 密码到期后账号保持活跃的天数,即过期后这几天内可以登录且强制修改密码,否则锁定
⑧ 账号/密码失效时间 从1970-01-01到失效那天的天数
⑨ 保留位置 未使用

1.2.2 配置密码期限:chage

语法:chage [选项] 用户
#chage -m 0 -M 90 -w7 -l14 user3 分别修改用户密码的最短期限,最长期限,警告周期和失效期限
#chage -d 0 user3强制要求用户在下一此登录时更新密码
#chage -l user3 显示用户密码的信息
#chage -E 2030-10-10 user3 用户将于2023-10-10到期(YYYY-MM-DD格式)

vim /etc/login.defs 修改用户密码默认策略文件

1.3 创建用户 useradd

useradd 创建用户会使用/etc/passwd中当前最大的uid,中途缺少的id或已删除的用户占用的id一定不会被分配给新用户,否则会出现新用户能访问之前id用户权限的文件
创建用户会自动到/etc/skel目录下复制用户默认文件到新用户的家目录中

语法:usage: useradd [options] LOGIN
      useradd -D
      useradd -D [options]
常见选项:
-p 指定加密后的密码(openss passwd -6 123123) 
-u 指定 uid 
-g 指定 gid 
-c 指定描述信息 
-d 指定家目录,如果不存在会自动创建 
-s 指定登录shell   /sbin/nologin:不能登录
-o 允许复用 uid 
-e 修改账户过期日期 
-f 设置宽限时间 
-G 指定附加组 
-m 创建家目录 
-M 不创建家目录 
-N 不创建同名的组 
-D 显示/etc/default/useradd 信息 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
示例:
     创建user6用户,指定的同时指定uid和主组,指定多个附加组并指定描述信息
#useradd -u 1017 -g user2 -G user,user2 -c mysql user6
创建user7用户并指定家目录
#useradd -d /user7 user7  
通过指定登录shell来创建一个不能登录操作系统的用户
#useradd -s /sbin/nologin user8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

1.4 修改用户信息 usermod

语法:usermod [option] username
常见选项:
-p 修改加密后的密码(openss passwd -6 123123) 
-u 修改 uid 
-g 修改 gid 
-c 修改描述信息(登录时所显示的名称) 
-d 修改家目录 
-s 修改 shell 
-o 允许复用 uid 
-e 修改账户过期日期 
-f 修改宽限时间 
-G 修改附加组(带-a 追加添加至新组,不删除之前所在附加组) 
-m 移动家目录(常与-d 一起使用) 
-l 修改登录名 
-L 锁定用户账号(可使用 passwd -U 解锁) 
-U 解锁用户账号 
示例:
移动user5的家目录到/opt/user5目录,该命令不会报错,但实际上会造成user5无家可归的情况(修改了家目录的配置,但实际上这个目录没有被创建),所以一般【d修改】会搭配【m移动】搭配使用
#usermod -d -m /opt/user5 user5  
给用户追加附加组,将user5添加一个叫database的附加组
#usermod -aG database  user5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

1.5 配置密码期限:chage

语法:chage [option] username

常见选项:
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
示例:
#chage -l student  查看student用户密码信息
#chage -m 0 -M 90 -w 7 -I 7 student   分别设置student用户密码最短、最长、警告和失效时间
#chage -d 0 student  强制用户下一次登录时更新密码
#chage -E 2022-12-12 student 设置用户到期日期
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

1.6 删除用户 userdel

语法:userdel [options] LOGIN
常见选项:
-f 强制删除在线用户
-r 删除家目录与邮件目录/var/spool/mail/username
示例:
#userdel -r user5 删除user5并删除其邮件目录及家目录

1.7 修改用户密码 passwd

语法:passwd [OPTION...] <accountName>
常见选项:
root用户无视密码规则,修改其他用户密码不用验证密码
普通用户严格收到系统密码规则制约,只能修改自己的密码且需要验证原密码
-l 锁定用户密码 
-u 解锁用户密码 
-d 删除用户密码 
-e 终止用户密码(修改密码后可登录)  
-n 修改密码最短有效时间 
-x 修改密码最长有效时间 
-w 修改密码警告时间 
-i 修改密码宽限时间 
示例:
#passwd   修改当前用户密码
#passwd student  修改student的密码
#echo 12345|passwd --stdin bobo  明文修改bobo的密码为12345
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2 用户组

用户组也可以登录系统,意义在于可以临时访问组内用户文件

2.1 用户组文件 /etc/group

每创建一个用户就会创建一个与之同名的组并将当前创建的用户加入组
用户组有两个属性:

  • 私有组(属组)
  • 附加组(公共组 )

2.2 创建组 groupadd

语法:groupadd [options] GROUP
常见选项:
-g 指定组id 该id必须唯一
-o 表示可以与gid共用 一般与-g一同使用
-r 创建系统工作组
示例:
# groupadd -g 10002 test 创建一个test组,并指定组id为10002

2.3 修改组信息 groupmod

语法:groupmod [options] GROUP
常见选项:
-g 修改组id
-n 修改组名称
示例:
#groupmod -g 10003 -n tests test 修改test组的组id和组名
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.4 管理组成员 groupmems

语法:groupmems [options] [action]
常见选项
-g 指定组
-a添加用户为组成员
-d 从组成员中删除
-l 列出组成员
-p 清空组(清除组内所有成员)
示例
#groupmems -g database -l  查看database组内成员
# groupmems -g database -a user6  将user6加入到database组
# groupmems -g database -p   清空database组内所有成员
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.5 删除组 groupdel

语法:groupdel [options] GROUP
常见选项:
-f 强制删除
示例:
    #groupdel database
2.6	修改组密码 gpasswd
语法:gpasswd [option] GROUP
参数:
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:指定组成员和-A的用途差不多;
-r:删除密码;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
示例:
#gpasswd test  设置test组的密码 
#gpasswd -a user5 database  将用户user5添加到database组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.7 登录到组 newgrp

语法:newgrp [-] [group]

示例:
#newgrp test登录到组
  • 1
  • 2

3 权限管理

3.1 Linux文件安全

每一个文件都有一个uid(拥有人id)和gid(拥有组id)
任何进程运行时都带一个uid和一到多个gid标识(通常取决于用哪个用户来执行)
通常决定于哪一个用户执行这个进程
三种访问类型:
   文件拥有者运行的进程,跟文件有着同样的uid
   文件拥有组运行的进程,跟文件有着同样的gid
   其他用户云的进程,与文件的uid和gid都不通,其他进程(other)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.2 权限优先级

1.	如果文件的UID与当前用户UID匹配,则以用当前户权限[u]访问
2.	如果文件的GID与当前用户GID匹配,则以组权限[g]访问
3.	如果都不匹配,则以其他[o]权限访问
  • 1
  • 2
  • 3

3.3 文件系统权限

文件权限样例如下,在系统中通过ls -l命令查看文件详细列表,通过ls -ld查看目录详细信息如下
#ls -l
#ls -ld
-rw-r–r–. 1 root root 29 Oct 31 17:55 ts.t
drwxr-xr-x. 4 root root 128 Feb 13 20:33 /opt

权限分配文件所属人文件所属组用户其他用户
字符表示r w xr w xr w x
权限项读写执行读写执行读写执行
数字表示421421421
列表信息详解
文件项示例	目录项示例	解释
-	d	文件类型,-:普通文件,d:目录,l:连接文件,
c:块设备,b:字符设备
rw-	rwx	拥有人的权限
r--	r-x	拥有组的权限
r--	r-x	其他人拥有的权限
.	.	 Selinux标签,表示该文件或目录受Selinux保护
1	4	 文件硬连接数
root	root	 文件/目录的拥有人
root	root	 文件/目录的的属组
29	128	 文件大小
Oct 31 17:55	Feb 13 20:33	 最后修改时间
ts.t	opt	 文件名
权限解读
权限分配	文件所有人(uid)	文件所属组用户(gid)	其他用户(other)
权限项	r	w	x	r	w	x	r	w	x
字符表示	读	写	执行	读	写	执行	读	写	执行
数字表示	4	2	1	4	2	1	4	2	1
权限影响
权限	对文件影响	对目录影响
r(4)(读)	可以读取文件内容	可以列出文件内容(文件夹内的文件列表)
w(2)(写)	可以更改文件内容	可以
x(1)(执行)	可以作为命令执行文件		仅可以进入目录,但需要r权限才能读取内容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3.4 权限修改 chmod

用来变更文件或目录的权限
语法:chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… --reference=RFILE FILE…

常见选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理
示例:
#chmod u+x test.txt   针对属主(u),增加(+)对该文件的执行权限
# chmod g-r,o-r test.txt  针对数组及其他用户(o),删除(-)对该文件的读权限
#chmod a+x test.txt 针对所有用户(a),增加对该文件的执行权限
#chmod u=rwx test.txt 针对属主,精确赋权(=)对该文件赋予读写执行权限
#chmod 755 test.txt针对所有用户进行赋权,等同chmod u=rwx,g=rx,o=rx test.txt
#chmod -R 755 /opt针对所有用户对/opt目录进行递归(包括子目录及文件)授权为755
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.5 属主/属组修改chown

用来变更文件或目录的拥有者或所属群组
语法:chown [OPTION]… [OWNER][:[GROUP]] FILE…
常见选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理;

示例:
#chown user1 test.txt  修改test.txt文件的属主为user1用户
#chown :database test.txt  修改test.txt文件的属组为database组
#chown user1:database test.txt  修改test.txt文件的属主为user1,属组为database组
#chown -R user1:database /opt  递归修改/opt目录的属主为user1,属组为database组
  • 1
  • 2
  • 3
  • 4
  • 5

3.6 属组修改 chgrp

用来变更文件或目录的所属群组
语法:chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… --reference=RFILE FILE…

常见选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理;
示例:
#chgrp database test.txt 修改test.txt文件的属组为database,等同chown :database test.txt
#chgrp -R database /opt 递归修改/opt目录的属组为database,等同chown -R :database /opt
  • 1
  • 2
  • 3
  • 4
  • 5

第六章 标准IO和管道

IO和管道:
IO:input 和outuput 输入和输出
标准输入:键盘(在linux中所有从键盘输入的都是标准输入)
标准输出:显示器——————>标准输出设备

1 标准输入和输出

进程IO通道
系统内编号 通过名称 描述 默认设备 用法
0 stdin 标准输入 键盘 只读
1 stdout 标准输出 显示器 只写
2 stderr 标准错误输出 显示器 只写
3+ filename 其他文件 无 读或写

2 管道符

  • 管道符号“|”能连接命令,顾名思义,其作用就像管道一样,能连接前后,即如下图所示,将命令1的标准输出作为命令2的标准输入而不显示到当前终端
    command1 | command2

  • 错误输出不能通过管道传输,但可以通过将错误输出当成正确输出(2>&1)进行处理
    示例:
    ps -ef | grep java 打印所有进程,然后在此基础上查询java的进程
    echo redhat | passwd --stdin root 使用管道明文修改密码

find /etc -name passwd 2>&1 |wc -l 将错误输出当真正常输出,然后统计行数

  • “|tee” 三通管道(正确输出才能通过三通管道)
    如下图所示,三通管道是在普通管道上的加强,在不影响正常执行的情况下另外将内容输出到文件或显示器,常用于故障诊断
 [root@ycf02 ~]# id user1 |tee /tmp/1.txt
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@ycf02 ~]# vim /tmp/1.txt
[root@ycf02 ~]# cat /tmp/1.txt
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@ycf02 ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3 重定向

3.1 输出重定向操作符

> file:将标准输出(stdout)重定向覆盖到file文件
>> file:将标准输出(stdout)重定向追加到file文件

2> file:将错误输出(stderr)重定向覆盖到file文件
2>> file:将错误输出(stderr)重定向追加到file文件

&> file:将stdout和stderr重定向覆盖到file文件,等同> file 2   >&1 (全部输入重定向覆盖)
&>> file:将stdout和stderr重定向追加到file文件,等同>> file 2 >&1(全部输入重定向追加)

示例:若使用普通用户执行find /etc -name passwd命令会产生输出和报错(权限不足),
$find /etc -name passwd >find.out  将命令执行的标准输出重定向到find.out文件
$find /etc -name passwd 2> /dev/null 将命令执行的报错信息重定向到黑洞
$find /etc -name passwd >find.out 2>find.err 将命令执行的标准输出到find.out 错误输出到find.err
解释:
2>&1 并不是将错误输出到正确输出,而是将错误输出当成正确输出
/dev/null:空设备(系统:/垃圾桶)  所有指向这里的东西都将被销毁/丢弃
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3.2 输入重定向

  • <:从文件重定向输入
    示例:
    #tr ‘A-Z’ ‘a-z’ < /etc/bashrc 将文件/etc/bashrc的内容输入给tr ‘A-Z’ ‘a-z’命令,等效于
    #cat /etc/bashrc | tr ‘A-Z’ ‘a-z’
  • <<EOF:从键盘重定向多行输入(EOF关键字可随意指定为其他关键字,但首尾需一致)
    示例:将多行输入到.bashrc文件中
[root@ycf02 ~]# cat >> /tmp/1.txt <<EOF
> 123
> hello
> chongqing
> EOF
[root@ycf02 ~]# cat /tmp/1.txt
uid=1001(user1) gid=1001(user1) groups=1001(user1)
123
hello
chongqing

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

也可以用于输入修改密码
在这里插入图片描述

第七章 vim高级文本编辑

语法:vim  filename
如果文件存在则打开并显示内容,文件不存在这再编辑保存后创建当前文件
vim三中工作模式
命令模式:用于文件导航、剪切粘贴和简单命令
插入模式:用于正常文本编辑修改
退出模式:用于保存、退出、打开新文件、搜索和替换以及其他复杂操作...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

系统最小化安装是不安装的vim
命令安装:yum install vim-enhanced
vim的版本:图形化(gvim)

1命令模式-

1.1 移动光标

操作类型操作键功能
移动光标↑↓←→向上下左右方向移动光标
翻页PageUP或者Ctrl+B向上翻页
翻页PageDown或者Ctrl+F,PageDown或者Ctrl+F向下翻页,向下翻页
行内跳转Home或者“^”或者数字“0”跳转到行首
行内跳转End或者“$”跳转到文件行尾
行间跳转1G或者gg跳转到文件首行
行间跳转G跳转到文件末尾
行间跳转#G跳转到第#行
行号显示	:set nu	显示行号
	    :set nonu	取消显示行号
  • 1
  • 2

1.2 复制剪切和粘贴

操作类型	操作键	功能
删除	del或者x	删除贯标处的单个字符
	dd	剪切当前光标所在行(不粘贴则为删除)
	Ndd	剪切光标所在行以及之后的N-1行,例如:5dd 删除光标所在行以及后面4行
	cc	替换该行,并进入插入模式,即清空当前行内容并进入插入模式
	d^	删除当前行中光标之前的内容
	d$	删除当前行中光标行尾的内容
	dw	针对单词,删除光标位置到词尾的内容,
	
复制	yy	   复制光标所在的行
        数字+yy 复制多行
	m,n copy dest	复制指定行到指定位置 3,5 copy 11:复制3-5行并粘贴到11行之后
	
粘贴	p	   粘贴缓冲区(剪切板)的内容到光标位置的下一行
        数字+p  粘贴多行
	   P(大写)	粘贴缓冲区(剪切板)的内容到光标位置的前一行

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

1.3 文件内容查找

操作键	功能
/string	从上往下在文件中查找string字符串
?string	从下往上在文件中查找string字符串
n	定位下一个匹配到的位置
N	定位到上一个匹配到的位置
  • 1
  • 2
  • 3
  • 4
  • 5

1.4 撤销

操作键	功能
u	撤销最近一次操作,类似word里面的ctrl+z
U	撤销光标所在行的更改
Ctrl+r	撤销上一次撤销
.	重复上一次操作
  • 1
  • 2
  • 3
  • 4
  • 5

2 其他命令

2.1:nohlsearch 取消查找高亮

插入模式/编辑模式

编辑文件
操作键	功能
i	在光标左边插入
a 	在光标右边插入
o	在光标下一行插入新行
O	在光标上一行插入新行(大写)
I	在首行参入文本(大写)
A	在一行的结尾处添加文本(大写)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.2 退出模式/末行模式

按ESC键

2.3 保存退出

操作类型	命令	功能
保存文件	:w	保存当前文件
	:w /root/newfile	另存为其他文件
	:m,nw file	:3,11w file:将3-11行另存为file
不保存退出	:q	退出且不保存
	:q!	强制退出且不保存
保存并退出	:wq	保存并退出
	:wq!	强制保存并退出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.4 查找替换

3 可视化模式

可视化模式允许选择文本块

  • v 开始字符高亮选定
  • V 开始行高亮选定
  • ctrl+v 列方向高亮选定
    高亮显示的文本能被删除d、拷贝y、替换c、搜索替换s/old/new等

4 多行注释

  • ctrl+v进入列编辑模式
  • 方向键移动光标吧需要注释的开投行标记起来
  • 然后按大写的I(行首插入模式)
  • 输入注释符号“#”
  • 再按esc就会将标记的列全部注释了

5 多窗口模式

  • 在单个VIM屏幕中多个文档能被查看
  • ctrl+w在按s 横线分隔屏幕
  • ctr+w再按v 纵向分隔屏幕
  • ctrl+w再按方向键 在窗口中切换
  • 退出模式的指令只影响当前(光标所在)窗口
  • :sp file在同一个窗口打开其他文件
  • :help windows 显示更多窗口

第八章 文本处理

1 正则表达式

1.1 基本正则表达式
基本正则表达式(BasicRegularExpression BRE),又称为标准正则表达式,是最早死定的仅支持最基本的元字符集,基基本正则表达式是POSIX规范制定的两种正则表达式语法标准之一

1.2 扩展正则表达式
扩展正则表达式(ExtendedReqularExpression),支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式的元字符并不支持
egrep 支持扩展正则表达式,相当于grep -E

2 文本处理工具

  • 文件内容查看:cat、more、less
  • 文件摘选:head和tail
  • 按关键字提取:grep
  • 提取列或者字段:cut

2.1 内容查看cat、more、less

2.1.1 cat
功能
-	打印一个或多个文件到标准输出
-	合并多个文件 cat a.file b.file >new.file
-A 显示所有字符
-n 显示行号
缺点:会显示所有内容,
-	针对大文件会占据很长的打开时间
- 内容多的文件一个屏幕放不下,于是需使用more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
2.1.2 more

分页查看文件内容,每次只看一页

2.1.3 less
浏览文件内容 每次只看一页
-	在查看时常用如下命令
-	/text 搜索text
-	n/N 跳转到 next/previous匹配的地方
-	-v 用文本编辑器打开该文件
-	man命令中是采用less来分页的
head tail文本摘选
提取文件的指定行,通用公式 head -n 取最大行|tail -n 最大值-最小值+1
例如提取a.txt的第15-20行:head -n 20 a.txt|tail -n 20-15+1 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
2.1.4 head显示文件前10行
-n 15显示前15行
-n -15去掉文件后15行
  • 1
  • 2
2.1.5 tail显示文件末尾10行
-n 15显示文件的最后15行
-n +15去掉文件起始的15行
-f 查看文件实时发生的改变(常用于监控打印日志)
  • 1
  • 2
  • 3

2.2 grep 文本过滤

2.2.1 grep
打印匹配的文件行或者标准输入
$ grep ‘string’ file
-i 忽略关键字大小写
-o 只显示匹配内容
-n 显示文件行号
-c 如果匹配成功,显示匹配行行号
-v 取反,排除匹配行
-q 静默模式,不输出任何信息,靠$? 进行验证$?=0表示有匹配项,非0表示无匹配项目
-r 递归搜索目录,根据文本内容搜索文件
-l 与r联合使用,只显示文件名
-E、 --扩展正则表达式PATTERN是一个扩展正则表达式
-F、 --固定字符串PATTERN是一组换行的字符串
-G、 --basic regexp PATTERN是一个基本的正则表达式(默认值)
-P、 --perl regexp PATTERN是一个perl正则表达式
-e、 --regexp=PATTERN使用PATTERN进行匹配
-f、 --file=file从file获取图案
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
-B, --before-context=NUM  print NUM lines of leading(最前的) context
-B2 显示匹配行以及前2[root@ycf02 opt]# grep '\<ftp\>' /opt/passwd2 -B2
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
-A, --after-context=NUM   print NUM lines of trailing(后面的) context
-A2 显示匹配行以及后2[root@ycf02 opt]# grep '\<ftp\>' /opt/passwd2 -A2
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
-C2 显示匹配行以及前后2[root@ycf02 opt]# grep '\<ftp\>' /opt/passwd2 -C2
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
grep结合正则表达式:元字符
grep ^u /etc/passwd ;^ 以某某开头的行
grep  bash$ /etc/passwd ;$以某某结尾
grep  '\<root' /etc/passwd   在字(单词)开头匹配查找
grep  'root\>' /etc/passwd   在字(单词)结尾匹配查找
单词: 是由字母、数字、下划线组成,(不是英文单词)
\<单词\> 匹配一个完整的单词
.  表示匹配任意的单个字符
[abc]  表示匹配括号内的单个字符
[^abc]  表示除了括号内都需要(取反)
[a-z]   匹配括号范围内的单个字符
[a-Z]   匹配大写和小写字母(可以是任意的一位字母)
\ 去掉斜杠后单个字符的特殊意义,例如:.只表示小数点,还原原始的小数点的意义。
* 对前一项进行零次或者多次重复匹配
^$表示空行,不是空格
.*匹配所有字符。^.*任意多个字符开头
\<或\b:锚定词首(支持vi和grep),其后面的任意字符必须作为单词首部出现,如<love或 blove
\>或\b:锚定词尾(支持vi和grep),其前面的任意字符必须作为单词尾部出现,如 love\>或love\b

扩展的正则表达式:需要使用egrep或者grep -E 才能匹配
               +对前一项一次或多次重复匹配
               ?对前一项0次或者1次重复匹配
               {j}对前一项进行j次匹配
               {n,}前一项进行至少n次,多了不限。
               {,m}前一项进行至多m次,少了不限。
               {n,m}对前一项至少n次,最多m次。
               注意: grep要{转义},\{\},egrep不需要转义
              a|b 对a或者b进行匹配,可以是a,也可以是b
              ()对()里单项进行匹配  ,把需要的字符串作为一个整体,如:grep -E ’(root){3,}‘ /etc/passwd             

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

2.3 cut和awk 提取列或者字段

-d 指定分隔符
-f 指定打印的列
-c 指定按字符提取
  • 1
  • 2
  • 3
示例: 
cut -d: -f1,3 /etc/passwd :提取/etc/passwd文件中以:分隔后的第1列和第3列
cut -c2-5 /etc/passwd 提取指定文件每一列的2-5个字符
  • 1
  • 2
  • 3
awk 按列进行提取  默认用空格作为分割符
    awk '{print $ 4}' 取第四列的
     awk '{print $ 4,$6}' 取第四列到第6列
    -F  指定分隔符
    
  • 1
  • 2
  • 3
  • 4
  • 5

3 文本分析工具

文本统计 wc
文本排序 sort
文本比较 diff

3.1 wc 文本统计

可以针对文件或者标准输入计算行数、单词数,字节数/字符数

[root@ycf02 ~]# wc /tmp/passwd
  49  109 2671 /tmp/passwd
#49 表示多少行
#109 表示单词数
#2671 表示字节数
  • 1
  • 2
  • 3
  • 4
  • 5
-l 只统计行数
-w 只统计单词
-c 只统计字节
  • 1
  • 2
  • 3

3.2 sort 文本排序

对标准输出排序,不改变源文件

默认是第一个字符排序
   -r 执行方向排序(降序)
   -n 执行数字大小排序(正序)
   -f 忽略字符串中的大小写
   -u 在输出中删除重复行
   -t: 使用:作为字段见的分隔符
   -k  指定列
   
例:
  sort -n -t :-k 2 /etc/passwd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.3 sort和uniq消除重复行

sort -u删除重复行
uniq 从相邻的行中删除重复行
-c 统计发生重复的次数
更sort一起使用效果更好 sort userlist.txt|uniq -c
  • 1
  • 2
  • 3
  • 4

3.4 diff文件比较

比较两个文件的不同,可以使用vimdiff
diff a.file b.file
4c4
< user_dd
--
>user_cc
以上示例支出a文件与b文件在5行存在差异
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4 文本转换工具

4.1 tr 更改转变字符

  • 转换一种字符集合为另外一种字符集合
  • 只能从stdin读取数据
  • -d 删除单个字符
    tr ‘a-z’ ‘A-Z’ <a.file #将a文件内容小写转大写

4.2 sed 更改字符串

流编辑器
执行查找替换操作在文本流上,通常不更改源文件
使用-i.bak 备份和修改源文件
常用选项
-n,-quiet 不输出模式空间的内容(即不输出未操作内容,等同于只输出被操作的内容)
-i 将内容保存到源文件
-e 执行多条命令  -e 命令1 -e 命令2 
-r 使用扩展正则表达式(sed默认正则表达式)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
4.2.1 地址定界
4.2.2 常用命令
4.2.3 注意事项
4.2.4 案列

第九章 bash shell

  • history历史记录
    -c 清空历史记录(清空内存中的记录 .bash_history需手动清空)
    -w 把缓存中的历史记录写入文件
  • 调用历史命令和tab补齐
  • 输入输出重定向

1 快捷键

ctrl+a 把光标移到命令开头	
ctrl+e 光标移动到命令结尾
ctrl+c 强制终止当前命令	
ctrl+l 清屏
ctrl+u 删除光标之前的内容	
ctrl+k 删除或剪切光标之后的内容
ctrl+y 粘贴之前剪切的内容	
crtl+r 在历史记录中搜索
crtl+d 退出当前终端
ctrl+z 暂停、放入后台
ctrl+s 暂停屏幕输出	
ctrl+q 恢复屏幕输出
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2 通配符

文件通配符 其他常用通配符
“*” 匹配0或多个字符 [:alpha:] 匹配字母
? 匹配任意单个字符 [:lower:] 匹配小写字母
[0-9] 匹配0-9范围内的数字 [:upper:] 匹配大写字母
[abc] 匹配该列表内的任意字符 [:digit:] 匹配数字
[^abc] 匹配除列表内字符外的所有字符 [:space:] 匹配空格
[:alnum:] 匹配任意之母或者数字
[:punct:] 匹配除空格、数字、字母以外的可打印字符

3 命令扩展符号

  1. 命令扩展$()和``
    输出一个命令作为另一个命令的参数,即被包含的部分将被以命令的方式执行并输出,而不是被当成字符串直接输出
    示例:一下两条命令等效,都将查询本机主机名并进行输出
   #echo “当前服务器主机名为:$(hostname)”
   # echo “当前服务器主机名为:`hostname`”
  • 1
  • 2
  1. 大括号扩展{}
    作为一个集合(数组),重复匹配括号内的字符串
    示例:
    #touch {0…9}.txt 创建1到10这10个txt文件
    #touch {0…9…2}.txt 指定范围0到9步长为2创建文件,最后创建0、2、4、6、8这4个文件
    #touch {1,3,5}.txt 创建1、3、5这3个txt文件
    #touch {a…z}.txt 创建a到z的26个txt文件
    注意,这里的{0…9}与正则表达式里的[0-9]虽然都表示0-9这个范围,但{0…9}是表示实际存在的0到9这10个数字的集合(数组),而正则的[0-9]仅仅表示0-9这个范围,并不实际存在

4 变量

程序设计中一个可以变化的量

4.1 本地变量

本地变量由用户自由定义变量名和值
定义变量:变量名=变量值 变量名必须以字母或者下划线开头,大小写敏感,不能以数字开头
引用变量:$ 变量名或者${变量名}
查看变量:单个查看:echo $变量名 查看所有变量:set
取消变量:unset 变量名
作用范围:仅在当前shell中有效

环境变量
主要保存和操作系统有关的数据,比如用户家目录,命令提示符等
定义环境变量:
export back_dir=/home/back 定义一个新的环境变量
export back_dir1 将本地变量back_dir1转换成环境变量
查看变量:env
作用范围:当前shell和子shell中生效

5 命令别名

定义别名:$ alias ll=’ls -l’
查看别名:$ alias ll
取消别名:$ unalias ll

6 特殊符号

6.1 反斜杠
转义字符,去掉后面字符的特殊含义
6.2 引号
 单引号’’:去掉引号内所有字符的特殊含义
 双引号””:去掉引号内所有特殊字符的含义,以下情况除外

  1. $:变量应用符号
  2. ``:命令替换符号
  3. \:转义字符
  4. !:历史记录引用
    7 用户登录shell
     登录shell
  5. 用户登录,包括图形登录
  6. su – 切换用户
     非登录shell
  7. su 切换用户
  8. 打开图形化终端 ctrl+shift+t
  9. 执行脚本
  10. 其他
    8 变量文件
    登录shell:登录到用户(su - username)触发的文件/etc/profile ~/.bash_profile
    非登录shell:切换到用户(su username)触发的文件/etc/bashrc ~/.bashrc
    登出shell:退出用户触发的文件~/.bash_logout

第十章 进程管理

进程是加载到内存中的一段指令,即一个程序运行的实例

  • 进程ID(PID)唯一标识进程
  • UID,GID是selinux上下文觉得文件系统的存取权限
    通常继承执行用户的权限
    子进程继承父进程的属性信息

1 查看进程

1.1 ps查看进程信息

1.1.1 命令选项
a:查看所有终端的进程
u:打印进程所有者信息
x:查看不属于任何终端的进程
-e:查看系统所有进程
-f:查看额外的信息
-o:指定格式输出 :例如:ps -axo pid,user,%cpu,command
--sort:指定排序的参数,例:--sort%mem按内存大小降序排序,常用组合 ps aux或者ps -ef
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
1.1.2 结果解释

进程状态补充:

TTY详解
  tty1-6 控制台登录
  pts /1 虚拟终端,图形化控制台,ssh远程登录
  ?  内核进程
  • 1
  • 2
  • 3
  • 4

1.2 top查看进程信息

1.2.1 top命令选项
d:指定刷新频率,也可以使用s来改变
p:监控某个指定进程的id
St:CPU的等待时间百分比
  • 1
  • 2
  • 3
1.2.2 top执行交付命令
1:监控每个逻辑cpu的状况
c:切换显示命令名称和完整命令行
M:可按内存情况进行排序
P:根据CPU百分比排序
T:根据时间/累积时间进行排序
f:选择可显示内容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
1.2.3 选项解释
1.2.3.1 第一行:
  • 20:22:53 时间:系统时间
  • up 系统已运行时间(从开机开始算)
  • users 当前在线用户
  • load average:系统平均负载时间(分别代表每分钟,每五分钟,每十五分钟),服务器性能重要依据,以单颗cpu为例(长期观察每十五分钟这一参数):
	<1:系统资源很充足
	=1:系统在全力处理任务
    >1:CPU已在全力工作,但队队列仍然很长,任务量还很多
  • 1
  • 2
  • 3
1.2.3.2 第二行:Tasks(任务介绍)
  • total 当前总进程
  • runing 个正在运行进程
  • sleeping 个睡眠进程
  • stopped 个停止进程
  • zombie 个僵尸进程
1.2.3.3 第三行:%CPU(s)(CPU信息)
  • us 表示 CPU 在用户运行的时间百分比,通常用户 CPU 高表示有应用程序比较繁忙。典型的用户程序有:数据库、Web 服务器等
  • sy 表示 CPU 在内核态运行的时间百分比(不包括中断),通常内核态 CPU 越低越好,否则表示系统存在某些瓶颈
  • ni 表示用 nice 修正进程优先级的用户进程执行的 CPU 时间。nice 是一个进程优先级的修正值,如果进程通过它修改了优先级,则会单独统计 CPU 开销
  • id 表示 CPU 处于空闲态的时间占比,此时,CPU 会执行一个特定的虚拟进程,名为 System Idle Process
  • wa 表示 CPU 在等待 I/O 操作完成所花费的时间,通常该指标越低越好,否则表示 I/O 存在瓶颈,可以用 iostat 等命令做进一步分析
  • hi 表示 CPU 处理硬中断所花费的时间。硬中断是由外设硬件(如键盘控制器、硬件传感器等)发出的,需要有中断控制器参与,特点是快速执行
  • si 表示 CPU 处理软中断所花费的时间。软中断是由软件程序(如网络收发、定时调度等)发出的中断信号,特点是延迟执行
  • st 表示CPU 被其他虚拟机占用的时间,仅出现在多虚拟机场景。如果该指标过高,可以检查下宿主机或其他虚拟机是否异常
    注意:一般我们关注多的是us、sy、id、wa、hi、wi这个6个数值,在这里我们需要注意的指标如下:
   统计空闲的CPU我们直接统计%id的计数即可,当id持续过低的时候,表示系统迫切需要解决CPU资源问题。
   统计使用的是CPU需要用1-%id获取。或者us+sy+si.
  • 1
  • 2
  • wa:使用率过高的时候,我们需要考虑IO的性能是否有瓶颈,可以在使用iostat、sar等命令做进一步分析;

  • hi:使用率过高时,表示当前硬件中断占用很大的百分比。一般硬件中断我们可以分析文件/proc/interrupts、/proc/irq/pid/smp_affinity、服务irqbalance是否配置,以及CPU的频率设置,通过这些可以帮系统打散优化系统的硬件中断。

  • si:Linux kernel通过用一种软件的方法(可延迟函数)来模拟硬件的中断模式,通常叫做软中断。常见的软件中断一般都是和网络有关。从网卡到IP层的数据报文收发都是si处理的,长时间写日志也可能产生软件中断。

  • 当软中断出现瓶颈的时候,系统有个进行叫ksoftirqd,每个CPU都有自己对应的ksoftirqd/n(n为CPU的逻辑ID),每个ksoftirqd的内核线程都会去运行对应的ksoftirqd(函数)来处理自己的中断队列上的软件中断。所以,当网络出现阻塞的时候,软件中断程序ksoftirqd肯定会出现瓶颈。此时我们可以通过ps aux|grep ksoftirqd查看ksoftirqd的瓶颈。

1.2.3.4 第四行:MiB Mem(内存信息)
total 物理内存总量
free 空闲物理内存
used 已经使用的物理内存
buff/cache 内核缓存内存量
  • 1
  • 2
  • 3
  • 4
1.2.3.5 第五行:MiB Swap(交换分区)

total 交换区总量
free 空闲交换区总量
used 使用的交换区总量
avail Mem 缓冲的交换区总量。

1.2.3.6 top进程信息

PID 进程id
USER 父进程id
PR 优先级
NI 谦让度值 nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SHR 共享内存大小,单位kb
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行

2 其他工具

2.1 pgrep 模糊查找

-l也显示命令名
-f与整个命令行匹配
-n仅显示最新进程
-o仅显示最旧的进程
-v否定比赛
-x匹配整个名称(不是子字符串)
-s匹配会话ID(0表示当前)
-P匹配父进程ID

2.2 pidof 精确查找

3 信号

  • 对进程的操作可以通过发送不同的信号来实现
  • 直接给进程发送信号,不需要用户界面
  • 通过名称或者数字来确定一个信号
  • signal 15 终止(默认) 推荐使用
  • signal 9 立即终止 可能会造成数据丢失
  • signal 1 HUP 重新读取配置文件
  • HUP 1 终端挂断
  • INT 2 中断(同 Ctrl + C)
  • QUIT 3 退出(同 Ctrl + \)
  • KILL 9 强制终止
  • TERM 15 终止
  • CONT 18 继续(与STOP相反,fg/bg命令)
  • STOP 19 暂停(同 Ctrl + Z)
  • man 7 显示完整列表

3.1 给进程发送信号

在Linux中默认使用信号进行进程的通信

kill -信号 PID ----->结束指定进程
通过PID:kill [signal] pid…

killall -信号 进行名 ------>批量结束一类进程
通过名称:killall [signal] comm…

pkill -t 结束一个终端(终端通常是ssh的pts)的进程
通过模式:pkill [-signal] pattern

4 :调度优先级

调度优先级决定对cpu的访问
linx总只有root可以调整nice值(即静态优先级),该值影响优先级
值范围-20~19 缺省值为0,低nice值意味着高cpu优先级
通过ps -o comm,nice查看

4.1 更改调度优先级

  • 当进程启动的时候指定优先级
    $ nice -n 5 command
  • 在启动进程之后修改优先级
    $ renice 5 pid

5 作业控制

  • 在后台运行一个进程给命令
    尾附加一个符号:firefox &
  • 临时停止一个正常运行的进程
    使用ctrl+z或者发送signal 19(停止)
  • 管理后台挂起的作业
    显示作业好和名字:jobs
    bg %任务编号,在后台恢复:bg [%jobnum]
    fg %任务编号,在前台恢复:fg [%jobnum]
    发送一个信号:kill [-signal] [%jobnum]

第十一章 网络配置

1 网络组成

1.1 IP

用来在网络中标记设备,不同主机可以通过ip地址进行通信
IP地址是一个32位的二进制数,其地址分为网络和主机两个部分

1.2 子网掩码

用来确定整个网络的范围,子网掩码可以确定网络内可以容纳多少主机

1.3 网关

当需要和其他网段进行通讯时需要设置网关
网关通常指向本地路由接口的ip
DNS名称服务器,主要是将域名解析成IP地址来供系统访问

1.4 网络接口名称

传统上,linux的网络按照加载顺序接口依次为eth0、eth1、eth2…. 但系统新增网卡或更换网卡设备后,非常容易会导致网络异常
RHEL7以上版本的默认命名是基于固件基础上分配的固定名称(接口类型+适配器类型+随机id 列如:ens160)

  • 接口类型
    en 以太网有线接口
    wl 无线局域网接口
    ww 无线广域网接口
  • 适配器类型
    s 热插拔插槽
    o 板载
    p PCI类型的支持
  • 数字N代表索引,ID或者端口
  • 如果固定名称不能被确定,则传统的名称ethN将被使用(可以手动更改内核参数重新加载并重启服务器使其失效而恢复到ethN命名模式)

2 查看网络

  • ifconfig查看网络接口状态,mac地址、ipv4/6地址、广播地址等

  • lo 本地回环地址:IP:127.0.0.1 只能自己访问自己搭建的网站,供应其他程序内部访问

  • virbr0 提供KVM虚拟化

  • route -n查看网关路由等信息

[root@ycf02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.72.2    0.0.0.0         UG    100    0        0 ens160
0.0.0.0         172.25.250.254  0.0.0.0         UG    101    0        0 ens224
172.25.250.0    0.0.0.0         255.255.255.0   U     101    0        0 ens224
192.168.72.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • cat /etc/resolve.conf查看DNS信息
[root@ycf02 ~]# cat /etc/resolv.conf
#Generated by NetworkManager
search localdomain
nameserver 192.168.72.2
nameserver 8.8.8.8
  • 1
  • 2
  • 3
  • 4
  • 5

还原eth0:
1、临时还原,在系统启动时传递 nat.ifnames=0 bisodevname=0
2、永久有效
1、[root@ycf02 ~]# vim /etc/default/grub
在这里插入图片描述
2、重新生成引导文件
[root@ycf02 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
3、reboot重启验证

3 网络管理工具

3.1 ifconfig

ifconfig查看激活网卡信息
ifconfig -a查看所有网卡(包括未激活)
ifconfig ens160 up/down 激活或者禁甩网卡
ifconfig ens160 ip/netmask 设置ip地址和子网掩码(临时有效,会覆盖原有配置信息,但重启后失效)

3.2 ip

3.2.1 ip link管理设备
  • ip link [show]:查看设备信息
  • ip link set ens160 up/down:激活/禁用网卡
3.2.2 ip addr管理地址

ip addr [show]:查看网络地址
ip addr add ip/netmask dev ens160 在该网卡添加当前指定地址(临时有效)
示例给ens160网卡添加一个ip:ip addr add 192.168.17.129/24 dev ens160
ip addr del ip/netmask dev ens160 删除该网卡上的指定地址

3.2.3 ip route管理路由表

ip route [show] 查看路由表信息
ip route add 目标地址ip[/netmask] via 网关地址 添加路由
示例:ip route add default via 172.168.1.254 dev ens160
ip route del 目标地址ip[netmask] 删除路由

3.3 networkManager服务

3.3.1 nmtui图形化工具

在这里插入图片描述

3.3.2 nmcli命令行工具
3.3.2.1 管理设备 nmcli device
  • nmcli dev [status] 查看设备状态
    DEVICE:设备名称
    CONNECTION:连接的配置文件名(即/etc/sysconf/network-scripts/下的配置文件)
  • nmcli dev connect/disconnect ens160 链接或者断开设备
3.3.2.2 管理配置文件 nmcli con
  • 查看|删除配置文件 nmcli con [show|delete]
    NAME:配置文件名
    DEVICE:设备名称(网卡名)
    添加配置文件 nmcli con add
 [root@yuncf01 ~]# nmcli connection add type ethernet ifname eth0 con-name ens160 ipv4.method manual ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.254 ipv4.dns 144.144.144.144 autoconnect yes
  • 1

type:添加的配置文件类型
ifname:设备名字(网卡名)
con-name:连接的配置文件名
ipv4.method:ipv4获取方式(dhcp或手动)
ipv4.addresses:指定ipv4地址
ipv4.gateway 网关地址
ipv4.dns DNS地址
autoconnect:是否开机激活
-修改网络配置nmcli con modify (配置文件名)

 [root@yuncf01 ~]# nmcli connection modify System\ eth0 ipv4.method manual ipv4.addresses 192.168.10.100/24 ipv4.gateway 192.168.10.254 ipv4.dns 144.144.144.144 autoconnect yes
  • 1

多IP添加

多IP删除

3.3.2.3 激活配置文件 nmcli con up
[root@yuncf01 ~]# nmcli connection up ens160
  • 1
3.3.2.4 配置项与ifcfg-*配置文件关系

[root@yuncf01 ~]# ls /etc/sysconfig/network-scripts/
ifcfg-ens160

3.4 手动配置网卡

  • 手动修改: vim ifcfg-ens160 配置文件
    nmcli connection reload 让nmcli重新读取硬盘上的配置文件
    nmcli connection up 配置文件名 让配置生效
  • 删除配置文件:
    nmcli connection del 配置文件名
    nmcli的指令: 都支持 简写(缩写)
    nmcli device status ——> nmcli d s
3.4.1 编辑文件

手动编辑文件/etc/sysconfig/network-scripts/ifcfg-ens160 ,将ip获取方式更改为手动BOOTPROTO=static,并在其后添加如下几行,最后内容如下

TYPE=Ethernet   网络类型  表示以太网
PROXY_METHOD=none  表示是否启用代理
BROWSER_ONLY=no  是否仅浏览
BOOTPROTO=static   获取ip的方式,dhcp表示自动获取
IPADDR=IP地址  
NETMASK/PREFIX=子网掩码
NETMASK=255.255.255.0
PREFIX=24
GATEWAY=172.168.0.2
DNS1=202.103.44.150
DNS1=202.103.25.69
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes 是否启用ipv6
IPV6_AUTOCONF=yes ipv6是否自动配置ip地址
IPV6_DEFROUTE=yes 是否将当前的接口设置ipv6的默认网关
IPV6_FAILURE_FATAL=no ipv6配置失败的时候启用ipv4
NAME=ens160   配置文件的名字
UUID=74d133f7-fe91-4631-9ea9-15626060de12 配置文件标识符
DEVICE=ens160 网卡设备
ONBOOT=yes  开机自动激活网卡
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
3.4.2 让配置生效

$ nmcli connection reload #让networkManager重新读取硬盘上的配置文件
$ nmcli connection up ens160 #让配置生效

3.4.3 多IP配置

在网卡文件添加如下配置,然后重新读取配置文件并让其生效,使用ip addr show查看
IPADDR1=ip地址2
NETMASK1=255.255.255.0
或者
IPADDR1=ip地址2
PREFIX1=24

4 主机名查看及设置

  • 查看主机名
 [root@yuncf01 ~]# hostname
yuncf01
  • 1
  • 2
  • 主机名配置文件
    /etc/hostname

  • 设置主机名,修改完成后需要重新登录才会显示新主机名
    hostnamectl 修改主机名或者查看系统信息
    hostnamectl set-hostname rhce.example.com (永久有效)

  • IP与主机名的映射(绑定):
    在生产环境中,有很多自定义的域名,这些域名都不是公网来解析的
    /etc/hosts 系统内部用来解析内部地址的文件
    IP地址 完全限定的域名(完整的主机名) 别名
    做了映射以后 ,文件中的条目优先级更高
    hosts文件只在本机上有效

4.1 编辑/etc/hosts文件

ip 域名 别名

5 标准服务端口

标准服务端口配置文件/etc/service

5.1 端口和服务故障排查

  • IP监听的端口信息:
    ss 、 netstat(来自于net-tools)
  • SS 的效率更高 在系统 网络并发连接的场景下 ss 更快(ss是从内核读取网络信息)
  • netstat 是从 用户空间读取网络信息
    ss -n 查看端口的编号 -t tcp -u udp -a 显示监听的套接字和建立连接的套接字
    -l 仅显示监听的套接字 –p 显示进程 –A 指定接口

6 双网卡绑定bond模式

6.1 bond级别

0-6

6.2 bond实现步骤

先决条件:
服务器必须有两张网卡,
也不需要有配置配置文件

  1. 删除需要操作的两张网卡的配置文件
  2. 添加虚拟接口
  3. 给虚拟接口配置地址
  4. 给虚拟接口添加两块物理网卡
  5. 激活bond
bond1 示例:  主备模式  也就是当一个网卡故障时,另一个网卡接替服务
1.	创建虚拟接口
nmcli connection   add  type bond  ifname bond1 con-name  bond1 mode active-backup miimon 1000
type: 类型是bond
mode:active-backup  主备
miimon: 链路的监测时间 1000

2.	给bond添加物理接口
nmcli connection  add type  bond-slave  ifname ens224 con-name  bond1-ens224 master bond1
nmcli connection  add  type  bond-slave   ifname  ens160 con-name bond1-ens160 master  bond1

3.	给bond配置IP地址
nmcli connection  modify  bond1 ipv4.method manual ipv4.addresses  172.16.0.80/24 autoconnect   yes

4.	激活bond 并测试
nmcli  connection up  bond1
    查看bond的信息:  cat /proc/net/bonding/bond1(bond网卡名)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

6.3网桥:

DHCP 动态主机配置协议 ,是专门用来在网络中为主机自动分配IP地址
在装了vmware的物理机上vmnet1 是仅主机模式网卡 vmnet8 是nat模式网卡
一般 vmware会将子网中.1的IP作为物理机上虚拟网卡的IP .2 的IP作为该子网的网关地址

  • NAT模式:
    vmware的NAT 模式 是可以上网的,将虚拟网络内部的地址转换成可以上网的物理接口地址 来访问外部网络
    将物理网卡作为虚拟交换机的上行链路,由虚拟交换机完成地址转换
    仅主机模式:
    是为了进行内部的测试,而虚拟机不需要访问外部网络
    缺少上行链路的虚拟交换机
  • 桥接模式:
    将物理网卡变成虚拟交换机,将物理机变成特殊的虚拟机(其实就是来扩充物理网卡的端口数量)
    桥接模式是为了能够让外部的用户访问到内部的服务(也就是内部的虚拟机能够被外部访问,因此桥接模式用在虚拟化)
桥接模式的配置示例:
1.	创建虚拟网桥设备
nmcli connection  add  type  bridge ifname br0 con-name  br0

2.	给设备绑定物理接口(指定桥接的物理网卡)
nmcli connection  add type  bridge-slave ifname  ens224 con-name  br0-ens224 master br0

3.	给网桥配置IP地址进行测试(生产环境中一般不会配置地址)
nmcli connection  modify  br0 ipv4.method manual ipv4.addresses 192.168.10.100/24 autoconnect  yes
nmcli connection  up br0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

7针对部分情况,网卡未加入托管导致

虚拟机开启时ifconfig没有ens160网卡,无法上网远程SSH连接,同时图形化模式没有有线连接选项:
在这里插入图片描述
手动启动网卡提示:

[root@ycf02 ~]# nmcli device connect ens160 
Error: Failed to add/activate new connection: Connection 'ens160' is not available on device ens160 because device is strictly unmanaged
[root@ycf02 ~]# nmcli connection up ens160 
Error: Connection activation failed: No suitable device found for this connection (device lo not available because device is strictly unmanaged).
  • 1
  • 2
  • 3
  • 4

原因是虚拟机启动时,NM托管未开启导致

7.1解决方案一(临时生效)

1、查看托管状态
[root@ycf02 ~]# nmcli networking 

2、显示 disabled 则为遇到的问题,如果是 enabled 则可以不用往下看了
开启 托管
[root@ycf02 ~]# nmcli networking on
3、再启动网卡就行
[root@ycf02 ~]# nmcli device connect ens160
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7.2解决方案二(永久生效)

[root@ycf02 ~]# vim /etc/NetworkManager/NetworkManager.conf 
  • 1

在这里插入图片描述
添加:managed=true,保存退出
在这里插入图片描述
重启网络服务器:
[root@ycf02 ~]# systemctl restart NetworkManager
这样就行了

第十二章 shell脚本实战

1 介绍

  • shell 脚本:
    shell 是简单易学——> 都是Linux的命令来组成的
    shell 可以批量的解决重复性操作——> 减少重复的工作量

2 基础回顾

  • vim文本编辑器
  • I/O重定向和管道’|’
  • 正则表达式
  • 通配符
  • 别名
  • 命令扩展
  • 变量

3 shell基本元素

对于一个shell脚本来说,应该具备以下元素

【解释器】第一行的声明:“#!/bin/bash”
【注释】:说明某些代码的功能
单行注释:#
多行注释: <<BLOCK(可以是任意字符串,但要注意前后一致并对其)
           BLOCK
【可执行语句】:实现程序的功能
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4 脚本执行方式

  • 方式一:在当前目录以相对路径的方式执行 ./demo.sh
  • 方式二:在任何位置以绝对路径的方式执行 /opt/demo.sh
  • 方式三:直接使用bash来直接执行shell脚本 bash demo.sh
  • 方式四:在当前的shell环境中执行bash shell脚本:source或者.(source demo.sh或. demo.sh)
    unset 退出登录
区别:
方法三 可以在脚本中不指定解释器,脚本可以没有执行权限
方法一和方法二脚本需要有执行权限,
方法四:将脚本中内容放到当前shell执行,方法1-3开启子shell
  • 1
  • 2
  • 3
  • 4

5 shell脚本编写规范

shell编写中的注意点:

  1. 在开头要写解释器 可以是/bin/bash 或者是/bin/sh
  2. 要写注释,交代脚本的功能和描述信息以及作者的联系方式
  3. 脚本的注释尽量使用英文,因为中文在生产环境中可能出现乱码
  4. 命令要一步到位,避免重复(使用多条指令达到某一条命令即可达到的效果)
  5. 代码要缩进,缩进才能有层次感,排错才会容易
  6. 脚本的文件尽量以.sh结尾(Linux没有文件扩展名,但是.sh结尾可以让人看得更清楚)
1、	开头指定解释器
#/bin/sh 或者#!/bin/bash
2、	开头加版本版权等信息
#Date 创建日期
#Author:作者
#Mail:联系方式
#Function:功能
#version:版本
#Description:描述
3、	脚本中尽量不要使用中文
4、	没必要使用cat命令
eg:cat /etc/passwd|grep gnru
可以改成如下方式
eg:grep gnru /etc/passwd
5、	代码缩进
6、	脚本已.sh为扩展名,名称见名知意
例如:backMsql.sh   back_mysql.sh
7、使用.vimrc文件,可快速生成脚本开头的头文件信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

6 变量

6.1 位置变量

这种变量主要用来向脚本中传递参数或者数据,变量名不能自定义,作用是固定的
$1 表示脚本后的第一个参数
$2 表示脚本后的第二个参数
$3 表示脚本后的第三个参数
$1~${10}

6.2 预定义变量

预定义变量是bash中一定定义好的变量,变量名不能自定义,变量的作用也是固定好的

$0:脚本名(即执行脚本的文件名)
$*:所有的参数,双引号应起来时候参数视为单个字符串
$@:所有的参数,双引号引起来时,每个传输作为个体
$#:参数的个数
$$: 当前脚本的PID
$?:上一个命令的返回值[0-255]  0表示成功,1-255表示执行失败
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6.3 read从命令行读取变量值

read 变量名
在这里插入图片描述

-p 提示信息
-t 指定超时时间   单位:秒
-s 暂停屏幕输出,即输入的信息不回显示到屏幕,适用于指定密码

从命令行接收用户输入:
	read  –p “提示信息” –s “输入内容不可见”  -t “超时时间单位秒”  变量名
如果没有指定变量名默认为REPLY 这个变量名

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 脚本的退出码:
    类似于命令的返回值 0 – 255
    其中0表示成功
    非0 表示失败
    在脚本中通过exit退出脚本并可以携带退出码 eg.exit 100

7 条件执行运算符

命令是否执行要根据前面命令的退出码
&&代表逻辑与:
   command1 && command2   
   根据命令的返回值 来判断命令是否执行成功  返回值为0 则结果为真; 返回值为非0 结果为假
如果command1 结果为真则执行 command2
如果command1 结果为假则不执行 command2
    逻辑与两条命令返回值为0,则结果为真
    
例如:如果系统存在dragon用户,则更改密码
    id dragon && echo dragon|passwd –stdin dragon

||  逻辑或:
		command1 || command2
如果command1 结果为真不执行 command2
如果 command1 结果为假则执行 command2 
		一真为真  一条命令满足结果则为真

  例如:如果系统不存在dragon用户,则创建
        id dragon || useradd dragon
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

8 复合指令

即一串命令,()和{}都是对一串命令进行执行,但有所区别
pwd;cd /tmp;pwd)
{ pwd;cd /tmp;pwd;}

  • 相同点:
    ()和{}都是把一串的命令放在括号里面,如果命令在一行命令之间用; 号隔开
    ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

  • 不同点:
    格式不同:
    ()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
    ()最后一个命令可以不用分号,{}最后一个命令要用分号

  • shell的差异:
    ()是在子shell中执行,所以不能改变当前shell的路径
    {}是在当前shell中执行,因此可以改变当前shell的路径

9 条件测试

在shell程序中,用户可以使用测试语句来测试指定的条件表达式的真或假,但指定条件为真时,整个测试返回值为0,反之未假,返回值非0

格式1  test条件表达式  例如判断/tmp/ts文件是否存在   test -d /tmp/ts  
格式2  [ 条件表达式 ]    只能是单个条件,
格式3  [[ 条件表达式 ]]   多个条件表达式,即出现逻辑与或者逻辑或
  • 1
  • 2
  • 3
  • 4
  • 5

9.1 文件表达式

测试文件的属性在这里插入图片描述

9.2 数值表达式

“=~”表示后面跟的是一个正则表达式
在这里插入图片描述

9.3 布尔运算符

布尔 理解 在Linux 中布尔值 更多的时候 就是一个开关 true false

运算符说明类似
-a两个结果同时为真则表达式为真类似于 &&
-o一个结果为真则表达式为真类似于||
对表达式的结果取反逻辑非

9.4 字符串比较

  • 字符运算符
    = 判断 两个字符串是否相等 相等则为真
    != 判断 两个字符串是否不等 不等则为真

10 条件语句

10.1 if语句

10.1.1 单分支结构
if判断语句
格式1(单分支结构):
if 条件表达式	(if 条件表达式;then 将if和then 写成一行)			
then
	执行语句  				
fi

条件表达式并非一定是test,可以是任何返回值为0的命令
条件表达式成立则执行 执行语句
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
10.1.2 双分支
格式2(双分支结构):
				if  条件表达式
				then
				   执行语句1
				else
				   执行语句2
				fi

当条件表达式成立  执行语句1  反之执行  执行语句2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
10.1.3 多分支结构
格式3(多分支结构):
				if  条件表达式1
				then
					执行语句1
				elif  条件表达式2
				then
					执行语句2
				elif  条件表达式3
				then	
					执行语句3
				elif 条件表达式N
				then
					执行语句n
				else
					执行语句else
				fi
当表达1满足后不再执行2后面的循环
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
10.1.4 示例

在shell脚本中使用bash –x 可以看到shell语句的执行过程

10.2 case语句

case  条件判断语句:
		case esa变量名 in
				值1)	
				执行语句1
				;;
				值2)
				执行语句2
				;;
				值n)
				执行语句n
				;;
				*)
				执行语句*
				;;
		 esac

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

示例
在这里插入图片描述 case 适合于 已知的有序的判断,对结果有预知 if 适合 对结果做无序

11 循环语句

11.1 for循环

针对已知的列表进行循环
语法:
    for  变量名 in 循环的对象
    do
         循环体
     done
 
方法1:直接列出元素
for i in 1 2 3 4 5
do
echo $i
done

方法2:使用大括号
for i in {1..5}
do 
echo $i
done

方法3:使用seq
for i in $(seq 1 5)
do 
echo $i
done

方法4:使用命令的结果
for i in $(ls *.sh)
do 
echo $i
done

方法5:类c风格
       for ((i=0;i<=100;i++))
       do
       echo $i
       done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
案例:
1. 文件的批量改名 将/tmp/demo 下的文件全部用原来的文件名加上.bak进行备份 
2.  批量检测 IP地址的存活情况,检测192.168.10.0/24 这个子网中的所有IP地址,如果IP存活将IP地址保存到ip.txt,且输出ip Ok 例如 192.168.10.1 Ok,反之IP如果不存活,则输出IP Error但不保存到文件
shell  没有多线程 操作的概念   shell  实现并发  利用后台进程实现
在循环体中使用 { }& 将进程丢到后台执行,通过wait刷新同步

#!/bin/bash
ip_addr=192.168.10.
for i in {1..254}
do
        {
        ping -c 1 -W 1 $ip_addr$i &> /dev/null
                if [ $? -eq 0 ];then
                        echo $ip_addr$i Ok
                        echo $ip_addr$i is ok >> ip.txt
                else
                        echo $ip_addr$i error
                fi
        }&
done
wait

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

11.2 while语句

while循环结构可以使得用户重复某一系列的操作,直到某一个条件的发生,语法如下

while 测试条件
do
   语句块
done
  • 1
  • 2
  • 3
  • 4
11.2.1 while循环读取文件
方式1:采取exec读取文件,然后进入while循环处理
 exec < file  
while read line
do
 echo $line
done

方式2:使用cat读取文件,通过管道进入while循环处理
cat fial | while read line
do
echo $line
done

方式3:通过while循环结尾,使用输入重定向
while read line
do
   statement1
done < file
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

11.3 until循环

until循环语句将循环体重复执行,知道某个条件成立为止,基本语法如下

until expression
do
   statement1
       statement2
        。。。。
    done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

11.4 跳出及退出循环

break:跳出整个循环体
continue:跳出当前这一次循环,然后继续下一次循环

12 exit退出码

程序执行后会携带一个退出码
0 成功,1-255代表失败
shell程序的退出码存储在系统的变量$?中

13 并发

{commd}&
wait

第十三章 计划任务

在linux系统中,计划任务分为两类

1.	一次性计划任务(在未来只执行一次的计划任务)
2.	周期性计划任务(在未来周期性重复执行的计划任务)
指定某用户是否可以设置计划任务可以在系统黑白名单中进行管理
/etc/at.deny:仅拒绝
/etc/at.allow:仅允许

一次性计划任务:
一次性计划任务使用at进行管理(atd.service),具体如下
因特殊情况没有执行的任务,会在过期后的下一次atd服务启动的时候被立即执行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.1 查看计划任务: at -l

[root@ycf01 ~]# at -l
1       Sun Mar  5 21:34:00 2023 a root
2       Sun Mar  5 22:12:00 2023 a user1
  • 1
  • 2
  • 3
第一列:计划任务编号
第二列:计划任务执行时间
第三列:计划任务被排入的队列(默认为a,-q指定队列,从a-z nice依次降低,a为2,z为19
第四列:任务的拥有人
  • 1
  • 2
  • 3
  • 4

1.2 任务添加

at timespec:交互式创建计划任务,ctrl+d结束  如:at 21:33 2023-03-11 回车开始创建任务
at timesec < myscrpt:从脚本输入 该脚本可以没有执行权限,甚至添加完任务后脚本都可以删除
at -c jobnum:查看计划任务的详细信息
at -d jobnum:删除计划任务
  • 1
  • 2
  • 3
  • 4

1.3 修改

at管理的计划任务对应的脚本文件在/var/spool/at中对应的文件
grep -r ping …/

2 周期性计划任务

在系统中我们使用crontab管理周期性任务
crontab -e:管理当前用户的计划任务
crontab -l:列出当前用户的计划任务
crontab -r:删除当前用户的所有计划任务
crontab -u:管理其他用户的计划任务
  • 1
  • 2
  • 3
  • 4
  • 5

2.1 配置参数及取值范围说明

crontab配置文件在/etc/crontab,使用man 5 crontab可查看帮助

五位*参数分别对应分、时、日、月、周
 
分钟:取值为每个小时下分钟的参数,即0~59
小时:取值为每一天中小时的参数,即0~24
日期:取值为月份中的天数,即1-31
月份:取值为每一年中的月份,即1-12
星期:取值为每个星期的星期几,即0-7(0和7都代表星期日)
commad:代表呀执行的命令或者脚本
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.2 cron时间表示方法(以分钟栏位为例,其他栏位同理)

*:表示匹配改栏位的每一个时间点,
例:* * * * *表示每个月的每天的每小时的每一分钟执行一次

x-y:表示范围[x-y],例如分钟栏位为[1-5]表示第1到5分钟都执行一次
    例:11-13 * * * *表示每一天的每个小时的第11,12,13分执行
    
x,y:表示列表,也可以包含范围,
例:5,10-13,16 * * * *表示每天每小时的第5、10、11、12、13、16分执行

*/x:表示每个x个时间点就执行一次
      例:*/5 * * * *表示每天的每小时每隔5分钟执行一次
综合举例

0 15 * * 1-5 每周一到周五的下午3点整执行
30 8 * * * 6,0 每周六周日的早上8点30执行
0 8-19/2 * * * 每天的8到19点之间没两小时执行一次
0 10 */3 * *每隔3天的10点1分执行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.3 cron任务的文件

  • 系统范围内的定时任务:/etc/crontab和/etc/cron.d(建议存放到该目录)目录的文件中
  • 所有用户的cron任务(使用crontab命令创建的任务)都被保存到/var/spool/cron目录中与用户名对应的文件中
  • 定时任务执行日志/var/log/cron

2.4 系统中的定时任务

2.5 禁用用户计划任务

如果拒绝和运行都存在同一个用户,以允许为主
/etc/cron.deny:仅拒绝
/etc/cron.allow:仅允许

2.6 避坑指南

  • 如果我们的脚本手动执行没问题,但丢定时任务执行会报错的时候,说明我们缺少环境变量,因为定时任务默认使用bin/bash解释器运行,如果我们的变量不在crontab的变量中,所以我们需要做如下操作,在脚本前source一下系统环境,如下
crontab -e进入任务编辑
* * * * * source /etc/profile;跟上我们的脚本
  • 1
  • 2
  • 定时任务中的命令如果使用了%&等特殊符号需要转移

第十四章 查找和处理文件

1 locate 基于数据库查找文件

基于数据库查找 非常快,但只能查找文件名(文件名全名或者部分),完整的路径会被打印,而不是只有文件名
手动更新数据库执行 updatedb
locate存在排除目录,排除目录下的文件不会被查找到,具体查看/etc/update.conf中prunepaths
常用选项
-i 忽略大小写
-n 查找匹配到的前n条记录

2 find 遍历查找文件

实时搜索目录树
    比locate慢但更精确
    find是精确查询,必须接上完整文件名(但可以通过命令行通配符拓展)
    如果不给定目录,就用当前目录
    日过不给定criteria 所有文件都匹配
在找到的文件上可以执行命令
对于被搜索的目录,用户要拥有可读可执行的权限
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.1 根据层级目录查找(深度)

常用选项
   -mindepth 最小搜索目录深度
   -maxdepth 最大搜索目录深度
   
案例:
   当前在/opt目录下,已知存在文件及目录如下:/opt/1/2/3/4/5/txt.txt
   find /opt/ -name txt.tx   不指定目录深度则全部搜索
   find /opt -maxdept 2 -name txt.txt  表示从/opt开始最多再向下搜索2层,即最多搜索到/opt/1/2/
   find /opt -mindept2 -maxdept 5 -name txt 表示从/opt开始最少要搜索到2最多搜索到5这一级
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.2 根据文件名和inode查找

  -name “文件名称” 支撑glob(7) * ? [] [^]
        find /opt -name “ip*”  注意通配符需要用引号,否则如果当前目录下有一个ip开头的文件,这ip*会被识别成这个文件,而不是一个通配符
  -iname “文件名称” 不区分大小写
  -inum n 按文件inode查找
  -links n 按连接数为n的文件
  • 1
  • 2
  • 3
  • 4
  • 5

2.3 根据属主、属组查找

-user username 查找属主为指定用户的文件
-group groupname 查找属组为指定组的文件
-uid userID 查找属主为指定uid的文件
-gid 查找属组为指定gid的文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.4 根据逻辑组合条件查找

常用选项
   与  -a
   或  -o
   非  -not,!
   非P或者
用括号对多个条件取反,
括号需要转移,
括号内开头和结尾需要有空格
括号内用或的关系 列如
 \( 条件一  -o 条件二 \)
 
例:查找属主和属组都不能是root的文件  find -not \( -user root -o group root \)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.5 根据文件类型查找

常用选项
  -type f 查找文件类型为普通文件
       b 块设备
       c 字符文件
       d 目录
       i 连接文件
       p 管道文件
       s 套接字文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.6 根据文件大小查找文件

常用选项
 -size [+|-]#UNIT
常用单位 k M G
例:
find -size 10M 查找大小是10M的文件
find -size -10M 查找小于10M的文件(不包含10M)
find -size +10M 查找大于10M的文件(不包含10M)
find -size +30k -size -50k 查找大于30k小于50k的文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.7 根据文件权限查找

常用选项
 -perm [/] mode
   MODE精确匹配权限
     /MODE 任何一类(guo)对象权限中只要能满足一位即可,属于或关系
     -MODE 每一类都必须同时满足   属于与关系
     0 表示不关注
例
   find -perm 644 表示严格匹配644权限文件
   find -perm /222 表示uo任何一类用户有写入权限即匹配
   find -perm -222 表示严格匹配权限,即所有用户都必须有写权限
   find -perm -002 表示仅严格匹配other用户的写权限
   find -perm -2000 表示查询必须拥有sgid权限的文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.8 根据文件时间戳查找

常用选项
   已天为单位
       -atime 访问时间 
       -mtime 修改时间   
            find -mtime 7 在前面第七天被修改过的文件
find -mtime -7 七天内修被改过的文件
find -mitme +7 七天前被修改过的文件
       -ctime 文件时间戳
   已分钟为单位
       -amin 访问时间
       -mmin 修改时间
            find -mtime 7 在前面第七分钟被修改过的文件
find -mtime -7 七分钟内修被改过的文件
find -mitme +7 七分钟前被修改过的文件
       -cmin 文件时间戳
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2.9 在查找到文件后的操作

  1. -print 默认动作,显示到屏幕
  2. -ls 长格式显示,类似对查找到的文件执行 ls -l
  3. -delete 删除查找到的文件
  4. -fls 查找到的所有信息以长格式保存到指定文件中
  5. -ok command {} ; 对查询到的文件执行command指令的命令,且都会交互式要求确认
  6. -exec command {} \;对查询到的每个结果文件执行有command指定的命令
  7. {} 用于引用查询到的文件名称自身
  8. 由于很多命令不支持管道,而日常工作中有这个必要,所有就有了xargs命令,
    xargs命令用于接收管道传递过来的数据,
    |xargs用于接收无法直接通过管道传输的数据
示例:
将配置文件备份到指定目录下并添加.org扩展名
#find . -name “*.conf” -exec cp -r {} /dir/{}.org \;
提示删除存在时间超过3天以上的属组为young的临时文件
#find /tmp -ctime +3 -user young -exec rm -rf {} \;
在家目录中查找可以被其他用户写入的文件,将其w权限取消
#find ~ -perm -002 -exec chmod o-w {} \;
查找/var目录下属主为root且属组为mail的文件
#find /var -user root -group mail -ls
查找/var目录下不属于root lp gdm的所有文件
#find /var !-user root !-user lp !-user gdm
#find /var not \( -user root -o -user lp -o -user gdm \)
查找/var下最近一周内被修改过的文件且属主不能是root
#find /var -mtime -7 !-user root -ls
查找当前系统上没有属主或者属组且最近一周被访问过的文件
#find / -nouser -o -nogroup -a atime -7 -ls
查找/etc目录下大于1M且类型为普通文件的所有文件
#find /etc -size +1M -type f -ls
查找/etc目录下所有用户都没有写权限的文件
#find /etc !-perm /222
查找/etc目录下至少有一类用户没有执行权限的文件
#find /etc !-perm -111  至少有一类用户没有,反过来就是所有用户都有
找出/tmp目录下属组不是root,且文件名不以f开头
#find /tmp !-group root !-name “f*-ls
#find /tmp not \( -group root -o -name “f*” \) -ls
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

第十五章 网络客户端

1 浏览网页

1.1 curl工具

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。curl用法:

1、curl url(获取该网址的文本信息)
    cur www.baidu.com
2、curl -i url(获取该网址的文本信息以及协议头部信息生产环境建议隐藏)
3、curl-x proxy url(使用代理获取网页文本信息)
curl-x 192.168.100.100:1080 http://www.linux.com
4、保存网页内容:-o
curl -o linux.html http://www.linux.com 将网页内容保存为本地的index.html
5、下载网页文件:-O
curl -O http://www.linux.com/hello.sh 下载文件到当前目录
curl-o /tmp/dodo1jpg http://www.linux.com/dodo1JPG 下载文件并另存为/tmp/dodo1jpg6、
6、通过ftp下载
curl-O -u 用户名:密码 tp://www.linux.com/dodo1.JPG
curl-O ftp://用户名:密码@wwwlinux.com/dodo1JPG
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

###1.2 wget工具
wget是一个下载文件的工具,支持HTTP,HTTPS和FTP协议,

	wget http://link.lab0.cn:1000/test.zip
	wget –O /tmp/hello.zip http://link.lab0.cn:1000/test.zip   下载并另存为
	wget –b  放到后台下载
	wget –P  放到指定的目录下
	wget –spider 测试下载但不会真的下载

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2 OpenSSH

  • Linux之间如何进行远程
    在windows上 使用远程桌面来管理远程的windows操作系统
    在Linux上 使用openssh套件来进行管理 安全加密的套接字通信方式
    openssh 是一个C/S架构
    openssh-client 客户端 openssh-server 服务端
    就是使用client 端 来 连接server 端

  • ssh 对方机器的用户名@对方机器的IP地址或者是主机名(如果是主机名一定要可以解析为ip)
    第一次连接需要接受对方的主机公钥,才可以进行正常的连接
    ssh –X 转发X11的显示协议 (GNOME/KDE 图形化的软件都是基于X11的窗口开发)
    DISPLAY=:0 显示器
    ssh 用户名@ip ‘执行的命令’ 远程执行命令但是不登录到系统
    ssh 使用非22 端口 使用 ssh –p 端口号 root@主机名

  • windows远程Linux
    前提条件 windows上必须安装openssh-client 客户端
    如果是win10 以下的系统需要使用第三方支持openssh的软件来进行远程
    putty crt 免费 xshell 商业收费 ……
    bash shell 在windows上安装bash的终端 可以支持 shell的指令

在Windows10 以上的操作系统中cmd和powershell 支持直接ssh

OpenSSH在任何linux的发行版都默认安装(红帽企业版上实施SecureShell或者SSH协议),SSH协议使系统能够以加密和安全的方式进行通行
ssh [user@]hostname|ip 远程登录
ssh root@192.168.195.100
ssh [user@]hostname|ip command 远程执行命令(多条命令用分号隔开,且最好用引号引起来)
ssh root@192.168.195.100 ‘who;cd /opt/;pwd’
ssh -X [user@]hostname|ip 远程调用图形

3 SCP 远程传输命令

scp(secure copy) 是一个基于ssh协议在网络之间进行安全传输的命令(在红帽9后将被取消)
用法:
scp 本地的文件/目录 用户名@远程主机:/路径

  • 将本机的文件拷贝到远程
    scp 本地文件 root@远程主机:/tmp 将本地的文件拷贝到远程主机的tmp目录

  • 将远程文件的拷贝本机
    scp root@192.168.10.70:/tmp/etc.tar.gz /opt 将远程的etc.tar.gz 拷贝到本机的opt
    选项

    常用选项:

-r 拷贝目录
-p  拷贝文件的同时保留文件的权限和时间戳
-P 指定端口号  (ssh默认使用22作为标准端口,生产环境中不会使用22)
-C   数据量很大的情况下可以提升性能 压缩数据
在windows中使用第三方的传输工具或者ssh来客户端来实现文件传输
  • 1
  • 2
  • 3
  • 4
  • 5

4 rsync远程同步命令

rsync是一个实现增量备份的工具

用法
    本地用法:rsync [OPTION] src….[DEST]
         rsync 选项   源路径    目标路径
         rsync -a /etc /tmp
         rsync -a /etc/ /tmp
         
    通过ssh访问
         Pull:rsync [OPTION…][USER@]HOST:SC….[DEST]
         rsync  源路径   用户名@主机:/目标路径   push  将本地的文件上传到远程
         Push:rsync [OPTION…] SRC…[USER@]HOST:DEST
         rsync  用户名@主机:/源路径   目标路径   pull  将远程的文件下载到本地
         rsync  -a   -e 'ssh -p 2222'  root@192.168.10.70:/opt/  /tmp    使用非常规端口同步
         
   PS: 源路径是否以斜杠结尾很重要,如果源路径以斜杠结尾表示同步目录下的文件,如果不以斜杠结尾表示同步目录本身      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
常用选项
  -v:显示rsync过程中详细信息,可以使用-vvvv获取更详细的信息
  -n:仅测试传输,而不实际传输,常和-vvvv配合使用查看工作流程
  -a:归档模式,表示递归传输并保持稳健属性,等同于“-rtopgDI”
  -r:递归到目录中去
  -t:保持mtime属性
  -o:保持owner属性
  -g:保持group属性
  -p:保持perms属性(权限,不包括特殊权限)
  -D:是“—device --specials”选项的组合,即也拷贝设备文件和特殊文件
  -I –links:如果文件是软连接文件,则拷贝软连接本身而非软连接所指向的对象
  -z:传输时进行压缩,提高工作效率
--delete    以源为主,向目标同步;目标和源文件中的文件多则珊少则补
   --existing    只同步目标端已经存在的文件,如果源文件不在目标端则不同步
   --ignore-existing 只同步目标端不存在的文件
   --remove-source-files  删除源端已经传输成功的文件(必须在源端执行)
   --existing   --ignore-existing 文件不会传输会比对文件
   --ignore-existing  --existing –delete   删除目标不存在的文件

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
示例
#rsync /etc/fstab /tmp 将/etc/fstab文件拷贝到/tmp
#rsync -r /etc/cron.d /tmp 将/etc/cron.d目录拷贝到/tmp下
#rsync -R -r /etc/cron.d /tmp 将/etc/cron.d目录拷贝到/tmp目录下,且在/tmp下生成etc子目录
#rsync -r -v –existing /tmp/a/ /tmp/b 只更新目标端已存在的文件
#rsync -r -v –ignore-existing /tmp/a/ /tmp/b 更新目标端不存在的文件
#rsync -nrv –existing –ignore-existing –delete 文件不会传输,但会删除接收端多处的文件
#rsync -r -v /etc/cron.d /tmp –delete 将目标多余的文件删除再同步
#rsync -r -v –remove-source-file /tmp/a/file1 /tmp/b/file3/tmp将源端已更新的文件都会被删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5 基于ssh秘钥的身份验证

非对称加密的方式来进行认证
密码认证:

  1. 客户端发送连接请求
  2. 服务端发送主机公钥(主机指纹信息)给到客户端(默认发送的是ecdsa的公钥)
    秘钥认证
  3. 客户端接收服务端的主机公钥后保存在当前用户的家目录下.ssh/know_hosts 文件中,每一行都是一个主机公钥
  4. 客户端使用服务端的公钥加密密码并发送给服务端
  5. 服务端收到客户端的密文后使用自己的私钥解密,并比对密码
  6. 如果密码比对一致则登录成功,反之登录失败

秘钥认证(免密登录/ssh互信,也就是登录时不需要验证密码):

  1. 客户端要生成一组公私钥 ssh-keygen 默认保存在当前用户的家目录.ssh目录中 id_rsa 私钥 id_rsa 公钥
  2. 客户端发送生成的公钥给到服务器端 (ssh-copy-id 发送公公钥给到服务器端的指定用户,切记公钥发给哪一个用户,就只有该用户无需密码登录,并非机器上所有的用户都可以免密登录) 默认保存在发送用户的家目录下.ssh/authorized_keys 文件中,每个公钥占一行
  3. 客户端发送连接请求
  4. 服务端收到连接请求后查找客户端是否有公钥存储,如果有公钥存储,服务使用客户端公钥加密随机字符串发送给客户端
  5. 客户端使用自己私钥解密后得到随机字符串明文,然后使用服务端公钥加密,发送给服务端验证
  6. 服务端收到客户端密文后,使用服务端私钥解密,解密后和生成的随机字符串对比,如果一致则登录成功,反之登录失败

PS: 秘钥的权限不能过大(私钥默认权限600,私钥谁生成谁保管),除了生成秘钥的用户,其他任何人包括该用户的拥有组都不能有查看权限
私钥进行加密
ssh 秘钥托管
秘钥托管 临时将 加密的私钥 导入到一个shell中,让其他用户临时使用这个shell,这个shell中的ssh将不会受到私钥密码的限制
ssh-agent bash 开启代理的shell程序
ssh-add 导入私钥的密码
exit 退出shell
ssh的安全配置
ssh的配置文件存在于/etc/ssh 目录中
其中 sshd_config 是服务端的配置文件 ssh_config 客户端配置文件

5.1 生成公私钥 ssh-keygen

生成公私钥,默认情况下,私钥和公钥分别保存在~/.ssh/id_rsa和id_rda.pub中
使用ssh-keygen生成

5.2 发送公钥到远程主机 ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip

使用ssh-copy-id -i ~/.ssh/id_rsa.pub root@远程主机将公钥会被保存到远程主机的~/.ssh/authorized_keys文件

5.3 设置私钥密码

1、生成私钥的时候避免私钥泄露,可以给私钥设置密码
2、在私钥有密码的情况下,将公钥发送给远程主机
3、访问远程主机,此时与远程主机已免密,但需要输入私钥的密码开启认真代理
  • 1
  • 2
  • 3

6 sshd配置文件

sshd服务的配置信息保存在/etc/ssh/sshd_config文件中,部分配置解释如下

  1. 调整默认的远程端口 默认是22(绝对不能使用22) 等保2.0
    a) vim /etc/ssh/sshd_config 将其中#Port 22 去掉#号 修改为其他不常用的端口
    b) 关闭selinux和防火墙 setenforce 0(临时关闭selinux,下次开机继续启用) systemclt disable –now firewalld
    c) 重启sshd服务 systemctl restart sshd
  2. 调整ssh监听的IP地址,实现业务和管理分离
    a) vim /etc/ssh/sshd_config 修改# ListenAddress 0.0.0.0 去掉#号将0.0.0.0 设置为 管理的IP地址
    b) 重启sshd服务 systemctl restartsshd
  3. 限制root用户远程登录
    a) vim /etc/ssh/sshd_config 修改PermitRootLogin yes 将其中的yes改为no
    b) 如果需要使用root ,则通过普通用户登录进来切换到root用户
    c) 重启sshd生效
  4. 启用仅允许秘钥登录
    a) vim /etc/ssh/sshd_config 修改 PasswordAuthentication yes 将yes改为no
    b) 重启sshd
  5. 允许空密码登录
    a) vim /etc/ssh/sshd_config 修改 PermitEmptyPasswords yes 默认为no 如果为yes则用户没有密码可以直接登录
    b) 重启sshd
  6. 设置最大重试或失败次数以及最大的会话数
    a) MaxAuthTries 6 默认最大重试次数或者失败的次数
    b) MaxSessions 10 默认最大会话终端数
    c) vim /etc/ssh/sshd_config 修改 MaxAuthTries 2 最大失败两次则断开连接
  7. 设置服务器上的所有用户使用同一把公钥来进行验证
    a) vim /etc/ssh/sshd_config 修改 AuthorizedKeysFile 指向具体的公钥文件,则服务器上所有用户使用该秘钥验证
    b) 重启sshd
    重启sshd服务命令:systemctl restart sshd

第十六章 高级用户组和权限

学习目标:

1.	密码策略
2.	默认权限
3.	文件特殊的执行权限
4.	目录的特殊权限
5.	acl权限
6.	sudo提权

用户和组基础回顾
1.	用户名与uid映射
2	用户组和gid映射
3.	用户和组的信息存储在文本文件中
 	用户信息/etc/passwd
 	用户组信息/etc/group
 	用户密码文件/etc/shadow
 	用户组密码文件/etc/gshaow
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

1 监控登录

1.1 查看谁在登录:

监控在线的用户
w/who 查看在线的用户(当前正在使用的用户)

user:登录的用户名
tty:登录后系统分配的终端号(pts表示虚拟终端即远程登录)
from:远程主机名,即从哪儿登录的
login@:什么时候登录的
idle:用户空闲时间,一旦用户执行了任何操作,改计时器会重置
jcpu:和改终端(tty)连接的所有进程占用的时间,不包括过去的后台作业shijia你,但包括当前正在运行的后台作业占用时间
pcpu:当前进程(在what项目中显示的进程)所占用的时间
what:当前正在运行的进程的命令行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.2 登录和重启的记录:last

last 查看历史登录成功和重启的记录 /var/log/wtmp

1.3 尝试登录失败:lastb

lastb 查看登录失败的记录 /var/log/btmp

1.4 最近的登录日志:lastlog

lastlog 最近登录的日志 (从当前系统启动开始)

1.5 密码策略文件:

	/etc/login.defs   设置密码的有效期,用户的家目录,uid…
系统的默认权限(权限掩码)
  • 1
  • 2

2 默认权限

root的目录的最大权限是:777
root的文件的最大权限是:666
设置用户umask值用umask命令
普通用户的umask值是002
文件的权限664
目录的权限是775
root用户的umask值是022
配置文件/etc/bashrc
修改umask值,编辑~/.bashrc
添加:umask 值
在这里插入图片描述
文件 目录
root 644 755 权限严格
普通用户 664 775 权限宽松
Linux使用umask(权限掩码) 来管理系统的默认权限
Linux中文件最大的默认权限为666 是因为去掉x执行
Linux中目录最大的默认权限为777
在Linux中创建的任何一个文件 都不可能具有执行权限
最大权限 - umask = 默认权限
文件:
root 666 022 = 644
普通用户 666 002 = 664
目录:
root 777 022 = 755
普通用户 777 002 = 775

3 文件的特殊执行权限

3.1 suid:继承属主权限

  • 只能作用在二进制程序上,不能用在脚本上
  • 仅仅设置在文件上,设置在目录上没有意义
  • 执行suid权限的程序时,此时用户将继承该程序文件的所有者权限
  • SUID只能作用在二进制文件上,不能使用在shll脚本上
  • 设置方法:chmod u+s file或者chmod 4755 file

样例:
1、普通用户不能在根目录创建文件夹
在这里插入图片描述
2、给mkdir程序添加suid权限
在这里插入图片描述

3、重新以user1的身份执行mkdir创建文件夹,可以发现此时可以在根目录创建文件,因为此时虽然看似是user1在执行mkdir,但实则是mkdir的拥有人(root)在执行,而root对根目录有权限,所以可以创建,且最终创建的文件的属主也继承了mkdir的属主

判断文件是否有SUID权限
ls –l 查看拥有人栏位的x栏位,如果x变成s 说明同时有x和s权限,如果是S则相应栏位没有x执行权限仅有suid权限

3.2 sgid:继承属组权限

设置在文件上

  • 只能作用在二进制程序上,不能作用在脚本
  • 设置在文件上,设置在目录上有其他含义
  • 执行设置sgid权限的程序上时,此时用户将继承程序属组的权限
  • 设置方法chmod g+x file 或者chmod 2755 fule
示例
1、将chmod命令复制一份并授权sgid
 chmod g+s filename 
2、利用拷贝的chmod命令已user1身份执行,可以看见新建的test文件夹的属主继承了拷贝命令mkdir的属主信息
  • 1
  • 2
  • 3
  • 4

判断目录或者文件是否有sgid权限
ls –l 如果拥有组栏位的s为小写 则说明有x和s权限,如果是大写仅有s权限
sbit:
公共目录,在该目录下任何人都可以创建文件,但是每个用户只能管理自己的文件

4 目录的特殊权限

4.1 sgid:继承属组权限

  • 当一个目录拥有sgid权限时候,此文件下所有用户新建的目录和文件都将自动继承此目录的属组
  • 设置方法:chmod g+s dir 或者chmod 2755 dir
示例
1、给文件filename赋予sgid权限
 chmod o+t  filename
已user1的身份在test2中创建目录或者文件,可以发现新文件的属组继承了test2
  • 1
  • 2
  • 3
  • 4

判断权限
ls –l 如果目录的其他人栏位,有小写的t表示同时有t和x权限,如果是大写T则仅有t权限
用数字来表示特殊权限: suid=4 sgid=2 sbit=1

4.2 stciky:每个用户仅能删除和重命名自己的文件和目录

  • 对于一个多人可读写的目录,如果设置sticky,这每个用户仅能删除和重命名自己的文件和目录
  • 设置在目录上,设置在文件上没有意义
  • 用户在设置stick权限的目录下新建目录不会继承sticky权限
  • 设置方法:chmod o-t dir 或者chmod 1777 dir;
样例:
1、给test3目录赋予stciky权限,并已user2创建文件
 
2、已user1身份创建文件,并测试删除user2文件失败
  • 1
  • 2
  • 3
  • 4

5 ACL权限:

  • rhel8默认启用ACL权限
  • 文件/目录的访问控制列表,可以针对任意指定用户和组进行rwx权限的精细化分配
  • ACL 是为了弥补权限的不足通过ACL,可以再不改变基本权限的基础上(也就是不修改文件的拥有人、拥有组、其他人的权限)来给指定的用户或者是指定的组精确的分配权限

查看与设定

  • ls -l查看权限
  • 使用getfacl权限
  • 使用setfacl设定

5.1 ACL权限查看与解释

  • ls -l 查看少量的acl权限信息,
    如下图所示,栏位表示该文件或者目录上有acl权限
[root@node1 tmp]# getfacl  rhce.txt 
#file: rhce.txt  文件名
#owner: root  拥有人
#group: root  拥有组
user::rw-     拥有人权限
user:lisi:rw-   额外用户(ACL用户)权限
user:zhangsan:r--
group::r-- 拥有组权限
mask::rw- 文件的权限掩码
other::---  其他人权限
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

PS:如果一个文件或者目录设置acl后,该文件的拥有组权限将被mask(文件的权限掩码)接管(因此ls –l 看到的并不是文件拥有组的权限),权限掩码将决定acl的有效权限

  • getfacl查看完整的权限设置信息

5.2 设置ACL权限

setfacl常用选项和语法

  • setfacl -m 设置和修改acl权限,具体如下
  • setfacl -m u:user:rwx file 设置指定用户的acl权限
  • serfacl -m g
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/601615
推荐阅读
相关标签