Linux学习--CentOS7.5

2023-11-20

CentOS7命令大全

Linux系统简介

Linux是一种操作系统
操作系统:一堆软件的集合,让计算机的硬件正常工作

Unix/Linux发展史

  • Unix诞生,1970-1-1
  • Linux之父,Linus Torwalds
    – 1991年10月,发布0.02版(第一个公开版)内核
    – 1994年03月,发布1.0版内核
    – 标准读音: 哩呐科斯

内核:合理控制众多硬件
用户------>内核-------->硬件
版本号:主版本.次版本.修订号

Linux发行版本

  • 发行版的名称/版本由发行方决定
    – Red Hat Enterprise Linux 5/6/7
    – Suse Linux Enterprise 12
    – Debian Linux 7.8
    – Ubuntu Linux 14.10/15.04

Red Hat系列版本

  • 红帽 Linux 企业版
    – 简称RHEL(Red Hat Enterprise Linux)
    – http://www.redhat.com/

  • Fedora Core 社区版
    – http://fedoraproject.org/

  • CentOS,社区企业操作系统
    – Community Enterprise Operating System
    – http://www.centos.org/

Linux目录结构(树形结构)

根目录(/):Linux系统起点(所有数据都在此目录下)

/dev:存放设备(键盘 鼠标 显示器 硬盘…)相关的数据

磁盘表示方式: 目录名+磁盘名字
hd,表示IDE设备
sd,表示SCSI设备

例如:

/dev/hda:第一块IDE设备         /dev/hdb:第二块IDE设备
/dev/sda:第一块SCSI设备       /dev/sdb:第二块SCSI设备
/dev/hde5:  第五块IDE设备第5个分区
/dev/hdd4:  第四块IDE设备第4个分区
/dev/sdb3:  第二块SCSI设备第3个分区
/dev/sde2:  第五块SCSI设备第2个分区

查看、切换以及创建目录

  • pwd
    – pwd — Print Working Directory
    – 用途:查看当前工作目录

  • cd — Change Directory
    – 用途:切换工作目录
    – 格式:cd [目标文件夹位置]

  • ls — List
    – 格式:ls [选项]… [目录或文件名]…
    –蓝色:目录 黑色:文本文件

[root@localhost ~]# pwd             #显示当前所在位置
[root@localhost ~]# cd   /          #切换到根目录
[root@localhost /]# pwd 
[root@localhost /]# ls              #显示当前目录下内容
[root@localhost /]# cd    /root     #切换到root目录
[root@localhost ~]# pwd
[root@localhost ~]# ls
[root@localhost ~]# cd /home
[root@localhost home]# pwd
[root@localhost home]# ls
[root@localhost home]# cd /boot
[root@localhost boot]# pwd
[root@localhost boot]# ls
[root@localhost /]# ls  /home
[root@localhost /]# ls  /abc
[root@localhost /]# ls  /root
[root@localhost /]# ls /root/anaconda-ks.cfg

  • 查看文本文件内容:cat
    –格式:cat 文件名
[root@localhost /]# cat /etc/passwd
  • less:分屏阅读工具
    –格式: less 文件名
    -支持上下键翻页,查看完按 q 键 退出
[root@localhost /]#  less  /etc/passwd
  • 查看系统版本信息
[root@localhost /]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@localhost /]#
  • 查看cpu信息
root@localhost /]# cat /proc/cpuinfo 
[root@localhost /]# lscpu
  • 查看内存信息
 [root@localhost /]# cat /proc/meminfo
  • 查看主机名:
[root@localhost /]# hostname
localhost.localdomain
[root@localhost /]# hostname A.QQ.cn                    #新开一个终端验证
[root@localhost /]# hostname
[root@localhost /]#
  • 查看IP地址
[root@localhost /]# ifconfig 
[root@localhost /]#  ifconfig  ens33
[root@localhost /]#  ifconfig  ens33 192.168.4.1/24              #临时设置IP地址为192.168.4.1
[root@localhost /]#  ifconfig  ens33
  • 创建文档
    –创建目录:mkdir ---------Make Directory
    -格式:mkdir [/路径/]目录名
[root@A ~]# mkdir abc
[root@A ~]# ls /root/
[root@A ~]# mkdir /opt/abc
[root@A ~]# ls /opt/
[root@A ~]# ls /opt/abc/
[root@A ~]# 
  • 创建文本文件:
    –创建文本文件(新建空文件):touch
    -格式:touch [/路径/]文件名
[root@A ~]# touch a.txt
[root@A ~]# touch /opt/b.txt
[root@A ~]# cat /opt/b.txt
[root@A ~]# 

文本内容操作

格式: head   -n  数字   文件名      #查看文件的前n行内容
      tail   -n  数字   文件名      # 查看文件的后n行内容
      tail   -f  日志文件log	      # 动态查看日志

注:
1)-n 数字可以简写为 -数字
2)不加数字默认查看的是前10行内容和后10行内容

[root@A ~]# head -2 /etc/passwd   #查看 /etc/passwd文件前2行内容
[root@A ~]# tail -2 /etc/passwd   #查看/etc/passwd文件后2行内容

grep工具

用途:输出包含指定字符串的行
格式:grep ‘查找条件’ 文件名

[root@A ~]# grep 'root'  /etc/passwd
[root@A ~]# 

关机和重启

[root@A ~]#  poweroff
[root@A ~]#  reboot

Linux命令

  • 用来实现某一功能的指令或程序
    –命令的执行依赖于解释器(/bin/bash)
    用户----->解释器----->内核------->硬件
[root@A ~]# cat /etc/shells     #查看系统自带的解释器
[root@A ~]# 

基本用法

  • 命令行的一般格式:
    基本用法:

       命令字  [选项]  [参数1]   [参数2]      .....
    

    短选项:-A -l -d …
    复合选项:-ld -la …
    长选项: --help

[root@A ~]#  cat /etc/shells 
[root@A ~]#  ls --help
[root@A ~]#   ls -a /root/
[root@A ~]#  ls -l /root
[root@A ~]#   ls -ld /root
[root@A ~]#   ls -ldh /root
  • Tab键自动补齐
    –可补齐命令字、选项、参数、文件路径、软件名、服务名
    注:一下tab键是补齐;两下tab键是查找

. : 当前目录
… : 父目录(上一层)
~user: 用户user的家目录

/root: 管理员用户的家目录
/home: 普通用户的家目录

绝对路径:以 / 开始的路径
相对路径:以当前为参照的路径(不以 / 开始的路径)

[root@A ~]#  cd /etc/pki/CA/
[root@A ~]#   pwd
[root@A ~]#   cd ..
[root@A ~]#   cd ~root
[root@A ~]#  cd ~lisi              #切换到普通用户lisi的家目录
[root@A ~]#   useradd zhangsan     #创建用户zhangsan
[root@A ~]#   cd ~zhangsan         #切换到普通用户zhangsan的家目录
[root@A ~]#  cd /etc/pki/CA        #绝对路径
[root@A ~]#   pwd
[root@A ~]# cd  /
[root@A  /]#   cd etc/             #相对路径
[root@A etc]#  cd pki/
[root@A pki]#   cd CA
[root@A CA]#   pwd

ls – list

格式: ls [选项] [目录或文件名]
常用命令选项
-l:以长格式显示(显示详细属性信息)
-A:显示所有内容包含隐藏数据(不包含. 和… 两个文件)
-d:显示目录本身(而不是内容)的属性
-h:提供易读的容量单位(K、M等)
-R:递归显示内容
-a:显示所有文件(包含. 和… 两个文件)

[root@A ~]# ls -l /etc
[root@A ~]# ls -l /root
[root@A ~]# ls -lh /etc/
[root@A ~]#  ls -ld /etc/
[root@A ~]#  ls -A /root
[root@A ~]#  ls /root
[root@A ~]#  ls -a /root
[root@A ~]#  ls -R /var

使用通配符

针对不确定的文档名称,以特殊字符表示
*:任意多个任意字符
?:单个字符
[a-z]:多个字符或连续范围中的一个,若无则忽略
{a,min,xy}:多组不同的字符串,全匹配

[root@A ~]# ls /m*               #查看以m开头的文件
[root@A ~]#  ls /etc/re*         #查看etc下以re开头的文件
[root@A ~]#  ls /etc/*.conf      #查看etc下以.conf结尾的文件
[root@A ~]#  ls /dev/tty?                         
[root@A ~]#  ls /dev/tty??
[root@A ~]#  ls /dev/tty[0-9]                         
[root@A ~]#  ls /dev/tty{1,5,7}

mkdir

mkdir — Make Dircetory
格式: mkdir [选项] [/路径/]目录名

-p: 连父目录一起创建

[root@A ~]# mkdir  -p /aa/bb/cc/dd/ee
[root@A ~]# ls  -R  /aa
[root@A ~]# mkdir -p /abc/bcd/cde/def/
[root@A ~]# ls -R /abc/

别名

别名的定义:简化复杂的命令
定义别名:
格式: alias 别名名称=‘实际执行的命令’

查看别名:alias

取消别名: unalias 别名名称

[root@A ~]# alias              #显示当前系统有效的别名
[root@A ~]# hostname
[root@A ~]# alias hn='hostname' #定义别名hn
[root@A ~]#  alias 
[root@A ~]#  hn
[root@A ~]# unalias hn         #取消别名hn
[root@A ~]#  hn

grep文本过滤工具

grep文本过滤工具
格式:grep [选项] ‘匹配模式’ 文本文件…

^ : 匹配关键字在文件的行首( 以什么开头)
$: 匹配关键字在文件的末尾(以什么结尾)
-i :忽略大小写
-v : 取反匹配

[root@A ~]# grep '127' /etc/hosts      #查找/etc/hosts文件包含127的行     
[root@A ~]#  grep -v '127' /etc/hosts  #查找/etc/hosts文件包含不127的行     
[root@A ~]# grep '^root' /etc/passwd   #查找/etc/passwd文件以字符串root开头的行     
[root@A ~]#  grep 'bash$' /etc/passwd  #查找/etc/passwd文件以字符串bash结尾的行
[root@A ~]#  grep 'Centos' /etc/redhat-release 
[root@A ~]#  grep -i  'centos' /etc/redhat-release                   
[root@A ~]#  grep 'CentOS' /etc/redhat-release

使用vim创建/修改文件

vim文本编辑器
格式:vim [[/目录/]文件名]
若目标文件不存在,则新建空文件并编辑
若目标文件已存在,则打开此文件并编辑

[root@A ~]# vim /opt/a.txt

命----i 键 或 o 键----->插入模式(按Esc回到命令模式)


式----: 键----->末行模式(按Esc回到命令模式)

在末行模式下操作:
:w 表示只保存不退出
:q 表示不保存退出
:wq 表示保存并退出
:q! 表示不保存强制退出

删除

rm删除
-rm —Remove
格式:rm [选项] 文件或目录

常用命令选项:
-r:递归删除(含目录),删除目录时必须有此选项
-f:强制删除

[root@A ~]# rm /opt/a.txt 
[root@A ~]#  ls /opt/
[root@A ~]# mkdir /opt/aa
[root@A ~]#  rm /opt/aa
[root@A ~]#  rm -r  /opt/aa
[root@A ~]#  ls /opt/
[root@A ~]#  mkdir -p /opt/aa/bb/cc/dd/
[root@A ~]#  ls -R /opt/
[root@A ~]#  rm -r /opt/aa
[root@A ~]#  mkdir -p /opt/aa/bb/cc/dd/
[root@A ~]#  rm -rf /opt/aa
[root@A ~]#  ls /opt/

移动/改名

mv 移动/改名
-mv----Move

格式:mv [选项] 原文件 目标路径

改名:在路径不变的情况下移动

[root@A ~]# mkdir /opt/aa
[root@A ~]#  touch /opt/b.txt
[root@A ~]#  ls /opt/
[root@A ~]#  mv /opt/b.txt /opt/aa/                               #将/opt下b.txt文件移动到/opt/aa目录
[root@A ~]#  ls /opt/
[root@A ~]#  ls /opt/aa
[root@A ~]#  mv /opt/aa /opt/nsd                                 #将/opt/aa目录改为nsd
[root@A ~]#  ls /opt/
[root@A ~]#  ls /opt/nsd/

