Linux 零基础入门,看这一篇就够了

2 - Linux 文件和目录

文件基本概念

在 Linux 系统中,一切皆文件 。无论是文本、图像、设备还是进程间的通信通道,都以文件的形式存在和管理。Linux 文件采用树形目录结构,以根目录 "/" 为起点,所有文件和目录都挂载在这个树形结构中,形成一个完整的文件系统。

文件类型

Linux 文件主要分为以下几种类型,可通过 ls -l 命令查看文件类型,命令输出的第一个字符代表文件类型:

  • 普通文件(-):最常见的文件类型,包括文本文件、二进制文件、脚本文件等。例如,test.txt 是文本文件,a.out 是编译后的二进制文件。

  • 目录文件(d):用于存放其他文件和目录,类似 Windows 中的文件夹。如 /home 目录通常存放用户的个人文件。

  • 链接文件(l):分为硬链接和软链接(符号链接)。软链接类似于 Windows 的快捷方式,指向另一个文件;硬链接则是文件的另一个入口,与原文件共享相同的 inode。

  • 设备文件(b/c):与硬件设备相关,b 表示块设备(如硬盘、U 盘),c 表示字符设备(如键盘、鼠标),通常存放在 /dev 目录下。

  • 管道文件(p):用于进程间通信,是一种临时的文件类型。

  • 套接字文件(s):用于网络通信,支持不同进程之间的数据交互,常见于 /var/run 目录。

bash 复制代码
ll | grep '^s' #查找当前目录下的套接字文件

Linux 系统目录结构

  • /(根目录):整个文件系统的起点,所有目录和文件都包含在根目录下。
  • /bin:存放系统必备的二进制可执行文件,如 ls、cp、mv 等基本命令,普通用户也可执行。
  • /sbin:存放系统管理的二进制可执行文件,如 reboot、shutdown 等,通常需要 root 权限才能执行。
  • /home:普通用户的主目录存放位置,每个用户在该目录下有一个以用户名命名的子目录,用于存放用户的个人文件和设置。
  • /root:root 用户的主目录,与普通用户的主目录不同,它直接位于根目录下。
  • /etc:存放系统配置文件,如网络配置文件 network/interfaces、用户配置文件 passwd 等。
  • /usr:存放系统应用程序和文件,类似于 Windows 的 Program Files 目录,其中 /usr/bin 存放用户常用命令,/usr/lib 存放程序运行所需的库文件。
  • /var:存放经常变化的文件,如日志文件(/var/log)、邮件(/var/mail)、缓存文件等。
  • /tmp:存放临时文件,系统重启后该目录下的文件会被清空。
  • /dev:存放设备文件,如硬盘 sda、光驱 sr0 等。
  • /proc:虚拟文件系统,存放系统进程和内核状态的信息,这些文件并不实际存储在硬盘上,而是由内核动态生成,如 /proc/cpuinfo 包含 CPU 信息。

浏览、切换、目录大小

目录创建

mkdir 命令创建目录 :

bash 复制代码
mkdir test #创建目录
mkdir -r test/level1/level2  #递归创建目录
浏览

ls (list) 列出目录内容:

bash 复制代码
ls -l        # 长格式显示文件和目录详细信息
ls -a        # 显示所有文件(包括隐藏文件)
ls -lh       # 以人类可读的方式显示文件大小
ls -lt       # 按修改时间排序显示
ls -R        # 递归显示子目录内容

tree:以树状结构显示目录

bash 复制代码
tree         # 显示当前目录的树状结构
tree -L 2    # 只显示两级目录结构
tree -a | tail -1  #只显示统计信息
切换

cd:切换目录

bash 复制代码
cd /path/to/directory  # 切换到指定目录
cd ..                  # 返回上级目录
cd -                   # 返回上次所在目录
cd                     # 回到用户主目录

pwd:显示当前工作目录

bash 复制代码
pwd        # 打印当前所在目录的完整路径
查看目录大小

du:估算文件空间使用情况

bash 复制代码
du -sh /path/to/directory  # 显示目录总大小(-s:汇总,-h:人类可读)
du -h --max-depth=1        # 显示当前目录下一级子目录的大小

df:显示文件系统磁盘空间使用情况

bash 复制代码
df -h        # 以人类可读的方式显示所有文件系统的使用情况
df -h /      # 显示根目录所在文件系统的使用情况

文件创建、删除、详细信息

文件创建

touch:创建空白文件,还能更新已有文件的时间戳。

bash 复制代码
touch newfile.txt  # 创建一个名为newfile.txt的空白文件
touch file1 file2  # 同时创建多个文件

cat > : 创建文件并输入内容,按 Ctrl + D 结束输入。

特点:若文件已存在,会覆盖原有内容;适合快速写入少量文本。

bash 复制代码
# 创建file.txt并输入两行内容
cat > file.txt
Hello, Linux!
This is a test file.
^D  # 按Ctrl+D保存退出

**echo > 或 echo >>:**创建文件并写入单行内容。

echo "内容" > 文件名:覆盖写入(文件不存在则创建)。 echo "内容" >> 文件名:追加写入(文件不存在则创建)。

bash 复制代码
# 覆盖写入(创建新文件)
echo "Server started at 9:00" > status.log

# 追加写入(文件存在则添加内容)
echo "Error: connection failed" >> status.log

vim 编辑器:创建并编辑文件。通过文本编辑器创建文件,适合编写复杂内容(需先安装编辑器)。

bash 复制代码
# 用vim创建并编辑file.txt(按i进入编辑模式,Esc+`:wq`保存退出)
vim file.txt

# 用nano创建并编辑note.txt(更简单的编辑器,Ctrl+O保存,Ctrl+X退出)
nano note.txt
文件删除

rm(remove)命令用于删除文件或目录,删除后无法恢复,使用时需格外谨慎。

bash 复制代码
# 复制文件到目标目录
cp memo.txt ~/backup/  # 把memo.txt复制到backup目录

# 复制文件并重命名(目标是新文件名)
cp data.csv data_backup.csv  # 复制data.csv为data_backup.csv

# 复制目录(必须加-r)
cp -r src/ dest/  # 递归复制src目录到dest目录(dest不存在则创建)

# 复制目录时保留属性(如权限、时间)
cp -a project/ project_backup/  # 适合备份目录,保留所有原始属性

# 批量复制文件(通配符)
cp *.jpg ~/images/  # 复制所有.jpg文件到images目录

# 复制前提示覆盖
cp -i old.txt new.txt  # 若new.txt已存在,提示"是否覆盖?"

# 显示复制过程
cp -v document.pdf ~/docs/  # 输出:'document.pdf' -> '/home/user/docs/document.pdf'
详细信息
bash 复制代码
stat filename.log

文件移动、复制

文件移动 ( 剪切 / 重命名 )

mv(move)命令用于移动文件 / 目录,也可实现重命名,是 Linux 中最常用的命令之一。

  • -i:若目标文件已存在,移动前提示确认(避免误覆盖)。
  • -f:强制移动,覆盖目标文件时不提示(慎用)。
  • -v:显示移动过程的详细信息(verbose)。
bash 复制代码
# 移动文件到目标目录(目标目录必须存在)
mv document.txt ~/Documents/  # 把document.txt移动到用户的Documents目录

# 重命名文件(源和目标在同一目录)
mv old_name.jpg new_name.jpg

# 移动目录(无需递归参数,mv默认支持目录移动)
mv project/ ~/workspace/  # 把project目录移动到workspace目录

# 批量移动同类型文件(用通配符*)
mv *.txt ~/text_files/  # 把当前目录所有.txt文件移动到text_files目录

