RHCE培训笔记

Linux目录

第一节课没啥重要的,最重要的我觉得就是对于LInux系统的目录的一些讲解

那么,首先先看一下根目录下的目录

[root@Elapse ~]cd /
[root@server0 /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys tmp  usr  var
[root@server0 /]#

按顺序一个一个安排一下

/boot: 存放内核

这个文件夹比较有意思,是存放内核的地方,内核是啥我也看不懂

/var:保存可变的文件

可变的文件有日志, 数据库文件, ftp文件, 邮件队列, 缓存文件 ,其实就是一些服务器所需要的文件,比如网页服务器的页面这类文件,就是存放在/var/的www目录下的

/home 家目录

保存普通用户的家目录,就是给普通用户用来放地方的,就好比windows不同用户的不同桌面一样

/tmp 临时文件夹

任何人也可写入的公共文件。临时目录 不要保存生产数据 每10天清除一次 /var/tmp 每30天清除一次。

swap

虚拟内存, 当内存不足时,将内存中的Cache移到磁盘中。空间出物理内存。当然你可以设置他的积极性,何为积极性呢,积极的话,不管电脑有没有内存他都去干活,而不积极的话,只有当电脑内存不足时,他才会干活,帮助电脑置换数据

/dev 设备

字面意思,用来存放磁盘、光驱这些设备的地方

/etc :配置文件

保存你LInux中的配置文件的地方,其中分两种,sysconfig 和 服务配置文件,sysconfig就是passwd这类文件,是管理linux账户的文件,还有shadow,服务配置文件的话,就是httpd.conf这类服务配置文件(httpd.conf为http服务器的配置文件)

sysconfig 除了passwd这类,还有一堆防火墙、网络的配置文件,如下图

绝对路径与相对路径

不管是在哪一个操作系统中,都会有绝对路径以及相对路径使用,那么这两者如何区分呢

绝对路径:从根开始的文件路径 /

众所周知Linux系统的结构,

[root@Elapse ~]# cd /[root@Elapse /]# lsbin   dev  home  lib64       media  opt   root  selinux  sys  usrboot  etc  lib   lost+found  mnt    proc  sbin  srv      tmp  var

例如我现在用户 Elapse的用户目录下有一个 test.txt,这个文件的绝对路径就是 /home/elapse/test.txt

相对路径: 相对于当前路径的路径

如果说绝对路径是以根目录开始的路径的话,那么相对路径就是以你当前的路径为 根目录开始的路径(看起来有点绕,并不)

举个例子,上文说到一个绝对路径 /home/elapse/test.txt,但是如果我当前的目录就是 /home的话,那么我只需要 ./elapse/test/txt就可以了(当然./这个可有可无,./表示当前目录)

这里还用到了个多余的命令是 pwd,这个命令是用于查看当前路径的命令

软链接与硬链接

(更加具体的自行百度)

软链接类似于Windows操作系统的快捷方式,原文件被删除则软链接失效,变为“死链接”,当然可以通过恢复原文件的方式来恢复软链接

新建软链接:ln-s<原文件路径><想要链接的地方>

原文件路径必须为绝对路径

特点:可以对任何文件做软链接,包括目录,普通文件,可以跨文件系统

硬链接就是比较硬核的链接了,他跟复制差不多,但是也不一样,和软链接的区别是,软链接的原文件失效了就死链了,但是硬链接不会,所以通常硬链接也是用来防止文件误删除的

新建硬链接: ln<原文件><目标文件>

这里先创建一个文件夹和文件

尝试一下硬链接

)

我们发现,目录是不允许创建的

和软链接一样的是,他能同时对文件进行操作,同时,硬链接以文件副本的形式存在。不占用实际空间,但是不可以跨文件系统,必须在同一个文件系统下创建。

SHELL:变量

在Linux中可以赋值变量等操作的

除此外,还有配合符号的用法

[root@Elapse ~]# echo '$a $b'     #''为原字符输出$a $b
[root@Elapse ~]#
[root@Elapse ~]# echo "$a $b"     #""取出变量的值输出Hello Asolmn
[root@Elapse ~]#

