admin 管理员组

文章数量: 887031

文章目录

  • Linux目录结构
    • 绝对路径
    • 相对路径
    • 重要目录介绍
  • 命令相关概念
    • 命令提示符
    • 命令格式
    • 获取命令帮助
  • 与目录相关的命令
    • `mkdir`
      • 错误命令
      • 正确命令
    • `cd`
    • `cp`
      • 拷贝单个文件
      • 拷贝整个目录
    • `rm`
      • 删除文件
      • 删除文件夹
    • `mv`
      • 移动文件夹
      • 移动文件夹并修改名称
    • `rmdir`
    • `rename`
      • 创建199个空文件
      • 批量改名
  • 级别
  • 级别的切换
  • 修改默认的运行级别
    • 修改默认级别为3
  • 单用户模式
  • 忘记密码
  • 查看当前的运行级别
  • 查看当前系统的运行级别和系统时间
  • 磁盘在Linux系统中的标识
  • 主分区与扩展分区
  • 用户和用户组
    • 概念
    • 用户、用户组的关系
    • 用户及UID
      • CentOS系统中:
    • 用户信息存储的位置
  • 用户管理
    • 创建用户
      • 使用案例
    • 修改用户
      • 使用案例
    • 删除用户
      • 使用案例
    • 密码管理
      • 使用案例
    • 用户身份切换
      • 使用案例
  • 用户组管理
    • 创建用户组
      • 使用案例
    • 修改用户组
      • 使用案例
    • 删除用户组
    • 用户组的切换
  • 用户相关文件
    • passwd
    • shadow
    • group
  • 逻辑权限
    • 文件/夹区别
    • 权限的种类
    • 修改文件/夹的权限
      • 使用案例
    • 修改文件/夹的所有者(属主)和属组
    • 查看文件内容
  • 物理权限
    • 使用案例
    • `lsattr`查看文件的物理权限(属性)
  • 普通用户的root的权限
  • 权限练习
    • 练习一
    • 练习二
  • 磁盘
    • Ext2/Ext3/Ext4区别
    • 无限数量的子目录
      • 延迟分配
      • 快速fsck(文件系统检查)
      • 持久预分配(Persistentpreallocation)
  • SWAP(交换分区)概述
    • 系统什么时候会使用`swap`?
    • 修改swap参数
  • 问题:为什么要挂载?
  • 挂载
    • 挂载光盘镜像文件
    • 挂载U盘
  • 取消挂载
  • 网络模型
    • OSI七层和TCP/IP四层的关系
  • 网络设备
    • 交换机
    • 路由器
      • 介绍:
  • 网络地址
    • 配置网络时需要配置的信息
      • IP地址
      • 网关
      • 子网掩码
    • 网络传输过程
    • DNS
      • 静态
      • 动态
  • 桥接
  • NAT
  • 通过主机名查看IP
  • 远程拷贝
    • 本机拷贝到远程服务器
    • 远程主机拷贝数据到本机
    • 通过主机名进行远程拷贝
  • 登陆远程服务器
    • 需要密码登陆
    • SSH免密登陆
      • 证书的生成
      • 证书的注册
      • 证书使用的场景
    • 双向免密登陆
  • wget
    • 下载单个文件
    • 下载并重命名文件
    • 限速下载
    • 断点续传
    • 后台下载
    • 下载多个文件
  • 进程
    • 概念
    • 程序被加载为进程的过程
  • 查看进程
    • 静态查询
      • `PS`
        • 查询指定进程
      • `pstree`
    • 动态查询:`top`
      • 使用案例
      • 交互式案件:(不常用)
  • 进程的管理
    • 单进程的管理
    • 多进程的管理
    • 案例
  • 系统资源监控(自带)
    • 内存监控:`free`
    • 查阅系统与核心信息:`uname`
    • 观察系统启动时间与工作负载:`uptime`
    • 网络监控:`netstat`
      • 查询出来的名称含义
    • 侦测系统资源变化:`vmstat`
      • 查询结果介绍
  • Linux防火墙
    • 临时处理防火墙
    • 永久处理防火墙
  • 概念
  • 管理
    • 将前台任务放置后台暂停
    • 将前台任务放置后台运行
    • 查看后台任务
    • 将后台任务调至前台
    • 将后台任务修改为运行状态
    • 终止job
  • 什么是VIM
  • VIM的三种模式
    • 一般模式
    • 编辑模式
    • 命令模式
  • 压缩和打包概念
  • 压缩/解压
    • `gzip`(常用)
      • 使用案例
    • `bzip2`
      • 使用案例
    • zip
      • 压缩
      • 解压
    • 查看压缩文件中的内容
  • 打包/解包:`tar`
    • 压缩
    • 解压
  • 软件管理:RPM
    • 优点和缺点
    • 软件安装默认路径
    • 安装与卸载
      • 安装
        • 使用案例
      • 卸载
        • 使用案例
    • 查询
      • 使用案例
    • 升级与更新
      • 不管有没有安装都更新
      • 只有安装的才更新
  • 软件管理:YUM
    • 优点和缺点
    • YUM工作原理
    • 更换yum源
      • 加入hadoop组件相关yum源
      • 更换阿里yum源
    • 安装与卸载
      • 安装
        • 使用案例
      • 卸载
        • 使用案例
    • 查询
    • 更新
  • 通过RPM安装MySQL
    • 远程访问服务器数据库
  • 通过YUM安装Tomcat
  • RPM和YUM的取舍
  • 数据重定向
    • 标准输出案例
    • 标准输入案例
  • 修改主机名
  • 查看当前主机名
  • RPM和YUM的取舍
  • 数据重定向
    • 标准输出案例
    • 标准输入案例
  • 修改主机名
  • 查看当前主机名

Linux目录结构

Linux的目录结构为树状结构,最顶级的目录为根目录/

其他目录通过挂载可以将他们添加到树中,通过解除挂载可以移除它们

绝对路径

路径的写法,由根目录/写起

例如:/usr/share/doc

相对路径

路径的写法,不是由/写起

例如:由/usr/share/doc要到/usr/share/man下时,可以写成:

  • cd ../man

重要目录介绍

注意:文件或目录名:<=255个字符、区分大小写、不能使用“/”,不允许创建与系统已有的相同名字的目录。

  • 第一点:因为不好区分
  • 第二点:防止某些软件无法自动进行识别。
目录介绍
/root,/home/{UserName}(家)目录
/bin,/usr/bin,/usr/local/bin普通用户可执行文件
/sbin,/usr/sbin,/usr/local/sbin系统管理员可执行文件
/etc配置文件目录
/tmp临时文件目录
/usr存放应用程序和文件
/boot启动linux的核心文件
/opt额外安装软件(mysql)默认为空
/var , /srv服务器数据
/proc/sys系统信息
/lib,/usr/lib,/usr/local/lib共享库
/media,/mnt其它挂载点

命令相关概念

命令提示符

  1. [root@localhost ~]#

    root登录,并且在家目录下/root

  2. [chenzhe@localhost ~]$

    chenzhe普通用户登录,并且在家目录下/home/chenzhe

  3. 总结

    从上面两个命令提示符可以看的出来中括号后的符号不同,其中

    • #表示超级权限(管理员/root)
    • $表示普通用户的权限

    中括号中的内容分别是:

    • root|chenzhe:登录的账户名称
    • @localhost:主机名
    • ~:表示当前账户的家目录

命令格式

基本格式:命令、选项、参数。参数之间必须有空格

  • 执行的时候,命令本身必须存在,选项和参数可有可无。

  • 选项和参数也可以有多个存在

  1. 执行时,如果有多个参数,可以拼接在一起写

    ls -a -l 可以写成 ls -al

  2. 执行时,如果有多个参数,参数之间必须有空格隔开

    ls /root /etc

  3. 执行时可以没有选项、参数的命令

    ifconfig

  4. 执行时有参数的命令

    ifup eth0

获取命令帮助

manman命令
优点:内核自带
缺点:大部分的帮助都是英文
--help--help命令
优点:部分命令提供中文
缺点:不是所有的命令都有这个帮助文件
命令大全手册
百度。。。

与目录相关的命令

命令使用/介绍
pwd用于显示当前所在的完整路径
mkdir用于创建一个目录
-p该选项用于创建多级目录
cd用于切换目录
. 表示当前目录
.. 表示上级(父级)目录
~ 表示用户的家目录,如果在~跟用户名,就表示要去到该用户的家目录。
-” 表示与上次所在目录进行切换。
ls用于显示目录
-a:显示所有的文件夹内容(包括隐藏)
-l:用于显示文件/夹的详细信息
-h:与-l配合使用,可以显示文件的体积大小(自适应单位b,k,m,g …)
-d:跟上指定的目录时,就会显示该目录的信息,不会显示目录下的文件
cp语法:cp [path]/file1 [path]/file2
用于copy(拷贝)文件/夹的命令
如果==拷贝的是一个文件夹==时,需要配合选项-r来使用
mv语法:mv [path]/file [path]/
改名:mv fileName1 fileName2
touch用于创建一个空白的文本文件,也可以【修改文件/夹的时间戳】
rm-r 表示递归处理
-f 表示强制执行
rmdir用于删除目录使用,但只能删除空目录。
rename语法:rename 修改谁 改成啥样 谁符合条件
批量改名
? 代表一个字符
?? 代表两个字符

mkdir

mkdir 默认只能创建一个级别的目录,如果想要创建多级目录时,需要配合-p选项来使用

错误命令

[root@sxh home]# mkdir ./1/2/3/4/5
mkdir: 无法创建目录"./1/2/3/4/5": 没有那个文件或目录

正确命令

[root@sxh home]# mkdir -p ./1/2/3/4/5
[root@sxh home]# ls
1

cd

进入指定用户(zhangssan)的家目录

  1. cd /root:切换到root目录下,
  2. cd ~
    • 如果是root账号,就切换到/root目录下
    • 如果是普通账号,就切换到/home/{username}目录下

cp

拷贝单个文件

[root@sxh home]# cp /root/install.log /home
[root@sxh home]# ls
1  install.log
[root@sxh home]# 

拷贝整个目录

将整个/etc文件夹复制到/home

[root@sxh home]# cp -r /etc /home
[root@sxh home]# ls
1  etc  install.log
[root@sxh home]# 

rm

删除文件

[root@sxh home]# ll
总用量 64
drwxr-xr-x.   3 root root  4096 19 22:32 1
drwxr-xr-x. 116 root root 12288 19 22:43 etc
-rw-r--r--.   1 root root 45537 19 22:39 install.log
[root@sxh home]# rm install.log 
rm:是否删除普通文件 "install.log"?y
[root@sxh home]# ll
总用量 16
drwxr-xr-x.   3 root root  4096 19 22:32 1
drwxr-xr-x. 116 root root 12288 19 22:43 etc
[root@sxh home]# 

删除文件夹

文件夹内有多个文件,通过参数-r,-f删除

[root@sxh home]# ls
1  etc
[root@sxh home]# rm -rf etc
[root@sxh home]# ls
1
[root@sxh home]# 

mv

类似于剪切功能

移动文件夹

[root@sxh home]# ls
1  demo.txt
[root@sxh home]# mv demo.txt /root
[root@sxh home]# ls /root
anaconda-ks.cfg  install.log         公共的  视频  文档  音乐
demo.txt         install.log.syslog  模板    图片  下载  桌面
[root@sxh home]# ls
1

移动文件夹并修改名称

[root@sxh home]# ls /root
anaconda-ks.cfg  install.log         公共的  视频  文档  音乐
demo.txt         install.log.syslog  模板    图片  下载  桌面
[root@sxh home]# mv /root/demo.txt /home/newDemo.txt
[root@sxh home]# ls
1  newDemo.txt
[root@sxh home]# 

rmdir

删除空目录

非空目录不能删除:rmdir: 删除 "1" 失败: 目录非空

强制删除非空目录:rm-rf 1(1是目录名)

rename

批量改名

创建199个空文件

默认排序是字典排序,我们要通过批量改名实现自然排序

[root@sxh home]# touch foo{1..199}
[root@sxh home]# ls
1       foo112  foo127  foo141  foo156  foo170  foo185  foo2   foo34  foo49  foo63  foo78  foo92
foo1    foo113  foo128  foo142  foo157  foo171  foo186  foo20  foo35  foo5   foo64  foo79  foo93
foo10   foo114  foo129  foo143  foo158  foo172  foo187  foo21  foo36  foo50  foo65  foo8   foo94
foo100  foo115  foo13   foo144  foo159  foo173  foo188  foo22  foo37  foo51  foo66  foo80  foo95
foo101  foo116  foo130  foo145  foo16   foo174  foo189  foo23  foo38  foo52  foo67  foo81  foo96
foo102  foo117  foo131  foo146  foo160  foo175  foo19   foo24  foo39  foo53  foo68  foo82  foo97
foo103  foo118  foo132  foo147  foo161  foo176  foo190  foo25  foo4   foo54  foo69  foo83  foo98
foo104  foo119  foo133  foo148  foo162  foo177  foo191  foo26  foo40  foo55  foo7   foo84  foo99
foo105  foo12   foo134  foo149  foo163  foo178  foo192  foo27  foo41  foo56  foo70  foo85  newDemo.txt
foo106  foo120  foo135  foo15   foo164  foo179  foo193  foo28  foo42  foo57  foo71  foo86
foo107  foo121  foo136  foo150  foo165  foo18   foo194  foo29  foo43  foo58  foo72  foo87
foo108  foo122  foo137  foo151  foo166  foo180  foo195  foo3   foo44  foo59  foo73  foo88
foo109  foo123  foo138  foo152  foo167  foo181  foo196  foo30  foo45  foo6   foo74  foo89
foo11   foo124  foo139  foo153  foo168  foo182  foo197  foo31  foo46  foo60  foo75  foo9
foo110  foo125  foo14   foo154  foo169  foo183  foo198  foo32  foo47  foo61  foo76  foo90
foo111  foo126  foo140  foo155  foo17   foo184  foo199  foo33  foo48  foo62  foo77  foo91
[root@sxh home]# 

批量改名