# 移动时提示覆盖(安全操作)
mv -i report.pdf ~/backup/  # 若backup目录已有report.pdf,会提示是否覆盖

# 显示移动过程
mv -v image.png photos/  # 输出:'image.png' -> 'photos/image.png'
文件复制

cp(copy)命令用于复制文件或目录,需注意复制目录时的递归参数。

  • -r-R:递归复制目录(必须加,否则无法复制目录)。
  • -i:覆盖目标文件前提示确认。
  • -f:强制复制,覆盖时不提示。
  • -v:显示复制过程的详细信息。
  • -p:保留源文件的权限、时间戳等属性。
  • -a:归档复制(相当于 -dR --preserve=all,保留所有属性,适合备份)。
bash 复制代码
# 复制文件到目标目录
cp memo.txt ~/backup/  # 把memo.txt复制到backup目录

# 复制文件并重命名(目标是新文件名)
cp data.csv data_backup.csv  # 复制data.csv为data_backup.csv

# 复制目录(必须加-r)
cp -r src/ dest/  # 递归复制src目录到dest目录(dest不存在则创建)

# 复制目录时保留属性(如权限、时间)
cp -a project/ project_backup/  # 适合备份目录,保留所有原始属性

# 批量复制文件(通配符)
cp *.jpg ~/images/  # 复制所有.jpg文件到images目录

# 复制前提示覆盖
cp -i old.txt new.txt  # 若new.txt已存在,提示"是否覆盖?"

# 显示复制过程
cp -v document.pdf ~/docs/  # 输出:'document.pdf' -> '/home/user/docs/document.pdf'

3 - Linux 用户、用户组、文件权限、文件查找

在 Linux 操作系统中,用户与权限管理是系统安全和稳定运行的核心环节。Linux 是典型的多用户操作系统,每个使用系统的人都需要拥有独立的用户账户,系统通过用户 ID(UID)来唯一标识不同用户。

用户分类

  • 超级用户(root):UID 固定为 0,拥有系统的最高权限,可执行任何操作,包括修改系统核心配置、删除关键文件等。在日常操作中应尽量避免使用 root 账户,以降低误操作风险。

  • 系统用户:通常 UID 范围在 1-999(不同 Linux 发行版可能略有差异),这类用户并非为实际操作人员创建,而是用于运行系统服务(如 Apache、MySQL 等)。系统用户一般没有登录权限,其存在是为了保证服务运行的独立性和安全性。

  • 普通用户:UID 从 1000 开始,由管理员创建,用于日常工作。普通用户的权限受到严格限制,仅能在授权范围内操作文件和执行命令。

用户

1. 创建普通用户

创建普通用户使用useradd命令,默认会分配 1000 及以上的 UID,同时创建对应的家目录和默认 shell。

  • -m:自动创建用户的家目录(/home/stark),如果不添加此参数,家目录不会自动创建。

  • -s /bin/bash:指定用户的默认 shell 为 bash,允许用户登录系统后使用 bash 交互环境。

bash 复制代码
useradd [选项] 用户名

# 示例 1:创建用户并自动创建家目录
useradd -m newuser          # 创建 newuser 并生成 /home/newuser

# 示例 2:指定家目录和 shell
useradd -m -d /data/user1 -s /bin/bash user1  # 家目录为 /data/user1,shell 为 bash

# 示例 3:指定初始组和附加组
useradd -m -g developers -G sudo,adm user2  # 初始组为 developers,附加组为 sudo 和 adm

#查看系统中有多少用户
cut -d: -f1 /etc/passwd

2、创建系统用户

系统用户主要用于运行服务,通常不需要登录权限,因此创建时会指定较小的 UID 范围,并设置不可登录的 shell。

示例:创建一个用于运行 nginx 服务的系统用户

bash 复制代码
useradd -r -s /sbin/nologin -M nginx
  • -r:表示创建系统用户,UID 会自动分配在 1-999 范围内。

  • -s /sbin/nologin:指定默认 shell 为 nologin,禁止该用户登录系统,增强安全性。

  • -M:不自动创建家目录,因为系统用户一般不需要家目录来存储个人文件。

系统用户创建后无需设置密码(也可以设置,但通常没必要),其主要作用是在运行 "nginx" 服务时作为进程的所有者,限制服务进程的权限范围,避免服务被攻击后获得过高权限影响系统安全。

3. 设置用户密码

bash 复制代码
passwd 用户名

# 示例:为用户设置密码(需输入两次)
passwd newuser             # 交互设置 newuser 的密码

4. 删除用户

bash 复制代码
userdel [选项] 用户名

# 示例 1:仅删除用户账户
userdel olduser            # 保留 /home/olduser 目录

# 示例 2:彻底删除用户(推荐)
userdel -r olduser         # 删除用户及家目录、邮件池

用户组

4.创建用户组

bash 复制代码
groupadd [选项] 组名

# 示例 1:创建普通组
groupadd devops            # 创建 devops 组

# 示例 2:创建系统组(GID < 1000)
groupadd -r systemd        # 创建系统组 systemd

5. 删除用户组

bash 复制代码
groupdel 组名

# 示例:删除空组
groupdel temp              # 删除 temp 组(组内无用户时生效)

6. 修改用户所属组

bash 复制代码
usermod -aG 组名 用户名

# 示例 1:添加用户到单个组
usermod -aG docker user1   # 将 user1 添加到 docker 组(用于容器权限)

# 示例 2:添加用户到多个组
usermod -aG sudo,wheel user2  # 赋予 user2 管理员权限(sudo 组)

7. 切换用户

bash 复制代码
su - 用户名

# 示例 1:切换到 root 用户
su - root              # 切换到 root 并加载环境变量

# 示例 2:临时执行命令(无需切换)
sudo -u user1 ls /data  # 以 user1 身份执行 ls 命令

文件权限

1、Linux 是多用户多任务操作系统,为了区分不同用户对文件的操作权限,采用了用户 - 组 - 其他(User-Group-Others)的三元权限模型。

  • 所有者(User):文件的创建者,拥有最高管理权限

  • 所属组(Group):包含多个用户的集合,便于团队协作授权

  • 其他用户(Others):系统中除所有者和所属组成员外的所有用户

2、每种身份可拥有三种基本权限,分别是:

  • 读权限(r):允许查看文件内容或列出目录内容

  • 写权限(w):允许修改文件内容或在目录中创建 / 删除文件

  • 执行权限(x):允许运行可执行文件或进入目录

3、数字表示法用三位八进制数表示权限组合,每个权限对应固定数值:

  • 读权限(r):4

  • 写权限(w):2

  • 执行权限(x):1

  • 无权限:0

bash 复制代码
# 设置权限为rwxr-xr-x(755):常用于可执行文件
chmod 755 app.py

# 设置权限为rw-r--r--(644):常用于普通文件
chmod 644 README.md

# 设置权限为rwx------(700):常用于私有目录
chmod 700 ~/private/

# 设置权限为rwxrwxrwx(777):所有用户都有全部权限(谨慎使用)
chmod 777 /tmp/shared/

4、chmod 和 chown

权限赋值的核心命令:chmod

bash 复制代码
chmod [选项] 权限 文件/目录

# 设置权限为rwxr-xr-x(755):常用于可执行文件
chmod 755 app.py

# 设置权限为rw-r--r--(644):常用于普通文件
chmod 644 README.md

# 设置权限为rwx------(700):常用于私有目录
chmod 700 ~/private/

