Linux 3(完结)
1. 命令类型与 PATH 环境变量
type命令用于查看命令的执行方式
type -a:列出命令所有可能的执行方式type -t:仅输出执行方式的简短描述(如builtin、alias、file)
builtin:表示该命令是 Shell 内建指令
PATH 查询
echo $PATH显示当前 Shell 环境中的命令搜索路径- 路径之间以冒号
:分隔,查找顺序从左到右 - 当输入一个命令时,Shell 会在这些目录中按顺序查找同名可执行文件,找到第一个即执行
永久修改 PATH
编辑
~/.bash_profile(仅对当前用户生效)或/etc/profile(全局生效)在文件末尾追加
export PATH=$PATH:新路径保存后执行
source ~/.bash_profile使配置在当前 Shell 叠加生效,或退出重新登录以重建 Shell
2. Linux 特殊符号与别名
分号
;:在一行中执行多条命令,命令间用分号分隔转义符
\:使紧随其后的特殊字符(及别名)失效
示例:\ls可取消ls别名(如--color=auto)的影响
想创建file 1这个文件直接touch file 1就会创建file 和1两个文件
因此要touch file\ 1引号
反引号
`command`:先执行反引号内的命令,再将输出作为外层命令的参数
示例:echo `hostname`echo 是一个内建命令,它的功能就是把后面的参数当作字符串打印到屏幕上双引号
"...":内容原样输出,但$、\、`仍保留其特殊含义
别名管理
alias创建别名,unalias取消别名
示例:alias ping='ping -c3'让ping默认只发 3 个包永久生效:
- 写入
~/.bashrc(仅对当前用户生效) - 写入
/etc/bashrc(全局生效)
- 写入
命令历史
history查看使用过的命令!行号可快速执行对应历史命令- 为安全起见,可在
/etc/profile或~/.profile中减小HISTSIZE的值
3. 用户与组管理
3.1 用户管理
工作组分类
基本组(私有组):新建立账户时,若没有指定账户所属的工作组,会建立和账户名相同的组
扩展组(公有组):可以容纳多个用户,组中的账户都具有组所拥有的权利
创建用户既有uid也有gid,创建了一个组
用户文件
/etc/passwd:存储用户账号基本信息(用户名、UID、GID、家目录、登录 Shell 等)/etc/shadow:存储加密后的用户密码及密码过期策略!!或*:表示该账号密码被锁定或从未设置密码密码字段示例解读:
$6$...为加密密码;后面跟:20631:0:99999:7:::20631:自 1970-01-01 起,最近一次修改密码的天数0:密码最小使用天数(0 表示可随时修改)99999:密码最大使用天数(几乎永不过期)7:密码过期前 7 天开始警告用户(空):密码过期后宽限天数(空表示无宽限期,过期后立即禁用)(空):账户失效日期(空表示永不过期(空):保留字段,未使用
创建用户:
useradd [选项] 账户名-g 组名/GID:为账户指定所属的基本组(该组必须已存在)-G 组1,组2,...:指定所属的附加组(多个组逗号分隔)-s /bin/bash:指定登录 Shell-u UID:指定用户 ID未指定组时,系统默认创建与用户名同名的基本组
修改用户:
usermod [选项] 账户名-s /sbin/nologin 用户名:修改登录 Shell,设为nologin可禁止该用户交互登录 或者vim /etc/passwd修改-L:锁定用户密码(在/etc/shadow密码字段前加!)-U:解锁用户密码(去除密码字段前的!)-g 组名:更改用户的基本组-G 组列表:覆盖用户的附加组(已有附加组将被替换)-aG 组名:追加附加组(保留原有附加组,新增一个)-G "":清空所有附加组
密码操作
passwd 账户名:交互式修改密码 原来的两个!!变成了加密算法passwd -l 账户名:锁定密码(禁止登录)passwd -u 账户名:解锁密码echo "新密码" | passwd --stdin 用户名:非交互式批量设置密码(注意:密码会明文出现在history中;可追加> /dev/null隐藏输出)管理员也可直接编辑
/etc/shadow,在密码字段前加!!达到锁定效果
删除用户
userdel -r 账户名:彻底删除用户,同时清除其家目录和邮件池- 若未加
-r仅删除用户,残留家目录需手动清理:rm -rf /home/账户名/
用户切换
su 用户名:仅切换用户身份,不改变当前 Shell 环境变量(不推荐)su - 用户名:切换用户身份并初始化目标用户的环境变量,相当于重新登录(推荐)- 每次
su -切换后,记住使用exit或logout逐层退出,避免 Shell 嵌套叠加
- 每次
sudo命令:使普通用户能以 root 权限执行特定命令配置文件:通过
visudo(推荐,有语法检查)或vim /etc/sudoers编辑免密配置:
用户名 ALL=(ALL) NOPASSWD:ALL最小权限原则:可将
ALL替换为具体命令路径,如/usr/sbin/ip、/bin/systemctl使用sudo增加权限但是没有该账户密码就会向root发送安全邮件
3.2 组管理
- 组的命令跟用户的命令相似,user变为group
创建用户的同时会自动新建初始组,一般不需要另外新建 - 组文件
/etc/group:组名:密码占位符:GID:成员列表/etc/gshadow:组密码
- 组操作命令
groupadd、groupmod、groupdel:与用户管理类似修改工作组groupmod
- -g GID——为用户组指定新的组标识号
- -n 新用户组——将用户组的名字改为新名字
gpasswd -参数 用户名 组名- -r : 删除组密码
-a : 把用户加入组
-d : 把用户从组中删除。
-M : 可同时添加多个用户
-A : 给组指派管理员。
- -r : 删除组密码
usermod -G "" 用户名:清空所有附加组删除组前需确保该组已不是任何用户的基本组,否则应先用
usermod -g更改其基本组
3.3 登录信息查看
users:查看当前登录用户last:列出历史登录记录(读/var/log/wtmp),可用echo > /var/log/wtmp清空lastlog:每个账号的最近登录时间(读/var/log/lastlog)w:显示当前登录用户及其操作echo > /var/log/wtmp清空这个文件
4. 文件与目录权限管理
权限表示
第一位是文件类型,后面的九位标识三位为一组。mtime修改时间
- r(读)=4,w(写)=2,x(执行)=1
- 对于目录:r 可列出内容;w 可在其中创建/删除文件;x 可切入目录或执行脚本
修改权限
符号模式:
chmod u/g/o/a +/‑/= 权限 文件
示例:chmod a+x file1为所有位添加执行权限 等于chmod u+x,g+x,o+x file1数字模式:
chmod 755 file1-R递归修改目录及子文件stat可以查看目录以及文件的属性
修改所有者/组
chown -参数 所有者:所属组 文件
示例:chown zyl:root dir1/或者chown zyl.root dir1/
特殊权限
SUID(4)、SGID(2)、Sticky bit(1):使用四位数字表示,如
4755- 其中:后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字
0——表示不设置特殊权限
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7——表示同时设置SUID、GUID、sticky3种权限
- 其中:后面三位是一般权限的数字表示,前面第一位则是特殊权限的标志数字
SGID:
- 文件: 如果 SGID 设置在二进制文件上, 则不论用户是谁,在执行该程序的时候,程序的所属组将会变成该程序文件的所属组。
- 目录:如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的所属组, 将会是此 A 目录的所属组
- 普通的other具有x权限的目录,别的用户在里面新建文件,其他用户只有r的权限
- 因此可以g+s,group继承
- 普通的other具有x权限的目录,别的用户在里面新建文件,其他用户只有r的权限
Sticky bit 对目录:仅目录所有者和文件所有者可以删除目录内的文件(
o+t),只针对目录,生效的前提是有x权限
ACL 权限
setfacl -m u:用户名:权限 文件:为指定用户设置 ACLsetfacl -m g:组名:权限 文件:为组设置 ACLgetfacl 文件:查看 ACLsetfacl -x u:用户名 文件:删除指定用户的 ACLsetfacl -b 文件:删除所有 ACL- ACL权限置空:
setfacl -m u:用户名:--- 文件名
例:root用户在根目录下创建目录/project及所属工作组QQgroup,所属组里面创建两个用户zhangsan和lisi,此文件权限是770,再创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x
- ACL权限置空:
权限掩码umask
- 新建文件默认权限 =
0666 - umask - 新建目录默认权限 =
0777 - umask
- 新建文件默认权限 =
文件属性
chattr +i 文件:设置不可变属性(root 也无法修改),‑i移除lsattr:查看特殊属性ll -Z:查看 SELinux 安全上下文
5. linux联网
NetworkManager(nmcli)
删除连接:
nmcli c del ens32重命名连接:
nmcli c modify "旧名称" con-name eth0激活/关闭网卡:
nmcli c up eth0、nmcli c down eth0添加连接:
nmcli c add type ethernet ifname eth32 con-name eth32 autoconnect yes(动态ip)设置静态 IP:
nmcli c modify ens32 ipv4.method manual ipv4.addresses'192.168.150.133/24'ipv4.gateway'192.168.150.2'ipv4.dns'114.114.114.114'
修改网卡配置文件直接更改
- 编辑
vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=none改成dhcp就是动态ip,最后四项是静态ip项,可以直接更改
- 编辑
curl 工具
curl -I example.com:仅获取 HTTP 响应头,不下载页面内容
这对于快速检查网站状态、服务器类型、重定向等信息非常有用
-I 大写字母 I,表示 只显示响应头(Header),等同于 --head,不会下载网页的 body 内容
6. 源码编译安装(以 Nginx 为例)
下载源码
wgethttps://nginx.org/download/nginx-1.20.2.tar.gztarzxf nginx-1.20.2.tar.gz安装编译依赖
yuminstall-ygcc pcre-devel (这对于 Nginx 的重写模块(rewrite module)是必需的。)openssl-devel (SSL 模块需要 openssl 开发库。如果未安装,./configure 将失败))配置编译选项
./configure--help# 查看支持的所有配置选项./configure --with-http_ssl_module --with-http_stub_status_module
./configure – help 会输出当前源码包所支持的所有编译配置选项。它是你编译安装任何源码软件(如 Nginx、Apache、MySQL)前的“说明书”,告诉你有哪些功能可以开启/关闭,以及安装路径如何指定
–with-http_ssl_module:开启 SSL/TLS 支持,让你的 Nginx 能处理 HTTPS 请求
–with-http_stub_status_module:开启状态监控页面,可以访问 /nginx_status 查看当前连接数、请求数等信息
编译与安装
make&&makeinstall添加到 PATH
编辑~/.bash_profile,追加export PATH=/usr/local/nginx/sbin:$PATH,然后source ~/.bash_profile启动与测试
nginxcurllocalhost停止 Nginx:
/usr/local/nginx/sbin/nginx -s stop
7. YUM 仓库与 RPM 包管理
7.1 RPM 常用命令
rpm -qa | wc -l:统计已安装的 RPM 包数量rpm -q 包名:精确查询rpm -qa | grep 包名:模糊查询rpm -ql 包名:列出包安装的所有文件路径rpm -qi 包名:查看包详细信息rpm -qf 文件路径:查看文件属于哪个包
7.2 配置本地 YUM 源
- 要先禁用本来的,vim CentOS-Base.repo 或者备份
cd/etc/yum.repos.dmvCentOS-Base.repo CentOS-Base.repo.bak# 备份原有源(可选)mount/dev/cdrom /media# 挂载光驱vimlocal.repo[local] name=local repo baseurl=file:///media enabled=1 gpgcheck=0如果是rhel9
7.3 搭建网络 YUM 仓库
准备 RPM 包目录
mkdir/registrycd/media/Packagescp/media/Packages/*.rpm /registry/# 复制若干 RPM 包作为示例cd/registry/ yum makecache fast# 更新缓存yuminstallcreaterepo-ycreaterepo.# 生成仓库元数据createrepo .:作用是扫描当前目录及其子目录下所有的 .rpm 包,并生成一个 YUM 仓库必需的元数据(repodata 文件夹)
通过 HTTP 共享
yuminstallhttpd-ymv/registry /var/www/html/ systemctl start httpd开启自启动httpd服务失败,因为nginx正在占用80端口,需要关掉nginx或者更改Apache的端口
停止 Nginx
/usr/local/nginx/sbin/nginx -s stop然后重新启动 httpd
systemctl start httpd
切换到根目录然后将registry移动到Apache 的默认网页根目录 /var/www/html/ 下:
mv registry /var/www/html/浏览器访问 192.168.150.133/registry/
3.企业内网管理rpm包资源
在新的虚拟机将本来的CentOS-Base.repo关掉
新建本地源vim local.repobaseurl=http://192.168.150.133/registry/:这是一个通过 HTTP 提供的远程仓库,托管在 IP 为 192.168.150.133(即服务器本身)的机器上
再复制更多的rpm包到server端的registry,客户端的repolist也会同步
- 不小心删了/var/www/html。需要重建
1.mkdir -p /var/www/html
2.chown apache:apache /var/www/html
3.chmod 755 /var/www/html
7.4 YUM 日常操作
yum list installed:列出已安装包yum provides */命令:查找命令所属包
yum search 关键词:模糊搜索包名yum clean all:清除 YUM 缓存
8. 进程管理
静态查看(
ps)- -a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示
-f:做一个更完整的输出 ps aux:显示所有用户进程的详细信息ps -ef:另一种完整格式ps ax
/usr/lib/systemd/systemd 是 Linux 系统的“一号进程”(PID 1) 的可执行文件,它是整个用户空间(User Space)的父进程,负责启动和管理系统中的所有其他服务和进程
- -a :显示所有用户的进程
动态查看(
top)top进入交互界面,top -d 1 -p PID监控指定进程动态信息(top是动态查看,ps是静态)
进程树
pstree(若未安装,可通过yum provides */pstree查找并安装)
查找 PID
pgrep -l sshd、pidof sshd查看指定进程cat /run/sshd.pid(某些服务的 PID 文件)
终止进程
kill PID、killall 进程名
9. 磁盘管理与分区
9.1 虚拟机添加硬盘
9.2 添加新磁盘
lsblk# 查看磁盘信息fdisk/dev/sdb# 对磁盘分区mkfs.ext4 /dev/sdb1# 格式化分区mkdir/sdb1mount/dev/sdb1 /sdb1# 挂载df-h# 查看挂载及空间使用一,fdisk /dev/sdb磁盘分区
二,硬盘使用之前需要格式化
查看文件系统格式:输入mkfs在键入tab(点击2次)进行命令补全,可显示支持的文件系统格式
- 格式化命令
mkfs.ext4 -参数 硬盘分区名- -f:强制格式化,已存在文件系统时需要使用
- -c:建立文件系统前先检查坏块。
- -V:输出建立文件系统的详细信息
三,挂载
- 根下创建目录:
mkdir /sdb1 - 将/dev/sdb1挂载到/sdb1 :
mount /dev/sdb1 /sdb1 - 查看系统各个磁盘分区的空间使用情况:
df -h
9.2 自动挂载
mount手动挂载重启之后需要重新挂载,因此要实现自动挂载
cat/etc/fstab# 查看文件系统挂载表,记录了系统启动时自动挂载的分区和设备blkid /dev/sdb1# 获取 UUIDcdumount/sdb1#取消挂载df-h/sdb1/#查看分区挂载信息mountUUID="df6f4e2b-4067-49a0-b7f6-604b8f3e36ef"/sdb1#使用UUID挂载vim/etc/fstab# 在最后一行加:# UUID="xxxx" /sdb1 ext4 defaults 0 0mount-a# 测试自动挂载mount命令:
- mount [-t 文件系统类型] 设备名 挂载点目录
- -a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载上来
- -t:指定文件系统类型
- -o 特殊设备选项:挂载设备时使用逗号分割输入额外参数
umount命令:
- umount 参数 设备名称[挂载点]
- -f :强制卸载
对sdb再次进行分区,与前面流程一样
用
partprobe作用是通知 Linux 内核重新读取磁盘的分区表,而无需重启系统备份磁盘分区
dd if=/dev/sdb of=mbr bs=512 count=1取消挂载并将分区信息破坏,可以用刚刚备份的信息恢复
dd if=mbr of=/dev/sdb,然后再重新挂载
不小心删了分区fdisk -d 但是/etc/fstab中的挂载信息还在,重启会启动不了,会进入紧急模式,此时vim /etc/fstab删掉就行
9.3 Swap 分区
- 磁盘分区方式
删除:关闭 swapfdisk/dev/sdb#分一个2g的分区sdb1mkswap/dev/sdb1#swap格式化swapon/dev/sdb1#激活swapfree-m#查看swap分区vim/etc/fstab# /etc/fstab 添加:# UUID="xxxx" swap swap defaults 0 0swapoff /dev/sdb1
然后再fdisk删掉 - 文件方式
ddif=/dev/zeroof=/opt/swapdiskbs=1Mcount=2048#新建空文件du-h/opt/swapdisk# 查看这个文件所占用的磁盘大小mkswap/opt/swapdisk#空文件格式化为swapswapon/opt/swapdisk#激活 - df命令列出文件系统的磁盘空间占用情况 df -参数 目录或文件名
- du:显示磁盘空间使用量(统计目录或文件所占磁盘空间大小),在默认情况下,文件大小的单位是KB
9.4 备份与恢复 MBR
ddif=/dev/sdbof=mbrbs=512count=1# 备份ddif=mbrof=/dev/sdb# 恢复10. LVM 逻辑卷管理
10.1 创建逻辑卷
pvcreate /dev/sdb# 初始化物理卷pvs#作用是以简洁列表的形式,显示当前系统中所有 LVM 物理卷(PV)的概要信息vgcreate vg0 /dev/sdb# 创建卷组vgs vgdisplay vg0 lvcreate-L10G-nlv1 vg0# 创建逻辑卷lvs#简洁列表显示当前系统中所有逻辑卷(LV)的概要信息mkfs.xfs /dev/vg0/lv1# 格式化mkdir/lvmmount/dev/vg0/lv1 /lvm#lv1挂载到lvm上blkid /dev/vg0/lv1# 获取 UUID# 编辑 /etc/fstab 实现自动挂载mount-a10.2 扩容
逻辑卷扩容
lvextend-L+10G /dev/vg0/lv1# 若提示空间不足,可改用 -l +PE数量 或 100%FREE- -l(小写 L)后面必须跟 PE(物理扩展块)的数量(比如 2560 或 100%FREE),不能直接写 10G。
- -L(大写 L)后面才跟 具体大小,比如 10G、500M。
文件系统扩容
逻辑卷扩容后查看分区容量没有改变因此要分区扩容
xfs_growfs /dev/vg0/lv1(XFS)resize2fs /dev/vg0/lv1(ext4)卷组扩容(添加新磁盘)
pvcreate /dev/sdc vgextend vg0 /dev/sdc vgs# 查看扩容后的卷组大小lvextend-L+20G /dev/vg0/lv1 xfs_growfs /dev/vg0/lv1vgs 查看lvm状态vg0:大小约 40GB,空闲约 20GB,说明你之前创建的卷组 vg0 包含了两个物理卷(#PV=2),并且已经创建了一个逻辑卷(#LV=1),占用了约 20GB,还剩约 20GB 空闲
10.3 删除 LVM
卸载挂载点:
umount /lvm逻辑卷移除:
lvremove /dev/vg0/lv1卷组移除:
vgremove vg0物理卷移除:
pvremove /dev/sdb /dev/sdc进入vim编辑删除UUID自动挂载:
vim /etc/fstab
11. LAMP 环境搭建与 Discuz 安装
Lamp = linux/windows+apache/nginx+mysqld/oracle/pgsql+php/jsp11.1 安装 MariaDB
yuminstall-ymariadb-server systemctlenable--nowmariadb#设置开机自启动mysql_secure_installation# 按提示设置 root 密码并全部回答 Ymysql-p# 登录测试11.2 安装 PHP 7.3(基于 SCL)
yum search scl yuminstall-ycentos-release-scl.noarch yum list rh-php73-* yuminstall-yrh-php73 rh-php73-php-mysqlnd rh-php73-php-fpm systemctl restart httpd下载之后repolist会报错需要去修改
11.3 配置 Nginx 支持 PHP
vim /usr/local/nginx/conf/nginx.conf
2.nginx:启动nginx服务
11.4 安装 Discuz
unzipDiscuz_X3.5_SC_UTF8_*.zip#cd upload/#mv * /usr/local/nginx/html/ 相当于下面的命令systemctl disable--nowhttpd#禁用apachemvupload/* /usr/local/nginx/html/# 移动到 Nginx 根目录chmod-R777/usr/local/nginx/html/config\/usr/local/nginx/html/data\/usr/local/nginx/html/uc_client\/usr/local/nginx/html/uc_server不更改权限图中会报错
yum install -y rh-php73-php-fpm安装 PHP-FPM(FastCGI 进程管理器),它能让 Nginx 或 Apache 通过 FastCGI 协议与 PHP 通信,尤其适合处理高并发动态请求同时启用(开机自启)并立即启动 PHP-FPM 服务。
systemctl enable --now rh-php73-php-fpm
快速验证 PHP-FPM 是否成功运行并开始监听。浏览器访问
http://服务器IP/install/index.php按照流程安装
- 填入自己设置的mysql密码和root密码
- 进入后台管理出现如图界面需要
cd /usr/local/nginx/html/install/然后rm -fr index.php