复制

cp复制
cp----Copy

格式:cp [选项] 原文件 目标路径

常用命令选项:
-r: 递归,复制目录时必须有此选项

[root@A ~]# cp /etc/passwd /opt/
[root@A ~]# cp -r /var/lib/ /opt/
[root@A ~]# ls /opt/
lib  nsd  passwd
[root@A ~]# cp  /etc/fstab   /opt

复制出现同名时强制覆盖
在本次操作临时取消别名

[root@A ~]# \cp -r /var/lib/ /opt/

复制是可以支持2个以上的参数,永远把最后一个参数作为目标,其他的都是源

[root@A ~]# cp -r /etc/passwd  /etc/fstab  /var/lib/   /home/    /opt/
[root@A ~]# ls /opt

复制通常与 . 连用

[root@A opt]# cp /etc/sysconfig/network-scripts/ifcfg-ens33   .
[root@A opt]# ls
fstab  home  ifcfg-ens33  lib  passwd
[root@A opt]# 

复制时可以重新命名,目标路径下写名称

[root@A opt]#  cp /etc/passwd /opt/nsd.txt
[root@A opt]#   ls /opt/
[root@A opt]#   head -2 /etc/passwd
[root@A opt]#   head -2 /opt/nsd.txt

重定向输出

重定向:将命令的输出,作为文本文件的内容写入一个文件中

  • 覆盖重定向
  • 追加重定向
  • 类型 操作符 用途
    覆盖重定向输出 > 将命令行的正常执行输出覆盖保存到文件
    追加重定向输出 >> 将命令行的正常执行输出追加保存到文件
    覆盖重定向错误输出 2> 将命令行的错误执行输出覆盖保存到文件
    追加重定向错误输出 2>> 将命令行的错误执行输出追加保存到文件
    混合重定向 &> 将正确和错误的输出都覆盖到同一个文件
    混合重定向 &>> 将正确和错误的输出都追加到同一个文件
[root@A ~]# ls --help >  /root/a.txt
[root@A ~]# cat /root/a.txt
[root@A ~]# cat /etc/redhat-release 
[root@A ~]# cat /etc/redhat-release > /root/a.txt
[root@A ~]#  cat /root/a.txt
[root@A ~]# hostname  >>  /root/a.txt
[root@A ~]#  cat /root/a.txt
[root@A ~]#  ls --help >>  /root/a.txt
[root@A ~]#   cat /root/a.txt
[root@A ~]# ifconfig >>  /root/a.txt
[root@A ~]#   cat /root/a.txt

echo常与重定向连用

[root@A ~]# echo 123456
[root@A ~]# echo abc
[root@A ~]# echo 123456 > /root/b.txt
[root@A ~]# cat /root/b.txt 
[root@A ~]# echo aabbcc >> /root/b.txt 
[root@A ~]# cat /root/b.txt
[root@A ~]# echo abc > /root/b.txt
[root@A ~]# cat /root/b.txt

cat -n 文本文件 //查看时显示行号

 [root@A ~]# cat   -n    /etc/passwd

管道符号

管道操作:把前面命令输出结果,交由后面命令处理,作为后面命令的参数

[root@A ~]# ifconfig ens33
[root@A ~]#  ifconfig ens33 | head -2
[root@A ~]#  grep -v '^$' /etc/login.defs 
[root@A ~]#  grep -v '^#' /etc/login.defs 
[root@A ~]#  grep -v '^#' /etc/login.defs | grep -v '^$'
[root@A ~]#  ls   --help   | less

案例

显示ifconfig命令的前2行内容

        ifconfig | head  -2

显示/etc/passwd第九行内容

[root@localhost ~]# cat -n /etc/passwd | head -9 | tail -1
 9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[root@localhost ~]# head -9 /etc/passwd | tail -1
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[root@localhost ~]# 

将hostname命令的输出内容,覆盖写入到/opt/hn.txt
利用echo命令,将”tmooc“ 内容追加写入到/opt/hn.txt

[root@localhost ~]# hostname > /opt/hn.txt
[root@localhost ~]# cat /opt/hn.txt
localhost.localdomain
[root@localhost ~]# echo "tmooc"  >>  /opt/hn.txt 
[root@localhost ~]# cat /opt/hn.txt
localhost.localdomain
tmooc
[root@localhost ~]# 

重定向练习
1、将hostname命令的输出信息保存到文件/root/a.txt中

[root@localhost ~]#  hostname > /root/a.txt 
[root@localhost ~]#  cat /root/a.txt

2、将显示的内核版本信息保存到文件/root/b.txt中

[root@localhost ~]#  uname -r > /root/b.txt
[root@localhost ~]#  cat /root/b.txt

3、将系统版本信息追加保存到文件/root/a.txt中

[root@localhost ~]#  cat /etc/redhat-release >> /root/a.txt 
[root@localhost ~]#  cat /root/a.txt

4、将显示的cpu信息追加保存到文件/root/a.txt中

[root@localhost ~]#  lscpu >> /root/a.txt 
[root@localhost ~]#  cat /root/a.txt

5、将显示的内存信息保存到文件/root/b.txt中

[root@localhost ~]#  cat /proc/meminfo > /root/b.txt 
[root@localhost ~]#  cat /root/b.txt

6、利用echo命令将“tedu”追加写入到文件/root/b.txt中

[root@localhost ~]#  echo tedu >> /root/b.txt 
[root@localhost ~]#  cat /root/b.txt

查看命令帮助信息

查看命令的帮助信息
–help:查看命令的简要说明

 [root@A ~]#   ls     --help

使用man手册
一种集中的手册页文档机制
–大多数程序/配置文件/库函数都提供man手册页
man,格式化手册阅读工具
–按 上键、下键、PgUP、PgDn键滚动及翻页
–按q键退出
–按/ 键向后查找关键词(n、N切换)

 [root@A ~]#  man  ls
 [root@A ~]#  man  5  passwd

历史命令

历史命令

  • 管理/调用曾经执行过的命令
    -history: 查看历史命令列表
    -history -c:清空历史命令
    -!n:执行历史命令中的第n条命令
    -!str:执行最近一次以str开头的历史命令

调整历史命令的数量:修改/etc/profile文件里HISTSIZE字段值,默认是1000条

统计文件占用空间

统计文件占用空间
du,统计文件的占用空间

格式:du [选项] 目录或文件

常用命令选项:
-s:只统计每个参数所占用的总空间大小
-h:提供易读单位(k,M等)

[root@A ~]#  du  -s  /root
[root@A ~]#  du  -sh  /root
[root@A ~]#  du  -sh   /

系统时间

系统时间:

date–查看/调整系统日期时间
修改时间格式:date -s “yyyy-mm-dd HH:MM:SS”

[root@A ~]# date                                           #查看时间
[root@A ~]# date +%F                                   #查看年月日
[root@A ~]# date +%R             #查看时间
[root@A ~]#  date +%Y
[root@A ~]#  date +%m
[root@A ~]#  date +%d
[root@A ~]#  date +%H
[root@A ~]#  date +%M
[root@A ~]#  date +%S
[root@A ~]#  date -s "2020-10-1 08:00:00"   #设置时间为2020101[root@A ~]#  date
[root@A ~]#  hwclock -s                                  #重设系统时间

连接

制作连接文件

  • ln, 创建软连接
    –软连接---->原始文档---->文档数据
    –ln -s 原始文件或目录 软连接文件
    –若原始文件或目录被删除,连接文件将失效
    –软连接可以存放在不同的分区/文件系统

  • ln,创建硬链接
    –硬链接---->文档数据
    –ln 原始文件 硬链接文件
    –若原始文件被删除,链接文件仍可用
    –硬链接与原始文件必须在同一分区/文件系统

青色:快捷方式

[root@A ~]# ln -s /etc/shells /opt/
[root@A ~]#  ls /opt/
[root@A ~]#  cat /opt/shells 
[root@A ~]#  rm -rf /opt/*
[root@A ~]#  ls /opt/
[root@A ~]#  echo AAAA > /opt/A.txt
[root@A ~]#  ln -s /opt/A.txt /opt/B.txt
[root@A ~]#  ls   /opt
[root@A ~]#  ln /opt/A.txt /opt/C.txt
[root@A ~]#  ls /opt/
[root@A ~]#  cat /opt/A.txt 
[root@A ~]#  cat /opt/B.txt 
[root@A ~]#  cat /opt/C.txt 
[root@A ~]#  rm -rf /opt/A.txt 
[root@A ~]#  ls /opt/
[root@A ~]#  cat /opt/B.txt 
[root@A ~]#  cat /opt/C.txt 

归档和压缩

归档和压缩
归档的含义:
–将许多零散的文件整理问一个文件
–文件总的大小基本不变

压缩的含义:
–按某种算法减小文件所占用空间的大小
–恢复时按对应的逆向算法解压

常见的压缩格式及命令工具:

.gz --->gzip、gunzip
.bz2--->bzip2、bunzip2
.xz---> xz、unxz

tar工具的常用选项

-c:创建归档
-x:释放归档
-f:指定归档文件名称
-z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
-t:显示归档中的文件清单
-C:指定释放路径

制作tar包:

格式:tar 选项 /路径/压缩包的名字 被压缩的源数据

[root@A ~]#  tar -zcf   /opt/abc.tar.gz /boot/ /home/
[root@A ~]#   ls  /opt/
[root@A ~]#  tar -jcf  /opt/abc.tar.bz2 /home/ /root/
[root@A ~]#  ls  /opt/
[root@A ~]#  tar -Jcf  /opt/abc.tar.xz /boot /root /home/
[root@A ~]#  ls  /opt/

从tar备份包恢复文档:
格式: tar 选项 /路径/压缩包的名字 [-C 解压的路径]

[root@A ~]#  mkdir  /abc   /dvd
[root@A ~]# tar -xf /opt/abc.tar.gz 
[root@A ~]#  ls 
[root@A ~]#  tar -xf /opt/abc.tar.bz2 -C /abc
[root@A ~]#  ls /abc/
[root@A ~]#  tar -xf /opt/abc.tar.xz -C /dvd/
[root@A ~]#  ls /dvd
[root@A ~]#  ls /dvd/etc/
[root@A ~]#  ls /opt/

zip归档工具

归档+压缩操作
zip [-r] 备份文件.zip 被归档的文档…

释放归档+解压操作
unzip 备份文件.zip [-d 目标文件夹]

[root@localhost ~]# zip -r /opt/abc.zip /etc/passwd /home/
[root@localhost ~]# ls /opt/
[root@localhost ~]# mkdir /abcd
[root@localhost ~]# ls /opt/
[root@localhost ~]# unzip /opt/abc.zip -d  /abcd
[root@localhost ~]# ls /abc
[root@localhost ~]#  ls /abc/etc/

find精确查找

–根据预设的条件递归查找对应的文件
格式: find [目录] [条件1]
常用条件表示:
-type:类型(f:文本文件;d:目录,l:快捷方式)

[root@A ~]# find  /boot   -type   f
[root@A ~]# find  /boot   -type  d
[root@A ~]# find  /dev   -type  l
[root@A ~]#  

name “文档名称”

[root@A ~]# find /etc/ -name "passwd"
[root@A ~]#  find /etc/ -name "*tab"
[root@A ~]#  find /etc/ -name "*.conf"
[root@A ~]#  ls /etc/*.conf
[root@A ~]#  find /etc/ -name "re*"
    -size     + 或 -  文件大小(k,M,G)
[root@A ~]# find /boot/ -size -10M
[root@A ~]#  find /boot/ -size +3000k
[root@A ~]# find  /boot/  -size  +10M

-user 用户名 #按照所有者进行查找 (所有者:文件的创建者)

