1、是什么?
Bash 的英文全称是 “Bourne Again SHell”,它是一种对早期的 Bourne shell(sh)进行了扩展和改进的 shell 程序。
含义及相关解释
- 作为命令解释器:Bash 是 Unix 和类 Unix 系统(包括 macOS)中的一种命令行解释器,它允许用户通过输入文本命令与操作系统进行交互。用户在终端中输入的各种命令,如文件操作、进程管理、程序执行等,都由 Bash 来解析和执行。例如,当你在 macOS 的终端中输入
ls命令来列出当前目录下的文件和文件夹时,Bash 会接收这个命令,理解其含义,并调用相应的系统功能来完成操作。 - 脚本编程语言:Bash 不仅可以作为交互式的命令解释器,还支持编写脚本程序。用户可以将一系列的命令组合在一起,形成一个脚本文件,以实现自动化的任务。这些脚本可以完成文件备份、系统配置、批量处理等各种复杂的工作。例如,以下是一个简单的 Bash 脚本示例,用于创建一个新的目录并在其中创建一个文本文件:
#!/bin/bash # 创建一个名为 new_directory 的目录
mkdir new_directory # 进入新创建的目录
cd new_directory # 创建一个名为 test.txt 的文本文件
touch test.txt
在这个脚本中,#!/bin/bash 是脚本的起始行,它告诉系统该脚本使用 Bash 来解释执行。后续的命令依次完成了创建目录、进入目录和创建文件的操作。
Bash 在 Unix 和类 Unix 系统中非常流行,因为它具有丰富的功能、良好的兼容性和广泛的社区支持,是系统管理员、开发者和高级用户进行系统管理和自动化任务的重要工具。在 macOS 中,Bash 长期以来一直是默认的 shell,不过从 macOS Catalina(10.15)开始,默认 shell 已改为 Zsh。但用户仍然可以通过一些设置继续使用 Bash。
2、怎么用?
执行文件的步骤
1. 赋予文件执行权限
在执行 Bash 脚本前,需要确保文件具有可执行权限。可以使用 chmod 命令为脚本文件添加执行权限,在终端中使用以下命令:
chmod +x 脚本文件名.sh
2. 执行脚本
有多种方式可以执行这个脚本,下面介绍常见的两种:
./脚本文件名.sh
通过 bash 命令执行
也可以不赋予脚本执行权限,直接使用 bash 命令来执行脚本,这种方式不需要文件有执行权限,命令格式为:
bash 脚本文件名.sh
3、常用命令
文件和目录操作
1. ls - 列出目录内容
-
功能:显示指定目录下的文件和文件夹。
-
案例:
- 列出当前目录内容:
ls - 列出指定目录(如
/etc)内容:ls /etc - 以长格式列出当前目录内容(显示文件权限、所有者、大小等详细信息):
ls -l - 列出所有文件(包括隐藏文件):
ls -a
- 列出当前目录内容:
2. cd - 切换目录
-
功能:改变当前工作目录。
-
案例:
- 进入
Documents目录:cd Documents - 返回上一级目录:
cd .. - 回到用户主目录:
cd ~
- 进入
3. mkdir - 创建目录
-
功能:创建新的目录。
-
案例:
- 创建名为
new_folder的目录:mkdir new_folder - 创建多层嵌套目录(如
parent/child):mkdir -p parent/child
- 创建名为
4. rm - 删除文件或目录
-
功能:删除指定的文件或目录。
-
案例:
- 删除名为
test.txt的文件:rm test.txt - 强制删除只读文件:
rm -f read_only_file.txt - 删除目录及其所有内容:
rm -r my_directory
- 删除名为
5. cp - 复制文件或目录
-
功能:将文件或目录从一个位置复制到另一个位置。
-
案例:
- 复制
file.txt到backup目录:cp file.txt backup/ - 递归复制目录
source到destination:cp -r source/ destination/
- 复制
6. mv - 移动或重命名文件或目录
-
功能:移动文件或目录,也可用于重命名。
-
案例:
- 移动
file.txt到new_location目录:mv file.txt new_location/ - 将
old_name.txt重命名为new_name.txt:mv old_name.txt new_name.txt
- 移动
文件查看和编辑
1. cat - 查看文件内容
- 功能:连接文件并打印到标准输出,常用于查看小文件内容。
- 案例:查看
example.txt文件内容:cat example.txt
2. more 和 less - 分页查看文件内容
-
功能:用于查看大文件内容,
more逐页显示,less功能更强大,支持向前和向后翻页等操作。 -
案例:
- 使用
more查看large_file.txt:more large_file.txt - 使用
less查看large_file.txt:less large_file.txt
- 使用
3. nano 和 vim - 文本编辑器
-
功能:用于创建和编辑文本文件。
nano简单易用,适合初学者;vim功能强大,但学习曲线较陡。 -
案例:
- 使用
nano编辑config.txt文件:nano config.txt - 使用
vim编辑script.sh文件:vim script.sh
- 使用
系统信息和进程管理
1. pwd - 显示当前工作目录
- 功能:打印当前所在的工作目录。
- 案例:查看当前所在目录:
pwd
2. df - 显示磁盘使用情况
- 功能:显示文件系统的磁盘使用情况。
- 案例:查看磁盘使用情况:
df -h(-h选项以人类可读的格式显示)
3. du - 估算文件空间使用量
- 功能:估算文件或目录的磁盘使用量。
- 案例:查看
my_directory目录的磁盘使用情况:du -sh my_directory(-s显示汇总信息,-h以人类可读的格式显示)
4. ps - 显示当前进程状态
- 功能:报告当前系统的进程状态。
- 案例:显示当前用户的所有进程:
ps -u $USER - 显示所有进程并以树状结构展示:
ps -ef --forest
5. top - 动态显示系统进程信息
- 功能:实时显示系统中各个进程的资源占用情况。
- 案例:启动
top命令查看系统进程信息:top
网络相关命令
1. ping - 测试网络连通性
- 功能:向目标主机发送 ICMP 回显请求包,测试与目标主机的网络连通性。
- 案例:测试与
google.com的连通性:ping google.com
2. ifconfig 或 ip - 查看和配置网络接口
-
功能:
ifconfig用于查看和配置网络接口信息,ip是新一代的网络配置工具。 -
案例:
- 使用
ifconfig查看网络接口信息:ifconfig - 使用
ip查看网络接口信息:ip addr show
- 使用
3. curl - 传输数据
-
功能:用于从网络上传输数据,可以下载文件、发送 HTTP 请求等。
-
案例:
- 下载
example.com上的file.zip文件:curl -O http://example.com/file.zip - 发送 GET 请求到
api.example.com:curl http://api.example.com
- 下载
权限管理
1. chmod - 改变文件或目录权限
-
功能:修改文件或目录的访问权限。
-
案例:
- 给
script.sh文件添加可执行权限:chmod +x script.sh - 将
file.txt文件的权限设置为所有者可读可写,组用户和其他用户只读:chmod 644 file.txt
- 给
2. chown - 改变文件或目录的所有者
- 功能:更改文件或目录的所有者和所属组。
- 案例:将
my_file.txt文件的所有者改为user1:chown user1 my_file.txt
3. chgrp - 改变文件或目录的所属组
- 功能:更改文件或目录的所属组。
- 案例:将
my_directory目录的所属组改为group1:chgrp group1 my_directory