语法:rename 修改谁 改成是样 谁符合条件

  1. 修改文件名【foo1…foo9】 变成 【foo01…foo09】

    [root@sxh home]# rename foo foo0 foo?
    [root@sxh home]# ls
    1       foo106  foo121  foo137  foo152  foo168  foo183  foo199  foo36  foo53  foo70  foo87
    foo01   foo107  foo122  foo138  foo153  foo169  foo184  foo20   foo37  foo54  foo71  foo88
    foo02   foo108  foo123  foo139  foo154  foo17   foo185  foo21   foo38  foo55  foo72  foo89
    foo03   foo109  foo124  foo14   foo155  foo170  foo186  foo22   foo39  foo56  foo73  foo90
    foo04   foo11   foo125  foo140  foo156  foo171  foo187  foo23   foo40  foo57  foo74  foo91
    foo05   foo110  foo126  foo141  foo157  foo172  foo188  foo24   foo41  foo58  foo75  foo92
    foo06   foo111  foo127  foo142  foo158  foo173  foo189  foo25   foo42  foo59  foo76  foo93
    foo07   foo112  foo128  foo143  foo159  foo174  foo19   foo26   foo43  foo60  foo77  foo94
    foo08   foo113  foo129  foo144  foo16   foo175  foo190  foo27   foo44  foo61  foo78  foo95
    foo09   foo114  foo13   foo145  foo160  foo176  foo191  foo28   foo45  foo62  foo79  foo96
    foo10   foo115  foo130  foo146  foo161  foo177  foo192  foo29   foo46  foo63  foo80  foo97
    foo100  foo116  foo131  foo147  foo162  foo178  foo193  foo30   foo47  foo64  foo81  foo98
    foo101  foo117  foo132  foo148  foo163  foo179  foo194  foo31   foo48  foo65  foo82  foo99
    foo102  foo118  foo133  foo149  foo164  foo18   foo195  foo32   foo49  foo66  foo83  newDemo.txt
    foo103  foo119  foo134  foo15   foo165  foo180  foo196  foo33   foo50  foo67  foo84
    foo104  foo12   foo135  foo150  foo166  foo181  foo197  foo34   foo51  foo68  foo85
    foo105  foo120  foo136  foo151  foo167  foo182  foo198  foo35   foo52  foo69  foo86
    
  2. 修改文件名 【foo01…foo99】变成 【foo001…foo099】

    改完后就实现了文件按照自然排序

    [root@sxh home]# rename foo foo0 foo??
    [root@sxh home]# ls
    1       foo017  foo034  foo051  foo068  foo085  foo102  foo119  foo136  foo153  foo170  foo187
    foo001  foo018  foo035  foo052  foo069  foo086  foo103  foo120  foo137  foo154  foo171  foo188
    foo002  foo019  foo036  foo053  foo070  foo087  foo104  foo121  foo138  foo155  foo172  foo189
    foo003  foo020  foo037  foo054  foo071  foo088  foo105  foo122  foo139  foo156  foo173  foo190
    foo004  foo021  foo038  foo055  foo072  foo089  foo106  foo123  foo140  foo157  foo174  foo191
    foo005  foo022  foo039  foo056  foo073  foo090  foo107  foo124  foo141  foo158  foo175  foo192
    foo006  foo023  foo040  foo057  foo074  foo091  foo108  foo125  foo142  foo159  foo176  foo193
    foo007  foo024  foo041  foo058  foo075  foo092  foo109  foo126  foo143  foo160  foo177  foo194
    foo008  foo025  foo042  foo059  foo076  foo093  foo110  foo127  foo144  foo161  foo178  foo195
    foo009  foo026  foo043  foo060  foo077  foo094  foo111  foo128  foo145  foo162  foo179  foo196
    foo010  foo027  foo044  foo061  foo078  foo095  foo112  foo129  foo146  foo163  foo180  foo197
    foo011  foo028  foo045  foo062  foo079  foo096  foo113  foo130  foo147  foo164  foo181  foo198
    foo012  foo029  foo046  foo063  foo080  foo097  foo114  foo131  foo148  foo165  foo182  foo199
    foo013  foo030  foo047  foo064  foo081  foo098  foo115  foo132  foo149  foo166  foo183  newDemo.txt
    foo014  foo031  foo048  foo065  foo082  foo099  foo116  foo133  foo150  foo167  foo184
    foo015  foo032  foo049  foo066  foo083  foo100  foo117  foo134  foo151  foo168  foo185
    foo016  foo033  foo050  foo067  foo084  foo101  foo118  foo135  foo152  foo169  foo186
    

级别

级别号作用
0关机
1单用户 注意该模式下不提供网络连接,所以无法使用超级终端进行连接。
2无网络多用户
3命令行模式
4官方预留,未定义内容
5图形化模式
6重启

级别的切换

通过init命令进行切换

  1. init 3:切换至命令行模式
  2. init 5:切换至图形界面
  3. init 0:关机
  4. init 6:重启

修改默认的运行级别

安装完CentOS后,启动默认进入了图形化界面,是因为在配置文件中配置了默认级别5,所以一启动就进入了图形化界面

通过修改/etc/inittab文件,修改默认级别:

# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
~                                                                                                      
~                                                                                                      
"/etc/inittab" 26L, 884C

修改默认级别为3

把上述文件中的id后的默认级别改为指定的即可

注意:默认运行级别不要设置为0或6,因为Linux系统启动是,执行的第一个进程就是init。默认会去读取inittab配置文件。

#	........
#	........
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
~                                                                                                      
~                                                                                                      
"/etc/inittab" 26L, 884C

单用户模式

如果【系统出现问题/忘记了密码】,在万不得已的情况下,需要使用单用户模式进入系统,对系统就行修复或者备份

  1. 出现下图时,敲击回车或方向键

  2. 出现下图时,按字母e

  3. 出现下图时,选中kernel,按字母e

  4. 出现下图时,输入一个空格,在输入一个1,再按回车

  5. 再次出现下图时,按字母b,即可进入单用户模式

  6. 出现下图时,表示已经进入单用户模式

  7. 在此模式下可以进行默认运行级别的修改

    [root@sxh home]# vi /etc/inittab
    

忘记密码

通过单用户模式修改密码

[root@sxh home]# passwd xxxx

查看当前的运行级别

[root@sxh home]# who -r
         运行级别 5 2020-01-09 22:47

查看当前系统的运行级别和系统时间

可以查看之前的运行级别和当前的运行级别。

N表示前面没有运行级别(NULL)

3表示当前处于运行级别。

[root@sxh home]# runlevel
N 5

磁盘在Linux系统中的标识

xvdx(x为a—z):Xen虚拟机硬盘(不常见)

hdx(x为从a—d):IDE硬盘(已淘汰,读写速度低并且容量小)

sdx(x为a—z):SCSI,SATA,USB硬盘

例如:sda1:表示是系统中的第一块硬盘的第一个分区

  • sda:其中a表示第一块硬盘
  • 1:表示第一个分区

主分区与扩展分区

主分区:用于安装操作系统,也可以用于数据的存储

扩展分区:该分区不能够直接使用,需在此分区上建立逻辑分区才能够只能。

逻辑分区:该分区只能用于数据的存储,不能用于系统的安装。

  • MBR:比较老,有缺陷,由IBM公司提出,此分区表最大支持4个主分区和2TB容量。
  • GPT(GUID):取消扩展分区,所有的分区都可以当作主分区。并且支持的硬盘容量18EB。

用户和用户组

root账户和root用户组是两码事,某个账户就算是加入了root组,那么也不代表它具备root权限。

因为在Linux系统,默认情况下,用户的权限高于用户组。

概念

Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。

每个用户账号都拥有一个唯一的用户名和各自的口令。

用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

用户、用户组的关系

  1. 用户:一个户口本中的每一个用户
  2. 用户组:户口本中的所有成员组成的组
  3. 其他人:除用户本人(户主)和用户组(户口本中的成员)外的成员都是其他人

每一个用户都可以拥有多个用户组

每一个用户组都可以容纳多个用户

用户及UID

在Linux系统中,每一个用户默认都对应了一个UID,而这个UID可以理解是用户的身份证号。

CentOS系统中:

UID作用
0root
1-499系统预留,作为系统用户来使用
500 - 65535自定义账户 (注意,此处仅指的是CentOS6.5系统,其他系统的自定义账户则不一定是从500开始,例如Ubuntu系统是从1000开始。)

用户信息存储的位置

passwd、shadows、group这三个文件不要随意的进行修改,如果要查看/修改:

  • 建议大家copy出一份,对copy的文件进行修改。
  • 把文件copy出来之后,进行保存,再去修改原文件。这样做即便是写错了文件也可以通过单用户的方式将文件恢复。
位置介绍
/etc/passwd用户信息
/etc/shadow密码信息
/etc/group用户组信息

用户管理

就是对passwd、shadow、group三个文件的增删改。

增加一个用户,UID,账户名、家目录、shell程序。新建的用户,默认的情况下是无法登录的。

创建一个用户的时候,默认情况下,会为其创建一个同名的用户组

创建用户

语法:useradd [选项] {UserName}

选项:

选项作用解释
-ccomment指定一段注释性描述
-d目录指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录。
-g主用户组指定用户所属的主用户组。
-G附属用户组指定用户所属的附加组。
-sShell文件指定用户的登录Shell。有一个特殊的shell程序叫nologin,如果某帐号使用此shell,就表示用户不允许登录,该用户通常成为伪用户
-u用户号指定用户的用户号

使用案例

  1. 创建一个普通用户,使用默认值即可。

    说明:该账户被创建完之后,会有哪些信息

    • UID:如果是当前系统的第一个账户,那么它的UID是500。
    • 家目录(主目录):因为是默认创建,所以它的家目录所在位置是/home/zhangsan
    • 用户组:创建用户的同时,会为其创建一个同名的用户组,zhangsan组
    • shell程序:默认会是bash
    [root@Demo01 home]# useradd zhangsan
    
    [root@Demo01 home]# id zhangsan
    uid=502(zhangsan) gid=502(zhangsan)=502(zhangsan)
    
  2. 创建一个普通用户,其家目录是在/tedu/jerry,主组root,附加组tom,adm

    [root@Demo01 home]# mkdir /tedu
    [root@Demo01 home]# useradd -d /tedu/jerry -m -g root -G zhangsan,adm jerry
    
    [root@Demo01 /]# id jerry
    uid=503(jerry) gid=0(root)=0(root),4(adm),502(zhangsan)
    
    [root@Demo01 ~]# cd /
    [root@Demo01 /]# ll
    ..................
    drwxr-xr-x.   3 root root  4096 110 09:31 tedu
    ..................
    
  3. 创建一个普通用户,执行用户的shell程序为/bin/sh,UID为80000

    说明:虽然CentOS系统中默认的UID是65536个(0-65535),但是可以手动指定它的UID超出此范围。

    UID特性:内核通过判断当前UID与65535和已经使用到的UID值比较,哪段距离大,下一个UID就会自动在距离大的范围内+1

    [root@Demo01 tedu]# useradd -s /bin/sh -u 80000 test
    
    [root@Demo01 tedu]# id test
    uid=80000(test) gid=503(test)=503(test)
    
  4. 创建一个普通用户,测试账户是UID会不会延续上案例的UID。

    正常来应该按照上次创建用户的UID往后+1。但是80000已超过系统默认的范围,所以不会根据超出范围后UID进行+1延续。

    [root@Demo01 tedu]# useradd test1
    
    [root@Demo01 tedu]# id test1
    uid=504(test1) gid=504(test1)=504(test1)
    
  5. 创建伪用户:

    为用户不支持登录

    举例:员工离职后会把离职员工的Linux账号置为为用户

    [root@Demo01 tedu]# useradd -s /sbin/nologin test2
    
    [root@Demo01 tedu]# su test2
    This account is currently not available.
    

修改用户

语法:usermod [选项] {UserName}

选项:

选项作用解释
-ccomment指定一段注释性描述
-d目录目录 指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录。
-g主用户组指定用户所属的用户组。
-G附属用户组指定用户所属的附加组。如果想要在原有的基础上追加附加组,使用-aG的方式。
-sShell文件指定用户的登录Shell。有一个特殊的shell程序叫nologin,如果某帐号使用此shell,就表示用户不允许登录,该用户通常成为伪用户。
-u用户号指定用户的用户号

使用案例

  1. 修改test账户的UID。

    [root@Demo01 tedu]# id test4
    uid=30001(test4) gid=30001(test4)=30001(test4)
    
    [root@Demo01 tedu]# usermod -u 10000 test4
    
    [root@Demo01 tedu]# id test4
    uid=10000(test4) gid=30001(test4)=30001(test4)
    
  2. 修改账户的附加组为testtest1

    [root@Demo01 /]# id jerry
    uid=503(jerry) gid=0(root)=0(root),4(adm),502(zhangsan)
    
    [root@Demo01 tedu]# usermod -G test,test1 jerry
    
    [root@Demo01 tedu]# id jerry
    uid=503(jerry) gid=0(root)=0(root),503(test),504(test1)
    
  3. 为账户追加附加组件root、adm

    [root@Demo01 tedu]# usermod -aG zhangsan,adm jerry
    
    [root@Demo01 tedu]# id jerry
    uid=503(jerry) gid=0(root)=0(root),4(adm),502(zhangsan),503(test),504(test1)
    
  4. 将test2的伪用户状态修改为正常普通用户

    [root@Demo01 tedu]# usermod -s /bin/bash test2
    

删除用户

语法:userdel [选项] {UserName}

选项:

选项作用
-r删除账户的同时删除该账户的家目录

使用案例

  1. 删除用户

    不加参数删除,不会把该用户的同名家目录删除

    [root@Demo01 home]# userdel zhangsan
    
    [root@Demo01 home]# ls
    demo02  test  test1  test2  test3  test4  zhangsan
    
  2. 删除用户以及家目录

    该命令之后之后,home目录中的zhangsan目录会被一并删除,且不保留它的工作文件。

    一般来说,公司中删除账户的操作比较少,就算删除账户时,一般也不用-r的选项,因为人虽然离职,但是有可能此人还会回来继续任职~

    如果员工离职,完全没有必要删除账户,可以使账户无法登录即可,比如nologin,锁定账户,删除密码等手段都是可以防止资料泄漏。

    注:Windows和Linux系统(其他系统没测试),没有密码的账户都是不允许通过远程的方式进行访问的。

    [root@Demo01 home]# userdel -r zhangsan
    
    [root@Demo01 home]# ls
    demo02  test  test1  test2  test3  test4
    

密码管理

语法:passwd [选项] {UserName}

选项:

选项作用解释
-l锁定账户锁定后,不能再其他普通用户下切换其他普通用户
即使密码输入正确,也会提示密码错误
-u解锁账户可以在其他普通用户下切换其他普通用户
-d删除密码删除密码,不能登陆系统

使用:

  1. passwd 可以不跟选项、用户名,默认是修改自己的帐号密码。
  2. 修改他人密码,必须具备管理员权限(并不一定非要是root账户)
  3. 普通账户,只能修改自己的密码。
  4. 管理员修改他人的密码,不需要满足密码策略。
  5. 普通账户修改密码时,必须满足密码安全策略。(小写+大写+数字+特殊符号)
  6. 管理员修改他人密码:
    • passwd {UserName}
  7. 管理员修改自己的密码
    • passwd

使用案例

  1. 锁定zhangsan账户

    在普通账号下,无法切换其他的普通账号,即使密码输入正确也切换不了

    [root@Demo01 home]# passwd -l zhangsan
    锁定用户 test1 的密码 。
    passwd: 操作成功
    
    [root@Demo01 home]# su test2
    [test2@Demo01 home]$ su zhangsan
    密码:
    su: 密码不正确
    
  2. 解锁zhangsan账户

    可以在普通账户下切换其他普通账户

    [root@Demo01 home]# passwd -u zhangsan
    解锁用户 test1 的密码 。
    passwd: 操作成功
    
    [root@Demo01 home]# su test2
    [test2@Demo01 home]$ su zhangsan
    密码:
    [test1@Demo01 home]$ 
    
  3. 删除zhangsan账户密码

    通过vim /etc/shadow查看zhangsan密码已经不存在了

    [root@Demo01 home]# passwd -d zhangsan
    清除用户的密码 test1。
    passwd: 操作成功
    
    [root@Demo01 home]# vim /etc/shadow
    

用户身份切换

普通用户切换root时,书写格式不需要写成su - root,直接su即可。

总结,su账户名之间加不加"-"区别在于路径。

命令作用
su {UserName}表示切换用户之后,依然停留在当前目录
su - {UserName}表示切换用户之后,去到该用户的家目录

使用案例

当前位置,在/root

  1. 切换到zhangsan账户,目录不变

    该命令执行过后,切换到zhangsan账户,但是路径依然停留在/root目录下

    [root@Demo01 ~]# su zhangsan
    
    [test4@Demo01 root]$ pwd
    /root
    [test4@Demo01 root]$ 
    
  2. 切换到zhangsan账户,目录同时也变

    该命令执行过后,切换到zhangsan账户,同时会去到zhangsan账户的家目录下。:/home/test4

    [root@Demo01 ~]# su - zhangsan
    
    [test4@Demo01 ~]$ pwd
    /home/test4
    [test4@Demo01 ~]$ 
    

用户组管理

创建用户组

系统底层会将两个GID相同用户组识别为同一个用户组,这样做的目的是让两个用户组的权限相同。

识别规则:后者遵循前者。

语法:groupadd [选项] {groupName}

选项:

选项作用
-g指定新用户组的GID
-o通常与-g同时使用,使新用户组可以与系统已有的组ID相同。

使用案例

  1. 新建一个用户组

    此命令向系统中增加了一个新组group1,新组的组标识号,在当前已有的最大组标识号的基础上加1

    [root@Demo01 /]# groupadd group1
    
  2. 新建一个用户组group2,同时指定新组的组标识号是101。

    [root@Demo01 /]# groupadd -g 101 group2
    
  3. 将用户组添加为tom账户的附加组

    [root@Demo01 /]# usermod -aG group1  tom
    
  4. 创建一个与上面案例GID相同的用户组

    [root@Demo01 /]# groupadd -g 1000 -o group2
    

修改用户组

语法:groupmod [选项] {groupName}

选项:

选项作用
-g指定新用户组的GID
-o通常与-g同时使用,使新用户组可以与系统已有的组ID系统。
-n用来修改组名称 group -n newGroupName oldGroupName

使用案例

  1. 将组group2的组标识号修改为102。

    [root@Demo01 /]# groupmod -g 102 group2
    
  2. 新建一个group3,并将其组名修改成big1902

    [root@Demo01 /]# groupadd group3
    [root@Demo01 /]# groupmod -n big1910 group3
    

删除用户组

如果删除的用户组:

  • 已经被用户追加为附加组,对应的所有用户的该附件组会被撤销掉。
  • 已经被用户指定为主组,则该用户组无法被删除。(可以理解为像Windows中文件被占用时不能被删除。)

用户组被设置为主组不能删除,普通组以及附加组都可以被删除。

语法:groupdel {groupName}

[root@Demo01 /]# groupdel big1910

用户组的切换

某用户属于多个用户组时,想要访问其他用户组中的内容时,必须切换用户组才行。

前提是该账户确实是拥有多个用户组。

语法:newgrp {GroupName}

[root@Demo01 home]# id big1
uid=30002(big1) gid=30004(big1)=30004(big1),30003(Bigdata)

[root@Demo01 home]# newgrp Bigdata
[root@Demo01 home]# newgrp big1

用户相关文件

passwd、shadow、group

passwd

root:x:0:0:root:/root:/bin/bash

passwd这个文件的每行内容由冒号(:)隔开,分为7段

内容作用介绍
第一段账户名不要使用:. - + /
第二段密码passwd这个文件是所有人都可查看,所以密码虽然是加密的,但是依然不安全。
第三段UID系统用来标识内部的账户,通常UID和账户是对应的关系。如果出现了两个不同账户名但是却使用的相同的UID,那么系统就将它们两个识别为同一个账户,只不过它们拥有不同的账户名、shell程序、家目录。后者遵循前者。
第四段GID此处记录的是该账户的主组信息。
第五段注释描述对账户的描述信息,通常自定义账户都不写这个。
第六段家目录用户登录系统之后的默认工作空间,该空间除root和本人以外,默认是不允许其他人访问。
第七段Shell程序Linux、类Unix系统中的特有程序。

shadow

root:$6$LFcodjdx$pZ7F0qn9rNXRl.NVwWV9l1VupwRCDkaDSiLSgzAWzq0HzT3mfzMaCzPVIh.3.AJyQaEDauE45RY44TEpNphE./:18271:0:99999:7:::

内容介绍
第一段用户名
第二段加密后的口令
(注:不允许手动修改密码内容,如果含有不属于集合 { $./0-9A-Za-z }中的字符,则对应的用户不能登录)
第三段从密码创建至今的天数。从1970年1月1日开始计算值。
第四段表示上次和下次修改密码之间的间隔,如果是0表示无间隔限制
第五段自密码创建时刻起,最大的有效期(天)
第六段密码到期前的N天,提醒用户修改密码。
第七段缺省值为空,该字段允许密码到期之后N天之内还依然可以登录。
第八段缺省值为空,该字段表示一个绝对的天数,意为到期之后不允许登录,也可以理解为密码的有效存活期。

group

root:x:0:

内容介绍
第一段用户组名
第二段组的密码,通常用x或者*来表示。部分系统中没有组密码的设定
第三段GID
第四段组内的成员列表。文件中显示的账户名都是将该组作为附加组。如果是主组,在此不给与显示。

在Linux系统中,对于权限的设定非常的敏感,如果某个用户执行一个操作时,提示权限不足,那么根据Linux系统的权限设定的思想(没有权限绝对不会睁一只眼闭一只眼),就能够判断出该用户不具备此文件的执行权限。

在Linux系统中,有以下的权限表示。业内人士称之为:

  • 逻辑权限
  • 物理权限
  • 普通用户的root的权限。

逻辑权限

在Linux系统中不管是文件还是目录。(在Linux系统中,将所有的东西都视为文件。)都有固定权限表示。

文件/夹区别

两个文件分别是:

  • 第一个是目录
  • 第二个是普通文件

根据信息的==第一个字母(文件类型)==来查看:

  • d表示该文件是一个目录文件
  • -表示该文件是一个普通文件。
drwx------. 4 caolaoshi  Bigdata     4096 110 14:36 caolaoshi
--wxrw---x. 1 root       root       45537 110 11:15 install.log

权限的种类

说明:Linux系统中,不管是什么系统,权限的标识符号的位置是不会发生任何的改变,也就是说:

  • 第1个永远是文件类型
  • 第2-4(第一组)永远是读、写、执行,用户的权限
  • 第5-7(第二组)永远是读、写、执行,用户组的权限
  • 第8-10(第三组)永远是读、写、执行,其他人的权限

如果某个文件权限标识为----------,那么则说明此文件不允许任何的读取、写入、执行

  1. 每三个权限成为一组,每组中分别有三个权限:

    字符权限数字
    r4
    w2
    x执行1
  2. 除了第一个字母不参与权限的表示,其他的都为权限标识符。

    分组作用范围解释
    第一组用户user
    第二组用户组group
    第三组其他人other

修改文件/夹的权限

语法:chmod 权限符 [选项] 文件/夹名字

选项:-R :递归处理

使用案例

big1 当前文件夹的权限是drwx------

chmod在修改文件权限的时候,哪个便捷用哪个方法。

比如:

  • 如果要是给三组增加执行权限的时候,+x比数字计算要快。字符权限就比数字要便捷(不需要计算)
  • 如果是为每组增加不同权限的时候,用数字比较便捷(书写便捷)。
  1. 将此文件的权限修改为----------

    [root@Demo01 home]# chmod 000 big1
    
  2. 为此文件,每组都只有一个读的权限

    或者chmod +r big1

    [root@Demo01 home]# chmod 444 big1
    
  3. 为此文件的用户增加一个rw-,组增加一个r-x,其他人---

    [root@Demo01 home]# chmod u+rw,g+rx big1
    

修改文件/夹的所有者(属主)和属组

  1. chown root /u :将 /u 的属主(主用户)更改为"root"。

  2. chown :staff /u :将/u的属组更改为staff

    drwxr-xr-x. 2 test       root        4096 110 20:12 big2
    [root@Demo01 home]# chown root:A big2
    
    drwxr-xr-x. 2 root       A           4096 110 20:12 big2
    
  3. chown root:staff /u :和上面类似,但同时也将其属组更改为"staff"。

查看文件内容

语法:cat filename

[root@Demo01 home]# cat uset.txt

物理权限

修饰某个【文件/夹】不允许被修改。注意:不能给//dev/var 加保护

即便是root权限也不一定所有的文件都可以删

语法:chattr [选项] file/dir

选项:

选项作用
i表示不能以任何方式进行文件/夹的修改,增加,删除
a表示文件/夹只能追加,不能修改,删除 >>(追加), >(覆盖)
+ <属性>表示开启某文件/夹的权限
- <属性>表示关闭某文件/夹的权限
R表示递归处理。

使用案例

  1. 使文件不允许修改、删除、增加

    [root@Demo01 home]# touch big1902
    [root@Demo01 home]# chattr +i big1902
    
  2. 使文件只允许追加内容。不允许删除和修改

    [root@Demo01 home]# touch big1903
    [root@Demo01 home]# chattr +i big1903
    
  3. 快捷方式向文件中追加内容

    >>表示追加

    >表示覆盖

    [root@Demo01 home]# echo "abc">>mytest
    
    [root@Demo01 home]# cat mytest
    abc
    

lsattr查看文件的物理权限(属性)

语法:lsattr [选项] 文件/夹

选项:

选项作用
R表示递归处理
a表示查看所有文件的属性,包括隐藏
d显示目录的属性,而不是目录下的文件的属性

普通用户的root的权限

sudo(SuperUser Do),它可以让普通用户执行root的权限。sudo可以限制用户执行部分root的权限。

sudo会记录用户执行过的每一条命令,便于查阅服务起出事之前的状态。

  1. 好处:

    • 使用自己配置好的用户环境
    • 不需要知道root密码,保证root的密码安全
    • 可以限制用户执行有限的root权限
    • sudo执行的每条命令都会被记录,便于日后的日志审计,例如用户执行过高危操作命令。
      • /etc/sudoers文件中配置 Defaults logfile =/home/log.txt 即可(logfile文件自定义)
  2. sudoers文件解释

    ## Sudoers allows particular users to run various commands as
    ## the root user, without needing the root password.
    ##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码 
    ##
    ## Examples are provided at the bottom of the file for collections
    ## of related commands, which can then be delegated out to particular
    ## users or groups.
    ## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或  
    ## ## 用户组所使用  
    ## This file must be edited with the 'visudo' command.
    ## 该文件必须使用"visudo"命令编辑
    ## Host Aliases
    #主机别名
    ## Groups of machines. You may prefer to use hostnames (perhap using 
    ## wildcards for entire domains) or IP addresses instead.
    ## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
    ## 或IP地址代替,这时可以配置主机别名
    
    # Host_Alias     FILESERVERS = fs1, fs2
    # Host_Alias     MAILSERVERS = smtp, smtp2
    ## User Aliases
    #用户别名
    ## These aren't often necessary, as you can use regular groups
    ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
    ## rather than USERALIAS
    ## 这并不很常用,因为你可以通过使用组来代替一组用户的别名  
    # User_Alias ADMINS = jsmith, mikem
    
    ## Command Aliases
    ## These are groups of related commands...
    ## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,  
    ## 可以通过sudo调用所有别名包含的命令,下面是一些示例
    
    ## Networking
    #网络操作相关命令别名  
    Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
    /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, 
    /sbin/mii-tool
    ## Installation and management of software
    #软件安装管理相关命令别名  
    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
    ## Services
    #服务相关命令别名 
    Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
    ## Updating the locate database
    #本地数据库升级命令别名  
    Cmnd_Alias LOCATE = /usr/sbin/updatedb
    ## Storage
    #磁盘操作相关命令别名
    Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
    ## Delegating permissions
    #代理权限相关命令别名 
    Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
    ## Processes
    #进程相关命令别名
    Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
    ## Drivers
    #驱动命令别名
    Cmnd_Alias DRIVERS = /sbin/modprobe
    #环境变量的相关配置
    # Defaults specification
    #
    # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
    #         You have to run "ssh -t hostname sudo <cmd>".
    #
    Defaults    requiretty
    Defaults    env_reset
    Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
    _XKB_CHARSET XAUTHORITY"
    ## Next comes the main part: which users can run what software on
    ## which machines (the sudoers file can be shared between multiple
    ## systems).
    ## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
    ## Syntax:
    ##语法
    ##      user    MACHINE=COMMANDS
    ##  用户 登录的主机=(可以变换的身份) 可以执行的命令  
    ##
    ## The COMMANDS section may have other options added to it.
    ## 命令部分可以附带一些其它的选项  
    ##
    ## Allow root to run any commands anywhere 
    ## 允许root用户执行任意路径下的任意命令 
    root    ALL=(ALL)       ALL
    ## Allows members of the 'sys' group to run networking, software,
    ## service management apps and more.
    # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
    ## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
    
    ## Allows people in group wheel to run all commands
    # %wheel        ALL=(ALL)       ALL
    ## 允许wheel用户组中的用户执行所有命令  
    ## Same thing without a password
    ## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
    # %wheel        ALL=(ALL)       NOPASSWD: ALL
    ## Allows members of the users group to mount and unmount the
    ## cdrom as root
    ## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令 
    # %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
    ## Allows members of the users group to shutdown this system
    # %users  localhost=/sbin/shutdown -h now
    ## 允许users用户组中的用户像root用户一样使用shutdown命令
    
    

