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

目录管理

创建目录

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

删除目录

rmdir 参数 目录

要求目录为空。

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

改变工作目录

cd 目录

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

列表查看

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列表示名称。

树状查看

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

当前目录

pwd

文件管理

创建文件

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

重定向创建

cat > 文件

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

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

>​:覆盖内容。

>>​:追加内容。

复制文件

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

移动文件

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

删除文件

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

查看属性

file 文件

全部查看

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

分页查看

more 文件

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

less 文件

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

/​:向下搜索。

?​:向上搜索。

n​:重复前一个搜索。

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

部分查看

head 参数 N 文件

头部查看。

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

尾部查看。

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

比较文件

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

查找文件

find 路径 参数 内容

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

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

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

which 文件

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

压缩解压

# 打包
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 路径]

软硬链接

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

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

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

文件传输

rcp 参数 路径 路径

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

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

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

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

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

建立文件传输连接。

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

下载和上传文件。

sftp IP

建立加密文件传输连接。

wget 参数 URL

下载URL的文件。

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

将URL内容输出到终端。

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

用户管理

添加用户

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

删除用户

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

修改属性

usermod 参数 用户名

参数与useradd​一致。

修改密码

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

切换用户

su -u 用户名

# 退出当前用户
exit

用户组管理

添加用户组

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

删除用户组

groupdel 组名

修改属性

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

修改密码

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

权限管理

修改权限

chmod 参数 权限 路径

权限数字表示法:777

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

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

参数 说明
-R 递归修改

修改所属者

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

修改所属组

chgrp [-R] 组名 路径

设置默认权限

umask 掩码值

进程管理

查看进程

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

动态显示

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

终止进程

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​ 恢复暂停的进程。

不挂断运行

nohup serverRunCommand > log.txt 2>&1 &

2>&1 解释:

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

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

网络管理

测试连通性

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

查看网口信息

需安装net-tools​。

ifconfig

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

netstat 参数

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

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

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

ss -tunlp

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

需安装iproute2​。

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

网络配置工具。

防火墙

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

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

支持几乎所有Linux系统。

# 查看现有规则
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​添加

IP HostName

使用 HostName 时会映射到该 IP。

连接远程主机

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

系统管理

查看系统信息

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

修改主机名

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

# 临时修改
hostname 主机名

别名

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

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

查看磁盘空间

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

查看路径占用

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

查看内存占用

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

系统日期

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 下载元数据失败。

解决:

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) 格式的软件包。

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

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

# 更新源
apt-get update
# 搜索
apt-get search 软件包
# 更新软件
apt-get upgrade 软件包
# 安装软件
apt-get install 软件包
# 卸载软件
apt-get remove 软件包
# 依赖修复
apt-get install -f
# 清理缓存
apt-get clean
# 查看已安装
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 服务名 关闭

挂载

查看分区信息

fdisk -l

获取设备属性

blkid

挂载

mount 设备名 挂载点

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

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

卸载

umount 设备名|挂载点

自启挂载

/etc/fstab​添加

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表达式在线工具校验及学习。