# 设置权限为rwxrwxrwx(777):所有用户都有全部权限(谨慎使用)
chmod 777 /tmp/shared/

修改文件的所有者和群组,这里有个chown万能的命令,-R参数非常有用,R是recursive的缩写,表示递归,用来设置子目录和子文件。

shell 复制代码
chown -R stark:stark file.txt

文件查找

1. find 命令(全能搜索)

  • -name:按文件名查找(支持通配符 *?)。
  • -type:按文件类型查找(f= 普通文件,d= 目录,l= 符号链接)。
  • -size:按文件大小查找(+10M= 大于 10MB,-50k= 小于 50KB)。
  • -mtime:按修改时间查找(-2=2 天内,+7=7 天前)。
  • -user/-group:按所有者 / 组查找。
bash 复制代码
# 查找当前目录下所有名为 "example.txt" 的文件
find . -name "example.txt"

# 查找 /etc 目录下所有 .conf 后缀的文件(忽略大小写)
find /etc -iname "*.conf"

# 查找 /home 目录下大于100MB且修改时间在7天内的文件
find /home -size +100M -mtime -7

# 查找并删除30天前的临时文件
find /tmp -type f -mtime +30 -delete

#查找二进制目录命令
find / -type f -executable -name "nginx" 2>/dev/null

2. locate 命令(快速索引搜索)

  • 基于系统预建的文件索引(由 updatedb 命令更新),速度极快。
  • 适合查找已知文件名的文件,但可能不显示最新创建的文件。
bash 复制代码
# 查找所有包含 "nginx" 的文件
locate nginx

# 使用通配符精确匹配
locate /usr/bin/python3  # 查找绝对路径

4 - Linux 文件压缩与解压

在 Linux 系统中,文件压缩与解压是日常操作的重要组成部分,常用工具包括tar、zip/unzip等,它们各自适用于不同场景,且功能可灵活组合。

tar 命令

bash 复制代码
tar [选项] [文件或目录]

常用选项:

  • -c:创建新的归档文件
  • -x:从归档文件中提取文件
  • -t:列出归档文件中的内容
  • -z:通过 gzip 过滤归档文件(处理.gz 文件)
  • -j:通过 bzip2 过滤归档文件(处理.bz2 文件)
  • -v:显示操作的详细过程
  • -f:指定归档文件的名称(必须放在最后一个选项)
  • -C:指定提取文件的目标目录
  • -p:保留文件的权限和属性
1、创建压缩包
bash 复制代码
# 创建未压缩的tar包
tar -cvf archive.tar dir/

# 创建gzip压缩的tar包(.tar.gz或.tgz)
tar -czvf archive.tar.gz dir/

# 创建bzip2压缩的tar包(.tar.bz2)
tar -cjvf archive.tar.bz2 dir/

# 创建xz压缩的tar包(.tar.xz)
tar -cJvf archive.tar.xz dir/
2 、解压文件
bash 复制代码
# 解压tar包到当前目录
tar -xvf archive.tar

# 解压tar.gz包到当前目录
tar -xzvf archive.tar.gz

# 解压tar.bz2包到当前目录
tar -xjvf archive.tar.bz2

# 解压tar.xz包到当前目录
tar -xJvf archive.tar.xz

# 解压到指定目录
tar -xzvf archive.tar.gz -C /path/to/extract/
3、查看压缩包内容
bash 复制代码
# 查看tar包内容
tar -tvf archive.tar

# 查看tar.gz包内容
tar -tzvf archive.tar.gz
4、只压缩特定类型的文件
bash 复制代码
# 只压缩目录下的所有jpg和png文件
tar -czvf images.tar.gz *.jpg *.png
5、排除特定文件或目录
bash 复制代码
# 压缩时排除所有txt文件
tar -czvf backup.tar.gz --exclude='*.txt' /path/to/dir

# 排除目录
tar -czvf project.tar.gz --exclude='project/temp' project/
6、追加文件到 tar 包
bash 复制代码
# 追加file.txt到已有的archive.tar
tar -rvf archive.tar file.txt

zip/unzip 命令详解

1、zip 常用用法:

  • -r:递归压缩目录
  • -v:显示详细的压缩过程
  • -m:将文件移动到压缩包中(压缩后删除原文件)
  • -q:安静模式,不显示压缩过程
  • -9:最高压缩级别
  • -0:不压缩,只打包
  • -e:加密压缩包
  • -x:排除特定文件

2、unzip 常用用法:

  • -d:指定解压目录
  • -v:查看压缩包内容但不解压
  • -l:列出压缩包内容
  • -n:不覆盖已存在的文件
  • -o:覆盖已存在文件且不提示
  • -P:指定解压密码(不推荐在命令行中使用,有安全风险)
1、创建 zip 压缩包
bash 复制代码
# 压缩单个文件
zip file.zip file.txt

# 压缩目录
zip -r dir.zip directory/

# 压缩时排除某些文件
zip -r archive.zip project/ -x "project/temp/*"

# 创建加密压缩包
zip -er secure.zip sensitive_files/
2、解压 zip 文件
bash 复制代码
# 解压到当前目录
unzip file.zip

# 解压到指定目录
unzip file.zip -d /path/to/extract/

# 查看压缩包内容
unzip -l file.zip

# 解压加密压缩包
unzip secure.zip
3、其他用法
bash 复制代码
# 更新压缩包中的文件
zip -u archive.zip new_file.txt

# 测试压缩包完整性
unzip -t file.zip

5 - Linux CentOS7.9 软件管理 (Yum)

RPM 和 YUM 包管理

RPM(Red-Hat Package Manager)是 CentOS 系统中最基础的包管理工具,它可以对 RPM 格式的软件包进行安装、卸载、查询、验证等操作。YUM(Yellowdog Updater Modified)是在 RPM 基础上开发的更高级的软件包管理工具,它能够自动解决软件包之间的依赖关系,大大简化了软件的安装和升级过程。

bash 复制代码
#安装相关命令
sudo yum install -y 软件名称

#查询相关命令
sudo yum search 关键词:搜索与关键词相关的软件包,包括软件名称和描述信息。
sudo yum list 软件名称:查看指定软件包的安装情况,显示软件包名称、版本、仓库等信息。
sudo yum list installed:列出系统中所有已安装的软件包。
sudo yum list available:列出仓库中所有可安装但未安装的软件包。
sudo yum info 软件名称:查看指定软件包的详细信息,包括描述、版本、大小、依赖等。

#更新相关命令
sudo yum update 软件名称:更新指定软件到最新版本,自动处理依赖关系。
sudo yum update:更新系统中所有可更新的软件包,包括系统组件,建议更新前做好备份。
sudo yum check-update:检查系统中哪些软件包有可用的更新,但不进行实际更新操作。

#卸载相关命令
sudo yum remove 软件名称 卸载指定软件,同时会自动卸载该软件所依赖但不再被其他软件使用的软件包。

#仓库相关命令
sudo yum repolist:列出当前启用的软件仓库,显示仓库名称、ID、状态等信息。
sudo yum repolist all:列出所有软件仓库,包括启用和禁用的。
sudo yum clean all:清除 YUM 缓存的软件包和仓库元数据,释放磁盘空间。
sudo yum makecache:重新生成 YUM 缓存,将仓库元数据和软件包信息缓存到本地,提高后续操作速度。

官方源 & 国内源

安装Nginx

1. 安装 Nginx 官方 RPM 源

首先要创建 Nginx 官方的 yum 源配置文件:

bash 复制代码
sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/\$basearch/
gpgcheck=0
enabled=1
EOF
2、清除并重建 yum 缓存
bash 复制代码
sudo yum clean all
sudo yum makecache
3、安装 Nginx
bash 复制代码
sudo yum install nginx -y
4、启动并设置开机自启
bash 复制代码
sudo systemctl start nginx
sudo systemctl enable nginx
5、验证安装结果
bash 复制代码
nginx -v

卸载Nginx

1、确认 Nginx 是否安装 首先检查系统中是否存在 Nginx 服务:

bash 复制代码
nginx -v  # 查看版本信息(若未安装会提示"command not found")
ps -ef | grep nginx  # 查看是否有Nginx进程正在运行

2、查找安装来源 通过以下命令确定安装方式:

bash 复制代码
# 检查是否通过yum安装
yum list installed | grep nginx

# 检查是否通过源码编译安装(查看常见安装路径)
ls /usr/local/nginx  # 源码编译默认路径
ls /etc/nginx        # yum安装默认配置路径

# 查找二进制文件位置
which nginx
whereis nginx

3、通用卸载步骤

bash 复制代码
#停止并禁用 Nginx 服务
sudo systemctl stop nginx
sudo systemctl disable nginx

#尝试通过包管理器卸载
sudo yum remove nginx

#手动删除残留文件
sudo rm -rf /etc/nginx
sudo rm -rf /usr/share/nginx
sudo rm -rf /var/log/nginx
sudo rm -rf /var/www/html
sudo rm -rf /usr/local/nginx  # 源码编译的常见路径

#删除服务文件
sudo rm -f /usr/lib/systemd/system/nginx.service
sudo systemctl daemon-reload

指定版本号安装

如果你需要安装特定版本(如 1.20.2),可以先查看可用版本列表,再选择安装:

bash 复制代码
#查看可用版本
yum list nginx --showduplicates | sort -r

#安装指定版本
sudo yum install nginx-1.20.2 -y

#升级或降级现有 Nginx
sudo yum update nginx -y

#降级到指定版本
sudo yum downgrade nginx-1.20.2 -y

锁定 Nginx 版本(避免自动更新)

bash 复制代码
# 安装插件
sudo yum install yum-versionlock -y

#锁定当前版本
sudo yum versionlock add nginx

# 解除锁定(如需升级)
sudo yum versionlock delete nginx

6 - Linux 远程文件上传和下载

一、上传命令

1. scp(Secure Copy)

参数说明

  • -r:用于递归复制目录。
  • -P:可指定 SSH 端口(注意是大写的 P)。
  • -C:能启用压缩传输。
bash 复制代码
# 上传单个文件
scp local.txt user@server:/home/user/

# 上传目录
scp -r local_dir/ user@server:/home/user/

# 从标准输入上传
cat file.txt | scp - user@server:/home/user/remote.txt
2. rsync

参数解释

  • -a:相当于-rlptgoD,能递归并保留几乎所有文件属性。
  • -v:开启详细输出模式。
  • -z:对传输数据进行压缩。
  • --delete:可删除目标端中源端不存在的文件。
  • --progress:显示传输进度。
bash 复制代码
# 同步目录(保留时间戳、权限等)
rsync -avz local_dir/ user@server:/home/user/remote_dir/

# 只同步更改的文件
rsync -avzu --progress local/ user@server:/remote/

# 使用SSH端口2222进行同步
rsync -e 'ssh -p 2222' local/ user@server:/remote/
3. sftp

常用命令

  • put local_file:上传单个文件。
  • put -r local_dir:递归上传目录。
  • get remote_file:下载单个文件。
  • ls/lls:查看远程 / 本地目录。
  • cd/lcd:切换远程 / 本地目录。
bash 复制代码
# 通过脚本非交互式执行
sftp -b batch_file user@server

# 批处理文件示例(batch_file)
put local.txt
get remote.txt
bye

二、下载命令

1. wget

参数说明

  • -c:支持断点续传。
  • -O:可指定输出文件名。
  • -r:递归下载(用于下载整个网站)。
  • --limit-rate=200k:限制下载速度。
bash 复制代码
# 下载并重命名文件
wget -O new_name.zip https://example.com/file.zip

# 后台下载
wget -b https://example.com/big_file.zip

# 下载多个文件
wget -i urls.txt  # urls.txt 包含多个URL
2. curl

参数解释

  • -O:使用服务器上的文件名保存文件。
  • -o:自定义输出文件名。
  • -L:允许重定向。
  • -#:显示进度条。
  • -u username:password:用于 HTTP 认证。
bash 复制代码
# 下载JSON数据并保存
curl -o data.json https://api.example.com/data

# 带认证下载
curl -u user:pass https://private.example.com/file

# 显示响应头信息
curl -I https://example.com
3. scp(下载)
bash 复制代码
# 下载单个文件
scp user@server:/home/user/remote.txt local/

# 下载目录
scp -r user@server:/home/user/remote_dir/ local/

三、其他命令

1. rz/sz(Zmodem 协议)
bash 复制代码
# 安装
brew install --cask iterm2
brew install lrzsz # mac本地安装
yum install lrzsz # linux服务器安装

7 - Linux - 文本处理 grep awk sed

在 Linux 系统中,文本处理是日常工作和运维的核心任务之一。grepawksed 被誉为文本处理的 "三剑客",它们各自擅长不同的场景,组合使用时能高效解决复杂的文本处理问题。本文将详细介绍这三个命令的常用用法,帮助你快速掌握文本处理技巧。

一、grep:文本搜索工具

grep(Global Regular Expression Print)主要用于在文本中搜索匹配指定模式的行,支持正则表达式,是文本过滤的利器。

  • -i:忽略大小写(不区分大小写匹配)
  • -v:反向匹配(输出不匹配模式的行)
  • -n:显示匹配行的行号
  • -r:递归搜索(在目录下所有文件中搜索)
  • -w:匹配完整单词(避免部分匹配)
  • -E:使用扩展正则表达式(支持 |、() 等元字符)
  • -o:只输出匹配的部分(而非整行)
  • -c:统计匹配的行数
示例用法
bash 复制代码
#在 `file.txt` 中搜索包含 "hello" 的行
grep "hello" file.txt

#忽略大小写搜索
grep -i "hello" file.txt

#搜索包含 "hello" 的行并显示行号:
grep -r -n "hello" file.txt

二、awk:文本分析与处理工具

awk 是一种强大的文本分析工具,擅长按列处理结构化文本(如日志、CSV 文件),支持变量、函数和流程控制,适合复杂的文本提取和转换。

arduino 复制代码
awk '模式 { 动作 }' [文件...]
  • 模式:指定处理哪些行(如行号、正则匹配)。
  • 动作:对匹配的行执行操作(如打印列、计算、条件判断)。
常用内置变量
  • $0:整行内容
  • $n:第 n 列的内容(n 为数字,从 1 开始)
  • NF:当前行的列数(Number of Fields)
  • NR:当前行的行号(Number of Records)
  • FS:输入字段分隔符(默认空格或制表符)
  • OFS:输出字段分隔符(默认空格)
示例用法
bash 复制代码
#打印 file.txt 的第 1 列和第 3 列
awk '{print $1, $3}' file.txt

#打印行号大于 5 的行
awk 'NR > 5 {print NR, $0}' file.txt

#按逗号分隔(CSV 文件),打印第 2 列:
awk -F ',' '{print $2}' data.csv

#统计文件的总行数:
awk 'END {print NR}' file.txt

#计算第 4 列的总和(假设为数字)
awk '{sum += $4} END {print "总和:", sum}' numbers.txt