权限练习

练习一

现在大数据部门有一个加密狗文件。大数据部门的人都可以去连接它给大家上课,但是别的部门不行

  1. /home目录下touch加密狗文件(Usbkey)

    [root@Demo01 home]# touch UsbKey 
    
  2. 创建大数据组(Bigdata)

    [root@Demo01 home]# groupadd bigdata
    
  3. 修改加密狗文件的所有者为root和大数据组

    [root@Demo01 home]# chown root:bigdata UsbKey
    
  4. 修改加密狗文件的权限为:root用户rwx,大数据组rwx,其他用户没有权限

    [root@Demo01 home]# chmod 770 UsbKey
    
  5. 编辑加密狗文件实现一些功能(写一句模拟一下就行)

  6. 创建大数据组的成员,并将其加入到大数据组

    [root@Demo01 home]# useradd -g bigdata  caolaoshi
    [root@Demo01 home]# useradd -g bigdata piaolaoshi
    [root@Demo01 home]# useradd xiaolaoban
    
  7. 通过不同权限的人,来观察加密狗的使用情况

    [root@Demo01 home]# su xiaolaoban
    [xiaolaoban@Demo01 home]$ cat Usbkey 
    cat: Usbkey: 权限不够
    
    [root@Demo01 home]# su caolaoshi
    [caolaoshi@Demo01 home]$ cat Usbkey 
    大数据。。。。。。。。。。。。。。。。。。。
    caolaoshi....11
    piaolaoshi...22
    

练习二

需求:现在1910班有两个组,一个是A组,另外一个是B组。

其中A组成员有zhangsan,lisi。B组成员有wangwu,zhaoliu。

A组成员的家目录在/big1910/A/目录下,且只有A组的人可以进

B组成员的家目录在/big1910/B/目录下,且只有B组的人可以进

现在要实现,组内之间资料共享,其他人无权查看。

资料如下:A组有两本书:

  • book1:所有者和属组为root用户和A组。权限为root用户可读可写可执行,A组的人可读可写可执行,其他人没有权限。
  • book2:所有者和属组为root用户和A组,权限为root用户可读可写可执行,A组的可读可执行不可写,其他人没有权限。
  1. 创建用户家目录

    [root@Demo01 ~]# mkdir  -p /big1910/A
    [root@Demo01 ~]# mkdir  /big1910/B
    
  2. 创建用户并指定家目录

    [root@Demo01 ~]# useradd -d /big1910/A/zhangsan -m zhangsan
    [root@Demo01 ~]# useradd -d /big1910/A/lisi -m lisi
    [root@Demo01 ~]# useradd -d /big1910/B/wangwu -m wangwu
    [root@Demo01 ~]# useradd -d /big1910/B/zhaoliu-m zhaoliu
    
  3. 创建用户组

    [root@Demo01 ~]# groupadd -g 1000 A
    [root@Demo01 ~]# groupadd -g 1001 B
    
  4. 将用户分别加入对应的组内

    [root@Demo01 ~]# usermod -g A zhangsan
    [root@Demo01 ~]# usermod -g A lisi
    [root@Demo01 ~]# usermod -g B wangwu
    [root@Demo01 ~]# usermod -g B zhaoliu
    
  5. 修改文件夹权限,让对其他人无权限

    [root@Demo01 ~]# cd /big1910
    [root@Demo01 ~]# chmod 750 A
    [root@Demo01 ~]# chmod 750 B
    
  6. 修改文件夹权限,让对应的组文件夹附属组为对应的group

    [root@Demo01 ~]# chown root:A A
    [root@Demo01 ~]# chown root:B B
    
  7. 修改book对应的权限

    [root@Demo01 ~]# chmod 770 book1
    [root@Demo01 ~]# chmod 750 book2
    

    磁盘

    磁盘,它是由一个个盘片组成的,从盘片的结构上来看 图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线 ,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称为一个扇区(图中绿色部分)。扇区是磁盘的最小组成单 元,常是512字节。

    • 磁盘分区:指定分割区域起始与结束磁柱
    • 磁盘存取的区域 例如A磁柱到B磁柱之间的区块,磁盘在此分割区域内操作系统能够知道它可以在指定区块进行文件读,写,查询等操作
    • 但是需要注意使用硬盘之前需要格式化!
    • 因为每种操作系统所设定的文件属性/权限,以及存放数据的格式 有所不同

    Ext2/Ext3/Ext4区别

    1. Ext*、NTFS和FAT32这三个都是文件系统格式
    2. Linux kernel自2.6.28开始正式支持新的文件系统Ext4
    3. Ext4是Ext3的改进版,修改了Ext3中部分重要的数据结构
    4. Ext3对Ext2,只是增加了一个日志功能
    5. Ext4可以提供更佳的性能和可靠性,还有更为丰富的功能,更大的文件系统和更大的文件。
      • 较之Ext3所支持的最大16TB文件系统和最大2TB文件,Ext4分别 支持1EB(1,048,576TB,1EB=1024PB,1PB=1024TB)的文件系统,以及16TB的文件。

    无限数量的子目录

    Ext3只支持32,000个子目录,而Ext4支持理论值的无限数量的子目录

    延迟分配

    • Ext3的数据块分配策略是尽快分配,而Ext4是尽可能地延迟分配,直 到文件在cache中写完才开始分配数据块并写入磁盘。
    • 如此能优化整个文件的数据块分配,显著提升性能。

    快速fsck(文件系统检查)

    • 老的fsck会很慢,因为它要检查所有的索引节点(inode)
    • Ext4给每个组的索引节点表中添加了一份未使用inode的列表,执行fsck就可以跳过它们而只去检查那些在用的索引

    持久预分配(Persistentpreallocation)

    常常会预先创建 一个与所下载文件大小相同的空文件,以免未来的数小时或数天 之内磁盘空间不足导致下载失败。Ext4在文件系统层面实现了持久预分配并提供相应的API,比应用软件自己实现更有效率。

    SWAP(交换分区)概述

    • 使用磁盘来存储内存不够而“溢出来”的内容(拿硬盘空间来存储内存“溢出”的数据)。
    • 当系统的物理内存不够用的时候,就需要将物理内存中的一部分 空间释放出来,以供当前运行的程序使用。
    • 最容易成为被释放的对象:一些很长时间没有什么操作的程序。 被 保存到Swap空间中。等到那些被换出的程序要继续运行时,再从Swap中恢复保存的数据到内存中。
    • 一般来说可以按照如下规则设置swap大小:
      • 8G以内的物理内存,SWAP 设置为内存的2倍。
      • 8G-16G以内的的物理内存,SWAP 等于内存大小或者设置为8G。
      • 16G-256G 的物理内存,SWAP 设置为实际内存的1/2即可。

    系统什么时候会使用swap

    • 实际上,并不是等所有的物理内存都消耗完毕之后,才去使用 swap的空间,什么时候使用是由swappiness 参数值控制。
    • [root@localhost ~]# cat /proc/sys/vm/swappiness ——> 60
      • 默认值是60。swappiness=0的时候表示最大限度使用物理内存 ,然后才是 swap空间,swappiness=100的时候表示积极的使 用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

    修改swap参数

    1. 临时修改

      [root@localhost ~]# sysctl vm.swappiness=10 
      
      [root@localhost ~]# cat /proc/sys/vm/swappiness 
      10 
      
    2. 永久修改

      /etc/sysctl.conf 文件里添加如下参数: vm.swappiness=10

问题:为什么要挂载?

因为文件系统并不能够直接使用。

  • Windows的文件系统需要盘符来表示
  • Linux的文件系统需要目录作为入口

分区的格式就是文件系统。

挂载

添加的设备都会默认在/dev

语法:mount 文件系统 目录(挂载点)

挂载光盘镜像文件

  1. 创建目录cdrom,并不是非要这个名称,是因为想做到见名知意。将该目录作为接下来的挂载点

    [root@localhost ~]# mkdir /home/cdrom
    
  2. 进行挂载

    [root@localhost ~]# mount /dev/cdrom /home/cdrom
    

挂载U盘

需要注意:

  • U盘的格式如果为NTFS,那么需要安装一个插件之后才能够进行挂载,否则无法识别。
    • yum install ntfs-3g
  • 如果是fat32的,那么可以直接进行挂载。
  1. 创建目录udisk并不是非要这个名称,是因为想做到见名知意。将该目录作为接下来的挂载点

    [root@localhost ~]# mkdir /home/udisk
    
  2. 进行挂载

    为防止U盘中有中文名称的文件出现乱码,挂载时可以指定编码格式-o iocharset=utf8

    [root@localhost ~]# lsblk
    [root@localhost ~]# mount -o iocharset=utf8 /dev/sdb1 /home/udisk
    

取消挂载

语法:umount 挂载点

  1. 查看当前文件系统的状态

    [root@localhost ~]# df -h
    

  2. 取消挂载

    [root@localhost ~]# umount /home/udisk
    

    如果出现:device is busy可能是由于当前root账户处于cdrom目录中,所以导致无法取消挂载。还有其他可能是由于别的用户或软件仍在使用该目录中的文件所导致。

网络模型

OSI七层网络模型TCP/IP四层 概念模型对应网络协议
应用层(Application)HTTP、TFTP, FTP, NFS, WAIS、
表示层(Presentation)应用层Telnet, Rlogin, SNMP, Gopher
会话层(Session)SMTP, DNS
传输层(Transport)传输层TCP, UDP
网络层(Network)网络层IP, ICMP, ARP, RARP, AKP, UUCP
数据链路层(Data Link)数据链路层FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理层(Physical)IEEE 802.1A, IEEE 802.2到IEEE 802.11

OSI七层和TCP/IP四层的关系

  1. OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型
  2. OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
  3. OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。
    1. TCP:transmission control protocol 传输控制协议(打电话)
    2. UDP:user data protocol 用户数据包协议(相当于写信)

网络设备

交换机

由来,早期的时候并没有这个设备,当时使用HUB设备进行数据的发送,但是HUB发送数据的特性广播,这样的方式,数据不安全,增加网路带宽的消耗。

交换的工作原理:通电之后,在自己的内部建立一张设备Mac地址表。这张表中记录了设备的Mac地址或其他的信息。

交换机可以组建局域网(内网)。

路由器

实现网络代理的功能,在公共网络上,上网的节点是路由器,并不是电脑。

将局域网中的数据转发至公共网络(外网)。

介绍:

  1. 早期上网的方式是:通过电话线插入电脑上,进行拨号上网。此方式的缺点:1、电话一直占线。2、有可能电话进来,掉线。
  2. 通信公司发现这样的缺点之后,出现了一个新的设备,这个设备的功能可以将电话线路一分为二。分别实现电话、上网的功能。调制解调器(猫)。
  3. 随着社会的发展,发现这种方式又不能满足日常的上网需求。一个猫只有一个接口,无法满足多台设备上网的需求的。
  4. 将多台设备接入交换,交换机的其中一个接口连接路由器。
  5. 连接顺序:
    • 猫上出的网线接入路由器的WAN口
    • 路由器的LAN口接入交换机。
  6. 无线设备。大约在2008年,家用无线路由器开始普及。

无线路由器是将交换机和有线路由器和在一起产品。

网络地址

配置网络时需要配置的信息

配置信息介绍
IP地址PC在网络中的通信地址。
子网掩码子网掩码有且只有这一个功能,用于划分网络,将一个IP地址中的网络位和主机位进行划分。是一个32位的地址。也有:32位/24位/16位/8位
网关网络的关口,用于数据转发,通常理解为路由器的地址,大部分硬件厂家的出厂默认地址是,192.168.0.1 | 192.168.1.1
DNS用于解析域名的作用,Domain Name System 域名解析系统。

IP地址

IP地址 = 网络位+主机位

  • 相同的网络,网络位肯定相同,主机位不一样
  • 不同的网络,网络位肯定不同,主机位可能一样

比如:电话号码

网络位主机位
北京01088889999
上海02112345678
02188889999

网关

一般设置为:

  • xxx.xxx.xxx.254,贴近广播地址
  • xxx.xxx.xxx.1

在网络中,一般来说:

  • 0这个IP被用来当作网段的标识。
  • 255这个IP被用来当作广播地址使用
  • 正常使用的IP范围中,其中一个IP地址要被拿来当作网关(路由器)使用

子网掩码

一个网络中有多少个IP地址,取决于子网掩码

比如:家用网络中,一般都是:

  • 192.168.1.2-254
  • 255.255.255.0
  • 192.168.1.1

其中:1

  • 92.168.1.2-254位主机IP地址
  • 255.255.255.0子网掩码(用于划分网络,子网掩码可以计算IP地址的数量)
  • 192.168.1.1当作网关使用
  • 192.168.1.0用来表示网段

图解:

网络传输过程

  1. 本地主机通过IP地址找到自己的网关,网关外可能还有网关,对数据进行包装(表头,校验等信息)
  2. 通过外网找到信息中的目标地址,再由目标地址网关解析信息,最后目标主机收到消息

图解:

DNS

静态

优点:可以使我们PC/服务器有一个更快的解析速度。维护方式是手动配置服务器上hosts文件。

缺点:hosts一般都是为本机系统所有,维护一台服务器还好说。如果是上千台集群,那么维护的工作很困难

动态

优点:只需要给服务器指明DNS服务器地址即可,无需手动配置hosts文件

缺点:有一定响应时间,(延迟)。若DNS服务器宕机,那么我们就立即失去访问域名的能力