uniq: 去重

就是去除同样的而已,其实没多大用,对日志审计也没什么用。,因为像 aa中间出现了不同的字符串的话并不能好好的去重

环境变量

查看环境变量:

[root@Elapse ~]# env

常见环境变量:

PATH:由目录组成的,当用户在任何目录输入命令,都会在当前目录和PATH列表中的目录查找执行

插个题外话

不同的目录保存不同级别用户的命令

/usr/bin: 保存普通用户可以执行的命令 ls pwd cd

/usr/sbin: 保存管理员使用的管理命令 ifconfig fdisk

添加临时环境变量:

为了环境演示,首先我在 /tmp/t/目录下写了一个.sh文件,输出一串字

[root@Elapse ~]# echo $PATH/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
[root@Elapse ~]# PATH=$PATH:/tmp/t/
[root@Elapse ~]# echo $PATH/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/tmp/t/
[root@Elapse ~]#

这样,不论在哪一个目录下输入t.sh都会执行/tmp/t/目录下的t.sh了

那么如何永久添加呢,有以下两种方法

  • 1.使用export 命令

export PATH=$PATH:<路径>

  • 修改配置文件/etc/profile

添加:export PATH=$PATH:<路径>

反掩码

每个用户在创建的时候都会有一个默认权限,这个默认权限是由 umask值来决定的,又称之为 反掩码

在前一篇文章中有提到文件权限如 777

777代表的就是4+2+1

而umask反掩码则是反着来的,它是从6开始减(默认就是没有执行权限)

普通用户的默认的权限是 002

所以666-002=664

创建出来的文件就是这样的

-rw-rw-r-- 
 6  6  4

修改用户umask值

命令:umask <值>

setuid权限

无论运行命令的用户是谁,最终执行的身份为文件的所有者。同时该命令必须为可执行文件,且该用户有该文件的执行权限

代表的命令: /bin/passwd

适用范围:文件所有者权限

用人话来举个例子

在系统中,有一个可执行文件,该文件的所有者为 root用户,那么别的用户在使用这条命令的时候,就会以该文件的所有者 root用户的身份来执行

那么权限配置不当的可执行文件有什么危害呢

首先,在Linux系统中,有一个命令是 ifconfig,用户可以通过该命令来对系统的网卡进行开启和关闭操作

ifconfig同时也是一个可执行文件,该文件默认的权限为 755

如果我们的普通用户想要尝试关掉网卡呢,是没有权限的

而如果我们给 /sbin/ifconfig添加一个setuid权限

原本执行的地方变成了s,而且文件名变成红色了(提醒说这个可执行文件权限过大)

这时候我们普通用户执行的时候,就是已文件所有者,也就是 root用户的身份去执行的

网卡可以关闭了

进程管理

1.进程 :程序运行的内存态的数据,动态 , 占用CPU,MEM , IO 主进程 和 子进程 , 一个主进程可以产生多个子进程 ,当主进程结束之后,子进程也会终止, 多个主进程之间是相互独立 ,有独立的CPU时间和内存地址空间。

2.进程ID:在系统中的唯一的编号

3.查看进程状态:ps -aux

杀掉进程 kill:

数值为1 重读配置文件,不会真正的Killed掉进程

数值为9 强制终止

数值为15 默认关闭,正常终止

举个例子,我这里想强制kill掉http服务的进程,首先,通过

service httpd status

来确定进程ID,然后,发送9这个指令过去

调整进程优先级:修改进程nice值

nice值是Linux程序中用来表明程序优先级的值,范围从-20(最高优先级)到19(最低优先级)

命令:nice -n<程序>

服务管理

1.服务管理程序 启停 开机自启 ,状态 ,日志,意外终止 恢复等等

2.服务的配置文件:/lib/systemd/system 软件安装之后默认服务配置保存位置