#过滤第 2 列等于 "error" 的行,并打印行号和内容:
awk '$2 == "error" {print NR, $0}' log.txt

#自定义输出分隔符为逗号
awk 'BEGIN {OFS=","} {print $1, $2}' file.txt  # BEGIN 模式在处理前执行

三、sed:流编辑器

sed(Stream Editor)是一种流编辑器,主要用于对文本进行批量替换、删除、插入等操作,适合自动化修改文本内容,支持正则表达式。

常用选项
  • -i:直接修改原文件(需谨慎使用,建议先备份)
  • -n:只输出匹配的行(抑制默认输出)
  • -e:执行多个命令
常用命令
  • s/旧内容/新内容/:替换每行中第一个匹配的 "旧内容" 为 "新内容"
  • s/旧内容/新内容/g:替换每行中所有匹配的 "旧内容" 为 "新内容"(g 表示全局)
  • d:删除匹配的行
  • p:打印匹配的行
  • i\文本:在匹配行前插入文本
  • a\文本:在匹配行后追加文本
示例用法
bash 复制代码
#将 file.txt 中所有 "hello" 替换为 "world"(输出到终端,不修改原文件):
sed 's/hello/world/g' file.txt

#直接修改原文件,替换所有 "error" 为 "warning":
sed -i 's/error/warning/g' log.txt  # Linux 系统用法
# macOS 需加备份后缀:sed -i '' 's/error/warning/g' log.txt

#删除所有空行
sed '/^$/d' file.txt  # ^$ 匹配空行,d 表示删除

#打印包含 "example" 的行(配合 -n 只输出匹配行):
sed -n '/example/p' file.txt

#在第 3 行前插入 "Start Here":
sed '3 i Start Here' file.txt

#同时执行替换和删除操作:
sed -e 's/old/new/g' -e '/delete/d' file.txt

8 - Linux 输出重定向(标准输出与错误输出)

一、文件描述符

  • 标准输出 (stdout) :命令执行成功时的正常输出,文件描述符为 1
  • 标准错误输出 (stderr) :命令执行出错时的提示信息,文件描述符为 2
  • 默认情况下,两者都会显示在终端上,但它们是完全独立的数据流

二、单独重定向操作

1.仅重定向标准输出(正确输出)

覆盖模式:1> 或简化为 > , 追加模式:1>> 或简化为 >>

bash 复制代码
# 将ls的正确输出写入file.txt,错误信息仍显示在终端
ls /home 1> file.txt

# 简化写法(推荐)
ls /home > file.txt

# 将系统信息追加到system.log
uname -a 1>> system.log

# 简化写法(推荐)
date >> system.log

2.仅重定向标准错误输出(错误信息)

必须显式指定文件描述符 2,没有简化写法

bash 复制代码
# 仅将错误信息写入error.log,正确输出仍显示在终端
ls /invalid/path 2> error.log

# 尝试创建已存在的目录,错误信息会被捕获
mkdir /root/test 2> error.log

# 持续记录错误信息到日志文件(不覆盖历史)
sudo apt update 2>> update_errors.log

三、组合重定向操作

1.分别重定向到不同文件

bash 复制代码
# 正确信息存result.txt,错误信息存errors.txt
wget https://example.com/file.iso 1> result.txt 2> errors.txt

# 编译程序时分离输出
gcc program.c -o program 1> compile_output.txt 2> compile_errors.txt

2.都重定向到同一个文件

方法 1:&>(覆盖模式)

bash 复制代码
# 所有输出(正确+错误)都写入all_output.log(覆盖原有内容)
ping -c 3 example.com &> ping_results.log

方法 2:&>>(追加模式)

bash 复制代码
# 所有输出追加到日志文件
./daily_backup.sh &>> backup_combined.log

方法 3:兼容性写法 > file 2>&1

bash 复制代码
# 覆盖模式(等价于&>)
curl https://api.example.com > api_response.log 2>&1

# 追加模式(等价于&>>)
curl https://api.example.com >> api_response.log 2>&1

3.混合处理(过滤不需要的输出)

仅保留正确输出,丢弃错误信息

bash 复制代码
# 错误信息被丢弃(发送到/dev/null黑洞)
ls *.txt > text_files.txt 2> /dev/null

# 下载文件但不显示错误
wget -q https://example.com/file.zip 2> /dev/null

仅保留错误信息,丢弃正确输出

bash 复制代码
# 正确输出被丢弃,只记录错误
find / -name "secret.txt" > /dev/null 2> find_errors.log

# 测试命令是否存在,只捕获错误
command -v non_existent_cmd > /dev/null 2> cmd_check.log

9 - Linux 管道符与 sort、wc、uniq 命令详解

一、管道符 | 基础

管道符的作用是将前一个命令的标准输出 作为后一个命令的标准输入,实现命令间的数据传递。

bash 复制代码
command1 | command2 | command3

特点

  • 管道只处理标准输出(stdout),标准错误(stderr)不会通过管道传递
  • 管道中的命令并行执行,数据实时传递
  • 可无限串联多个命令

二、sort 命令:排序文本内容

常用选项

  • -n:按数值大小排序(而非字符串)
  • -r:反向排序(降序)
  • -k:指定排序的列(字段)
  • -t:指定字段分隔符
  • -u:去除重复行(排序后相同的行只保留一行)
  • -o:将排序结果写入指定文件(而非标准输出)
示例
bash 复制代码
# 基本排序:
# 对文件内容按字典顺序排序
sort names.txt
# 对命令输出排序(如查看所有用户并排序)
cat /etc/passwd | cut -d: -f1 | sort


#数值排序:
# 按数值大小排序(适合处理数字列表)
sort -n numbers.txt
# 按数值降序排序
sort -nr numbers.txt

#按指定字段排序:
# 按第3列数值排序(以空格为分隔符)
sort -k3n data.txt
# 以冒号为分隔符,按第3列数值降序排序(适合/etc/passwd文件)
sort -t: -k3nr /etc/passwd

#去重并排序:
# 排序并去除重复行(等价于 sort file | uniq)
sort -u words.txt

三、wc 命令:统计文本数据

wc(Word Count)命令用于统计文本的行数、单词数和字符数。

常用选项

  • -l:只统计行数
  • -w:只统计单词数
  • -c:只统计字符数(包括空格和换行符)
  • -m:只统计字符数(考虑多字节字符)
bash 复制代码
#基本统计:
# 统计文件的行数、单词数、字符数
wc document.txt
# 输出格式:行数 单词数 字符数 文件名

#只统计行数:
# 统计当前目录下的文件数量
ls | wc -l
# 统计日志中包含"ERROR"的行数
grep "ERROR" app.log | wc -l

#统计单词和字符:
# 统计文档的单词数
wc -w essay.txt
# 统计字符串的字符数
echo "Hello World" | wc -c  # 包含空格和换行符,输出12

四、uniq 命令:处理重复行

uniq 命令用于检测和删除文本中的重复行,注意:它只处理相邻的重复行 ,通常与 sort 配合使用。

常用选项

  • -u:只显示不重复的行
  • -d:只显示重复的行(至少出现两次)
  • -c:显示每行的重复次数
  • -i:忽略大小写比较
bash 复制代码
#去除重复行:
# 先排序使重复行相邻,再去重(最常用组合)
sort words.txt | uniq

#统计重复次数:
# 统计每个单词出现的次数(并按次数排序)
sort words.txt | uniq -c | sort -nr
# 统计日志中每个IP的访问次数
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" access.log | sort | uniq -c | sort -nr