桥接

  1. 优点:同一个局域网中的任意一台物理机想要访问虚拟机时,只要拥有账户和密码,就可以直接进行通信。
  2. 缺点:如果宿主主机没有连接网络,那么虚拟机也就不存在与该真实网络环境中,换句话,虚拟机使用桥接模式的时候,它的网络依赖于宿主的网络环境。

NAT

  1. 优点:可以无视物理机(宿主主机)网络环境。即便是物理机没有网络,也不影响本机和虚拟机进行通信,也不影响本机上的其他虚拟机之间互相通信。因为虚拟机真正通信网卡是VMNet8提供(网络环境)
  2. 缺点:其他物理机想要访问NAT模式下的虚拟机时,比较麻烦。

通过主机名查看IP

返回的结果中有该域名的IP地址

[root@Demo01 ~]# host www.baidu

远程拷贝

本机拷贝到远程服务器

要求:必须知道对方的账户和密码,且具备相应的权限。

语法:scp [-r] [path]/fie|dir {UserName}@Host_IP:/[path]

  • -r:该选项用于传输文件夹的时候使用。
  1. 案例:将本机的文件拷贝到远程服务器上

    注意:如果是第一次访问该服务器,那么会询问,是否要继续连接。每次访问都需要输入远程服务器的密码。

    将本机下/root/install.log 拷贝到远程主机192.168.72.129的root账户下的/home目录下

    [root@Demo01 ~]# scp /root/install.log root@192.168.72.129:/home
    

远程主机拷贝数据到本机

要求:必须知道对方的账户和密码,且具备相应的权限。

语法:scp {UserName}@Host_IP:/[path]/file /[path]

  1. 案例:将远程服务器中/home目录下的install.log拷贝到本地的root目录下

    [root@Demo01 ~]# scp root@192.168.72.129:/home/install.log /root/
    

通过主机名进行远程拷贝

  1. 修改/etc/sysconfig/networkHOSTNAME修改为主机名 注:这个修改是永久修改主机名需要重启才能生效

    NETWORKING=yes
    HOSTNAME=Demo01
    
  2. 临时修改:hostname 主机名

  3. 想让服务器直到其他服务器的ip以及主机名的对用关系,需要配置/etc/hosts文件。将ip地址和主机名做对应即可

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    192.168.72.128 Demo01
    192.168.72.129 Demo02
    

登陆远程服务器

需要密码登陆

语法:ssh {UserName}@Host_IP

回车之后,如果首次访问,会提示是否继续连接。接下来要求输入远程服务器的密码。

  1. 案例:登陆远程主机:192.168.72.129

    该主机名:Demo02

    [root@Demo01 ~]# ssh root@192.168.72.128
    
  2. 案例:退出登陆

    本机名:Demo01

    远程主机名:Demo02

    [root@Demo02 ~]# exit
    [root@Demo01 ~]#
    

Linux系统下,ssh服务的默认端口是22。如果在访问是没有指明端口,默认按照22端口访问,如果远程服务器,提供的端口不是22,那么就需要在访问的时候指定远程服务器的端口:

语法:ssh [-p port] {UserName}@Host_IP

SSH免密登陆

Linux免密登录使用的RSA算法。

RSA本身是一种非对称加密算法,会生成公钥和私钥。

  • 公钥:使用公钥对内容进行加密
  • 私钥:持有私钥的PC才能正常访问公钥加密的内容

只要持有私钥就能访问公钥加密的内容,这种事情本身就是存在风险的。一旦私钥丢失,那么服务器上的数据就存在被窃取的风险。但是Linux生成公钥和私钥的时候支持对私钥证书文件添加密码。

证书的生成

  1. 语法:ssh-keygen

  2. 回车后会有提示:

    • 第一次提示:你的证书存放的位置
    • 第二次提示:对私钥加密,输入密码。如果不需要输入密码,直接回车
    • 第三次提示:私钥证书的密码确认操作
  3. 证书文件会存放在当前账户的家目录下的隐藏目录:.ssh目录下,在该目录下会有一下4个文件

    文件作用解释
    id_rsa私钥执行证书生成命令才会有
    id_rsa.pub公钥执行证书生成命令才会有
    known_hosts曾经访问过的服务器信息每次ssh、scp、ssh-copy-id到远程服务器时就会保存记录到此文件中,以后再此访问该服务器时就不会再提示那一句"你确定要继续访问吗 yes/NO?"
    authorized_keys记录来访服务器的公钥文件内容该文件会记录访问本机的远程服务器的公钥证书文件内容,只有对应的私钥才能进行验证。

证书的注册

将本机的公钥证书文件注册到远程服务器上,此后就可以使用私钥证书进行登录。

  1. 语法:ssh-copy-id {UserName}@Host_IP

    执行此命令,会要求输入远程服务器的对应账号和密码

    这一步就是向远程服务器注册本机的id_rsa.pub文件(公钥)内容。此后只有本机上与公钥文件共同生成的私钥才能够进行免密登录。(远程主机的公钥名为:authorized_keys

  2. 图解:

证书使用的场景

  1. 场景一:只是单纯的使用证书来登录服务器。

    使用证书的登录方式可以避免密码遗忘、泄漏的问题。

    使用证书登录服务器的方式也是服务器加固(服务器安全相关问题)的方式。

    服务器可以设置不允许使用密码进行远程登录。只允许证书的方式登录。

    证书本身支持加密,就算证书丢失,再不知道证书密码的情况,证书属于无效文件。

  2. 场景二:集群中使用证书进行免密登录。

    因为但凡设计到集群的时候,一般都不会是小数目的服务器数量。众多的服务器之间进行互相访问,频繁的输入密码的事情将会成为开发工程师噩梦。

    所以,使用证书管理集群的时候,可以免除集群中的服务器互相访问时工程师手工输入密码的问题。

双向免密登陆

  1. 方法一:

    • 在本机生成密钥和公钥,将公钥注册到包括自己的所有远程服务器中
    • 将私钥注册到其他远程服务器中
  2. 方法二:

    • 在每一台服务器中生成公钥和私钥,并且把公钥注册到其他每一台服务器中

wget

用于从网络上下载资源,没有指定目录,下载资源默认存储到当前目录。

语法:wget [参数] [URL地址]

  • 支持断点下载功能
  • 同时支持FTP和HTTP下载方式
  • 支持代理服务器

下载单个文件

[root@Demo01 ~]# wget http://www.tedu

下载并重命名文件

使用wget -O下载并以不同的文件名保存

[root@Demo01 ~]#  wget -O NewName.new  http://www.tedu

限速下载

使用wget --limit-rate限速下载(单位,byte/秒)

[root@Demo01 ~]# wget --limit-rate=300k  http://www.tedu

断点续传

使用wget -c断点续传

[root@Demo01 ~]# wget -c http://www.tedu

后台下载

使用wget -b后台下载

[root@Demo01 ~]# wget -b http://www.tedu

下载多个文件

编写一个文件(urlfile.txt),内容是下载的地址:

  • http://www.tedu
  • http://big.tedu/index.html

使用wget -i下载多个文件

[root@Demo01 ~]# wget -i urlfile.txt 

进程

概念

进程通俗来说,进程就是运行中的程序

在linux下,知道程序要运行,首先就是将磁盘中相应的可执行文件加载到内存中,那么我们怎么知道他在内存中哪呢?这个时候就需要我们通过一个叫做进程标识符的东西找到它。类似于我们自己的身份证

进程分为临时进程和持久进程

  • 临时进程:执行完命令,自动结束
  • 持久进程/守护进程:程序执行后,需要手动结束

程序被加载为进程的过程

  1. 用户执行程序
  2. 程序加载到内存中
    • 给程序一个临时的PID
    • 查看执行的全限,如果用户没有执行全限,那么拒绝操作;如果有,开始加载程序执行的相关资料(内存指针开始扫描相应的数据或者代码)
    • 确认临时的PID

查看进程

在Linux系统中,不像windows那样方便,可以通过快捷键调出图形化的任务管理器来管理进程。

静态查询

PS

将某个时间点的程序运作情况截取下来

常用组合选项 -aux

选项作用
a关联的所有 process,通常与x一起使用,列出完整信息。
x后台进程
u有效使用者的相关联的进程
ajxf可以让ps的结果以树状的格式显示出来。

举例:当我们新开一个通道编辑一个文件的时候,我们通过ps -aux可以查看到

查询指定进程

ps -aux | grep sshd

  1. ps查询结果各项解释

    结果解释
    USER用户
    PID进程ID
    %CPUcpu占用率
    %MEM内存使用率
    VSS虚拟内存使用量
    RSS物理内存使用量
    TTYtty1-tty6 是本机上面的登入者程序。 pts/0 等等的,则表示为由网络连接进主机的程序。 如果显示?则表示与终端机无关。
    STAT进程的状态
    START进程启动的时间
    TIME累计消耗CPU的时间
    COMMAND表示哪个命令/程序运行的该进程
  2. 状态标识

    状态解释
    R正在运行,或在队列中的进程
    S处于休眠状态
    l多进程
    Z僵尸进程
    T停止或者被追踪
    <高优先级
    N低优先级
    s包含子进程
    +位于后台的进程组
  3. 僵尸进程

    由于该进程已经执行完毕,但是父进程没有终止或其他原因导致该进程并没有真正的结束,所形成的进程称之为僵尸进程。

    此进程对服务器的危害在于它会持续的消耗服务器资源,消耗量会越来越大。最终导致其他的进程无资源可用,服务器崩溃。

pstree

语法:pstree [选项]

选项:

选项作用
A各程序之间的连接以ASCII字符来连接
U各程序之间的连接以UTF-8的字符来连接
u列出每个process的所属账号名称
p同时列出每个程序的进程的ID
  1. 举例

    [root@Demo01 ~]# pstree -up 
    

动态查询:top

动态查询系统的进程状态。默认是3秒一更新。

选项:

选项作用
-d跟时间,可以修改top默认更新(刷新)的时间
-b :以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案;
-n Number:与 -b 搭配,意义是需要进行几次 top 的输出结果;
-p :指定某些个 PID 来进行观察监测而已;

使用案例

  1. 每秒刷新一次top

    [root@Demo01 ~]# top -d 1
    
  2. 每2秒刷新一次top,以批次输出2次

    [root@Demo01 ~]# -d 2 -n 2
    
  3. 每秒刷新一次top,以批次输出5次

    [root@Demo01 ~]# top -d 1 -b -n 5  >> top.log
    

交互式案件:(不常用)

按键作用
?显示在 top 当中可以输入的按键指令
P以CPU的使用资源排序显示
M以Memory的使用资源排序显示
N以PID来排序
T由该Process使用的CPU时间累积 (TIME+) 排序
q离开top软件的按键

进程的管理

单进程的管理

kill:结束某个进程

语法:kill 信号量 PID

信号量:

信号量作用
-15以正常的程序方式终止一个进程!!!
-9立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程)
-2代表由键盘输入 [ctrl] + c 同样的动作;
-1对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程; !!

多进程的管理

killall:结束基于某个程序运行进程

语法:killall 信号量 程序名/命令名

信号量:

信号量作用
-15以正常的程序方式终止一个进程!!!
-9立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程)
-2代表由键盘输入 [ctrl] + c 同样的动作;
-1对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程; !!

案例

  1. 结束所有httpd的进程(如果没有可以先安装一下:yum install -y httpd

    [root@Demo01 ~]# killall -9 httpd
    

  2. 结束所有Java的进程

    [root@Demo01 ~]# killall -9 java
    

系统资源监控(自带)

内存监控:free

可能监控不准确

在真实的公司中有第三方,甚至公司自己开发的监控工具。不属于我们负责

选项:

选项作用
-bbytes
-kkb
-mmb
-ggb
-t统计总量
[root@Demo01 ~]# free -m
[root@Demo01 ~]# free -mt

清理缓存的命令:

[root@Demo01 ~]# echo 3 > /proc/sys/vm/drop_caches 

查阅系统与核心信息:uname

选项:

选项作用
-a所有系统相关的信息,包括以下的数据都会被列出来;
-s系统内核名称
-r内核版本
-m本系统的硬件名称,例如 i686或x86_64 等;
-pCPU 的类型,与 -m 类似,是显示的是CPU的类型;
-i硬件的平台(ix86);

观察系统启动时间与工作负载:uptime

00:29:43 up 1 day, 7:20, 2 users, load average: 0.00, 0.00, 0.00

选项解释
00:29:43系统当前的时间
Up 1 day, 7:20系统运行时间
2 users当前有两个用户登录
load average: 0.00, 0.00, 0.00系统过去的1,5,15分钟的平均负载

网络监控:netstat

监听udp一般监听不出来

选项作用
-a将目前系统上所有的已经连接、监听、Socket数据都列出来
-t列出tcp网络包的信息
-u列出udp网络包的信息
-n以端口(port number)方式来显示(不以程序的服务名称)
-l列出目前正在监听(listen)的服务;
-p列出该网络服务的进程id(PID)、程序名
  1. 列出当前系统中正在监听的TCP服务

    [root@Demo01 ~]# netstat -lt
    
  2. 列出当前系统中正在监听的TCP服务,并且显示进程ID

    [root@Demo01 ~]# netstat -ltp
    
  3. 列出当前系统中正在监听的TCP服务,并且显示进程ID、端口号。

    [root@Demo01 ~]# netstat -lntp
    
  4. 列出当前系统中已连接的TCP服务,并显示进程ID、端口号。

    [root@Demo01 ~]# netstat -tnp
    

查询出来的名称含义

名称作用
Proto协议名
Recv-Q接收消息缓冲区
Send-Q发送消息缓冲区
Local Address本地地址和端口号
Foreign Address远程地址和端口号
State状态。连接、监听
PID/Program name进程ID和程序名

侦测系统资源变化:vmstat

侦测系统资源变化

统计目前主机CPU状态,每秒一次,共计四次

[root@Demo01 ~]# vmstat 1 4

查询结果介绍

  1. procs(进程字段 )

    这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)

    r :等待运行的进程数量; cup处理不过来
    b:不可被唤醒的进程数量
  2. memory (内存字段)

    swpd:虚拟内存被使用的容量;
    free:未被使用的内存容量;
    buff/cache:用于缓冲的内存;
  3. swap(交换分区字段) (重点记忆下si和so)

    如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差

    si:每秒从交换分区写到内存的数据量大小,由磁盘->内存;
    so:每秒写入交换分区的内存数据量大小,由内存->磁盘。
  4. io(磁盘读写字段)

    如果这部份的值越高,代表系统的I/O非常忙碌

    bi:从块设备读入数据的总量(读磁盘)(每秒kb);
    bo:从块设备写入数据的总量(写磁盘)(每秒kb) 。
  5. system(系统字段 )

    这两个数值越大,代表系统与接口设备的通信非常频繁

    in:每秒被中断的进程次数; 发生在cup争抢的过程中
    cs:每秒钟进行的事件切换次数。发生在cup争抢的过程中
  6. CPU (cpu字段)

    us(user)非内核态的(用户进程) CPU 使用情况;
    sy(system)内核态所使用(系统进程)的 CPU 情况;
    id(idle )闲置的CPU情况;
    wa(wait)等待I/O所耗费的CPU;
    st被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持)