[root@A ~]# useradd tom
[root@A ~]# useradd zhangsan
[root@A ~]#  ls -l /home/
[root@A ~]#  find /home/ -user tom
[root@A ~]#  find / -user tom

-mtime 根据文件修改时间(所有的时间都是过去时间)
-10:最近10天之内的
+10:10天之前的

[root@A ~]# find /root -mtime +10
[root@A ~]#  find /root -mtime -10

find高级使用

与wc连用

[root@A ~]# wc /etc/passwd
	  44     85     2276       /etc/passwd
	   行数 单词  文件大小   文件名
[root@A ~]#  wc -l /etc/passwd                            #查看这个文件有多少行
[root@A ~]#  find /etc/ -name "*tab"
[root@A ~]#  find /etc/ -name "*tab" | wc -l
[root@A ~]# find /etc/ -name "*.conf"
[root@A ~]#  find /etc/ -name "*.conf" | wc -l
[root@A ~]#  rm -rf /opt/*
[root@A ~]#  mkdir /opt/nsd01
[root@A ~]#  touch /opt/nsd02.txt
[root@A ~]#  touch /opt/nsd03.txt
[root@A ~]#  find /opt/ -type f
[root@A ~]# find /opt/ -type d
[root@A ~]#  find /opt/ -name "nsd*"

-a 并且(都满足,默认是-a) -o 或者(满足其一即可)

[root@A ~]#  find /opt/ -name "nsd*" -a -type f
[root@A ~]#  find /opt/ -name "nsd*" -o -type f
	[root@A ~]#  find /opt/ -name "nsd*"  -type d

查找并处理文件

使用find命令的-exec操作
–find [目录] 条件 -exec 处理命令 {} ;
–根据条件查找并处理结果

注:-exec是额外操作
{}:替代每一个查找结果
; 处理操作结束

[root@A ~]# find /boot/ -name "vm*" -exec cp {} /opt \;                 #查找/boot目录中以vm开头的所有文件拷贝到/opt下
[root@A ~]# ls /opt/
[root@A ~]#  find /boot/ -size +10M -type f -exec cp {} /opt/ \;
[root@A ~]#  ls /opt/

案例:查找并处理文件

1、利用find查找所有用户student拥有的必须是文件,把他们拷贝到/root/findfiles文件夹中

[root@A ~]# useradd student
[root@A ~]#  mkdir /root/findfiles
[root@A ~]#  find / -user student -type f
[root@A ~]#  find / -user student -type f -exec cp {} /root/findfiles/ \;
[root@A ~]#  ls -A /root/findfiles/

2、利用find查找/boot目录下大于10M并且必须是文件,拷贝到/opt

[root@A ~]# find /boot/ -size +10M -a -type f
[root@A ~]# find /boot/ -size +10M -a -type f -exec cp {} /opt/  \;
[root@A ~]# ls /opt/
initramfs-0-rescue-cb8e00417ae6496ea70331268908d159.img
initramfs-3.10.0-862.el7.x86_64.img
initramfs-3.10.0-862.el7.x86_64kdump.img

3、利用find查找/boot/目录下以vm开头且必须是文件,拷贝到/opt

[root@A ~]# find /boot -name "vm*" -type f
/boot/vmlinuz-3.10.0-862.el7.x86_64
/boot/vmlinuz-0-rescue-cb8e00417ae6496ea70331268908d159
[root@A ~]# find /boot -name "vm*" -type f -exec cp {} /opt/ \;
[root@A ~]# ls /opt/

4、利用find查找/boot/目录下为快捷方式

[root@A ~]# find /boot/ -type l

5、利用find查找/etc目录下,以tab作为结尾的必须是文件

[root@A ~]# find /etc/ -name "*tab" -type f

mount挂载操作

mount挂载操作:可以让目录成为设备的访问点

显示光盘内容:

  • windows: 光盘文件------》光驱设备-------》cd驱动器(图标) 访问点
  • Linux: 光盘文件------》光驱设备--------》访问点(目录)
    /dev/hdc:表示光驱设备是IDE接口类型
    /dev/sr0:表示光驱设备是SCSI接口类型

1、图形将光盘文件放入设备
2、查看光驱设备

[root@A ~]#  ls  /dev/hdc
[root@A ~]#  ls  /dev/sr0
[root@A ~]#  ls  -l  /dev/cdrom

3、挂载设备

[root@A ~]#  mkdir  /dvd
[root@A ~]#  ls   /dvd

使用mount命令
格式: mount 设备路径 挂载点目录

[root@A ~]#  mount   /dev/cdrom   /dvd
[root@A ~]#  ls  /dvd

4、卸载

使用umount命令
格式:umount 挂载点目录

[root@A ~]# umount /dvd
[root@A ~]# ls /dvd

注意事项:
1、卸载时当前目录不要再挂载点目录下

[root@A dvd]# umount /dvd
umount: /dvd:目标忙。
        (有些情况下通过 lsof(8)fuser(1) 可以
         找到有关使用该设备的进程的有用信息)
[root@A dvd]# 

2、一个设备可以有多个挂载点
3、不允许一个挂载点有多个设备
4、建议挂载点目录的选择,最好自己创建

RPM的含义
RPM Package Manager
–由红帽公司提出,Redhat、SUSE等系列采用
–建立集中数据库,记录软件包安装/卸载等变化信息,分析软件包依赖关系

RPM包

RPM包文件名特征

–软件名-版本信息.操作系统.硬件架构.rpm

查询已安装的RPM软件包的信息
格式:rpm -q[子选项] [软件名称]

常用的子选项:
-a:列出已安装的所有软件包
-i:查看指定软件的详细信息
-l:查看指定软件的文件安装清单

[root@A /]# rpm -q firefox
[root@A /]#  rpm -q haha
[root@A /]#  rpm -qi firefox
[root@A /]#  rpm -ql firefox
[root@A /]#  rpm -qa
[root@A /]#  rpm -qa | wc -l
[root@A /]#  rpm  -qa  |  grep  vim

Yum

Yum机制概述

–YUM,Yellowdog Updater Modified
–基于RPM包构建的软件更新机制
–自动解决软件包依赖关系
–所有软件包由集中的YUM软件仓库提供

软件仓库的提供方式
–本地目录:file://…
–FTP或HTTP服务:ftp://… 、http://…

服务端配置:

[root@A ~]#  mount /dev/cdrom /mnt/
[root@A ~]#   ls /mnt/

客户端配置:

–仓库配置:/etc/yum.repos.d/.repo
注:客户端文件路径:/etc/yum.repos.d/
.repo,在此路径下,错误的配置文件会影响正确的配置文件

.repo 基本配置项
–[源名称] :自定义名称,具有唯一性
–name:本软件源的描述字串
–baseurl:指定YUM服务端的URL地址
–enabled:是否启用此频道
–gpgcheck:是否验证待安装的RPM包
–gpgkey:用于RPM软件包验证的密钥文件

创建mnt.repo配置文件,添加本地仓库

[root@A ~]#  vim /etc/yum.repos.d/mnt.repo
[root@A ~]#  cat /etc/yum.repos.d/mnt.repo
[mnt]
name=Centos7.5
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@A ~]#   rm -rf /etc/yum.repos.d/CentOS-*
[root@A ~]#   yum repolist             #列出仓库信息

yum命令工具

查看软件列表:
格式: yum list 软件名

[root@A ~]# yum list firefox

检索软件及相关信息
用法:yum search 关键词
yum info [软件名]…
yum provides 文档路径…

[root@A ~]#  yum search ftp                          #查找包含ftp和ftp相关的包(查找关键词ftp)
[root@A ~]#  yum info firefox                         #查看firefox软件的描述信息
[root@A ~]#  yum provides /etc/passwd         #查看/etc/passwd文件是由哪个软件产生的

安装/卸载软件包

软件包基本操作
格式:yum [-y] 指令 [软件名]…
常用指令:
install:安装指定软件包,类似于rpm -i
remove:卸载指定软件包,类似于rpm -e

[root@A ~]# yum install gcc
[root@A ~]#  rpm -q gcc
[root@A ~]#  rpm -q bind-chroot
[root@A ~]#  yum -y install bind-chroot
[root@A ~]#  rpm -q bind-chroot
[root@A ~]#  yum remove gcc
[root@A ~]#  rpm -q gcc
[root@A ~]#  yum -y remove bind-chroot

清空本地yum缓存
–适用于yum缓存存在错误时
–再次查询或更新时,会自动重建缓存

[root@A ~]# yum   clean   all
[root@A ~]# yum  repolist

计划任务

计划任务(周期性任务)
用途:按照设置的时间间隔为用户反复执行某一项固定的系统任务
软件包:cronie、crontabs
系统服务:crond
日志文件:/var/log/cron

[root@A ~]#tail   /var/log/cron    # 查看计划任务日志文件

管理计划任务策略

使用 crontab 命令
编辑:crontab -e [-u 用户名]
查看:crontab -l [-u 用户名]
清除:crontab -r [-u 用户名]

编写计划任务配置格式:

分 时 日 月 周 任务命令行(绝对路径)

*:匹配范围内任意时间
,:分隔多个不连续的时间点
-:指定连续时间范围
/n:指定时间频率,每n …

*    *      *   *    *   #每分钟执行一次

30  8   *  *  *        #每天早上8:30执行    

30  23   *  *  *       #每天晚上23:30执行  

30   23   1   *   5    #每月1号或者 每周周五晚上23:30执行        
 
30   1,5   *  *  *        #每天1:305:30执行

0     */2   *  *  *      #每隔2个小时执行一次

0  8  *  *  1-5         #每周一到周五早上8:00执行

30  8  *  *  1,3,7      #每周一,周三,周日早上8:30执行

例:每分钟记录系统时间,写入到/opt/time.txt文件中

[root@A ~]# crontab -e                  #编写计划任务
[root@A ~]# crontab -l                  #查看计划任务
*/1 * * * *  date  >> /opt/time.txt
[root@A ~]# cat /opt/time.txt 
20210401日 星期四 08:10:02 CST
[root@A ~]# 

基于账号的访问控制

–账户类别:用户账号、组账号
–识别方式:UID、GID

用户账号
–超级用户root、系统用户、普通用户

组账号:用来区分权限,不用于登录
–本组(私有组)
–附加组(从属组)

  • /etc/passwd,保存用户帐号的基本信息
    每个用户记录一行,以:分割为7个字段
    字段1:用户帐号的名称
    字段2:密码字串或占位符 x
    字段3:用户帐号的UID号
    字段4:所属基本组的GID号
    字段5:用户全名
    字段6:宿主目录
    字段7:登录Shell程序的路径

用户账号创建

useradd 添加用户

–格式:useradd [选项]… 用户名

常用命令选项
-u:指定 UID 标记号
-d:指定宿主目录(家目录),缺省为 /home/用户名
-G:指定所属的附加组
-s:指定用户的登录解释器

[root@A ~]#  useradd nsd01
[root@A ~]#   grep nsd01 /etc/passwd       
[root@A ~]# id nsd01                                              #查看已存在用户信息
[root@A ~]# useradd nsd02
[root@A ~]#  grep nsd02 /etc/passwd
[root@A ~]#  useradd -u 3453 nsd03                          #创建nsd03用户,UID为3453
[root@A ~]#  grep nsd /etc/passwd
[root@A ~]#  useradd nsd04
[root@A ~]#  grep nsd /etc/passwd
[root@A ~]#  useradd -d /opt/nsd05 nsd05                 #创建nsd05用户,宿主目录为/opt/nsd05
[root@A ~]# grep nsd05 /etc/passwd
[root@A ~]#  ls /opt/
[root@A ~]#  useradd -s /sbin/nologin nsd06              #创建nsd06用户,登录Shell解释器为/sbin/nologin
[root@A ~]#  grep nsd06 /etc/passwd
[root@A ~]#  groupadd tarena                                    #创建tarena组
[root@A ~]# useradd -G tarena nsd07                         #创建nsd07用户,附加组为tarena
[root@A ~]#  id nsd07

案例1:添加用户账号