[root@server0 ~]# cd /lib/systemd/system
[root@server0 system]# pwd/lib/systemd/system
[root@server0 system]# ls
accounts-daemon.service                  plymouth-read-write.service
alsa-restore.service                     plymouth-reboot.service
alsa-state.service                       plymouth-start.service
anaconda-direct.service                  plymouth-switch-root.service
anaconda-nm-config.service               polkit.service
anaconda-noshell.service                 poweroff.target
anaconda-pre.service                     poweroff.target.wants
anaconda.service                         printer.target
anaconda-shell@.service                  proc-fs-nfsd.mount
anaconda-sshd.service                    proc-sys-fs-binfmt_misc.automount
anaconda.target                          proc-sys-fs-binfmt_misc.mount
anaconda-tmux@.service                   psacct.servicearp-ethers.service                       qemu-guest-agent.service
atd.service                              qemu-pr-helper.service

3.自定义的配置关联关系:

[root@server0 system]# 
[root@server0 system]# cd /etc/systemd/system/
[root@server0 system]# pwd
/etc/systemd/system
[root@server0 system]# ls
basic.target.wants                           nfs-blkmap.service.requires
bluetooth.target.wants                       nfs-idmapd.service.requires
dbus-org.bluez.service                       nfs-mountd.service.requires
dbus-org.fedoraproject.FirewallD1.service    nfs-server.service.requires
dbus-org.freedesktop.Avahi.service           printer.target.wants
dbus-org.freedesktop.ModemManager1.service   remote-fs.target.wants
dbus-org.freedesktop.NetworkManager.service  rpc-gssd.service.requires
dbus-org.freedesktop.nm-dispatcher.service   rpc-statd-notify.service.requires
dbus-org.freedesktop.timedate1.service       rpc-statd.service.requires
default.target                               sockets.target.wants
display-manager.service                      sysinit.target.wants
getty.target.wants                           syslog.service
graphical.target.wants                       systemd-timedated.service
multi-user.target.wants                      timers.target.wants
network-online.target.wants                  vmtoolsd.service.requires
[root@server0 system]#

target: 多个相关服务组一个target

serivce: 服务 **

socket: 网络服务 **

path: 指定服务位置运行

系统常用的target:

graphical.target: 图形化已包含了multi-user.target 所有service

[root@server0 system]# systemctl get-default   #查看当前的运行target # chkconfig --level 5multi-user.target
[root@server0 system]#

4.查看服务状态:(可用service或systemctl)

[root@server0 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server # 描述   
 Loaded: loaded (/usr/lib/systemd/system/httpd.service #配置文件; disabled #开机禁用; vendor pres>
 Active: active (running) since Sat 2019-09-28 16:02:06 CST; 35s ago #状态
 Docs: man:httpd.service(8) # man 8 httpd.service
Main PID: 2711 (httpd)  #主进程ID
 Status: "Running, listening on: port 80"    
  Tasks: 213 (limit: 12391)
 Memory: 46.1M  #内存空间占用 
 CGroup: /system.slice/httpd.service # 资源控制 RH442      
         ├─2711 /usr/sbin/httpd -DFOREGROUND
         ├─2712 /usr/sbin/httpd -DFOREGROUND
         ├─2714 /usr/sbin/httpd -DFOREGROUND
         ├─2727 /usr/sbin/httpd -DFOREGROUND
         └─2741 /usr/sbin/httpd -DFOREGROUND

Sep 28 16:02:05 server0.example.com systemd[1]: Starting The Apache HTTP Server>
Sep 28 16:02:06 server0.example.com httpd[2711]: Server configured, listening o>
Sep 28 16:02:06 server0.example.com systemd[1]: Started The Apache HTTP Server. #日志lines 1-18/18 (END)

停止服务:

systemctl stop httpd

[root@server0 /]# systemctl status httpd
● httpd.service - The Apache HTTP Server
 Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor pres>
 Active: inactive (dead)
  Docs: man:httpd.service(8)

5.开机启动服务:

[root@server0 /]# systemctl enable httpd  #使能服务开启启动
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@server0 /]# 

[root@server0 /]# 
[root@server0 /]# 
[root@server0 /]# systemctl is-enabled httpd
enabled
[root@server0 /]# systemctl is-active httpd
active
[root@server0 /]# 


[root@server0 /]# systemctl status httpd
● httpd.service - The Apache HTTP Server   
 Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)   
 Active: active (running) since Sat 2019-09-28 16:07:44 CST; 4min 35s ago     
  Docs: man:httpd.service(8) Main PID: 3338 (httpd)

