常用命令
grep
-n
:输出行号-v
:取反-i
:忽略大小写
# 显示非空行
grep -v ^$ /etc/default/useradd
# 显示有效数据,被#注释的不显示,空白行不显示
grep -v ^\# /etc/default/useradd | grep -v ^$
tar
tar压缩:tar 选项 /path/压缩包名字 /源数据 ...
tar解包:tar 选项 /path/压缩包名字 选项 /释放的位置
-c
:创建归档-z
:.gz格式-j
:.bz2格式-J
:.xz格式-x
:释放归档-C
:指定释放路径-t
:查看压缩包里面的文件-f
:用到tar包名字就得用,必须在所有选项最后
# 压缩
tar -zcf /root/test.tar.gz /etc/passwd /home/bhlu
tar -jcf /root/test.tar.bz2 /etc/passwd /home/bhlu
tar -Jcf /root/test.tar.xz /etc/passwd /home/bhlu
# 解压
tar -xf test.tar.gz -C /data/test
# 检查压缩包
tar -tf test.tar.gz
find
格式:find 目录 条件
-type
:d代表目录,f代表文件,l代表快捷方式-name
:指定名称-size
:+或-文件大小(k、M、G),-1M/-1G/-1k无效-user
:指定属主-mtime
:+或-文件修改时间-exec 命令 {} \;
:高级用法
# 按类型查找
find /boot -type d
find /boot -type f
find /boot -type l
# 按名称查询
find /etc -name "*.conf"
# 统计行数
find /etc -name "*.conf" | cat -n
find /etc -name "*.conf" | wc -l
# 查询文件大小10M~50M
find /boot -size +10M -size -50M
find /boot -size +10k -size -500k
# 查询home目录下属主为bhlu的文件和文件夹
find /home -user bhlu
# 查找90天之前的数据 查找10天以内的数据
find /var -mtime +90
find /root -mtime -10
# 将/boot下面大于10M的文件拷贝到/data上
find /boot -size +10M -exec cp {} /data/ \;
# 将/etc下面的名称为tab结尾的文件拷贝到/root/mytab下
find /etc -name "*tab" -type f -exec cp {} /root/mytab \;
rpm
-q
:查询是否安装-qa
:显示已安装软件-qi
:查询软件功能-ql
:查询软件安装清单-qf
:查询生成该文件的软件-qpl
:查看软件包安装清单-qpi
:查看软件包功能-ivh
:安装软件包,显示详细信息,显示进度条--force
:强制安装
# 查询软件相关
rpm -q firefox
rpm -qa | grep firefox
rpm -qi firefox
rpm -ql firefox | less
# 查询软件包相关
rpm -qpl /mnt/Packages/vsftpd-3.0.2...
rpm -qpi /mnt/Packages/vsftpd-3.0.2...
# 导入红帽签名信息
rpm --import /mnt/RPM-GPG-KEY-CentOS-7
yum
-
仓库配置文件:
/etc/yum.repos.d/test.repo
[test] # 仓库名称 name=bhlu-repos # 仓库描述信息 baseurl=file:///mnt # 指定服务端位置file://标识本地服务端 enabled=1 # 本文件启用 gpgcheck=0 # 不检测红帽签名信息,如果需要检测,需要在下面添加秘钥位置
-
yum repolist
:列出仓库信息 -
yum -y install 软件包
:安装软件包 -
yum -y remove 软件包
:卸载软件包 -
yum search 软件包
:查找相关软件包 -
yum list 软件包
:查找指定软件包 -
yum provides 命令
:查询命令或文件对应的软件,跟rpm -qf
类似 -
yum info 软件包
:查看软件包描述信息 -
yum -y reinstall 软件包
:重新安装软件包 -
yum clean all
:清空缓存
date
date
:显示当前时间date -s "2024-01-01 11:11:35"
:修改时间date +"%Y-%m-%d~%H:%M:%S"
:按格式显示当前时间date +%Y
:显示年date +%m
:显示月date +%d
:显示日期date +%H
:显示时date +%M
:显示分date +%S
:显示秒date +%F
:显示年-月-日date +%R
:显示时分
du
-sh
:统计目录大小
du -sh /etc/
# 查看指定目录下最大的五个文件或目录
du -h | sort -h -r | head -5
ln
软链接
- 格式:
ln -s /路径/源数据 /路径/快捷方式的名称
- 源数据消失,快捷方式失效
- 目录和文件都可以
- 支持跨分区
硬链接
- 格式:
ln /路径/源数据 /路径/快捷方式的名称
- 源数据消失,快捷方式仍然有效
- 支持文件,不支持目录
- 不支持分区
zip
zip归档工具,跨平台
格式:zip [-r] 备份文件.zip 被归档文件...
-r
:压缩的数据中有目录,就需要加上这个
# 压缩
zip -r test.zip /home /etc/passwd
# 解压到/opt/test下
mkdir /opt/test
unzip test.zip -d /opt/test
# 查看test.zip里面有什么
unzip -l test.zip
scp
格式:scp [选项] 源数据路径 目标数据路径
-r
:目录
# 将/etc/passwd复制到192.168.1.2服务器的/root下
scp /etc/passwd root@192.168.1.2:/root
# 将192.168.1.2的/root复制到本机的/home下
scp -r root@192.168.1.2:/root /home
rsync
数据同步
格式:rsync [选项] 源目录 目标目录
-n
:测试同步过程,不做实际更改--delete
:删除目标目录中多余的文档-a
:归档模式,相当于-rlptgoD-v
:显示详细操作信息-X
:保持acl策略不变
# 将mydir同步到todir,这里的/mydir/后面的/不能省略
rsync -avX --delete /mydir/ /todir/
# 写一个shell脚本,保证192.168.1.101上面的/mnt和本机的/mydir上的数据一致
# 首先配置好ssh的免密登录,inotifywait是监控目录和文件变化的软件
while /opt/tools/bin/inotifywait -rqq /mydir/
do
rsync -aX --delete /mydir/ root@192.168.1.101:/mnt
done
源码编译
源码编译步骤
- 安装开发工具
gcc
和make
,释放源代码至指定目录 tar
解包,释放源代码至指定目录./configure
配置,指定安装目录--prefix=/opt/test
/功能模块等选项make
编译,生成可执行的二进制程序文件make install
安装,将编译好的文件复制到安装目录
用户权限相关
useradd
创建用户
-d
:指定用户家目录位置-G
:指定附加组-g
:指定基本组-s
:指定用户的登录解释器-M
:不需要自动创建用户的家目录-n
:取消建立以用户名成为名的群组-r
:建立系统账号-c
:备注-e
:有效期限-f
:密码过期多少天后关闭该账号
创建用户的时候,用户家目录下默认的文件是存放在/etc/skel下的
groupadd
创建组
-g
:指定UID-r
:创建系统工作组,UID小于500-k
:覆盖配置文件/etc/login.defs
-o
:允许添加UID不唯一的工作组-f
:不存在则创建,存在就取消,不输出
usermod
改名
格式:usermod 选项 ...
-l
:修改用户名-u
:修改uid-s
:修改登录解释器-d
:修改家目录,但是不会创建新的目录
# 修改test 用户的UID,登录解释器,用户名修改为bhlu
usermod -u 1600 -s /sbin/nologin -l bhlu test
userdel
删除用户
-r
:删除用户的同时将家目录也删除
gpasswd
-a
:将指定用户添加到指定组中-M
:重置组的成员列表-d
:将组中的指定用户删除-A
:设置指定组的组管理员,会替换之前的组管理员
# 添加bhlu到test组中
gpasswd -a bhlu test
# 设置test组只有haha和heihei两个用户,其他的全部删除
gpasswd -M 'haha,heihei' test
# 将haha从test中移除
gpasswd -d haha test
# 设置bhlu是test的管理员,通过bhlu添加haha到test中
gpasswd -A bhlu test
su - bhlu
gpasswd -a haha test
# 设置test的组管理员是test01,test02
gpasswd -A 'test01,test02' test
# 删除test组的所有管理员
gpasswd -A '' test
crontab
格式:分 时 日 月 周 任务命令行(绝对路径)
-e
:编辑计划任务-l
:列出计划任务-r
:清除计划任务
# 每分钟执行一次
* * * * * 命令行
# 每天早上8:30执行一次
30 8 * * *
# 周一到周五的6点整执行
0 6 * * 1-5
# 周一,周三,周五的12点执行
0 12 * * 1,3,5
# 每月1号或者周一23点执行
0 23 1 * 1
# 每隔6分钟执行一次
*/6 * * * *
# 每隔两个小时执行一次
0 */2 * * *
setfacl
能够针对个人用户,个别组设置独立的权限
命令格式
setfacl -m u:用户名:权限 文件...
setfacl -m g:组名:权限 文件...
选项
-m
:修改ACL策略-x
:清除指定的ACL策略-b
:清除所有已设置的ACL的策略-R
:递归设置ACL策略
# 设置bhlu对/data目录的查看和执行权限,并且查看/data的acl策略
setfacl -m u:bhlu:rx /data
getfacl /data
# 添加test组对目录的全部权限
setfacl -m g:test:7 /data
# 修改bhlu对/data目录的权限
setfacl -m u:bhlu:r /data
# 删除bhlu对/data目录的权限
setfacl -x u:bhlu /data
# 清除所有acl
setfacl -b /data
# 不管怎么样,lisi都不能操作这个目录
setfacl -m u:lisi:--- /data
# 设置了acl策略的目录权限后面有个+
chmod
修改权限:rwx
、SUID
、SGID
、t
格式:chmod [-R] 文件/目录
-
SUID
:用于可执行权限,占用属主的x位,若属主本身没有x,最后一位会变成S,没有意义,如果有x,会变成s- 作用:设置了
SUID
后,所有人执行这个程序的时候,会默认使用程序的属主进行执行 - 命令:
chmod u+s /usr/bin/test
- 作用:设置了
-
SGID
:用于目录,占用属组的x位,若属组本身没有x,最后一位会变成S,没有意义,如果有x,会变成s- 作用:添加
SGID
权限后,目录中的创建的目录或者文件的属组都会默认和最上面一层的一样 - 命令:
chmod g+s test
- 作用:添加
-
t
:用于目录,占用其他的x位,若其他本身没有x,最后一位会变成T,没有意义,如果有x,会变成s- 作用:设置了
t
权限的文件夹下,即使用户有写入权限,也不能删除或改名其他用户的文档 - 命令:
chmod o+t test
- 作用:设置了
chown
修改属主和属组
格式:chown [-R] 属主:属组 文件/目录
sudo
- 一般用于普通用户执行需要root权限的命令
visudo
# 添加这一行,用户就可以使用sudo提权,会提示输入密码,输入bhlu的密码即可
bhlu ALL=(ALL) ALL
# 添加这一行,用户就可以使用sudo提权,不需要输入密码
bhlu ALL=(ALL) NOPASSWD: ALL
硬盘相关
fdisk
MBR分区
m
:列出指令帮助p
:查看现有的分区表n
:新建分区d
:删除分区q
:放弃更改并退出w
:保存并退出
# 示例
fdisk /dev/sdb
n # 创建新的分区
p/回车 # 分区类型,选择主分区
回车 # 分区编号
回车 # 起始扇区
+2G # 分区大小
p # 查看分区表
n # 再次创建新的分区
p/回车 # 分区类型,选择主分区
回车 # 分区编号
回车 # 起始扇区
+1G # 分区大小
p # 查看分区表
w # 保存并退出
# 如果分错,可以ctrl+c退出
# 重新刷新读取分区表
partprobe
# 将新的分区添加到交换分区中
mkswap /dev/sdb1 # 格式化交换文件系统
blkid /dev/sdb1 # 查看文件系统类型
swapon # 查看交换空间组成成员信息
swapon /dev/sdb1 # 启用交换分区
swapon # 查看交换空间组成成员信息
free -h # 查看交换空间的大小
swapoff /dev/sdb1 # 停用交换分区
swapon # 查看交换空间组成成员信息
free -h # 查看交换空间大小
# 设置开机自动启用交换分区
vim /etc/fstab
/dev/sdb1 swap swap defaults 0 0
swapon -a # 校测交换分区的书写
swapon
mkfs
格式化文件系统
格式:mkfs.格式 分区
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb2
# 使用-f强制格式化xfs
mkfs.xfs -f /dev/sdb1
blkid
查看文件系统类型
格式:blkid 分区
blkid /dev/sdb1
blkid /dev/sdb2
mount
-
临时挂载:
mount 分区 目录
-
开机自动挂载
vim /etc/fstab # 设备路径 挂载点 文件系统类型 参数 备份标记 检测顺序 /dev/sdb1 /mypart ext4 defaults 0 0 mount -a
总结过程
- 识别硬盘:
lsblk
- 划分分区(MBR分区模式):
fdisk
- 查看是否分区成功:
blkid 分区
- 格式化文件系统:
mkfs.xfs mkfs.ext4 blkid
- 挂载使用:
mount -a
- 查看是否挂载成功:
df -h
parted
GPT分区命令
-
parted /dev/sdc
-
help
:查看命令帮助 -
mktable gpt
:初始化并建立指定模式分区表 -
mkpart 分区名称 文件系统类型 start end
:指定大小或百分比%作为起始、结束位置 -
print
:查看分区表 -
rm 序号
:删除指定分区 -
quit
:退出交互环境
parted /dev/sdd
# 进入parted交互模式
mktable gpt # 初始化并指定分区模式,注意这里只能指定一次,再次输入会初始化硬盘的
print # 查看分区模式和分区表信息
mkpart # 使用交互模式划分分区模式
# mkpart交互模式开始
bhlu-sdd # 分区名称,随便填
ext4 # 分区系统类型,随便填,不会进行格式化
0 # 起始点,第一次填0,第二次
2G # 结束点,注意这里是结束点,不是多大
Ignore # 从0开始会提示一个警告,忽略即可
# mkpart交互模式结束
print # 查看分区表信息
unit GB # 使用GB为单位
print # 查看分区表信息
rm 1 # 删除分区,后面的1可以根据上面的print输出来输入
mkpart bhlu-sdd1 ext4 0 5G # 使用命令直接分区,从0开始,大小5G
mkpart bhlu-sdd2 xfs 5G 100% # 使用命令直接分区,从5G开始,全部分完
print # 查看分区表信息
quit # 退出
# 退出parted交互模式
# 查看分区
lsblk
# 格式化
mkfs.xfs /dev/sdd1 # 这里的格式可以和上面mkpart填的不一样,这里才是真正的格式化
mkfs.ext4 /dev/sdd2
# 查看是否格式化成功
blkid /dev/sdd1
blkid /dev/sdd2
# 挂载
mount /dev/sdd1 /data1
mount /dev/sdd2 /data2
# 添加开机自动挂载
vim /etc/fstab
/dev/sdd1 /data1 xfs defaults 0 0
/dev/sdd2 /data2 ext4 defaults 0 0
虚拟磁盘技术
物理卷(PV)–> 卷组(VG)–> 逻辑卷(LV)
-
物理卷,使用
fdisk
或者parted
-
卷组
# 创建卷组,名称叫systemvg vgcreate systemvg /dev/sdb[1-2] # 查看所有卷组 vgs # 重命名卷组 vgrename systemvg new_systemvg # 扩展卷组 vgextend new_systemvg /dev/sdb{3,4,5} # 删除卷组 vgremove new_systemvg # 查看卷组具体信息 vgdisplay new_systemvg # 修改PE大小,PE代表分配的逻辑卷的最小单位,默认4M vgchange -s 1M systemvg
-
逻辑卷
# 建立逻辑卷,大小16G,名称叫vo lvcreate -L 16G -n vo systemvg # 查看所有逻辑卷 lvs # 格式化xfs文件系统 mkfs.xfs /dev/systemvg/vo # 查看文件系统类型 blkid /dev/systemvg/vo # 设置开机自动挂载 vim /etc/fstab /dev/systemvg/vo /mylv xfs defaults 0 0 # 扩展逻辑卷至18G lvextend -L 18G /dev/systemvg/vo # 刷新逻辑卷的文件系统 xfs_growfs /dev/systemvg/vo # 刷新xfs文件系统 resize2fs /dev/systemcg/vo # 刷新ext4文件系统 # 删除逻辑卷(删除前需取消挂载) lvremove -y /dev/systemvg/vo
进程相关
pstree
查看用户进程信息
-p
:列出对应进程的PID-a
:显示完整的命令行
pstree -ap bhlu
pgrep
查看包含指定字符的进程
-l
:显示进程名-u
:指定用户-x
:精确匹配完整的进程名
pgrep -l ab
pgrep -lu root
pgrep -lx vim
kill
根据进程ID杀掉进程:kill [-9] 进程ID
killall
根据进程名称杀掉进程:killall [-9] 进程名称
控制进程
&
:后台运行进程Ctrl + z
:进程放到后台jobs
:查看后台进程bg 编号
:将后台进程继续运行fg 编号
:将后台进程恢复到前台
网络相关
修改服务器名称
hostnamectl set-hostname 服务器名称
修改网卡名称
修改网卡名称为eth0、eth1、eth2…
-
vim /etc/default/grub
# 最后添加net.ifnames=0 biosdevname=0 GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
-
重新生成内核
grub2-mkconfig -o /boot/grub2/grub.cfg
-
重启系统
reboot
nmcli
nmcli必须利用nmcli自己的命名,才能进行网络IP地址的设置。
规则:网卡的本名是什么,nmcli起的外号就是什么
nmcli connection show
:查看网络命名的链接nmcli connection delete 名称
:删除网络别名nmcli connection add type ethernet ifname eth0 con-name eth0
:添加别名- 配置网络
nmcli connection modify eth0 \ # 修改eth0 ipv4.method manual \ # 设置手动 ipv4.addresses 192.168.1.100/24 \ # 设置ip和子网掩码 ipv4.gateway 192.168.1.254 \ # 设置网关 connection.autoconnect yes # 设置自动连接
nmcli connection down eth0
:关闭网卡nmcli connection up eth0
:打开网卡
ip
- 查看ip:
ip address show
或者ip a s
- 添加临时ip:
ip address add 192.168.2.2/24 dev eth0
或者ip a a 192.168.2.2/24 dev eth0
- 删除临时ip:
ip address del 192.168.2.2/24 dev eth0
或者ip a d 192.168.2.2/24 dev eth0
ss
- 查看端口系统中启动的端口信息,参数和
netstat
命令 - 选项
-a
:显示所有端口的信息-n
:以数字格式限速端口号-t
:显示TCP
连接的端口-u
:显示UDP
连接的端口-l
:显示服务正在监听的端口信息-p
:显示监听端口的服务名称
ss -ntulp | grep sshd
netstat -ntulp | grep sshd
系统相关
firewall
public
:仅允许访问本机sshd等少数几个服务trusted
:允许任何访问block
:阻塞任何来访请求,给出回应drop
:丢弃来访的数据包,不给回应
命令:
- 设置默认策略:
firewall-cmd --set-default-zone=public
- 查看列表信息:
firewall-cmd --zone=public --list-all
- 临时添加服务策略:
firewall-cmd --zone=public --add-service=http
- 临时删除服务策略:
firewall-cmd --zone=public --remove-service=http
- 加载策略:
firewall-cmd --reload
- 永久添加服务策略:
firewall-cmd --permanent --zone=public --add-service=http
- 永久删除服务策略:
firewall-cmd --permanent --zone=public --remove-service=http
永久添加或删除之后,不会立即生效,需重新加载才会生效
重设root密码
-
开机按e进入救援模式
-
找到linux16那一行(关闭向下移,一般在倒数第二行),将该行的
ro
改为rw
,然后再后面添加rd.break# 原格式 linux16 vm... r\ o crashkernel... # 修改后的格式 linux16 vm... r\ w rd.break carshkernel...
-
然后
ctrl + x
启动,会看到switch_root:/#
-
切换环境,输入:
chroot /sysroot
-
修改root密码,这里修改为123为例,输入:
echo 123 | passwd --stdin root
-
此时根据自身环境进行下列操作,这里的操作比较关键
# 可以使用getenforce获取selinux状态 # 如果selinux为enforcing,就创建一个文件,让selinux失忆 touch /.autorelabel # 如果selinux不是enforcing,就可以不用操作
-
强制重启:
reboot -f
切换运行模式
-
RHEL 5
和RHEL 6
init 0
: 关机,0个服务init 1
: 单用户模式(基本功能的实现,破解linux密码),50个服务init 2
:多用户字符界面(不支持网络,80个服务init 3
:多用户字符界面(支持网络)服务器默认运行级别,100个服务 ,常用init 4
:未定义,0个服务init 5
:图形界面,300个服务,常用init 6
:重启,0个服务
-
RHEL 7
systemctl -t target
:列出可用运行模式systemctl get-default
:查看默认运行模式systemctl isolate multi-user.target
:切换至字符模式,相当于init 3
systemctl isolate graphical.target
:切换至图形模式,相当于init 5
- 设置永久策略
systemctl set-default multi-user.target
:设置每次开机进入字符模式systemctl set-default graphical.target
:设置每次开机进入图形模式
raid模式
RAID 0
:条带模式- 同一个文档分散存放不同磁盘
- 并行写入,提高效率
RAID 1
:镜像模式- 一个文档复制多份,分别写入不同磁盘
- 多份拷贝,提高可靠性,效率无提升
RAID 5
:高性价比模式- 相当于RAID0和RAID1的折中方案
- 需要至少一块磁盘的容量来存放校验数据
RAID 6
:高性价比/可靠模式- 相当于扩展的RAID5阵列,提供2份独立校验方案
- 需要至少两块磁盘的容量来存放校验数据
RAID 0+1
- 假设有4块盘A、B、C、D,先将A和B组成RAID0,C和D组成RAID0,然后再讲两个RAID0组成RAID1
RAID 1+0
- 类似于RAID 0+1,先组成RAID1,再组成RAID0
对比项 | RAID 0 | RAID 1 | RAID 1+0/0+1 | RAID 5 | RAID 6 |
---|---|---|---|---|---|
磁盘数 | >=2 | >=2 | >=4 | >=3 | >=4 |
存储利用率 | 100% | <=50% | <=50% | n-1/n | n-2/n |
校验盘 | 0 | 0 | 0 | 1 | 2 |
容错性 | 无 | 有 | 有 | 有 | 有 |
IO | 高 | 低 | 中 | 较高 | 较高 |