Linux防火墙

它具备一定的防护功能,比如说端口的开放和禁止,也可做数据的转发(类似路由功能),策略及其他功能。

临时处理防火墙

如果系统重启,那么防火墙将恢复到之前的状态

作用命令
开启service iptables start
or
/etc/init.d/iptables start
关闭service iptables stop
or
/etc/init.d/iptables stop
重启service iptables restart
or
/etc/init.d/iptables restart
查看service iptables status
or
/etc/init.d/iptables status

永久处理防火墙

(需重启系统后才能生效)

作用命令
开启:chkconfig iptables on
查看状态chkconfig iptables --list
关闭:chkconfig iptables off

概念

前台任务:可以控制与执行命令的bash环境称为前台

后台任务:在操作系统中自行运行,你无法使用[ctrl]+c终止称为后台。

管理

将前台任务放置后台暂停

Ctrl+z 就可以将前台的任务放置后台

将前台任务放置后台运行

在命令之前加上&

不是所有的任务都能够在后台运行的,比如需要与用户进行交互的程序或命令就不允许在后台运行, 比如【vi文本编辑器

[root@Demo1 ~]# cp file1 file2 &

查看后台任务

语法:jobs [选项]

选项:

选项作用
-r仅查看后台运行的任务
-s仅查看后台暂停的任务
-l查看后台的任务,并显示其PID
[root@Demo1 ~]# jobs

将后台任务调至前台

语法:

  • fg jobnumber:把指定编号的任务调至前台,无论在后台是暂停还是运行
  • fg:不加编号默认会把带有+号的任务调至前台(最后放置后台的任务就会带有+号)

+:表示最近一次放置后台的任务

  1. 查看所有后台任务

    [root@Demo1 ~]# jobs
    

  2. 将2号任务调至前台

    [root@Demo1 ~]# fg 2
    

将后台任务修改为运行状态

语法:

  • bg jobnumber:把指定编号的暂停的任务修改为运行状态(交互式的应用无法修改为允许状态)
  • bg:不加编号默认会把带有+号的暂停的任务修改为允许状态
  1. 查看所有后台任务

    [root@Demo1 ~]# jobs
    

  2. 修改2号任务的后台运行状态

    [root@Demo1 ~]# bg 2
    

    修改失败,因为2号任务是文本编辑,是交互式任务,无法将其后台任务修改为运行状态

  3. 修改4号任务的后台状态

    [root@Demo1 ~]# bg 4
    
    • 修改前

    • 修改后

终止job

通过jobs -l 查询处ID

通过kill -9 PID杀死线程

什么是VIM

是一个类似vi的文本编辑器,不过在vi的基础上增加了很多新特性,vim被公认为类vi编辑器中最好用的一个。

vim在vi的基础之上增加了很多的小功能。可以有效的帮助程序员快速的排查问题。

很多系统都内建vi编辑器,其他的文本编辑器不一定有,很多软件都会主动调用vi的接口。

VIM的三种模式

一般模式、编辑模式、命令模式

一般模式

h或←光标左移一个字符。如果是20h,表示左移20个字符。

j或→光标下移一个字符 同上

k或↑光标上移一个字符 同上

l或↓光标右移一个字符 同上

[Ctrl]+[f]屏幕向下移动一页 Page Down!!

[Ctrl]+[b]屏幕向上移动一页 Page Up !!

0或[Home]移动到此行最前面字符处!!

$或[End]移到光标所在行的行尾!!

H 光标移到当前屏幕最上方行的第一个字符!!

M光标移到当前屏幕中间行的第一个字符!!

L光标移动到当前屏幕最下方行第一个字符!!

G移到此文件最后一行!!!

nG移到第n行

gg相当于1G,即移到第一行!!!

n[Enter]光标下移n行

/word向下查找单词“word”(!!!)

?word向上查找单词“word”(!!!)

n表示重复前一个查找操作

N与n相反(反向查找)

yy复制光标所在行(!!)

nyy复制光标所在向下n行(n为数字)

y1G复制光标所在行到第一行所有数据

yG复制光标所在行到最后一行所有数据

y$复制光标所在处到同行最后一个字符

y0复制光标所在处到同行第一个字符

p将已复制的数据粘贴到光标所在下一行

P将已复制的数据粘贴到光标所在上一行

u复原前一个操作(类似于windows中的ctrl+z)!!!

Ctrl+r恢复一个操作

x向后删除一个字符

nx向后删除n个字符(n为数字)

X向前删除一个字符

dd删除光标所在行(!!!)

ndd删除光标所在行以下n行(n为数字,包含当前行在内)

d1G删除光标所在行到第一行所有数据(包括所在的行)

dG删除光标所在行到最后一行(!!)

d$或d end删除光标所在处到同行最后一个字符(!!)

d0或d home删除光标所在处到同行第一个字符。(!!)


编辑模式

i从光标所在处插入(!!!)

I从光标所在行第一个非空白字符处插入(!!)

a从光标所在处下一个字符处插入

A从光标所在行最后一个字符处插入(!!)

o在光标所在处下一行插入新的一行(!!)

O在光标所在处上一行插入新的一行(!!)

r替换光标所在处字符一次

R一直替换光标所在处文字直到按下Esc(!!!)


命令模式

如何进入命令模式:/?

  • 三种符号任意都可以进入命令模式

:w [filename] 另存为filename

:r [filename] 读取filename指定文件中的内容到光标所在的行。

:n1,n2 w [filename] 将n1到n2行另存为filename

:! command 临时切换到命令行模式下执行command命令。

  • 例如 :!find / -name Helllo.java即可在vim当中执行命令。

:wq 保存后离开

:q 不保存离开(未改可以离开,如果修改了需要q!强制离开)

:q! 不保存强制离开

:set nu 显示行号 (number)

:set nonu 取消显示行号 (noNumber)

:s/word1/word2/g 在当前行将word1替换成word2(!!)

:%s/word1/word2/g 在当前文件将word1替换成word2(!!)

:n1,n2s/word1/word2/g 在n1到n2行查找word1替换成word2 (n1、n2为数字)

:10,$ s/word1/word2/g从第一行到最后一行查找word1替换成word2

:%s/word1/word2/gc 同上,在替换前确认是否替换。(!!!)只能单行确认,需要逐个确认。

  • 替换为 b (y/n/a/q/l/E/Y)?
  • y表示yes,n表示no,a表示all(限光标当前到最后一行),q表示quit,l表示替换后移动光标到行首,E(Ctrl+E)表示向下翻,y(Ctrl+Y)表示向上翻。

压缩和打包概念

  1. 压缩

    指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。

  2. 打包

    指将多个文件(或目录)合并成一个文件,方便传递或部署。

    在Linux系统中,文件的后缀名不重要,但是针对于压缩文件的后缀名是必须的,因为可以让其他的程序员根据文件的后缀名使用对应的算法进行解压。

  3. Linux常见的压缩文件后准名

    后缀解释
    *.gzgzip程序压缩的文件
    *.bz2bzip2 程序压缩的文件
    *.tartar命令打包的数据,并没有压缩过
    *.tar.gztar程序打包的文件,并且经过 gzip 的压缩
    *.tar.bz2tar程序打包的文件,并且经过 bzip2 的压缩

压缩/解压

gzip(常用)

压缩/解压命令

  • 压缩速度块, 压缩比较低

常用压缩选项(需要保留源文件需要使用重导向:>>):-cv

常用解压选项:-dv

语法:gzip 选项 filename

选项:

选项解释
-c将压缩的数据输出到标准输出(stdout)上
-d解压缩
-t可以用来检验一个压缩文件的一致性,看看文件有无错误
-v可以显示出原文件/压缩文件的压缩比等信息
-(1,2…9)压缩等级
1最快,但是压缩比最差;
9最慢,但是压缩比最好;
默认是6。
-l查看压缩文件的压缩比: gzip –l *.gz

使用案例

/home/gzip目录下有一个文件install.log

对其操作

  1. 压缩该文件,将压缩的数据输出到标准输出

    不会生成新的压缩文件,压缩完后的数据直接输出到了屏幕上

    [root@Demo02 gzip]# gzip -c install.log
    
  2. 压缩完显示压缩比等信息,此时源文件不在了,想保留源文件,需要使用重导向技术

    [root@Demo02 gzip]# gzip -v install.log 
    install.log:	 75.2% -- replaced with install.log.gz
    
    [root@Demo02 gzip]# ll
    总用量 12
    -rw-r--r--. 1 root root 11345 113 17:24 install.log.gz
    

    使用重导向技术

    [root@Demo02 gzip]# gzip -c install.log >> install.log.gz
    
    [root@Demo02 gzip]# ll
    总用量 60
    -rw-r--r--. 1 root root 45537 113 17:24 install.log
    -rw-r--r--. 1 root root 11345 113 17:28 install.log.gz
    
  3. 解压

    [root@Demo02 gzip]# gzip -d install.log.gz 
    
  4. 检查压缩后的文件是否有误

    什么也没有输出就是没有错

    [root@Demo02 gzip]# gzip -t install.log.gz 
    [root@Demo02 gzip]# 
    
  5. 提高压缩比(如果文件本身比较小可能体现不出来)

    使用默认的压缩,当时的压缩比为75.2%

    [root@Demo02 gzip]# gzip -cv9 install.log >> install.log.gz
    install.log:	 75.4%
    

bzip2

压缩/解压命令

  • gzip拥有更快的压缩性能。
  • bzip2拥有更高的压缩比,但压缩速度较慢。
  • 单纯从压缩比方面来说,那么bzip2 > gzip > compress

常用压缩选项(需要保留源文件需要使用重导向:>>):

常用解压选项:

语法:bzip2 选项 filename

选项:

选项解释
-c将压缩的过程产生的数据输出到标准输出(stdout)
-d解压缩
-k保留源文件,而不会删除原始的文件
-v可以显示出原文件/压缩文件案的压缩比等信息;
-(1,2,…,9)与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快

使用案例

/home/gzip目录下有一个文件install.log

对其操作

  1. 将其通过bzip2压缩

    [root@Demo02 gzip]# bzip2 -c install.log >> install.log.bz2
    

zip