6.开机禁用

[root@server0 /]# 
[root@server0 /]# systemctl disable httpd
Removed /etc/systemd/system/multi-user.target.wants/httpd.service.
[root@server0 /]# 
[root@server0 /]# 
[root@server0 /]# 
[root@server0 /]# systemctl is-enabled httpd
disabled
[root@server0 /]#

7.查看所有运行的服务的状态:

[root@server0 /]# systemctl list-units  --type service

8.查看所有已安装的服务

[root@server0 system]# systemctl list-unit-files  --type service
UNIT FILE                                   STATE
accounts-daemon.service                     enabled   #开机启动
alsa-restore.service                        static    # 静态 此服务由其他服务调用
alsa-state.service                          static  
anaconda-direct.service                     static  
anaconda-nm-config.service                  static  
anaconda-noshell.service                    static  
anaconda-pre.service                        static  
anaconda-shell@.service                     static  
anaconda-sshd.service                       static  
anaconda-tmux@.service                      static  
anaconda.service                            static  
arp-ethers.service                          disabled  #禁用
atd.service                                 enabled
auditd.service                              enabled
auth-rpcgss-module.service                  static  
autovt@.service                             enabled
avahi-daemon.service                        enabled
blivet.service                              static  
blk-availability.service                    disabled
bluetooth.service                           enabled
bolt.service                                static  
brltty.service                              disabled
  1. 禁用服务

使用mask参数来禁用某服务,反之用umask取消禁用

10.查看服务的依赖关系:

[root@server0 ~]# systemctl list-dependencies sshd.service

归档与系统之间文件复制

  1. tar:归档工具 ,不带压缩 调用第三方压缩软件 压缩 tar 目标文件 使用相对路径
  1. 将/etc/ 目录归档到/tmp/etc.tar
[root@localhost /]# tar -cvf /tmp/etc.tar etc
命令用法: tar -<参数> <保存路径> <归档的目录>

cvf为打包成一个tar文件

查看一下原本 /etc/目录的大小和归档(也可以理解为压缩)后的 etc.tar的大小比较,小了3MB

题外话一下,其实也可以这么看

  1. 调用压缩:

上面用了一种方法来压缩,但众所周知不止一种,所以这里又要多演示几个

  • tar + gzip : .tar.gz 将/etc 目录归档到/tmp/etc.tar.gz

    tar-czvf<压缩后的路径><需要压缩的玩意>

  • tar + bzip2 :.tar.bz2 将/etc 目录归档到/tmp/etc.tar.bz2
tar-cjf<压缩后的路径><需要压缩的玩意>

  • tar + xz : .tar.xz 将/etc 目录归档到/tmp/etc.tar.xz

对比一下压缩效果

远程安全文件复制

  • SCP: 基于ssh加密, 22/tcp

做个实验:将/tmp/etc.tar.gz 通过scp复制到 server1:/root/

  • sftp基于ssh的一种文件传输,类似ftp客户端访问,sftp进行交互

这其中,可以看到我打了cd和lcd,这两个都是一样的,只不过cd是用于服务端的,lcd是用来更改你本地的目录的

  • rsync: 异步远程文件安全,基于ssh服务,实现增量同步

yum 在线安装软件包:

在rhel8中 yum==dnf fedora 上的软件管理工具

[root@server1 ~]# dnf  # 多版本的部署 安装时指定版本
dnf    dnf-3  
[root@server1 ~]# yum
check-update  groupinstall  info          makecache     search
clean         grouplist     install       provides      shell
deplist       groupremove   list          remove        update
erase         groupupdate   localinstall  repolist      upgrade
groupinfo     help          localupdate   resolvedep    whatprovides
[root@server1 ~]# which yum/usr/bin/yum
[root@server1 ~]# ls -l /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Feb 14  2019 /usr/bin/yum -> dnf-3
[root@server1 ~]#

