- 基础
- 显示控制字符(cat -A filename 也可以看到隐藏的控制字符)
- 忽略大小写
- 添加用户
- 修改用户
- 新加用户默认登录的配置
- 修改密码
- 删除用户
- 用户组管理
- 用户切换到其他附属组
- 查看id
- 特殊权限位,就是umask显示的最前面的数字
- 第一位可以设置上面的SUID、SGID、SBIT以及其对应的组合
- 这里的-rwsr-xr-x 中的s表示 SUID
- group属性的x如果是 s则表示 SGID
- other属性的x如果是 t则表示 SBIT,粘着位最具有代表性的就是/tmp
- passwd其实是操作 /etc/shadow文件,但这个文件的权限很特殊,所以需要这里的特殊权限
- 这里的特殊权限表示普通用户在执行命令时临时升级为文件对应的user、group身份
- 切换身份也是只有在命令执行过程中生效,执行完毕后失效
- 一般命令只有x权限,设置了特殊权限后权限位会标记为s
- 如果没有x权限,直接设置特殊权限,则表示为S,再加上x权限后标识为s
- 粘着位只针对目录有效
- 粘着位表示other对此目录下的文件有写的权限,但修改和删除时只能操作自己创建的文件
- 从安全来看,为了防止木马和后门,需要定期排查特殊权限的文件和命令,定期diff匹配
- lv创建好后就可以格式化fs再挂载使用
基础
系统结构
发行版本
一些特性
硬盘类型
- IDE
- 第一个硬盘为hda
- 第二个硬盘为hdb
- 第三个硬盘为hdc
- …
- SCSI
- 第一个硬盘为sda
- 第二个硬盘为sdb
- 第三个硬盘为sdc
- …
-
分区类型
主分区
- 最多4个
- 顺序创建
- [sh]da[1-4]
扩展分区
Windows
- FAT32
- NTFS
Linux
eth0
- ens33
-
安装虚拟机配置
虚拟机网络
硬盘
网卡
目录结构
维护建议
远程服务器关机及重启时的注意事项
- 重启前使用sync # 该命令尽量把缓存数据同步到磁盘
- 使用 shutdown -r now # 优雅关机,尽量避免halt、init等
- 不要在服务器访问高峰运行高负载命令
- 远程配置防火墙时不要把自己踢出服务器
- 测试时可以定时任务5分钟后清空防火墙,防止自杀
- 指定合理的密码规范并定期更新
- 合理分配权限
-
常用命令
重点命令
帮助命令
- —help (外部命令帮助文档)
- help(内核命令帮助)
- man(常用手册)
- 帮助级别(man X 默认是1级别)
- info(详细说明书)
# 可以列出CMD相关的帮助手册的级别
whereis CMD
# 使用man级别,默认是1级别
man [LEVEL] CMD
# linux帮助
--help
help
man
info # 最详细的一本书
# 查看文件状态
stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 8eh/142d Inode: 1191290 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-05-29 06:02:12.894510249 +0000 # 访问时间
Modify: 2022-05-29 06:02:12.894510249 +0000 # 内容修改时间
Change: 2022-05-29 06:02:12.894510249 +0000 # 状态修改时间
Birth: -
# 更新文件的三个时间
touch test.txt
# ln
## 硬链接,inode相同,删除1个另一个不受影响,不能跨分区,不能链目录
ln /path/to/1 /path/to/2
## 软链接,inode不同,都是在修改源文件,删除软链接文件后不影响源文件
ln -s /path/to/1 /path/to/2
# 查找
whereis
# 查找命令的命令,可以查找帮助文档的位置
which
# 查找命令的命令,可以查找别名
locate
# 按文件名查找
# 维护一个数据库 /var/lib/mlocate/mlocate.db
# 更新数据库
## 自动更新:重启机器
## 手动更新:updatedb;
## 配置文件在/etc/updatedb.conf, 可以配置哪些目录/FS/名称不需查找/更新
find
# -exec 和 -ok
## 把执行结果交给后面的命令继续执行
## 通过{} \; 接收find命令的结果
## 区别
### -exec 会直接执行,不会询问
### -ok 会询问是否执行,得到确认后再执行,给用户交互的机会
alias
# 别名
## alias CMD='CMD2... '
权限管理
umask
网络命令
- nm配置文件在 /etc/NetworkManager/system-connections/X.nmconnection
- nm使用方法
- nmcli
- 激活新网卡
- nmcli
- 常用命令
- nmtui
- TextUI/TerminalUI
reboot halt poweroff init
<a name="XP49P"></a>
### 痕迹命令
- 查看登录或登录日志

