Linux - 基础
一. 网络配置
- 修改配置文件
- nmtui
- 修改/etc/sysconfig/network-scripts/ifcfg-ens33配置文件
第一种修改方式:
# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=none/static # 网卡获取IP的方式
# none/static-->手动配置IP地址(静态)
# dhcp-->自动获取IP地址(动态)
ONBOOT=yes # 是否开机自动启动网卡
# yes-->开机启动
# no-->开机禁用
IPADDR=10.1.1.10 # IP地址
PREFIX=16 # 子网掩码 也可以写 NETMASK=255.255.0.0
GATEWAT=10.1.0.1 # 网关
DNS1=114.114.114.114 # DNS,可以写3个
第二种修改方式:
# 修改IP
sed -i 's/IPADDR=10.1.1.10/IPADDR=10.1.1.100/g' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-ens33
sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=none/g' /etc/sysconfig/network-scripts/ifcfg-ens33
- 重启网卡
# 重启网卡
systemctl restart network
二. SSH连接优化
- 关闭selinux
# vi /etc/selinux/config
SELINUX=disabled
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
修改后必须重启服务器
# 重启服务器
shutdown -r now
临时修改--> setenforce 0
- ssh连接失败
- 检查ip
- 关闭防火墙
# 临时关闭防火墙
systemctl stop firewall
# 永久关闭防火墙
systemctl disable firewall
三. 语言支持
# 查看系统当前语言设置
echo $LANG
# 修改语言
LANG=en_US
# en_US -->English
# zh_CN.UTD-8 -->Chinese
四. yum源(CentOS系列)
Linux的软件管理工具
# yum仓库菜单
ls /etc/yum.repos.d/
# yum仓库源
# cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
# [base] -->仓库名称
# name= -->仓库描述
# mirrorlist -->仓库镜像路径
# baseurl -->仓库url
# enabled -->仓库是否启用 1: 启用, 0: 关闭
# gpgcheck -->密钥检测 1: 开启检测, 0: 关闭检测
# gpgkey -->密钥路径
国内常用开源镜像站
构建国内镜像源
- 备份本地镜像源
- 下载或替换国内镜像源
- 清除yum缓存
- 生成yum缓存
# 清除yum缓存
yum clean all
# 生成yum缓存
yum makecache
# yum命令
yum list # 列出所有yum package
yum search + [command] # 查找command对应的依赖包
yum install + [package] # 安装package包
yum remove + [package] # 卸载package包
yum grouplist #按组
yum groupinstall
yum groupremove
yum update # 升级yum
五. 目录结构
# tree / -L 1
/
├── bin -> usr/bin # 所有用户可用的Linux基本命令
├── boot # 引导加载必须用到的文件(Kernel, initramfs(initrd), grub)等
├── dev # 特殊文件或设备文件
├── etc # 系统程序的配置文件
├── home # 用户的家目录
├── lib -> usr/lib # 动态链接共享库
├── lib64 -> usr/lib64 #
├── media # 系统自动识别的设备, eg: U盘, DVD等
├── mnt # 为用户提供了临时的文件挂载目录
├── opt # 为用户提供软件安装的路径, 默认是空的
├── proc # Linux虚拟文件系统, 内存映射(不在磁盘中)
├── root # root用户的家目录
├── run # 临时文件系统
├── sbin -> usr/sbin # 系统管理使用的工具命令
├── srv # 用来存放服务启动后需要提取的数据
├── sys # 系统内核
├── tmp # 为用户提供来放临时文件
├── usr # Linux共享资源目录(重要性仅次于根目录)
└── var # 日志文件目录
六. 开机启动流程
电源-->BIOS硬件自检-->读磁盘-->MBR主引导-->PT分区表
七. 目录管理命令
切换目录
语法:
cd [dirName]
# 选项
-p: 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录
-L: 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。
-: 当仅实用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
eg:
cd + [path] # 切换到对应路径下
cd .. # 返回上一级目录
cd - # 返回上一次目录
cd ~ # 切换到自己的家目录
查看文件
语法:
ls [Option] [path]
# 选项
-a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出);
-A:显示除影藏文件“.”和“..”以外的所有文件列表;
-C:多列显示输出结果。这是默认选项;
-l:与“-C”选项功能相反,所有输出信息用单列格式输出,不输出为多列;
-F:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道FIFO,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
-b:将文件中的不可输出的字符以反斜线“”加字符编码的方式输出;
-c:与“-lt”选项连用时,按照文件状态时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段。与“-l”选项连用时,则排序的一句是文件的状态改变时间;
-d:仅显示目录名,而不显示目录下的内容列表。显示符号链接文件本身,而不显示其所指向的目录列表;
-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;
-i:显示文件索引节点号(inode)。一个索引节点代表一个文件;
--file-type:与“-F”选项的功能相同,但是不显示“*”;
-k:以KB(千字节)为单位显示文件大小;
-l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-m:用“,”号区隔每个文件和目录的名称;
-n:以用户识别码和群组识别码替代其名称;
-r:以文件名反序排列并输出目录内容列表;
-s:显示文件和目录的大小,以区块为单位;
-t:用文件和目录的更改时间排序;
-L:如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
--full-time:列出完整的日期与时间;
--color[=WHEN]:使用不同的颜色高亮显示不同类型的。
eg:
ls # 显示非隐藏文件
ls -a # 显示全部文件(包括隐藏文件)
ls -l # 以长格式显示文件内容(非隐藏文件)
创建目录
语法:
mkdir [Option] [Parameter] [path]
# 选项:
-Z:设置安全上下文,当使用SELinux时有效;
-m<目标属性>或--mode<目标属性>建立目录的同时设置目录的权限;
-p或--parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
--version 显示版本信息。
eg:
mkdir /root/newFolder # 找root下新建立一个newFolder的文件夹
mkdir /opt/new/Folder # 在opt/new下创建Folder, 如果opt下没有new文件夹则创建new文件夹在创建就Folder文件夹
创建文件
语法:
touch [path/touchName]
# 选项
a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
f 不使用,是为了与其他 unix 系统的相容性而保留。
r 使用参考档的时间记录,与 --file 的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与 date 指令相同。
--no-create 不会建立新档案。
--help 列出指令格式。
--version 列出版本讯息。
eg:
touch /root/newFile.config # 在root下创建一个名为newFile.config的文件
touch /root/newFolder/newFile.config{1..10} # 在/root/newFolder下创建文件
文件时间
语法:
stat [fileName]
eg:
stat /etc/sysconfig/network-sctipts/ifcfg-ens33
文件复制
语法:
cp [Option] [path/fileName] [newPath/newFileName]
# 选项
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
eg:
cp /root/1 /tmp # 把文件1复制到tmp目录下,文件权限继承tmp
cp -p /root/1 /tmp # 把文件1复制到tmp目录下并继承源文件的权限
cp -r /root /tmp # 把文件夹root所有的文件以及文件夹复制到tmp
# 文件备份
cp -v /etc/hosts /ect/hosts.bak
cp -v /etc/{hosts,hosts.bak}
cp -v /etc/hosts{,.bak}
文件剪切
语法:
mv [Option][FileName]
# 选项
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-n: 不要覆盖任何已存在的文件或目录。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
eg:
mv 1 1.bak # 把1文件保存为1.bak,之前的文件会覆盖
文件删除
语法:
rm [Option] [FileName]
# 参数
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
谨慎操作
八. 文件管理命令
文件查看命令
- cat
- more
- less
- head
- tail
- cat
# 直接查看,显示所有内容
cat /etc/hosts # 查看hosts文件
# 覆盖内容
cat >/etc/1.txt<<EOF
1
EOF
# 追加内容
cat >>/etc/1.txt<<EOF
1
2
EOF
- more
# 分页浏览
more /etc/hosts
# space -->向下滚动一页
# enter -->向下滚动一行
- less
# 分页浏览(可以反复浏览)
less /etc/hosts
# pageup -->向上滚动一页
# pagedown -->向下滚动一页
# q -->退出浏览模式
- head
从头部开始看,默认看10行
# 看hosts文件的前10行
head /etc/hosts
# -n 看前n行
head -n /etc/hosts
- tail
从文件的末尾看倒数10行
# 看hosts文件的倒数10行
tail ./etc/hosts
# -n: 看倒数n行
# -f: 跟踪文件 ctrl+C退出
九. 文件查找
- locate
- which
- whereis
- locate
# 安装依赖
yum install mlocate
# 更新数据locate数据库(不更新可能找不到在PATH之外的文件)
updatedb
locate /etc/sh # 搜索/etc下所有以sh开头的文件
locate -i /etc/sh # 搜索/etc/下所有以sh开头的文件,不区分大小写
- which
which ls # 查看ls命令所在的位置(绝对路径)
# 所有的which只能查询在系统PATH中的命令
- whereis
whereis ls # 查找文件索引中的命令,源文件,man文件等,非PATH也可查找
十. 字符处理命令
语法:
sort [Option]...[File]
-r: 倒序
-n: 按照数字排序
-t: 指定分隔符, 默认空格
-k: 指定第几列, 第几个字符
eg:
创建示例文件
cat >>sore.txt<<EOF
b:3
c:2
a:4
e:5
f:11
EOF
排序
sort sort.txt # 默认升序
sort -r sort.txt # 使用降序(倒序)排序
sort -t ':' -k2 sort.txt # 以':'为分隔符(':'之前的为第一列), 按照第二列进行默认排序 对比: sort -t ':' -k2 -n sort.txt
十一. Linux终端概述
终端切换-->Ctrl+Alt+F1...F6
十二. Linux系统界面
- 字符型
- 图形化
- 字符型:
- shell
- bash(默认)
echo $SHELL
- shell
- 图形化:gnome/kde
十三. Bash快捷键
Ctrl+A // 光标移至首部
Ctrl+E // 光标移至尾部
Ctrl+C // 结束前台程序
Ctrl+D // 退出当前shell
Ctrl+Z // 任务挂到后台
Ctrl+L // 清屏
Ctrl+K // 删除光标到末行的所有字符
Ctrl+U // 删除光标到首行的所有字符
Ctrl+R // 搜索历史,安装关键字
十四. 命令流程
- 判断命令是否通过绝对路径执行
- 判断命令是否存在别名
- 判断用户输入的是内部命令还是外部命令
- 内部命令直接执行, 外部命令检测是否存在缓存
- 检测PATH路径, 有执行, 没有报错
内部命令: 在shell中自带
外部命令: 在系统PATH之外的某个路径下的可执行命令
十五. 转义字符
- 反斜杠(\) : 使反斜杠后的一个变量为字符串
- 单引号(' ') : 使其中所有的变量为单纯的字符串
- 双引号(" ") : 保留变量属性,不进行转义
- 反引号(` `) : 把反引号中的命令执行后返回结果
十六. VIM编辑器
1. vim基本介绍
vi和vim命令是linux中强大的文本编辑器,由于Linux一切皆文件,而系统配置一个服务就是在修改配置文件的参数.vim编辑器是运维工程师必须掌握的一个工具
vi和vim的区别
- vi不显示高亮语法
- vim显示高亮语法
vi和vim功能上没有什么区别,用vi还是vim取决于个人习惯
没有vim使用yum安装
yum install -y vim
2. vim模式介绍
vim中一共有3种编辑模式:
- 命令模式
- 编辑模式
- 末行模式
- 命令模式
控制光标移动, 可对文本进行复制, 粘贴, 删除等工作, 使用 vim打开一个文件时, 默认就是命令模式
- 编辑模式
从命令模式进入编辑模式, 按下(i, I, a, A, o, O, r, R), 进入到编辑模式在屏幕的左下方会显示'insert'的字样,按下ESC键可返回到命令模式
- 末行模式
在命令模式下输入冒号(:)/或者斜杠(/)即可进入末行模式, 在该模式下可以进行的操作有:
- 显示行号
- 搜索
- 替换
- 保存
- 退出
vim编辑器配置文件流程
- 默认打开文件处于命令模式
- 需要从命令模式切换至编辑模式
- 编辑模式修改后, 返回命令模式
- 通过命令模式切换到末行模式进行保存或退出
***在vim中,无法直接从编辑模式到末行模式
2.1. 命令模式
命令模式: 默认打开文件进入命令
# 命令光标移动
G # 跳转到光标末端
gg # 跳转到光标顶端
Ngg # 跳转到当前文件的22行
$ # 将光标移动到所在行的尾部
^ # 将光标移动到所在行的首部
# 翻页
ctrl + f # 向下翻页
ctrl + b # 向上翻页
# 复制
yy # 复制所在行
6yy # 复制所在行以及向下5行
# 粘贴
P # 粘贴在光标下一行
p # 粘贴在光标上一行
# 删除
dd # 删除光标所在行
3dd # 删除光标以及以下2行
d0 # 删除光标以后的所有行
D # 删除光标后到行尾
x # 删除当前光标记住后的字符
X # 删除当前光标记住前的字符
# 剪切
先删除,在粘贴
# 撤销
u # 撤销上一步的操作
# 替换
r # 替换当前光标标记的单个字符
R # 进入REPLACE模式,连续替换,ESC结束
2.2.编辑模式
# 以下模式都为编辑模式
i # 光标不会做任何处理
I # 光标跳转到首行
a # 光标往后移一位
A # 光标跳转到末行
o # 在光标下一行添加空白行
O # 在光标上一行插入空白行
2.3. 末行模式
:w # 保存当前状态
:w! # 强制保存当前状态
:q # 退出不保存
:q! # 强制退出不保存
:wq # 先保存在退出
:wq! # 强制保存并退出
:x # 先保存在退出
ZZ-->shift+zz # 保存退出
:number # 跳转到对应行号
# 复制
:ny # 复制单行
:m,ny # 从m行复制到n行
:%y # 复制所有
# 删除
:nd # 删除单行
:m,nd # 删除m到n行
:%d # 删除文件说有内容
# 查找
/string # 需要查找的内容
n # 向下查找
N # 向上查找
# 替换
:s#sbin#bin # 替换光标所在行的第一个匹配项
:1,5s#sbin#bin#g # 替换1-5行的所有匹配项
:%s#sbin#bin#g # 替换文档中所有满足条件的匹配项
:%s#sbin#bin#gc # 替换内容时提示是否需要替换
# 另存为
:w /DIR # 将文件所有内容替换到DIR
# 读入
:r /DIR # 将DIR的文件读入到当前光标后
2.4.视图模式
ctrl + v 进入VISUAL BLOCK 选中需要注释的行(可视化模块)
1.插入: shift + i 进入编辑模式, ESC退出
2.删除: 选中内容后按x或者d进行删除
3.替换: 选中要替换的内容, 按下r ,然后输入要替换的内容
shift + v 进入VISUAL LINE 选中行内容(可视化模块)
1.复制: 选中行内容后按y进行复制
2.删除: 选中行内容后按d进行删除
3. 环境变量
环境变量临时生效
# 临时生效
:set nu # 显示行号
:set ic # 忽略大小写
:set ai # 自动缩进
:set list # 显示制表位(空格和tab)
:set no[nu|ic|ai] # 取消临时设置的变量
环境变量永久生效
vi ~/.vimrc # 个人环境变量(优先级高) /etc/vimrc 全解环境变量
# ~/.vimrc
set nu
set ic
十七. Linux系统文件属性
1. 系统文件类型
长格式下的第一个字符
格式 | 说明 |
---|---|
- | 普通文件 |
d | 目录文件 |
b | 设备文件(块设备)存储设备硬盘/dev/sda, /dev/sda1 |
c | 设备文件(字符设备)打印机,终端/dev/tty1, /dev/zero |
s | 套接字文件, 进程间的通讯 |
p | 管道文件 |
l | 链接文件 |
ls -dl /etc/hosts /tmp /bin/ls /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/systemd/initctl/fifo
2. 系统链接文件
- 软连接
类似Windows下的.lnk(快捷方式)文件
# 创建链接文件语法
ln -s [源文件] [目标文件]
# 软链接源文件要用绝对路径
- 硬链接
硬链接是为了给文件添加一个入口, 防止把该文件误删除
硬链接和软链接的区别:
1.硬链接是别名,软链接是快捷方式
2.硬链接和源链接指向同一个i节点,软链接不同
3.硬链接不能跨文件系统,而软链接可以
4.删除硬链接和软链接都不会影响原链接
5.硬链接只能针对文件,软链接可以针对文件和目录
3. 压缩包
-
windows:
- rar
- zip
-
Linux
- zip
- tar.gz
- tar.bz
- tar.xz
压缩的好处:
节省磁盘空间占用率
节省网络传输带宽消耗
网络传输更加快捷
Linux常见的压缩名以及压缩工具
.gz gzip
.bz2 bzip2
tar tar # tar没有压缩功能, 只是把一个目录合并成一个文件
tar.gz # 先用tar打包, 在用gz压缩
tar.bz2 # 先用tar打包, 在用bz2压缩
# Linux下压缩文件通常以tar.gz的文件包
# Linux下压缩文件必须到后缀名
3.1. zip压缩工具
zip是压缩工具, unzip是解压工具
# 安装unzip工具包
yum install -y unzip
# zip选项
# -q: 不执行指令过程
# -m: 把文件压缩并删除源文件
# -r: 递归, 将指定目录下的所有文件和子目录一起处理
# unzip选项
# -d[DIR]: 指定文件解压后要存储的目录
# -q: 不显示执行过程
# eg:
# zip File.zip file
# zip -r DIR.zip /DIR/
# unzip File.zip
3.2. tar文件归档管理
原始含义是归档,没有压缩功能
tar是Linux下最常用的压缩和解压缩, 支持文件和目录的压缩
# 语法
tar [Option] [FileName]
# [Option]
c: 文件归档
x: 对归档的文件解压
t: 列出归档文件列表
v: 显示归档或解包过程
f: 指定文件命,一般写在最后
z: 使用tar.gz归档后的文件(tar.gz)
j: 使用bzip2归档后的文件(tar.bz2)
J: 使用xz归档后的文件(tar.xz)
X: 排除多个文件(需要写入排除的文件名)
h: 打包软链接
# 常用的打包组合
zcvf # 打包tar.gz
zxvf # 解压tar.gz
cjf # 打包tar.bz2
xjf # 解压tar.bz2
xf # 自动选择解压模式
tf # 查看压缩包内容
十八. Linux系统用户管理
用户存在的意义:
- 系统上的每一个进程都需要特定的用户运行
- 每一个文件都有特定的用户拥有
- 访问文件或目录受到用户的限制
- 进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关
查看当前用户信息
[root@AliceServer ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
==UID的分类:==
UID | 用户 |
---|---|
0 | 超级管理员 |
1-200 | 系统用户,由系统分配给系统进程使用 |
201-999 | 系统用户,用来运行服务的账户,不需要登陆,动态分配 |
1000+ | 常规用户 |
*在Linux7之前的惯例是, UID1-499用于系统用户. 而UID500+则用于普通用户
==组类别==
基本组: 优先使用基本组, 用户只能属于一个基本组, 用户默认基本组
附加组: 基本组不能满足授权要求, 创建附加组, 用户可以属于多个附加组
私有组: 创建用户时如果没有指定基本组, 系统会创建和用户名相同的组名
1. 用户管理
账户信息存放在/etc/passwd, 账户密码密码信息保存在/etc/shadow, 这两个文件是linux系统中最重要的文件之一, 如果没有这两个文件或者文件出现问题, 会导致无法正常登录linux系统
==/etc/passwd==
>head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
由':'分隔成7段
- 用户名称
- 密码占位符
- 用户的UID
- 用户的基本组GID
- 用户注释
- 用户家目录
- 用户登陆shell
==/etc/shadow==
>cat /etc/shadow | grep root
root:$6$Eof4RgKtYZksm5nN$uwfZfTBzsxmloBms4Xc5LJ4tTbVBkJ/s40k.Ke40gcXLVU/iO0sEtgb6lbJ7ThSjcOlHndck5jHJkB/edrMRa0::0:99999:7:::
由':'分隔成9段
- 用户登录名
- 加密后的密码
- 最近一次修改密码的时间
- 密码最少使用几天
- 密码最多使用几天
- 密码到期前警告期限
- 密码到期后保持活动的天数
- 账户到期时间
- 标志
密码格式
$a$b$c
- a 加密算法
- b salt随机加密值
- c 加密后的值
使用chage更改用户密码的使用情况
-d 设置最近一次更改密码的时间,设置0为下次登录强制修改密码
-m 设置用户2次密码使用的最小天数
-M 设置用户2次密码使用的最大天数
-W 设置用户密码的警告过期天数
-I 设置密码过期天数后,密码为失效状态
-E 设置用户过期时间,账号失效后无法登录
-l 显示线上
eg:
# 添加用户
useradd user1
tail -1 /etc/passwd
>>>user1:x:1000:1000::/home/user1:/bin/bash
# 更改密码
echo 123 | passwd --stdin user1
tail -1 /etc/shadow
>>>user1:$6$BQfGfOJg$DePPzuE96zlUZo9T0zHLfRQpDMFM7x9bX3tOnHfY.QXU2ksTzzJZC6xqnhZQFaTQ9kBdZUn8wchXH5Yh22NKb.:18882:0:99999:7:::
# 查看密码详情
chage -l user1
最近一次密码修改时间 :9月 12, 2021
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
## 设置最近一次修改密码的时间
chage -d '2020-02-20' user1
## 设置最短密码使用的时间
chage -m 2 user1
#查看密码表
tail -1 /etc/shadow
>>>user1:$6$BQfGfOJg$DePPzuE96zlUZo9T0zHLfRQpDMFM7x9bX3tOnHfY.QXU2ksTzzJZC6xqnhZQFaTQ9kBdZUn8wchXH5Yh22NKb.:18312:2:99999:7:::
## 设置最长密码使用时间
chagre -M 15 user1
## 设置密码过期警告
chage -W 6 user1
## 设置密码过期时间
chage -I 5 user1
## 设置用户过期时间
chage -E '2099-12-31' user1
2. 用户命令
添加用户前需要确认
- 用户的默认组是否有特殊要求
- 用户是否允许登陆
- 用户的密码策略
- 用户的有效期
- 用户的UID是否有特殊要求
- 使用useradd命令新增用户
- adduser软链接是指向useradd
创建用户
# 创建用户参数
-u 指定用户的UID(不能和现有的冲突)
-g 指定用户默认基本组
-G 指定用户附加组,用逗号隔开添加多个附加组
-d 指定用户家目录
-c 指定用户的注释信息
-M 不建立家目录
-s 指定用户默认shell
-r 创建系统账户,没有家目录
eg:创建user用户,指定UID5001,基本组student,附加组sa,dba,注释信息:'new student',shell:bash
# 创建用户组
groupadd sa
groupadd dba
groupadd student
# 创建用户
useradd -u 5001 -g student -G sa,dba -c "new student" -d /home/user -s /bin/bash user
# 查看用户信息
tail -1 /etc/passwd
>>>user:x:5001:1003:new student:/home/user:/bin/bash
# 创建系统用户
useradd -M -s /sbin/nologin mysql
useradd -r -s/sbin/nologin dba
更改用户组
使用usermod修改
# usermod参数
-u 修改用户的UID
-g 修改用户所属的基本组GID
-G 修改用户的附加组,使用逗号隔开,覆盖原有附加组
-a 追加更多的附加组和-G一起使用 -aG:追加附加组
-md 家目录迁移, 和-d一起使用
-d 指定用户家目录的位置
-c 修改用户注释信息
-s 更改用户使用的shell
-l 更改用户的登录名
-L 锁定用户
-U 解锁用户
使用finger命令查看用户
yum install -y finger
finger root
3. 用户创建
用户创建原理: ==Linux用户创建会默认读取/etc/default/useradd的配置文件, 如果指定参数,使用指定的参数, 如果不指定参数会默认使用/etc/default/useradd的参数, 当使用useradd时, 用户的家目录会产生.bash_*的文件, 这些文件默认都是从/etc/skel目录复制, 如需变更环境拷贝目录站点可修改/etc/default/useradd的文件
如果执行useradd,指向了参数, 就会覆盖/etc/defaults/useradd的默认配置
# 和chage -l user1看到的一样,只不过是不一样的形式
egrep -v "^#|^$" /etc/login.defs
/etc/default/useradd文件解释
cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home # 用户的家目录建在/home
INACTIVE=-1 # 是否启用账号过期, -1表示不启用
EXPIRE= # 账号终止日期, 不设置表示不启用
SHELL=/bin/bash # 新用户默认使用的shell类型
SKEL=/etc/skel # 配置用户家目录的默认文件存放路径
CREATE_MAIL_SPOOL=yes # 创建mail文件
4. 密码管理
创建完账户后, 默认的没有密码的, 所以该账户无法登录操作系统, 只有在passwd中设置号密码才可以登录
密码策略
- 长度大于10
- 密码中应该包含大写,小写以及特殊符号(!, @, #)等
- 不规则性
==Be Carefu==
- 普通用户只能更改自己的密码
- 管理员root可以修改任何人的密码
- 在使用passwd修改密码时, 不指定用户名, 则修改当前用户的密码
随机密码生成工具
- 系统内置
- mkpasswd密码生成工具
# 系统内置
echo $RANDOM | md5sum | cut -c 1-10
# mkpasswd工具
# 安装扩展包
yum install -y expect
# 生成密码
mkpasswd -l 15 -d 3 -C 5 # -l: 密码位数(默认7位), -d: 数字, -c: 小写字母, -C: 大写字母
5. 组命令管理
*组账户信息保存在/etc/group
/etc/group被':'分割为4个部分
- 组名称
- 密码占位符 -->组密码
- 组管理员
- 组成员 -->只显示附加成员, 不会显示基本成员
==修改组信息==
使用groupmod
# 修改组名称
groupmod -n [NewGroupName] [OldGroupName]
# Option
-g <群组识别码> 设置欲使用的群组识别码。
-o 重复使用群组识别码。
-n <新群组名称> 设置欲使用的群组名称。
6. 身份切换
shell分类
-
交互式shell 等在用户输入命令,exit退出
-
非交互式shell 执行shell脚本, 脚本执行结束后自动退出shell
-
登录shell 需要用户名密码 eg: su
-
非登录shell 不需要用户名密码 eg: sh /bash
==个人配置文件==: ~/.bash_profile, ~/.bashrc
==全局配置文件==: /etc/profile, /etc/profile.d/*, /etc/bashrc
-
profile类
设置环境变量, 登录前运行的脚本和命令
-
bashec类
设置本地变量,定义命令别名
配置文件执行顺序
登录式shell
- /etc/profile
- etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
非登录式shell
- ~/.bashrc
- etc/bashrc
- /etc/profile.d/*.sh
6.1. su 用户切换
su - [user]
su # 切换到root
7. sudo提升权限
7.1. Centos提权方法
usermod -G whell [UserName]
- 日志审计
sudo tail -f /var/log/secure
# 使用vi编辑/etc/sudoers配置文件
十九. Linux用户权限
1. 基本权限
- 权限修改命令chmod
- 属主属组修改命令chown
Linux中的文件或目录的权限和用户以及用户组的关联很大,Linux中每个文件或目录都有一组9个基础权位,每三个字符分成一组,分别为属主权限位(User),属组权限位(Group),其他用户权限位(Other)
eg: rwxr-xr-x
文件权限对应表
字母 | 含义 | 对应权限 | 对应二进制 |
---|---|---|---|
r(read) | 读 | 4 | 100 |
w(write) | 写 | 2 | 010 |
x(execute) | 执行 | 1 | 001 |
- | 无 | 0 | 000 |
# 修改用户权限
chmod [-R] 755 FileName/FolderName
# 修改所属主
chown root [-R] FileName/FolderName
# 修改属组
chown .root [-R] FileName/FolderName
# 修改所属主和所属组
chown root.root [-R] FileName/FolderName
2. 系统ACL
- getfacl [File] 查看详细权限
- setfacl -{u/g/o:uName/gName:[r/w/x]} [File] 设置权限
二十. Linux启动过程
Linux的系统组成
内核+跟文件系统
内核实现的功能
进程管理, 内存管理, 网络协议栈, 文件系统, 安全功能, 驱动程序
内核是linux的整个核心, 内核即是linux, 其他程序都是通过调度内核来实现的
运行中系统环境分层
内核空间+用户空间
内核空间: 由内核代码组成, 拥有系统级别权限, 可直接更改硬件
用户空间: 由各种引用程序组成, 通过调度内核来完成各种复杂的功能任务
1. CentOS6的启动流程
先来上个图(新标签打开图)
- 硬件启动
简单说一下这一步的流程:打开电源;POST自检;BIOS逐一排查设备启动顺序;如果是硬盘启动,读取硬盘的MBR的BootLoader。(这里默认MBR分区,暂不考虑GPT分区)
这里主要有三个需要了解的地方BIOS启动顺序、MBR和BootLoader。BIOS启动顺序大部分人应该都知道,我就不赘述了。
- MBR
MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组成:主引导程序(BootLoader)、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。
注:硬盘默认一个扇区大小为512字节。
第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。
第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。
第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。 - BootLoader
不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。
CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。
- Grub引导菜单
简单说一下这一步的流程:GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段。
grub引导阶段的文件都在/boot/grub/目录下
- Stage1阶段
这一阶段其实执行的就是系统安装时预先写入到MBR的Bootloader程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。
[root@CentOS6 ~]# ll /boot/grub/stage1
-rw-r--r--. 1 root root 512 Mar 13 2018 /boot/grub/stage1
这一阶段,使硬件初始化,为Stage2准备RAM空间(内存空间),读取Stage2到RAM空间(应该涉及到了Stage1.5阶段)。就是Stage1.5阶段或Stage2阶段的入口,引导进入Stage1.5阶段或Stage2阶段。
另外,这一阶段并没有识别文件系统的能力。
- Stage1.5阶段
这一阶段是Stage1阶段和Stage2阶段的桥梁,具有识别分区文件系统的能力,此后grub程序便有能力去访问/boot/grub/stage2,并将其读取到内存执行。
[root@CentOS6 ~]# ll -h /boot/grub/stage2 //大于512字节了
-rw-r--r--. 1 root root 124K Mar 21 2018 /boot/grub/stage2
[root@CentOS6 ~]# ls /boot/grub/*stage1_5 //有各种文件系统格式
/boot/grub/e2fs_stage1_5 /boot/grub/minix_stage1_5
/boot/grub/fat_stage1_5 /boot/grub/reiserfs_stage1_5
/boot/grub/ffs_stage1_5 /boot/grub/ufs2_stage1_5
/boot/grub/iso9660_stage1_5 /boot/grub/vstafs_stage1_5
/boot/grub/jfs_stage1_5 /boot/grub/xfs_stage1_5
- Stage2阶段
这一阶段会(初始化本阶段需要用到的硬件,检测系统的内存映像,)解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核
[root@CentOS6 ~]# cat /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_centos6-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0 //设置默认启动项为第一个内核
timeout=5 //菜单项等待选项时间为5秒
splashimage=(hd0,0)/grub/splash.xpm.gz //菜单背景图片
hiddenmenu //隐藏菜单
//这里有时候会有passwrod参数,意思是进入急救模式(单用户模式)的密码是多少,可以是明文密码,可以是加密密码
//例如password --md5 $1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/,这代表进入急救模式的password经过MD5加密,加密密码为$1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/
title CentOS 6 (2.6.32-642.el6.x86_64) //菜单项名称
root (hd0,0) //grub查找stage2文件及kernel文件所在设备分区,grub的根。第一块硬盘的第一个分区
//启动的内核
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img //内核匹配的ramfs文件,img是镜像文件
- kernel内核引导
通过内存中的虚拟根文件系统,加载驱动,然后切换到真正的根文件系统,并执行/sbin/init程序。
- 初始化系统进程
/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。
这里有个有意思的地方,/etc/rc.d/目录下的文件几乎在上一次都有相应的软链接(也就是/etc/目录下),唯一没有的/etc/rc.d/init.d/目录又似乎与/etc/init.d/目录完全相同
[root@CentOS6 ~]# ls -ld /etc/rc*
lrwxrwxrwx. 1 root root 7 Mar 13 2018 /etc/rc -> rc.d/rc
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc1.d -> rc.d/rc1.d
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc3.d -> rc.d/rc3.d
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc5.d -> rc.d/rc5.d
lrwxrwxrwx. 1 root root 10 Mar 13 2018 /etc/rc6.d -> rc.d/rc6.d
drwxr-xr-x. 10 root root 4096 Feb 18 02:17 /etc/rc.d
lrwxrwxrwx. 1 root root 13 Mar 13 2018 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx. 1 root root 15 Mar 13 2018 /etc/rc.sysinit -> rc.d/rc.sysinit
[root@CentOS6 ~]# ls /etc/rc.d/
init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit
rc rc1.d rc3.d rc5.d rc.local
[root@CentOS6 ~]# diff -ruNa /etc/rc.d/init.d/ /etc/init.d/
/etc/inittab文件
[root@CentOS6 ~]# cat /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:
这个文件直接看最后一行的那个数字就好了,我这里是5,就代表启动级别是5。
另外,还需要了解下系统的启动级别:
0 关机
1 单用户模式、维护模式、急救模式,都可以
2 多用户模式,但没有网络
3 完整的多用户模式
4 预留级别,暂时没用,不用考虑
5 图形界面,XWindows
6 重启
/etc/rc.d/rc#.d/目录
在启动时执行的/etc/rc.d/rc脚本,会调用/etc/rc.d/rc#.d/目录下的文件
[root@CentOS6 ~]# ls /etc/rc.d/rc5.d/
K01smartd K50dnsmasq K73winbind K88sssd S01sysstat S12rsyslog S24nfslock S26udev-post S82abrt-ccpp
K02oddjobd K50xinetd K74ntpd K89netconsole S02lvm2-monitor S13cpuspeed S24rpcgssd S28autofs S82abrtd
K05wdaemon K60nfs K75ntpdate K89rdisc S08ip6tables S13irqbalance S25blk-availability S50bluetooth S90crond
K10psacct K61nfs-rdma K75quota_nld K92pppoe-server S08iptables S13rpcbind S25cups S50kdump S95atd
K10saslauthd K69rpcsvcgssd K76ypbind K95firstboot S10network S15mdmonitor S25netfs S55sshd S99certmonger
K15htcacheclean K71cgred K84wpa_supplicant K95rdma S11auditd S22messagebus S26acpid S70spice-vdagentd S99local
K15httpd K72cgconfig K87restorecond K99rngd S11portreserve S23NetworkManager S26haldaemon S80postfix
K开头的文件:要停止的服务(脚本),从01开始关闭,数字越小越优先关闭
S开头的文件:要启动的服务(脚本),从01开始启动,数字越小越优先启动
这些文件其实都是软链接,指向的都是/etc/rc.d/init.d/目录下的文件
[root@CentOS6 ~]# ll /etc/rc.d/rc5.d/K01smartd
lrwxrwxrwx. 1 root root 16 Mar 13 2018 /etc/rc.d/rc5.d/K01smartd -> ../init.d/smartd
- 初始化成功登录shell终端
用户登录