1、创建一个名为tedu01的用户账号
2、检查/etc/passwd文件的最后一行
3、检查/home新增加的宿主目录
4、新建用户tedu02,宿主目录位于/opt/tedu02
5、新建系统账号system01,将UID设为1234,登录Shell设为/sbin/nologin
6、新建用户admin,附加组设为adm,root

[root@A ~]# useradd tedu01
[root@A ~]# tail -1 /etc/passwd
[root@A ~]# ls /home/
[root@A ~]# useradd -d /opt/tedu02 tedu02
[root@A ~]# grep tedu02 /etc/passwd
[root@A ~]# useradd -u 1234 -s /sbin/nologin system01
[root@A ~]# grep system01 /etc/passwd
[root@A ~]# useradd -G adm,root admin
[root@A ~]# id admin

设置登录密码(passwd命令):

格式:passwd [选项] 用户名
常用选项:
–stdin:从标准输入(比如管道)取密码

用户密码信息存放在/etc/shadow 文件

[root@localhost ~]# grep root/etc/shadow
root:$6$UiGI4Tc2$htsXYn5cJnOqv3P1VLcUSgfjDu2pL5yiJBuua6foZAHdwqeuLHfYUfS/vBn27Wjvoel8EJgtdsMjyquqvKAmf1:16261:0:99999:7:::

用户名:密码加密之后的字符串:从1970/01/01到最近一次密码修改经过的天数:密码最短有效天数,默认是0:密码最长有效天数,默认是99999:密码过期前警告天数,默认是7:密码过期后多少天禁用此账户:账号失效时间,默认是空:保留字段(未使用)

交互式设置

管理员给普通用户设置密码

[root@A ~]#  passwd tedu01                                           #为tedu01用户设置密码

普通用户自己给自己修改密码:

[root@A ~]#   su - tedu01			#切换用户,管理员切换不需要密码							
[nsd01@A ~]$ passwd                                                        
更改用户 nsd01 的密码 。
为 nsd01 更改 STRESS 密码。 
(当前)UNIX 密码:                             #输入旧密码                              
新的 密码:                                            #输入新密码,如tarean_1
重新输入新的 密码:                               #确认新密码,如tarean_1
passwd:所有的身份验证令牌已经成功更新。
[nsd01@A ~]$ exit
[root@A ~]# su - tedu02
[nsd02@A ~]$ su - tedu01                   #普通用户切换需要密码
密码:
[nsd01@A ~]$ exit
[nsd02@A ~]$ exit                     
[root@A ~]# passwd tedu01         #可以强制为用户修改密码,不需要知道旧密码
更改用户 tedu01 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新
[root@A ~]#

非交互式设置密码:

[root@A ~]# echo 123 | passwd --stdin tedu02
更改用户 tedu02 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@A ~]# 

案例2:设置用户密码

1、为用户tedu01设置一个密码:123456
2、过滤/etc/shadow文件中包含tedu01的内容
3、为用户system01设置密码,并测试是否能够登录
4、非交互式给用户tedu02设置密码123456
5、交互式给用户admin,设置密码redhat

删除用户(userdel)

格式:userdel [-r] 用户名
-r: 连用户家目录一起删除

[root@A ~]# userdel tedu01
[root@A ~]# grep tedu01 /etc/passwd
[root@A ~]# ls /home/
[root@A ~]# rm -rf /home/tedu01/
[root@A ~]# userdel -r admin
[root@A ~]# grep admin /etc/passwd
[root@A ~]# ls /home/

修改用户属性(usermod命令)

  • 格式:usermod [选项]… 用户名

常用命令选项
-l:更改用户帐号的登录名称
-u:用户id
-d:家目录路径
-s:登录解释器
-G:附加组 //重置附加组

[root@A ~]# useradd nsd01
[root@A ~]#  useradd nsd02
[root@A ~]#  useradd nsd03
[root@A ~]# grep nsd /etc/passwd
[root@A ~]#  usermod -u 1234 nsd01
[root@A ~]#  grep nsd01 /etc/passwd
[root@A ~]#  usermod -d /opt/nsd02 -s /sbin/nologin nsd02      #-d 修改家目录,只修改了对应的字段值,/opt下面并没有这个目录
[root@A ~]#  grep nsd02 /etc/passwd
[root@A ~]#  ls /opt/
[root@A ~]#  id nsd03
[root@A ~]#  groupadd tarena
[root@A ~]#  usermod -G tarena nsd03                          #修改用户nsd03的附加组,有则重置,没有则添加
[root@A ~]# usermod -G tarena nsd03
[root@A ~]#  id nsd03
[root@A ~]#  groupadd abc
[root@A ~]#  usermod -G abc nsd03
[root@A ~]#  id nsd03

用户初始配置文件

配置文件来源:
–新建用户时,根据/etc/skel模板目录复制
主要的初始配置文件:
– ~/.bash_profile:每次登录时执行
– ~/.bashrc:每次进入新的Bash环境时执行
– ~/.bash_logout:每次退出登录时执行

[root@localhost ~]# useradd nsd09
[root@localhost ~]# ls -A /home/nsd09/                   #查看nsd09用户家目录下的所有文件
[root@localhost ~]# ls -A /etc/skel/                      #查看/etc/skel/目录下的所有文件.bash_logout .bash_profile .bashrc .mozilla
[root@localhost ~]# ls --help > /etc/skel/ls.txt
[root@localhost ~]# ls -A /etc/skel/
[root@localhost ~]# useradd nsd10
[root@localhost ~]# ls -A /home/nsd10/          #新创建出来的用户有ls.txt文件
[root@localhost ~]# useradd nsd11
[root@localhost ~]# ls -A /home/nsd11

设置别名

[root@A ~]# vim  /root/.bashrc
alias  hn='hostname'
[root@A ~]# hn                                 #失败
bash: hn: 未找到命令...
新开启一个终端验证:
[root@A ~]# hn                      #验证定义别名是否生效

使用普通用户测试

[root@A ~]# su - nsd05
[nsd05@A ~]$ hn                      #失败,.bashrc只会对自己的用户生效
bash: hn: 未找到命令...

全局配置(所有用户都有效),配置文件/etc/bashrc

[root@A ~]# vim  /etc/bashrc
alias haha='echo haha'

新开启一个终端验证

[root@A ~]# haha
haha

使用普通用户测试

[root@A ~]# su - nsd05
[nsd05@A ~]$ haha                                
haha

组账号基本操作

解析组账号文件

  • /etc/group,保存组账号的基本信息
    –每个组记录一行,以:分割为4个字段
    字段1:组账号的名称
    字段2:密码占位符x
    字段3:组账号的GID号
    字段4:本组的成员用户列表

  • /etc/gshadow:保存组账号的管理信息
    –每个组记录一行,以:分割为4个字段
    字段1:组账号的名称
    字段2:加密后的密码字符串
    字段3:本组的管理员列表
    字段4:本组的成员用户列表

添加组账号(groupadd命令)

–格式:groupadd [-g GID] 组名

[root@A ~]# groupadd adminuser
[root@A ~]#   grep adminuser /etc/group

gpasswd管理组成员

  • 格式:gpasswd [选项]… 组名
    常用命令选项:
    -A:定义组管理员列表
    -a:添加组成员,每次只能加一个
    -d:删除组成员,每次只能删一个
    -M:定义组成员用户列表,可设置多个
[root@A ~]# groupadd stugrp
[root@A ~]# grep stugrp /etc/group
stugrp:x:1001:
[root@A ~]# useradd nsd01
[root@A ~]# useradd nsd02
[root@A ~]# useradd nsd03
[root@A ~]# useradd nsd04
[root@A ~]# grep nsd /etc/passwd
[root@A ~]# gpasswd -A nsd01 stugrp                #定义stugrp管理员列表是nsd01
[root@A ~]# grep stugrp /etc/gshadow
[root@A ~]# gpasswd -a nsd02 stugrp             #将nsd02用户加入到stugrp组里
[root@A ~]# grep stugrp /etc/group
[root@A ~]# gpasswd -a nsd03 stugrp
[root@A ~]# grep stugrp /etc/group
[root@A ~]# gpasswd -M nsd04,nsd05,nsd01 stugrp        #定义组成员列表为nsd04,nsd05,nsd01
[root@A ~]# grep stugrp /etc/group 
[root@A ~]# gpasswd -a nsd03 stugrp
[root@A ~]# grep stugrp /etc/group
[root@A ~]# gpasswd -d nsd03 stugrp           #将nsd03用户从stugrp组里移除

组的删除(groupdel)

格式:groupdel 组名
–删除的目标组不能是用户的基本组

[root@A ~]# groupdel stugrp
[root@A ~]# grep stugrp /etc/group
[root@A ~]# groupdel nsd01
groupdel:不能移除用户“nsd01”的主组
[root@A ~]#

基本权限的类别

访问方式(权限)
–读取:允许查看内容-read r
–写入:允许修改内容-write w
–可执行:允许运行和切换-excute x

权限适用对象(归属)
–所有者:拥有此文件/目录的用户-user u
–所属组:拥有此文件/目录的组-group g
–其他用户:除所有者、所属组以外的用户-other o

查看权限:
使用ls -l 命令
–ls -ld 文件或目录
以- 开头:文本文件
以d 开头:目录
以l 开头:快捷方式

