Linux

介绍

Linux 是一个开源的操作系统内核,最初由芬兰程序员 Linus Torvalds 于 1991 年开发。与传统的操作系统不同,Linux 是由社区共同开发和维护的,并且大多数版本是免费的。它广泛用于服务器、桌面、嵌入式设备和移动设备等多个领域。

核心概念

  • 内核(Kernel) :Linux 本质上是一个内核,负责与硬件交互,管理系统资源(如 CPU、内存、硬盘等),并提供应用程序与硬件之间的接口。Linux 内核是由 Linus Torvalds 主导开发的,具有高度的可扩展性、稳定性和安全性。
  • 发行版(Distribution) :基于 Linux 内核的操作系统通常被称为 Linux 发行版。一个发行版包括了内核以及一系列用于管理硬件、文件系统、网络、用户等的工具和应用程序。常见的 Linux 发行版包括 UbuntuDebianCentOSRed Hat Enterprise Linux (RHEL)FedoraArch Linux 等。

文件系统

Linux 的文件系统遵循统一的目录结构,所有的文件和设备都作为 “文件” 进行处理。常见的 Linux 文件系统路径包括:

  • / ​:根目录,所有文件和目录的起始点。
  • /home​:用户的个人目录,每个用户在此目录下有一个子目录(如 /home/user1​)。
  • /etc​:存放系统配置文件的目录。
  • /bin​:包含基本系统命令的目录,如 ls​、cp​、mv​ 等。
  • /lib​:存放系统共享库文件的目录。
  • /var​:存放变量文件(如日志文件、缓存文件等)的目录。
  • /tmp​:临时文件存储目录。
  • /dev​:设备文件目录,每个硬件设备都会有一个对应的文件。
  • /usr​:包含系统程序和共享库的目录。

文件类型

类型 说明
- 普通文件
d 目录
l 符号链接文件
c 字符设备文件
b 块设备文件
s 套接字文件
p 管道文件

文件权限

权限 说明 rwx 二进制 十进制
r 表示读取权限 r– 100 4
w 表示写入权限 -w- 010 2
x 表示执行权限 –x 001 1
- 表示没有权限 000 0

目录管理

创建目录

bash
mkdir 参数 目录
参数 说明
-p 多级创建
-m 分配权限,同 chmod
-v 显示创建信息

删除目录

bash
rmdir 参数 目录

要求目录为空。

参数 说明
-p 多级删除
-v 显示删除信息

改变工作目录

bash
cd 目录

注意:区分绝对路径和相对路径。

列表查看

