详细介绍:Linux Bash(一)

news/2025/11/16 16:11:08/文章来源:https://www.cnblogs.com/ljbguanli/p/19228371

详细介绍:Linux Bash(一)

认识与学习 BASH

1.1 硬件、内核与 Shell 的关系

① 三者层次结构:

硬件(Hardware)↑
内核(Kernel)↑
Shell(命令解释器)↑
用户(User)
  • 硬件:CPU、内存、硬盘、网卡等。
  • 内核(Kernel):操作系统的核心,负责管理硬件资源、文件系统、进程调度、内存管理、驱动接口等。
  • Shell:内核的“外壳”,用户与系统交互的接口(命令行解释器)。
  • 用户:通过 Shell 发出命令 → Shell 解析并调用内核 → 内核操作硬件 → 返回结果给用户。

② 底层原理与过程:

用户输入命令 → Shell 解析命令 → 调用系统调用(syscall)
→ 内核执行操作 → 返回结果到 Shell → 显示输出

③ Shell 的本质:

  • 是一种运行在用户空间的命令解释器程序
  • 提供交互模式(命令行)和批处理模式(Shell脚本)。

1.2 为什么要学习命令行模式的 Shell?

① 一致性(Consistency)

  • 图形界面在不同发行版之间差异大,但命令行在各种 Linux 系统中几乎通用。
  • 远程管理(SSH)主要依赖命令行环境。
  • 许多自动化工具(如 Ansible、Docker、K8s)底层依赖命令执行。

② Shell 脚本的威力

  • 可将重复任务自动化(系统管理、部署、备份等)。
  • 脚本语言 → 可编程接口 → 与系统资源深度结合。
  • 提升效率、可维护性、稳定性。

1.3 系统的合法 Shell 与 /etc/shells 的功能

/etc/shells 文件作用:

  • 列出系统中允许使用的合法登录 Shell。
  • 登录时,系统会检查用户设置的 Shell 是否在该文件中。
  • 部分程序(如 FTP、chsh)也会参考此文件判断 Shell 合法性。

查看内容:

cat /etc/shells

常见输出示例:

/bin/bash
/bin/sh
/bin/zsh
/sbin/nologin

② 不同种类的 Shell:

Shell 名称可执行文件路径特点
bash/bin/bash默认、最常用,功能丰富,兼容 sh
sh/bin/sh最早的 Shell,简单、标准化
zsh/bin/zsh高度可定制,功能强大(自动补全、美化)
csh / tcsh/bin/csh, /bin/tcshC语法风格,脚本不兼容 bash
dash/bin/dash启动快,Ubuntu 默认 /bin/sh
/sbin/nologin/sbin/nologin用于禁用登录(如系统用户)

/sbin/nologin 的功能:

  • 分配给系统服务账户禁止登录的用户
  • 若用户尝试登录,将显示一条信息并拒绝进入 Shell。
  • 示例:
grep nologin /etc/passwd

1.4 Bash Shell 的功能

Bash(Bourne Again SHell)不仅是命令解释器,也是一种功能强大的交互式环境,支持历史记录、补全、别名、作业控制、脚本自动化等高级功能。


(1)命令历史(History)

功能: 记录用户输入的命令,方便回顾与重复执行。

常用命令与操作:

操作功能
history显示历史命令列表
history n显示最近 n 条命令
!n执行历史列表中第 n 条命令
!!重复执行上一条命令
!keyword执行最近以 keyword 开头的命令
Ctrl + r向后搜索历史命令(交互式)
~/.bash_history历史命令文件,登录时加载、退出时保存

(2)自动补全(Tab Completion)

功能: 使用 Tab 键自动补齐命令或文件路径。

  • Tab:补全命令或文件名。
  • Tab Tab:显示所有可能的补全选项。
  • Bash 通过内建补全机制 + /etc/bash_completion 实现。

示例:

cd /et   # 自动补全为 /etc/

(3)命令别名(Alias)

功能: 给复杂命令起短名,提高效率。

常用操作:

命令功能
alias查看当前定义的别名
alias ll='ls -l --color=auto'定义别名
unalias ll删除别名
echo "alias ll='ls -l --color=auto'" >> ~/.bashrc永久生效

原理说明:

  • alias 是 Shell 的内部机制(解析时替换),不是环境变量。
  • 定义的别名仅在当前会话有效,需写入 ~/.bashrc 才能持久化。

(4)作业控制(Job Control)

功能: 同时管理多个进程,控制前后台运行。

命令/操作功能
command &将命令放入后台执行
jobs查看当前作业列表
fg %n将第 n 个作业调回前台
bg %n将第 n 个作业放到后台运行
Ctrl + Z暂停当前前台任务(转为后台“停止”状态)
kill %n终止第 n 个作业
disown脱离当前 shell 控制(防止退出时被终止)

示例:

sleep 100 &
jobs
fg %1