[root@A ~]# ls -l /dev/cdrom 
lrwxrwxrwx. 1 root root 3 41 07:38 /dev/cdrom -> sr0
[root@A ~]# ls -ld /nsd01/
drwxr-xr-x. 2 root root 6 41 16:25 /nsd01/
[root@A ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2667 41 15:06 /etc/passwd
[root@A ~]#
注:输出信息包括7个字段
            权限位       硬连接数      属主      属组     大小     最后修改时间    文件/目录名称

修改权限

使用chmod命令
–格式:chmod [-R] 归属关系±=权限类别 文件/目录
-R:递归修改

[root@A ~]# mkdir /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod u-w /nsd01/                                   #所有者取消w权限
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod u+w /nsd01                                   #所有者添加w权限
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod g=r /nsd01                                     #所属组只读权限
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod o=--- /nsd01                                   #其他人没有任何权限
[root@A ~]# ls -ld /nsd01

同时设置权限

[root@A ~]# chmod u=rwx,o=rx /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod u=rwx,g=rx,o=rwx /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod ugo=rwx /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod u=rwx,g=rwx,o=rwx /nsd01
[root@A ~]# mkdir -p /opt/aa/bb/cc
[root@A ~]# ls -ld /opt/aa/
[root@A ~]# ls -ld /opt/aa/bb/
[root@A ~]# chmod o=--- /opt/aa/
[root@A ~]# ls -ld /opt/aa/
[root@A ~]# ls -ld /opt/aa/bb/

-R:递归修改权限,目录本身包括此目录里面的都会发生变化

[root@A ~]# chmod -R o=--- /opt/aa/
[root@A ~]# ls -ld /opt/aa/
[root@A ~]# ls -ld /opt/aa/bb/cc

实验不同用户写入文件

[root@A ~]# mkdir /nsd02
[root@A ~]# echo 123 > /nsd02/a.txt
[root@A ~]# ls /nsd02/
[root@A ~]# cat /nsd02/a.txt 
[root@A ~]# ls -l /nsd02/a.txt
[root@A ~]# useradd zhangsan
[root@A ~]# id zhangsan

使用zhangsan用户测试
[root@A ~]# su - zhangsan
[zhangsan@A ~]$ cat /nsd02/a.txt #可以查看
[zhangsan@A ~]$ vim /nsd02/a.txt #写入失败
[zhangsan@A ~]$ echo aaa > /nsd02/a.txt
-bash: /nsd02/a.txt: 权限不够

其他人赋予w权限

[root@A ~]# chmod o+w /nsd02/a.txt
[root@A ~]# ls -l /nsd02/a.txt
[root@A ~]# su - zhangsan
[zhangsan@A ~]$ echo aaa > /nsd02/a.txt                            #写入成功

对于文本文件:

r:读取权限   cat    less   head   tail等
w:写入权限    vim   >   >> 
x:可执行权限   Shell脚本编写时可以赋予,默认文本文件每有可执行权限

实验不同用户操作目录:

[root@A ~]# ls -ld /nsd02/
[root@A ~]# id zhangsan

使用zhangsan用户测试

[root@A ~]# su - zhangsan
[zhangsan@A ~]$ cd /nsd02/
[zhangsan@A nsd02]$ ls
a.txt
[zhangsan@A nsd02]$ exit

其他人取消x权限

[root@A ~]# chmod o-x /nsd02/                 
[root@A ~]# ls -ld /nsd02/

使用zhangsan用户测试

[root@A ~]# su - zhangsan 
[zhangsan@A ~]$ cd /nsd02/                                 #失败
-bash: cd: /nsd02/: 权限不够
[zhangsan@A ~]$ ls /nsd02/                                  #查看虽然显示,但是异常
ls: 无法访问/nsd02/a.txt: 权限不够
a.txt
[zhangsan@A ~]$ ls -l /nsd02/                            

其他人赋予rwx权限,在目录下写入内容,但是修改的是目录里面的内容,对目录本身没有修改权限

[root@A ~]# chmod o=rwx /nsd02/
[root@A ~]# ls -ld /nsd02/

使用zhangsan用户测试

[root@A ~]# su - zhangsan 
[zhangsan@A ~]$ mkdir /nsd02/abc
[zhangsan@A ~]$ touch /nsd02/a.txt
[zhangsan@A ~]$ mv /nsd02/ /stu02                              #失败
mv: 无法将"/nsd02/" 移动至"/stu02": 权限不够
[zhangsan@A ~]$ 

如果想对目录本身有修改的权限,找此目录的父目录即可

[root@A ~]# ls -ld /
[root@A ~]# chmod o=rwx /
[root@A ~]# ls -ld /

使用zhangsan用户测试

[root@A ~]# su - zhangsan 
[zhangsan@A ~]$ mv /nsd02/ /stu02                         #成功

将/目录其他人权限改为rx

[root@A ~]# chmod o=rx /
[root@A ~]# ls -ld /

其他人只给x权限,没有意义

[root@A ~]# chmod o=x /stu02
[root@A ~]# ls -ld /stu02

使用zhangsan用户测试

[root@A ~]# su - zhangsan 
[zhangsan@A ~]$ cd /stu02/
[zhangsan@A stu02]$ ls
ls: 无法打开目录.: 权限不够
[zhangsan@A stu02]$ mkdir aaa
mkdir: 无法创建目录"aaa": 权限不够
[zhangsan@A stu02]$ 

其他人赋予rx权限

[root@A ~]# chmod o=rx /stu02/
[root@A ~]# ls -ld /stu02

目录的r权限:能够ls浏览此目录内容
目录的w权限:能够执行rm/cp/mv/mkdir/touch等更改目录内容的操作
目录的x权限:能够cd切换到此目录

案例:设置基本权限

设置基本权限
新建/nsddir1/目录,在此目录下新建readme.txt文件,并进一步完成下列操作:
1)使用户zhangsan能够在此目录下创建/删除子目录
2)使用户zhangsan能够修改readme.txt文件
3)调整此目录的权限,使任何用户都不能进入,然后测试用户zhangsan是否还能修改readme.txt
4)为此目录及其下所有文档设置权限为rwxr-x—

权限位的8进制表示
r,w,x分别对应4,2,1 然后3组分别求和

7:rwx 6:rw- 5:r-x 4:r-- 3:-wx 2:-w- 1:–x 0:—

[root@A ~]# mkdir /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod 700 /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod 644 /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod 750 /nsd01
[root@A ~]# ls -ld /nsd01
[root@A ~]# chmod u=7,g=5 /nsd01                                    #不支持这样写法,报语法错误
chmod: 无效模式:"u=7,g=5"
Try 'chmod --help' for more information.
[root@A ~]# chmod u=rwx,g=rx /nsd01

归属关系

修改归属关系

使用chown命令,-R递归设置
–chown [-R] 属主 文件
–chown [-R] :属组 文件
–chown [-R] 属主:属组 文件

[root@A ~]# mkdir /nsd02
[root@A ~]# ls -ld /nsd02
[root@A ~]#  useradd dc
[root@A ~]#  groupadd stugrp
[root@A ~]#  chown dc:stugrp /nsd02                         #同时修改属主和属组
[root@A ~]#  ls -ld /nsd02
[root@A ~]#  chown zhangsan /nsd02/                      #仅修改属主
[root@A ~]#  ls -ld /nsd02
[root@A ~]#  chown :root /nsd02                               #仅修改属组
[root@A ~]#  ls -ld /nsd02
[root@A ~]#  mkdir -p /opt/aa/bb/cc
[root@A ~]#  chown dc /opt/aa/
[root@A ~]#  ls -ld /opt/aa/
[root@A ~]#  ls -ld /opt/aa/bb/
[root@A ~]#  chown -R  dc /opt/aa/                          #递归修改所有者
[root@A ~]#  ls -ld /opt/aa/
[root@A ~]# ls -ld /opt/aa/bb/
[root@A ~]#  ls -ld /opt/aa/bb/cc/

实验:

[root@A ~]# mkdir /nsd03
[root@A ~]#  ls -ld /nsd03
[root@A ~]#  chmod o=--- /nsd03/
[root@A ~]#  ls -ld /nsd03
[root@A ~]#  chown zhangsan:stugrp /nsd03/
[root@A ~]#  ls -ld /nsd03

使用zhangsan用户和lisi用户测试,zhangsan用户有读写执行的权限,其他用户没有权限

[root@A ~]# su - zhangsan
	[zhangsan@A ~]$ mkdir /nsd03/aa
	[zhangsan@A ~]$ touch /nsd03/abc01.txt
	[zhangsan@A ~]$ ls /nsd03/
	aa  abc01.txt
	[zhangsan@A ~]$ cd /nsd03/
	[root@A ~]# su - lisi
	[lisi@A ~]$ mkdir /nsd03/aa
	mkdir: 无法创建目录"/nsd03/aa": 权限不够
	[lisi@A ~]$ cd /nsd03/
	-bash: cd: /nsd03/: 权限不够
	[lisi@A ~]$ 

把lisi加入到stugrp这个组里,继承组的权限

[root@A ~]#  gpasswd -a lisi stugrp
[root@A ~]#  id lisi
[root@A ~]#  ls -ld /nsd03/
[root@A ~]# su - lisi
[lisi@A ~]$ cd /nsd03/

去掉所有者的执行权限,zhangsan添加到stugrp组里,虽然组里有执行权限,但是依然不能cd

[root@A ~]#  chmod u-x /nsd03
[root@A ~]#  ls -ld /nsd03/
[root@A ~]#  gpasswd -a zhangsan stugrp
[root@A ~]#  ls -ld /nsd03/
[root@A ~]# su - zhangsan
[zhangsan@A ~]$ cd /nsd03/
-bash: cd: /nsd02/: 权限不够

如何判断一个用户对某目录所具备的权限是什么?

1、判断用户身份 所有者>所属组>其他人 匹配即停止
2、查看对应身份的权限

–一般文件默认均不给x执行权限
–其他取决于umask设置

[root@A ~]# mkdir /nsd02
[root@A ~]# touch /a.txt
[root@A ~]# ls -ld /nsd02/
drwxr-xr-x. 2 root root 6 48 14:03 /nsd02/
[root@A ~]# ls -l /a.txt 
-rw-r--r--. 1 root root 0 48 14:03 /a.txt
[root@A ~]# umask                                               #查看uamsk值
0022
[root@A ~]# umask -S                                           #-S 直接显示默认权限
u=rwx,g=rx,o=rx
[root@A ~]# umask 222
[root@A ~]# umask 
[root@A ~]# mkdir /nsd03
[root@A ~]# ls -ld /nsd03
[root@A ~]# mkdir -m 700 /nsd04                        #创建目录时指定权限
[root@A ~]# ls -ld /nsd04
[root@A ~]# umask 022
[root@A ~]# umask 

Set GID
–占用属组的x位
–显示为s或S,取决于属组是否有x权限(s:有x执行权限,S:没有x执行权限)
–对目录有效
–在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份

[root@A ~]# mkdir  /nsd02
[root@A ~]# groupadd stugrp
[root@A ~]# chown :stugrp  /nsd02
[root@A ~]# ls -ld /nsd02	
[root@A ~]# mkdir /nsd02/abc01
[root@A ~]# ls -ld /nsd02/abc01
[root@A ~]# ls -ld /nsd02/
[root@A ~]# chmod g+s /nsd02/
[root@A ~]# mkdir /nsd02/abc02
[root@A ~]# ls -ld /nsd02/abc02
[root@A ~]# 

案例:SGID练习

  1. 创建/nsdpublic目录,将属组改为tarena,进一步完成下列操作:
    1)新建子目录nsd01、子文件test01.txt,查看两者的权限及归属
    2)为此目录添加SGID权限,再新建子目录nsd02、子文件test02.txt
    3)查看上述子目录及文件的权限及归属
[root@A ~]# mkdir /nsdpublic
[root@A ~]# ls -ld /nsdpublic
[root@A ~]# grep tarena /etc/group
[root@A ~]# groupadd tarena
[root@A ~]# chown :tarena /nsdpublic
[root@A ~]# mkdir /nsdpublic/nsd01
[root@A ~]# touch /nsdpublic/test01.txt
[root@A ~]# ls -ld /nsdpublic/
[root@A ~]# ls -l /nsdpublic/test01.txt
[root@A ~]# ls -ld /nsdpublic/nsd01/
[root@A ~]# chmod g+s /nsdpublic/
[root@A ~]# ls -ld /nsdpublic/
[root@A ~]# touch /nsdpublic/test02.txt
[root@A ~]# mkdir /nsdpublic/nsd02
[root@A ~]# ls -ld /nsdpublic/nsd02
[root@A ~]# ls -l /nsdpublic/test02.txt
[root@A ~]# ls -ld /nsdpublic/nsd01/

Sticky Bit权限(粘滞位,t权限)

–占用其他人(Other)的x位
–显示为t或T,取决于其他人是否有x权限(t:有x执行权限,T:没有x执行权限)
–使用于目录,用来限制用户滥用写入权
–在设置了粘滞位的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档

[root@A ~]#  mkdir  /home/public
[root@A ~]#  chmod 777 /home/public

模拟zhangsan和lisi用户创建文件,此时创建的文件是任何人可以删除的

[root@A ~]#  su - zhangsan
[zhangsan@A ~]$ touch /home/public/zhangsan.txt
[zhangsan@A ~]$ exit
[root@A ~]#  su - lisi
[lisi@A ~]$ touch /home/public/lisi.txt
[lisi@A ~]$ rm -rf /home/public/zhangsan.txt                                #可以删除成功

加上t权限

[root@A ~]#  chmod  o+t  /home/public
[root@A ~]#  su - zhangsan
[zhangsan@A ~]$ touch /home/public/zhangsan.txt
[zhangsan@A ~]$ rm -rf /home/public/lisi.txt                     #删除失败

附加知识(扩展)
Set UID权限
–占用属主(User)的x位
–显示为s或S,取决于属主是否有x权限(s:有x执行权限,S:没有x执行权限)
–仅对可执行的程序有意义
–当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限

[root@A ~]# mkdir /abc
[root@A ~]# /usr/bin/mkdir /abc1
[root@A ~]# ls  /
[root@A ~]# cp /usr/bin/mkdir /usr/bin/mydir
[root@A ~]# /usr/bin/mydir /abc2

使用zhangsan用户测试

[root@A ~]# su - zhangsan
[zhangsan@A ~]$ /usr/bin/mydir /abc4                      #创建失败
/usr/bin/mydir: 无法创建目录"/abc4": 权限不够

加上SUID权限

[root@A ~]# chmod u+s /usr/bin/mydir
[root@A ~]# ls -ld /usr/bin/mydir

