Linux系统编程:(二)基础指令详解

1. alias指令

在 Linux 终端里敲命令,有些组合非常长且难记。为了提高效率,Linux 提供了 alias命令,让你可以给常用的长命令设置一个简短的"别名"。

1.1 功能说明

用于设置或查看命令的别名。设置后,你可以直接输入别名来执行原本复杂的命令,省时又省力。

1.2 基本语法

bash 复制代码
alias  # 查看当前系统所有已设置的别名
alias [别名]='[原始命令及参数]'  # 设置别名
unalias [别名]  # 删除别名

1.3 实战示例:创建并验证别名

假设我们经常需要查看目录的详细信息,每次都敲 ls -a -l -n太麻烦了,我们给它起个简单的名字叫 hello

第一步:设置别名

bash 复制代码
alias hello='ls -a -l -n'

第二步:验证别名是否生效

可以使用 which或直接敲别名看效果。

bash 复制代码
which hello

输出解析

bash 复制代码
alias hello='ls -a -l -n'  <-- 确认这是一个别名定义
        /usr/bin/ls        <-- 实际执行的底层命令

第三步:使用别名

现在直接输入 hello试试:

bash 复制代码
hello

输出解析

bash 复制代码
total 36
drwxrwxr-x 2 1003 1003 4096 Jan 11 17:59 .
drwx------ 22 1003 1003 4096 Jan 11 17:57 ..
-rw-rw-r-- 1 1003 1003 28667 Jan 11 18:29 temp.txt

注意:这里显示的是带 UID/GID 的数字,而不是用户名/组名,因为 -n参数的作用。


补充

1. alias设置的别名通常在当前终端会话中有效。如果想永久生效,需要将别名配置写入 ~/.bashrc~/.zshrc文件中。

bash 复制代码
# 编辑.bashrc文件
[whb@bite-alicloud ~]$ vim ~/.bashrc
# 在文件末尾添加以下内容
alias mkdirp='mkdir -p'  # 递归创建目录
alias rmrf='rm -rf'      # 强制递归删除目录/文件
 
# 使配置生效
[whb@bite-alicloud ~]$ source ~/.bashrc
 
# 测试别名
[whb@bite-alicloud test]$ mkdirp a/b/c/d  # 等同于mkdir -p a/b/c/d
[whb@bite-alicloud test]$ tree a
a
└── b
    └── c
        └── d
 
3 directories, 0 files
 
[whb@bite-alicloud test]$ rmrf a  # 等同于rm -rf a
[whb@bite-alicloud test]$ ls a
ls: 无法访问'a': 没有那个文件或目录

2. 当设置的别名不想使用时,可以使用unalias指令将别名删除。

bash 复制代码
# 查看所有别名
[whb@bite-alicloud test]$ alias
alias cp='cp -i'
alias hello='ls -a -l -n'
alias mkdirp='mkdir -p'
alias mv='mv -i'
alias rm='rm -i'
alias rmrf='rm -rf'
alias ls='ls --color=auto'
 
# 删除hello别名
[whb@bite-alicloud test]$ unalias hello
[whb@bite-alicloud test]$ hello
-bash: hello: 未找到命令

2. grep指令

在 Linux 终端中,面对动辄上万行的日志或配置文件,如何快速找到我们需要的信息?grep命令就是解决这个问题的终极利器。它能在文件中搜索指定的字符串,并将匹配的行打印出来。

2.1 基本语法

复制代码
grep [选项] 搜寻字符串 文件

2.2 常用选项

  • -i忽略大小写。在搜索时不区分字母的大小写,非常实用。

  • -n显示行号。在输出结果前标明该行在文件中的具体行数,方便定位。

  • -v反向选择 。默认是显示匹配的行,加上 -v则显示不匹配的行,常用于排除特定内容。

3.3 实战示例

首先,我们准备一个测试文件 temp.txt,内容如下:

复制代码
abcd
ABCD
hello
bite
1234

1. 基础搜索

最基本的用法,搜索包含 abcd的行。

复制代码
grep "abcd" temp.txt

输出:

复制代码
abcd

2. 忽略大小写搜索 (-i)

搜索 abcd,但不区分大小写,结果会同时匹配 abcdABCD

复制代码
grep -i "abcd" temp.txt

输出:

复制代码
abcd
ABCD

3. 显示行号 (-n)

想知道匹配内容在第几行吗?加上 -n

复制代码
grep -n "abcd" temp.txt

输出:

复制代码
1:abcd

4. 组合使用 (-ni)

忽略大小写的同时显示行号,这是最常用的组合之一。

复制代码
grep -ni "abcd" temp.txt

输出:

复制代码
1:abcd
2:ABCD

5. 反向选择 (-v)

找出不包含abcd的所有行。

复制代码
grep -v "abcd" temp.txt

输出:

复制代码
ABCD
hello
bite
1234

6. 反向选择并显示行号 (-vn)

排除 abcd的同时,看看剩下内容都在第几行。

复制代码
grep -vn "abcd" temp.txt

输出:

复制代码
2:ABCD
3:hello
4:bite
5:1234

3. top指令

在 Linux 系统运维中,实时监控系统的运行状态和进程资源占用是必不可少的技能。top命令就像 Windows 下的"任务管理器",它是一个动态显示系统进程信息的实时视图。

3.1 基础语法

参数解析:

  • -d 1 :指定刷新时间间隔为 1 秒。这意味着屏幕上显示的数据每隔 1 秒会自动更新一次。

  • -n 5 :指定刷新的次数。这里设置为 5,意味着 top 会连续更新 5 次数据后自动退出。

3.2 常用交互指令

  • q退出​ top 界面。

  • k:杀死指定 PID 的进程(输入 PID 后按回车确认)。

  • P:按 CPU 使用率从高到低排序(默认)。

  • M:按内存(MEM)使用率从高到低排序。

  • h:查看帮助文档。

启动与基本交互

直接在终端输入 top即可进入监控界面。退出时,按下键盘上的 q键即可返回命令行。

实战演示:批量监控模式

除了交互式运行,top还支持在命令行指定刷新次数,非常适合脚本采集或单次观察。

4. zip/unzip指令

在 Linux 系统中,文件的压缩、解压以及跨机器传输是日常运维中最基础也最频繁的操作。本文将带你掌握 ziptar的核心用法,以及如何使用 rzsz实现与 Windows 的极简互传。


4.1 zip/ unzip指令:通用的压缩与解压

虽然 Linux 原生更偏爱 tar,但 zip格式因其通用性(Windows/macOS/Linux 全兼容),在跨平台协作中依然不可或缺。

1. 功能与语法

  • 功能 :将文件或目录压缩成 .zip格式。

  • 压缩语法zip 压缩包名.zip 源文件或目录

  • 解压语法unzip 压缩包名.zip -d 目标目录

2. 常用选项

zip:

  • -r:递归压缩,压缩目录时必须使用该选项,否则仅压缩目录本身,不包含子目录和文件。
  • -q:静默压缩,不显示压缩过程的详细信息。
  • -m:压缩后删除原始文件(移动文件到压缩包)。
  • -v:显示压缩过程的详细信息( verbose 模式)。

unzip:

  • -d <目录>:指定解压目录,若目录不存在则自动创建。
  • -l:查看压缩包内的文件列表,不解压。
  • -q:静默解压,不显示解压过程的详细信息。
  • -o:覆盖已存在的文件,不提示确认。
  • -x <文件>:排除压缩包内的指定文件,不解压该文件。

3. 实战示例