(5)Shell 脚本(Shell Script)

功能: 批量自动执行命令的文本文件。

基本格式:

#!/bin/bash
# 示例脚本
echo "Hello, Linux!"

执行方法:

bash script.sh
# 或赋予可执行权限后直接执行
chmod +x script.sh
./script.sh

(6)通配符(Wildcard)

通配符用于匹配文件名(而非正则表达式)。

通配符含义示例
*匹配任意长度字符(含空)ls *.txt 匹配所有 .txt 文件
?匹配任意单个字符ls file?.txt 匹配 file1.txt、fileA.txt
[abc]匹配方括号内任一字符ls [ab]* 匹配以 a 或 b 开头的文件
[a-z]匹配字符范围ls [0-9]* 匹配以数字开头的文件
[!abc]匹配不包含这些字符的文件ls [!a]* 匹配不以 a 开头的文件

1.5 查询命令是否为 Bash Shell 内置命令:type

功能: 判断一个命令的来源,是内建命令外部程序别名、还是函数

示例:

type cd
# cd is a shell builtin
type ls
# ls is /bin/ls
type alias
# alias is a shell builtin
type -a echo
# echo is a shell builtin
# echo is /usr/bin/echo
Bash 中命令的四种来源

在终端输入一个命令(例如 lscdaliasmyfunc),Bash 会依次检查这个命令属于哪一类,并按照优先级来执行。


内建命令(Builtin Command)
  • Bash 自身实现 的命令,不依赖外部可执行文件。
  • 执行速度快,因为不需要新建进程(直接在 Shell 内部运行)。

示例:

cd
alias
echo
pwd
history
type
set
export
type cd
# 输出:cd is a shell builtin
  • 运行效率高;
  • 通常与 Shell 环境紧密相关(如修改变量、切换目录等外部命令无法实现的操作)。

外部程序(External Command)
  • 系统中独立存在的可执行文件(通常在 /bin/usr/bin 等路径下)。
  • 执行时 Bash 会创建新的进程(调用 fork + exec)。

示例:

ls
cat
grep
ping
vim
type ls
# 输出:ls is /bin/ls
  • 独立于 Bash;
  • 可以被其他 Shell 或程序调用;
  • 位置由环境变量 $PATH 决定(Bash 会在 PATH 路径中依次查找)。

别名(Alias)
  • 命令的文字替换规则;
  • Bash 在解析命令时,会先检查是否为别名
  • 如果匹配,就用定义的内容替换成完整命令。
alias ll='ls -l --color=auto'
type ll
# 输出:ll is aliased to `ls -l --color=auto`
  • 仅在当前 shell 有效;
  • 不创建进程;
  • 属于 语法层面替换,在命令解析阶段完成;
  • 可写入 ~/.bashrc 实现永久生效。

函数(Function)
  • 由用户或脚本定义的命令集合;
  • 在当前 Shell 进程中执行;
  • 可接收参数 $1$2 等;
  • 功能类似脚本,但无需创建外部进程。

示例:

myfunc() {echo "Hello from myfunc!"
}
type myfunc
# 输出:myfunc is a function
# myfunc () { echo "Hello from myfunc!"; }
  • 比外部脚本运行快;
  • 在当前 shell 中生效;
  • 可通过 declare -f 查看所有函数。


1.6 命令执行与快速编辑操作

(1)命令换行输入
  • 使用反斜杠 \ 表示续行(命令未结束):
echo "This is a \
long command"
  • 也可直接按 Enter,Bash 会在命令不完整时自动换行继续输入(例如多引号、括号未闭合)。

(2)光标移动快捷键(命令行编辑)

Bash 使用 Readline 库 支持 Emacs 风格快捷键(默认模式)。