使用zhangsan用户测试

[root@A ~]# su - zhangsan
[zhangsan@A ~]$ /usr/bin/mydir /abc4                      #创建成功

ACL策略简介

文档的局限性
–任何人只属于三种角色:属主、属组、其他人
–无法实现更精细的控制

acl访问策略
–能够对个别用户、个别组设置独立的权限
–大多数挂载的EXT3/4、XFS文件系统默认支持

设置ACL访问控制策略
使用getfacl、setfacl命令
–getfacl 文档 查看ACL权限
–setfacl [-R] -m u:用户名:权限 文档 #-m 定义ACL策略
–setfacl [-R] -m g:组名:权限 文档
–setfacl [-R] -x u:用户名 文档 #-x 删除指定的ACL策略
–setfacl [-R] -b 文档 #-b 删除所有的ACL策略

[root@A ~]# mkdir /nsd01
[root@A ~]#  setfacl -m u:lisi:rwx /nsd01
[root@A ~]#  getfacl /nsd01
[root@A ~]#  setfacl -m u:dc:rx /nsd01
[root@A ~]#  useradd dc
[root@A ~]# setfacl -m u:dc:rx /nsd01
[root@A ~]#  setfacl -m u:zhangsan:rx /nsd01
[root@A ~]#  getfacl /nsd01
[root@A ~]#  setfacl -x u:lisi /nsd01/
[root@A ~]#  getfacl /nsd01
[root@A ~]#  setfacl -b /nsd01/
[root@A ~]#  getfacl /nsd01
[root@A ~]# mkdir -p /opt/aa/bb/
[root@A ~]# setfacl -Rm  u:dc:rx /opt/aa/                                  #递归设置权限
[root@A ~]# getfacl /opt/aa/
[root@A ~]# getfacl /opt/aa/bb/

设置拒绝权限

[root@A ~]# setfacl -m u:lisi:--- /nsd01/
[root@A ~]# getfacl /nsd01/
[root@A ~]# su - lisi
[lisi@A ~]$ cd /nsd01
-bash: cd: /nsd01: 权限不够

权限总结

  1. 权限的分类是什么?

基本权限,附加权限,ACL权限

  1. 基本权限的分类是什么?

r w x

  1. 归属关系都有哪些?

属主、属组、其他人

  1. 用户的分类?组账号的分类?

超级管理root、系统用户、普通用户 组账号: 基本组、附加组

  1. 唯一标识用户身份的是什么?

UID

  1. 保存用户信息的配置文件是?里面的字段值都是什么意思?

/etc/passwd 用户名:密码占位符x:UID:GID:用户描述信息:用户家目录:登录shell解释器

  1. 保存组账号基本信息的配置文件是?里面的字段值是什么意思?

/etc/group 组名称:密码占位符x:GID:组成员列表

  1. 保存组账号管理信息的配置文件是?里面的字段值是什么意思?

/etc/gshadow 组名称:加密后的密码字符串:管理员列表:组成员列表

  1. 如何创建用户?如何修改用户的属性?分别说出下列选项意思-d -G -s -u

useradd、usermod

  1. 如何修改权限?如何修改归属关系?

chmod、chown

  1. 文件/目录默认的权限是?

文件:644 目录:755 取决于umask设置

  1. 用户的初始配置文件来自于哪个模板目录

/etc/skel

  1. 如何创建组?如何删除组?如何往组里添加成员?如何删除组成员?

groupadd 组名、groupdel 组名 、gpasswd -a 用户名 组名

案例1:创建用户和组
1、一个名为tarena的组
2、一个名为natasha的用户,其属于tarena组,这个组是该用户的从属组
3、一个名为harry的用户,其属于tarena组,这个组是该用户的从属组
4、一个名为sarah的用户,其在系统中没有可交互的shell,并且不是tarena这个组的成员用户
5、为natasha、harry、sarah设置密码为redhat

[root@A ~]# groupadd tarena
[root@A ~]# grep tarena /etc/group
[root@A ~]# useradd -G tarena natasha
[root@A ~]# id natasha
uid=1001(natasha) gid=1002(natasha)=1002(natasha),1001(tarena)
[root@A ~]# useradd -G tarena harry
[root@A ~]# id harry
uid=1002(harry) gid=1003(harry)=1003(harry),1001(tarena)
[root@A ~]# useradd -s /sbin/nologin sarah
[root@A ~]# grep sarah /etc/passwd
sarah:x:1004:1005::/home/sarah:/sbin/nologin
[root@A ~]# echo redhat | passwd --stdin natasha
[root@A ~]# echo redhat | passwd --stdin harry
[root@A ~]# echo redhat | passwd --stdin sarah

案例2:配置文件/var/tmp/fstab的权限
拷贝文件/etc/fstab到/var/tmp/fstab,配置文件/var/tmp/fstab的权限:
1、文件/var/tmp/fstab的拥有者是root用户
2、文件/var/tmp/fstab属于root组
3、文件/var/tmp/fstab对任何人都不可执行
4、用户natasha能够对文件/var/tmp/fstab执行读和写操作
5、用户harry对文件/var/tmp/fstab既不能读,也不能写
6、所有其他用户(当前的和将来的)能够对文件/var/tmp/fstab进行读操作

[root@A ~]# cp /etc/fstab /var/tmp/fstab
[root@A ~]# ls -l /var/tmp/fstab 
-rw-r--r--. 1 root root 541 412 08:35 /var/tmp/fstab
[root@A ~]# setfacl -m u:natasha:rw /var/tmp/fstab
[root@A ~]# setfacl -m u:harry:- /var/tmp/fstab	

磁盘分区规划及使用

分区规划及使用
一个扇区是512字节
一块硬盘的“艺术”之旅
识别硬盘 => 分区规划 => 格式化 => 挂载使用
毛坯楼层 => 打隔断 => 装修 => 入驻

一、识别硬盘

[root@A ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   80G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   79G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  ├─centos-swap 253:1    0    2G  0 lvm  [SWAP]
  └─centos-home 253:2    0   27G  0 lvm  /home
sdb               8:16   0   10G  0 disk 
sr0              11:0    1  8.8G  0 rom  /run/media/root/Ce
[root@A ~]# 

二、分区规划
分区模式:MBR GPT

MBR分区模式:
分区类型:主分区、扩展分区、逻辑分区
最多只能有4个主分区
扩展分区最多只能有一个,空间不能直接存储数据
逻辑分区可以有无限个,必须建立在扩展分区上
最大空间支持:2T

3个主分区+1个扩展分区+n个逻辑分区(只限实验操作时)

[root@A ~]# fdisk    /dev/sdb
创建分区n--->回车--->回车--->回车---->Last 扇区+2G
创建分区n--->回车--->回车--->回车---->Last 扇区+2G
p                                //打印分区表
w		 //保存(将更改写入磁盘)
d    分区号                //删除分区
q                             //不保存退出
[root@A ~]#  lsblk
[root@A ~]#  ls /dev/sdb*
[root@A ~]# fdisk    /dev/sdb
创建分区n--->回车--->回车--->回车---->Last 扇区+2G
创建分区n--->回车--->回车--->回车---->Last 扇区 回车
创建分区n--->回车--->Last 扇区 +1G
创建分区n--->回车--->Last 扇区 +1G
w
[root@A ~]#  lsblk

案例:硬盘分区练习

添加一块10G硬盘,采用msdos分区模式,完成如下操作:
1、划分2个2G的主分区,一个1G的主分区,2个1G的逻辑分区
2、将/dev/sdb3格式化为ext4的文件系统类型,将第2个逻辑分区格式化为xfs的文件系统类型
3、实现开机自动挂载/dev/sdb3,挂载到/mydb1目录

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0xeb8d8a05 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519)+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519)+2G
分区 2 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): 
Using default response p
分区号 (3,4,默认 3):
起始 扇区 (8390656-20971519,默认为 8390656):
将使用默认值 8390656
Last 扇区, +扇区 or +size{K,M,G} (8390656-20971519,默认为 20971519)+1G
分区 3 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): 
Using default response e
已选择分区 4
起始 扇区 (10487808-20971519,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-20971519,默认为 20971519):
将使用默认值 20971519
分区 4 已设置为 Extended 类型,大小设为 5 GiB

命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (10489856-20971519,默认为 10489856):
将使用默认值 10489856
Last 扇区, +扇区 or +size{K,M,G} (10489856-20971519,默认为 20971519)+1G
分区 5 已设置为 Linux 类型,大小设为 1 GiB

命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (12589056-20971519,默认为 12589056):
将使用默认值 12589056
Last 扇区, +扇区 or +size{K,M,G} (12589056-20971519,默认为 20971519)+1G
分区 6 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

[root@localhost ~]# mkfs.ext4 /dev/sdb3
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@localhost ~]# mkfs.xfs /dev/sdb6
meta-data=/dev/sdb6              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=262144, 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@localhost ~]# blkid /dev/sdb*
/dev/sdb: PTTYPE="dos" 
/dev/sdb3: UUID="7d0e65a5-3eaf-48fd-ae34-f4c9e7f4eb6f" TYPE="ext4" 
/dev/sdb4: PTTYPE="dos" 
/dev/sdb6: UUID="0f371f8e-2ff8-4c1d-a69b-15cbb8dab897" TYPE="xfs" 