软件来源

  • 1) 红帽原厂:订阅红帽的软件频道: rhel,opstack,rhev,ceph,openshift等等

前提:注册红帽账户,购买红帽订阅服务

  • 2)第三方软件仓库:epel
命令:
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

  • 3)本地光盘:将本地ISO关联到虚拟机的光驱中。挂载到本地

首先先确保自己虚拟机中的光驱启动了

临时挂载:

第一步中的创建 /mnt/iso文件夹不一定需要,只是方便管理而已

mount/dev/cdrom/mnt/iso的意思是将光驱挂载到 /mnt/iso目录中,临时生效而已,重启就失效了

查看光盘内容:

AppStream文件夹 存放扩展软件

BaseOS文件夹存放操作系统

卸载光盘: umount/mnt/iso

永久挂载:修改配置文件 /etc/fstab

修改完之后,输入mount -a激活挂载

它会去读取/etc/fstab,将/etc/fstab中未挂载的数据,重新挂载一次

配置为yum仓库

三种方法中,只有第三种为本地源,所以才需要将其配置为yum仓库

将本地的 /mnt/iso(也就是前面挂载的目录)配置为yum仓库

成为仓库的目录的条件

AppStreamBaseOS的目录结构都是这样的

其中, Packages 存放软件的rpm文件 repodata 保存软件包与软件包、依赖关系的数据库文件

  • 配置: AppStream 和 BaseOS仓库

首先先去 /etc/yum.repos.d目录下,创建两个 .repo文件

接着修改文件内容

第一行的[]中的内容要对应文件夹名,且不能带空格,第二行的name就是随意了,第三行的 baseurl就是链接到你本地的目录

输入完之后,保存退出

然后输入 yum repolist来使其生效

(当然还有个BaseOS的,步骤和上面一致,不演示了)

有了repo仓库后,就可以通过yum、dnf工具管理软件包了

通过命令名,查找软件包

yum安装软件

(看不清可以考虑点进图片放大看。)

yum后面跟了个参数-y的意思是,安装的软件直接同意,不需要你多余输入一个 y来确认

yum-config-manager创建仓库

众所周知创建仓库的方式不只有一种(误)

你也可以通过 yum-config-manager来创建仓库

这里题外话一个,参数中加了一个 --nogpgcheck

这是一个校验工具,用于校验软件包是否合法的

在配置文件中直接将其的0改为1就是开启的意思了

...
gpgcheck=1

开启了这玩意,你就要去关联他的gpgcheck文件了,配置文件中指定一个就好了

...
gpgcheck=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-redhat-release

清除yum缓存

命令: yum clean all

搜索软件包

删除软件包

命令 yum remove<要删除的软件名称>

rpm

rpm:红帽包管理工具, 不能解决软件包的依赖

rpm -e: 删除

rpm -qa: 查询所有的已安装的软件包

rpm -ql 软件包名:查看此软件包所安装出来的文件列表

rpm -ivh 显示进度

访问Linux文件系统

  1. 文件系统:操作系统管理组织文件的方式 带日志

命令:mkfs.xfs /dev/sdb1

  1. 挂载: 文件系统必须挂载才可以使用。mount -t 文件系统类型 设备名 挂载点
  2. 挂载点:就是一个目录。
  3. 块设备 :/dev/ (以下为文件名解释)
IDE  /dev/hda   服务器: SCSI
SATA II   3Gb/s  /dev/sda
SATA III  6Gb/s  SSD 500MB/S  /dev/sda   服务器: SAS
M.2 :2000MB/S  1800MB/S 399 480GB 3700MB/S  3000MB/s 706 500GB/dev/sda :第一块磁盘  /dev/sdb   : 第二块磁盘   /dev/sda1 第一块磁盘的第一个分区 
虚拟化:
kvm: /dev/vda
vmware : /dev/sda
iscsi:  /dev/sda
  1. 磁盘分区表格式:

MBR :master bootloader record: 主引导记录 , 兼容性好, 各种操作系统都支持

缺点:

1)分区数量 :15

2)磁盘支持最大 2TB

分区类型:4 主分区 , 扩展分区:占用一个主分区的编号 ,逻辑分区 从 5开始 ,到 15

GPT: 支持 128个主分区 , PB级别

查看当前系统中的文件系统挂载:

查看目录或文件的磁盘空间占用大小:

本地文件系统类型: 不能共享

linux: xfs , ext4 , ext3

windows: ntfs ,extfat , fat32

共享文件系统:GFS2

创建文件系统:mbr

查看新的磁盘设备:

[root@server1 /]# ls -l /dev/sdb*
brw-rw----. 1 root disk 8, 16 Oct 20 14:20 /dev/sdb
brw-rw----. 1 root disk 8, 17 Oct 20 14:20 /dev/sdb1
[root@server1 /]# 
[root@server1 /]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
        =                       sectsz=512   attr=2, projid32bit=1        
        =                       crc=1        finobt=1, sparse=1, rmapbt=0         
        =                       reflink=1
data    =                       bsize=4096   blocks=5242624, imaxpct=25        
        =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2        
        =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]#

挂载使用:

[root@server1 /]# 
[root@server1 /]# mkdir /mnt/disk1
[root@server1 /]# 
[root@server1 /]# mount /dev/sdb1 /mnt/disk1
[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]# df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on
devtmpfs              devtmpfs  969M     0  969M   0% /dev
tmpfs                 tmpfs     984M     0  984M   0% /dev/shm
tmpfs                 tmpfs     984M  9.7M  974M   1% /run
tmpfs                 tmpfs     984M     0  984M   0% /sys/fs/cgroup
/dev/mapper/rhel-root xfs        20G  4.0G   17G  20% /
/dev/mapper/rhel-tmp  xfs        20G  180M   20G   1% /tmp
/dev/mapper/rhel-var  xfs        50G  639M   50G   2% /var
/dev/mapper/rhel-home xfs        10G  113M  9.9G   2% /home
/dev/sda1             xfs       2.0G  161M  1.9G   8% /boot
tmpfs                 tmpfs     197M   16K  197M   1% /run/user/42
tmpfs                 tmpfs     197M  3.5M  194M   2% /run/user/0
/dev/sr0              iso9660   6.7G  6.7G     0 100% /mnt/iso
/dev/sdb1             xfs        20G  176M   20G   1% /mnt/disk1
[root@server1 /]#

GPT分区

一 分区模式之MBR

1、主分区不超过4个

2、单个分区容量最大2TB

二 分区模式之GPT

1、主分区个数“几乎”没有限制。

在GPT的分区表中最多支持128个主分区。

2、单个分区容量“几乎”没有限制。

在GPT的分区模式中,每个分区的大小突破了MBR分区2TB限制。

来源:https://blog.csdn.net/chengqiuming/article/details/78601872

创建一个gpt分区的文件系统:

[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]# fdisk /dev/sdc

Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
The size of this disk is 3 TiB (3221225472000 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).

Created a new DOS disklabel with disk identifier 0xf52bc711.

Command (m for help):

创建GPT分区:

[root@server1 /]# 
[root@server1 /]# gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-6291455966, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-6291455966, default = 6291455966) or {+-}size{KMGTP}: +10G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