快捷键功能
Ctrl + A移动到行首(A → Ahead)
Ctrl + E移动到行尾(E → End)
Ctrl + U删除光标前的所有内容
Ctrl + K删除光标后的所有内容
Ctrl + W删除前一个单词
Alt + B向后移动一个单词(Back)
Alt + F向前移动一个单词(Forward)
Ctrl + L清屏(等同于 clear
Ctrl + R搜索历史命令
Ctrl + C中断当前命令
Ctrl + D退出当前 shell(EOF)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做一个简单的贪吃蛇游戏

简单 C++ 贪吃蛇游戏(控制台版) 基于控制台实现的贪吃蛇游戏,核心功能包括:方向控制、食物生成、碰撞检测、分数统计,适合新手学习循环、数组、逻辑控制的实战案例。 开发环境 编译器:支持 C++11 及以上(Dev-C+…

pytest测试range内置函数

pytest测试range内置函数点击查看代码 import pytest# ------------------------------ # 一、基础操作:正序序列测试用例 # ------------------------------ @pytest.mark.parametrize("start, end, step, expe…

WPS---功能设置

WPS作为一款国内开发的办公软件,用确实好用,但是恶心也确实挺恶心的,就比如这个必须登录才能使用的功能,简直就是反人类。 操作:点击【登录】旁边的【设置】选择【配置和修复工具】然后点击【高级】功能定制:关闭…

自动化测大样例

省流: for((i=1;i<=10;i++)) do g++ T1.cpp -std=c++14 -Wall -Wextra -O a.exe cp ex_edit$i.in edit.in ./a.exe diff -s -Z ex_edit$i.ans edit.out done#include<bits/stdc++.h> #include <unistd.h&…

[Debug记录] 分布式实验-FTP编程

分布式课程学习JavaSocket和TCP/UDP,第一次实验要求基于Java Socket TCP和UDP实现一个简易的网络文件服务程序,包含服务器端FileServer和客户端FileClient。完成实验的过程中遇到一些比较典型的bug,记录一下。 用来…

2025年当下行业内知名的旧房翻新企业排名与推荐

摘要 旧房翻新行业在2025年迎来快速发展,受城市化进程加速和住房老龄化影响,市场需求持续增长,预计年增长率达15%以上(数据来源:中国建筑装饰协会2025年报告)。本文基于行业调研、用户口碑和专业技术评估,精选排…

2025年国内旧房翻新公司综合实力排行榜TOP10推荐

摘要 随着城市化进程加速和居民生活品质提升,2025年旧房翻新行业迎来爆发式增长,市场规模预计突破8000亿元。旧房翻新不仅解决老房安全隐患,更是提升居住舒适度和资产价值的重要途径。本文基于企业实力、技术水准、…

现今国内口碑好的旧房翻新企业排行

摘要 随着城市化进程加速和居民生活品质提升,2025年旧房翻新行业迎来爆发式增长。据统计,国内旧房翻新市场规模已突破万亿,年均增长率达18.7%。本文基于用户口碑、施工质量、服务体验等维度,综合评出现今国内十大旧…

Linux服务器编程实践60-双向管道:socketpair函数的完成与应用场景

Linux服务器编程实践60-双向管道:socketpair函数的完成与应用场景pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

前端从0到1实战】第3篇:拒绝插件,手写一个原生模态弹窗 (Modal)

【前端从0到1实战】第3篇:拒绝插件,手写一个原生模态弹窗 (Modal) 在现代 Web 开发中,模态弹窗(Modal)是最常见的交互组件之一。很多新手会选择直接引入第三方插件,但其实手写一个原生 Modal 是理解 HTML 结构定…

20232413 2025-2026-1 《网络与系统攻防技术》实验五实验报告

一.实验内容 1.搜索域名和ip信息 2.获取好友IP地址及其地理位置 3.使用nmap扫描靶机进行漏洞分析 4.查询个人网上信息和学习高级搜索技能 二.实验过程 2.1 DNS 域名信息查询(以baidu.com为例) 2.1.1whois 查询 DNS 注…

循环数组下一个更大元素:从错误到精通(含2种解法+同类型扩展)

循环数组下一个更大元素:从错误到精通(含2种解法+同类型扩展)在字符串、数组类算法中,“循环结构”是高频考点——尤其是“循环数组的下一个更大元素”,既考察对单调栈的理解,又要求处理“绕回开头”的特殊逻辑。…

随机化数论算法总结

好吧这个名字很蠢() 1 Miller_Rabin 作用试判断 \(10^{18}\) 级别或以上的数是否是质数,显然此时 \(O(\sqrt n)\) 的朴素算法是无法使用的。 1.1 费马小定理 当 \(p\) 为质数时,对于任意整数 \(a\),有 \(a^{p-1}\…

20232422 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告一、实验内容DNS信息搜集:查询指定域名的注册信息、对应IP和地理位置。 网络抓包定位:通过Wireshark抓取qq好友IP,解析其地理位置。 靶机扫描探测…

完整教程:【数据迁移】HBase Bulkload批量加载原理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体? - 详解

【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体? - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232422 龙浩然 2025-2026-1 《网络与系统攻防技术》实验五实验报告一、实验内容DNS信息搜集:查询指定域名的注册信息、对应IP和地理位置。 网络抓包定位:通过Wireshark抓取qq好友IP,解析其地理位置。 靶机扫描探测…

DL 1 深度学习简介 张量tensor操作

DL 1 深度学习简介 张量tensor操作1.深度学习简介 学习视频:https://www.bilibili.com/video/BV1c5yrBcEEX/?spm_id_from=333.337.search-card.all.click&vd_source=0a4fe9884700974ee1043a65993f87fb 1.1 概念…

Spring Cloud Alibaba + RocketMQ

RocketMQ 在微服务的世界里,服务间的消息就像快递包裹,如果没有高效可靠的传递方式,小摊位之间的信息就容易丢失或者延迟。这时候,你就需要 RocketMQ——微服务界的“快递小能手”,帮你高效、安全、准时地传递每一…