<a name="YFGng"></a>
### 挂载
```shell
# 挂载光盘
mount -t iso9600 /dev/sr0 /mnt/cdrom
# 卸载
umount /mnt/cdrom
# 查看接入设备
fdisk -l
# 挂载U盘
mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb
# 卸载U盘
umount /mnt/usb
终端通信
# 本地终端
# 本地字符终端 tty1-6 (Alt+F1-F6切换)
# 本地图形终端 tty7 (Alt+Ctrl+F7切换)
# 远程终端 pts/0- (每连接一个远程就会+1)
# write,给user发送消息,回车即发送,ctrl+c 退出
write [options] <user> [<ttyname>]
# wall,给所有终端广播消息
wall [message]
wall
输入内容后 ctrl+d 发送
dos2unix
# windows下编辑的文件cat -A看 行结束符有^M需要转换成linux
dos2unix test.txt
VI
配置文件.vimrc
- vim命令的配置文件,常用的个性化配置可以编辑保存 ``` syntax off syntax on
set nonu set nu
set nohlsearch set hlsearch
显示控制字符(cat -A filename 也可以看到隐藏的控制字符)
set list set nolist
忽略大小写
set noic set ic
<a name="mXxFq"></a>
### 工作模式

<a name="undDO"></a>
### 常用命令
<br /><br /><br /><br /><br /><br />
- 导入命令
- :r :r a.txt # 读入a.txt的内容
- :! :!CMD :!date # 临时执行命令后返回
- :r !date # 上面2个组合,读入当前时间
- 定义快捷键
- :map 快捷键 触发命令
- :map ^P I#<ESC>
<a name="Ineaf"></a>
# 系统管理
<a name="HxEAd"></a>
## 软件包管理
- 分类
- 源码包
```shell
# 源码编译安装三大步
./configure [--prefix=PATH --with-LIBNAME=PATH]
make
make install
# 错误回退
make clean
- 二进制包
- RHEL的RPM 包管理系统
- Debian/Ubuntu的DPKG 包管理系统
- rpm
- 命名规则
- rpm安装时候的依赖查找网址 http://rpmfind.net/
- 安装默认路径
- —prefix 指定安装路径
- 校验
# 编译
gcc -o test test.c
# rpm 安装
rpm -ivh *.rpm
# rpm安装后的各个软件的信息数据库
ls /var/lib/rpm
# rpm卸载
rpm -e 包名
# 查询所有安装包
rpm -qa
# 查看安装的文件和目录的详细信息
rpm -ql httpd
# yum管理
# 配置文件在/etc/yum.repos.d/目录
yum list
yum install
yum remove
# 软件组
yum grouplist
yum groupinstall
yum groupremove
diff&patch
# 对比两个目录和文件,产生补丁
diff -Naur old new > diff.txt
# 补丁应用
patch -pN < diff.txt
Webmin
- 控制台页面管理OS
- https://www.webmin.com/
用户和组管理
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/etc/skel
-
/etc/spool/mail
每创建一个用户都会默认添加其邮箱目录 ```shell
添加用户
该命令的默认配置文件在/etc/default/useradd文件
useradd vi /etc/default/useradd
修改用户
usermod
新加用户默认登录的配置
vi /etc/login.defs
修改密码
passwd passwd -S user1 # 显示密码状态 passwd -l user1 # 锁定用户 passwd -u user1 # 解锁用户 cat ‘123’ | passwd —stdin user1 # 无交互更新密码 chage -d 0 user1 # 强制用户登录时更改密码
删除用户
userdel user1
用户组管理
groupadd groupmod groupdel
用户切换到其他附属组
newgrp
查看id
id
[Linux的用户和用户组管理.pptx](https://www.yuque.com/attachments/yuque/0/2022/pptx/1491874/1653956178629-0f4c6884-a6e6-4d94-88b3-a9eb154f55d1.pptx)
<a name="TkWaD"></a>
## 权限管理
- chmod/acl 管理的对象是文件或目录
- sudo管理的对象是系统命令,把本来只有root能执行的命令赋给普通用户
<a name="zeLSR"></a>
### ACL
- Access Control List 访问控制列表,权限访问控制非常灵活
- 用于解决用户对文件身份不足的问题(属主、属组、其他三种角色无法满足的情况)
- 就不再考虑属主、属组、其他三种角色的权限控制体系,直接通过ACL给临时用户权限即可
- XFS默认开启了ACL
```shell
# 获取
getfacl
# 设置
setfacl
# 给用户u或组g: NAME 设置 rwx权限 到 PATH目录
setfacl -m [ug]:NAME:[rwx] PATH
# set后 ll查看发现第一列最后一位变成了+,表示设置了acl
ll /test
drwxr-xr-x+ 2 root root 4096 Oct 19 2020 test
### 选项
-R 递归设置,针对已经存在的文件和目录生效
setfacl -m d:[ug]:NAME:[rwx] PATH # 通过d:即default是针对后续创建的文件和目录生效
setfacl -m m:MUSK_NUM PATH # 设置acl的umask
sudo
# 命令编辑配置
visudo
# 其实是编辑配置文件
### 授权的命令在普通用户执行时必须和命令一致(包含参数)
### 所以授权必须是白名单策略,仅仅授予必须的操作
/etc/sudoers
## 文件格式
用户名 IP地址=(可使用的身份) 授权命令必须是绝对路径
用户名 IP地址=(可使用的身份) 授权命令必须是绝对路径[, !排除的命令]
%组名 IP地址=(可使用的身份) 授权命令必须是绝对路径
# 命令
特殊权限和粘滞位StickyBit
- 以下特殊权限非不要不执行
- SetUID SUID 4 s标识
- SetGID SGID 2 s标识
- StickyBit SBIT 1 t标识
```shell
特殊权限位,就是umask显示的最前面的数字
umask 0022 # 特殊权限位就是第一个数字,一般都是0第一位可以设置上面的SUID、SGID、SBIT以及其对应的组合
[test@K8S-Deploy ~]$ ls -l /bin/passwd -rwsr-xr-x. 1 root root 27832 Jan 30 2014 /bin/passwd
这里的-rwsr-xr-x 中的s表示 SUID
group属性的x如果是 s则表示 SGID
other属性的x如果是 t则表示 SBIT,粘着位最具有代表性的就是/tmp
passwd其实是操作 /etc/shadow文件,但这个文件的权限很特殊,所以需要这里的特殊权限
这里的特殊权限表示普通用户在执行命令时临时升级为文件对应的user、group身份
切换身份也是只有在命令执行过程中生效,执行完毕后失效
一般命令只有x权限,设置了特殊权限后权限位会标记为s
如果没有x权限,直接设置特殊权限,则表示为S,再加上x权限后标识为s
[root@K8S-Deploy ~]# ls -dl /tmp/ drwxrwxrwt. 13 root root 4096 May 31 22:21 /tmp/
粘着位只针对目录有效
粘着位表示other对此目录下的文件有写的权限,但修改和删除时只能操作自己创建的文件
从安全来看,为了防止木马和后门,需要定期排查特殊权限的文件和命令,定期diff匹配
find / -perm -4000 -o -perm -2000 >> spetialperm.txt
<a name="w7utd"></a>
### lsattr/chattr
<br /><br />[Linux的权限管理.pptx](https://www.yuque.com/attachments/yuque/0/2022/pptx/1491874/1653956569581-ae339541-9836-474e-9a01-7b2fbf80a4bc.pptx)
<a name="f6ZUt"></a>
## 文件系统管理
<a name="aIeGF"></a>
### 常见FS

<a name="dLCXE"></a>
### 分区

<a name="yanYt"></a>
#### MBR分区
- 主分区最多4个
- 扩展分区最多1个,扩展分区必须再划分成逻辑分区才能使用
- 逻辑分区是在扩展分区内划分
- IDE接口最多支持59个逻辑分区
- SCSI接口最多支持11个逻辑分区
- 主要使用fdisk命令进行处理
<br />
<a name="apNxk"></a>
#### GPT分区
- 主要使用parted命令进行分区
- 交互命令见下面PPT

```shell
# 进入交互模式
parted /dev/sdb
help
mklabel gpt
mkpart
disk1 # 分区名称
ext2 # FS类型
1M # 起始点
5G # 结束点
print # 显示parted信息
help # 看下是否支持交互式格式化,如果支持就格式化,如果不支持就退出后再命令行格式化
quit # 退出后在进行格式化
# 查看分区信息
fdisk -l
# 进行格式化
mkfs -t ext4 /dev/sdb1
mkfs -t xfs /dev/sdb2
# 挂载
mkdir /disk1
mkdir /disk2
mount /dev/sdb1 /disk1
mount /dev/sdb2 /disk2
常用命令
[root@K8S-Deploy ~]# df -haT
Filesystem Type Size Used Avail Use% Mounted on
文件系统 类型 大小 已用 可用 已用占比 挂载点
# 显示目录占用总量
du -sh dir
# 文件系统检测和修复
fsck -y # 自动修复
# 文件和命令相关命令
file
stat
type
# 显示磁盘状态
dumpe2fs # ext4
xfs_info # xfs
fdisk
- 三大步
- 分区
- 格式化
- 挂载
# 添加新硬盘
# 查看新硬盘
fdisk -l
# 执行分区
fdisk /dev/sdb
m # 查看帮助
n # 新建分区
p|e # 新建主/扩展分区
w # 写入磁盘
# 查看分区情况
fdisk -l
# 格式化
mkfs.ext4 /dev/sdb5 # 格式化为ext4
mkfs.xfs /dev/sdb6 # 格式化为xfs
dumpe2fs /dev/sdb5 # 查看信息
xfs_info /dev/sdb6 # 查看信息
# 挂载
## 临时挂载
mkdir /d1 # 创建挂载点
mount /dev/sdb1 /d1 # 挂载
mount # 查看所有挂载的fs
df -haT # 查看所有挂载的fs
## 开机挂载见下图,配置好fstab后使用下面命令查看是否有错误
mount -a
制作swap
# 分区
fdisk /dev/sdb
m # 帮助
n # 新建
p # 主分区
1 # 分区号
2048 # 第一个扇区
+1G # 最后一个扇区
p # 显示分区信息,这里主要查看id字段
t # 更改ID,即FS类型
l # 查看所有ID
82 # 改为swap
p # 显示分区信息,这里再次查看id字段
w # 保存退出
# 格式化
mkswap /dev/sdb1
# 开启
free -h # 查看现有的swap
swapon /dev/sdb1 # 开启新建的swap
# 开机挂载
vi /etc/fstab
/dev/sdb1 swap swap defaults 0 0
磁盘配额
- 针对用户、组限制磁盘使用容量
- 级别
- 软限制
- 硬限制
# 查看内核是否支持配额
grep 'CONFIG_QUOTA' /boot/config-xxx
CONFIG_QUOTA=y #则是开启了支持
# 查看是否支持命令
rpm -qa | grep quota
lvm
- Logical Volume Manage 逻辑卷管理
- 动态调整分区大小 ```shell pvcreate pvs pvdisplay pvremove
vgcreate vgs vgdisplay vgremove vgextend vgreduce
lvcreate -L 3G -n name vg_name lvs lvdisplay lvremove lvextend lvresize -L 7G name # 调整大小,调整后lvdisplay能看到调整后的结果
# 需要调用resize2fs name 后才能在df -haT结果中看到最新大小
lv创建好后就可以格式化fs再挂载使用
mkfs.ext4 /dev/vg_name/lv_name mount /dev/vg_name/lv_name /mylv1 cd /mylv1 ``` Linux的文件系统管理.pptx