#筛选特定行:
# 只显示重复出现的行
sort data.txt | uniq -d
# 只显示不重复的行
sort data.txt | uniq -u

五、命令组合实战案例

1.分析系统用户

bash 复制代码
# 查看系统用户ID(UID)并按UID排序,显示前5个
cat /etc/passwd | cut -d: -f1,3 | sort -t: -k2n | head -n5

2.日志分析

bash 复制代码
# 统计Web服务器日志中访问量最高的前10个页面
cat access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -n10

3.处理数据文件

bash 复制代码
# 分析CSV文件:按第4列数值排序,去重,统计总行数
cat data.csv | sort -t',' -k4nr | uniq | wc -l

4.系统进程分析

bash 复制代码
# 查找内存占用最高的前5个进程
ps aux | sort -k4nr | head -n5

5.文本内容分析

bash 复制代码
# 统计一篇文章中出现频率最高的前10个单词
cat article.txt | tr '[:upper:]' '[:lower:]' | grep -oE '\b[a-z]+\b' | sort | uniq -c | sort -nr | head -n10

10 - Linux 定时任务

Linux中的定时任务由crontab命令来执行,用来读取和修改名为crontab的文件,crontab文件包含了你要定时执行的程序列表,也包含了执行的时刻。

crontab用于修改crontab文件,cron用于实际执行定时的程序。

bash 复制代码
crontab [选项]

常用选项

  • -e: 编辑当前用户的 crontab 文件
  • -l: 列出当前用户的 crontab 任务
  • -r: 删除当前用户的所有 crontab 任务
  • -u 用户名: 管理指定用户的 crontab(需 root 权限)

命令格式

bash 复制代码
*    *    *    *    *    命令
分   时   日   月   周    要执行的命令
  • 每个字段的取值范围:
    • 分: 0-59
    • 时: 0-23
    • 日: 1-31
    • 月: 1-12 或 Jan-Dec
    • 周: 0-6 或 Sun-Sat(0 和 7 都代表周日)
  • 特殊符号:
    • *: 匹配所有值(如*在分字段表示每分钟)
    • ,: 分隔多个值(如1,3,5表示 1、3、5)
    • -: 表示范围(如1-5表示 1 到 5)
    • /n: 每隔 n 单位(如*/10在分字段表示每 10 分钟)

例句

bash 复制代码
#每分钟执行一次命令
* * * * * echo "每分钟执行" >> ~/cron.log

#每天凌晨 3 点执行备份
0 3 * * * /usr/local/bin/backup.sh

#每周一、三、五的 18:30 执行脚本
30 18 * * 1,3,5 /home/user/script.sh

#每月 1 日和 15 日的 12:00 执行命令
0 12 1,15 * * /path/to/command

#每小时的第 15 分钟执行
15 * * * * /path/to/command

#工作日(周一至周五)9:00 执行
0 9 * * 1-5 /path/to/command

#每10分钟执行一次
*/10 * * * * /path/to/your/command >> /path/to/your/logfile.log 2>&1

Linux 查看系统软件硬件信息

在 Linux 系统管理和运维中,了解系统的软硬件信息是基础操作。本文档将详细介绍查看 Linux 系统硬件(如 CPU、内存、磁盘、网络等)和软件(如操作系统版本、内核信息、安装软件等)信息的常用命令及用法。

一、系统基础信息查看

1. 操作系统版本信息

  • lsb_release -a 显示 Linux 标准基础(LSB)信息,包括发行版名称、版本号、描述等(需安装 lsb-core 包)。

  • cat /etc/os-release从系统文件中直接读取操作系统版本信息,适用于大多数 Linux 发行版(如 Ubuntu、CentOS、Debian 等)。 关键字段:NAME(发行版名称)、VERSION(版本)、ID(发行版 ID)。

  • cat /etc/issue 显示登录前的系统提示信息,通常包含简化的版本信息。

2.内核信息

  • uname -a 显示完整的内核信息,包括内核版本、主机名、硬件架构、操作系统类型等。

  • uname -r 仅显示内核版本号(如 5.15.0-78-generic)。

  • cat /proc/version 从内核进程文件中读取内核版本及编译信息,包含 GCC 版本等细节。

3.系统运行时间与负载

  • uptime显示系统运行时间、当前登录用户数及系统负载(1 分钟、5 分钟、15 分钟平均负载)。

  • wuptime 基础上增加当前登录用户及用户执行的命令信息。

  • tophtop 动态查看系统负载、进程资源占用等信息(htop 需单独安装,界面更友好)。

二、硬件信息查看

1. CPU 信息

  • lscpu 显示 CPU 架构、核心数、线程数、主频、缓存等详细信息。 关键参数:CPU(s)(总逻辑核心数)、Core(s) per socket(每颗 CPU 核心数)、Socket(s)(CPU 插槽数)、Thread(s) per core(每核心线程数)。
  • cat /proc/cpuinfo 从内核文件中读取 CPU 详细参数,包括每个核心的型号、主频、缓存等(多核心会显示多条记录)。

2.内存信息

  • free -h 以人类可读的单位(GB、MB)显示内存使用情况,包括总内存、已使用、空闲、缓存 / 缓冲区占用等。
  • cat /proc/meminfo 显示更详细的内存参数,如物理内存、交换分区、缓存、可用内存等具体数值(单位:KB)。
  • vmstat -s 统计内存相关的各种指标,如内存总容量、页交换次数、内存分配失败次数等。

3. 磁盘信息

(1)磁盘分区与容量

  • df -h 以人类可读单位显示磁盘分区的使用情况,包括总容量、已使用、可用空间及挂载点。
  • lsblk 以树形结构显示磁盘分区布局,包括磁盘名称(如 sda)、分区(如 sda1)、大小、挂载点等。
  • fdisk -l 显示磁盘分区表详细信息,需 root 权限(sudo fdisk -l),可查看磁盘类型(MBR/GPT)、分区大小等。

(2)磁盘 I/O 性能

  • iostat 监控磁盘 I/O 使用率、读写速度、响应时间等(需安装 sysstat 包)。
  • iotop 动态查看进程的磁盘 I/O 占用情况(需 root 权限,需安装 iotop 包)。

4. 网络信息

(1)网络接口与 IP

  • ip addrifconfig 显示网络接口的 IP 地址、MAC 地址、子网掩码等信息(ifconfig 需安装 net-tools 包)。
  • ip routeroute -n 查看路由表信息,包括默认网关(default 条目)。

(2)网络连接与端口

  • ss -tuln 显示当前监听的 TCP/UDP 端口及对应的进程(-t:TCP,-u:UDP,-l:监听,-n:数字形式显示端口)。
  • netstat -tuln 功能同 ss -tuln,但需安装 net-tools 包。
  • lsof -i :端口号 查看指定端口被哪个进程占用(如 lsof -i :80 查看 80 端口占用)。

(3)网络带宽与流量

  • iftop 实时监控网络接口的带宽使用情况,按连接显示上传 / 下载速度(需安装 iftop 包)。
  • nload 以图形化方式显示总带宽使用情况(需安装 nload 包)。

5. 显卡信息

  • lspci | grep -i vga 显示显卡型号信息(集成或独立显卡)。 示例:01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1)
  • nvidia-smi 若为 NVIDIA 显卡且安装驱动,可显示显卡型号、显存使用、温度、进程占用等详细信息。

