Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但他们都是用了Linux内核。
Linux特点:多用户、多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性,良好的用户界面,出色的速度,开源。 一切皆文件
常见子目录的作用
/root:系统管理员的root宿主目录
/home:普通用户的宿主目录
/boot:系统内核、启动文件
/dev:设备文件
/etc:配置文件
/bin:所有用户可执行的命令
/sbin:管理员可执行的管理命令
/usr:应用程序
/var:日志文件
编辑Linux命令行
TAB键:自动补齐,查错
反斜杠\:强制换行
Ctrl+L:清屏 (clear命令)
Ctrl+U:清空至行首
Ctrl+K:清空至行尾
Ctrl+C:取消本次命令编辑
Ctrl+Z:停止运行并移至后台 (命令后面加 & ,后台继续运行,jobs命令查看运行)
上下方向键:回看执行过的命令
软、硬连接区别
硬链接本质是一个文件,有相同的inode号,创建新的硬链接,连接赎回增加,删除硬链接,连接数会减少。不支持文件夹;删除源文件,只是链接数减一,但链接的文件访问不受影响;文件类型和源文件相同,大小也和源文件相同。
软连接本质不是一个文件,拥有不用的inode号,连接数删除、新建都不会改变;支持文件夹;删除源文件后无法访问连接文件;链接文件文件类型和源文件无关;文件大小是源文件的路径长度;
硬链接:ln /data/xxx.txt /data/xxxx.txt
软连接:ln -s xxx.txt /opt/xxxx.txt
cd命令
cd 目标位置:切换到目标位置
cd ~:切换到家目录
cd -:切换到上一次执行cd命令之前所在的目录
cd ..:切换到上一级目录
cd /:切换到根目录
cd /目标位置:绝对路径(vim里写的都是绝对路径)
rm 命令
-f:强制
-i:交互
-r:递归
通常使用 :rm -rf 强制删除
mv命令
mv xxx /移动到根目录
mv xxx/ xx/ xxx改名为xx
cp命令
cp(copy)拷贝,也称为备份
-f:覆盖同名文件时不再进行提醒,直接强行复制
-i:覆盖同名文件时会提醒(加不加都会提醒)
-p:复制时保持原文件的权限、属主及时间标记等属性不变
-r:递归复制所有文件及子目录
-v:可视化
mkdir命令
make directories 创建新目录
mkdir -p :递归创建目录
du命令
查看当前所在文件夹的总磁盘占有量
-a:统计磁盘占用的所有文件及目录
-h:更人性化的方式显示
-s:只统计所占空间的总大小
--max-depth=n:最大显示到第n层
--exclude:不计入统计
ls命令
-l:以长格式显示文件和目录列表
-a:显示全部文件包括隐藏文件
-A:显示全部文件或隐藏文件,但不包括.和..
-h:友好人性化显示文件大小
-R:递归显示该目录和子目录下的内容
pwd (print work directory)
显示当前路径
颜色表示文件类型:
黑色:数据文件 普通文件
绿色:可执行文件
黄色:块设备文件、硬件设备(硬盘)
红色:压缩包
蓝色:文件夹
天蓝色:链接文件
find查找文件或目录
按名称查找 -name :根据目标文件的名称进行查找,允许使用“*”及“?”通配符
按文件大小查找 -size:根据目标文件的大小进行查找,一般使用“+”、“-”设置超过或小于作为条件进行查找,常用的容量单位包括kB、MB、GB
按文件属主查找 -user:根据文件是否属于目标用户进行查找
按文件类型查找 -type:根据文件的类型进行查找
find /etc/ -name passwd
find /etc/ -size -10M -a -name *img
find /etc/ -maxdepth 2
grep过滤
-v 取反
-o 只显示匹配的内容
-r 递归过滤
-n 查找到内容同时标记所在行
-w 精确查找(完整字符串)
压缩命令gzip、bzip2、zip、tar
zip [-r] [压缩后的文件名] [文件或目录]
解压缩:unzip :unzip [选项] 文件名
gzip [-9] 文件名
bzip2 [-9] 文件名
gzip -d .gz的格式的压缩文件
bzip2 -d .bz2的格式的压缩文件
tar -zcvf .gz/.bz2的格式的文件 (压缩)
tar -zxvf .gz的格式的文件 (解压缩)
tar -jcvf .bz2的格式的文件 (压缩)
tar -jxvf .gz的格式的文件 (解压缩)
tar -c:创建.tar格式的包文件
tar -x:解开.tar格式的包文件
tar -C:解压时指定释放的目标文件夹(绝对路径)
tar -f:表示使用归档文件
tar -v:输出线系信息
tar -j:调用bzip2程序进行压缩或解压
tar -z:调用gzip程序进行压缩或解压
cat
cat -n:显示行号,包括没有文件或目录的
cat -b:空格行不在编行号
cat -s:把连续的空行压缩成一行
显示文件的四条命令
more:从头开始显示文件路径
less:从下往上查看文件
head:从头开始显示十条(默认) 也可以加 -n 规定显示多少行
tail :从尾部开始显示十条(默认),动态查看(最主要的内容)
tail -f /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
tail -f /var/log/secure 与安全相关的日志信息
tail -f /var/log/maillog 与邮件相关的日志信息
tail -f /var/log/cron 与定时任务相关的日志信息
tail -f /var/log/spooler 与UUCP和news设备相关的日志信息
tail -f /var/log/boot.log 守护进程启动和停止相关的日志消息
wc
wc -w:显示行数
wc -c:字节数
wc -l:显示行数、有数据的行数、字节数、文件名
vim
a:在当前光标位置之后插入内容
i:在当前光标位置之前插入内容
o:在光标所在行之下插入一个新行内容
O:在光标所在行之上插入一个新行内容
A:在所在行的行尾插入内容
l:在所在行的行首插入内容
L:在当前页面的最后一行
G:最后一行
gg:第一行
数字 gg:第几行
dd:删除光标所在行
数字dd:删除(剪切)从光标所在行开始往下的 数字行数
数字 yy:复制
数字 pp:粘贴
p!:不保存强行退出
wp!:保存强行退出
/xxx:查找xxx
s /xx/xxx/ :将当前行中查找到的第一个xx换为xxx
s /xx/xxx/g :将当前行中所有xx换为xxx
#,# s/xx/xxx/g :在行号#,#的范围内替换所有字符串xx为xxx
%s s/xx/xxx/g/:在整个文件中替换所有字符串xx为xxx
查询已安装的rpm软件信息
rpm -q 软件名 #查询指定软件是否已安装
rpm -qc 软件名 #列出已安装的指定软件的配置文件
rpm -qf 文件或目录 #查询已安装的指定软件属于哪个安装包
rpm -qa | grep -i postfix #查询软件postfix是否已安装
rpm --rebuilddb或者rpm --initdb 维护RPM数据库
配置本地yum源
mount /dev/cdrom /mnt
cd/etc/yum.repos.d
mkdir backup #备份
mv C* backup
vim local.repo
[local]
name=local
baseurl=file:///mnt
enabled=1 #开启此yum源,此为默认项,可省略
gpgcheck=0 #不去检查软件的序列号
wq!
yum clean all && yum makecache #删除yum缓存并更新
简单shell脚本安装
#!bin/bash
tar -jxvf/opt/httpd-2.4.29.tar.bz2
sleep 5 #暂停5秒
cd/opt/httpd-2.4.29
yum install apr* gcc*pcre* -y
/configue --prefix=/usr/local/apache
make && make install
systemctl stop firewalld
setenforce 0
/usr/local/apache/bin/apachectl start
Netstat -antp | grep 80
yum list 显示所有可用包单个的可安装包
yum info 显示所有可用包的信息单个具体的信息
yum search 模糊查找所有的相关信息
yum provides 精确查找
yum install 安装具体软件包
yum groupisntall 安装具体软件包
su
su:可以表示刷新
su 命令:只是切换了root的身份,但是shell环境、环境变量、工作目录等还都是普通用户的shell;
su - 命令:完全的切换到root用户,shell、环境变量等都是root用户,包括工作目录;
root切换用户不用密码,用户切root和普通用户之间切换都需要密码。
添加用户账号:useradd
-d:指定用户的宿主目录位置
-e:指定用户的账户失效时间(可使用YYYY-MM-DD格式)
-g:指定用户的基本组名(对应的组名必须已存在)
-G:指定用户的附加组名 (对应的组名必须已存在)
-u:指定用户的UID号,要求该UID号码未被其他用户使用。
-M:不建立宿主目录
-s:指定用户的登录Shell
删除用户账号 userdel
为用户账号设置密码 :passwd
-d:清空指定用户的密码,仅使用用户名即可登录系统
-l:锁定用户账户,锁定的用户账号将无法再登录系统
-S:查看用户账户的状态(是否被锁定)
-u:解锁用户账户
passwd 用户名
※ echo 123 | passwd --stdin 用户名
修改用户账号属性:usermod
-u:修改用户的 UID 号。usermod -u uid号 用户名
-d:修改用户的宿主目录位置。
-e:修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式。
-g:修改用户的基本组名(或使用 GID 号)。
-G:修改用户的附加组名(或使用 GID 号)。
-s:指定用户的登录 Shell。
-l:更改用户账号的登录名称。
-L:锁定用户账户。
-U:解锁用户账户。
出现-bash-4.2$的解决方法:
[root@localhost home]# cp /etc/skel/.bashrc /home/666/
[root@localhost home]# cp /etc/skel/.bash_profile /home/666/
[root@localhost home]# chown 999:999 /home/666/.bash_profile
[root@localhost home]# chown 999:999 /home/666/.bashrc
设置目录和文件的权限:chmod
chmod 777 文件名
文件的默认权限是:666 目录的默认权限:777
设置目录和文件的归属 chown
chown root:root 文件名
chown :属组 文件或目录
chown 属主:属组 文件或目录
chown 属主: 文件或目录
磁盘分区
原因:
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个os
采用不同文件系统
优点
便于管理
优化读写性能
缺点
一旦建立无法修改,如果要修改,只能推倒重建,重新格式化,数据丢失
不够灵活,空间只能来于一块硬盘,并且必须是连续的空间
没有备份冗余功能,没有备份,需要依靠工程师手动备份
fdisk
交互模式中的常用指令
m、p、 n、 d、 t、 w、q
m:获取帮助菜单
n:新建分区
p:查看分区情况
d:删除分区
t:变更分区的类型
w:保存分区操作并退出
q:不保存分区操作并退出
1.若磁盘小于2TB,可用fdisk /dev/sdb 进行分区,即MBR 分区格式
2.若磁盘大于2TB,可用parted /dev/sdb 进行分区,因为MBR分区磁盘是不能大于2.2TB,所以超过2TB一般使用GPT
管理磁盘分区:
fdisk /dev/sdb
交互模式中的常用指令:
m:获取帮助菜单
n:新建分区
p:查看分区情况
d:删除分区
t:变更分区的类型
w:保存分区操作并退出
q:不保存分区操作并退出
mkfs.文件系统类型 /dev/sdb1
挂载:mount /存储设备 /挂载点目录/
(先格式化,才能挂载)
mount -a 刷新挂载
umount -l 懒解挂载
umount -f 强制解挂载
自动挂载
vim /etc/fstab
/dev/sdb1 /opt xfs defaults 0 0
/dev/sr0 /mnt iso9660 defaults 0 0
df [选项]
-h:显示分区的容量单位
-T:显示文件系统的类型
-i:显示分区的inode号码数量
LVM管理
配置物理卷:pvcreate /dev/sdb1 /dev/sdc1
配置卷组:vgcreate [名字] /dev/sdb1 /dev/sdc1
配置逻辑卷:lvcreate -L +20G -n [逻辑卷名] [ 卷组名]
格式化逻辑卷:mkfs.xfs /dev/[卷组名]/[逻辑卷名]
ext4可以磁盘缩减,xfs不能磁盘缩减,缩减会影响业务
实现磁盘限额的条件
需要Linux内核支持
安装xfsprogs与quota软件包
Linux磁盘限额的特点
作用范围:针对指定的文件系统(分区)
限制对象:用户账号、组账号
限制类型:磁盘容量、文件数量
限制方法:软限制、硬限制
RAID
![](https://i-blog.csdnimg.cn/blog_migrate/32882269f4fb3a35d65035b6c316f80f.png)
热备盘
热备盘就相当于RAID阵列的备份,当RAID阵列坏掉的盘的数量超出了RAID阵列最大限制时,再加了热备盘以后,热备盘就会临时顶替换掉的盘,继续维持原来盘的数据正常运转,相当于磁盘的最后一层保险
mdadm命令:
-C:表示新建
-v:显示创建过程中的详细信息。
/dev/md5:创建 RAID5 的名称。
-a yes:–auto,表示如果有什么设备文件没有存在的话就自动创建,可省略。
-l:指定 RAID 的级别,l5 表示创建 RAID5。
-n:指定使用几块硬盘创建 RAID,n3 表示使用 3 块硬盘创建 RAID。
/dev/sd[bcd]1:指定使用这四块磁盘分区去创建 RAID。
-x:指定使用几块硬盘做RAID的热备用盘,-x1表示保留1块空闲的硬盘作备用
/dev/sde1:指定用作于备用的磁盘
r:移除设备
-a:添加设备
-S:停止RAID
-A:启动RAID
创建RAID5:mdadm -C -v /dev/md5 -l5 -n3 /dev/sd[b-d]1 -x1 /dev/sde1
创建RAID10:mdadm -Cv /dev/md0 -l10 -n4 -x1 /dev/sd{b,c,d,e,f}1
iostat 显示所有设备负载情况:
[root@localhost ~]# iostat
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 02/27/2023 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.34 0.09 0.33 0.01 0.00 99.22
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.00 0.00 48 0
scd1 0.00 0.11 0.00 3096 0
sda 2.37 37.19 87.47 1038691 2442982
sdb 0.33 150.26 0.00 4196830 17
sdc 0.33 150.24 0.00 4196306 17
sdd 0.33 0.20 150.03 5574 4190225
sde 0.01 0.20 0.00 5578 17
sdf 0.00 0.04 0.00 1044 0
md5 0.00 0.04 0.00 1044 0
cpu属性值说明:
**%user:**CPU处在用户模式下的时间百分比
**%nice:**CPU处在带NICE值的用户模式下的时间百分比
**%system:**CPU处在系统模式下的时间百分比
**%iowait:**CPU等待输入数时间的百分比
**%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比
**%idle:**CPU空闲时间百分比
PS:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高单系统响应慢时,有可能时CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
Linux操作系统的引导过程
开机自检
MBR引导
启动GRUB菜单
加载Linux内核
init进程初始化
修改linux root密码
重新启动,在GRUB界面按e进入编辑模式,在linux行找到ro字段,修改为rw init=/sysroot/bin/sh
改完ctrl+x进入紧急模式
加载完,输入#chroot /sysroot
#passwd
#touch ./autorelabel //创建文件,让系统重新启动时能够识别修改
#exit
#reboot
安全起见,为GRUB设置密码
查看系统启动耗时
systemd-analyze
线程与进程
线程就是程序的副本,就是把进程复制了一份,只复制了进程的一部分代码。真正执行的是线程而不是进程。“是进程的打工仔”
父进程与子进程
父进程先启动,子进程才启动。分配资源:父进程给子进程分配资源
结束运行:子进程先结束,父进程收回子进程的资源之后,父进程才会终止。
ps命令
查看静态的进程统计信息
ps aux
a:显示终端上的所有进程,包括其他用户的进程
u:表示列出进程的用户
x:显示所有终端的进程信息
ps -elf
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息
-a:显示所有进程pid
-T:查看线程信息
ps -elf | grep ppid
僵尸进程 Z
一个进程结束了,但是如果该进程的父进程已经结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
TOP命令
第一行:任务队列信息
第二行:进程信息
第三行:为CPU的信息
第四行:内存的信息
第五行:交换空间的信息
crontab任务配置
![](https://i-blog.csdnimg.cn/blog_migrate/8c55d882c2698fbab5c0d8cbec113a57.png)
#周的数字为 0 或 7 时,都代表“星期天”的意思。
netstat常见选项:
常用选项 作用
-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。
-n 以数字的形式显示相关的主机地址、端1等信息。
-t 查看TCP相关的信息。
-u 显示UDP协议相关的信息。
-p 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-r 显示路由表信息。
-l 显示处于监听状态的网络连接及端口信息。
inode
inode也会消耗硬盘空间:每个inode的大小一般是128字节或256字节
df -i命令可以查看每个硬盘分区的inode总数和已使用的量
xfsdump备份xfsdump
init
init 0 systemctl isolate poweroff.targetsystemctl poweroff poweroff 关机
init 1 systemctl isolate rescue.target 切换单用户模式
init 3 systemctl isolate multi-user.target 切换字符界面多用户模式
init 5 systemctl isolate graphical.target 切换图形界面多用户模式
init 6 systemctl isolate reboot.targetsystemctl reboot reboot 重启
硬盘满了,该如何解决?
答案:①删除没有用的文件,删除了一个大文件但是磁盘没有释放空间,原因是文件还在被使用。
解决方法删除之前:echo “ ”>/大文件。将文件重定向为空。
删除之后:lsof | grep delete显示打开的文件并过滤删除的文件,
然后kill 杀死这个寻找到的进程。
②申请加硬盘
找到大于7天大于1g的普通文件并删除,一条命令解决。
答案:find -mtime +7 -type f -size +1G -delete
面试题:如何将俩个文件合并成一个文件?
答案:上下合成 cat 1.txt 2.txt >3.txt
答案:左右合成 paste 1.txt 2.txt >3.txt
我现在有一个文件夹,有很多文件,请快速过滤出这个文件夹下所有含有root字符串的文件。
答案:grep -rw root 文件夹
实时查看某软件运行的报错日志最后20行,目录/var/log/soft.log
答案: tail -f -n 20 /var/log/soft.log
cp /etc/passwd /opt/xxx :
cp的命令需要的最低权限 : 执行
passwd这个文件的最低权限: 读 写 执行
xxx目录的最低权限: 写 执行
总结安全加固的措施
1.将非登录用户shell设置为nologin
2.锁定长期不使用的账号(锁定用户)
3.删除无用账号
4.chattr锁定配置文件(重要文件passwd、shadow、fstab等加 i 权限,不让删除)
5.设置密码复杂性规则(长度、特殊字符、失效时间等)密码策略
6.修改history,记录历史命令,尽量缩短记录历史命令的条数
7.禁止su root,切换超级管理员
8.设置sudo权限,禁用不安全命令
9.给GRUB设置密码
10.只允许BIOS从硬盘启动,关闭除了硬盘启动外的(光驱、udisk 、网络)
11.给BIOS设置密码
12.限制root只在安全终端登录
13.禁止普通用户登录
14.改掉大家都知道的服务端口
15.做好日志权限管理
16.内核参数调整
如何优化Linux系统?
不用root,添加普通用户,通过sudo授权管理
更改默认的远程连接SSH服务端口及禁止root用户远程连接
定时自动更新服务器时间
配置国内yum源
关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
调整文件描述符的数量
精简开机启动服务(crond rsyslog network sshd)
内核参数优化(/etc/sysyctl.conf)
更改字符集,支持中文,但建议还是使用英文字符集,防止乱码
锁定关键系统文件
清空/etc/issue,去除系统及内核版本登陆前的屏幕显示
一台Linux系统初始化环境后需要做一些什么安全工作?
添加普通用户登录,禁止root用户登录,更改SSH端口号。修改SSH端口不一定绝对。如果暴露在外网,建议修改。
服务器使用密钥登录,禁止密码登录。
开启防火墙,关闭SElinux,根据业务需求设置相应的防火墙规则。
装fail2ban这种防止SSH暴力破击的软件。
设置只允许公司办公网出口IP能登陆服务器(看公司实际需求),也可以安装VPN等软件,只允许连接VPN到服务器上。
修改历史命令记录的条数为10条。
只允许有需要的服务器可以访问外网,其他全部禁止。
做好软件层面得防护:(1)设置nginx_waf模块防止SQL注入
(2)把Web服务器使用www用户启动,更该网站目录的所有者和所属组为www