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
相关推荐
门思科技8 分钟前
LoRaWAN 的网络拓扑全解析:架构、原理与应用实践
服务器·网络·人工智能·科技·物联网·架构
我的收藏手册17 分钟前
Linux 网络命令大全
linux·服务器·网络
xx.ii32 分钟前
28.Linux :通过源代码编译安装lamp
linux·运维·服务器
siriuuus34 分钟前
Linux文本三剑客的使用及常见重点操作
linux·文本三剑客
焊锡与代码齐飞1 小时前
嵌入式第三十五课!!Linux下的网络编程
linux·运维·服务器·开发语言·网络·学习·算法
2501_927773072 小时前
Linux操作系统编程——网络
linux·运维·网络
jiunian_cn2 小时前
【Linux】线程
android·linux·运维·c语言·c++·后端
小猪写代码2 小时前
解释一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的区别
linux·ubuntu
喜欢你,还有大家2 小时前
Linux笔记8——shell编程基础-2
linux·服务器·笔记
泽虞2 小时前
《LINUX系统编程》笔记p3
linux·运维·服务器·c语言·笔记·面试