6. 主板与硬件汇总

  • lspci 显示所有 PCI 总线设备信息,包括显卡、网卡、声卡、主板芯片组等。 可用 lspci -v 查看更详细的设备描述。
  • lsusb 显示所有 USB 设备信息,包括鼠标、键盘、U 盘、外置硬盘等。
  • dmidecode 读取硬件的 DMI(桌面管理接口)信息,需 root 权限,可查看主板型号、BIOS 版本、内存插槽信息等。 示例:sudo dmidecode -t memory(查看内存详细信息)、sudo dmidecode -t baseboard(查看主板信息)。

三、软件信息查看

  1. 已安装软件包

(1)Debian/Ubuntu 系统(APT 包管理)

  • dpkg -l 列出所有已安装的软件包,可配合 grep 筛选(如 dpkg -l | grep python 查找 Python 相关包)。
  • apt list --installed 以更简洁的格式显示已安装软件包。

(2)CentOS/RHEL 系统(RPM/YUM 包管理)

  • rpm -qa 列出所有已安装的 RPM 包,筛选示例:rpm -qa | grep java
  • yum list installeddnf list installed 通过 YUM/DNF 工具查看已安装软件包。
  1. 系统服务信息
  • systemctl list-unit-files --type=service 列出所有系统服务及其状态(启用 / 禁用)。
  • systemctl status 服务名 查看指定服务的运行状态(如 systemctl status sshd 查看 SSH 服务)。
  • ps aux 列出当前运行的所有进程,包含进程名、PID、资源占用等信息(可配合 grep 筛选特定进程)。

Linux内存与磁盘

一、内存管理常用命令

内存管理是 Linux 系统运维的核心任务之一,以下是监控和管理内存的常用命令。

1.free - 查看内存使用情况

功能:显示系统内存总量、已使用、空闲及缓冲区等信息。

常用参数:

  • -h:以人类可读的单位(GB、MB)显示
  • -m:以 MB 为单位显示
  • -g:以 GB 为单位显示
  • -s <秒数>:持续刷新显示,间隔指定秒数
