深入了解BASH shell
1. BASH shell简介
Linux系统中广泛使用BASH shell,这很大程度上是因为Linux是UNIX的克隆版本。在UNIX早期,基于文本的shell是用户控制计算机的唯一方式。直接输入命令是控制计算机最基本的方式之一。
BASH shell历史可追溯到UNIX早期,但这并不意味着它很原始,相反,它是与计算机交互最有效和直接的方式之一。很多人认为命令行shell是使用计算机的快速、高效方法,至今仍未被更好的方法取代。
大多数Linux发行版都提供多种shell程序供选择,但大多数Linux系统的默认shell是BASH,Ubuntu也是如此。BASH代表Bourne Again SHell,它是对Bourne shell的重写。
除了BASH,还有其他shell,如PDKSH(基于Korn Shell)和ZSH。这些通常被用于Linux编程或对BASH不满意的用户。
BASH shell被认为是兼顾各方的最佳选择,它易于初学者学习,还能随着用户的成长提供更多功能,例如支持脚本编写,用户可以创建自己的简单程序。
1.1 为什么要使用shell
虽然现代Linux发行版倾向于让用户使用图形用户界面(GUI)完成各种任务,但掌握一些命令行shell技能仍非常有必要,原因如下:
-
简单快速
:shell是与Ubuntu交互最简单、最快的方式。例如,更改网卡IP地址,使用GUI可能需要几分钟,而在shell中只需输入
ifconfig eth0 192.168.0.15 up
。
-
功能多样
:从删除文件、配置硬件到创建MP3,所有操作都可以通过shell完成。很多GUI应用程序实际上依赖于shell程序。
-
跨发行版一致
:所有Linux系统都有shell,并且基本命令通用。但不同发行版的GUI配置工具不同,掌握shell命令可以在不同系统间快速上手。
-
故障排除关键
:当系统出现问题无法启动GUI时,几乎总能启动到shell。shell只需要基本的屏幕显示和键盘输入功能,因此大多数救援磁盘或CD都提供shell来修复系统。
-
远程访问有用
:通过ssh等程序,用户可以远程登录并使用shell控制计算机。这也是许多服务器系统选择Linux的原因之一。
-
社区认可
:在Linux社区中,使用shell会获得其他用户的认可,因为它能提供更大的控制权。
不过,命令行shell并非完全直观。例如,
ifconfig eth0 192.168.0.15 up
命令,对于初学者来说可能难以理解。实际上,该命令是让名为eth0的网卡采用指定的IP地址,最后的
up
表示激活网卡。
学习shell需要掌握一些术语,但日常使用只需学习10 - 20个命令。就像学习一门新语言,通过练习,这些命令会变得自然。而且,shell提供了很多内置帮助。
2. 何时使用shell
Linux shell的使用频率因人而异。一些Linux爱好者离不开它,他们用它来阅读和撰写电子邮件、浏览网页。
大多数人则用它来管理文件、查看文本文件(如程序文档)、运行程序和管理系统。所有类型的程序(包括GUI和命令行程序)都可以从shell启动。在Ubuntu上安装程序后,程序不一定会自动出现在应用程序菜单中,除非安装程序是专门为当前Linux版本设计的。
使用shell运行程序的另一个原因是可以在启动前指定程序的运行方式。例如,要以全屏模式启动Totem电影播放器并播放
myvideofile.mpg
文件,只需输入
totem --fullscreen myvideofile.mpg
,这样可以节省时间。
当习惯使用shell后,可能会经常在其他程序窗口后面打开它。
3. 开始使用shell
启动shell有多种方式,最常见的是使用终端模拟器程序。以GNOME Terminal为例,通过点击“Applications -> Accessories -> Terminal”即可启动。
启动后会看到一个空白的紫色窗口,类似于简单的文本编辑器窗口。首次运行时,窗口顶部会有几行关于
sudo
命令的说明,目前无需担心。
窗口中最重要的部分是命令提示符,通常是用户名、主机名、当前目录和美元符号($)。例如,
ubuntu@ubuntu-desktop:~$
,其中
ubuntu
是用户名,
ubuntu-desktop
是主机名,
~
代表用户的
/home
目录,
$
表示以普通用户身份登录。
如果以root用户登录,提示符将是哈希符号(#)。在一些杂志和计算机手册中,命令前的哈希符号表示该命令需要以root用户身份运行。
4. 运行程序
在shell中输入的命令实际上是小的程序。shell的主要功能是让用户运行程序,包括内置程序(如文件操作程序)和其他复杂程序。
shell知道程序可能存储的位置,这些信息在安装Ubuntu时设置并存储在系统变量中。其中,
PATH
变量存储了程序的存储位置。可以通过以下命令查看
PATH
变量的内容:
echo $PATH
在测试系统中,输出可能是:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
当输入程序名时,shell会按顺序在
PATH
变量列出的目录中查找。例如,输入
ls
时,shell会从列表中的第一个目录开始查找
ls
程序,找到后就会运行它。
如果要运行的程序不在
PATH
变量列出的目录中,需要指定程序的完整路径,例如
/home/ubuntu/myprogram
。如果已经在程序所在的目录中,可以输入
./myprogram
。
一些基本命令是BASH内置的,如
cd
和
echo
。可以通过
type
命令来判断一个命令是否是内置命令,例如
type cd
。
5. 获取帮助
每个命令通常都有内置帮助,可以通过
--help
选项查询。例如,要获取
ifconfig
命令的帮助,输入:
ifconfig --help
大多数程序都支持
--help
选项,有时可能需要使用单破折号。
此外,大多数命令还有技术手册(man pages),可以通过以下命令访问:
man <command>
不过,man pages通常是为有经验的Ubuntu用户编写的。
有些命令还有info页面,提供更通俗易懂的指南。可以通过以下命令阅读:
info <command>
如果命令没有info页面,会显示关于
info
命令的基本说明。
man
和
info
命令本身也有对应的man和info页面,可以通过
man man
或
info info
查看。
6. 通过虚拟控制台运行shell
Linux爱好者常用的启动shell的方式是通过虚拟控制台。按下
Ctrl + Alt
,然后按
F1 - F6
中的一个功能键即可访问虚拟控制台。
使用虚拟控制台就像切换到另一台完全不同的计算机。按下
Ctrl + Alt + F1
会使GUI消失,屏幕被命令行提示符取代(不用担心,GUI仍在后台运行)。此时需要输入用户名和密码登录。
6.1 总结
BASH shell是Linux系统中强大而重要的工具。它具有简单快速、功能多样、跨发行版一致等优点,虽然学习曲线较陡,但通过练习和利用内置帮助,用户可以逐渐掌握它。无论是日常操作、故障排除还是远程访问,shell都能发挥重要作用。
6.2 操作流程总结
| 操作 | 步骤 |
|---|---|
| 启动GNOME Terminal | 点击“Applications -> Accessories -> Terminal” |
| 查看PATH变量 |
输入
echo $PATH
|
| 获取命令帮助 |
输入
<command> --help
|
| 查看命令技术手册 |
输入
man <command>
|
| 查看命令info页面 |
输入
info <command>
|
| 访问虚拟控制台 |
按下
Ctrl + Alt
,然后按
F1 - F6
中的一个功能键
|
6.3 流程图
graph TD;
A[开始] --> B[选择启动方式];
B --> C{使用终端模拟器};
B --> D{使用虚拟控制台};
C --> E[点击“Applications -> Accessories -> Terminal”];
E --> F[出现命令提示符];
D --> G[按下Ctrl + Alt + F1 - F6];
G --> H[输入用户名和密码登录];
F --> I[运行程序];
I --> J{程序在PATH中};
J --> K[直接输入程序名];
J --> L[指定程序完整路径];
I --> M[获取帮助];
M --> N{使用--help选项};
M --> O{查看man页面};
M --> P{查看info页面};
N --> Q[输入<command> --help];
O --> R[输入man <command>];
P --> S[输入info <command>];
7. 常用命令示例
7.1 文件和目录操作
-
创建目录
:使用
mkdir命令可以创建新的目录。例如,要在当前目录下创建一个名为new_folder的目录,输入:
mkdir new_folder
-
切换目录
:
cd命令用于切换当前工作目录。若要进入刚刚创建的new_folder目录,输入:
cd new_folder
若要返回上一级目录,输入:
cd ..
-
列出目录内容
:
ls命令用于列出目录中的文件和子目录。输入ls会显示当前目录的内容,若要显示详细信息,可使用ls -l:
ls -l
-
删除文件和目录
:使用
rm命令删除文件,若要删除一个名为test.txt的文件,输入:
rm test.txt
若要删除目录,需要使用
rm -r
选项,例如删除之前创建的
new_folder
目录:
rm -r new_folder
7.2 文本处理
-
查看文件内容
:
cat命令可以查看文件的内容。若要查看test.txt文件的内容,输入:
cat test.txt
如果文件较大,可以使用
less
命令分页查看:
less test.txt
-
查找文本
:
grep命令用于在文件中查找特定的文本。例如,在test.txt文件中查找包含“example”的行,输入:
grep "example" test.txt
7.3 系统信息
-
查看系统信息
:
uname命令可以查看系统的基本信息。输入uname -a会显示详细的系统信息:
uname -a
-
查看磁盘使用情况
:
df命令用于查看磁盘的使用情况。输入df -h会以人类可读的格式显示磁盘使用信息:
df -h
-
查看内存使用情况
:
free命令可以查看系统的内存使用情况。输入free -m会以兆字节为单位显示内存信息:
free -m
8. 脚本编写基础
BASH shell支持脚本编写,通过编写脚本可以自动化执行一系列命令。以下是一个简单的脚本示例,用于显示当前日期和时间:
#!/bin/bash
# 这是一个注释,说明脚本的功能
date
8.1 脚本编写步骤
-
创建脚本文件
:使用文本编辑器(如
nano或vim)创建一个新的文件,例如date_script.sh:
nano date_script.sh
- 编写脚本内容 :将上述脚本代码复制到文件中。
-
赋予执行权限
:使用
chmod命令赋予脚本执行权限:
chmod +x date_script.sh
- 运行脚本 :在终端中输入脚本的路径来运行它:
./date_script.sh
8.2 变量和参数
在脚本中可以使用变量来存储数据。例如,以下脚本使用变量来存储用户名并输出欢迎信息:
#!/bin/bash
username="John"
echo "Welcome, $username!"
脚本还可以接受命令行参数。例如,以下脚本接受一个参数并输出相应的信息:
#!/bin/bash
echo "You entered: $1"
运行脚本时,输入一个参数,如:
./script.sh test
脚本会输出:
You entered: test
9. 管道和重定向
9.1 重定向
重定向可以将命令的输入或输出导向到文件或其他设备。
-
输出重定向
:使用
>
符号将命令的输出重定向到文件。例如,将
ls
命令的输出保存到
output.txt
文件中:
ls > output.txt
-
追加输出重定向
:使用
>>符号将命令的输出追加到文件末尾。例如,将新的ls输出追加到output.txt文件:
ls >> output.txt
-
输入重定向
:使用
<符号将文件内容作为命令的输入。例如,将input.txt文件的内容作为grep命令的输入:
grep "example" < input.txt
9.2 管道
管道(
|
)用于将一个命令的输出作为另一个命令的输入。例如,将
ls
命令的输出通过管道传递给
grep
命令,查找包含“test”的文件:
ls | grep "test"
10. 总结与展望
10.1 总结
BASH shell是Linux系统中一个强大且灵活的工具,它提供了丰富的命令和功能,涵盖了文件操作、文本处理、系统信息查看、脚本编写等多个方面。通过掌握BASH shell,用户可以更高效地控制和管理Linux系统,无论是日常操作、故障排除还是自动化任务都能轻松应对。
10.2 操作流程总结
| 操作 | 步骤 |
|---|---|
| 创建目录 |
输入
mkdir <目录名>
|
| 切换目录 |
输入
cd <目录路径>
|
| 列出目录内容 |
输入
ls
或
ls -l
|
| 删除文件 |
输入
rm <文件名>
|
| 删除目录 |
输入
rm -r <目录名>
|
| 查看文件内容 |
输入
cat <文件名>
或
less <文件名>
|
| 查找文本 |
输入
grep "<文本>" <文件名>
|
| 查看系统信息 |
输入
uname -a
|
| 查看磁盘使用情况 |
输入
df -h
|
| 查看内存使用情况 |
输入
free -m
|
| 创建脚本 | 使用编辑器创建文件,编写脚本内容 |
| 赋予脚本执行权限 |
输入
chmod +x <脚本名>
|
| 运行脚本 |
输入
./<脚本名>
|
| 输出重定向 |
输入
<命令> > <文件名>
|
| 追加输出重定向 |
输入
<命令> >> <文件名>
|
| 输入重定向 |
输入
<命令> < <文件名>
|
| 使用管道 |
输入
<命令1> | <命令2>
|
10.3 流程图
graph TD;
A[开始] --> B{操作类型};
B --> C{文件和目录操作};
B --> D{文本处理};
B --> E{系统信息查看};
B --> F{脚本编写};
B --> G{管道和重定向};
C --> H[创建目录];
C --> I[切换目录];
C --> J[列出目录内容];
C --> K[删除文件和目录];
H --> L[输入mkdir <目录名>];
I --> M[输入cd <目录路径>];
J --> N[输入ls或ls -l];
K --> O[输入rm <文件名>或rm -r <目录名>];
D --> P[查看文件内容];
D --> Q[查找文本];
P --> R[输入cat <文件名>或less <文件名>];
Q --> S[输入grep "<文本>" <文件名>];
E --> T[查看系统信息];
E --> U[查看磁盘使用情况];
E --> V[查看内存使用情况];
T --> W[输入uname -a];
U --> X[输入df -h];
V --> Y[输入free -m];
F --> Z[创建脚本];
F --> AA[赋予执行权限];
F --> AB[运行脚本];
Z --> AC[使用编辑器创建文件,编写脚本内容];
AA --> AD[输入chmod +x <脚本名>];
AB --> AE[输入./<脚本名>];
G --> AF[重定向];
G --> AG[管道];
AF --> AH[输出重定向];
AF --> AI[追加输出重定向];
AF --> AJ[输入重定向];
AH --> AK[输入<命令> > <文件名>];
AI --> AL[输入<命令> >> <文件名>];
AJ --> AM[输入<命令> < <文件名>];
AG --> AN[输入<命令1> | <命令2>];
随着对BASH shell的深入学习,用户可以进一步探索其高级功能,如函数、循环、条件语句等,从而编写更复杂和强大的脚本,实现更多自动化和高效的任务。同时,不断实践和积累经验也是提高使用BASH shell能力的关键。希望本文能帮助读者更好地理解和掌握BASH shell,在Linux系统中发挥出更大的作用。
超级会员免费看
27

被折叠的 条评论
为什么被折叠?



