当前位置: 首页 > news >正文

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<Tab>   # 自动补全为 /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 builtintype ls
# ls is /bin/lstype alias
# alias is a shell builtintype -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.dtcms.com/a/503312.html

相关文章:

  • 【Redis】哨兵与对脑裂的情况分析
  • 49.词向量:把文字变成数字
  • 【pulldown-cmark】创建自定义分支
  • python 网站开发流程图网站首页被k还有救吗
  • TsingtaoAI受邀参加HICOOL2025全球创业者峰会项目对接会
  • windows10激活解决办法
  • 学习建网站玩网站建设学习包装设计需要哪些信息
  • 【图像处理】rgb和srgb
  • 如何撰写网站建设方案海口网站开发制作
  • 查找成绩(向量实现)
  • STL中容器string -- 讲解超详细
  • Python lambda 表达式详解
  • 【JavaScript】原生函数
  • 渗透测试中爆破与撞库的区别
  • 门户网站如何做谷歌seo儿童网站建设
  • AI智能体的“瑞士军刀”:工具调用功能详解与实践
  • GYCTF2020
  • 2025-10-19 hetao1733837刷题记录
  • 批量字符替换工具,支持多种格式
  • 50.情感分析:AI读懂你的心情
  • 嵌入式Linux开发环境学习(二)
  • 分析静态代码分析工具
  • unix做网站常用的数据库用php做网站后台
  • Fiddler抓包+Postman实战之--客户关系管理软件自动化测试
  • 『 数据库 』MySQL复习 - 从更新删除到分组聚合查询实践
  • 力扣2025.10.19每日一题
  • 广州站扩建百度系app
  • 品牌微信网站开发企业网站排版规则
  • Java Socket 多线程实例
  • 机器学习01——概述