[root@localhost ~]# mkdir /mydb1
[root@localhost ~]# vim /etc/fstab 
[root@localhost ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Mar 14 21:17:33 2021
#
# 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
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=7462cd8c-9911-4b52-bd38-c6a9c97802c6 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb3 /mydb1 ext4 defaults 0 0 
[root@localhost ~]# mount -a


交换空间

–相当于虚拟内存
–当物理内存不够用时,使用磁盘空间来模拟内存
–在一定程度上缓解内存不足的问题
–交换分区:以空闲分区充当的交换空间
–交换文件:以文件模拟的设备充当的交换空间

使用交换分区做交换空间

[root@A ~]# mkswap /dev/sdb1                                      #格式化交换分区
[root@A ~]# swapon /dev/sdb1                                       #启用交换分区
[root@A ~]# swapon -s                                                    #查看交换分区
[root@A ~]# free -m                                                        #查看剩余内存和交换空间大小
[root@A ~]# mkswap /dev/sdb2
[root@A ~]# swapon /dev/sdb2
[root@A ~]# swapon -s
[root@A ~]# free -m 
[root@A ~]# swapoff   /dev/sdb1                              #停用交换分区
[root@A ~]# swapoff  /dev/sdb2
[root@A ~]# swapon -s
[root@A ~]# free -m 
[root@A ~]#  vim   /etc/fstab                                #将交换分区设置为开机自动挂载
[root@A ~]# tail -2 /etc/fstab 
/dev/sdb1   swap  swap   defaults 0 0
/dev/sdb2  swap  swap  defaults  0 0 
[root@A ~]#  swapon -a
[root@A ~]#  swapon -s

文件扩展交换空间

生成大的文件用dd命令
–格式:dd if=源设备 of=目标设备 bs=块大小 count=块数

[root@A ~]# dd if=/dev/zero of=/opt/swap.txt bs=1M  count=2048                        #/dev/zero专门生产数据的设备
[root@A ~]#   ls  -lh    /opt/swap.txt
[root@A ~]#  mkswap /opt/swap.txt 
[root@A ~]#  swapon /opt/swap.txt
[root@A ~]#  swapon -s
[root@A ~]#  free -m
[root@A ~]#  chmod 600 /opt/swap.txt
[root@A ~]#  swapoff  /opt/swap.txt
[root@A ~]#  vim  /etc/fstab
/opt/swap.txt   swap  swap   defaults  0 0
[root@A ~]# swapon  -a
[root@A ~]# swapon -s

逻辑卷(LVM)简介

一、逻辑卷作用
1、可以整合分散的磁盘空间
2、逻辑卷的空间可以动态扩容

二、逻辑卷制作过程
将众多的物理卷(pv)组建成卷组(vg),在从卷组中划分逻辑卷(lv)

三、制作逻辑卷
添加一块80G的硬盘,采用MBR模式进行分区,要求如下:
1、划分3个10G的主分区,一个扩展分区,2个10G的逻辑分区

[root@A ~]# lsblk
........
sdc                      8:32   0   80G  0 disk 
├─sdc1                   8:33   0   10G  0 part 
├─sdc2                   8:34   0   10G  0 part 
├─sdc3                   8:35   0   10G  0 part 
├─sdc4                   8:36   0    1K  0 part 
├─sdc5                   8:37   0   10G  0 part 
└─sdc6                   8:38   0   10G  0 part 
sr0                     11:0    1  8.8G  0 rom  /run/media/root/CentOS 7 x86_64
[root@A ~]# 

LVM快速部署及使用

  1. 创建卷组
    –格式:vgcreate 卷组名 设备路径
[root@A ~]# pvcreate /dev/sdb1 /dev/sdb2                                  #创建物理卷,可以不用写,直接使用vgcreate创建也是可以的
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
[root@A ~]# pvs                                                                               #查看物理卷信息
[root@A ~]# vgcreate myvg /dev/sdb1  /dev/sdb2                           #创建卷组
 Volume group "myvg" successfully created
[root@A ~]# vgs                                                                              #查看卷组信息
[root@A ~]# 
  1. 创建逻辑卷
    –格式:lvcreate -L 逻辑卷大小 -n 逻辑卷名 卷组名
[root@A ~]# lvcreate -L 16G -n myvo myvg                        #创建名为myvo的逻辑卷,大小为16G
Logical volume "myvo" created.
[root@A ~]# lvs                                                                   #查看逻辑卷信息
[root@A ~]# ls /dev/dm-0                                                   #逻辑卷的名字,不好查看到底是哪一个

可以直接查看(/dev/卷组名/逻辑卷名),是一个快捷方式

[root@A ~]# ls -l /dev/myvg/myvo 
lrwxrwxrwx. 1 root root 7 415 14:20 /dev/myvg/myvo -> ../dm-4
  1. 逻辑卷的使用
    格式化:
[root@A ~]# mkfs.ext4 /dev/myvg/myvo 
[root@A ~]# blkid /dev/myvg/myvo
/dev/myvg/myvo: UUID="2d2b2325-847e-4b4b-b5d8-0a5d31fec2f1" TYPE="ext4" 

挂载使用:

[root@A ~]# mount /dev/myvg/myvo /vo
[root@A ~]# df -h /vo
[root@A ~]# ls -l /dev/mapper/myvg-myvo                                                      #逻辑卷的快捷方式
lrwxrwxrwx. 1 root root 7 415 14:42 /dev/mapper/myvg-myvo -> ../dm-4
[root@A ~]# ls -l /dev/myvg/myvo 
lrwxrwxrwx. 1 root root 7 415 14:42 /dev/myvg/myvo -> ../dm-4
[root@A ~]#  umount  /vo
[root@A ~]#  vim  /etc/fstab
/dev/myvg/myvo        /vo      ext4    defaults  0 0
[root@A ~]#  mount  -a
[root@A ~]#  df  -h 

案例:新建一个逻辑卷

使用/dev/sdb3构建LVM存储
1、新建一个名为systemvg的卷组
2、在此卷组中创建名为vo的逻辑卷,大小为180M
3、将逻辑卷vo格式化为xfs的文件系统类型
4、将逻辑卷vo挂载到/myvo目录,并在此目录下建立一个测试文件votest.txt,内容为“I AM KING.”
5、将逻辑卷实现开机自动挂载到/myvo目录

[root@localhost ~]#  vgcreate /systemvg /dev/sdb3
[root@localhost ~]#  lvcreate -L 180M -n vo systemvg
[root@localhost ~]# mkfs.xfs /dev/systemvg/vo
[root@localhost ~]# mkdir /myvo
[root@localhost ~]# mount /dev/systemvg/vo /myvo
[root@localhost ~]# touch /myvo.txt
[root@localhost ~]# echo I AM KING >> /myvo.txt
[root@localhost ~]# vim /etc/fstab 
/dev/systemvg/vo /myvo xfs defaults 0 0
[root@localhost ~]# mount -a

扩展逻辑卷

情况一:卷组有足够的剩余空间

  1. 扩展逻辑卷大小
[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  centos     1   3   0 wz--n- <79.00g 4.00m
  systemvg   2   1   0 wz--n-  19.99g 3.99g
[root@localhost ~]# lvs
  LV   VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos   -wi-ao---- 26.99g                                                    
  root centos   -wi-ao---- 50.00g                                                    
  swap centos   -wi-ao----  2.00g                                                    
  vo   systemvg -wi-ao---- 16.00g                                                    
[root@localhost ~]# lvextend -L 18G /dev/systemvg/vo 
  Size of logical volume systemvg/vo changed from 16.00 GiB (4096 extents) to 18.00 GiB (4608 extents).
  Logical volume systemvg/vo successfully resized.
[root@localhost ~]# lvs
  LV   VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos   -wi-ao---- 26.99g                                                    
  root centos   -wi-ao---- 50.00g                                                    
  swap centos   -wi-ao----  2.00g                                                    
  vo   systemvg -wi-ao---- 18.00g                                                    
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  4.4G   46G    9% /
devtmpfs                 895M     0  895M    0% /dev
tmpfs                    911M     0  911M    0% /dev/shm
tmpfs                    911M   11M  901M    2% /run
tmpfs                    911M     0  911M    0% /sys/fs/cgroup
/dev/mapper/centos-home   27G   33M   27G    1% /home
/dev/sda1               1014M  170M  845M   17% /boot
tmpfs                    183M  4.0K  183M    1% /run/user/42
tmpfs                    183M   44K  183M    1% /run/user/0
/dev/sr0                 8.8G  8.8G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/systemvg-vo   16G   33M   16G    1% /vo
[root@localhost ~]# xfs_growfs /dev/systemvg/vo 
meta-data=/dev/mapper/systemvg-vo isize=512    agcount=4, agsize=1048576 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4194304, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4194304 to 4718592
[root@localhost ~]# dh -h
bash: dh: 未找到命令...
  1. 扩展文件系统大小
    resize2fs: 扩展ext3/ext4文件系统类型
    xfs_growfs:扩展文件系统类型
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  4.4G   46G    9% /
devtmpfs                 895M     0  895M    0% /dev
tmpfs                    911M     0  911M    0% /dev/shm
tmpfs                    911M   11M  901M    2% /run
tmpfs                    911M     0  911M    0% /sys/fs/cgroup
/dev/mapper/centos-home   27G   33M   27G    1% /home
/dev/sda1               1014M  170M  845M   17% /boot
tmpfs                    183M  4.0K  183M    1% /run/user/42
tmpfs                    183M   40K  183M    1% /run/user/0
/dev/sr0                 8.8G  8.8G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/systemvg-vo   18G   33M   18G    1% /vo

情况二:没有足够的剩余空间

  1. 扩展卷组大小
 [root@localhost ~]# vgextend systemvg /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
  Volume group "systemvg" successfully extended
  1. 扩展逻辑卷大小
[root@localhost ~]# lvextend -L 25G /dev/systemvg/vo 
  Size of logical volume systemvg/vo changed from 18.00 GiB (4608 extents) to 25.00 GiB (6400 extents).
  Logical volume systemvg/vo successfully resized.
[root@localhost ~]# lvs
  LV   VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos   -wi-ao---- 26.99g                                                    
  root centos   -wi-ao---- 50.00g                                                    
  swap centos   -wi-ao----  2.00g                                                    
  vo   systemvg -wi-ao---- 25.00g    

3.扩展文件系统大小

[root@localhost ~]# xfs_growfs /dev/systemvg/vo 
meta-data=/dev/mapper/systemvg-vo isize=512    agcount=5, agsize=1048576 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4718592, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4718592 to 6553600
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  4.4G   46G    9% /
devtmpfs                 895M     0  895M    0% /dev
tmpfs                    911M     0  911M    0% /dev/shm
tmpfs                    911M   11M  901M    2% /run
tmpfs                    911M     0  911M    0% /sys/fs/cgroup
/dev/mapper/centos-home   27G   33M   27G    1% /home
/dev/sda1               1014M  170M  845M   17% /boot
tmpfs                    183M  4.0K  183M    1% /run/user/42
tmpfs                    183M   40K  183M    1% /run/user/0
/dev/sr0                 8.8G  8.8G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/systemvg-vo   25G   33M   25G    1% /vo

删除逻辑卷

1、先卸载设备

[root@A ~]# umount /vo

2、删除逻辑卷

[root@A ~]# lvremove /dev/systemvg/vo 
[root@A ~]#  lvs

3、删除卷组

[root@A ~]#  vgremove systemvg
[root@A ~]#  vgs

4、删除物理卷

[root@A ~]#  pvremove /dev/sdb1 /dev/sdb2  /dev/sdb5  /dev/sdb6
[root@A ~]#  pvs

5、取消开机自动挂载

[root@A ~]#  vim /etc/fstab                                                      #删除最后一行自己添加的逻辑卷

逻辑卷其他命令

  • 语法格式如下:
vgcreate   -s    pe大小     卷组名      物理卷
vgchange -s   pe大小   卷组名                                               #修改pe大小,一般是2或者4的倍数
lvcreate   -l   pe个数    -n   逻辑卷名   卷组名

注:pe是LVM最小的存储单位,默认一个PE是4M。是构成VG的基本单位

[root@A ~]#  vgdisplay    vg
[root@A ~]#  vgcreate vg /dev/sdb1
[root@A ~]#   vgs
[root@A ~]#   lvcreate -L 250M -n lvtest01 vg                         #创建250M的逻辑卷,实际上会多出2M,是252M
[root@A ~]#   lvs
[root@A ~]#   vgchange -s 1M vg                                             #修改pe的大小
[root@A ~]#   vgdisplay vg
[root@A ~]#   lvcreate -L 250M -n lvtest02 vg 
[root@A ~]#   lvs
[root@A ~]#   lvcreate -l 50 -n lvtest03 vg                                # -l 指定pe个数
[root@A ~]#   lvs

练习:构建 LVM 存储(修改PE大小)

– 新的逻辑卷命名为 database,其大小为50个PE的大小,属于 datastore 卷组
– 使用 EXT4 文件系统对逻辑卷 database 格式化,此逻辑卷应该在开机时自动挂载到/nsd/vo

逻辑卷的缩减(了解内容)

ext4文件系统支持缩减
xfs文件系统不支持缩减

  1. RAID磁盘阵列
    –廉价冗余磁盘阵列
    –通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘
    –阵列的价值:提升I/O效率,硬件级别的数据冗余
    –不同RAID级别的功能、特性各不相同

  2. RAID0:条带模式
    –至少需要两块磁盘组成
    –同一个文档分散存放在不同磁盘
    –并行写入以提高效率

  3. RAID1:镜像模式
    –至少需要两块磁盘组成
    –一个文档复制成多份,分别写入不同磁盘
    –多份拷贝提高可靠性,效率无提升

  4. RAID5:高性价比模式(较多的一种模式,通过算法产生基偶校验,来完成可靠性的提升)
    –至少需要三块磁盘组成
    –需要至少一块磁盘的容量来存放校验数据
    –相当于RAID0和RAID1的折中方案

  5. RAID0+1或RAID1+0(RAID10)(了解)
    –至少需要四块磁盘组成
    –并行存储提高效率,镜像写入提高可靠性
    –整合RAID0、RAID1的优势

RAID阵列实现的方式:

硬RAID:由RAID控制卡管理阵列
主板---->阵列卡----->磁盘------->操作系统-------->数据
软RAID:由操作系统管理阵列(用的较少)
主板---->磁盘------->操作系统----->RAID软件-------->数据

系统文件损坏故障

故障现象:
/etc/fstab文件内容有误,系统无法正常开机
解决思路:
引导进入修复模式,然后进行修复

模拟故障:

  [root@A ~]#  vim   /etc/fstab
 /dev/sdb1   /mypar1   xfs   defaults  0 0
  [root@A ~]#  reboot

解决故障

  1. 在Control-D界面处直接输入root密码,会直接进入命令行,之后修改fstab文件
 [root@A ~]#  vim   /etc/fstab
  	#/dev/sdb1   /mypar1   xfs   defaults  0 0
  [root@A ~]#  reboot
  1. 重设root用户密码
    重启系统,进入recovery恢复模式
    按e键,找到linux16开头的行,末尾添加rd.break console=tty0
    按Ctrl+x启动

  2. 以可写的方式重新挂载/sysroot,并切换到此环境
    Switch_root# mount -o remount,rw /sysroot
    Switch_root# chroot /sysroot

将root密码设置为redhat

 echo  redhat  |  passwd  --stdin  root

重设SELinux安全标签

 touch  /.autorelabel

先执行exit,在执行reboot完成恢复

 exit
 reboot 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux学习--CentOS7.5 的相关文章

  • 无法在 Linux 中阻止从命名管道 (FIFO) 读取

    很奇怪 我似乎无法完成这项工作 这是我的架构 我有一个命名管道 它将在永远运行 root读取器进程和多个应用程序编写器进程 读者进程必须是blocking当作家们在nonblocking 因此 这就是我在阅读器进程中所做的 该进程将运行ro
  • 访问单个结构体成员是否会将整个结构体拉入缓存?

    我一直在读乌尔里希 德雷珀的书 每个程序员都应该了解的内存知识 http lwn net Articles 250967 并在部分3 3 2 缓存效果的测量 http lwn net Articles 252125 页面中间 它给我的印象是
  • Python:文本覆盖在所有窗口顶部,包括 Linux 中的全屏

    我正在尝试用 python 编写一个简单的脚本 在所有窗口和全屏应用程序之上输出文本 该脚本的目的是以类似于 Steam FPS 计数器工作方式的方式输出平均负载和可用内存 以及其他有用的统计数据 到目前为止 我尝试了 pygame 但据我
  • 如果执行 shell 失败,jenkins 构建不会失败

    作为构建过程的一部分 我运行 git commit 作为执行 shell 步骤 但是 如果工作区中没有任何更改 Jenkins 将导致构建失败 这是因为当没有要提交的更改时 git 返回错误代码 如果是这种情况 我想要么中止构建 要么将其标
  • Linux 中 NDIS 过滤器的类似物是什么?

    我正在研究一个as close to real time我在linux中尽可能地使用系统 并且需要在收到特定数据包后立即发送大约600 800字节的TCP数据包 为了获得最佳的延迟 我希望这个数据包直接从内核发送 而不是将接收到的数据包一直
  • 编辑 CMakeLists.txt 以使用 -fPIC 进行编译

    我正在尝试为名为 libnifalcon 的 NOVINT Falcon 安装驱动程序 我使用 cmake 创建 make 文件 但是当我运行 make 时出现错误 Linking CXX shared library lib libnif
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • time_t 最终的 typedef 是什么?

    我搜索了我的 Linux 机器并看到了这个 typedef typedef time t time t 但我找不到 time t定义 The 文章对此进行了一些阐述 底线是类型time tC 规范中不保证 The time tdatatyp
  • 如何在 ssh 命令中使用长输入参数正确转义 qsub 命令?

    我有一个复杂的 qsub 命令可以远程运行 PROJECT NAME TEXT TEST PROJECT PACK ORGANIZATION source organization MY ORGANIZATION CONTACT NAME
  • 变量名称后面的“-”(破折号)在这里有什么作用?

    if n BASH o n ZSH VERSION then hash r 2 gt dev null fi 我在哪里可以找到这方面的参考资料 谢谢 a 内的变量 称为 参数扩展 搜索该词在在线手册中 https man cx bash h
  • 在C中获取终端宽度?

    我一直在寻找一种从 C 程序中获取终端宽度的方法 我不断想出的是这样的东西 include
  • 如何在 Linux 中检测通过 GUI 登录的用户

    我想在我的程序中捕获通过 GUI 登录的用户名 我的程序作为守护进程从 root 登录运行 如果非 root 用户通过 GUI 登录 我的程序应该会收到通知 我正在粘贴我当前的程序 该程序调用一个 perl 脚本 利用系统调用来检查当前登录
  • 从 Linux 内核模块的文件描述符获取文件名/路径?

    在Linux内核模块中 有没有一种方法可以从文件名 路径中获取文件名 路径 unsigned int fd 我知道这个答案 如何从内核模块内的文件描述符获取文件名 https stackoverflow com questions 8250
  • 为 bash 脚本创建应答文件

    我想为别人的 bash 脚本创建一个应答文件 当您运行 bash 脚本时 第一次安装该软件时 系统会询问您 5 个问题 我用的是yes script命令并且有效 它会自动应答yes对所有问题 不过我还是想回答一下no对于最后一个问题 有办法
  • 如何在没有 root 访问权限的情况下在 Ubuntu 上安装 Google Test?

    我正在尝试根据以下方式安装 Google Test这个答案 https stackoverflow com a 21314020 6560773在没有 root 访问权限的 Ubuntu 上 因为我需要在工作中学习和使用它 设法在我自己的用
  • 即使退出命令后,Shell 脚本仍继续运行

    我的shell脚本如下所示 bin bash Make sure only root can run our script EUID ne 0 echo This script must be run as root 1 gt 2 exit
  • CMake:不要为链接中使用的单个库设置 rpath

    我想要做的是配置我的 CMakeLists 文件 以便在构建我的项目时 链接器使用驻留在我的构建树中的共享库 so 的副本来链接可执行文件 但不会在中设置 rpath链接的可执行文件 以便系统必须在加载程序请求时提供该库 具体来说 我想在构
  • 将尾部输出重定向到程序中

    我想使用 tail 作为标准输入向程序发送文本文件中的最新行 首先 我向程序回显一些每次都相同的输入 然后从输入文件发送尾部输入 该输入文件应首先通过 sed 处理 以下是我期望工作的命令行 但是当程序运行时 它只接收回显输入 而不接收尾部
  • 是否可以允许jenkins访问只有root或某些特定程序可以访问的文件?

    我基本上想做的是允许 jenkins 访问我的 android sdk linux 文件夹和所有子目录 我的老板不想自己更改文件夹的权限 我应该在构建过程中这样做 我见过一些在构建过程中在执行 shell 中运行一些命令的示例 是否可以在该
  • Kubernetes Pod 已终止 - 退出代码 137

    我需要一些关于 k8s 1 14 和在其上运行 gitlab 管道所面临的问题的建议 许多作业都会抛出退出代码 137 错误 我发现这意味着容器突然终止 集群信息 库伯内特版本 1 14 使用的云 AWS EKS 节点 C5 4xLarge

随机推荐

  • 基于SSM的校园二手交易平台

    一 源码获取 链接点击直达 下载链接 二 系统架构 使用技术 Spring SpringMVC Mybatis 三 系统需求分析 在如今的大学校园中 伴随着学生的购买能力的提高和每年的升学和毕业 存在许多各种类型的二手商品 目前 二手商品交
  • 安全顶刊论文阅读总结1

    论文阅读总结 An Explainable AI Based Intrusion Detection System for DNS Over HTTPS DoH Attacks 论文介绍 本文2022年发表在IEEE Transaction
  • Java 比较器 -- 对象比较

    基本数据类型比较大小时 我们可以用比较运算符 当两个对象比较大小时 我们就可以用比较器了 实现的方式有两种 如下 方式一 自然排序 实现接口Comparable 创建一个自定义类Students 实现接口Comparable 并重写comp
  • TensorFlow在Win10上的安装教程和简单示例

    安装说明 平台 目前可在Ubuntu Mac OS Windows上安装 版本 提供gpu版本 cpu版本 安装方式 pip方式 Anaconda方式 Tips 在Windows上目前支持python3 5 x gpu版本需要cuda8 c
  • Linux下gdb调试生成core文件并调试core文件

    1 什么是core文件 有问题的程序运行后 产生 段错误 核心已转储 时生成的具有堆栈信息和调试信息的文件 编译时需要加 g 选项使程序生成调试信息 gcc g core test c o core test 2 怎样配置生成 core 文
  • React核心概念:状态提升

    上一节 表单 下一节 组合vs继承 React核心概念 状态提升 引言 添加第二个输入框 编写转换函数 状态提升 经验总结 引言 很多情况下我们使用的多个组件需要对同一个数据做出对应的反应 在这里我们推荐把这个共享的状态提升到距离这些组件最
  • 迅为-iMX6ULL开发板-Python移植-运行测试2

    迅为 iMX6ULL开发板 Python移植 运行测试2 92 3 1 库功能文件测试 进入 install bin 目录下使用命令 python 然后使用 import 加载各模块如图 92 3 1 1 所示则 python移植成功 按
  • opencv学习记录【5】(背景差分算法

    8 26 9 2 背景差分算法 一 帧间差分 最简单的背景提取方法 一帧减去另一帧 函数实现 Void cv absdiff frameTime1 frameTime2 frameForeground 为了去除噪音波动等 常常忽略帧间微小的
  • Vue组件报错For recursive components, make sure to provide the “name“ option.

    在Vue的组件component学习中报错 Vue warn Unknown custom element
  • Fedora 10網卡消失的問題

    http itgroup blueshop com tw towns hc n convew i 6000 今天看到肉鬆Selinux的問題 想說來測試處理一下 將以備份出來的Fedora 10 VM拿出來用 啟動系統後 出現了一個怪問題
  • Python中的itertools.permutations(关键词:itertools/permutations)

    通俗地讲 就是返回可迭代对象的所有数学全排列方式 Python 2 7 12 default Nov 20 2017 18 23 56 GCC 5 4 0 20160609 on linux2 Type help copyright cre
  • python-测试代码

    目录 介绍 测试函数 单元测试和测试用例 可通过的测试 不能通过的测试 测试未通过时怎么办 添加新测试 测试类 各种断言方法 一个要测试的类 测试AnonymousSurvey类 方法setUp 介绍 在本章中你会学习如何使用Python模
  • jvm垃圾回收之Eden、S0、S1、Old的关系

    jvm垃圾回收之Eden S0 S1 Old的关系 https blog csdn net u012799221 article details 73180509
  • 解决win10系统 3dMax只能渲染一次的问题

    是不是很多人疑问为什么自己的电脑配置明明足够 但在3dMax正常运行过程中 渲染一次过后 3dMax便卡住不动了 只能重启解决 无形之中浪费了很多时间 近日 我在使用3dMax时也遇到了此问题 发现是因为win10的微软输入法与3dMax不
  • 解决request.getServletContext()方法报红问题

    getServletContext 方法是Servlet3 0添加的 所以需要引入3 0以上的jar包
  • Tomcat的context path

    本文章转载自 https www cnblogs com yanan7890 p 8329163 html tomcat server xml context path配置需要注意的事情 在tomcat下放个war包 假如我是这样配置ser
  • 代码生成二维码

    使用java生成二维码 前言 使用步骤 xml 生成二维码 二维码转url 总结 前言 Zxing Zxing 是一个开源的 Java 二维码扫描和生成库 由美国 Google 公司的一位开发者 Sean Owen 在 2006 年开发并发
  • 自动化测试——接口测试

    一 接口分类 1 内部接口 测试被测系统各个子模块之前的接口 或者测试被测系统提供给内部用户系统使用的接口 2 外部接口 被测系统调用外部的接口 系统对外提供的接口 接口测试重点 检查结论参数传递的正确性 输出结果的正确性及对各种异常情况的
  • 普通游戏显卡和专业图形显卡的区别

    搞图形设计的朋友应该都知道 显卡分为普通游戏显卡和专业图形显卡 有些人会错误的认为图形显卡比游戏显卡性能强 或者游戏显卡比图形显卡性能强 其实这两种显卡是没有可比性的 因为它们在功能设计上是有一定的区别 这里首先可以告诉大家游戏显卡和图形显
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g