bash
ls [参数] [.|目录]
参数 说明
-a 显示所有文件及目录(包含隐藏)
-d 仅显示目录
-h 以可读显示
-l 显示文件及目录信息(类型、权限、持有者、大小、创建时间
-r 倒序显示文件及目录
-t 时间排序显示文件及目录
-R 递归显示目录中的所有文件和子目录

在使用 -l​参数时,共 7 列,其中

第 1 列表示文件及目录的类型权限。第 1 位表示文件类型,第 2-4 位表示用户权限(owner)、第 5-7 位表示用户组权限(group)、第 8-10 位表示其他权限(others)。

第 2 列表示链接数。

第 3 列表示拥有者。

第 4 列表示所属组。

第 5 列表示存储大小。

第 6 列表示修改时间。

第 7 列表示名称。

树状查看

bash
tree 参数 目录
参数 说明
-L 指定目录深度
-d 仅显示目录
-f 显示完整路径
-a 显示所有文件及目录

当前目录

bash
pwd

文件管理

创建文件

bash
touch 参数 文件s
参数 说明
-d 设定文件日期时间

重定向创建

bash
cat > 文件

回车、输入内容、Ctrl + D。

bash
echo '内容' [>|>>] 文件

>​:覆盖内容。

>>​:追加内容。

复制文件

bash
cp 参数 路径 路径
参数 说明
-i 逐个提示确认
-r/-R 递归复制
-v 详细模式
-p 保留文件属性
-a 归档复制(保留原始状态)

移动文件

bash
mv 参数 路径 路径
参数 说明
-b 覆盖已有路径并创建备份
-f 强制执行
-i 逐个提示确认
-n 不覆盖已有路径
-u 更新

删除文件

bash
rm 参数 路径
参数 说明
-i 逐个提示确认
-f 强制删除
-r 递归删除

查看属性

bash
file 文件

全部查看

bash
# 正看
cat 参数 文件
# 反看
tac 参数 文件
# 行号看
nl 参数 文件
参数 说明
-n 显示所有行号(包含空行)
-b 显示非空行号(不包含空行)
-s 压缩连续的空行
-E 显示文件结束符 $
-T 转义制表符为 ^I

分页查看

bash
more 文件

加载慢,回车逐行,空格下翻,b​上翻, q​退出。

bash
less 文件

加载快,j​、k​可下上翻动。

/​:向下搜索。

?​:向上搜索。

n​:重复前一个搜索。

N​:反向重复前一个搜索。

部分查看

bash
head 参数 N 文件

头部查看。

参数 说明
-n 显示前 N 行内容
-c 显示前 N 个字节
bash
tail 参数 N 文件

尾部查看。

参数 说明
-n 显示后 N 行内容
-c 显示后 N 个字节
-f 跟踪追加内容
-s 跟踪睡眠时间(默认 1s)

比较文件

bash
diff 参数 文件 文件
参数 说明
-u 统一格式输出
-w 忽略空格差异
-r 比较目录差异
-q 仅显示文件是否不同,不显示具体差异

查找文件

bash
find 路径 参数 内容

查找指定目录符合条件的文件。

参数 说明
-name 按文件名查找(*​通配符)
-type 按类型查找
-size 按大小查找(+N​、-N​)
-perm 按权限查找(ugo​或者十进制)
bash
whereis

查找二进制文件、源代码文件和帮助文档。

bash
which 文件

查找系统环境变量 PATH​中的可执行文件。

压缩解压

bash
# 打包
tar -cvf 文件包名.tar 文件路径s
# 解包
tar -xvf 文件包.tars [-C 路径]

# 压缩
tar -zcvf 文件包名.tar.gz 文件路径s
# 解压
tar -zxvf 文件包名.tar.gz [-C 路径]

# 压缩
zip -r 文件包名.zip 文件路径s
# 解压
unzip 文件包文件包名.zips [-d 路径]

软硬链接

bash
ln 参数 原文件 链接名
参数 说明
-s 创建软链接

硬链接:通过索引节点(inode)实现。(数据共享、不能跨文件系统、不能链接目录)。

软链接:指向另一个文件或目录的路径信息。(相对独立、可以跨文件系统、可以链接目录)。

文件传输

bash
rcp 参数 路径 路径

用于复制远程文件和目录。

参数 说明
-p 保留属性
-r 递归处理
bash
scp 参数 路径 路径

用于 Linux 之间加密复制文件和目录。

服务器路径:username@IP:path​或者 IP:path​。

参数 说明
-C 允许压缩
-P 指定端口
-r 递归传输
bash
ftp IP

建立文件传输连接。

bash
get [-r] 文件
put [-r] 文件

下载和上传文件。

bash
sftp IP

建立加密文件传输连接。

bash
wget 参数 URL

下载 URL 的文件。

参数 说明
-O 文件重命名
-b 后台下载
-c 断点续传
-i 多文件下载(配合文件 URL 列表)
bash
curl 参数 URL

将 URL 内容输出到终端。

参数 说明
-o 进行文件保存

用户管理

添加用户

bash
useradd 参数 用户名
参数 说明
-m 创建用户主目录
-d 指定主目录
-g 指定用户组
-G 指定附加组
-s 指定默认 shell
-c 添加描述

删除用户

bash
userdel 参数 用户名
参数 说明
-r 删除用户主目录和邮件池

修改属性

bash
usermod 参数 用户名

参数与 useradd​一致。

修改密码

bash
passwd 参数 用户名
参数 说明
-l 锁定用户,使其无法登录
-u 解锁用户
-d 删除密码

切换用户

bash
su -u 用户名

# 退出当前用户
exit

用户组管理

添加用户组

bash
groupadd 组名
参数 说明
-g 指定 GID
-o 允许 GID 重复

删除用户组

bash
groupdel 组名

修改属性

bash
groupmod 参数 组名
参数 说明
-n 修改组名
-g 设置组 GID
-o 允许 GID 重复

修改密码

bash
gpasswd 参数 组名
参数 说明
-a 添加用户到组
-d 从组删除用户
-A 指定管理员
-r 删除密码

权限管理

修改权限

bash
chmod 参数 权限 路径

权限数字表示法:777

权限符号表示法:u+rwx​、g-x​、o=---

+​添加权限、-​移除权限、=​赋值权限。

参数 说明
-R 递归修改

修改所属者

bash
chown 参数 用户[:组名] 路径
参数 说明
-R 递归修改

修改所属组

bash
chgrp [-R] 组名 路径

设置默认权限

bash
umask 掩码值

进程管理

查看进程

bash
ps 参数
参数 说明
-ef 显示所有进程信息
-aux 显示 CPU 等更多细节

动态显示

bash
top 参数
参数 说明
-d 指定刷新秒数
-n 指定刷新次数后退出
-p 仅显示指定进程 ID 的进程
-u 仅显示指定用户名的进程
-i 不显示闲置或无用的进程
-S 累计显示进程的 CPU 使用时间

终止进程

bash
kill 参数 进程ID
参数 说明
-<signal> 向进程发送信号,控制或终止进程
-l 列出所有可用信号
信号编号 信号名称 说明
1 SIGHUP 挂起信号(Hang Up),通常用于让进程重新加载配置文件。
2 SIGINT 中断信号(Interrupt),相当于 Ctrl+C​,用于请求终止进程。
9 SIGKILL 强制终止信号(Kill),立即终止进程,不能被捕获或忽略。
15 SIGTERM 终止信号(Terminate),请求正常终止进程,可以被捕获或忽略。
18 SIGCONT 继续信号(Continue),恢复一个暂停的进程。
19 SIGSTOP 停止信号(Stop),强制停止一个进程,不能被捕获或忽略。
20 SIGTSTP 暂停信号(Terminal Stop),类似 Ctrl+Z​,可以被捕获或忽略。

使用场景:

  • SIGHUP (1) :通常用于让守护进程重新加载配置文件。例如,发送 kill -1 PID​ 可以让某些守护进程重新加载配置,而不需要完全重启。
  • SIGINT (2) :通常用于中断前台进程,相当于 Ctrl+C​,如终止正在运行的脚本或命令。
  • SIGTERM (15) :这是最常用的终止信号,请求进程正常终止,进程可以捕获并处理这个信号,以便安全地释放资源。
  • SIGKILL (9) :强制终止信号,无法被捕获或忽略,用于无法正常终止的进程。使用时要小心,因为它不允许进程进行任何清理操作。
  • SIGSTOP (19)SIGCONT (18) :这对信号分别用于暂停和恢复进程,SIGSTOP​ 立即停止进程运行(类似于 Ctrl+Z​),SIGCONT​ 恢复暂停的进程。

不挂断运行

bash
nohup serverRunCommand > log.txt 2>&1 &

2>&1 解释:

将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 日志文件。

  • 0 – stdin (standard input,标准输入)
  • 1 – stdout (standard output,标准输出)
  • 2 – stderr (standard error,标准错误输出)

网络管理

测试连通性

bash
ping 参数 IP
参数 说明
-c 发送数据包的次数

查看网口信息

需安装 net-tools​。

bash
ifconfig

查看和配置网络接口信息。

bash
netstat 参数

显示网络连接、路由表、端口统计等网络相关信息

参数 说明
-a 查看所有网络连接信息
-p 显示 PID
-tunlp 查看所有端口及进程信息
-r 查看路由表信息
bash
lsof -i:端口

查看指定端口对应的进程信息。

bash
ss -tunlp

查看指定端口对应的进程信息。

需安装 iproute2​。

bash
ip [命令] [选项] [参数]

网络配置工具。

防火墙

适用于 CentOS 和 RHEL,需要安装 firewalld​。

bash
# 查看
firewall-cmd --list-ports
# 开放
firewall-cmd --add-port=3306/tcp --permanent
# 关闭
firewall-cmd --remove-port=3306/tcp --permanent
# 重载
firewall-cmd --reload

支持几乎所有 Linux 系统。

bash
# 查看现有规则
iptables -L -v -n
# 查看特定链规则
iptables -L INPUT|FORWARD|OUTPUT -v -n
# 查看指定端口
iptables -L -n -v | grep ':80'

# 开放
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 关闭
iptables -A INPUT -p tcp --dport 80 -j DROP

# Debian保存
iptables-save > /etc/iptables/rules.v4
# CentOS/RHEL保存
service iptables save

也可使用 ufw​。

配置映射

/etc/hosts​添加

bash
IP HostName

使用 HostName 时会映射到该 IP。

连接远程主机

bash
ssh 参数 [user@]hostname [command]
参数 说明
-l 指定登录用户
-p 指定端口号
-i 指定私钥
-v 详细模式

系统管理

查看系统信息

bash
uname 参数
参数 说明
-a 显示所有系统信息
-r 仅显示内核版本

修改主机名

bash
# 永久修改
hostnamectl set-hostname 主机名

# 临时修改
hostname 主机名

别名

bash
# 添加
alias [别名=指令]
# 删除
unalias [-a]

若不指定,则展示所有的别名。

查看磁盘空间

bash
df 参数
参数 说明
-h 以可读形式显示
-T 显示文件系统类型

查看路径占用

bash
du 参数 路径
参数 说明
-a 显示目录下每个文件和目录的大小。
-h 以人类可读的方式显示(如 KB、MB、GB)。
-s 只显示每个参数指定文件或目录的总大小。
-c 显示所有文件和目录大小的同时,最后增加一个总计。
-d​N 显示目录深度为 N 的文件夹大小,N 为整数。
-k 以 KB 为单位显示大小。
-m 以 MB 为单位显示大小。
--max-depth=N 显示指定深度的目录大小(与 -d​类似)。
--exclude=PATTERN 排除符合模式的文件或目录。

查看内存占用

bash
free 参数
参数 说明
-m 以 MB 为单位显示
-g 以 G 为单位显示
-h 以可读显示
-t 末行输出汇总(内存和交换空间)

系统日期

bash
date 参数
参数 说明
格式 指定输出格式,如 +'%Y-%m-%d %H:%M:%S'
-s 设置系统时间,如 "2024-11-04 18:00:00"

软件管理

在使用 Docker 创建 CentOS 8 时使用 docker run -d --name centos8 --privileged centos/systemd:latest​。

CentOS 8 已停止更新,会导致 appstream 下载元数据失败。

解决:

bash
cd /etc/yum.repos.d/

sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

yum clean all && yum makecache && yum update -y

yum​ 用于 Red Hat 系列,使用 RPM(.rpm) 格式的软件包。

bash
# 列表
yum list 软件包
# 搜索
yum search 软件包
# 安装
yum install 软件包
# 更新
yum update 软件包
# 卸载
yum remove 软件包
bash
# 查看所有已安装
rpm -qa [软件包]
# 安装
rpm -ivh 软件包
# 更新
rpm -uvh 软件包
# 卸载
rpm -ev 软件包

apt​ 用于 Debian 系列,使用 DEB(.deb) 格式的软件包。

bash
# 更新源
apt-get update
# 搜索
apt-get search 软件包
# 更新软件
apt-get upgrade 软件包
# 安装软件
apt-get install 软件包
# 卸载软件
apt-get remove 软件包
# 依赖修复
apt-get install -f
# 清理缓存
apt-get clean
bash
# 查看已安装
dpkg -l [软件包]
# 安装
dpkg -i 软件包
# 卸载
dpkg -r 软件包

系统服务

SysVinit:适合老旧的、对启动速度要求不高的系统,配置简单,但功能相对有限。

Systemd:更现代、强大,适合对性能和功能有较高要求的系统,广泛应用于现代 Linux 发行版。

Sysvinit command Systemd command 说明
service 服务名 status systemctl status 服务名 查看
service 服务名 start systemctl start 服务名 运行
service 服务名 stop systemctl stop 服务名 停止
service 服务名 restart systemctl restart 服务名 重启
chkconfig 服务名 on systemctl enable 服务名 开启(开机启动)
chkconfig 服务名 off systemctl disable 服务名 关闭

挂载

查看分区信息

bash
fdisk -l

获取设备属性

bash
blkid

挂载

bash
mount 设备名 挂载点

mount UUID="xxx-xxx-xxx-xxx" 挂载点

挂载点一般位于 /mnt​目录下。

卸载

bash
umount 设备名|挂载点

自启挂载

/etc/fstab​添加

ini
UUID = "xxx-xxx-xxx-xxx-xxx" 挂载点   ext4|NTFS    defaults    0    0

第一个表示载后的文件系统是否能被 dump 备份;0 表示不能,1 表示每天都进行 dump 备份,2 表示不定期进行 dump 操作。

第二个表示开机过程中是否校验扇区;0 表示不要校验,1 表示优先校验(一般为根目录),2 表示为在 1 级别校验完后再进行校验。

cron 表达式

cron 表达式一般用来设置定时任务,而这种表达式来设置定时任务的风格也称为 cron 风格的定时任务

cron 表达式由 5 或 6 个域 组成的字符串构成,每个域由 空格 隔开,皆代表一段时间。

语法格式:Seconds Minutes Hours DayofMonth Month DayofWeek [Year]

Seconds:1-59,[*/-,​]。

Minutes:1-59,[*/-,​]。

Hours:0-23,[*/-,​]。

DayofMonth:1-31,[*/-,?LWC​]。

Month:1-12,[*/-,​]。

DayofWeek:1-7,[*/-,?L#C​],(注意:周日 - 周六,即 1 代表周日,7 代表周六)。

Year:1940-2099,[*/-,​]。

每个域中,都可以使用数字 + 特殊符号的形式来代表时间。

基础符号如下:

*​:指任意时间。如,0 30 * 1 1 ? 2023​,代表 2023 年 1 月 1 号,任意点的 30 分 0 秒。

/​:指间隔时间。如,0 /15 12 1 1 ? 2023​,代表 2023 年 1 月 1 号,12 点的每隔 15 分种的 0 秒。(也可以表示为:0 */15 12 1 1 ? 2023​)

-​:指一段时间范围。如,0 15-20 12 1 1 ? 2023​,代表 2023 年 1 月 1 号,12 点 15 分 0 秒到 20 分 0 秒。

,​:指多个枚举时间。如,0 0 12 ? * 2,4,6 2023​,代表 2023 年每月的周 1、3、5,12 点 0 分 0 秒。

特定符号如下:

?​:指占位未知时间,只能用于 DayofMonth 和 DayofWeek,两者匹配其中一个,另一个必须使用 ?​占位,目的是为了防止两者冲突。

L​:指最后一个时间,只能用于 DayofMonth 和 DayofWeek。如,0 0 12 L * ? 2023​,代表 2023 年每月的最后一天,12 点 0 分 0 秒;0 0 12 ? * 1L 2023​,代表 2023 年每月的最后一个周日,12 点 0 分 0 秒。

#​:指顺序时间,只能用于 DayofWeek。如,0 0 12 ? * 1#2 2023​,代表 2023 年每月的第 2 个周日,12 点 0 分 0 秒。

W​:指工作日,只能用于 DayofMonth。如,0 0 8 LW * ? 2023​,代表 2023 年每月最后一个工作日的 8 点 0 分 0 秒;0 0 8 10W * ? 2023​,代表 2023 年每月 10 号最近的工作日。

小贴士:可使用 cron 表达式在线工具校验及学习。