Shell是什么
Linux中的Shell命令,就像使用者和计算机对话的"翻译官",只需要掌握一些基本的命令语法,就能让计算机乖乖听话,执行命令。
严格来说,Shell是用户与Linux内核沟通的接口。当输入ls
查看文件时,Shell会把这个简单单词转换成复杂的系统调用。
常见的Shell
在Linux 系统中,常见的Shell 解释器有多种,它们各自具备不同的功能和特性,以满足不同用户的需求。例如:
bash
:最流行的Shell,Bash 是 Linux 操作系统默认的 Shell 解释器。sh
:是早期Unix系统的标准 Shell。现在大多数情况下已经被bash 取代,但在某些环境中仍然存在。zsh
:是一种非常强大且可高度定制的 Shell,它结合了许多其他 Shell 的优秀特性,并加入了自己的创新功能。提供了智能补全、拼写校正、模块化支持等功能,适合高级用户和开发者使用。ksh
:一种专为提高效率而设计的 Shell。因为其性能优越而在商业环境中得到应用。csh
和tcsh
:csh
类似于 C 编程语言的语法结构。tcsh
则是对csh
的扩展,提供了更好的交互式编辑和其他增强功能。fish
:注重用户体验,它的特点包括语法高亮显示、Web 配置界面以及对新手友好的提示信息等。
这些 Shell 各具特色,选择哪一种取决于个人偏好及具体应用场景。对于大多数 Linux 用户来说,bash
通常是首选。
相关示例 示例:①检查当前使用的shell;②列出系统中安装的所有可用shell。
bash
echo $SHELL # ①检查当前使用的shell
# 运行结果:`/bin/bash`
cat /etc/shells # ②列出系统中安装的所有可用shell
# 运行结果
# /bin/sh
# /bin/bash
# /usr/bin/sh
# /usr/bin/bash
Shell命令的语法规则
Shell命令有自己的语法规则。基本格式可以拆解为:
css
命令名 [选项] [参数1] [参数2]......
语法规则说明:
- 命令名、选项和参数之间都用空格间隔,连续的空格会被shell解释为单个空格。
- 命令名由小写的英文字母构成,其往往是表示相应功能的英文单词或单词的缩写。
-
\]表示可选内容。
- 参数是命令的操作对象,如文件、目录、用户和进程等。
相关示例 示例:①查看当前目录内容;②查看详细信息;③查看指定目录(/home)详细信息
bash
ls # ①查看当前目录内容(不带任何选项和参数)
# 运行结果
# anaconda-ks.cfg
ls -l # ②查看详细信息(-l是选项)
# 运行结果
# -rw-------. 1 root root 1228 8月 26 2021 anaconda-ks.cfg
ls -l /home # 查看指定目录(/home)详细信息,/home是参数
# 运行结果
# 总用量 0
ls -la
# 运行结果
# 总用量 36
# dr-xr-x---. 3 root root 180 8月 26 2021 .
# dr-xr-xr-x. 17 root root 244 12月 7 2024 ..
# -rw-------. 1 root root 1228 8月 26 2021 anaconda-ks.cfg
# -rw-------. 1 root root 1073 12月 6 2024 .bash_history
# -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
# -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
# -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
# -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
# drwxr-----. 3 root root 19 8月 26 2021 .pki
# -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
# -rw-------. 1 root root 1108 8月 26 2021 .viminfo
实用技巧 :选项可以组合使用。比如ls -la
相当于同时使用了-l
(长格式)和-a
(显示所有)两个选项。
命令使用技巧
-
历史命令重用
按上下箭头可以翻找之前输入的命令。输入
history
能看到所有历史命令,用!编号
可以直接执行某条历史命令。 -
命令补全
输入命令前几个字母后按Tab键,Shell会尝试补全命令或文件名。比如输入
tou
后按Tab,可能补全为touch
。如果匹配多个可能,按两次Tab会显示所有选项。 -
通配符
*
可以匹配任意字符,比如rm *.txt
会删除所有txt文件。?
匹配单个字符,rm doc?.txt
会匹配doc1.txt但不会匹配doc10.txt。 -
命令组合
用
&&
可以连续执行命令,比如:bashmkdir new_folder && cd new_folder
这表示"先创建文件夹,如果成功就进入该文件夹"。
常见错误及解决方法
-
权限不足
执行命令时出现"Permission denied",表示当前用户没有足够的权限访问某个文件或目录;在某些情况下,可能需要切换到具有足够权限的用户(如 root)进行操作。 解决方法有两个:
- 用
sudo
临时获取管理员权限(需要密码) - 用
chmod
修改文件权限
- 用
-
文件不存在
当出现"No such file or directory"时,首先需要确认文件或目录的路径是否正确。 解决方法:先用
pwd
确认当前位置,再用ls
查看目录内容。 -
误删文件
Linux没有回收站,
rm
删除的文件很难恢复。建议使用-i
选项询问是否确认删除。bashrm -i important.txt
练习题
理论题
- 如果想查看
/var
目录的磁盘使用情况,应该用什么命令?
A.ls /var
B.du /var
C.cd /var
答案:B 。du
(disk usage)命令用于查看磁盘使用情况,ls
只是列出文件,cd
是切换目录。 - 解释这条命令的作用:
chmod +x script.sh
答案:。这条命令给script.sh文件添加可执行权限。"+x"表示给所有者、所属组和其他用户都添加执行权限。
实操题
操作要求 : 使用root用户登录Linux系统。实现如下命令;①在当前目录下创建一个名为"test"的目录;②切换到在"test"的目录;③在"test"的目录中新建两个文件:note1.txt和note2.txt;④用一条命令查看这两个文件的详细信息;⑤删除note1.txt,但让系统在删除前询问确认;⑥再次尝试查看这两个文件的详细信息。 参考命令:
bash
mkdir test # ①在当前目录下创建一个名为"test"的目录
cd test # ②切换到在"test"的目录
touch note1.txt note2.txt # ;③在"test"的目录中新建两个文件:note1.txt和note2.txt
ls -l note*.txt # ④用一条命令查看这两个文件的详细信息
rm -i note1.txt # ⑤删除note1.txt,但让系统在删除前询问确认
# rm:是否删除普通空文件 "note1.txt"?y
ls -l note*.txt # ⑥再次尝试查看这两个文件的详细信息,结果只剩下一个文件。