shell
定义
shell是系统的用户界面,提供用户和内核交互操作的一种接口
使用
-
交互式命令行:等待用户输入一行一行执行
-
shell脚本:写入一个文件,一起运行
bash shell
[root@localhost ~]# [用户名@主机名 目录名]权限标识
目录名:光标所在目录,家目录:~
权限标识:超级管理员权限:#,普通用户:$
cal命令
用于查看日历
cal -year -m 2020
ls命令
显示指定工作目录下的内容
-a 显示所有文件和目录
-l 加文件型态,权限,拥有者,文件大小
-r 次序相反(原来按照英文字母)
-t 按照建立时间先后
-A 与-a同但是不显示"."目前目录和'..'父目录
-F 文件名加符号 可执行文档:* ,目录:/, 链接:@
可以组合
-
查看当前目录下文件详情,包括隐藏文件
[root@localhost ~]# ls -lha
cd命令
切换工作目录
-
跳转到
/usr/bin
目录下
[root@localhost ~]# cd /usr/bin
跳到上一层 ca..
pwd命令
显示工作目录
echo命令
字符串的输出
-n:不输出尾行换行符
-e: 加反斜线转译
-
\ 反斜线
-
\a 报警符(BEL)
-
\b 退格符
-
\c 禁止尾随的换行符
-
\f 换页符
-
\n 换行符
-
\r 回车符
-
\t 水平制表符
-
\v 纵向制表符
poweroff命令
关机
reboot
重启
whoami
显示用户自身
快捷键、
快捷键 | 作用 |
---|---|
^C | 终止前台运行的程序 |
^D | 退出 等价exit |
^L | 清屏 |
^A | 光标移动到命令行的最前端 |
^E | 光标移动到命令行的后端 |
^U | 删除光标前所有字符 |
^K | 删除光标后所有字符 |
^R | 搜索历史命令,利用关键词 |
帮助命令
history
-c 将目前shell的history命令删除
-a 将新增的命令写入histfiles 默认写入~/.bash_history
-r 将histfiles内容读入到目前shell的history记忆中
-w 将目前history记忆的内容写入到histfiles
-
将history的内容写入一个新的文件中
[root@localhost ~]# history -w histfiles.txt
help命令
-
-d:输出每个主题的简短描述
-
-m:以伪 man 手册的格式显示使用方法
-
-s:为每一个匹配 PATTERN 模式的主题仅显示一个用法
man命令、
在线帮助手册
alias
设置指令别名
[root@localhost ~]# alias wl='ip address' [root@localhost ~]# wl
-
为了让别名永久生效,可以讲修改别名的命令写入
bashrc
文件,这个文件中的命令会在每次登陆命令行的时候执行
[root@localhost ~]# echo "alias wl='ip address'" >> /etc/bashrc
文件管理常见命令
ls:列出目录和文件
cd:切换目录
pwd:显示目前目录
mkdir: 创建新目录 -p递归创建包含上一层目录
rmdir:删除空目录
cp:复制文件或目录
rm:删除文件或目录 -f 忽略不存在 -r递归删除(危险)
mv:移动或修改名称 -f 已存在则覆盖 -i询问
touch
创建文件
cat命令、
-n 从1对输出行编号
-b 不对空白行编号
-s 空行合并
less命令
浏览文件
head命令
查看文件开头部分
-
-q:隐藏文件名,默认是隐藏
-
-v:显示文件名
-
-c<数目>:显示的字节数。
-
-n<行数>:显示的行数。
tail命令
把文本文件里的最尾部的内容显示在屏幕上
-
-f:循环读取
-
-q:隐藏文件名,默认隐藏
-
-v:显示文件名
-
-c<数目>:显示的字节数
-
-n<行数>:显示文件的尾部 n 行内容
-
-s:与-f合用,表示在每次反复的间隔休眠S秒
vim
命令模式,输入模式,末行模式
命令模式
刚启动就是命令模式,
按下i 切换到输入模式,
x删除光标处的字符,
:切换到末行模式
ctrl+f 下一页 +d 下半页
ctrl+b 上一页 +u 上半页
0:移动到一行最起点
$:移动到一行最后
G:移动到最后一行
gg:第一行
文本的替换:
:n1,n2s/word1/word2/g | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 (常用) |
---|---|
:1,$s/word1/word2/g 或 :%s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
输入模式
esc 进入命令模式
末行模式
q退出程序, w保存文件
删除所有文件中的内容:ggdG或者Gdgg
dd:删除一行
ndd:向下删除n行
yy:复制光标所在一行 +n 向下复制n行
p:下一行粘贴 P:上一行粘贴
u:复原上一个动作
Ctrl+r:重做上一个动作
.:重复前一个动作。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了
set nu :设置行号
文件类型
ls -l
-:普通文件
d:目录文件
b:块设备文件
c:字符设备文件
s:套接字文件
p:管道文件
l:链接文件
file
查看文件类型
stat
显示文件时间
A时间:访问时间
M时间:修改时间
C时间:修改状态
文件查找
which
查找环境
locate
用于查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找合乎范本样式条件的文件或目录
find(常用)
find 路径 选项 [查找条件+处理动作]
条件: -name 文件名查找
-iname 忽略大小写
-size +5M 大于5M
-maxdepth 3 -a -name '' 指定目录深度
-a 同时满足 -o 或
-mtime +5 修改时间超过5天
-user wxz 属主是wxz的文件
-group xwz 属组是xwz的文件
-nouser 没有属主
-type d 文件类型
-regex ' ' 正则表达式
用户权限
用户的查看
id
-g 所属群组的idd
-G 附加群组的id
uid
0: root
1~999 系统用户
1000+ 普通用户
相关的文件
passwd文件
保存用户信息
shadow文件
密码过长用x代替,真实的密码保存在shadow中
group文件
用户和组的对应关系,在group文件中保存
用户的管理
添加用户 :groupadd
-
-g:指定新建工作组的 id;
-
-r:创建系统工作组,系统工作组的组ID小于 500;
-
-K:覆盖配置文件
/etc/login.defs
-
-o:允许添加组 ID 号不唯一的工作组。
-
-f:如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。
修改用户组:groupmod
更改群组识别码或名称
-
修改fd组的名字为finance
[root@localhost ~]# groupmod -n finance fd [root@localhost ~]# tail -n 1 /etc/group finance:x:4000:
删除用户组:groupdel
[root@localhost ~]# groupadd test
用户组成员管理:gpasswd
-
-a:添加用户到组;
-
-d:从组删除用户;
-
-A:指定管理员;
-
-M:替换组中的全部用户列表,不包含在内的用户将会从组中删除;
-
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
-
创建用户itadmin,并且将其加入it组
useradd itadmin gpasswd -a itadmin it
用户管理: useradd
为添加的用户指定相应的用户组
[root@localhost ~]# useradd -g root user02
为新添加的用户指定home目录
[root@localhost ~]# useradd -d /home/test user03
不给登录的用户
[root@localhost ~]# useradd -g root user02
切换用户: su
su - 切换到相应的环境变量
修改哦用户 usermod
改变目录:usermod -d /home user01
改变uid:usermod -u 6666 user02
删除用户:userdel
-r 删除目录及其之中的文件
passwd
改密码
change
改密码过期时期
sudoers
创建一些非root用户, 只让它们拥有不完全的权限
文件权限
ll或者ls -l
文件类型(1)+属主权限(3)+属组权限(3)+其他权限(3)
分别是读 写 执行
修改文件属主 chown
设置文件的所有者为root
[root@localhost ~]# chown root anaconda-ks.cfg
拥有者为user11,允许使用的组为it
[root@localhost ~]# chown user11:it file.txt
修改文件权限 chmod
u:拥有者
g:同一个群体(group)
o:其他人
a:表示ugo
八进制语法
1:执行
2:只写
4:只读
所以:rwx==4+2+1
文件访问控制列表
getfacl命名
查看权限列表
getfacl file1
-R递归显示子目录
-e显示所有有效权限
setfacl命令
精确设置文件权限
-R:递归操作子目录
-m:更改文件的访问文件列表
给用户添加acl权限:
[root@localhost ~]# chown root:worker /workdir [root@localhost ~]# chmod 770 /workdir # 不允许其他用户对目录的权限
给user1可读可进入权限
[root@localhost ~]# setfacl -m u:user1:rx /workdir/ [root@localhost ~]# getfacl -c /workdir
移除user1的访问控制权限:
[root@localhost ~]# setfacl -x u:user1 /workdir/ [root@localhost ~]# getfacl -c /workdir/
mask
给用户或群组设定的权限不能超过 mask 规定的权限范围超过无效
-
修改上面案例中的newfile的mask权限
-
[root@localhost ~]# setfacl -m m::rwx /workdir/newfile [root@localhost ~]# getfacl -c /workdir/newfile
特殊权限
suid只能运用在可执行文件上
含义是开放文件所有者的权限给其他用户
chmod 4765 file
-4 设置setuid -2 setgid -1 sticky
sgid
属性可运用于文件或者目录,运用在文件的含义是开放文件所属组的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所属组用户的权限
sticky
权限只能运用于目录上,含义是该目录下所有的文件和子目录只能由所属者删除,即使其的权限是777或者其他
chattr
改变文件属性
-a 仅供追加用途
-b 不更新最后存取时间
-R 递归处理 将文件下的子目录也处理
umask
建立文件时预设的权限掩码
-S 以文字的方式表示
进程
进程类型
1.守护进程:系统引导过程中启动,与终端无关
2.前台进程:通过终端启动
systemd
是一个用户空间程序,属于应用程序,不属于内核
他是linux中初始化系统 -- 第一个加载的进程
systemd unit
单元类型 | 文件格式 | 描述 |
---|---|---|
Service unit | .service | 服务类 |
Target unit | .target | 一个 unit 服务组,用于模拟实现运行级别 |
Automount unit | .automount | 文件系统自动挂载点 |
Device unit | .device | 内核识别的设备文件 |
Mount unit | .mount | 文件系统挂载点 |
Path unit | .path | 文件或目录 |
Scope unit | .scope | 外部创建的进程 |
Slice unit | .slice | A group of hierarchically organized units that manage system processes. |
Snapshot unit | .snapshot | 系统快照 |
Socket unit | .socket | 套接字 |
Swap unit | .swap | 标识 swap 设备 |
Timer unit | .timer | systemd 的计时器 |
管理系统服务
主要命令工具是systemctl
systemctl start name.service | 启动服务 |
---|---|
systemctl stop name.service | 停止服务 |
systemctl restart name.service | 重启服务(没启动的服务会启动) |
systemctl try-restart name.service | 只重启正在运行的服务 |
systemctl reload name.service | 重载配置文件 |
systemctl status name.service systemctl is-active name.service | 检查服务状态检查服务是否启动 |
systemctl list-units --type service --all | 显示所有的服务状态 |
systemctl enable name.service | 启用开机自启服务 |
systemctl disable name.service | 停用自启服务 |
systemctl status name.service systemctl is-enabled name.service | 检查服务状态查看服务是否自启 |
systemctl list-unit-files --type service | 查看所有服务 |
systemctl list-dependencies --after | 列出在指定服务之前启动的服务(依赖) |
systemctl list-dependencies --before | 列出在指定服务之后启动的服务(被依赖) |
ps
长用组合
ps aux
ps -ef
ps -efH
top
显示进程动态
-d 改名更新速度
-c 切换显示模式
-S 积累模式
-s 安全模式 将交互式命令取消
-i 不显示闲置的无用的进程
-n 显示更新速度
-z 彩色
kill
删除执行中的程序或工作
pkil
杀死一个进程,杀死指定名字的所有的进程
-u 指定进程名
-t 指定终端
实例
结束所有的sshd进程
pkill sshd
结束所有的user1的进程
pkill -u user1
进程优先级
相对优先级 nice和PR
值越高优先级越低
PR = Nice + 20
查看进程nice级别
使用ps查看
ps aux pid,command,nice --sort=nice ps aux pid,command,nice,cls --sort=-nice
使用top查看
NI:实际nice级别
PR:将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
PR值是OS动态调整的
renice -20 10267
jobs
查看当前终端放入后台的任务
将任务放到后台
-
在命令后面加空格&,在后台运行
-
命令执行过程中按Ctrl+Z,在后台处于暂停
实例
[root@localhost ~]# top & [root@localhost ~]# vi & [root@localhost ~]# ping baidu.com > /dev/null & # 让ping运行,但是不显示结果 [root@localhost ~]# jobs [1] 已停止 top [2]- 已停止 vi [3]+ 运行中 ping baidu.com > /dev/null &
将任务恢复到前台
bg %工作号
存储管理
目前我们主流的硬盘主要有两种形态,一种是及机械硬盘(HDD),一种是的固态硬盘(SSD)
管理分区
列出分区情况: lsblk
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 47G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sr0 11:0 1 1024M 0 rom
创建分区命令
对于小容量硬盘和需要广泛操作系统兼容性的场景,MBR分区方案仍然是一个可行的选择。而对于大容量硬盘、较新型号主板及高端计算机以及需要更高安全性和数据恢复能力的场景,GPT分区方案则是更好的选择。随着技术的发展和硬件的升级,GPT分区方案将成为未来的主流趋势。
fdisk 管理MRB分区
gdisk 管理GPT分区
parted 高级分区
parted命令
查看分区情况
parted /dev/sda print
设置磁盘的分区表
[root@localhost ~]# parted /dev/sdb mklabel msdos 或者 [root@localhost ~]# parted /dev/sdb mklabel gpt
对磁盘进行分区
[root@localhost ~]# parted /dev/sdb mkpart primary 1 200M
删除分区
[root@localhost ~]# parted /dev/sdb rm 1
fdisk 和 gdisk工具
参数 | 作用 |
---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区信息 |
w | 保存并退出 |
q | 不保存直接退出 |
mkfs工具
在特定分区建立文件系统
mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
实例
-
实例,使用parted分区,然后使用mkfs创建ext4文件系统
[root@localhost ~]# parted /dev/sdb mklabel gpt [root@localhost ~]# parted /dev/sdb mkpart primary 0 10G [root@localhost ~]# mkfs.ext4 /dev/sdb1 [root@localhost ~]# parted /dev/sdb print
mount
挂在文件系统
-
实例,挂载分区
/dev/sdb1
到/mnt/volume1
下,并且设置为永久自动挂载
[root@localhost ~]# mkdir -p /mnt/volume1 [root@localhost ~]# mount /dev/sdb1 /mnt/volume1 [root@localhost ~]# df -h # 卸载sdb1 [root@localhost ~]# umount /dev/sdb1 [root@localhost ~]# vim /etc/fstab /dev/sdb1 /mnt/volume1 ext4 defaults 0 0 [root@localhost ~]# mount -a
umnout
撤销已经挂载的设备文件
df -h
显示磁盘空间
du
查看某个目录下文件数据的占用量
du -sh /etc
添加交换区
在硬盘中预先划分一定的空间,把内存中暂时不常用的数据临时存放到硬盘中
交换分区的大小一般为真实物理内存的1.5~2倍
mkswap /dev/sdb2 free -h swapon /dev/sdb2 vim /etc/fstab UUID=ff13d896-a59e-430d-8d14-3997d19f5de9 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/sdb1 /data1 ext4 defaults 0 0 /dev/sdb2 swap swap defaults 0 0
quota
安装:yum install -y quota
显示空间已经使用的空间与限制
查看指定用户的磁盘配额和已使用空间:
quota -u username
查看指定群组的磁盘配额
quota -g groupname
显示所有用户的磁盘配额:
quota -au
查看指定文件系统的磁盘配额:
quota -f /path/to/filesystem
软连接和硬链接
硬链接:原始文件被删除,依然可以通过硬链接文件来访问。
软连接不能
In
用于创建链接文件
软连接实例
[root@localhost ~]# echo "hello" > test [root@localhost ~]# ln -s test test123 [root@localhost ~]# cat test123 hello [root@localhost ~]# ls -l test -rw-r--r--. 1 root root 6 Apr 12 06:10 test [root@localhost ~]# rm -f test [root@localhost ~]# cat test123 cat: test123: No such file or directory
硬链接没有-s
磁盘阵列RAID
RADI O :
数据的并行读写,性能拉满没有容错,一步错全部错
RAID 1:
镜像磁盘,有备份的数据副本
RAID 5:
当其中一个硬盘驱动器发生故障时,剩余的硬盘驱动器可以通过计算奇偶校验信息来恢复丢失的数据。
RAID 10:
数据首先被镜像到两个或多个磁盘上(这类似于RAID 1),然后这些镜像组(也称为条带对)再被条带化到多个磁盘对上,以实现数据的并行访问(这类似于RAID 0)。
mdadm命令
RAID阵列的创建,调整,监控.删除等全套管理操作
# 基本语法 mdadm [mode] <raid-device> [options] <component-devices> # mode表示操作模式例如Creat Assemble(装配) # <r-d>表示要操作的设备名,例如/dev/md0 # option是操作的附加选项 # <c-d>阵列的成员设备
如何正确挂载
-
创建文件系统
在挂载事前确保分区或设备有一个有效的文件系统.如果没有则用mkfs.xfs或者mkfs.ext4来创建
mkfs.xfs /dev/md0 mkfs.ext4 /dev/md0
-
创建挂载点
挂载点是一个目录,你需要有一个目录.
mkdir /mnt/myraid
-
挂在文件系统
用mount命令将文件系统挂载到之前创建的挂挂载点
mount /dev/md0 /mnt/myraid
-
验证挂载
df -h
-
修改/etc/fstab 已自动挂载
/dev/md0 /mnt/myraid xfs defaults 0 0
LVM
PE最小存储单元,VG通过PV组合PE,成一个整体,然后LV再从VG中分出来挂载
LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。
部署逻辑卷
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc #添加两块硬盘支持LVM技术 [root@localhost ~]# vgcreate storage /dev/sdb /devsdc #加到卷组shorage中 [root@localhost ~]# vgdisplay stprage #显示卷组 [root@localhost ~]# lvcreate -n vo -l 37 -I 8M storage #切割出一个约为150MB的逻辑卷 [root@localhost ~]# mkfs.ext4 /dev/storage/vo #格式化并挂载 [root@localhost ~]# mkdir /mnt/vo [root@localhost ~]# mount dev/storage/vo /mnt/vo [root@localhost ~]# fd -h [root@localhost ~]# echo "/dev/storage/vo /mnt/vo ext4 defaults 0 0" >> /etc/fstabecho
卷轴扩容
[root@localhost ~]# lvextend -L 290M /dev/storage/vo [root@localhost ~]# e2fsck -f /dev/storage/vo
卷轴缩小
[root@localhost ~]# umount /mnt/vo [root@localhost ~]# e2fsck -f /dev/storage/vo [root@localhost ~]# resize2fs /dev/storage/vo 120M
卷轴快照
[root@localhost ~]# vgdisplay [root@localhost ~]# ls -l /mnt/vo [root@localhost ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo
软件包
-
源码包:需要编译
-
二进制包:已经编译
yum
下载安装的工具
官方源
查看默认的源
[root@localhost ~]# yum repolist
软键源存放得位置: /etc/yum.repos.d/
移除所有的源
# 先移除原有的所有源 [root@localhost ~]# rm -f /etc/yum.repo.d/* # 通过curl命令来下载阿里云的源,并且放到/etc/yum.repi.d/下面 [root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo [root@localhost ~]# yum clean all [root@localhost ~]# yum makecache [root@localhost ~]# yum repolist
yum常用命令
yum clean all # 清空缓存 yum makecache # 重建缓存 yum repolist #查询可用的仓库
查看软件包
yum provides pstree yum provides /etc/ssh/sshd_config yum search pstree
卸载
[root@localhost ~]# yum -y remove httpd [root@localhost ~]# yum -y groupmove httpd
历史记录
[root@localhost ~]# yum history
RPM
将rpm包下载到本地,之后在安装
[root@atopos ~]# rpm -ivh httpd-2.4.6-93.el7.centos.x86_64.rpm
卸载
[root@atopos ~]# rpm -e vim-enhanced
编译
-
指定安装路径,设置功能,生成马克file
./configure
-
make
Makefile文件编译。可以加 -j 2 参数使用两个cpu核心进行编译
-
make install
-
make clean
数据通信基础
DNS(域名解析)
一套从域名到IP的映射的协议
域名解析过程
-
浏览器发起域名解析,查找有没有缓存,没有就查找hosts文件,没有再提出域名解析请求
-
将请求发送给本地服务器
-
接受请求后,查找本地的缓存,有就发回,没有本地服务器就把请求发给根域名服务器,根域名服务器给本地服务器发送对应的地址
-
重复3,直到找到正确的记录
-
本地域名服务区把结果保存放到缓存,同时把结果返回给客户机
配置网络服务
使用nmtui
#改成中文 LANG="en_US.UTF-8"
命令行配置
[root@localhost ~]# vim /etc/sysconfig/cntwork-scripts/ifcfg-ens?? [root@localhost ~]# systemctl restart network network
nmcli
完成网卡上的所有配置工作
. 查看接口状态
[root@localhost ~]# nmcil device status
. 查看链接信息
[root@localhost ~]# nmcli connection show
. 配置ip
[root@localhost ~]# nmcli con mod "ens33" ipv4.address 192.168.142.100/24 ipv4.getway 192.168.142.2 ipv4.dns "8.8.8.8,4.4.4.4"ipv4.method manual
. 启动停止删除接口
[root@localhost ~]# nmcli connection up ens33 [root@localhost ~]# nmcli connection down ens33 [root@localhost ~]# nmcli connection delete dhcp-ens33
ifconfig
显示或设置网络设备
防火墙
常用软件防火墙工具: iptables和firewalld
真正的防火墙:内核中的netfilter(网络过滤器)
五链
设置数据过滤或处理数据包的策略叫做规则,将多个规则合成一个链,叫规则链
PEREOUTING (prerouting)
路由前的判断规则
INPUT
入站前的数据包
OUTUT
出战的数据包
FORPUT(forward)
处理转发的数据包
POSTROUTING(postouting)
由判断之后所要进行的规则
四表
raw表
确定对数据包的跟踪状态
mangle
数据的标记
nat表
修改数据包中的源,目标IP或端口
filter表
是否放行该数据包
四标顺序
raw--- mangle--- forward --- postrouting
iptables
-t: 指定表 默认是filter
-A: 添加规则,加上到哪一个链上
-j: 设置处理策略
-s: 指定数据包的来源地址
-p: 指定数据包的协议类型
增加规则
案例一:屏蔽其他主机上的ping包
[root@localhost ~]# iptables -A INPUT -s 192.168.142.100 -p icmp -j DROP [root@localhost ~]# iptables -A INPUT -s 192.168.88.100 -j ACCEPT # 目标来自 192.168.88.100 这个 IP 的封包都予以接受 [root@localhost ~]# iptables -A INPUT -s 192.168.88.0/24 -j ACCEPT [root@localhost ~]# iptables -A INPUT -s 192.168.88.10 -j DROP # 192.168.88.0/24 可接受,但 192.168.88.10 丢弃
案例二:屏蔽Linux系统中的远程链接服务(sshd)
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
查看规则
[root@localhost ~]# iptables -vnl INOUT -t filter --line-numbers [root@localhost ~]# iptables -nl -t nat
删除规则
[root@localhost ~]# iptables -t nat -nl --line-numbers [root@localhost ~]# iptables -D INOUT 1
[root@localhost ~]# iptables -D INOUT -p tcp --dport 80 -j DROP
清空所有规则
[root@localhost ~]# iptables -F
修改规则 -R
[root@localhost ~]# iptables -R INOUT 1 -p tcp --dport 8080 -j ACCEPT [root@localhost ~]# iptables -t filter -R INPUT 1 -p tcp --dport 80 -j ACCEPT
自定义链
自定义一个WEB_CHAIN链
# 查看所有的系统链 [root@localhost ~]# iptables -L # 添加自定义链 [root@localhost ~]# iptables -t filter -N web_chain # -E 修改自定义链 [root@localhost ~]# iptables -t filter -E web_chain WEB_CHAIN # 链中添加规则,开放80端口 [root@localhost ~]# iptables -t filter -A WEB_CHAIN -p tcp -m multiport --dports 80,433 -j ACCEPT
删除自定义链
[root@localhost ~]# iptables -t filter -F WEB_CHAIN [root@localhost ~]# iptables -t filter -X WEB_CHAIN
规则的保护和恢复
# 保存到文件 [root@localhost ~]# iptables-save > /etc/sysconfig/iptables-config # 文件中到导入规则 [root@localhost ~]# iptables-restore < /etc/sysconfig/iptables-config
内网的数据代理及服务映射
背景:现在有两个服务器server1和server2,server1是可以上网的,server2是不可以上网的,我们需要在server1上配置NAT来让server2通过server1去访问外网,同样我们也可以通过server1来访问位于server2服务器上的内部网站
[root@localhost ~]# yum install -y httpd [root@localhost ~]# systemctl start httpd [root@localhost ~]# systemctl start firewalld [root@localhost ~]# ss -nlt # 1. 配置仅主机模式网卡的IP地址 # 2. 在server1中linux内核中开启数据转发的功能 [root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/50-default.conf [root@localhost ~]# sysctl -w net.ipv4.ip_forward=1 [root@localhost ~]# sysctl -p # 或者[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward # 3. 访问外网的测试 ping baidu.com
配置SNA让server2能网上冲浪
# server1 [root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.142.0/24 -j SNAT --to-source 192.168.142.100
配置DNAT使可以访问server2中的内部网站
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.142.100:80
转发本地端口
[root@localhost ~]# iptables -t nat -A PREROUTING -p tcp --dport 6666 -j REDIRCT --to-port 22
firewalld
管理工具-firewall-cmd
# 查看firewalld是否启用,是出于action的状态 [root@localhost ~]# systemctl status firewalld # 查看当前所在的区域 [root@localhost ~]# firewalld-cmd --get-default-zone public # 查看网卡所在区域 [root@localhost ~]# firewalld-cmd --get-zone-of-interface=ens33 public # 查询public区域是否允许请求SSH或者HTTP协议的流量 [root@localhost ~]# firewalld-cmd --zone=pubilc --query-service=ssh [root@localhost ~]# firewall-cmd --zone=public --query-service=http
#修改策略 方法一:根据服务协议放行 [root@localhost ~]# firewalld-cmd -permanent --zone=public --add-service=httpd 方法二:根据端口号放行 [root@localhost ~]# firewalld-cmd --permanent --zone=public -add-port=80/tcp
端口转发
[root@localhost ~]# firewall-cmd --permanent --add-forward-port=port=6666:proto=tcp:toport=22 success [root@localhost ~]# firewall-cmd --reload
服务访问控制
TCP Wrappers是一种用于网络服务访问控制的工具,它使用配置文件中的规则来决定是否允许或拒绝对特定网络服务的访问。控制列表由两个主要文件组成:/etc/hosts.allow和/etc/hosts.deny。这些文件包含服务和客户端的规则,用于控制服务的访问权限
[root@localhost ~]# vim /etc/hosts.deny
SELinux安全子系统
SELinux是一个强大的访问控制机制,建立在Linux内核上,为系统提供了安全策略控制.
SELinux采用基于角色(role)和类型(type)的强制访问控制.
简单说,SELinux主要作用就是最大限度的减小系统服务进程可访问的资源(最小资源原则)
调整SELinux的模式
# 临时 ## 查看当前模式 [root@localhost ~]# getenforce Enforcing ## 临时调整为permissive [root@localhost ~]# setenforce 0 [0]为permissive,只记录不阻止
# 永久 [root@localhost ~]# vim /etc/selinux/config SELINUX=enforcing SELINUXTYPRE=targeted
自主访问控制(DAC)
在没有使用SELinux的操作系统中,决定一个资源是否能访问的因素是:某个资源是否拥有对应用户的权限
但是root不受管制,都可以访问的
这种权限管理机制的主体是用户,也称为自主访问控制(DAC)
强制访问
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限
即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小
这种权限管理机制的主体是进程,也称为强制访问控制(MAC)
计划任务
单次调动执行at
yum install -y at # 启动 [root@localhost ~]# systemctl start atd [root@localhost ~]# systemctl enable atd
语法结构
at [option] time
选项
-f 指定包含任务的文
-q 指定新任务的队列名称
-l 指定待执行的任务列表
-d 指定删除的待执行任务
atq : 查看待执行任务
atrm : 通过序号删除任务
timespec
now +5min # 从现在开始5分钟后 teatime tomorrow # 明天的下午16:00 noon +4 days # 4天后的中午 11:20 AM # 早上11:20 .....
循环调度执行cron
# 检查是否启动 [root@localhost ~]# systemctl status crond.service # 启动 [root@localhost ~]# systemctl start crond.service
cron的基本语法
[root@localhost ~]#crontab -l # 列出当前计划任务 [root@localhost ~]#crontab -r # 删除当前计划任务 [root@localhost ~]#crontab -e # 编辑当前计划任务 [root@localhost ~]#vim /etc/cron.deny # 加入的用户不能使用cron
cron任务的格式
分 时 日 月 星期 命令 * 表示任何数字都符合 0 2 * * * date >> date.txt # 每天的2点 0 2 14 * * date >> date.txt # 每月14号2点 0 2 14 2 * date >> date.txt # 每年2月14号2点 0 2 * * 5 date >> date.txt # 每个星期5的2点 0 2 * 6 5 date >> date.txt # 每年6月份的星期5的2点 0 2 2 * 5 date >> date.txt # 每月2号或者星期5的2点 星期和日同时存在,那么就是或的关系 0 2 2 6 5 date >> date.txt # 每年6月2号或者星期5的2点
存放位置
/var/spool/cron/root
日志管理
都在/var/log下
查看日志
cat tail 配合grep
日志系统-rsyslogd
rsyslogd:绝大部分日志系统,和操作系统有关,安全,认证sshd,su,计划任务
配置文件
[root@localhost ~]# rmp -qc rsyslog /etc/logrotate.d/syslog # 日志轮转(切割)相关 /etc/rsyslog.conf # rsyslogd的主配置文件 /etc/sysconfig/rsyslog # rsyslogd相关文件
##logrotate(日志轮转)
[root@localhost ~]# ll /etc/cron.daily [root@localhost ~]# cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf # 日志轮转状态/var/lib/logrotate/logrotate.status # 日志轮转规则按照/etc/logrotate.conf中来
logrotate主配置文件
[root@localhost ~]# vim /etc/logrotate.conf
子配置文件
[root@localhost ~]# cat /etc/logrotate.d/syslog
I/O重定向
标准输入 0
标准正确输入 1
标准错误输出 2
[root@localhost ~]# date 1> date.txt [root@localhost ~]# cat date.txt
[root@localhost ~]# date >> date.txt [root@localhost ~]# date >> date.txt [root@localhost ~]# date >> date.txt [root@localhost ~]# cat date.txt
[root@localhost ~]# touch file [root@localhost ~]# cd file bash: cd: file: 不是目录 [root@localhost ~]# cd file 2> log.txt [root@localhost ~]# cat log.txt bash: cd: file: 不是目录
[root@localhost ~]# ls /home/ /test ls: 无法访问/test: 没有那个文件或目录 /home/: user01 #将正确和错误的输出都输出的文件中 [root@localhost ~]# ls /home/ /test &> log.txt [root@localhost ~]# cat log.txt ls: 无法访问/test: 没有那个文件或目录 /home/: user01
[root@localhost ~]# ls /home/ /test > log.txt ls: 无法访问/test: 没有那个文件或目录 [root@localhost ~]# ls /home/ /test > log.txt 2>&1 [root@localhost ~]# cat log.txt ls: 无法访问/test: 没有那个文件或目录 /home/:标签:文件,--,dev,基础知识,etc,Linux,root,localhost From: https://blog.csdn.net/yinsangs/article/details/140910756