bash 复制代码
# 将 test2 目录压缩为 test2.zip
zip test2.zip test2/*

# 将 test2.zip 解压到 /tmp 目录下
unzip test2.zip -d /tmp

4.2 跨平台传输工具:rzsz

如果你使用的是 XShell 等终端工具,想要从 Windows 本地向远端 Linux 服务器传文件,或者反向传输,安装**rzsz**是最直观的方法。

1. 功能

用于在 Windows 和远端 Linux 之间传输文件。安装完毕后,可以直接通过拖拽的方式将文件上传到 Linux 终端当前目录下。

2. 安装方法

根据你的 Linux 发行版选择对应的包管理器,支持 yum 和 apt 两种包管理器::

复制代码
# CentOS / RHEL 系统
sudo yum install -y lrzsz

# Ubuntu / Debian 系统
sudo apt install -y lrzsz

3. 核心命令

  • rz:从 Windows 客户端上传文件到 Linux 服务器,执行后会弹出文件选择窗口,选择文件后自动上传到当前工作目录。
  • sz <文件 / 目录>:从 Linux 服务器下载文件 / 目录到 Windows 客户端,执行后会弹出保存路径选择窗口,选择路径后自动下载。

4. 实战示例

  • 进行上传命令(rz):将windows系统上的text.txt文件上传到Linux系统中的目标目录:
bash 复制代码
[whb@bite-alicloud test]$ rz
# 执行后弹出Windows文件选择窗口,选择test.txt文件,点击确定
rz waiting to receive.zmodem trl+C to cancel.
  100%  1024 bytes 1024 bytes/sec 00:00:01       0 Errors
 
[whb@bite-alicloud test]$ ls
test.txt

输入rz指令后弹出的窗口如下所示(Xshell):

  • 进行下载命令(sz):从Linux服务器上下载文件到Windows系统中的目标目录中:
bash 复制代码
[whb@bite-alicloud test]$ sz -r test2  # -r递归下载目录
# 执行后弹出保存路径选择窗口,选择保存位置
sz -v -r test2
  creating archive test2.tar.gz...
  adding: test2/ (stored 0%)
  adding: test2/file3.txt (stored 0%)
  sending: test2.tar.gz (1024 bytes)

输出说明:通过 -r选项实现目录的递归下载,sz命令会自动将 test2目录压缩为 test2.tar.gz格式文件,并传输到 Windows 客户端。下载完成后,您需要在 Windows 系统中手动解压该压缩包,以获取完整的目录结构及文件内容。

4.3 tar指令:Linux 的打包工具

Linux 中真正的"老大哥"是**tar** 。它最初设计是用来打包(将多个文件合并成一个大文件),后来集成了压缩功能。它支持多种压缩算法(gzip, bzip2 等)。

1. 核心功能

  • 打包 :把一堆散落的文件缝合成一个 .tar文件(体积并未减小)。

  • 压缩 :在打包的基础上,用算法减小文件体积(如 .gz, .bz2)。

2. 基础语法

复制代码
tar [-cxtzjvf] 文件与目录 ...

3. 常见选项

  • -c建立压缩文件(Create)。

  • -x解开压缩文件(Extract)。

  • -t查看​ tarfile 里面的文件列表。

  • -z :是否具有 gzip 属性?(是否需要用 gzip 压缩?生成 .tar.gz.tgz)。

  • -j :是否具有 bzip2 属性?(是否需要用 bzip2 压缩?生成 .tar.bz2)。

  • -v显示过程。压缩/解压时显示处理的文件名(常用,但不建议在后台执行时使用)。

  • -f指定压缩包名称 。注意!-f后面必须立刻接文件名,不要再加其他参数

  • -C解压到指定目录

  • -p保留原本文件的属性(权限、时间戳等非常重要!)。

4. 实战示例

案例一:打包与压缩

bash 复制代码
# 1. 仅打包 /etc 目录(不压缩)
tar -cvf /tmp/etc.tar /etc

# 2. 打包并以 gzip 压缩
tar -zcvf /tmp/etc.tar.gz /etc

# 3. 打包并以 bzip2 压缩(压缩率更高,速度稍慢)
tar -jcvf /tmp/etc.tar.bz2 /etc

案例二:查阅压缩包内容(不解压)

如果要查看 .tar.gz里的文件,必须加上 -z参数。

复制代码
tar -ztvf /tmp/etc.tar.gz

案例三:解压缩到指定目录

先切换目录,再解压,解压后的目录结构会相对当前路径展开。

复制代码
cd /usr/local/src
tar -zxvf /tmp/etc.tar.gz

案例四:从压缩包中解压单个文件

如果只想拿出 etc/passwd,不需要全部解压。

复制代码
cd /tmp
tar -zxvf /tmp/etc.tar.gz etc/passwd

案例五:备份并保留文件属性(重要备份场景)

加上 -p参数,确保备份出来的文件权限、属主等与原文件一致。

复制代码
tar -zxvpf /tmp/etc.tar.gz /etc

案例六:增量备份(按时间筛选)

/home中,只备份比 2005/06/01 更新的文件。

复制代码
tar -N "2005/06/01" -zcvf home.tar.gz /home

案例七:排除特定文件进行备份

备份 /home/etc,但不要 备份 /home/dmtsai

复制代码
tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

输出说明:--exclude /home/dmtsai 选项指定打包时排除/home/dmtsai目录,该目录及其中的文件不会被纳入压缩包。

案例八:打包后立即解压(管道传输)

/etc/打包后直接解压到 /tmp下,不产生中间文件。

复制代码
cd /tmp
tar -cvf - /etc | tar -xvf -

解释:-代表标准输出(stdout)和标准输入(stdin)。这就像是 cp -r /etc /tmp,但用的是流式处理。


补充要点:

  • 命名习惯 :习惯上,未压缩的用 .tar,gzip 压缩的用 .tar.gz.tgz,bzip2 压缩的用 .tar.bz2

  • 路径警告 :使用绝对路径(如 /etc)打包时,tar可能会发出警告 Removing leading '/' from member names,这是安全机制,它会把开头的 /去掉,解压时变成相对路径,防止覆盖系统根目录文件。

  • 现场演示:建议配合实际操作,演示 Linux 之间或 Linux 与 Windows 之间如何互传并解压这些压缩包。

5. bc指令

在 Linux 终端里,除了最基础的 expr$(( ))进行整数运算外,当你需要进行高精度浮点运算 时,bc命令绝对是你的首选工具。它不仅能算小数,还支持复杂的数学函数,堪称 Linux 界的"科学计算器"。

5.1 基本语法

复制代码
bc [选项] [文件...]

5.2 功能说明

bc(Basic Calculator) 是一个强大的命令行计算器。它能很方便地进行浮点运算,并且支持用户自定义变量和函数。

5.3 常用选项

  • -q:静默模式启动,不显示 bc 版本信息和欢迎信息。
  • -l:加载数学库,支持三角函数、对数函数等高级运算,同时默认设置浮点运算精度为 20 位。
  • scale=<数字> :设置浮点运算的小数位数(精度),如scale=4表示保留 4 位小数。

5.4 支持的运算形式

运算分类 符号 / 函数 含义说明
算术运算 + 加法
- 减法
* 乘法
/ 除法
% 取余
^ 幂运算
比较运算 == 等于
!= 不等于
>, <, >=, <= 大于、小于、大于等于、小于等于
逻辑运算 && 逻辑与
`
! 逻辑非
数学函数 sin(x), cos(x) 三角函数(需配合 -l选项加载数学库)

5.3 实战示例

1. 进入交互式模式

直接在终端输入 bc,即可进入它的计算环境:

复制代码
[root@linux ~]# bc

2. 开启浮点运算支持

默认情况下,bc只输出整数结果。为了支持小数,通常需要结合管道使用 scale变量来设置精度。

scale=n设置小数点后的位数。

复制代码
# 设置保留 2 位小数,并计算 10 除以 3
echo "scale=2; 10/3" | bc

输出:

复制代码
3.33

3. 高级数学运算

bc还内置了数学库(需要加载),可以计算三角函数、平方根等:

-l:加载标准数学库,提供更丰富的函数。

复制代码
# 加载数学库,计算平方根
echo "scale=4; sqrt(16)" | bc -l

输出:

复制代码
4.0000

退出 bc交互界面时,输入 quit即可。

6. uname && lsb_release指令

在 Linux 运维和开发中,无论你是刚登录一台新服务器,还是排查环境差异,第一时间了解系统的"底细"都是必不可少的步骤。unamelsb_release就是两个最常用、最经典的获取系统软硬件信息的命令。


6.1 uname指令

uname命令用于获取当前电脑和操作系统的相关信息,它能够显示 Linux 主机所使用的操作系统版本、硬件名称等关键信息。

1. 基本语法

bash 复制代码
uname [选项]

2. 常用选项解析

  • -a--all显示所有信息

    这是最实用的参数,它会一次性输出所有字段,依次为:内核名称、主机名、内核版本号、内核版本、硬件名、处理器类型、硬件平台类型、操作系统名称。

    复制代码
    # 实战示例
    [root@linux ~]# uname -a
    Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP ...
  • -r仅显示内核版本号

    如果只关心内核版本,不需要其他冗余信息,直接用如下指令。

    复制代码
    [root@linux ~]# uname -r
    3.10.0-1160.el7.x86_64
  • -m显示机器硬件架构 (如 x86_64aarch64)。

    在区分系统是 64 位还是 ARM 架构时非常有用。

  • -n显示主机名(网络节点名称)。

  • -s显示内核名称(默认就是显示这个,通常省略)。


6.2 lsb_release指令

虽然 uname 很强大,但它主要聚焦于内核和底层硬件 。如果你想查看更上层的操作系统发行版信息 (比如是 CentOS 7 还是 Ubuntu 20.04),就需要用到**lsb_release**。

1. 基本语法

bash 复制代码
lsb_release[选项]

2. 功能说明

专门用于显示 Linux Standard Base (LSB) 和具体的发行版(Distribution)信息。

3. 常用选项

  • -a--all显示所有 LSB 信息

    这是最常用的参数,会输出发行版 ID、描述、版本号、代号等。

    复制代码
    # 实战示例
    [root@linux ~]# lsb_release -a
    LSB Version:    :core-4.1-amd64:...
    Distributor ID: CentOS
    Description:    CentOS Linux release 7.9.2009 (Core)
    Release:        7.9.2009
    Codename:       Core

6.3 两者结合

在实际工作中,我们通常将这两个命令结合起来,快速获取一台服务器的完整信息:

复制代码
echo "=== 内核信息 ===" && uname -a
echo "=== 发行版信息 ===" && lsb_release -a

补充要点:

  • uname是 POSIX 标准命令,几乎所有类 Unix 系统都有。

  • lsb_release需要系统安装了 redhat-lsb-core(CentOS/RHEL) 或 lsb-release(Ubuntu/Debian) 包。如果提示命令不存在,记得先安装。

  • 对于现代 Linux 系统,还有一个命令 hostnamectl也能显示非常详细的系统和内核信息,可以作为补充学习。


两者对比

命令 核心关注点 最常用参数 典型场景
uname 内核硬件 -a, -r 查看内核版本、CPU 架构
lsb_release 操作系统发行版 -a 查看是 CentOS/Ubuntu 及其版本

7. Linux系统的核心热键

快捷键 功能描述 适用场景
Tab 自动补全命令或路径,按两次显示所有候选 快速输入长命令或路径,避免拼写错误
Ctrl + C 强行终止当前运行的前台进程 终止卡死的程序或退出当前执行的命令
Ctrl + D 发送文件结束符或退出当前终端 退出shell或确认文本输入完成
Ctrl + Z 将前台任务挂起并转入后台 暂停任务以便稍后恢复,便于多任务切换
Ctrl + A/E 快速定位光标到行首/行尾 快速修改命令行内容,无需手动移动光标
Ctrl + U/K 删除从光标到行首/行尾的内容 快速修正输入错误,提高编辑效率
Ctrl + W 向前删除一个单词 更精准地删除命令行中的单词片段
Ctrl + L 清除当前屏幕显示内容 保持终端界面整洁,便于查看新内容
Ctrl + R 在命令历史中进行搜索 快速查找并复用之前执行过的命令
**!!**​ 重新执行上一条命令 避免重复输入相同命令,提高操作效率
!n 执行历史记录中第n条命令 通过序号快速调用特定的历史命令
!keyword 执行最近一条以特定关键词开头的命令 通过关键词查找并执行相关命令

8. shutdown指令

在 Linux 系统的日常运维与操作中,掌握安全关机与重启的指令至关重要。shutdown命令不仅功能强大,还能向系统其他登录用户广播关机信息,避免数据丢失。以下是其核心用法与扩展命令的梳理。


8.1 基础语法

使用 shutdown命令的基本格式如下:

复制代码
shutdown [选项] [时间] [消息]

8.2 常用选项解析

通过不同的选项,我们可以控制系统在关机前的行为:

  • -h(halt):停止系统服务后,立即执行关机操作。这是最常用的关机选项。

  • -r(reboot):停止系统服务后,重新启动计算机。

  • -t sec(timeout):设置延迟时间(秒)。即在指定的秒数之后才执行关机或重启动作。

8.3 时间参数说明

shutdown的时间参数是其区别于 haltreboot的核心特性之一,它允许你规划关机时间:

  • now:立刻执行(等同于时间设为 0)。

  • +m :在 m分钟之后执行。例如 +5表示 5 分钟后关机。

  • hh:mm :设定具体的绝对时间点。例如 22:30表示晚上 10 点半执行。

注意 :如果不指定时间,默认行为是 +1(即 1 分钟后关机),并会向所有用户发送警告信息。

8.4 实战示例

为了更好地理解,通过几个实际场景来演练 shutdown的用法:

示例 1:立刻关机

复制代码
shutdown -h now

示例 2:10 分钟后重启系统

复制代码
shutdown -r +10

此时系统会开始倒计时,并向所有终端发送"系统将在 10 分钟后重启"的消息。

示例 3:设定在今天 23:00 关机

复制代码
shutdown -h 23:00

示例 4:取消已经计划的关机任务

如果你刚才设置了关机,但突然不想执行了,可以使用 -c选项取消:

复制代码
shutdown -c

系统会向所有用户发送"关机已被取消"的通知。


相关推荐
kdxiaojie1 小时前
U-Boot分析【学习笔记】(3)
linux·笔记·学习
烛衔溟1 小时前
TypeScript 接口继承与混合类型
linux·ubuntu·typescript
张文君2 小时前
上古世纪服务端编译安装AAEmu docker编译安装
运维·docker·容器
蜡笔婧萱2 小时前
Linux--远程登录服务ssh
linux·服务器·ssh
雾岛心情2 小时前
小铭邮件管理工具箱的界面(公司版)
运维·服务器·工具·o365·小铭邮件工具箱(公司版)
一只鹿鹿鹿2 小时前
数据库运维与管理规范(WORD)
运维·数据库
伏加特遇上西柚2 小时前
Loki+Alloy+Grafana日志采集部署
java·linux·服务器·spring boot·grafana·prometheus
zl_dfq2 小时前
服务器设计细节 之 【eventfd、struct stat、stat接口】
服务器
King's King2 小时前
自动化立体仓库系统项目施工要点
运维·自动化