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 | 其它挂载点 |
命令相关概念
命令提示符
-
[root@localhost ~]#
root登录,并且在家目录下
/root
-
[chenzhe@localhost ~]$
chenzhe普通用户登录,并且在家目录下
/home/chenzhe
-
总结
从上面两个命令提示符可以看的出来中括号后的符号不同,其中
#
表示超级权限(管理员/root)$
表示普通用户的权限
中括号中的内容分别是:
root|chenzhe
:登录的账户名称@localhost
:主机名~
:表示当前账户的家目录
命令格式
基本格式:命令、选项、参数。参数之间必须有空格
执行的时候,命令本身必须存在,选项和参数可有可无。
选项和参数也可以有多个存在
-
执行时,如果有多个参数,可以拼接在一起写
ls -a -l
可以写成ls -al
-
执行时,如果有多个参数,参数之间必须有空格隔开
ls /root /etc
-
执行时可以没有选项、参数的命令
ifconfig
-
执行时有参数的命令
ifup eth0
获取命令帮助
man | man命令 优点:内核自带 缺点:大部分的帮助都是英文 |
---|---|
--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)的家目录
cd /root
:切换到root目录下,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 1月 9 22:32 1
drwxr-xr-x. 116 root root 12288 1月 9 22:43 etc
-rw-r--r--. 1 root root 45537 1月 9 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 1月 9 22:32 1
drwxr-xr-x. 116 root root 12288 1月 9 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 修改谁 改成是样 谁符合条件
-
修改文件名【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
-
修改文件名 【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
命令进行切换
init 3
:切换至命令行模式init 5
:切换至图形界面init 0
:关机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
单用户模式
如果【系统出现问题/忘记了密码】,在万不得已的情况下,需要使用单用户模式进入系统,对系统就行修复或者备份
-
出现下图时,敲击回车或方向键
-
出现下图时,按字母
e
-
出现下图时,选中
kernel
,按字母e
-
出现下图时,输入一个
空格
,在输入一个1
,再按回车
-
再次出现下图时,按字母
b
,即可进入单用户模式 -
出现下图时,表示已经进入单用户模式
-
在此模式下可以进行默认运行级别的修改
[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系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
用户、用户组的关系
- 用户:一个户口本中的每一个用户
- 用户组:户口本中的所有成员组成的组
- 其他人:除用户本人(户主)和用户组(户口本中的成员)外的成员都是其他人
每一个用户都可以拥有多个用户组
每一个用户组都可以容纳多个用户
用户及UID
在Linux系统中,每一个用户默认都对应了一个UID,而这个UID可以理解是用户的身份证号。
CentOS系统中:
UID | 作用 |
---|---|
0 | root |
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}
选项:
选项 | 作用 | 解释 |
---|---|---|
-c | comment | 指定一段注释性描述 |
-d | 目录 | 指定用户主目录,如果目录不存在,则同时使用-m 选项,可以创建主目录。 |
-g | 主用户组 | 指定用户所属的主用户组。 |
-G | 附属用户组 | 指定用户所属的附加组。 |
-s | Shell文件 | 指定用户的登录Shell。有一个特殊的shell程序叫nologin ,如果某帐号使用此shell,就表示用户不允许登录,该用户通常成为伪用户。 |
-u | 用户号 | 指定用户的用户号 |
使用案例
-
创建一个普通用户,使用默认值即可。
说明:该账户被创建完之后,会有哪些信息
- 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)
-
创建一个普通用户,其家目录是在
/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 1月 10 09:31 tedu ..................
-
创建一个普通用户,执行用户的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)
-
创建一个普通用户,测试账户是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)
-
创建伪用户:
为用户不支持登录
举例:员工离职后会把离职员工的Linux账号置为为用户
[root@Demo01 tedu]# useradd -s /sbin/nologin test2 [root@Demo01 tedu]# su test2 This account is currently not available.
修改用户
语法:usermod [选项] {UserName}
选项:
选项 | 作用 | 解释 |
---|---|---|
-c | comment | 指定一段注释性描述 |
-d | 目录 | 目录 指定用户主目录,如果目录不存在,则同时使用-m选项,可以创建主目录。 |
-g | 主用户组 | 指定用户所属的用户组。 |
-G | 附属用户组 | 指定用户所属的附加组。如果想要在原有的基础上追加附加组,使用-aG 的方式。 |
-s | Shell文件 | 指定用户的登录Shell。有一个特殊的shell程序叫nologin,如果某帐号使用此shell,就表示用户不允许登录,该用户通常成为伪用户。 |
-u | 用户号 | 指定用户的用户号 |
使用案例
-
修改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)
-
修改账户的附加组为
test
、test1
[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)
-
为账户追加附加组件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)
-
将test2的伪用户状态修改为正常普通用户
[root@Demo01 tedu]# usermod -s /bin/bash test2
删除用户
语法:userdel [选项] {UserName}
选项:
选项 | 作用 |
---|---|
-r | 删除账户的同时删除该账户的家目录 |
使用案例
-
删除用户
不加参数删除,不会把该用户的同名家目录删除
[root@Demo01 home]# userdel zhangsan [root@Demo01 home]# ls demo02 test test1 test2 test3 test4 zhangsan
-
删除用户以及家目录
该命令之后之后,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 | 删除密码 | 删除密码,不能登陆系统 |
使用:
- passwd 可以不跟选项、用户名,默认是修改自己的帐号密码。
- 修改他人密码,必须具备管理员权限(并不一定非要是root账户)
- 普通账户,只能修改自己的密码。
- 管理员修改他人的密码,不需要满足密码策略。
- 普通账户修改密码时,必须满足密码安全策略。(小写+大写+数字+特殊符号)
- 管理员修改他人密码:
passwd {UserName}
- 管理员修改自己的密码
passwd
使用案例
-
锁定zhangsan账户
在普通账号下,无法切换其他的普通账号,即使密码输入正确也切换不了
[root@Demo01 home]# passwd -l zhangsan 锁定用户 test1 的密码 。 passwd: 操作成功 [root@Demo01 home]# su test2 [test2@Demo01 home]$ su zhangsan 密码: su: 密码不正确
-
解锁zhangsan账户
可以在普通账户下切换其他普通账户
[root@Demo01 home]# passwd -u zhangsan 解锁用户 test1 的密码 。 passwd: 操作成功 [root@Demo01 home]# su test2 [test2@Demo01 home]$ su zhangsan 密码: [test1@Demo01 home]$
-
删除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
下
-
切换到zhangsan账户,目录不变
该命令执行过后,切换到
zhangsan
账户,但是路径依然停留在/root
目录下[root@Demo01 ~]# su zhangsan [test4@Demo01 root]$ pwd /root [test4@Demo01 root]$
-
切换到zhangsan账户,目录同时也变
该命令执行过后,切换到
zhangsan
账户,同时会去到zhangsan
账户的家目录下。:/home/test4
[root@Demo01 ~]# su - zhangsan [test4@Demo01 ~]$ pwd /home/test4 [test4@Demo01 ~]$
用户组管理
创建用户组
系统底层会将两个GID相同用户组识别为同一个用户组,这样做的目的是让两个用户组的权限相同。
识别规则:后者遵循前者。
语法:groupadd [选项] {groupName}
选项:
选项 | 作用 |
---|---|
-g | 指定新用户组的GID |
-o | 通常与-g 同时使用,使新用户组可以与系统已有的组ID相同。 |
使用案例
-
新建一个用户组
此命令向系统中增加了一个新组group1,新组的组标识号,在当前已有的最大组标识号的基础上加1
[root@Demo01 /]# groupadd group1
-
新建一个用户组group2,同时指定新组的组标识号是101。
[root@Demo01 /]# groupadd -g 101 group2
-
将用户组添加为tom账户的附加组
[root@Demo01 /]# usermod -aG group1 tom
-
创建一个与上面案例GID相同的用户组
[root@Demo01 /]# groupadd -g 1000 -o group2
修改用户组
语法:groupmod [选项] {groupName}
选项:
选项 | 作用 |
---|---|
-g | 指定新用户组的GID |
-o | 通常与-g 同时使用,使新用户组可以与系统已有的组ID系统。 |
-n | 用来修改组名称 group -n newGroupName oldGroupName |
使用案例
-
将组group2的组标识号修改为102。
[root@Demo01 /]# groupmod -g 102 group2
-
新建一个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 1月 10 14:36 caolaoshi
--wxrw---x. 1 root root 45537 1月 10 11:15 install.log
权限的种类
说明:Linux系统中,不管是什么系统,权限的标识符号的位置是不会发生任何的改变,也就是说:
- 第1个永远是文件类型
- 第2-4(第一组)永远是读、写、执行,用户的权限
- 第5-7(第二组)永远是读、写、执行,用户组的权限
- 第8-10(第三组)永远是读、写、执行,其他人的权限。
如果某个文件权限标识为
----------
,那么则说明此文件不允许任何的读取、写入、执行
-
每三个权限成为一组,每组中分别有三个权限:
字符 权限 数字 r 读 4 w 写 2 x 执行 1 -
除了第一个字母不参与权限的表示,其他的都为权限标识符。
分组 作用范围 解释 第一组 用户 user 第二组 用户组 group 第三组 其他人 other
修改文件/夹的权限
语法:chmod 权限符 [选项] 文件/夹名字
选项:-R
:递归处理
使用案例
big1 当前文件夹的权限是
drwx------
chmod在修改文件权限的时候,哪个便捷用哪个方法。
比如:
- 如果要是给三组增加执行权限的时候,
+x
比数字计算要快。字符权限就比数字要便捷(不需要计算)- 如果是为每组增加不同权限的时候,用数字比较便捷(书写便捷)。
-
将此文件的权限修改为
----------
[root@Demo01 home]# chmod 000 big1
-
为此文件,每组都只有一个读的权限
或者
chmod +r big1
[root@Demo01 home]# chmod 444 big1
-
为此文件的用户增加一个
rw-
,组增加一个r-x
,其他人---
[root@Demo01 home]# chmod u+rw,g+rx big1
修改文件/夹的所有者(属主)和属组
-
chown root /u
:将 /u 的属主(主用户)更改为"root"。 -
chown :staff /u
:将/u的属组更改为staffdrwxr-xr-x. 2 test root 4096 1月 10 20:12 big2 [root@Demo01 home]# chown root:A big2 drwxr-xr-x. 2 root A 4096 1月 10 20:12 big2
-
chown root:staff /u
:和上面类似,但同时也将其属组更改为"staff"。
查看文件内容
语法:cat filename
[root@Demo01 home]# cat uset.txt
物理权限
修饰某个【文件/夹】不允许被修改。注意:不能给
/
,/dev
,/var
加保护即便是root权限也不一定所有的文件都可以删
语法:chattr [选项] file/dir
选项:
选项 | 作用 |
---|---|
i | 表示不能以任何方式进行文件/夹的修改,增加,删除 |
a | 表示文件/夹只能追加,不能修改,删除 >>( 追加), > (覆盖) |
+ <属性> | 表示开启某文件/夹的权限 |
- <属性> | 表示关闭某文件/夹的权限 |
R | 表示递归处理。 |
使用案例
-
使文件不允许修改、删除、增加
[root@Demo01 home]# touch big1902 [root@Demo01 home]# chattr +i big1902
-
使文件只允许追加内容。不允许删除和修改
[root@Demo01 home]# touch big1903 [root@Demo01 home]# chattr +i big1903
-
快捷方式向文件中追加内容
>>
表示追加>
表示覆盖[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会记录用户执行过的每一条命令,便于查阅服务起出事之前的状态。
-
好处:
- 使用自己配置好的用户环境
- 不需要知道root密码,保证root的密码安全
- 可以限制用户执行有限的root权限
- sudo执行的每条命令都会被记录,便于日后的日志审计,例如用户执行过高危操作命令。
- 在
/etc/sudoers
文件中配置Defaults logfile =/home/log.txt
即可(logfile
文件自定义)
- 在
-
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命令
权限练习
练习一
现在大数据部门有一个加密狗文件。大数据部门的人都可以去连接它给大家上课,但是别的部门不行
-
在
/home
目录下touch加密狗文件(Usbkey)[root@Demo01 home]# touch UsbKey
-
创建大数据组(Bigdata)
[root@Demo01 home]# groupadd bigdata
-
修改加密狗文件的所有者为root和大数据组
[root@Demo01 home]# chown root:bigdata UsbKey
-
修改加密狗文件的权限为:root用户rwx,大数据组rwx,其他用户没有权限
[root@Demo01 home]# chmod 770 UsbKey
-
编辑加密狗文件实现一些功能(写一句模拟一下就行)
-
创建大数据组的成员,并将其加入到大数据组
[root@Demo01 home]# useradd -g bigdata caolaoshi [root@Demo01 home]# useradd -g bigdata piaolaoshi [root@Demo01 home]# useradd xiaolaoban
-
通过不同权限的人,来观察加密狗的使用情况
[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组的可读可执行不可写,其他人没有权限。
-
创建用户家目录
[root@Demo01 ~]# mkdir -p /big1910/A [root@Demo01 ~]# mkdir /big1910/B
-
创建用户并指定家目录
[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
-
创建用户组
[root@Demo01 ~]# groupadd -g 1000 A [root@Demo01 ~]# groupadd -g 1001 B
-
将用户分别加入对应的组内
[root@Demo01 ~]# usermod -g A zhangsan [root@Demo01 ~]# usermod -g A lisi [root@Demo01 ~]# usermod -g B wangwu [root@Demo01 ~]# usermod -g B zhaoliu
-
修改文件夹权限,让对其他人无权限
[root@Demo01 ~]# cd /big1910 [root@Demo01 ~]# chmod 750 A [root@Demo01 ~]# chmod 750 B
-
修改文件夹权限,让对应的组文件夹附属组为对应的
group
[root@Demo01 ~]# chown root:A A [root@Demo01 ~]# chown root:B B
-
修改book对应的权限
[root@Demo01 ~]# chmod 770 book1 [root@Demo01 ~]# chmod 750 book2
磁盘
磁盘,它是由一个个盘片组成的,从盘片的结构上来看 图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线 ,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称为一个扇区(图中绿色部分)。扇区是磁盘的最小组成单 元,常是512字节。
- 磁盘分区:指定分割区域起始与结束磁柱
- 磁盘存取的区域 例如A磁柱到B磁柱之间的区块,磁盘在此分割区域内操作系统能够知道它可以在指定区块进行文件读,写,查询等操作
- 但是需要注意使用硬盘之前需要格式化!
- 因为每种操作系统所设定的文件属性/权限,以及存放数据的格式 有所不同
Ext2/Ext3/Ext4区别
- Ext*、NTFS和FAT32这三个都是文件系统格式
- Linux kernel自2.6.28开始正式支持新的文件系统Ext4
- Ext4是Ext3的改进版,修改了Ext3中部分重要的数据结构
- Ext3对Ext2,只是增加了一个日志功能
- 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空间里面。
- 默认值是60。
修改swap参数
-
临时修改
[root@localhost ~]# sysctl vm.swappiness=10 [root@localhost ~]# cat /proc/sys/vm/swappiness 10
-
永久修改
在
/etc/sysctl.conf
文件里添加如下参数:vm.swappiness=10
问题:为什么要挂载?
因为文件系统并不能够直接使用。
- Windows的文件系统需要盘符来表示
- Linux的文件系统需要目录作为入口。
分区的格式就是文件系统。
挂载
添加的设备都会默认在
/dev
下
语法:mount 文件系统 目录(挂载点)
挂载光盘镜像文件
-
创建目录
cdrom
,并不是非要这个名称,是因为想做到见名知意。将该目录作为接下来的挂载点[root@localhost ~]# mkdir /home/cdrom
-
进行挂载
[root@localhost ~]# mount /dev/cdrom /home/cdrom
挂载U盘
需要注意:
- U盘的格式如果为
NTFS
,那么需要安装一个插件之后才能够进行挂载,否则无法识别。
yum install ntfs-3g
- 如果是
fat32
的,那么可以直接进行挂载。
-
创建目录
udisk
并不是非要这个名称,是因为想做到见名知意。将该目录作为接下来的挂载点[root@localhost ~]# mkdir /home/udisk
-
进行挂载
为防止U盘中有中文名称的文件出现乱码,挂载时可以指定编码格式
-o iocharset=utf8
[root@localhost ~]# lsblk [root@localhost ~]# mount -o iocharset=utf8 /dev/sdb1 /home/udisk
取消挂载
语法:umount 挂载点
-
查看当前文件系统的状态
[root@localhost ~]# df -h
-
取消挂载
[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四层的关系
- OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型
- OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
- OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。
- TCP:transmission control protocol 传输控制协议(打电话)
- UDP:user data protocol 用户数据包协议(相当于写信)
网络设备
交换机
由来,早期的时候并没有这个设备,当时使用HUB设备进行数据的发送,但是HUB发送数据的特性广播,这样的方式,数据不安全,增加网路带宽的消耗。
交换的工作原理:通电之后,在自己的内部建立一张设备Mac地址表。这张表中记录了设备的Mac地址或其他的信息。
交换机可以组建局域网(内网)。
路由器
实现网络代理的功能,在公共网络上,上网的节点是路由器,并不是电脑。
将局域网中的数据转发至公共网络(外网)。
介绍:
- 早期上网的方式是:通过电话线插入电脑上,进行拨号上网。此方式的缺点:1、电话一直占线。2、有可能电话进来,掉线。
- 通信公司发现这样的缺点之后,出现了一个新的设备,这个设备的功能可以将电话线路一分为二。分别实现电话、上网的功能。调制解调器(猫)。
- 随着社会的发展,发现这种方式又不能满足日常的上网需求。一个猫只有一个接口,无法满足多台设备上网的需求的。
- 将多台设备接入交换,交换机的其中一个接口连接路由器。
- 连接顺序:
- 猫上出的网线接入路由器的WAN口
- 路由器的LAN口接入交换机。
- 无线设备。大约在2008年,家用无线路由器开始普及。
无线路由器是将交换机和有线路由器和在一起产品。
网络地址
配置网络时需要配置的信息
配置信息 | 介绍 |
---|---|
IP地址 | PC在网络中的通信地址。 |
子网掩码 | 子网掩码有且只有这一个功能,用于划分网络,将一个IP地址中的网络位和主机位进行划分。是一个32位的地址。也有:32位/24位/16位/8位 |
网关 | 网络的关口,用于数据转发,通常理解为路由器的地址,大部分硬件厂家的出厂默认地址是,192.168.0.1 | 192.168.1.1 |
DNS | 用于解析域名的作用,Domain Name System 域名解析系统。 |
IP地址
IP地址 = 网络位+主机位
- 相同的网络,网络位肯定相同,主机位不一样
- 不同的网络,网络位肯定不同,主机位可能一样
比如:电话号码
网络位 | 主机位 | |
---|---|---|
北京 | 010 | 88889999 |
上海 | 021 | 12345678 |
021 | 88889999 |
网关
一般设置为:
- 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用来表示网段
图解:
网络传输过程
- 本地主机通过IP地址找到自己的网关,网关外可能还有网关,对数据进行包装(表头,校验等信息)
- 通过外网找到信息中的目标地址,再由目标地址网关解析信息,最后目标主机收到消息
图解:
DNS
静态
优点:可以使我们PC/服务器有一个更快的解析速度。维护方式是手动配置服务器上hosts文件。
缺点:hosts一般都是为本机系统所有,维护一台服务器还好说。如果是上千台集群,那么维护的工作很困难
动态
优点:只需要给服务器指明DNS服务器地址即可,无需手动配置hosts文件
缺点:有一定响应时间,(延迟)。若DNS服务器宕机,那么我们就立即失去访问域名的能力
桥接
- 优点:同一个局域网中的任意一台物理机想要访问虚拟机时,只要拥有账户和密码,就可以直接进行通信。
- 缺点:如果宿主主机没有连接网络,那么虚拟机也就不存在与该真实网络环境中,换句话,虚拟机使用桥接模式的时候,它的网络依赖于宿主的网络环境。
NAT
- 优点:可以无视物理机(宿主主机)网络环境。即便是物理机没有网络,也不影响本机和虚拟机进行通信,也不影响本机上的其他虚拟机之间互相通信。因为虚拟机真正通信网卡是VMNet8提供(网络环境)
- 缺点:其他物理机想要访问NAT模式下的虚拟机时,比较麻烦。
通过主机名查看IP
返回的结果中有该域名的IP地址
[root@Demo01 ~]# host www.baidu
远程拷贝
本机拷贝到远程服务器
要求:必须知道对方的账户和密码,且具备相应的权限。
语法:
scp [-r] [path]/fie|dir {UserName}@Host_IP:/[path]
-r
:该选项用于传输文件夹的时候使用。
-
案例:将本机的文件拷贝到远程服务器上
注意:如果是第一次访问该服务器,那么会询问,是否要继续连接。每次访问都需要输入远程服务器的密码。
将本机下
/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]
-
案例:将远程服务器中/
home
目录下的install.log
拷贝到本地的root
目录下[root@Demo01 ~]# scp root@192.168.72.129:/home/install.log /root/
通过主机名进行远程拷贝
-
修改
/etc/sysconfig/network
将HOSTNAME
修改为主机名 注:这个修改是永久修改主机名需要重启才能生效NETWORKING=yes HOSTNAME=Demo01
-
临时修改:
hostname 主机名
-
想让服务器直到其他服务器的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
回车之后,如果首次访问,会提示是否继续连接。接下来要求输入远程服务器的密码。
-
案例:登陆远程主机:192.168.72.129
该主机名:Demo02
[root@Demo01 ~]# ssh root@192.168.72.128
-
案例:退出登陆
本机名:Demo01
远程主机名:Demo02
[root@Demo02 ~]# exit [root@Demo01 ~]#
Linux系统下,ssh服务的默认端口是22。如果在访问是没有指明端口,默认按照22端口访问,如果远程服务器,提供的端口不是22,那么就需要在访问的时候指定远程服务器的端口:
语法:
ssh [-p port] {UserName}@Host_IP
SSH免密登陆
Linux免密登录使用的RSA算法。
RSA本身是一种非对称加密算法,会生成公钥和私钥。
- 公钥:使用公钥对内容进行加密
- 私钥:持有私钥的PC才能正常访问公钥加密的内容
只要持有私钥就能访问公钥加密的内容,这种事情本身就是存在风险的。一旦私钥丢失,那么服务器上的数据就存在被窃取的风险。但是Linux生成公钥和私钥的时候支持对私钥证书文件添加密码。
证书的生成
-
语法:
ssh-keygen
-
回车后会有提示:
- 第一次提示:你的证书存放的位置
- 第二次提示:对私钥加密,输入密码。如果不需要输入密码,直接回车
- 第三次提示:私钥证书的密码确认操作
-
证书文件会存放在当前账户的家目录下的隐藏目录:
.ssh
目录下,在该目录下会有一下4个文件文件 作用 解释 id_rsa 私钥 执行证书生成命令才会有 id_rsa.pub 公钥 执行证书生成命令才会有 known_hosts 曾经访问过的服务器信息 每次ssh、scp、ssh-copy-id到远程服务器时就会保存记录到此文件中,以后再此访问该服务器时就不会再提示那一句"你确定要继续访问吗 yes/NO?" authorized_keys 记录来访服务器的公钥文件内容 该文件会记录访问本机的远程服务器的公钥证书文件内容,只有对应的私钥才能进行验证。
证书的注册
将本机的公钥证书文件注册到远程服务器上,此后就可以使用私钥证书进行登录。
-
语法:
ssh-copy-id {UserName}@Host_IP
执行此命令,会要求输入远程服务器的对应账号和密码
这一步就是向远程服务器注册本机的
id_rsa.pub
文件(公钥)内容。此后只有本机上与公钥文件共同生成的私钥才能够进行免密登录。(远程主机的公钥名为:authorized_keys
) -
图解:
证书使用的场景
-
场景一:只是单纯的使用证书来登录服务器。
使用证书的登录方式可以避免密码遗忘、泄漏的问题。
使用证书登录服务器的方式也是服务器加固(服务器安全相关问题)的方式。
服务器可以设置不允许使用密码进行远程登录。只允许证书的方式登录。
证书本身支持加密,就算证书丢失,再不知道证书密码的情况,证书属于无效文件。
-
场景二:集群中使用证书进行免密登录。
因为但凡设计到集群的时候,一般都不会是小数目的服务器数量。众多的服务器之间进行互相访问,频繁的输入密码的事情将会成为开发工程师噩梦。
所以,使用证书管理集群的时候,可以免除集群中的服务器互相访问时工程师手工输入密码的问题。
双向免密登陆
-
方法一:
- 在本机生成密钥和公钥,将公钥注册到包括自己的所有远程服务器中
- 将私钥注册到其他远程服务器中
-
方法二:
- 在每一台服务器中生成公钥和私钥,并且把公钥注册到其他每一台服务器中
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下,知道程序要运行,首先就是将磁盘中相应的可执行文件加载到内存中,那么我们怎么知道他在内存中哪呢?这个时候就需要我们通过一个叫做进程标识符的东西找到它。类似于我们自己的身份证
进程分为临时进程和持久进程
- 临时进程:执行完命令,自动结束
- 持久进程/守护进程:程序执行后,需要手动结束
程序被加载为进程的过程
- 用户执行程序
- 程序加载到内存中
- 给程序一个临时的PID
- 查看执行的全限,如果用户没有执行全限,那么拒绝操作;如果有,开始加载程序执行的相关资料(内存指针开始扫描相应的数据或者代码)
- 确认临时的PID
查看进程
在Linux系统中,不像windows那样方便,可以通过快捷键调出图形化的任务管理器来管理进程。
静态查询
PS
将某个时间点的程序运作情况截取下来
常用组合选项
-aux
选项 作用 a 关联的所有 process,通常与x一起使用,列出完整信息。 x 后台进程 u 有效使用者的相关联的进程 ajxf 可以让ps的结果以树状的格式显示出来。 举例:当我们新开一个通道编辑一个文件的时候,我们通过
ps -aux
可以查看到
查询指定进程
ps -aux | grep sshd
-
ps查询结果各项解释
结果 解释 USER 用户 PID 进程ID %CPU cpu占用率 %MEM 内存使用率 VSS 虚拟内存使用量 RSS 物理内存使用量 TTY tty1-tty6 是本机上面的登入者程序。 pts/0 等等的,则表示为由网络连接进主机的程序。 如果显示?则表示与终端机无关。 STAT 进程的状态 START 进程启动的时间 TIME 累计消耗CPU的时间 COMMAND 表示哪个命令/程序运行的该进程 -
状态标识
状态 解释 R 正在运行,或在队列中的进程 S 处于休眠状态 l 多进程 Z 僵尸进程 T 停止或者被追踪 < 高优先级 N 低优先级 s 包含子进程 + 位于后台的进程组 -
僵尸进程
由于该进程已经执行完毕,但是父进程没有终止或其他原因导致该进程并没有真正的结束,所形成的进程称之为僵尸进程。
此进程对服务器的危害在于它会持续的消耗服务器资源,消耗量会越来越大。最终导致其他的进程无资源可用,服务器崩溃。
pstree
语法:
pstree [选项]
选项:
选项 作用 A 各程序之间的连接以ASCII字符来连接 U 各程序之间的连接以UTF-8的字符来连接 u 列出每个process的所属账号名称 p 同时列出每个程序的进程的ID
-
举例
[root@Demo01 ~]# pstree -up
动态查询:top
动态查询系统的进程状态。默认是3秒一更新。
选项:
选项 作用 -d 跟时间,可以修改top默认更新(刷新)的时间 -b : 以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案; -n Number: 与 -b 搭配,意义是需要进行几次 top 的输出结果; -p : 指定某些个 PID 来进行观察监测而已;
使用案例
-
每秒刷新一次top
[root@Demo01 ~]# top -d 1
-
每2秒刷新一次top,以批次输出2次
[root@Demo01 ~]# -d 2 -n 2
-
每秒刷新一次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),如果进程为非守护进程,默认为终止进程; !! |
案例
-
结束所有httpd的进程(如果没有可以先安装一下:
yum install -y httpd
)[root@Demo01 ~]# killall -9 httpd
-
结束所有Java的进程
[root@Demo01 ~]# killall -9 java
系统资源监控(自带)
内存监控:free
可能监控不准确
在真实的公司中有第三方,甚至公司自己开发的监控工具。不属于我们负责
选项:
选项 | 作用 |
---|---|
-b | bytes |
-k | kb |
-m | mb |
-g | gb |
-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 等; -p CPU 的类型,与 -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)、程序名 |
-
列出当前系统中正在监听的TCP服务
[root@Demo01 ~]# netstat -lt
-
列出当前系统中正在监听的TCP服务,并且显示进程ID
[root@Demo01 ~]# netstat -ltp
-
列出当前系统中正在监听的TCP服务,并且显示进程ID、端口号。
[root@Demo01 ~]# netstat -lntp
-
列出当前系统中已连接的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
查询结果介绍
-
procs(进程字段 )
这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)
r : 等待运行的进程数量; cup处理不过来 b: 不可被唤醒的进程数量 -
memory (内存字段)
swpd: 虚拟内存被使用的容量; free: 未被使用的内存容量; buff/cache: 用于缓冲的内存; -
swap(交换分区字段) (重点记忆下si和so)
如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差
si: 每秒从交换分区写到内存的数据量大小,由磁盘->内存; so: 每秒写入交换分区的内存数据量大小,由内存->磁盘。 -
io(磁盘读写字段)
如果这部份的值越高,代表系统的I/O非常忙碌
bi: 从块设备读入数据的总量(读磁盘)(每秒kb); bo: 从块设备写入数据的总量(写磁盘)(每秒kb) 。 -
system(系统字段 )
这两个数值越大,代表系统与接口设备的通信非常频繁
in: 每秒被中断的进程次数; 发生在cup争抢的过程中 cs: 每秒钟进行的事件切换次数。发生在cup争抢的过程中 -
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
:不加编号默认会把带有+
号的任务调至前台(最后放置后台的任务就会带有+
号)
+
:表示最近一次放置后台的任务
-
查看所有后台任务
[root@Demo1 ~]# jobs
-
将2号任务调至前台
[root@Demo1 ~]# fg 2
将后台任务修改为运行状态
语法:
bg jobnumber
:把指定编号的暂停的任务修改为运行状态(交互式的应用无法修改为允许状态)bg
:不加编号默认会把带有+
号的暂停的任务修改为允许状态
-
查看所有后台任务
[root@Demo1 ~]# jobs
-
修改2号任务的后台运行状态
[root@Demo1 ~]# bg 2
修改失败,因为2号任务是文本编辑,是交互式任务,无法将其后台任务修改为运行状态
-
修改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)表示向上翻。
压缩和打包概念
-
压缩
指通过某些算法,将文件尺寸进行相应的缩小,同时不损失文件的内容。
-
打包
指将多个文件(或目录)合并成一个文件,方便传递或部署。
在Linux系统中,文件的后缀名不重要,但是针对于压缩文件的后缀名是必须的,因为可以让其他的程序员根据文件的后缀名使用对应的算法进行解压。
-
Linux常见的压缩文件后准名
后缀 解释 *.gz gzip程序压缩的文件 *.bz2 bzip2 程序压缩的文件 *.tar tar命令打包的数据,并没有压缩过 *.tar.gz tar程序打包的文件,并且经过 gzip 的压缩 *.tar.bz2 tar程序打包的文件,并且经过 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
对其操作
-
压缩该文件,将压缩的数据输出到标准输出
不会生成新的压缩文件,压缩完后的数据直接输出到了屏幕上
[root@Demo02 gzip]# gzip -c install.log
-
压缩完显示压缩比等信息,此时源文件不在了,想保留源文件,需要使用重导向技术
[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 1月 13 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 1月 13 17:24 install.log -rw-r--r--. 1 root root 11345 1月 13 17:28 install.log.gz
-
解压
[root@Demo02 gzip]# gzip -d install.log.gz
-
检查压缩后的文件是否有误
什么也没有输出就是没有错
[root@Demo02 gzip]# gzip -t install.log.gz [root@Demo02 gzip]#
-
提高压缩比(如果文件本身比较小可能体现不出来)
使用默认的压缩,当时的压缩比为
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
对其操作
-
将其通过bzip2压缩
[root@Demo02 gzip]# bzip2 -c install.log >> install.log.bz2
zip
压缩
-
压缩当前目录下所有文件
zip -r xxx.zip ./*
-
将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件
zip -r myfile.zip ./*
解压
查看压缩文件中的内容
- cat:可以用来查看文本文件中的内容
- zcat:可以用来查看gzip算法压缩的压缩文件内容
- 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
-
使用
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 1月 13 17:37 install.log -rw-r--r--. 1 root root 11449 1月 13 17:56 install.log.tar.gz
-
使用
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 1月 13 17:37 install.log -rw-r--r--. 1 root root 9721 1月 13 17:58 install.log.tar.bz2
-
压缩指定目录下的文件,并输出到指定目录下
后面跟的路径/文件名,会把该路径全部打包
所以如果想要打包某个文件,最好进入该文件的路径下,第一个路径为压缩后的输出路径
[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 1月 13 18:10 install.log.tar.gz
解压
解压常用选项:
- 一般都是gzip格式的压缩包:
-zxvf
-
将一个压缩包文件解压到当前目录下
[root@Demo02 gzip]# tar -zxvf install.log.tar.gz install.log
-
将一个压缩文件解压到指定目录下
第一个参数:要解压的文件
第二个参数:通过
-C
指定输出路径[root@Demo02 gzip]# tar -zxvf install.log.tar.gz -C ../tar install.log [root@Demo02 gzip]# ls ../tar install.log
-
只解压包中的某个文件
前提:把
/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 1月 13 18:18 etc [root@Demo02 gzip]# ls etc shells
-
配置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 3月 15 2017 jdk1.8.0_131 -rw-r--r--. 1 root root 185540433 1月 13 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”包管理系统==。
优点和缺点
- 优点:
- 自带编译后的文件,免除用户对软件编译的过程
- 可以自动检测文件系统(硬盘)的容量、系统的版本。避免软件被错误的安装。
- 自带软件的版本信息、帮助文档、用途说明等信息。
- 缺点:
- 无论安装还是卸载,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
中如果安装的软件有依赖包,需要先安装依赖包,否则会安装失败
-
单个安装
通过rpm安装JDK,会自动配置环境变量
[root@Demo02 rpm]# rpm -ivh jdk-8u111-linux-x64.rpm
-
多个安装
安装多个,中间用空格隔开即可
[root@Demo02 rpm]# rpm -ivh jdk-8u111-linux-x64.rpm epel-release-6-8.noarch.rpm
-
安装网络上的RPM包
[root@Demo02 rpm]# rpm -ivh "https://地址/package.rpm"
卸载
卸载时有依赖包,无法卸载,可以通过选项:
--nodeps
忽略依赖包卸载完后再查询一遍,保证卸载成功
语法:rpm -e package_Name
注意:package_Name
需要通过-qa
选项查询出来
使用案例
-
卸载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 | 列出和该软件有关的相依软件所含的文件 |
使用案例
-
查找是否安装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
-
查找所有系统已经安装的包,并只查看前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
-
查询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
-
查看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.
-
列出iptables的配置文件
[root@Demo02 rpm]# rpm -qc iptables /etc/sysconfig/iptables-config
-
查看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源。
- 优点:
- 可以一键解决rpm的依赖关系。
- 缺点:
- yum的所有执行操作全都都需要repo文件(YUM源)。
- 使用yum安装软件,恶意中招几率高达90%。
YUM工作原理
-
客户端每次使用yum调用 install或者search的时候,都会去解析/etc/yum.repos.d/下面所有以.repo结尾的文件,这些配置文件指定了yum服务器的地址。
-
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包安装。 -
清理yum缓存,并生成新的缓存
[root@localhost soft]# yum clean all [root@localhost soft]# yum makecache
更换yum源
加入hadoop组件相关yum源
-
查看当前系统中yum支持的所有软件包中是否存在hadoop
[root@tedu yum.repos.d]# yum list|grep hadoop
-
如果想要当前系统的yum支持hadoop软件包,需要本地
/etc/yum.repos.d
下创建cloudera-cdh5.repo
文件http://archive.cloudera/cdh5/redhat/6/x86_64/cdh
更换阿里yum源
-
备份原来的官方yum源
[root@Demo02 yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.bak
-
获取阿里的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
使用案例
-
通过yum下载lrzsz
期间会提示y/N,输入y即可
也可以在命令中添加
-y
选项,默认全部是y
yum -y install lrzsz
[root@Demo02 yum.repos.d]# yum install lrzsz
卸载
语法:yum remove package_Name
使用案例
-
通过yum卸载lrzsz
可以在命令中添加
-y
选项,默认全部是y
[root@Demo02 yum.repos.d]# yum remove lrzsz
查询
命令 | 作用 |
---|---|
search | 查询某个软件名称或者是描述的关键字 |
list | 列出目前yum所管理的所有的软件名称与版本,有点类似 rpm -qa |
-
通过
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.
-
通过
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
-
下载MySQL安装包
-
确认当前虚拟机之前是否有安装过mysql
查询有mysql相关的东西,需要将其删除
[root@Demo02 rpm]# rpm -qa|grep mysql mysql-libs-5.1.71-1.el6.x86_64
-
删除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]#
-
新增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)
-
安装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%]
-
安装后,mysql文件所在的目录
目录 作用 /usr/bin 客户端程序与脚本 /usr/sbin 服务器启动脚本 /var/lib/mysql 日志文件、数据库 /usr/share/info Info格式的MySQL手册 /usr/share/man Unix手册 /usr/include/mysql 标头文件 /usr/lib/mysql 函数库 /usr/share/mysql 包括错误信息的其他支持文件
文件的字符集
示例配置文件/usr/share/sql-bench 标准程序 -
修改
myf
,默认在/usr/myf
,删除[mysqld]
,并添加如下内容:[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] character_set_server=utf8
-
将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
-
启动mysqld,执行:service mysqld start
出现如下结果,说明MySQL安装成功、MySQL服务启动成功
[root@Demo02 mysql]# service mysql start Starting MySQL.. [确定]
-
查看初始生成的密码:
/root/.mysql_secret
。这个密码随机生成的 -
修改初始密码
将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.
-
进入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>
远程访问服务器数据库
- 通过IP地址+用户名+密码即可访问
- 如果连接不上,可能因为服务器MySQL没有开启远程访问,需要开启即可
- 在装有MySQL的机器上登录MySQL mysql -u root -p密码
- 执行
use mysql;
- 执行
update user set host = '%' where user = 'root';
这一句执行完可能会报错,不用管它。 - 执行
FLUSH PRIVILEGES;
(刷新MySQL的权限相关表)
通过YUM安装Tomcat
需要连入网络才能下载
-
查询可以安装的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.
-
找到
Tomcat6-admin-webapps.noarch
这个rmp包,通过rmp安装[root@Demo02 ~]# yum -y install tomcat6-admin-webapps.noarch
-
安装完的文件目录在
/usr/share
RPM和YUM的取舍
- 如果安装、卸载、更新的软件是单个独立的离线安装包,那么建议使用RPM的方式进行安装、卸载、更新。
- 如果安装一个软件时,发现此软件有众多的依赖环境,那么首选就是yum的方式进行处理。
例如:
安装一个jdk,那么首选rpm的方式。
安装tomcat的话就可以考虑使用yum。
数据重定向
数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方
通常执行一条命令的时候会有标准输出和标准错误输出
-
标准输出是指命令执行之后,传回正确信息的输出目标
[root@Demo02 mysql]# ll /media 总用量 4 dr-xr-xr-x. 7 root root 4096 11月 29 2013 CentOS_6.5_Final
-
标准错误输出是命令执行失败后,所传回错误信息的输出目标
[root@Demo02 mysql]# ll m ls: 无法访问m: 没有那个文件或目录
标准输入(stdin):编号为0 使用<或<<
标准输出(stdout):编号为1 使用>或>>
标准错误输出(stderr):编号为2 使用>或>>
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
标准输出案例
-
某一条命令执行后会有标准输出和标准错误输出,将标准输出的内容输出到文件中。
ll /root /roo 1>fileName
-
某一条命令执行后会有标准输出和标准错误输出,将标准错误输出的内容输出到文件中。
ll /root /roo 2> fileName
-
某一条命令执行后会有标准输出和标准错输误输出,将标准出和标准错误输出的内容输出到文件中。
ll /root /roo > fileName 2>&1
-
还是上面的案例,只不过要求结果文件不保存
ll /root /roo > /dev/null 2>&1
标准输入案例
-
打印文本中的行数
wc -l < 文本
-
并且可以将打印出来的重导向到新的文件中
wc -l< 文本 > count
-
利用标准输入编写文件
cat >> demo.txt<< "abc"
修改主机名
-
通过命令修改
格式:hostnamectl set-hostname 主机名
$ hostnamectl set-hostname sxh
修改后当前主机名并不会立马更改,需要重启后才生效,可使用hostname查看当前真实的主机名
-
通过配置文件修改
直接修改
/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.
-
找到
Tomcat6-admin-webapps.noarch
这个rmp包,通过rmp安装[root@Demo02 ~]# yum -y install tomcat6-admin-webapps.noarch
-
安装完的文件目录在
/usr/share
RPM和YUM的取舍
- 如果安装、卸载、更新的软件是单个独立的离线安装包,那么建议使用RPM的方式进行安装、卸载、更新。
- 如果安装一个软件时,发现此软件有众多的依赖环境,那么首选就是yum的方式进行处理。
例如:
安装一个jdk,那么首选rpm的方式。
安装tomcat的话就可以考虑使用yum。
数据重定向
数据重定向就是将某个命令执行后应该要出现在屏幕上的数据, 给他传输到其他的地方
通常执行一条命令的时候会有标准输出和标准错误输出
-
标准输出是指命令执行之后,传回正确信息的输出目标
[root@Demo02 mysql]# ll /media 总用量 4 dr-xr-xr-x. 7 root root 4096 11月 29 2013 CentOS_6.5_Final
-
标准错误输出是命令执行失败后,所传回错误信息的输出目标
[root@Demo02 mysql]# ll m ls: 无法访问m: 没有那个文件或目录
标准输入(stdin):编号为0 使用<或<<
标准输出(stdout):编号为1 使用>或>>
标准错误输出(stderr):编号为2 使用>或>>
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
标准输出案例
-
某一条命令执行后会有标准输出和标准错误输出,将标准输出的内容输出到文件中。
ll /root /roo 1>fileName
-
某一条命令执行后会有标准输出和标准错误输出,将标准错误输出的内容输出到文件中。
ll /root /roo 2> fileName
-
某一条命令执行后会有标准输出和标准错输误输出,将标准出和标准错误输出的内容输出到文件中。
ll /root /roo > fileName 2>&1
-
还是上面的案例,只不过要求结果文件不保存
ll /root /roo > /dev/null 2>&1
标准输入案例
-
打印文本中的行数
wc -l < 文本
-
并且可以将打印出来的重导向到新的文件中
wc -l< 文本 > count
-
利用标准输入编写文件
cat >> demo.txt<< "abc"
修改主机名
-
通过命令修改
格式:hostnamectl set-hostname 主机名
$ hostnamectl set-hostname sxh
修改后当前主机名并不会立马更改,需要重启后才生效,可使用hostname查看当前真实的主机名
-
通过配置文件修改
直接修改
/etc/hostname
文件里面的参数即可,同样需要重启才生效。$ vi /etc/hostname
注:有人反馈说使用这种方法会有一定的问题,但目前没碰到过!!!
查看当前主机名
$ hostname
版权声明:本文标题:《linux》笔记2 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726360886h944597.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论