压缩

  1. 压缩当前目录下所有文件

    zip -r xxx.zip ./*
    
  2. 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件

    zip -r myfile.zip ./*
    

解压

查看压缩文件中的内容

  1. cat:可以用来查看文本文件中的内容
  2. zcat:可以用来查看gzip算法压缩的压缩文件内容
  3. bcat:可以用来查看bzip2算法压缩的压缩文件内容

打包/解包:tar

tar:可以将一个文件/夹打包成一个文件。可以结合gzip、bzip2的算法对包文件进行相应的压缩和解压。

语法:

  • 压缩:tar [选项] newFileName.tar.gz sourceFileName
  • 解压:tar [选项] fileName.tar.gz [-C /path]

选项:

选项解释
-c压缩
-t查看打包文件的内容含有哪些文件
-x解打包或解压缩的功能,可以搭配-C(大写)在指定目录解开
-j通过bzip2的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2
-z通过gzip的支持进行压缩/解压缩:此时文件最好为 *.tar.gz
-v在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename-f 后面跟处理文件的全名称(路径+文件名+后缀名)
-C 目录:这个选项用在解压的时候,若要在特定目录解压,可以使用这个选项

  • 使用命令进行打包、压缩的时候,使用了什么算法,文件后缀名就一定要与其对应。

压缩

压缩常用选项:

  • 通过gzip算法:-zcvf
  • 通过bzip2算法:-jcvf
  1. 使用gzip的算法进行打包压缩

    [root@Demo02 gzip]# tar -zcvf install.log.tar.gz install.log
    install.log
    
    [root@Demo02 gzip]# ll
    总用量 72
    -rw-r--r--. 1 root root 45537 113 17:37 install.log
    -rw-r--r--. 1 root root 11449 113 17:56 install.log.tar.gz
    
  2. 使用bzip2的算法进行打包压缩

    [root@Demo02 gzip]# tar -jcvf install.log.tar.bz2 install.log
    install.log
    
    [root@Demo02 gzip]# ll
    总用量 72
    -rw-r--r--. 1 root root 45537 113 17:37 install.log
    -rw-r--r--. 1 root root  9721 113 17:58 install.log.tar.bz2
    
  3. 压缩指定目录下的文件,并输出到指定目录下

    后面跟的路径/文件名,会把该路径全部打包

    所以如果想要打包某个文件,最好进入该文件的路径下,第一个路径为压缩后的输出路径

    [root@Demo02 /]# tar -zcvf /home/gzip/install.log.tar.gz install.log 
    install.log
    
    [root@Demo02 /]# cd /home/gzip/
    [root@Demo02 gzip]# ll
    -rw-r--r--. 1 root root 11451 113 18:10 install.log.tar.gz
    

解压

解压常用选项:

  • 一般都是gzip格式的压缩包:-zxvf
  1. 将一个压缩包文件解压到当前目录下

    [root@Demo02 gzip]# tar -zxvf install.log.tar.gz 
    install.log
    
  2. 将一个压缩文件解压到指定目录下

    第一个参数:要解压的文件

    第二个参数:通过-C指定输出路径

    [root@Demo02 gzip]# tar -zxvf install.log.tar.gz -C ../tar
    install.log
    
    [root@Demo02 gzip]# ls ../tar
    install.log
    
  3. 只解压包中的某个文件

    前提:把/etc目录压缩到/home/gzip路径下

    /etc目录下有众多文件夹,可以指定把哪个文件夹解压出来

    [root@Demo02 gzip]# tar -zxvf etc.tar.gz etc/shells
    etc/shells
    
    [root@Demo02 gzip]# ll
    总用量 9740
    drwxr-xr-x. 2 root root    4096 113 18:18 etc
    [root@Demo02 gzip]# ls etc
    shells
    
  4. 配置jdk环境变量

    • 将jdk的tar包拷贝到服务器某个目录中,例如:/home/software

      [root@Demo02 software]# ls
      jdk-8u131-linux-x64.tar.gz
      
    • 将该tar包解压到当前目录下

      [root@Demo02 software]# tar -zxvf jdk-8u131-linux-x64.tar.gz 
      
      [root@Demo02 software]# ll
      drwxr-xr-x. 8 uucp  143      4096 315 2017 jdk1.8.0_131
      -rw-r--r--. 1 root root 185540433 113 18:28 jdk-8u131-linux-x64.tar.gz
      
    • 配置系统环境变量

      通过修改/etc/profile文件,配置JDK

      文件末尾添加如下内容,不能出错,不然其他的Linux命令可能会出问题(如果出现问题,通过单用户模式修改正确即可)

      export JAVA_HOME=/home/software/jdk1.8.0_131
      export PATH=$JAVA_HOME/bin:$PATH
      
    • 是环境变量生效

      [root@Demo02 software]# source /etc/profile
      
      [root@Demo02 software]# java -version
      java version "1.8.0_131"
      Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
      Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
      [root@Demo02 software]# 
      

软件管理:RPM

最初只有.tar.gz的打包文件,用户必须编译每个他想在Linux上运行的软件。用户们普遍认为系统很有必要提供一种方法来管理这些安装在机器上的软件包,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。稍后RedHat才决定开发自己的==“rpm”包管理系统==。

优点和缺点

  1. 优点:
    • 自带编译后的文件,免除用户对软件编译的过程
    • 可以自动检测文件系统(硬盘)的容量、系统的版本。避免软件被错误的安装。
    • 自带软件的版本信息、帮助文档、用途说明等信息。
  2. 缺点:
    • 无论安装还是卸载,RPM都有一个恶心人的依赖关系。
    • 安装的软件需要依赖,那么优先安装依赖。
    • 卸载的软件存在依赖,那么优先卸载依赖。

软件安装默认路径

路径作用
/etc一些配置文件放置的目录,例如/etc/crontab
/usr/bin一些可执行文件
/usr/lib一些程序使用的动态链接库
/usr/share/doc一些基本的软件使用手册与说明文件
/usr/share/man一些man page(Linux命令的随机帮助说明)文件

安装与卸载

安装

语法:rpm -ivh packageName.rpm

选项:

选项作用
i表示安装
v表示处理过程
h显示处理进度(进度条)
使用案例

已经下载好了rpm格式的软件包,放在了/home/rpm

如果安装的软件有依赖包,需要先安装依赖包,否则会安装失败

  1. 单个安装

    通过rpm安装JDK,会自动配置环境变量

    [root@Demo02 rpm]# rpm -ivh jdk-8u111-linux-x64.rpm 
    
  2. 多个安装

    安装多个,中间用空格隔开即可

    [root@Demo02 rpm]# rpm -ivh jdk-8u111-linux-x64.rpm epel-release-6-8.noarch.rpm 
    
  3. 安装网络上的RPM包

    [root@Demo02 rpm]# rpm -ivh "https://地址/package.rpm"
    

卸载

卸载时有依赖包,无法卸载,可以通过选项:--nodeps忽略依赖包

卸载完后再查询一遍,保证卸载成功

语法:rpm -e package_Name

注意:package_Name需要通过-qa选项查询出来

使用案例
  1. 卸载lrzsz软件

    [root@Demo02 rpm]# rpm -qa|grep lrzsz
    lrzsz-0.12.21-15.x86_64
    [root@Demo02 rpm]# rpm -e lrzsz-0.12.21-15.x86_64
    

查询

语法:rpm -[选项]

选项:

选项作用
-q仅查询,后面接的软件名称是否有安装
-qa列出所有的,已经安装在本机Linux系统上面的所有软件名称 !!!
-ql列出该软件所有的文件与目录所在完整文件名 !!
-qc列出该软件的所有配置文件 !
-qd列出该软件的所有说明文件
-qR列出和该软件有关的相依软件所含的文件

使用案例

  1. 查找是否安装JDK

    [root@Demo02 rpm]# rpm -qa|grep jdk
    java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
    java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64
    
  2. 查找所有系统已经安装的包,并只查看前3个

    [root@Demo02 rpm]# rpm -qa|head -n 3
    control-center-2.28.1-39.el6.x86_64
    m17n-db-punjabi-1.5.5-1.1.el6.noarch
    valgrind-3.8.1-3.2.el6.x86_64
    
  3. 查询lrzsz所包含的文件及目录

    [root@Demo02 rpm]# rpm -ql lrzsz
    /usr/bin/rb
    /usr/bin/rx
    /usr/bin/rz
    /usr/bin/sb
    /usr/bin/sx
    /usr/bin/sz
    /usr/share/locale/de/LC_MESSAGES/lrzsz.mo
    /usr/share/man/man1/rz.1.xz
    /usr/share/man/man1/sz.1.xz
    
  4. 查看lrzsz包的相关说明

    [root@Demo02 rpm]# rpm -qi lrzsz
    Name        : lrzsz                        Relocations: (not relocatable)
    Version     : 0.12.21                           Vendor: Mandriva
    Release     : 15                            Build Date: 2011年05月04日 星期三 22时25分26秒
    Install Date: 2020年01月13日 星期一 18时59分30秒      Build Host: seggie.mandriva
    Group       : Communications                Source RPM: lrzsz-0.12.21-15.src.rpm
    Size        : 188392                           License: GPL
    Signature   : DSA/SHA1, 2011年05月04日 星期三 22时27分40秒, Key ID dd684d7a26752624
    Packager    : Oden Eriksson <oeriksson@mandriva>
    URL         : http://www.ohse.de/uwe/software/lrzsz.html
    Summary     : The lrz and lsz modem communications programs
    Description :
    Lrzsz (consisting of lrz and lsz) is a cosmetically modified
    zmodem/ymodem/xmodem package built from the public-domain version of the
    rzsz package.  Lrzsz was created to provide a working GNU copylefted
    Zmodem solution for Linux systems.
    
    You should install lrzsz if you're also installing a Zmodem communications
    program that uses lrzsz.  If you're installing minicom, you need to install
    lrzsz.
    
  5. 列出iptables的配置文件

    [root@Demo02 rpm]# rpm -qc iptables
    /etc/sysconfig/iptables-config
    
  6. 查看apr需要的依赖

    [root@Demo02 rpm]# rpm -qR apr
    /sbin/ldconfig  
    /sbin/ldconfig  
    libapr-1.so.0()(64bit)  
    libc.so.6()(64bit)  
    libc.so.6(GLIBC_2.10)(64bit)  
    libc.so.6(GLIBC_2.2.5)(64bit)  
    libc.so.6(GLIBC_2.3)(64bit)  
    libc.so.6(GLIBC_2.3.2)(64bit)  
    libc.so.6(GLIBC_2.3.3)(64bit)  
    libc.so.6(GLIBC_2.3.4)(64bit)  
    libc.so.6(GLIBC_2.4)(64bit)  
    libc.so.6(GLIBC_2.9)(64bit)  
    libcrypt.so.1()(64bit)  
    libpthread.so.0()(64bit)  
    libpthread.so.0(GLIBC_2.2.5)(64bit)  
    libpthread.so.0(GLIBC_2.3.2)(64bit)  
    libpthread.so.0(GLIBC_2.4)(64bit)  
    libuuid.so.1()(64bit)  
    libuuid.so.1(UUID_1.0)(64bit)  
    rpmlib(CompressedFileNames) <= 3.0.4-1
    rpmlib(FileDigests) <= 4.6.0-1
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rtld(GNU_HASH)  
    rpmlib(PayloadIsXz) <= 5.2-1
    

升级与更新

不管有没有安装都更新

-Uvh后面接的软件如果没有安装过, 系统会直接安装,若后面接的软件安装过但版本较旧,则更新至新版

语法:rpm -Uvh <package_name>

[root@localhost soft]# rpm -Uvh jdk-8u111-linux-x64.rpm 
Preparing...  ########################################### [100%]
package jdk1.8.0_111-2000:1.8.0_111-fcs.x86_64 is already installed

只有安装的才更新

-Fvh如果后面接的软件并未安装到Linux系统上,则该软件不会被安装,只有已安装的软件才会被升级

语法:rpm -Fvh <pacakge_name>



软件管理:YUM

yum的由来,是因为rpm的缺点所导致,因为rpm无论安装还是卸载都需要解决依赖关系,并且比较繁琐,所以诞生yum的技术。

YUM安装需要全程联网,会自动下载rpm包安装,如果该包有依赖,会自动下载依赖包安装

优点和缺点

工作环境中,一般都会屏蔽系统自带的yum源,而选择权威机构的yum源。

  1. 优点:
    • 可以一键解决rpm的依赖关系。
  2. 缺点:
    • yum的所有执行操作全都都需要repo文件(YUM源)。
    • 使用yum安装软件,恶意中招几率高达90%。

YUM工作原理

  1. 客户端每次使用yum调用 install或者search的时候,都会去解析/etc/yum.repos.d/下面所有以.repo结尾的文件,这些配置文件指定了yum服务器的地址。

  2. yum需要定期去“更新”yum服务器上的rpm “清单” ,然后把“清单”下载保存到yum自己的cache里面,根据/etc/yum.conf里配置。默认是在/var/cache/yum/$basearch/$releasever下,即/var/cache/yum/x86_64/6),每次调用yum安装包的时候都会去这个cache目录下去找“清单”,根据“清单”里的rpm包描述从而来确定安装包的名字,版本号,所需要的依赖包等,如果rpm包的cache不存在,就去yum服务器下载rpm包安装。

  3. 清理yum缓存,并生成新的缓存

    [root@localhost soft]# yum clean all
    [root@localhost soft]# yum makecache
    

更换yum源

加入hadoop组件相关yum源

  1. 查看当前系统中yum支持的所有软件包中是否存在hadoop

    [root@tedu yum.repos.d]# yum list|grep hadoop
    
  2. 如果想要当前系统的yum支持hadoop软件包,需要本地/etc/yum.repos.d下创建cloudera-cdh5.repo文件

    http://archive.cloudera/cdh5/redhat/6/x86_64/cdh
    

更换阿里yum源

  1. 备份原来的官方yum源

    [root@Demo02 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak
    
  2. 获取阿里的yum源覆盖本地官方yum源

    [root@Demo02 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun/repo/Centos-6.repo
    --2020-01-13 19:36:02--  http://mirrors.aliyun/repo/Centos-6.repo
    正在解析主机 mirrors.aliyun... 150.138.98.115, 150.138.98.117, 124.239.234.245, ...
    正在连接 mirrors.aliyun|150.138.98.115|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:2523 (2.5K) [application/octet-stream]
    正在保存至: “/etc/yum.repos.d/CentOS-Base.repo”
    
    100%[==========================================>] 2,523       --.-K/s   in 0s      
    
    2020-01-13 19:36:02 (452 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])
    

安装与卸载

安装

语法:yum install package_Name

使用案例
  1. 通过yum下载lrzsz

    期间会提示y/N,输入y即可

    也可以在命令中添加-y选项,默认全部是y

    • yum -y install lrzsz
    [root@Demo02 yum.repos.d]# yum install lrzsz
    

卸载

语法:yum remove package_Name

使用案例
  1. 通过yum卸载lrzsz

    可以在命令中添加-y选项,默认全部是y

    [root@Demo02 yum.repos.d]# yum remove  lrzsz
    

查询

命令作用
search查询某个软件名称或者是描述的关键字
list列出目前yum所管理的所有的软件名称与版本,有点类似 rpm -qa
  1. 通过search查询tomcat

    [root@Demo02 ~]# yum search tomcat
    
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun
     * extras: mirrors.aliyun
     * updates: mirrors.aliyun
    =============================== N/S Matched: tomcat ================================
    apache-tomcat-apis.noarch : Tomcat Servlet and JSP APIs
    jakarta-commons-collections-tomcat5.noarch : Jakarta Commons Collection dependency
                                               : for Tomcat5
    jakarta-commons-dbcp-tomcat5.noarch : DBCP dependency for Tomcat5
    jakarta-commons-pool-tomcat5.x86_64 : Pool dependency for Tomcat5
    tomcat6-admin-webapps.noarch : The host-manager and manager web applications for
                                 : Apache Tomcat
    tomcat6-docs-webapp.noarch : The docs web application for Apache Tomcat
    tomcat6-javadoc.noarch : Javadoc generated documentation for Apache Tomcat
    tomcat6-jsp-2.1-api.noarch : Apache Tomcat JSP API implementation classes
    tomcat6-lib.noarch : Libraries needed to run the Tomcat Web container
    tomcat6-servlet-2.5-api.noarch : Apache Tomcat Servlet API implementation classes
    tomcat6-webapps.noarch : The ROOT and examples web applications for Apache Tomcat
    tomcatjss.noarch : JSSE implementation using JSS for Tomcat
    tomcat6.noarch : Apache Servlet/JSP Engine, RI for Servlet 2.5/JSP 2.1 API
    tomcat6-el-2.1-api.noarch : Expression Language v1.0 API
    
      Name and summary matches only, use "search all" for everything.
    
  2. 通过list查询tomcat

    [root@Demo02 ~]# yum list|grep tomcat
    
    apache-tomcat-apis.noarch                  0.1-1.el6                     base   
    jakarta-commons-collections-tomcat5.noarch 3.2.1-3.5.el6_7               base   
    jakarta-commons-dbcp-tomcat5.noarch        1.2.1-13.9.el6                base   
    jakarta-commons-pool-tomcat5.x86_64        1.3-12.7.el6                  base   
    tomcat6.noarch                             6.0.24-111.el6_9              base   
    tomcat6-admin-webapps.noarch               6.0.24-111.el6_9              base   
    tomcat6-docs-webapp.noarch                 6.0.24-111.el6_9              base   
    tomcat6-el-2.1-api.noarch                  6.0.24-111.el6_9              base   
    tomcat6-javadoc.noarch                     6.0.24-111.el6_9              base   
    tomcat6-jsp-2.1-api.noarch                 6.0.24-111.el6_9              base   
    tomcat6-lib.noarch                         6.0.24-111.el6_9              base   
    tomcat6-servlet-2.5-api.noarch             6.0.24-111.el6_9              base   
    tomcat6-webapps.noarch                     6.0.24-111.el6_9              base   
    tomcatjss.noarch                           2.1.0-4.el6                   base  
    

更新

语法:yum update package_Name

yum安装、卸载、更新的过程中出现的y/N,可以通过在命令的结尾出 -y,表示全部过执行yes操作。



通过RPM安装MySQL

  1. 下载MySQL安装包

  2. 确认当前虚拟机之前是否有安装过mysql

    查询有mysql相关的东西,需要将其删除

    [root@Demo02 rpm]# rpm -qa|grep mysql
    mysql-libs-5.1.71-1.el6.x86_64
    
  3. 删除mysql

    直接卸载会失败,因为有依赖包,可以通过选项:--nodeps忽略依赖包

    卸载完后再查询一遍,保证卸载成功

    [root@Demo02 rpm]# rpm -ev --nodeps mysql-libs-5.1.71-1.el6.x86_64
    
    [root@Demo02 rpm]# rpm -qa|grep mysql
    [root@Demo02 rpm]# 
    
  4. 新增mysql用户组,并创建mysql用户

    添加用户时,通过选项-r创建一个系统账户

    [root@Demo02 rpm]# groupadd mysql
    [root@Demo02 rpm]# useradd -r -g mysql mysql
    
    [root@Demo02 rpm]# id mysql
    uid=496(mysql) gid=501(mysql)=501(mysql)
    
  5. 安装mysql server rpm包和client包

    新安装service包,在安装client包

    [root@Demo02 rpm]# rpm -ivh MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm
    warning: MySQL-server-5.6.29-1.linux_glibc2.5.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    Preparing...         ########################################### [100%]
       1:MySQL-server    ########################################### [100%]
       ......
       
       
    [root@Demo02 rpm]# rpm -ivh MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm
    warning: MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
    Preparing...         ########################################### [100%]
       1:MySQL-client    ########################################### [100%]
    
  6. 安装后,mysql文件所在的目录

    目录作用
    /usr/bin客户端程序与脚本
    /usr/sbin服务器启动脚本
    /var/lib/mysql日志文件、数据库
    /usr/share/infoInfo格式的MySQL手册
    /usr/share/manUnix手册
    /usr/include/mysql标头文件
    /usr/lib/mysql函数库
    /usr/share/mysql包括错误信息的其他支持文件
    文件的字符集
    示例配置文件
    /usr/share/sql-bench标准程序
  7. 修改myf,默认在/usr/myf,删除[mysqld],并添加如下内容:

    [client]
    default-character-set=utf8
    [mysql] 
    default-character-set=utf8
    [mysqld]
    character_set_server=utf8
    
  8. 将mysqld加入系统服务,并随机启动

    /etc/init.d 是linux的一个特殊目录,放在这个目录的命令会随linux开机而启动。

    将mysql中的mysql.service拷贝到/etc/init.d目录下,并重命名为mysqld

    [root@Demo02 ~]# cp /usr/share/mysql/mysql.server /etc/init.d/mysqld
    
  9. 启动mysqld,执行:service mysqld start

    出现如下结果,说明MySQL安装成功、MySQL服务启动成功

    [root@Demo02 mysql]# service mysql start
    Starting MySQL..                   [确定]
    
  10. 查看初始生成的密码:/root/.mysql_secret 。这个密码随机生成的

  11. 修改初始密码

    将root用户的密码设置为root:

    • 此处提示输入密码,把随机生产的密码拷贝过来即可
    • 下面出现警告,不用管
    [root@Demo02 mysql]# mysqladmin -u root -p password root
    Enter password: 
    Warning: Using a password on the command line interface can be insecure.
    
  12. 进入mysql数据库

    通过修改后的密码即可进入MySQL

    [root@Demo02 mysql]# mysqladmin -u root -p password root
    Enter password: 
    Warning: Using a password on the command line interface can be insecure.
    [root@Demo02 mysql]# mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.6.29 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    

远程访问服务器数据库

  1. 通过IP地址+用户名+密码即可访问
  2. 如果连接不上,可能因为服务器MySQL没有开启远程访问,需要开启即可
    • 在装有MySQL的机器上登录MySQL mysql -u root -p密码
    • 执行use mysql;
    • 执行update user set host = '%' where user = 'root';这一句执行完可能会报错,不用管它。
    • 执行FLUSH PRIVILEGES; (刷新MySQL的权限相关表)


通过YUM安装Tomcat

需要连入网络才能下载

  1. 查询可以安装的Tomcat安装包

    [root@Demo02 ~]# yum search tomcat
    
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.aliyun
     * extras: mirrors.aliyun
     * updates: mirrors.aliyun
    =============================== N/S Matched: tomcat ================================
    apache-tomcat-apis.noarch : Tomcat Servlet and JSP APIs
    jakarta-commons-collections-tomcat5.noarch : Jakarta Commons Collection dependency
                                               : for Tomcat5
    jakarta-commons-dbcp-tomcat5.noarch : DBCP dependency for Tomcat5
    jakarta-commons-pool-tomcat5.x86_64 : Pool dependency for Tomcat5
    tomcat6-admin-webapps.noarch : The host-manager and manager web applications for
                                 : Apache Tomcat
    tomcat6-docs-webapp.noarch : The docs web application for Apache Tomcat
    tomcat6-javadoc.noarch : Javadoc generated documentation for Apache Tomcat
    tomcat6-jsp-2.1-api.noarch : Apache Tomcat JSP API implementation classes
    tomcat6-lib.noarch : Libraries needed to run the Tomcat Web container
    tomcat6-servlet-2.5-api.noarch : Apache Tomcat Servlet API implementation classes
    tomcat6-webapps.noarch : The ROOT and examples web applications for Apache Tomcat
    tomcatjss.noarch : JSSE implementation using JSS for Tomcat
    tomcat6.noarch : Apache Servlet/JSP Engine, RI for Servlet 2.5/JSP 2.1 API
    tomcat6-el-2.1-api.noarch : Expression Language v1.0 API
    
      Name and summary matches only, use "search all" for everything.
    
  2. 找到Tomcat6-admin-webapps.noarch这个rmp包,通过rmp安装

    [root@Demo02 ~]# yum -y install tomcat6-admin-webapps.noarch
    
  3. 安装完的文件目录在/usr/share



RPM和YUM的取舍

  1. 如果安装、卸载、更新的软件是单个独立的离线安装包,那么建议使用RPM的方式进行安装、卸载、更新。
  2. 如果安装一个软件时,发现此软件有众多的依赖环境,那么首选就是yum的方式进行处理。

例如:

安装一个jdk,那么首选rpm的方式。

安装tomcat的话就可以考虑使用yum。

数据重定向

​ 数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方

通常执行一条命令的时候会有标准输出和标准错误输出

  • 标准输出是指命令执行之后,传回正确信息的输出目标

    [root@Demo02 mysql]# ll /media
    总用量 4
    dr-xr-xr-x. 7 root root 4096 1129 2013 CentOS_6.5_Final
    
  • 标准错误输出是命令执行失败后,所传回错误信息的输出目标

    [root@Demo02 mysql]# ll m
    ls: 无法访问m: 没有那个文件或目录
    

标准输入(stdin):编号为0 使用<或<<

标准输出(stdout):编号为1 使用>或>>

标准错误输出(stderr):编号为2 使用>或>>

1>:以覆盖的方法,将正确的数据输出到文件; 

1>>:以累加的方法,将正确的数据输出到文件; 

2>:以覆盖的方法,将错误输出的数据输出到文件; 

2>>:以累加的方法,将错误输出的数据输出到文件; 

标准输出案例

  1. 某一条命令执行后会有标准输出和标准错误输出,将标准输出的内容输出到文件中。

    ll /root /roo 1>fileName
    
  2. 某一条命令执行后会有标准输出和标准错误输出,将标准错误输出的内容输出到文件中。

    ll /root /roo 2> fileName
    
  3. 某一条命令执行后会有标准输出和标准错输误输出,将标准出和标准错误输出的内容输出到文件中。

    ll /root /roo > fileName 2>&1
    
  4. 还是上面的案例,只不过要求结果文件不保存

    ll /root /roo > /dev/null 2>&1
    

标准输入案例

  1. 打印文本中的行数

    wc -l < 文本

  2. 并且可以将打印出来的重导向到新的文件中

    wc -l< 文本 > count

  3. 利用标准输入编写文件

    cat >> demo.txt<< "abc"

修改主机名

  1. 通过命令修改

    格式:hostnamectl set-hostname 主机名

    $ hostnamectl set-hostname sxh
    

    修改后当前主机名并不会立马更改,需要重启后才生效,可使用hostname查看当前真实的主机名

  2. 通过配置文件修改

    直接修改/etc/hostname文件里面的参数即可,同样需要重启才生效。

    $ vi /etc/hostname
    

    注:有人反馈说使用这种方法会有一定的问题,但目前没碰到过!!!

查看当前主机名

$ hostname
 owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    ```



## 远程访问服务器数据库

1. 通过IP地址+用户名+密码即可访问
2. 如果连接不上,可能因为服务器MySQL没有开启远程访问,需要开启即可
   - 在装有MySQL的机器上登录MySQL mysql -u root -p密码 
   - 执行`use mysql;` 
   - 执行`update user set host = '%' where user = 'root';`这一句执行完可能会报错,不用管它。 
   - 执行`FLUSH PRIVILEGES;` (刷新MySQL的权限相关表)







------

------

# 通过YUM安装Tomcat

> 需要连入网络才能下载

1. 查询可以安装的Tomcat安装包

   ```shell
   [root@Demo02 ~]# yum search tomcat
   
   Loaded plugins: fastestmirror, refresh-packagekit, security
   Loading mirror speeds from cached hostfile
    * base: mirrors.aliyun
    * extras: mirrors.aliyun
    * updates: mirrors.aliyun
   =============================== N/S Matched: tomcat ================================
   apache-tomcat-apis.noarch : Tomcat Servlet and JSP APIs
   jakarta-commons-collections-tomcat5.noarch : Jakarta Commons Collection dependency
                                              : for Tomcat5
   jakarta-commons-dbcp-tomcat5.noarch : DBCP dependency for Tomcat5
   jakarta-commons-pool-tomcat5.x86_64 : Pool dependency for Tomcat5
   tomcat6-admin-webapps.noarch : The host-manager and manager web applications for
                                : Apache Tomcat
   tomcat6-docs-webapp.noarch : The docs web application for Apache Tomcat
   tomcat6-javadoc.noarch : Javadoc generated documentation for Apache Tomcat
   tomcat6-jsp-2.1-api.noarch : Apache Tomcat JSP API implementation classes
   tomcat6-lib.noarch : Libraries needed to run the Tomcat Web container
   tomcat6-servlet-2.5-api.noarch : Apache Tomcat Servlet API implementation classes
   tomcat6-webapps.noarch : The ROOT and examples web applications for Apache Tomcat
   tomcatjss.noarch : JSSE implementation using JSS for Tomcat
   tomcat6.noarch : Apache Servlet/JSP Engine, RI for Servlet 2.5/JSP 2.1 API
   tomcat6-el-2.1-api.noarch : Expression Language v1.0 API
   
     Name and summary matches only, use "search all" for everything.
  1. 找到Tomcat6-admin-webapps.noarch这个rmp包,通过rmp安装

    [root@Demo02 ~]# yum -y install tomcat6-admin-webapps.noarch
    
  2. 安装完的文件目录在/usr/share



RPM和YUM的取舍

  1. 如果安装、卸载、更新的软件是单个独立的离线安装包,那么建议使用RPM的方式进行安装、卸载、更新。
  2. 如果安装一个软件时,发现此软件有众多的依赖环境,那么首选就是yum的方式进行处理。

例如:

安装一个jdk,那么首选rpm的方式。

安装tomcat的话就可以考虑使用yum。

数据重定向

​ 数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方

通常执行一条命令的时候会有标准输出和标准错误输出

  • 标准输出是指命令执行之后,传回正确信息的输出目标

    [root@Demo02 mysql]# ll /media
    总用量 4
    dr-xr-xr-x. 7 root root 4096 1129 2013 CentOS_6.5_Final
    
  • 标准错误输出是命令执行失败后,所传回错误信息的输出目标

    [root@Demo02 mysql]# ll m
    ls: 无法访问m: 没有那个文件或目录
    

标准输入(stdin):编号为0 使用<或<<

标准输出(stdout):编号为1 使用>或>>

标准错误输出(stderr):编号为2 使用>或>>

1>:以覆盖的方法,将正确的数据输出到文件; 

1>>:以累加的方法,将正确的数据输出到文件; 

2>:以覆盖的方法,将错误输出的数据输出到文件; 

2>>:以累加的方法,将错误输出的数据输出到文件; 

标准输出案例

  1. 某一条命令执行后会有标准输出和标准错误输出,将标准输出的内容输出到文件中。

    ll /root /roo 1>fileName
    
  2. 某一条命令执行后会有标准输出和标准错误输出,将标准错误输出的内容输出到文件中。

    ll /root /roo 2> fileName
    
  3. 某一条命令执行后会有标准输出和标准错输误输出,将标准出和标准错误输出的内容输出到文件中。

    ll /root /roo > fileName 2>&1
    
  4. 还是上面的案例,只不过要求结果文件不保存

    ll /root /roo > /dev/null 2>&1
    

标准输入案例

  1. 打印文本中的行数

    wc -l < 文本

  2. 并且可以将打印出来的重导向到新的文件中

    wc -l< 文本 > count

  3. 利用标准输入编写文件

    cat >> demo.txt<< "abc"

修改主机名

  1. 通过命令修改

    格式:hostnamectl set-hostname 主机名

    $ hostnamectl set-hostname sxh
    

    修改后当前主机名并不会立马更改,需要重启后才生效,可使用hostname查看当前真实的主机名

  2. 通过配置文件修改

    直接修改/etc/hostname文件里面的参数即可,同样需要重启才生效。

    $ vi /etc/hostname
    

    注:有人反馈说使用这种方法会有一定的问题,但目前没碰到过!!!

查看当前主机名

$ hostname

本文标签: 笔记 Linux