bash 复制代码
free -h  # 人性化显示内存使用
free -s 5  # 每5秒刷新一次内存信息
sql 复制代码
[stark@192 ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        1.0G        1.8G         26M        856M        2.4G
Swap:          3.9G          0B        3.9G

内存(Mem)使用情况说明

  • 系统总物理内存为 3.7GB。
  • 已被进程直接使用的内存为 1.0GB,这部分包括正在运行的应用程序和服务所占用的内存。
  • 完全空闲且未被任何进程或系统缓存使用的内存为 1.8GB。
  • 被多个进程共享的内存为 26M,通常用于共享库、临时文件等,数值较小属于正常情况。
  • 系统缓存的内存(buff/cache)为 856M,其中包含临时存储磁盘数据的 buffer 和临时存储文件数据的 cache,这部分内存可被系统自动释放给需要的进程。
  • 系统当前可立即分配给新进程的可用内存为 2.4GB,包括空闲内存和可释放的缓存内存,这是衡量内存可用性的关键指标。

交换分区(Swap)使用情况

  • 交换分区的总大小为 3.9GB,它用于在物理内存不足时临时存储不活跃进程的数据。
  • 当前交换分区的使用量为 0B,说明物理内存充足,无需依赖虚拟内存。
  • 交换分区的空闲大小为 3.9GB。

2. top - 实时系统资源监控

功能:动态显示进程的资源占用情况,包括内存、CPU 使用率等。

内存相关操作:

  • 进入界面后按 M:按内存使用率排序进程
  • P:按 CPU 使用率排序
  • q:退出监控界面

3.htop - 增强版进程监控

功能:比 top 更直观的交互式界面,支持鼠标操作和彩色显示。htop需要进行安装:在 RHEL/CentOS 系统中,htop 通常在 EPEL (Extra Packages for Enterprise Linux) 源中。

bash 复制代码
#首先安装 EPEL 源

# CentOS/RHEL 7
sudo yum install epel-release

# CentOS/RHEL 8 及以上
sudo dnf install epel-release

#安装完成后,再尝试安装 htop:
sudo yum install htop

二、磁盘管理常用命令

磁盘管理命令用于查看磁盘分区、使用率、挂载状态,以及管理文件系统等。

1. df - 查看磁盘分区使用率

显示所有挂载的磁盘分区的总容量、已使用容量、可用容量和使用率。

常用参数:

  • -h:以人类可读的单位(GB、MB)显示。
  • -T:显示分区的文件系统类型(如 ext4、xfs)。
bash 复制代码
df -h  # 人性化显示磁盘使用率
df -hT  # 显示磁盘使用率及文件系统类型

2.du - 查看目录 / 文件占用磁盘空间

计算指定目录或文件的磁盘占用大小,常用于排查大文件或目录。

常用参数:

  • -h:以人类可读单位显示。
  • -s:仅显示总和(不列出子目录详情)。
  • -sh *:显示当前目录下所有文件 / 目录的总大小。
  • -d <深度>:限制显示的目录深度(如 -d 1 仅显示一级子目录)。
bash 复制代码
du -sh /home  # 查看/home目录总占用空间
du -h -d 1 /var  # 查看/var目录下一级子目录的空间占用
du -h --max-depth=1

3.fdisk - 磁盘分区管理工具

用于查看、创建、删除磁盘分区(需管理员权限),支持 MBR 分区表。

  • -l:列出所有磁盘及分区信息。
  • /dev/sdX:指定操作的磁盘(如 /dev/sda 为第一块硬盘)。
bash 复制代码
sudo fdisk -l  # 查看所有磁盘和分区信息
sudo fdisk /dev/sdb  # 对第二块硬盘进行分区操作(进入交互模式)

4.parted - 高级磁盘分区工具

支持 GPT 分区表和更大容量磁盘,可创建、调整分区大小(需管理员权限)。

  • -l:列出所有磁盘及分区信息(包括 GPT 分区)。
  • /dev/sdX:指定操作的磁盘。
bash 复制代码
sudo parted -l  # 查看所有磁盘分区(含GPT)
sudo parted /dev/sdb  # 进入交互模式管理第二块硬盘

5.mountumount - 挂载 / 卸载文件系统

mount 用于将磁盘分区或外部设备挂载到系统目录;umount 用于卸载已挂载的设备。

  • mount <设备路径> <挂载点>:挂载指定设备到目标目录。
  • umount <挂载点>:卸载指定挂载点的设备。
  • -lmount -l 列出所有已挂载的设备及信息。
bash 复制代码
sudo mount /dev/sdb1 /mnt/external  # 挂载/dev/sdb1到/mnt/external
sudo umount /mnt/external  # 卸载/mnt/external
mount -l  # 查看所有挂载的设备

6.lsblk - 查看磁盘及分区结构

以树形结构显示磁盘、分区及挂载点信息,直观展示存储设备关系。

常用参数:

  • -f:显示文件系统类型和 UUID。
  • -l:以列表形式显示(非树形)。
bash 复制代码
lsblk  # 树形显示磁盘分区结构
lsblk -f  # 显示分区的文件系统和UUID

Linux 进程管理

在 Linux 系统中,进程是程序的运行实例,进程管理是系统运维和日常使用的核心技能之一。本文档将系统整理常用的 Linux 进程管理命令,包括进程查看、控制、状态分析等核心操作。

一、进程基础概念

在开始学习命令前,先明确几个核心概念:

  • 进程(Process):程序的一次执行过程,拥有独立的内存空间、PID(进程 ID)和状态。
  • PID:每个进程的唯一标识符,由系统自动分配,范围通常为 1 - 32768(可通过内核参数调整)。
  • PPID:父进程 ID,标识当前进程的创建者。
  • 进程状态:包括运行(R)、睡眠(S)、僵尸(Z)、停止(T)等

二、进程查看命令

1.ps:查看当前进程快照

ps 是最基础的进程查看命令,用于获取系统在某一时刻的进程状态快照。

常用参数:

  • -a:显示所有用户的进程(不含会话引线)
  • -u:以用户为中心显示进程信息(含 CPU、内存占用)
  • -x:显示无控制终端的进程
  • -e:显示所有进程(等价于 -A
  • -f:显示完整格式信息(UID、PID、PPID、CMD 等)
  • -l:显示长格式信息(含进程状态、优先级等)
bash 复制代码
# 显示所有进程的完整信息
ps -ef

# 以用户为中心显示进程详细信息
ps -u username

# 查看指定进程(如PID为1234的进程)
ps -p 1234

# 以树状结构显示进程关系
ps -ef --forest

输出字段说明:

  • PID 表示进程 ID

  • PPID 表示父进程 ID

  • UID 表示进程所属用户 ID

  • C 表示进程 CPU 使用率(百分比)

  • STIME 表示进程启动时间

  • TTY 表示进程关联的终端

  • TIME 表示进程累计占用 CPU 时间

  • CMD 表示启动进程的命令

2. top:实时监控进程动态

top 命令用于实时动态地查看系统进程状态,默认每 3 秒刷新一次,是性能分析的常用工具。

核心功能:

  • 实时显示进程 CPU、内存占用率
  • 支持按 CPU、内存等指标排序
  • 可交互操作(如终止进程、调整刷新频率)

常用交互快捷键:

  • P:按 CPU 使用率排序(默认)
  • M:按内存使用率排序
  • N:按 PID 排序
  • k:终止指定 PID 的进程
  • q:退出 top
  • s:调整刷新间隔时间(秒)
  • h:显示帮助信息
bash 复制代码
# 启动top监控
top

# 只显示指定用户的进程
top -u username

# 以批处理模式运行(非交互式,适合脚本)
top -b -n 1  # 只输出1次结果

3.htop:增强版进程监控工具

htoptop 的增强替代工具,提供更友好的交互界面和更多功能(需单独安装,如 sudo apt install htop)。

优势特性:

  • 支持鼠标操作
  • 彩色显示进程状态
  • 横向滚动查看完整命令
  • 内置进程搜索和过滤功能

常用操作:

  • F2:进入设置界面(调整显示字段、颜色等)

  • F3:搜索进程

  • F4:过滤进程

  • F5:切换树状视图

  • F9:发送信号终止进程(如 SIGKILL)

  • q:退出 htop

4. pstree:以树状结构显示进程关系

pstree 命令用于以树状图形式展示进程间的父子关系,清晰呈现进程的创建层级。

常用参数:

  • -p:显示每个进程的 PID
  • -u:显示进程所属用户
  • -a:显示完整命令行参数
  • -h:高亮显示当前进程及其父进程
bash 复制代码
# 显示所有进程的树状关系及PID
pstree -p

# 显示指定用户的进程树
pstree username

# 高亮显示PID为1234的进程及其祖先
pstree -h 1234

三、进程控制命令

1. kill:终止进程

kill 命令通过向进程发送信号来控制进程,默认发送 SIGTERM(15)信号请求进程终止。

常用信号:

  • 1 号信号 SIGHUP 表示重新加载配置(不终止进程)

  • 9 号信号 SIGKILL 表示强制终止进程(无法被忽略)

  • 15 号信号 SIGTERM 表示正常终止进程(默认信号,可被捕获)

  • 19 号信号 SIGSTOP 表示暂停进程(无法被忽略)

  • 20 号信号 SIGTSTP 表示暂停进程(可被忽略,通常由 Ctrl+Z 触发)

bash 复制代码
# 发送默认信号终止进程(PID=1234)
kill 1234

# 强制终止进程(无法被进程捕获)
kill -9 1234

# 重新加载进程配置(如Nginx、Apache)
kill -1 5678  # 等价于 kill -HUP 5678

# 通过进程名终止进程(结合pkill使用更方便)
kill -9 $(ps -ef | grep "process_name" | grep -v grep | awk '{print $2}')

2.pkill/pgrep:按名称操作进程

  • pgrep:通过进程名或其他属性查找进程 PID
  • pkill:通过进程名发送信号(相当于 pgrep + kill 的组合)

常用参数:

  • -u:按用户筛选进程
  • -f:匹配完整命令行(含参数)
  • -l:显示进程名(仅 pgrep)
  • -n:只匹配最新启动的进程
  • -o:只匹配最早启动的进程
bash 复制代码
# 查找名为"nginx"的进程PID
pgrep nginx

# 查找进程名并显示PID和进程名
pgrep -l nginx

# 终止所有名为"python"的进程
pkill python

# 终止用户"test"的所有进程
pkill -u test

# 匹配包含"chrome"的完整命令行进程
pkill -f "chrome --incognito"

3.jobs/fg/bg:管理后台进程

用于控制终端会话中的前台 / 后台进程,常见于命令行任务管理。

命令说明:

  • jobs:显示当前终端的后台任务列表
  • fg %N:将第 N 个后台任务切换到前台
  • bg %N:将暂停的后台任务继续运行
  • &:在命令末尾添加,直接将任务放入后台运行
  • Ctrl+Z:暂停当前前台任务并放入后台
bash 复制代码
# 启动后台任务(如长时间运行的脚本)
python long_running_script.py &

# 查看后台任务列表
jobs

# 将编号为1的后台任务切换到前台
fg %1

# 暂停前台任务(按Ctrl+Z)
# [1]+  Stopped                 python long_running_script.py

# 让暂停的任务在后台继续运行
bg %1

# 终止后台任务(先通过jobs查编号,再用kill)
kill %1

4.nohup:忽略挂断信号运行进程

nohup 命令用于启动进程,使其在终端关闭后仍能继续运行(忽略 SIGHUP 信号)。

bash 复制代码
# 后台运行脚本,输出重定向到nohup.out
nohup python script.py &

# 自定义输出文件路径
nohup ./server.sh > server.log 2>&1 &
# 说明:2>&1 表示将错误输出(stderr)重定向到标准输出(stdout)

四、常用场景示例

场景 1:查找高 CPU 占用的进程

perl 复制代码
# 方法1:使用top实时查看(按P排序)
top

# 方法2:使用ps一次性查看
ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%cpu | head -10

场景 2:查找高内存占用的进程

bash 复制代码
# 方法1:top按内存排序(按M)
top

# 方法2:ps按内存排序
ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%mem | head -10

场景 3:强制终止无响应的程序

bash 复制代码
# 先查找程序PID
pgrep -l firefox

# 强制终止(若普通kill无效)
pkill -9 firefox
# 或通过PID
kill -9 12345

场景 4:后台运行任务并持久化输出

bash 复制代码
# 后台运行并记录日志
nohup ./data_process.sh > process.log 2>&1 &

# 查看日志输出
tail -f process.log
相关推荐
树℡独1 小时前
ns-3仿真之应用层(五)
服务器·网络·tcp/ip·ns3
嵩山小老虎2 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
Fleshy数模2 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
a41324472 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
Configure-Handler2 小时前
buildroot System configuration
java·服务器·数据库
津津有味道3 小时前
易语言TCP服务端接收刷卡数据并向客户端读卡器发送指令
服务器·网络协议·tcp·易语言
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.3 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
Genie cloud4 小时前
1Panel SSL证书申请完整教程
服务器·网络协议·云计算·ssl
一只自律的鸡4 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
17(无规则自律)4 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考