Command (? for help): p
Disk /dev/sdc: 6291456000 sectors, 2.9 TiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 5CE0812B-FCFB-4D02-B06A-8308F8E66CA3
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 6291455966
Partitions will be aligned on 2048-sector boundaries
Total free space is 6270484413 sectors (2.9 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name   
  1            2048        20973567   10.0 GiB    8300  Linux filesystem

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTINGPARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
[root@server1 /]#
[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]# 
[root@server1 /]# gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.3
.....(懒)

KVM虚拟化

KVM 全称:kernel-base virtual machine

启动服务:

[root@ropu ~]# systemctl enable libvirtd

[root@ropu ~]# systemctl start libvirtd
[root@ropu ~]# 
[root@ropu ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon   
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor pr>
   Active: active (running) since Sun 2019-10-20 15:55:48 CST; 2min 4s ago     
     Docs: man:libvirtd(8)
           https://libvirt.org
Main PID: 2690 (libvirtd)    
   Tasks: 19 (limit: 32768)   
  Memory: 60.6M   
  CGroup: /system.slice/libvirtd.service           
          ├─2084 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/defaul> 
          ├─2086 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/defaul> 
          └─2690 /usr/sbin/libvirtd

Oct 20 15:55:48 ropu.example.com systemd[1]: Starting Virtualization daemon...
Oct 20 15:55:48 ropu.example.com systemd[1]: Started Virtualization daemon.
Oct 20 15:55:49 ropu.example.com dnsmasq[2084]: read /etc/hosts - 2 addresses
Oct 20 15:55:49 ropu.example.com dnsmasq[2084]: read /var/lib/libvirt/dnsmasq/d>
Oct 20 15:55:49 ropu.example.com dnsmasq-dhcp[2084]: read /var/lib/libvirt/dnsm>

安装图形化工具:virt-manager

[root@ropu ~]# yum -y install virt-manager
Last metadata expiration check: 0:07:54 ago on Sun 20 Oct 2019 03:50:50 PM CST.
Dependencies resolved.
===============================================================================
Package            Arch   Version                             Repository         Size

===============================================================================
Installing: 
 virt-manager       noarch 2.0.0-5.1.el8                       AppStream 365 k
Installing dependencies: 
 python3-libvirt    x86_64 4.5.0-2.module_el8.0.0+189+f9babebb AppStream 291 k 
 virt-manager-common                    
                     noarch 2.0.0-5.1.el8                       AppStream 921 k
Transaction Summary
===============================================================================
Install  3 Packages

Total download size: 1.5 M
Installed size: 8.4 M
Downloading Packages:

安装完直接输入命令就可以了

安装cockpit webui管理工具:(插件)

yum -y install cockpit-machines.noarch subscription-manager-cockpit.noarch

启动后,浏览器输入 ip+<端口号9090>

输入账号密码

Grep

grep是linux中的文本过滤工具,以行为单位输出

同时还有一个工具叫做egrep,和grep本质上没啥区别

grep -E = egrep

常用的正则表达式:

  • . : 一个任意字符,一定要有一个

  • * : 0个或者一个,匹配多个在它之前的字符

  • [] : []中的任意一个字符,[]内为一个范围 例如 [0-9]

  • \? : 0个或者1个它前面的字符

  • + : 匹配至少1次在它前面的字符

  • {m} : m表示次数,m次出现在它前面的字符 例如 {2}

  • $ : 结尾

  • ^ : 开头

用法:

grep -i : 忽略大小写

grep -v : 取反

grep -v ^$ : 去掉空行

grep -A <num> : 只显示匹配内容和后面指定行数的内容(行数包括匹配的那一行)

演示

不匹配配置文件中#开头的无效配置

啥都匹配

VIM编辑器

vim编辑器是vi编辑器的增强版本

用法: vim

进入vim时的模式为命令行模式,在此模式中可以通过按键的一些操作来选择进入编辑模式或者末行模式

按i或者 按o的等可以进入编辑模式,按esc退回命令行模式

按 : 进入末行模式,按esc退回命令行模式

不同模式的作用

  • 编辑模式:按a,在当前光标处后面开始编辑,按i,在当前位置编辑,按o,新建一个空行插入(大写的O为上一行插入)
  • 末行模式:能保存、退出、查找、替换

定位:

为了更直观的演示,这里用GIF,但是因为我懒,所以只演示几个

定位:在命令行模式中,直接按按键操作,不需要输入

定位这个文件的第一行:(直接按g)

定位到这个文件的最后一行: (G,可以按住shift再按g,或者直接开大写然后按g)

屏幕定位:

  • H : 屏幕内显示的内容的第一行
  • M : 屏幕内显示的内容的中间行
  • L : 屏幕内的最后一行

快速换行:(通过行号定位,需要再末行模式下)

  • :10 #指第十行

行内定位: (需要在命令行模式下)

  • ^ : 定位到行首
  • $ : 定位到行尾
  • w : 定位到下一个词

命令行模式操作

文本复制:yy(复制当前行)

复制指定行数: \yy 例如:6yy 指复制6行

p(小写):在光标下一行粘贴

P(大写):在光标上一行粘贴

删除当前行:dd

删除光标所在向下的n行:ndd (n为数字)

删除光标所在位置的字符: x 和 del按键功能一样,区别在于一个是命令行模式,一个是编辑模式

在一行中,删除从光标开始到行尾的内容: d$

乱七八糟懒得分类的操作

查找内容:

/<需要查找的内容>

当结果有多个时,按n查找下一个,按N回到上一个

以选出字符为单位的内容,按y复制: v (按键为v,小写

以行为单位选出内容,按y复制: V (大写V

批量添加内容

ctrl +v :区块选择 选择要添加的行,然后按大写i,输入要添加的字符,按ESC

末行模式

按 :

保存退出 :wq

强制放弃修改退出 :q!

强制保存退出 :x!

强制保存退出 :wq!

替换匹配到的内容

:s/<需要替换的内容>/<替换的内容>

替换所有匹配到的内容

:s/<需要替换的内容>/<替换的内容>/g

查找全文

:%s/<需要替换的内容>/<替换的内容>

指定行的范围替换

:110,180/<需要替换的内容>/<替换的内容>

计划任务atd, crond

atd:计划任务服务,一次性

atd创建的任务都是一次性的,也就是说,任务一旦执行后,就会被删除,不会有第二次

举个例子

创建一次性任务:下午6点的时候,关机

(这里面的EOT不是打上去的,是按ctrl+d,结束输入退出)

查看任务队列:

如果想看更详细的信息可以 at-c

删除任务:

crond:计划任务服务,周期性

配置文件:

配置计划任务:

crontab-e-u 自定计划任务,为哪个用户创建计划任务

演示:elapse用户每两分钟创建一个txt文件

在演示之前,需要先准备一个 .sh文件,不然计划任务无法直接创建文件

.sh内容为

#!/bin/bash
touch /tmp/$(date +%H%M)-file

结果:

01 root run-parts /etc/cron.hourly

分钟 小时 日 月 星期 执行者 命令

用法实例:

1) 每5分钟执行一次 echo “hello”

/5 * echo “hello”

* echo “hello”

0 echo “hello” # 每小时执行一次

2) 每天 19:00 执行一次 echo “hello”

00 19 * echo “hello”

3) 每周一到周五 19:00 执行一次 echo “hello”

00 19 1-5 echo “hello” # 周天 7 表示

4) 每月 1号 19:00 执行一次

00 19 01 echo “hello”

5) 每月1,15号 19:00 执行一次

00 19 1,15 echo “hello”

删除计划任务:

文件访问控制列表ACL

  1. ACL: 文件访问控制,基于用户和组的 更加精确权限控制 r : 读 w:写 x:执行
  2. ACL为文件系统功能属性,不是所有的文件系统都支持的功能

弥补原有的基本权限的不足:chown , chmod , chgrp 一个文件只有一个所有者和一个所属组

演示:

配置ACL 实现以上权限需求:1) /project目录 所属组为it
2) /project权限:it:rwx  ,sales :r-x
3) /project 权限:
 user01:rwx
 user02:r-x
 user03:---
 user04:rwx

添加用户权限

添加组权限:

(ACL用户权限优先于组的权限 ACL优先于基本权限)

删除acl权限:setfac -x

清除所有acl: setface -b

配置acl默认权限:先有权限之后才可以配置默认

mask权限:给到文件的最高权限